brepjs-cad 0.145.0 → 0.146.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 +43 -0
- package/package.json +1 -1
- package/viewer/dist/assets/{brepjs-BLdEz6Kc.js → brepjs-hbOuqw9u.js} +1 -1
- package/viewer/dist/assets/{index-DZtSxBvP.js → index-B88Qx2Yb.js} +1 -1
- package/viewer/dist/assets/{kernelWorker-I47G6iFU.js → kernelWorker-TfyT4uug.js} +1 -1
- package/viewer/dist/index.html +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,48 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.146.0](https://github.com/andymai/brepjs/compare/brepjs-cad-v0.145.1...brepjs-cad-v0.146.0) (2026-08-17)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Features
|
|
7
|
+
|
|
8
|
+
* **brepjs-cad:** add airfoils.md feature recipe (swept fans/props/impellers) ([#1566](https://github.com/andymai/brepjs/issues/1566)) ([8c786db](https://github.com/andymai/brepjs/commit/8c786db69ead59edcdc9d0f8525e43324552e4db))
|
|
9
|
+
* **brepjs-cad:** aimed section cut for the design judge (Phase 3) ([#1543](https://github.com/andymai/brepjs/issues/1543)) ([40e5acd](https://github.com/andymai/brepjs/commit/40e5acd54318d768dc5a620403d17d43e358e698))
|
|
10
|
+
* **brepjs-cad:** decomposed, cross-checked design-judge rubric (Phase 1.5) ([#1539](https://github.com/andymai/brepjs/issues/1539)) ([8059b6d](https://github.com/andymai/brepjs/commit/8059b6d701ae5980e6bb11f51695aa102fe2bb43))
|
|
11
|
+
* **brepjs-cad:** deterministic body/interference metrics for the design judge (Phase 1) ([#1531](https://github.com/andymai/brepjs/issues/1531)) ([d296b54](https://github.com/andymai/brepjs/commit/d296b545f2d7084b861683d61b626ace4747a371))
|
|
12
|
+
* **brepjs-cad:** grade judge quality against a reference exemplar ([#1731](https://github.com/andymai/brepjs/issues/1731)) ([9d4aaeb](https://github.com/andymai/brepjs/commit/9d4aaeb8e4830c6be78668854730367194b6a9e5))
|
|
13
|
+
* **brepjs-cad:** kernel-anchored Set-of-Marks for the design judge ([#1545](https://github.com/andymai/brepjs/issues/1545)) ([2b6f5b4](https://github.com/andymai/brepjs/commit/2b6f5b436f2a73c96747cc71f83afc8715765cd0))
|
|
14
|
+
* **brepjs-cad:** reliable internal-bore detection for the design judge (keystone) ([#1542](https://github.com/andymai/brepjs/issues/1542)) ([0d780c3](https://github.com/andymai/brepjs/commit/0d780c3b73c2551dab2f04a6ff31bf9ec8cae2ab))
|
|
15
|
+
* **brepjs-cad:** surface fragmentation in verify --check (the [#1](https://github.com/andymai/brepjs/issues/1) design defect) ([#1560](https://github.com/andymai/brepjs/issues/1560)) ([45a4f6e](https://github.com/andymai/brepjs/commit/45a4f6e268331b7816cd9957fbdab4c0893b2000))
|
|
16
|
+
* **brepjs-cad:** xray internal-reveal shot for the design judge (Phase 2a) ([#1540](https://github.com/andymai/brepjs/issues/1540)) ([eca5bc9](https://github.com/andymai/brepjs/commit/eca5bc9ad20fc7947132d647952245cfe466a7f4))
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
### Bug Fixes
|
|
20
|
+
|
|
21
|
+
* **brepjs-cad:** add a triangular-gusset recipe to the implement skill (bracket/enclosure eval) ([#1571](https://github.com/andymai/brepjs/issues/1571)) ([346d042](https://github.com/andymai/brepjs/commit/346d0423fefa3bd163f4075f69bf96d478543bf5))
|
|
22
|
+
* **brepjs-cad:** add the "realize the designed object" bar to the implement skill ([#1563](https://github.com/andymai/brepjs/issues/1563)) ([e150357](https://github.com/andymai/brepjs/commit/e1503570aaf271ebef1e39d48be9c70a5ffe8f03))
|
|
23
|
+
* **brepjs-cad:** bore detector misses full-cylinder through-holes ([#1551](https://github.com/andymai/brepjs/issues/1551)) ([#1586](https://github.com/andymai/brepjs/issues/1586)) ([b6d61eb](https://github.com/andymai/brepjs/commit/b6d61eb6d88e2e4a3aa1c55b78dc2e76315ebc02))
|
|
24
|
+
* **brepjs-cad:** close gear-teeth edge cases found by /eval-skill (ring, worm tip relief, GT2) ([#1548](https://github.com/andymai/brepjs/issues/1548)) ([4bd0494](https://github.com/andymai/brepjs/commit/4bd049401f3affcc3f38e3a31bb9520653a3e89c))
|
|
25
|
+
* **brepjs-cad:** code + hint the degenerate-edge (duplicate-vertex) verify failure ([#1550](https://github.com/andymai/brepjs/issues/1550)) ([502dffc](https://github.com/andymai/brepjs/commit/502dffc4a2ae495ae5c98b0c7966721abe0d5f48))
|
|
26
|
+
* **brepjs-cad:** correct spur-gear example flanks + add root fillet ([#1528](https://github.com/andymai/brepjs/issues/1528)) ([6971c6b](https://github.com/andymai/brepjs/commit/6971c6befa1fea36a8c2f3ee89c4aa20946020c7))
|
|
27
|
+
* **brepjs-cad:** exploded-joint legibility + disjoint-compound caveat (basics eval) ([#1565](https://github.com/andymai/brepjs/issues/1565)) ([9d06121](https://github.com/andymai/brepjs/commit/9d0612111a595e57fcfca6fd191ed9169fc2c062))
|
|
28
|
+
* **brepjs-cad:** handle brepjs/playground refs + summarize body relations in the digest ([#1547](https://github.com/andymai/brepjs/issues/1547)) ([b0acef0](https://github.com/andymai/brepjs/commit/b0acef0ad80cdd61f0d2683f1e6d0ece0cae028e))
|
|
29
|
+
* **brepjs-cad:** heal 6 implement-skill findings from the full-flywheel re-run ([#1568](https://github.com/andymai/brepjs/issues/1568)) ([f63bf3d](https://github.com/andymai/brepjs/commit/f63bf3d5a0aa638d06e11dd7e2c27e84dbf74746))
|
|
30
|
+
* **brepjs-cad:** heal implement + polish skills from clean-room eval ([#1526](https://github.com/andymai/brepjs/issues/1526)) ([0645e16](https://github.com/andymai/brepjs/commit/0645e163e1d8759c95406d0f9526d0aa3b5dd480))
|
|
31
|
+
* **brepjs-cad:** heal implement skill — deep-stack bounds extremes aren't datums ([#1529](https://github.com/andymai/brepjs/issues/1529)) ([5ed366f](https://github.com/andymai/brepjs/commit/5ed366f266b3e6e50ae4b54d5779aa05453e894a))
|
|
32
|
+
* **brepjs-cad:** heal implement skill from the eval flywheel (3 findings) ([#1552](https://github.com/andymai/brepjs/issues/1552)) ([51def82](https://github.com/andymai/brepjs/commit/51def82db4e0600e85f45e4dd828cc9caee58d15))
|
|
33
|
+
* **brepjs-cad:** heal implement skill from the full-corpus eval flywheel (4 findings) ([#1554](https://github.com/andymai/brepjs/issues/1554)) ([3cfc28e](https://github.com/andymai/brepjs/commit/3cfc28ed8b82c46330f1d75f1e98c13fd4d65a06))
|
|
34
|
+
* **brepjs-cad:** make blind-judge reference adaptation render multi-body parts at scale ([#1530](https://github.com/andymai/brepjs/issues/1530)) ([18d4523](https://github.com/andymai/brepjs/commit/18d4523c85e1b22496bb5c0b8fb382a1146429c6))
|
|
35
|
+
* **brepjs-cad:** polish skill — bosses on shells must fuse, or they float (eval finding) ([#1553](https://github.com/andymai/brepjs/issues/1553)) ([07cbf93](https://github.com/andymai/brepjs/commit/07cbf93e47fbf880df53bc2a1cee05bf0d17e2d5))
|
|
36
|
+
* **brepjs-cad:** teach worm-wheel and rack tooth recipes; fix gear-build contradiction ([#1544](https://github.com/andymai/brepjs/issues/1544)) ([b0da85f](https://github.com/andymai/brepjs/commit/b0da85f218d463e0f1ef0ca8760cec54b4814b02))
|
|
37
|
+
* **core:** bump occt-wasm to 3.7.0 with borrowed adjacency handles ([#1821](https://github.com/andymai/brepjs/issues/1821)) ([4b76974](https://github.com/andymai/brepjs/commit/4b76974833f2d9900740fffcec2dd589de952ff9))
|
|
38
|
+
* **deps:** clear all remaining OSV findings to get main green ([#1917](https://github.com/andymai/brepjs/issues/1917)) ([2456ef4](https://github.com/andymai/brepjs/commit/2456ef40860129a59027d055978c002004104925))
|
|
39
|
+
* **release:** unbreak Vercel — repin brepjs-cad to brepjs >=18.0.0 ([#1711](https://github.com/andymai/brepjs/issues/1711)) ([78c780a](https://github.com/andymai/brepjs/commit/78c780a3ab2fcc78f26b32029df72795582e145c))
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
### Reverts
|
|
43
|
+
|
|
44
|
+
* restore brepjs-cad brepjs dep floor — "*" did not fix the release churn ([#1854](https://github.com/andymai/brepjs/issues/1854)) ([194caba](https://github.com/andymai/brepjs/commit/194cabaa6c7196ee38a3b3ddaa68a881909ae263))
|
|
45
|
+
|
|
3
46
|
## [0.145.0](https://github.com/andymai/brepjs/compare/brepjs-cad-v0.144.0...brepjs-cad-v0.145.0) (2026-08-17)
|
|
4
47
|
|
|
5
48
|
|
package/package.json
CHANGED
|
@@ -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 VX(e){let t=[],n=/([MmLlHhVvCcSsQqTtAaZz])([^MmLlHhVvCcSsQqTtAaZz]*)/g,r;for(;(r=n.exec(e))!==null;){let e=r[1]??``,n=(r[2]??``).trim(),i=[];if(n){let e=/[+-]?(?:\d+\.?\d*|\.\d+)(?:[eE][+-]?\d+)?/g,t;for(;(t=e.exec(n))!==null;)i.push(parseFloat(t[0]))}t.push({command:e,args:i})}return t}function HX(e){return[e[0],-e[1]]}function UX(e,t,n,r){let i=0;for(;i<e.length;){let a=(n?t.cx:0)+(e[i]??0),o=(n?t.cy:0)+(e[i+1]??0);i===0?(t.sx=a,t.sy=o):r.push(nR(HX([t.cx,t.cy]),HX([a,o]))),t.cx=a,t.cy=o,i+=2}}function WX(e,t,n,r){let i=0;for(;i<e.length;){let a=(n?t.cx:0)+(e[i]??0),o=(n?t.cy:0)+(e[i+1]??0);r.push(nR(HX([t.cx,t.cy]),HX([a,o]))),t.cx=a,t.cy=o,i+=2}}function GX(e,t,n,r){for(let i of e){let e=n?t.cx+i:i;r.push(nR(HX([t.cx,t.cy]),HX([e,t.cy]))),t.cx=e}}function KX(e,t,n,r){for(let i of e){let e=n?t.cy+i:i;r.push(nR(HX([t.cx,t.cy]),HX([t.cx,e]))),t.cy=e}}function qX(e,t,n,r){let i=0;for(;i+5<e.length;){let a=n?t.cx:0,o=n?t.cy:0,s=a+(e[i]??0),c=o+(e[i+1]??0),l=a+(e[i+2]??0),u=o+(e[i+3]??0),d=a+(e[i+4]??0),f=o+(e[i+5]??0);r.push(cR(HX([t.cx,t.cy]),[HX([s,c]),HX([l,u])],HX([d,f]))),t.prevControlX=l,t.prevControlY=u,t.cx=d,t.cy=f,i+=6}}function JX(e,t,n,r){let i=0;for(;i+3<e.length;){let a=n?t.cx:0,o=n?t.cy:0,s=t.lastCmd,c=s===`C`||s===`S`?2*t.cx-t.prevControlX:t.cx,l=s===`C`||s===`S`?2*t.cy-t.prevControlY:t.cy,u=a+(e[i]??0),d=o+(e[i+1]??0),f=a+(e[i+2]??0),p=o+(e[i+3]??0);r.push(cR(HX([t.cx,t.cy]),[HX([c,l]),HX([u,d])],HX([f,p]))),t.prevControlX=u,t.prevControlY=d,t.cx=f,t.cy=p,t.lastCmd=`S`,i+=4}}function YX(e,t,n,r){let i=0;for(;i+3<e.length;){let a=n?t.cx:0,o=n?t.cy:0,s=a+(e[i]??0),c=o+(e[i+1]??0),l=a+(e[i+2]??0),u=o+(e[i+3]??0);r.push(cR(HX([t.cx,t.cy]),[HX([s,c])],HX([l,u]))),t.prevControlX=s,t.prevControlY=c,t.cx=l,t.cy=u,i+=4}}function XX(e,t,n,r){let i=0;for(;i+1<e.length;){let a=n?t.cx:0,o=n?t.cy:0,s=t.lastCmd,c=s===`Q`||s===`T`?2*t.cx-t.prevControlX:t.cx,l=s===`Q`||s===`T`?2*t.cy-t.prevControlY:t.cy,u=a+(e[i]??0),d=o+(e[i+1]??0);r.push(cR(HX([t.cx,t.cy]),[HX([c,l])],HX([u,d]))),t.prevControlX=c,t.prevControlY=l,t.cx=u,t.cy=d,t.lastCmd=`T`,i+=2}}function ZX(e,t,n,r,i){let a=Math.max(n,r),o=i?1:-1,s=t+2*o*a,c=[e-o*a,t+o*a],l=[e+o*a,t+o*a];try{return[rR(HX([e,t]),HX(c),HX([e,s])),rR(HX([e,s]),HX(l),HX([e,t]))]}catch{return[]}}function QX(e,t,n,r,i,a,o,s){let c=.5,l=e+c*(n-e),u=t+c*(r-t),d=n-e,f=r-t,p=Math.sqrt(d*d+f*f),m=Math.max(i,a),h=p/2,g=h<m?m-Math.sqrt(m*m-h*h):m,_=(o===s?-1:1)*(s?1:-1),v=-f/p,y=d/p,b=l+_*g*v,x=u+_*g*y;try{return[rR(HX([e,t]),HX([b,x]),HX([n,r]))]}catch{return[nR(HX([e,t]),HX([n,r]))]}}function $X(e,t,n,r){let i=0;for(;i+6<e.length;){let a=n?t.cx:0,o=n?t.cy:0,s=Math.abs(e[i]??0),c=Math.abs(e[i+1]??0),l=(e[i+3]??0)!==0,u=(e[i+4]??0)!==0,d=a+(e[i+5]??0),f=o+(e[i+6]??0);if(s===0||c===0)r.push(nR(HX([t.cx,t.cy]),HX([d,f])));else{let e=d-t.cx,n=f-t.cy;Math.sqrt(e*e+n*n)<1e-10?r.push(...ZX(t.cx,t.cy,s,c,u)):r.push(...QX(t.cx,t.cy,d,f,s,c,l,u))}t.cx=d,t.cy=f,i+=7}}function eZ(e,t){(Math.abs(e.cx-e.sx)>1e-10||Math.abs(e.cy-e.sy)>1e-10)&&t.push(nR(HX([e.cx,e.cy]),HX([e.sx,e.sy]))),e.cx=e.sx,e.cy=e.sy}function tZ(e){let t=VX(e),n=[],r={cx:0,cy:0,sx:0,sy:0,prevControlX:0,prevControlY:0,lastCmd:``};for(let{command:e,args:i}of t){let t=e===e.toLowerCase(),a=e.toUpperCase();switch(a){case`M`:UX(i,r,t,n);break;case`L`:WX(i,r,t,n);break;case`H`:GX(i,r,t,n);break;case`V`:KX(i,r,t,n);break;case`C`:qX(i,r,t,n);break;case`S`:JX(i,r,t,n);break;case`Q`:YX(i,r,t,n);break;case`T`:XX(i,r,t,n);break;case`A`:$X(i,r,t,n);break;case`Z`:eZ(r,n)}a!==`S`&&a!==`T`&&(r.lastCmd=a)}return n}function nZ(e){try{let t=tZ(e);return t.length===0?z(yD(`SVG_EMPTY_PATH`,`SVG path produced no curves`)):R(new ER(t))}catch(e){return z(yD(`SVG_PARSE_FAILED`,`Failed to parse SVG path: ${e instanceof Error?e.message:String(e)}`))}}function rZ(e){try{let t=/\bd\s*=\s*(?:"([^"]*)"|'([^']*)')/,n=[],r=e.toLowerCase(),i=0;for(;i<r.length;){let a=r.indexOf(`<path `,i);if(a===-1)break;let o=e.indexOf(`>`,a);if(o===-1)break;let s=e.slice(a,o+1);i=o+1;let c=t.exec(s),l=c?.[1]??c?.[2];if(!l)continue;let u=nZ(l);u.ok&&n.push(u.value)}return n.length===0?z(yD(`SVG_NO_PATHS`,`No <path> elements found in SVG`)):R(n)}catch(e){return z(yD(`SVG_IMPORT_FAILED`,`Failed to import SVG: ${e instanceof Error?e.message:String(e)}`))}}function iZ(e,t){try{let n=F(),r=e.map(e=>({shape:e.shape.wrapped,name:e.name,color:e.color?[...e.color]:void 0}));return R(n.exportSTEPConfigured(r,t))}catch(e){return z(yD(H.STEP_EXPORT_CONFIGURED_FAILED,`Configured STEP export failed`,e))}}async function aZ(e){try{let t=await e.arrayBuffer(),n=F().importSTEP(t);if(n.length===0)return z(yD(`STEP_IMPORT_FAILED`,`STEP file contains no valid geometry`));for(let e=1;e<n.length;e++){let t=n[e];t&&F().dispose(t)}return R(I(n[0]))}catch(e){return z(yD(`STEP_IMPORT_FAILED`,`Failed to load STEP file`,e))}}async function oZ(e){try{let t=await e.arrayBuffer(),n=F().importSTL(t);return n.IsNull()?z(yD(`STL_IMPORT_FAILED`,`Failed to create solid from STL mesh`)):R(I(n))}catch(e){return z(yD(`STL_IMPORT_FAILED`,`Failed to load STL file`,e))}}async function sZ(e){try{let t=await e.arrayBuffer(),n=F().importIGES(t);if(n.length===0)return z(yD(`IGES_IMPORT_FAILED`,`IGES file contains no valid geometry`));for(let e=1;e<n.length;e++){let t=n[e];t&&F().dispose(t)}return R(I(n[0]))}catch(e){return z(yD(`IGES_IMPORT_FAILED`,`Failed to load IGES file`,e))}}function cZ(e,t,n={}){let r=fJ(e,t);return new sJ((typeof n.plane==`string`||n.plane===void 0?r.sketchOnPlane(n.plane,n.origin):r.sketchOnPlane(n.plane)).map(e=>Array.isArray(e)?new Wq(e.map(Gq)):Gq(e)))}function lZ(e,t){let n=t?.fontSize??1,r=uJ(t?.fontFamily);if(!r)return z(W(H.NO_FONT_LOADED,`No font loaded. Call loadFont() first.`,void 0,void 0,`Load a font with loadFont() before calling textMetrics()`));let i=r.getAdvanceWidth(e,n),a=n/r.unitsPerEm,o=r.ascender*a,s=r.descender*a;return R({width:i,height:o-s,ascender:o,descender:s})}function uZ(e){let t=e?.fontSize??1,n=uJ(e?.fontFamily);if(!n)return z(W(H.NO_FONT_LOADED,`No font loaded. Call loadFont() first.`,void 0,void 0,`Load a font with loadFont() before calling fontMetrics()`));let r=t/n.unitsPerEm,i=n.ascender*r,a=n.descender*r,o=(n.tables?.os2?.sTypoLineGap??0)*r;return R({ascender:i,descender:a,unitsPerEm:n.unitsPerEm,lineHeight:i-a+o})}function dZ(e){return e.type===`init`}function fZ(e){return e.type===`operation`}function pZ(e){return e.type===`dispose`}function mZ(e){return e.type===`batch`}function hZ(e){return e.success}function gZ(e){return!e.success}function _Z(){return{pending:new Map}}function vZ(e,t){let n=new Map(e.pending);return n.set(t.id,t),{pending:n}}function yZ(e,t){let n=e.pending.get(t);if(!n)return{queue:e,task:void 0};let r=new Map(e.pending);return r.delete(t),{queue:{pending:r},task:n}}function bZ(e){return e.pending.size}function xZ(e){return e.pending.size===0}function SZ(e,t){for(let n of e.pending.values())n.reject(t);return{pending:new Map}}function CZ(e,t){let n=t.data,r=e.get(n.id);if(r){if(e.delete(n.id),hZ(n)){let e={};n.resultBrep!==void 0&&(e.resultBrep=n.resultBrep),n.resultData!==void 0&&(e.resultData=n.resultData),r.resolve(e)}else r.reject(Error(n.error))}}function wZ(e){let{worker:t,wasmUrl:n}=e,r=new Map,i=!1;function a(){return crypto.randomUUID()}function o(e){CZ(r,e)}t.addEventListener(`message`,o);function s(e){return i?Promise.reject(Error(`WorkerClient has been disposed`)):new Promise((n,i)=>{r.set(e.id,{resolve:n,reject:i}),t.postMessage(e)})}return{async init(){await s({id:a(),type:`init`,...n===void 0?{}:{wasmUrl:n}})},async execute(e,t,n){return s({id:a(),type:`operation`,operation:e,shapesBrep:t,parameters:n})},executeBatch(e){let t=e.length;return s({id:a(),type:`batch`,operations:e}).then(e=>{let n=e.resultData;if(!Array.isArray(n)||n.length!==t)throw Error(`Invalid batch response: expected ${t} results`);return n})},dispose(){i=!0;for(let e of r.values())e.reject(Error(`WorkerClient disposed`));r.clear(),t.removeEventListener(`message`,o);let e={id:a(),type:`dispose`};t.postMessage(e)}}}function TZ(){return{operations:new Map}}function EZ(e,t,n){let r=new Map(e.operations);return r.set(t,n),{operations:r}}function DZ(e){return e instanceof Error?e.message:String(e)}function OZ(e,t,n,r){let i=e.operations.get(t);if(!i)return{success:!1,error:`Unknown operation: ${t}`};try{let e=i(n,r);return{success:!0,...e.resultBrep===void 0?{}:{resultBrep:e.resultBrep},...e.resultData===void 0?{}:{resultData:e.resultData}}}catch(e){return{success:!1,error:DZ(e)}}}function kZ(e,t){return t.success?{id:e,success:!0,...t.resultBrep===void 0?{}:{resultBrep:t.resultBrep},...t.resultData===void 0?{}:{resultData:t.resultData}}:{id:e,success:!1,error:t.error??`operation failed`}}function AZ(e,t){let n=globalThis;n.onmessage=async r=>{let i=r.data;if(dZ(i)){try{await t(i.wasmUrl);let e={id:i.id,success:!0};n.postMessage(e)}catch(e){let t={id:i.id,success:!1,error:DZ(e)};n.postMessage(t)}return}if(fZ(i)){let t=OZ(e,i.operation,i.shapesBrep,i.parameters);n.postMessage(kZ(i.id,t));return}if(mZ(i)){let t=i.operations.map(t=>OZ(e,t.operation,t.shapesBrep,t.params)),r={id:i.id,success:!0,resultData:t};n.postMessage(r);return}if(pZ(i)){let e={id:i.id,success:!0};n.postMessage(e),n.close?.()}}}function jZ(e){let{workers:t,wasmUrl:n}=e;if(t.length===0)throw Error(`createWorkerPool requires at least one worker`);let r=t.map(e=>({client:wZ({worker:e,...n===void 0?{}:{wasmUrl:n}}),inFlight:0})),i=!1;function a(){return r.reduce((e,t)=>t.inFlight<e.inFlight?t:e)}function o(e,t,n){if(i)return Promise.reject(Error(`WorkerPool has been disposed`));let r=a();return r.inFlight+=1,r.client.execute(e,t,n).finally(()=>{--r.inFlight})}function s(){if(!i){i=!0;for(let e of r)e.client.dispose()}}return{size:r.length,async init(){try{await Promise.all(r.map(e=>e.client.init()))}catch(e){throw s(),e}},execute:o,executeBatch(e){return Promise.all(e.map(e=>o(e.operation,e.shapesBrep,e.params)))},inFlight(){return r.map(e=>e.inFlight)},dispose:s}}var MZ=Object.defineProperty,NZ=(e,t)=>{let n={};for(var r in e)MZ(n,r,{get:e[r],enumerable:!0});return t||MZ(n,Symbol.toStringTag,{value:`Module`}),n};function PZ(e){return`projectEdges`in e}function FZ(e){return`sketchNew`in e&&`sketchDof`in e}var IZ=1,LZ=2;function RZ(e,t){t===`commonFace`&&e.SetGlue(IZ),t===`sameFace`&&e.SetGlue(LZ)}function zZ(e){return typeof e==`number`}function BZ(e){if(typeof e==`number`)return!0;if(typeof e==`object`&&e){let t=e;return`distances`in t&&Array.isArray(t.distances)&&`selectedFace`in t||`distance`in t&&`angle`in t&&`selectedFace`in t}return!1}function VZ(e){return typeof e==`number`?!0:Array.isArray(e)&&e.length===2?e.every(zZ):!1}function HZ(e,t){let n=n=>{let r=e.findAll(n);if(r.length===0)return[];let i=0,a=NO(cO(jk(r)),t);for(let e=1;e<r.length;e++){let n=NO(cO(Ak(r,e)),t);n<a&&(a=n,i=e)}return[Ak(r,i)]},r=e=>{let t=n(e);return t.length===0?z(bD(`FINDER_NOT_UNIQUE`,`Finder expected a unique match but found 0 element(s)`)):R(jk(t))};return{...e,findAll:n,findUnique:r}}function UZ(e){return kL(`vertex`,e,UZ,(t,n)=>({nearestTo:t=>HZ(UZ(e),t),atPosition:(e,t=1e-4)=>n(n=>NO(cO(n),e)<t),withinBox:(e,t)=>n(n=>{let r=cO(n);return r[0]>=e[0]-1e-6&&r[0]<=t[0]+1e-6&&r[1]>=e[1]-1e-6&&r[1]<=t[1]+1e-6&&r[2]>=e[2]-1e-6&&r[2]<=t[2]+1e-6}),atDistance:(e,t=[0,0,0],r=1e-4)=>n(n=>{let i=cO(n);return Math.abs(NO(i,t)-e)<r})}))}function WZ(){return UZ([])}var GZ=new Map,KZ=null,qZ=null;function JZ(e,t){GZ.set(e,t),KZ||=e,e===KZ&&(qZ=t)}function YZ(e){if(!e&&qZ)return qZ;let t=e??KZ;if(!t)throw Error(`brepjs voxel engine not initialized. Call initVoxel() (or registerVoxel()) before using voxel operations.`);let n=GZ.get(t);if(!n)throw Error(`brepjs: voxel engine '${t}' is not registered.`);return n}function XZ(){return KZ}function ZZ(e,t=`voxel`){JZ(t,e),KZ=t,qZ=e}function QZ(e){if(e.vertices.length%3!=0)return W(`VOXEL_INVALID_MESH`,`mesh.vertices length must be a multiple of 3 (flat xyz).`);if(e.triangles.length%3!=0)return W(`VOXEL_INVALID_MESH`,`mesh.triangles length must be a multiple of 3.`);let t=e.vertices.length/3;for(let n=0;n<e.triangles.length;n++){let r=e.triangles[n];if(r===void 0||r>=t)return W(`VOXEL_INVALID_TRIANGLE_INDEX`,`triangle index ${r} at position ${n} is out of range for ${t} vertices.`)}return null}function $Z(e,t){return QZ(e)||(t.length%3==0?null:W(`VOXEL_INVALID_QUERIES`,`queries length must be a multiple of 3 (flat xyz).`))}function eQ(e){try{return R(YZ(e))}catch(e){return z(_D(`VOXEL_NOT_INITIALIZED`,e instanceof Error?e.message:`voxel engine not initialized`,e))}}function tQ(e,t,n){let r=$Z(e,t);if(r)return z(r);let i=eQ(n);return B(i)?i:R(i.value.winding_numbers(e.vertices,e.triangles,t))}function nQ(e,t,n){let r=$Z(e,t);if(r)return z(r);let i=eQ(n);if(B(i))return i;let a=i.value.points_inside(e.vertices,e.triangles,t);return R(Array.from(a,e=>e===1))}var rQ=48,iQ=2;function aQ(e,t,n){let r=QZ(e);if(r)return z(r);if(e.vertices.length===0||e.triangles.length===0)return z(W(`VOXEL_EMPTY_MESH`,`repairMesh requires a non-empty triangle mesh.`));let i=t?.resolution??rQ,a=t?.padding??iQ;if(!Number.isInteger(i)||i<1)return z(W(`VOXEL_INVALID_RESOLUTION`,`resolution must be an integer >= 1.`));if(!Number.isInteger(a)||a<1)return z(W(`VOXEL_INVALID_PADDING`,`padding must be an integer >= 1.`));let o=eQ(n);if(B(o))return o;try{try{var s=WT();let t=s.u(o.value.repair_mesh(e.vertices,e.triangles,i,a)),n=t.positions.length/3;return R({vertices:t.positions,normals:t.normals,triangles:t.indices,uvs:new Float32Array(n*2),faceGroups:[{start:0,count:t.indices.length/3,faceHash:0}]})}catch(e){s.e=e}finally{s.d()}}catch(e){return z(vD(`VOXEL_REPAIR_FAILED`,e instanceof Error?e.message:`voxel repair failed (grid too large?).`,e))}}var oQ=.001;function sQ(e,t=oQ){try{let n=bM(e,{tolerance:t});return n.vertices.length===0||n.triangles.length===0?z(vD(`VOXEL_SHAPE_MESH_EMPTY`,`shape tessellated to an empty triangle mesh.`)):R({vertices:n.vertices,triangles:n.triangles})}catch(e){return z(vD(`VOXEL_SHAPE_MESH_FAILED`,e instanceof Error?e.message:`failed to mesh shape for voxel op.`,e))}}var cQ=48,lQ=2,uQ={union:0,intersection:1,difference:2};function dQ(e){let t=e?.resolution??cQ,n=e?.padding??lQ;return!Number.isInteger(t)||t<1?z(W(`VOXEL_INVALID_RESOLUTION`,`resolution must be an integer >= 1.`)):!Number.isInteger(n)||n<1?z(W(`VOXEL_INVALID_PADDING`,`padding must be an integer >= 1.`)):R({resolution:t,padding:n})}function fQ(e){if(e.positions.length===0||e.indices.length===0)return z(vD(`VOXEL_DEGENERATE_RESULT`,`the voxel operation produced an empty mesh (over-shrunk offset or disjoint operands?).`));let t=e.positions.length/3;return R({vertices:e.positions,normals:e.normals,triangles:e.indices,uvs:new Float32Array(t*2),faceGroups:[{start:0,count:e.indices.length/3,faceHash:0}]})}function pQ(e,t,n,r){let i=QZ(e);if(i)return z(i);if(e.vertices.length===0||e.triangles.length===0)return z(W(`VOXEL_EMPTY_MESH`,`offsetMesh requires a non-empty triangle mesh.`));if(!Number.isFinite(t))return z(W(`VOXEL_INVALID_DISTANCE`,`distance must be a finite number.`));let a=dQ(n);if(B(a))return a;let o=eQ(r);if(B(o))return o;try{try{var s=WT();return fQ(s.u(o.value.offset_mesh(e.vertices,e.triangles,t,a.value.resolution,a.value.padding)))}catch(e){s.e=e}finally{s.d()}}catch(e){return z(vD(`VOXEL_OFFSET_FAILED`,e instanceof Error?e.message:`voxel offset failed (grid too large?).`,e))}}function mQ(e,t,n,r){let i=QZ(e);if(i)return z(i);if(e.vertices.length===0||e.triangles.length===0)return z(W(`VOXEL_EMPTY_MESH`,`shellMesh requires a non-empty triangle mesh.`));if(!Number.isFinite(t)||t<=0)return z(W(`VOXEL_INVALID_THICKNESS`,`thickness must be a finite number > 0.`));let a=dQ(n);if(B(a))return a;let o=eQ(r);if(B(o))return o;try{try{var s=WT();return fQ(s.u(o.value.shell_mesh(e.vertices,e.triangles,t,a.value.resolution,a.value.padding)))}catch(e){s.e=e}finally{s.d()}}catch(e){return z(vD(`VOXEL_SHELL_FAILED`,e instanceof Error?e.message:`voxel shell failed (grid too large?).`,e))}}function hQ(e,t,n,r,i){let a=QZ(e);if(a)return z(a);let o=QZ(t);if(o)return z(o);if(e.vertices.length===0||e.triangles.length===0)return z(W(`VOXEL_EMPTY_MESH`,`voxelBoolean requires a non-empty mesh for operand A.`));if(t.vertices.length===0||t.triangles.length===0)return z(W(`VOXEL_EMPTY_MESH`,`voxelBoolean requires a non-empty mesh for operand B.`));let s=uQ[n],c=dQ(r);if(B(c))return c;let l=eQ(i);if(B(l))return l;try{try{var u=WT();return fQ(u.u(l.value.voxel_boolean(e.vertices,e.triangles,t.vertices,t.triangles,s,c.value.resolution,c.value.padding)))}catch(e){u.e=e}finally{u.d()}}catch(e){return z(vD(`VOXEL_BOOLEAN_FAILED`,e instanceof Error?e.message:`voxel boolean failed (grid too large?).`,e))}}function gQ(e,t,n,r){let i=sQ(e);return B(i)?i:pQ(i.value,t,n,r)}function _Q(e,t,n,r){let i=sQ(e);return B(i)?i:mQ(i.value,t,n,r)}function vQ(e,t,n,r,i){let a=sQ(e);if(B(a))return a;let o=sQ(t);return B(o)?o:hQ(a.value,o.value,n,r,i)}var yQ=48,bQ=2,xQ={union:0,intersection:1,difference:2};function SQ(e){let t=e?.resolution??yQ,n=e?.padding??bQ;return!Number.isInteger(t)||t<1?z(W(`VOXEL_INVALID_RESOLUTION`,`resolution must be an integer >= 1.`)):!Number.isInteger(n)||n<1?z(W(`VOXEL_INVALID_PADDING`,`padding must be an integer >= 1.`)):R({resolution:t,padding:n})}function CQ(e){try{var t=WT();let n=e.contour(),{positions:r,normals:i,indices:a}=t.u({value:n,[Symbol.dispose](){n.free()}}).value;if(r.length===0||a.length===0)return z(vD(`VOXEL_DEGENERATE_RESULT`,`the voxel field contoured to an empty mesh (over-shrunk offset or disjoint operands?).`));let o=r.length/3;return R({vertices:r,normals:i,triangles:a,uvs:new Float32Array(o*2),faceGroups:[{start:0,count:a.length/3,faceHash:0}]})}catch(e){t.e=e}finally{t.d()}}function wQ(e){return{raw:e,delete(){e.free()}}}function TQ(e){return EQ(e)}function EQ(e){let t=rE(wQ(e)),n={get value(){return t.value.raw},get disposed(){return t.disposed},[Symbol.dispose](){t[Symbol.dispose]()},boolean(e,t){return this.value.boolean(e.value,xQ[t]),n},offset(e){return this.value.offset(e),n},shell(e){return this.value.shell(e),n},reinit(){return this.value.reinit(),n},contour(){let e=CQ(this.value);if(B(e))throw Error(e.error.message);return e.value}};return n}function DQ(e){return!e.disposed}function OQ(){return z(W(`VOXEL_FIELD_DISPOSED`,`the voxel field handle has been disposed.`))}function kQ(e,t,n){let r=QZ(e);if(r)return z(r);if(e.vertices.length===0||e.triangles.length===0)return z(W(`VOXEL_EMPTY_MESH`,`voxelField requires a non-empty triangle mesh.`));let i=SQ(t);if(B(i))return i;let a=eQ(n);if(B(a))return a;try{return R(EQ(new a.value.VoxelField(e.vertices,e.triangles,i.value.resolution,i.value.padding)))}catch(e){return z(vD(`VOXEL_FIELD_VOXELIZE_FAILED`,e instanceof Error?e.message:`voxel field voxelization failed (grid too large or non-dense?).`,e))}}function AQ(e,t,n,r,i){let a=QZ(e);if(a)return z(a);let o=QZ(t);if(o)return z(o);if(e.vertices.length===0||e.triangles.length===0)return z(W(`VOXEL_EMPTY_MESH`,`voxelBooleanField requires a non-empty mesh for operand A.`));if(t.vertices.length===0||t.triangles.length===0)return z(W(`VOXEL_EMPTY_MESH`,`voxelBooleanField requires a non-empty mesh for operand B.`));let s=SQ(r);if(B(s))return s;let c=eQ(i);if(B(c))return c;try{return R(EQ(c.value.VoxelField.boolean_of(e.vertices,e.triangles,t.vertices,t.triangles,xQ[n],s.value.resolution,s.value.padding)))}catch(e){return z(vD(`VOXEL_FIELD_BOOLEAN_FAILED`,e instanceof Error?e.message:`voxel field boolean failed (grid too large or non-dense?).`,e))}}function jQ(e,t,n){if(!DQ(e)||!DQ(t))return OQ();try{return e.value.boolean(t.value,xQ[n]),R(e)}catch(e){return z(vD(`VOXEL_FIELD_BOOLEAN_FAILED`,e instanceof Error?e.message:`voxel field boolean failed (dim mismatch?).`,e))}}function MQ(e,t){if(!DQ(e))return OQ();if(!Number.isFinite(t))return z(W(`VOXEL_INVALID_DISTANCE`,`distance must be a finite number.`));try{return e.value.offset(t),R(e)}catch(e){return z(vD(`VOXEL_FIELD_OFFSET_FAILED`,e instanceof Error?e.message:`voxel field offset failed.`,e))}}function NQ(e,t){if(!DQ(e))return OQ();if(!Number.isFinite(t)||t<=0)return z(W(`VOXEL_INVALID_THICKNESS`,`thickness must be a finite number > 0.`));try{return e.value.shell(t),R(e)}catch(e){return z(vD(`VOXEL_FIELD_SHELL_FAILED`,e instanceof Error?e.message:`voxel field shell failed.`,e))}}function PQ(e){if(!DQ(e))return OQ();try{return e.value.reinit(),R(e)}catch(e){return z(vD(`VOXEL_FIELD_REINIT_FAILED`,e instanceof Error?e.message:`voxel field reinit failed.`,e))}}function FQ(e){if(!DQ(e))return OQ();try{return CQ(e.value)}catch(e){return z(vD(`VOXEL_FIELD_CONTOUR_FAILED`,e instanceof Error?e.message:`voxel field contour failed.`,e))}}function IQ(e,t,n){let r=sQ(e);return B(r)?r:kQ(r.value,t,n)}function LQ(e,t,n,r,i){let a=sQ(e);if(B(a))return a;let o=sQ(t);return B(o)?o:AQ(a.value,o.value,n,r,i)}var RQ=48,zQ=2;function BQ(e){try{return R(YZ(e))}catch(e){return z(_D(`VOXEL_NOT_INITIALIZED`,e instanceof Error?e.message:`voxel engine not initialized`,e))}}function VQ(e){let t=e?.resolution??RQ,n=e?.padding??zQ;return!Number.isInteger(t)||t<1?z(W(`SDF_INVALID_RESOLUTION`,`resolution must be an integer >= 1.`)):!Number.isInteger(n)||n<1?z(W(`SDF_INVALID_PADDING`,`padding must be an integer >= 1.`)):R({resolution:t,padding:n})}function HQ(e){return{raw:e,delete(){e.free()}}}var UQ={offsetField(e){return WQ(this.value.offset_field(e.value))},roundField(e){return WQ(this.value.round_field(e.value))},shellField(e){return WQ(this.value.shell_field(e.value))},smoothUnionField(e,t){return WQ(this.value.smooth_union_field(e.value,t.value))}};function WQ(e){let t=rE(HQ(e));return{get value(){return t.value.raw},get disposed(){return t.disposed},[Symbol.dispose](){t[Symbol.dispose]()},union(e){return WQ(this.value.union(e.value))},intersection(e){return WQ(this.value.intersection(e.value))},difference(e){return WQ(this.value.difference(e.value))},smoothUnion(e,t){return WQ(this.value.smooth_union(e.value,t))},smoothIntersection(e,t){return WQ(this.value.smooth_intersection(e.value,t))},smoothDifference(e,t){return WQ(this.value.smooth_difference(e.value,t))},offset(e){return WQ(this.value.offset(e))},round(e){return WQ(this.value.round(e))},shell(e){return WQ(this.value.shell(e))},onion(e){return WQ(this.value.onion(e))},...UQ,translate(e,t,n){return WQ(this.value.translate(e,t,n))},rotate(e,t,n,r){return WQ(this.value.rotate(e,t,n,r))},scale(e){return WQ(this.value.scale(e))},rasterize(e){return GQ(this.value,e)},rasterizeIn(e,t){return KQ(this.value,e,t)}}}function GQ(e,t){let n=VQ(t);if(B(n))return n;try{return R(TQ(e.rasterize(n.value.resolution,n.value.padding)))}catch(e){return qQ(e)}}function KQ(e,t,n){let r=VQ(n);if(B(r))return r;let i=JQ(t);if(i)return z(i);try{return R(TQ(e.rasterize_in(t.min[0],t.min[1],t.min[2],t.max[0],t.max[1],t.max[2],r.value.resolution,r.value.padding)))}catch(e){return qQ(e)}}function qQ(e){return z(vD(`SDF_RASTERIZE_FAILED`,e instanceof Error?e.message:`SDF rasterization failed (grid too large?).`,e))}function JQ(e){if(![...e.min,...e.max].every(e=>Number.isFinite(e)))return W(`SDF_INVALID_BOUNDS`,`bounds must be finite numbers.`);for(let t=0;t<3;t++)if(e.max[t]<=e.min[t])return W(`SDF_INVALID_BOUNDS`,`bounds max must exceed min on every axis.`);return null}function YQ(e,t){let n=BQ(t);if(B(n))return n;try{return R(WQ(e(n.value)))}catch(e){return z(vD(`SDF_BUILD_FAILED`,e instanceof Error?e.message:`SDF primitive construction failed.`,e))}}function XQ(e,t){return YQ(t=>t.Sdf.sphere(e),t)}function ZQ(e,t,n,r){return YQ(r=>r.Sdf.box_(e,t,n),r)}function QQ(e,t,n,r,i){return YQ(i=>i.Sdf.rounded_box(e,t,n,r),i)}function $Q(e,t,n){return YQ(n=>n.Sdf.cylinder(e,t),n)}function e$(e,t,n){return YQ(n=>n.Sdf.cone(e,t),n)}function t$(e,t,n,r){return YQ(r=>r.Sdf.capsule(e[0],e[1],e[2],t[0],t[1],t[2],n),r)}function n$(e,t,n){return YQ(n=>n.Sdf.torus(e,t),n)}function r$(e,t,n){return YQ(n=>n.Sdf.plane(e[0],e[1],e[2],t),n)}function i$(e){if(e.length<2)return z(W(`SDF_INVALID_SPINE`,`sweep spine needs at least 2 points.`));let t=new Float64Array(e.length*3);for(let n=0;n<e.length;n++){let r=e[n];if(!r.every(e=>Number.isFinite(e)))return z(W(`SDF_INVALID_SPINE`,`sweep spine coordinates must be finite.`));t[n*3]=r[0],t[n*3+1]=r[1],t[n*3+2]=r[2]}return R(t)}function a$(e,t,n,r){let i=i$(e);if(B(i))return i;let a=n?.closed??!1;return YQ(e=>e.Sdf.sweep(i.value,t.value,a),r)}var o$={gyroid:0,schwarzP:1,diamond:2};function s$(e,t,n,r){let i=o$[e];return i===void 0?z(W(`SDF_INVALID_LATTICE_KIND`,`unknown lattice kind: ${e}`)):YQ(e=>e.Sdf.lattice(i,t.value,n.value),r)}function c$(e,t,n){return YQ(n=>n.Sdf.strut_lattice(e,t.value),n)}function l$(e){return{raw:e,delete(){e.free()}}}function u$(e){let t=rE(l$(e));return{get value(){return t.value.raw},get disposed(){return t.disposed},[Symbol.dispose](){t[Symbol.dispose]()}}}function d$(e,t){let n=BQ(t);if(B(n))return n;try{return R(u$(e(n.value)))}catch(e){return z(vD(`SDF_FIELD_BUILD_FAILED`,e instanceof Error?e.message:`scalar field construction failed.`,e))}}function f$(e,t){return d$(t=>t.ScalarField.constant(e),t)}function p$(e,t,n,r,i,a){return d$(a=>a.ScalarField.axial_ramp(e,t,n,r,i),a)}function m$(e,t,n,r,i,a,o){return d$(o=>o.ScalarField.radial_ramp(e[0],e[1],e[2],t,n,r,i,a),o)}function h$(e,t,n,r){return d$(r=>r.ScalarField.from_sdf(e.value,t,n),r)}function g$(e,t,n,r){return d$(r=>r.ScalarField.clamp(e.value,t,n),r)}var _$={gyroid:0,schwarzP:1,diamond:2},v$=48,y$=2;function b$(e){let t=_$[e.type];if(t===void 0)return z(W(`LATTICE_INVALID_TYPE`,`lattice type must be one of gyroid, schwarzP, diamond (got '${e.type}').`));if(!(e.period>0))return z(W(`LATTICE_INVALID_PERIOD`,`period must be > 0.`));if(!(e.thickness>0))return z(W(`LATTICE_INVALID_THICKNESS`,`thickness must be > 0.`));let n=e.resolution??v$,r=e.padding??y$;return!Number.isInteger(n)||n<1?z(W(`LATTICE_INVALID_RESOLUTION`,`resolution must be an integer >= 1.`)):!Number.isInteger(r)||r<1?z(W(`LATTICE_INVALID_PADDING`,`padding must be an integer >= 1.`)):R({tag:t,period:e.period,thickness:e.thickness,resolution:n,padding:r})}function x$(e){let t=e.positions.length/3;return{vertices:e.positions,normals:e.normals,triangles:e.indices,uvs:new Float32Array(t*2),faceGroups:[{start:0,count:e.indices.length/3,faceHash:0}]}}function S$(e,t,n){let r=QZ(e);if(r)return z(r);if(e.vertices.length===0||e.triangles.length===0)return z(W(`LATTICE_EMPTY_MESH`,`latticeInfill requires a non-empty triangle mesh.`));let i=b$(t);if(B(i))return i;let a=eQ(n);if(B(a))return a;let{tag:o,period:s,thickness:c,resolution:l,padding:u}=i.value;try{try{var d=WT();return R(x$(d.u(a.value.lattice_infill(e.vertices,e.triangles,l,u,o,s,c))))}catch(e){d.e=e}finally{d.d()}}catch(e){return z(vD(`LATTICE_INFILL_FAILED`,e instanceof Error?e.message:`lattice infill failed (grid too large?).`,e))}}function C$(e,t,n){let r=sQ(e);return B(r)?r:S$(r.value,t,n)}function w$(e,t,n){for(let t=0;t<3;t++){let n=e.min[t],r=e.max[t];if(n===void 0||r===void 0||!(n<r))return z(W(`LATTICE_INVALID_BOUNDS`,`bounds.min must be strictly less than bounds.max on every axis (axis ${t}).`))}let r=b$(t);if(B(r))return r;let i=eQ(n);if(B(i))return i;let{tag:a,period:o,thickness:s,resolution:c,padding:l}=r.value,[u,d,f]=e.min,[p,m,h]=e.max;try{try{var g=WT();return R(x$(g.u(i.value.tpms_box(u,d,f,p,m,h,c,l,a,o,s))))}catch(e){g.e=e}finally{g.d()}}catch(e){return z(vD(`TPMS_LATTICE_FAILED`,e instanceof Error?e.message:`tpms lattice failed (grid too large?).`,e))}}function T$(e){return F().createVector3d(e[0],e[1],e[2])}function E$(e){return F().createPoint3d(e[0],e[1],e[2])}function D$(e){return F().createDirection3d(e[0],e[1],e[2])}function O$(e){return[e.X(),e.Y(),e.Z()]}function k$(e){return[e.X(),e.Y(),e.Z()]}function A$(e){return[e.X(),e.Y(),e.Z()]}function j$(e,t){let n=T$(e);try{return t(n)}finally{n.delete()}}function M$(e,t){let n=E$(e);try{return t(n)}finally{n.delete()}}function N$(e,t){let n=D$(e);try{return t(n)}finally{n.delete()}}var P$=.299,F$=.587,I$=.114;function L$(e,t={}){if(e.length<2)return z(W(H.SURFACE_GRID_TOO_SMALL,`surfaceFromGrid: need at least 2 rows, got ${e.length}`));let n=e.length,r=e[0]?.length??0;if(r<2)return z(W(H.SURFACE_GRID_TOO_SMALL,`surfaceFromGrid: need at least 2 columns, got ${r}`));for(let t=0;t<n;t++){let n=e[t];if(!n||n.length!==r)return z(W(H.SURFACE_GRID_JAGGED,`surfaceFromGrid: row ${t} has ${n?.length??0} columns, expected ${r}`))}let{width:i=r-1,depth:a=n-1,scaleZ:o=1}=t,s=i/(r-1),c=a/(n-1);try{return R$(e,n,r,s,c,o)}catch{}try{return z$(e,n,r,s,c,o)}catch(e){let t=e instanceof Error?e.message:String(e);return z(U(H.SURFACE_FAILED,`surfaceFromGrid failed: ${t}`,e))}}function R$(e,t,n,r,i,a){let o=[];for(let s=0;s<t;s++)for(let t=0;t<n;t++){let n=e[s],c=(n?n[t]??0:0)*a;o.push([t*r,s*i,c])}let s=I(F().bsplineSurface(o,t,n));return jE(s)?R(s):(L(s),z(U(H.SURFACE_FAILED,`B-spline surface did not produce a face`)))}function z$(e,t,n,r,i,a){let o=[];for(let s=0;s<t;s++)for(let t=0;t<n;t++){let n=e[s],c=(n?n[t]??0:0)*a;o.push([t*r,s*i,c])}let s=I(F().triangulatedSurface(o,t,n));return jE(s)||ME(s)?R(s):(L(s),z(U(H.SURFACE_FAILED,`surfaceFromGrid: unexpected shape type from sewing`)))}async function B$(e,t={}){let n=t.channel??`luminance`,r=Math.max(1,Math.round(t.downsample??1));if(typeof createImageBitmap!=`function`)return z(yD(H.SURFACE_FAILED,`surfaceFromImage requires createImageBitmap (not available in this environment)`));let i;try{i=await createImageBitmap(e)}catch(e){return z(yD(H.SURFACE_FAILED,`surfaceFromImage: failed to decode image — ${e instanceof Error?e.message:String(e)}`))}let a=i.width,o=i.height;if(a<2||o<2)return i.close(),z(W(H.SURFACE_GRID_TOO_SMALL,`surfaceFromImage: image too small (${a}x${o}), need at least 2x2`));if(typeof OffscreenCanvas!=`function`)return i.close(),z(yD(H.SURFACE_FAILED,`surfaceFromImage requires OffscreenCanvas (not available in this environment)`));let s=new OffscreenCanvas(a,o).getContext(`2d`);if(!s)return i.close(),z(yD(H.SURFACE_FAILED,`surfaceFromImage: could not get 2D canvas context`));s.drawImage(i,0,0),i.close();let c=s.getImageData(0,0,a,o).data,l=[];for(let e=0;e<o;e+=r){let t=[];for(let i=0;i<a;i+=r){let r=(e*a+i)*4,o=c[r]??0,s=c[r+1]??0,l=c[r+2]??0,u;switch(n){case`r`:u=o/255;break;case`g`:u=s/255;break;case`b`:u=l/255;break;default:u=(P$*o+F$*s+I$*l)/255}t.push(u)}l.push(t)}let u={};return t.width!==void 0&&(u.width=t.width),t.depth!==void 0&&(u.depth=t.depth),t.scaleZ!==void 0&&(u.scaleZ=t.scaleZ),L$(l,u)}function V$(e,t){return F().isNull(e.wrapped)?z(W(H.NULL_SHAPE_INPUT,`${t} is a null shape`)):R(void 0)}function H$(e,t={}){if(e.length===0)return z(W(H.HULL_EMPTY_INPUT,`hull: at least one shape is required`,void 0,void 0,`Provide one or more shapes to compute a convex hull`));for(let[t,n]of e.entries()){let e=V$(n,`hull: shapes[${t}]`);if(B(e))return e}let n=t.tolerance??.1;try{let t=F(),r=e.map(e=>e.wrapped),i=I(t.hull(r,n));return NE(i)?R(i):(L(i),z(U(H.HULL_NOT_3D,`Hull result is not a solid; input may be degenerate`)))}catch(e){let t=e instanceof Error?e.message:String(e);return t.includes(`coplanar`)||t.includes(`fewer than`)||t.includes(`degenerate`)?z(U(H.HULL_DEGENERATE,`Hull degenerate: ${t}`,e)):z(U(H.HULL_FAILED,`Hull operation failed: ${t}`,e))}}function U$(e){if(e.length<4)return z(W(H.HULL_EMPTY_INPUT,`convexHull: at least 4 points required, got ${e.length}`,void 0,void 0,`Provide 4 or more non-coplanar 3D points`));try{let t=F(),n=e.map(e=>({x:e[0],y:e[1],z:e[2]})),r=I(t.hullFromPoints(n,.1));return NE(r)?R(r):(L(r),z(U(H.HULL_NOT_3D,`convexHull result is not a solid; points may be coplanar`)))}catch(e){let t=e instanceof Error?e.message:String(e);return t.includes(`coplanar`)||t.includes(`fewer than`)||t.includes(`degenerate`)?z(U(H.HULL_DEGENERATE,`convexHull degenerate: ${t}`,e)):z(U(H.HULL_FAILED,`convexHull failed: ${t}`,e))}}function W$(e){let n=WD(e);if(n.length!==1)return null;let r=t(n,0);if(aO(r)!==`sphere`)return null;let i=F().area(r.wrapped);return Math.sqrt(i/(4*Math.PI))}function G$(e,t,n){try{let r=I(F().offset(e.wrapped,t,n));return FE(r)?R(r):(L(r),z(hD(H.MINKOWSKI_NOT_3D,`Minkowski sphere offset did not produce a 3D shape`)))}catch(e){let t=e instanceof Error?e.message:String(e);return z(U(H.MINKOWSKI_FAILED,`Minkowski sphere offset failed: ${t}`,e,{operation:`minkowski`,fastPath:`sphere`}))}}function K$(e,t,n){let r=F();try{let i=KD(e),a=KD(t);if(i.length===0||a.length===0)return z(U(H.MINKOWSKI_FAILED,`Minkowski sum: one or both shapes have no vertices`,void 0,{operation:`minkowski`}));let o=[];for(let e of i){let[t,n,i]=r.vertexPosition(e.wrapped);for(let e of a){let[a,s,c]=r.vertexPosition(e.wrapped);o.push({x:t+a,y:n+s,z:i+c})}}let s=I(r.hullFromPoints(o,n));return FE(s)?R(s):(L(s),z(hD(H.MINKOWSKI_NOT_3D,`Minkowski hull did not produce a 3D shape`)))}catch(e){let t=e instanceof Error?e.message:String(e);return z(U(H.MINKOWSKI_FAILED,`Minkowski general path failed: ${t}`,e,{operation:`minkowski`}))}}function q$(e,t,n={}){let{tolerance:r=1e-6}=n;if(F().isNull(e.wrapped))return z(W(H.NULL_SHAPE_INPUT,`minkowski: shape is a null shape`));if(F().isNull(t.wrapped))return z(W(H.MINKOWSKI_NULL_TOOL,`minkowski: tool is a null shape`));if(!FE(e)||!FE(t))return z(W(H.MINKOWSKI_NOT_3D,`minkowski: both shape and tool must be 3D`));let i=W$(t);return i===null?K$(e,t,r):G$(e,i,r)}function J$(e,t,n={}){let{tolerance:r=1e-6}=n;if(e.length<4)return z(W(H.POLYHEDRON_INSUFFICIENT_POINTS,`polyhedron: need at least 4 points, got ${e.length}`));if(t.length<4)return z(W(H.POLYHEDRON_INSUFFICIENT_FACES,`polyhedron: need at least 4 faces, got ${t.length}`));let i=[];for(let[n,r]of t.entries()){for(let t of r)if(t<0||t>=e.length)return z(W(H.POLYHEDRON_INVALID_INDEX,`polyhedron: face ${n} has out-of-range index ${t} (${e.length} points)`));if(r.length<3)continue;let t=r[0];for(let e=1;e<r.length-1;e++)i.push([t,r[e],r[e+1]])}try{let t=F(),n=e.map(([e,t,n])=>({x:e,y:t,z:n})),a=I(t.buildSolidFromFaces(n,i,r));return NE(a)?R(a):(L(a),z(U(H.POLYHEDRON_FAILED,`Polyhedron did not produce a solid`)))}catch(e){let t=e instanceof Error?e.message:String(e);return z(U(H.POLYHEDRON_FAILED,`Polyhedron failed: ${t}`,e))}}var Y$=1e-10;function X$(e,t,n,r){return e*r-t*n}function Z$(e,t,n,r){return e*n+t*r}function Q$(e,t){return Math.sqrt(e*e+t*t)}function $$(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 e1(e){let t=0;for(let n=0;n<e.length;n++){let r=$$(e,n),i=$$(e,n+1);t+=r.x*i.y-i.x*r.y}return t<0?[...e].reverse():e}function t1(e,t){let n=$$(e,t-1),r=$$(e,t),i=$$(e,t+1),a=r.x-n.x,o=r.y-n.y,s=Q$(a,o),c=i.x-r.x,l=i.y-r.y,u=Q$(c,l);if(s<Y$||u<Y$)return{dx:0,dy:0};let d=-o/s,f=a/s,p=-l/u,m=c/u,h=d+p,g=f+m,_=Q$(h,g);if(_<Y$)return{dx:d,dy:f};h/=_,g/=_;let v=Z$(h,g,d,f),y=Math.abs(v)>Y$?1/v:1;return{dx:h*y,dy:g*y}}function n1(e){return!e.prev||!e.next?!1:X$(e.x-e.prev.x,e.y-e.prev.y,e.next.x-e.x,e.next.y-e.y)<-1e-10}function r1(e){let t=e.map((t,n)=>{let r=t1(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 i1(e,t){let n=e;for(let e=0;e<t&&n;e++)n.active=!1,n=n.next}function a1(e){let t=1,n=e.next;for(;n!==e&&(t++,n=n.next,!(t>1e4)););return t}function o1(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)<Y$&&Math.abs(r)<Y$)return null;let o;if(o=Math.abs(n)>Math.abs(r)?i/n:a/r,o<Y$)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)>Y$){let e=c/s;if(Math.abs(o-e)>1e-4*Math.max(1,Math.abs(o)))return null}return o}function s1(e,t,n){let r=n.x-t.x,i=n.y-t.y,a=Q$(r,i);if(a<Y$)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)<Y$)return null;let f=-c/d;if(f<Y$)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=Q$(y,b);if(x<Y$)return f;let S=Z$(p-h,m-g,y,b)/(x*x);return S<-.01||S>1.01?null:f}function c1(e){let t=[];for(let n of e){if(!n.active||!n.next)continue;let e=o1(n,n.next);if(e!==null&&e>Y$){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(n1(n)){let e=n.next.next,r=0;for(;e!==n.prev&&e!==n&&r<1e3;){let i=s1(n,e,e.next);if(i!==null&&i>Y$){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 l1(e){if(e.length<3)return R({nodes:[],faces:[]});try{return R(u1(e))}catch(e){return z(vD(H.STRAIGHT_SKELETON_FAILED,e instanceof Error?e.message:String(e),e))}}function u1(e){let t=e1(e),n=t.length,r=[],i=Array.from({length:n},()=>[]),a=r1(t),o=0,s=n*n*2;for(;o<s;){o++;let e=a.find(e=>e.active);if(!e)break;let t=a1(e);if(t<=3){if(t===3){let t=e,n=t.next,a=n.next,o=o1(t,n),s=o!==null&&o>Y$?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 i1(e,t);continue}let n=a.filter(e=>e.active),s=c1(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=t1(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=t1(f(e),0);e.bx=p.dx,e.by=p.dy;let m=t1(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=[$$(t,e),$$(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&&Q$(n.x-i.x,n.y-i.y)>Y$&&(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 d1(e){let t=UD(e).map(e=>{let t=Xj(e);return{x:t[0],y:t[1]}}),n=t[0],r=t[t.length-1];return t.length>1&&n&&r&&Math.abs(n.x-r.x)<1e-10&&Math.abs(n.y-r.y)<1e-10&&t.pop(),t}function f1(e){let t=[];for(let n=1;n<e-1;n++)t.push([0,n,n+1]);return t}function p1(e,t,n,r,i,a){return(n-e)*(a-t)-(r-t)*(i-e)}function m1(e,t,n,r,i,a,o,s){let c=p1(n,r,i,a,e,t),l=p1(i,a,o,s,e,t),u=p1(o,s,n,r,e,t);return!((c<0||l<0||u<0)&&(c>0||l>0||u>0))}function h1(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||p1(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&&m1(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 g1(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=f1(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 _1(e,t){let n=(t?.angle??45)*CD,r=Math.tan(n);try{let t=d1(e);if(t.length<3)return z(U(H.ROOF_FAILED,`Wire must have at least 3 edges for roof generation`));let n=l1(t);if(!n.ok)return n;let i=n.value;if(i.faces.length===0)return z(U(H.ROOF_FAILED,`Straight skeleton computation produced no faces`));let a=F(),o=g1(i,r,a);for(let[e,n,r]of h1(t)){let i=t[e],s=t[n],c=t[r];if(!i||!s||!c)continue;let l=[i.x,i.y,0],u=[s.x,s.y,0],d=[c.x,c.y,0],f=a.buildTriFace(l,d,u);f!==null&&o.push(f)}if(o.length===0)return z(U(H.ROOF_FAILED,`No valid triangular faces could be built`));try{let e=a.sewAndSolidify(o,1e-6),t=a.fixShape(e);return t!==e&&a.dispose(e),R(TE(t))}catch(e){try{let t=TE(a.sew(o,1e-6));return fO(t)?R(t):z(U(H.ROOF_FAILED,`Sew fallback produced invalid solid`,e))}catch(e){return z(U(H.ROOF_FAILED,`Failed to sew roof faces`,e))}}finally{for(let e of o)a.dispose(e)}}catch(e){let t=e instanceof Error?e.message:String(e);return z(U(H.ROOF_FAILED,`Roof generation failed: ${t}`,e))}}function v1(e){return[[1,0,0,e[0]],[0,1,0,e[1]],[0,0,1,e[2]],[0,0,0,1]]}function y1(e){let t=e[0];return t!==void 0&&typeof t[0]==`number`}function b1(e,t,n){return{__instanced:!0,source:e,placements:t,grid:n,[Symbol.dispose](){e[Symbol.dispose]()}}}function x1(e){return typeof e==`object`&&!!e&&e.__instanced===!0}function S1(e,t){return b1(e,y1(t)?t.map(v1):t.map(e=>e.map(e=>[...e])))}function C1(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(v1([e*i,t*a,0]));return b1(e,o,{cols:n,rows:r,pitchX:i,pitchY:a})}function w1(e){return e.placements.length}function T1(e,t={}){let{source:n,placements:r,grid:i}=e;return r.length===0?z(W(`INSTANCE_EMPTY`,`materialize: instance has no placements`)):t.fuse?FE(n)?i?IF(n,[1,0,0],[0,1,0],i.cols,i.rows,i.pitchX,i.pitchY):E1(n,r,!0):z(W(`MATERIALIZE_NOT_3D`,`materialize({fuse:true}) requires a 3D source shape`)):E1(n,r,!1)}function E1(e,t,n){let r=[];for(let n of t){let t=dj(e,n);if(!t.ok){for(let e of r)e[Symbol.dispose]();return t}r.push(t.value)}let i=n?jA(r,{unsafe:!0}):R(tj(r));for(let e of r)(!i.ok||e!==i.value)&&e[Symbol.dispose]();return i}function D1(e,t){return{geometry:bM(e.source,t),instances:e.placements}}var O1={coincident:3,concentric:4,distance:1,angle:1},k1=[1,0,0,0];function A1(e,t){return[e[0]+t[0],e[1]+t[1],e[2]+t[2]]}function j1(e,t){return[e[0]-t[0],e[1]-t[1],e[2]-t[2]]}function M1(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function N1(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 P1(e,t){return[e[0]*t,e[1]*t,e[2]*t]}function F1(e){let t=Math.hypot(e[0],e[1],e[2])||1;return[e[0]/t,e[1]/t,e[2]/t]}function I1(e){return F1(N1(e,Math.abs(e[0])<.9?[1,0,0]:[0,1,0]))}function L1(e,t){let n=A1(YF(t.rotation,e.origin),t.position);return{type:e.type,origin:n,...e.normal?{normal:YF(t.rotation,e.normal)}:{},...e.direction?{direction:YF(t.rotation,e.direction)}:{}}}function R1(e,t,n){let r=e.normal??[0,0,1];return{position:P1(r,M1(r,j1(e.origin,t.origin))+n),rotation:k1}}function z1(e,t){let n=e.direction??[0,0,1],r=ZF(t.direction??[0,0,1],n),i=YF(r,t.origin);return{position:j1(e.origin,i),rotation:r}}function B1(e,t,n){let r=F1(e.normal??[0,0,1]),i=F1(t.normal??[0,0,1]),a=Math.acos(Math.max(-1,Math.min(1,M1(i,r)))),o=N1(i,r);return{position:[0,0,0],rotation:XF(Math.hypot(o[0],o[1],o[2])<1e-9?I1(i):o,a-n)}}function V1(e,t,n){let r=j1(t,e),i=Math.hypot(r[0],r[1],r[2]);return{position:j1(A1(e,P1(i<1e-9?[1,0,0]:P1(r,1/i),n)),t),rotation:k1}}function H1(e,t,n,r){let i=F1(e);return{position:P1(i,M1(i,j1(t,n))-r),rotation:k1}}function U1(e,t,n){let r=F1(e.direction??[0,0,1]),i=A1(e.origin,P1(r,M1(r,j1(t,e.origin))));if(n===0)return{position:j1(i,t),rotation:k1};let a=j1(t,i),o=Math.hypot(a[0],a[1],a[2]);return{position:j1(A1(i,P1(o<1e-9?I1(r):P1(a,1/o),n)),t),rotation:k1}}function W1(e,t,n){let r=F1(t.direction??[0,0,1]),i=j1(t.origin,e),a=j1(i,P1(r,M1(r,i))),o=Math.hypot(a[0],a[1],a[2]);return n===0?{position:P1(a,-1),rotation:k1}:{position:j1(P1(o<1e-9?I1(r):P1(a,1/o),n),a),rotation:k1}}function G1(e,t,n){let r=F1(e.direction??[0,0,1]),i=ZF(F1(t.direction??[0,0,1]),r),a=j1(YF(i,t.origin),e.origin),o=j1(a,P1(r,M1(r,a))),s=Math.hypot(o[0],o[1],o[2]);return{position:j1(P1(s<1e-9?I1(r):P1(o,1/s),n),o),rotation:i}}var K1=new Set([`plane-plane`,`plane-point`,`point-plane`,`point-point`,`axis-axis`,`axis-point`,`point-axis`]),q1={angle:`plane`,concentric:`axis`},J1=new Set([`coincident`,`distance`,`angle`,`concentric`]);function Y1(e,t,n){let r=q1[e];return r?t===r&&n===r:K1.has(`${t}-${n}`)}function X1(e,t,n){switch(`${e.type}-${t.type}`){case`plane-plane`:case`plane-point`:return R1(e,t,n);case`point-plane`:return H1(t.normal??[0,0,1],e.origin,t.origin,n);case`point-point`:return V1(e.origin,t.origin,n);case`axis-axis`:return n===0?z1(e,t):G1(e,t,n);case`axis-point`:return U1(e,t.origin,n);case`point-axis`:return W1(e.origin,t,n);default:return null}}function Z1(e,t,n){switch(e.type){case`concentric`:return z1(t,n);case`angle`:return B1(t,n,(e.value??0)*Math.PI/180);default:{let r=X1(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 Q1(e,t){let n=new Map;for(let t of e)n.set(t,{position:[0,0,0],rotation:k1});let r=[],i=t.filter(e=>J1.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(!Y1(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:k1},l=L1(r.entity,a);n.set(i.node,Z1(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+(O1[t]??O1[t.split(`(`)[0]??``]??0),0),converged:r.length===0,unsupported:r}}function $1(e){if(e.face){let t=_k(e.face);return t?{type:`axis`,origin:t.origin,direction:t.direction}:{type:`plane`,origin:gk(e.face),normal:hk(e.face)}}if(e.edge){if(Yj(e.edge)===`LINE`)return{type:`axis`,origin:Xj(e.edge),direction:$j(e.edge)};let t=tM(e.edge);return t?{type:`axis`,origin:t.origin,direction:t.direction}:null}return e.point?{type:`point`,origin:e.point}:null}function e0(e,t){let n=$1(e),r=$1(t);return!n||!r?z(W(H.ASSEMBLY_MATE_INVALID,`solveAssembly: could not extract geometry from mate entities`)):R({entityA:{node:e.node,entity:n},entityB:{node:t.node,entity:r}})}function t0(e){switch(e.type){case`fixed`:return R({type:`fixed`,entityA:{node:e.entity.node,entity:{type:`point`,origin:[0,0,0]}}});case`coincident`:{let t=e0(e.entityA,e.entityB);return t.ok?R({type:`coincident`,...t.value}):t}case`distance`:{let t=e0(e.entityA,e.entityB);return t.ok?R({type:`distance`,...t.value,value:e.distance}):t}case`angle`:{let t=e0(e.entityA,e.entityB);return t.ok?R({type:`angle`,...t.value,value:e.angle}):t}case`concentric`:{let t=e0(e.axisA,e.axisB);return t.ok?R({type:`concentric`,...t.value}):t}}}function n0(e,t){let n=e.mates??[];return{...e,mates:[...n,t]}}function r0(e){let t=e.mates;if(!t||t.length===0)return z(W(H.ASSEMBLY_MATE_INVALID,`solveAssembly: no mates defined`));try{let n=[];HF(e,e=>{n.push(e.name)});let r=[];for(let e of t){let t=t0(e);if(!t.ok)return t;r.push(t.value)}let i=Q1(n,r);if(!i.converged){let e=i.unsupported.length>0?`Unsupported constraint types: ${i.unsupported.join(`, `)} (${i.dof} DOF unresolved)`:`Assembly constraint solver did not converge`;return z(U(H.ASSEMBLY_NOT_CONVERGED,e))}return R({transforms:i.transforms,dof:i.dof,converged:i.converged})}catch(e){let t=e instanceof Error?e.message:String(e);return z(U(H.ASSEMBLY_SOLVE_FAILED,`Assembly solve failed: ${t}`,e))}}function i0(e,t,n=1e-6){return F().isNull(e.wrapped)?z(W(H.NULL_SHAPE_INPUT,`checkInterference: first shape is a null shape`)):F().isNull(t.wrapped)?z(W(H.NULL_SHAPE_INPUT,`checkInterference: second shape is a null shape`)):nE(()=>{let r=F().distance(e.wrapped,t.wrapped);return R({hasInterference:r.value<=n,minDistance:r.value,pointOnShape1:r.point1,pointOnShape2:r.point2})})}function a0(e,n=1e-6){let r=[],i=e.map(e=>rO(e));return e.forEach((a,o)=>{for(let s=o+1;s<e.length;s++){if(o0(t(i,o),t(i,s),n))continue;let c=V(i0(a,t(e,s),n));c.hasInterference&&r.push({i:o,j:s,result:c})}}),r}function o0(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 s0(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 c0(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 l0(e){let{type:t,data:n}=e,r=F();if(t===`LINE`)return r.makeLineEdge([c0(n,10),c0(n,20),c0(n,30)],[c0(n,11),c0(n,21),c0(n,31)]);if(t===`CIRCLE`)return r.makeCircleEdge([c0(n,10),c0(n,20),c0(n,30)],[0,0,1],c0(n,40));if(t===`ARC`){let e=c0(n,50)*Math.PI/180,t=c0(n,51)*Math.PI/180;return r.makeCircleArc([c0(n,10),c0(n,20),c0(n,30)],[0,0,1],c0(n,40),e,t)}}async function u0(e,t){let n;try{n=await e.text()}catch(e){return z(yD(H.DXF_IMPORT_FAILED,`Failed to read DXF blob`,e))}let r=s0(n),i=t?.layer===void 0?r:r.filter(e=>e.layer===t.layer);if(i.length===0)return R([]);let a=[];try{for(let e of i){let t=l0(e);t!==void 0&&a.push(t)}return a.length===0?R([]):R([SE(F().makeWire(a))])}catch(e){return z(yD(H.DXF_IMPORT_FAILED,`Failed to convert DXF entities to geometry`,e))}finally{for(let e of a)e.delete()}}function d0(e,t,n=1e-6){let r=F(),i=[];for(let[t,n,a]of e){let e=r.buildTriFace(t,n,a);e!==null&&i.push(e)}if(i.length===0)return z(yD(t,`No valid triangular faces could be built`));try{let e=I(r.sewAndSolidify(i,n));for(let e of i)r.dispose(e);return R(e)}catch{try{return R(LE(r.sew(i,n)))}catch(e){return z(yD(t,`Failed to sew triangular faces`,e))}}}function f0(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 p0(e){return e.split(/\s+/).slice(1).map(e=>parseInt(e.split(`/`)[0]??``,10)).filter(e=>!isNaN(e))}async function m0(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=f0(t);e&&n.push(e)}else if(t.startsWith(`f `)){let e=p0(t);e.length>=3&&r.push(e)}}if(n.length===0||r.length===0)return z(yD(H.OBJ_IMPORT_FAILED,`OBJ file contains no valid geometry`));try{return h0(n,r)}catch(e){let t=e instanceof Error?e.message:String(e);return z(yD(H.OBJ_IMPORT_FAILED,`OBJ import failed: ${t}`,e))}}function h0(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 d0(n,H.OBJ_IMPORT_FAILED)}function g0(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 _0(e){return e>=97&&e<=122||e>=65&&e<=90||e>=48&&e<=57||e===95}function v0(e){let t={},n=0;for(;n<e.length;){let r=e.indexOf(`="`,n);if(r<0)break;let i=r;for(;i>0&&_0(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 y0(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 b0(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 x0(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 S0(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=v0(e.slice(r,o+1)).id;if(s===void 0)continue;let c=parseInt(s,10),l=[];for(let e of y0(a,`color`)){let t=v0(e).color;t!==void 0&&l.push(x0(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=v0(e.slice(n,o+1)).id;if(s===void 0)continue;let c=parseInt(s,10),l=[];for(let e of y0(a,`base`)){let t=v0(e).displaycolor;t===void 0?l.push([0,0,0,1]):l.push(x0(t))}t.set(c,l)}return t}function C0(e){let t=[],n=[],r=[],i=S0(e);for(let n of y0(e,`vertex`)){let e=v0(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=b0(e,`object`);if(s!==null){let e=s.indexOf(`>`);if(e>=0){let t=v0(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 y0(e,`triangle`)){let e=v0(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 w0(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 T0(e){let t=F(),n=e.vertices.map(([e,t,n])=>({x:e,y:t,z:n})),r=e.triangles;try{return R(I(t.buildSolidFromFaces(n,r,1e-6)))}catch{let t=[];for(let[n,r,i]of e.triangles){let a=e.vertices[n],o=e.vertices[r],s=e.vertices[i];!a||!o||!s||t.push([a,o,s])}return d0(t,H.THREEMF_IMPORT_FAILED)}}async function E0(e){try{let t=await e.arrayBuffer(),n=g0(new Uint8Array(t),`3D/3dmodel.model`);if(!n)return z(yD(H.THREEMF_IMPORT_FAILED,`3MF archive does not contain 3D/3dmodel.model (or uses unsupported compression)`));let r=C0(new TextDecoder().decode(n));if(r.vertices.length===0||r.triangles.length===0)return z(yD(H.THREEMF_IMPORT_FAILED,`3MF model contains no valid geometry`));let i=T0(r);if(i.ok){let e=w0(r.triangleColors);e!==null&&hA(i.value,e)}return i}catch(e){let t=e instanceof Error?e.message:String(e);return z(yD(H.THREEMF_IMPORT_FAILED,`3MF import failed: ${t}`,e))}}async function D0(e){try{let t=await e.arrayBuffer();return R(I(F().importGLB(t)))}catch(e){let t=e instanceof Error?e.message:String(e);return z(yD(H.GLB_IMPORT_FAILED,`Failed to import GLB: ${t}`,e))}}function $(e){return`__wrapped`in e?e.val:e}function O0(e){return $(e)}function k0(e,t){return rj($(e),t)}function A0(e,t){if(Array.isArray(e))throw Error(`${t}() expects an options object, e.g. ${t}(shape, { ... }), not an array of coordinates.`)}function j0(e,t,n){A0(n,`rotate`);let r=n?.at;return ij($(e),t,r,n?.axis)}function M0(e,t){A0(t,`mirror`);let n=t?.at;return aj($(e),t?.normal??[1,0,0],n)}function N0(e,t,n){return oj($(e),t,n?.center)}function P0(e){return Hj($(e))}function F0(e,t){return dj($(e),t)}function I0(e,t){return mj($(e),t)}function L0(e,t){return pj($(e),t)}function R0(e,t,n){return DA($(e),$(t),{...n,unsafe:!0})}function z0(e,t,n){return OA($(e),$(t),{...n,unsafe:!0})}function B0(e,t){return jA(e.map(e=>$(e)),{...t,unsafe:!0})}function V0(e,t,n){return MA($(e),t.map(e=>$(e)),{...n,unsafe:!0})}function H0(e,t,n){return kA($(e),$(t),{...n,unsafe:!0})}function U0(e,t,n){return FA($(e),t,n)}function W0(e,t,n){return VA($(e),t,n)}function G0(e,t){return HA($(e),t)}function K0(e,t,n){return UA($(e),t,n)}function q0(e,t){if(e!==void 0)return Array.isArray(e)?e:typeof e==`object`&&`findAll`in e?e.findAll(t):e(FL()).findAll(t)}function J0(e,t){return Array.isArray(e)?e:typeof e==`object`&&`findAll`in e?e.findAll(t):e(RL()).findAll(t)}function Y0(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 X0(e,t,n){let r=$(e),i,a;return n===void 0?(i=void 0,a=t):(i=q0(t,r),a=n),yN(r,i,a)}function Z0(e,t,n){let r=$(e),i,a;n===void 0?(i=void 0,a=t):(i=q0(t,r),a=n);let o=Y0(a);return o.mode===`distAngle`?BM(r,[...i??UD(r)],o.distance,o.angle):bN(r,i,o.distance)}function Q0(e,t,n,r){let i=$(e);return xN(i,J0(t,i),n,r?.tolerance)}function $0(e,t,n){return SN($(e),t,n?.tolerance)}function e2(e,t){return _N($(e),t)}function t2(e,t,n){let r=$(e);return wN(r,J0(t,r),n.pullDirection,n.neutralPlane,n.angle)}function n2(e){return AN($(e))}function r2(e){return Jj($(e))}function i2(e,t){return bM($(e),t)}function a2(e,t){return xM($(e),t)}function o2(e){return sO($(e))}function s2(e){return Uj($(e))}function c2(e){return ak(e)}function l2(e){return EN($(e))}function u2(e){return Gj($(e))}function d2(e,t){return Vq($(e),typeof t==`number`?[0,0,t]:t)}function f2(e,t){let n=t?.at??[0,0,0];return Hq($(e),n,t?.axis??[0,0,1],t?.angle??2*Math.PI)}function p2(e,t){return qN(e.map(e=>$(e)),t)}function m2(e,n){if(n===void 0){let t=WD(e);if(t.length===0)return z(W(H.COMPOUND_NO_FACES,`compoundOps: shape has no faces`));let n=jk(t),r=gk(n)[2];for(let e=1;e<t.length;e++){let i=Ak(t,e),a=gk(i)[2];a>r&&(n=i,r=a)}return R(n)}if(typeof n==`function`){let r=n(RL()).findAll(e);return r.length===0?z(bD(H.COMPOUND_FACE_NOT_FOUND,`compoundOps: face finder matched no faces`)):R(t(r,0))}return R(n)}function h2(e){return`sketchOnPlane`in e&&typeof e.sketchOnPlane==`function`?{wire:e.sketchOnPlane(`XY`).wire,owned:!0}:{wire:e,owned:!1}}function g2(e,t){let n=$(e),{at:r,radius:i,axis:a}=t,o=a??[0,0,1];if(i<=0)return z(W(`DRILL_INVALID_RADIUS`,`Drill radius must be positive`));if(IO(o))return z(W(`DRILL_ZERO_AXIS`,`Drill axis cannot be zero`));let s=PO(o),c=r.length===2?[r[0],r[1],0]:[r[0],r[1],r[2]],l;if(t.depth!==void 0)l=JA(i,t.depth,c,s);else{let e=rO(n),t=[[e.xMin,e.yMin,e.zMin],[e.xMax,e.yMin,e.zMin],[e.xMin,e.yMax,e.zMin],[e.xMax,e.yMax,e.zMin],[e.xMin,e.yMin,e.zMax],[e.xMax,e.yMin,e.zMax],[e.xMin,e.yMax,e.zMax],[e.xMax,e.yMax,e.zMax]],r=1/0,a=-1/0;for(let e of t){let t=(e[0]-c[0])*s[0]+(e[1]-c[1])*s[1]+(e[2]-c[2])*s[2];t<r&&(r=t),t>a&&(a=t)}--r,a+=1,l=JA(i,a-r,[c[0]+s[0]*r,c[1]+s[1]*r,c[2]+s[2]*r],s)}try{return OA(n,l,{unsafe:!0})}finally{l[Symbol.dispose]()}}function _2(e,t){try{var n=WT();let r=$(e),{profile:i,depth:a}=t;if(a<=0)return z(W(`POCKET_INVALID_DEPTH`,`Pocket depth must be positive`));let o=m2(r,t.face);if(B(o))return o;let s=o.value,c=hk(s),l=gk(s),u=n.u(new iE),{wire:d,owned:f}=h2(i);f&&u.register(d);let p=Kk(d);if(B(p))return p;u.register(p.value);let m=Vq(u.register(rj(p.value,l)),DO(PO(c),-a));return B(m)?m:(u.register(m.value),OA(r,m.value,{unsafe:!0}))}catch(e){n.e=e}finally{n.d()}}function v2(e,t){try{var n=WT();let r=$(e),{profile:i,height:a}=t;if(a<=0)return z(W(`BOSS_INVALID_HEIGHT`,`Boss height must be positive`));let o=m2(r,t.face);if(B(o))return o;let s=o.value,c=hk(s),l=gk(s),u=n.u(new iE),{wire:d,owned:f}=h2(i);f&&u.register(d);let p=Kk(d);if(B(p))return p;u.register(p.value);let m=Vq(u.register(rj(p.value,l)),DO(PO(c),a));return B(m)?m:(u.register(m.value),DA(r,m.value,{unsafe:!0}))}catch(e){n.e=e}finally{n.d()}}function y2(e,t){try{var n=WT();let r=$(e),i=t?.normal??[1,0,0],a=t?.at;return IO(i)?z(W(`MIRROR_ZERO_NORMAL`,`Mirror plane normal cannot be zero`)):DA(r,n.u(aj(r,i,a)),{unsafe:!0})}catch(e){n.e=e}finally{n.d()}}function b2(e,t){let n=$(e),{xDir:r,xCount:i,xSpacing:a,yDir:o,yCount:s,ySpacing:c}=t;if(i<1||s<1)return z(W(`PATTERN_INVALID_COUNT`,`Pattern counts must be at least 1`));if(IO(r))return z(W(`PATTERN_ZERO_DIRECTION`,`X direction cannot be zero`));if(IO(o))return z(W(`PATTERN_ZERO_DIRECTION`,`Y direction cannot be zero`));if(i===1&&s===1)return R(n);let l=PO(r),u=PO(o),d=[n],f=[];for(let e=0;e<i;e++)for(let t=0;t<s;t++){if(e===0&&t===0)continue;let r=rj(n,[l[0]*a*e+u[0]*c*t,l[1]*a*e+u[1]*c*t,l[2]*a*e+u[2]*c*t]);d.push(r),f.push(r)}try{return jA(d,{unsafe:!0})}finally{for(let e of f)e[Symbol.dispose]()}}var x2=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 S2(e){if(B(e))throw new x2(e.error);return e.value}function C2(e){return e}function w2(e){return e}function T2(e){return e}function E2(e){return e}function D2(e){return{val:e,__wrapped:!0,translate:t=>L2(k0(e,t)),rotate:(t,n)=>L2(j0(e,t,n)),mirror:t=>L2(M0(e,t)),scale:(t,n)=>L2(N0(e,t,n)),applyMatrix:t=>L2(S2(F0(e,t))),moveX:t=>L2(k0(e,[t,0,0])),moveY:t=>L2(k0(e,[0,t,0])),moveZ:t=>L2(k0(e,[0,0,t])),rotateX:t=>L2(j0(e,t,{axis:[1,0,0]})),rotateY:t=>L2(j0(e,t,{axis:[0,1,0]})),rotateZ:t=>L2(j0(e,t,{axis:[0,0,1]})),bounds:()=>rO(e),describe:()=>o2(e),clone:()=>L2(S2(P0(e))),mesh:t=>i2(e,t),meshEdges:t=>a2(e,t),isValid:()=>l2(e),isEmpty:()=>u2(e),heal:()=>L2(S2(n2(e))),simplify:()=>L2(S2(r2(e))),toBREP:()=>S2(s2(e)),apply:t=>L2(t(e)),applyResult:t=>L2(S2(t(e))),done:()=>e}}function O2(e){return{fuse:(t,n)=>R2(S2(R0(e,$(t),{...n,unsafe:!0}))),cut:(t,n)=>R2(S2(z0(e,$(t),{...n,unsafe:!0}))),intersect:(t,n)=>R2(S2(H0(e,$(t),{...n,unsafe:!0}))),fuseAll:(t,n)=>R2(E2(S2(jA([e,...t.map($)],{...n,unsafe:!0})))),cutAll:(t,n)=>R2(E2(S2(MA(e,t,{...n,unsafe:!0})))),section:(t,n)=>L2(S2(U0(e,t,n))),split:t=>L2(S2(G0(e,t))),slice:(t,n)=>S2(K0(e,t,n))}}function k2(e){return{fillet(...t){return t.length===1?R2(E2(S2(X0(C2(e),t[0])))):R2(E2(S2(X0(C2(e),t[0],t[1]))))},chamfer(...t){return t.length===1?R2(E2(S2(Z0(C2(e),t[0])))):R2(E2(S2(Z0(C2(e),t[0],t[1]))))},shell:(t,n,r)=>R2(E2(S2(Q0(C2(e),t,n,r)))),offset:(t,n)=>R2(E2(S2($0(C2(e),t,n)))),draft:(t,n)=>R2(E2(S2(t2(C2(e),t,n))))}}function A2(e){return{drill:t=>R2(S2(g2(e,t))),pocket:t=>R2(S2(_2(e,t))),boss:t=>R2(S2(v2(e,t))),mirrorJoin:t=>R2(S2(y2(e,t))),rectangularPattern:t=>R2(S2(b2(e,t)))}}function j2(e){return{volume:()=>S2(rP(e)),area:()=>S2(iP(e)),volumeProps:()=>S2(eP(e)),surfaceProps:()=>S2(tP(e))}}function M2(e){return{edges:()=>UD(e),faces:()=>WD(e),wires:()=>GD(e),vertices:()=>KD(e)}}function N2(e){return{linearPattern:(t,n,r)=>R2(E2(S2(PF(e,t,n,r)))),circularPattern:(t,n,r)=>R2(E2(S2(FF(e,t,n,r))))}}function P2(e){return{...D2(e),...O2(e),...k2(e),...A2(e),...j2(e),...M2(e),...N2(e)}}function F2(e){return{...D2(e),length:()=>eM(e),startPoint:()=>Xj(e),endPoint:()=>Zj(e),pointAt:t=>Qj(e,t),tangentAt:t=>$j(e,t),isClosed:()=>nM(e),sweep(t,n){if(!AE(e))throw Error(`sweep requires a Wire`);let r=S2(zN(T2(e),$(t),n));return R2(Array.isArray(r)?r[0]:r)}}}function I2(e){return{...D2(e),area:()=>S2(iP(e)),normalAt:t=>hk(e,t),center:()=>gk(e),surfaceType:()=>S2(sk(e)),outerWire:()=>yk(e),innerWires:()=>xk(e),extrude:t=>R2(S2(d2(w2(e),t))),revolve:t=>R2(S2(f2(w2(e),t)))}}function L2(e){return FE(e)?P2(e):jE(e)?I2(e):kE(e)||AE(e)?F2(e):D2(e)}function R2(e){return P2(e)}function z2(e){if(e&&typeof e==`object`&&`face`in e&&typeof e.face==`function`&&`_defaultOrigin`in e)return I2(e.face());if(e&&typeof e==`object`&&`wrapped`in e)return jE(e)?I2(e):FE(e)?P2(e):kE(e)||AE(e)?F2(e):D2(e);throw Error(`shape() requires a Sketch or branded shape type`)}var B2=.25,V2=e=>Math.tan(e)-e;function H2(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 U2(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(H2(e,s*t,n,i))}return a}function W2(e){return Math.max(16,Math.round(8*Math.sqrt(e)))}function G2(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 K2(e,t,n){if(t===0)return R(e);let r=V2(e)+2*t*Math.tan(e)/n,i,a;if(r>V2(e)?(i=e,a=Math.PI/2-1e-6):(i=1e-4,a=e),r>V2(a)||r<V2(i))return z(W(`GEAR_PA_OUT_OF_RANGE`,`working pressure angle out of range — target inv(αw)=${r.toFixed(4)} not in [${V2(i).toFixed(4)}, ${V2(a).toFixed(4)}]`,void 0,{target:r,invLo:V2(i),invHi:V2(a)}));for(let e=0;e<50;e++){let e=.5*(i+a);V2(e)<r?i=e:a=e}return R(.5*(i+a))}function q2(e,t,n,r,i){return K2(e,t+n,r+i)}function J2(e,t,n,r,i){return K2(e,n-t,i-r)}function Y2(e,t,n,r,i){return(e+t)*n*Math.cos(r)/(2*Math.cos(i))}function X2(e,t,n,r){if(!Number.isInteger(e)||!Number.isInteger(t)||!Number.isInteger(n))return z(W(`GEAR_NON_INTEGER_TEETH`,`tooth counts and planet count must be integers`));if(e<4||t<4||n<2)return z(W(`GEAR_TEETH_TOO_FEW`,`zs ≥ 4, zp ≥ 4, N ≥ 2 required`));if((2*e+2*t)%n!=0)return z(W(`GEAR_ASSEMBLY`,`(2·zs + 2·zp) must be divisible by N — got ${2*e+2*t} mod ${n} = ${(2*e+2*t)%n}`));let i=t+2+2*r,a=(e+t)*Math.sin(Math.PI/n);return a<=i?z(W(`GEAR_PLANET_COLLISION`,`planet tips would collide: (zs+zp)·sin(π/N) = ${a.toFixed(3)} ≤ planet tip = ${i.toFixed(3)}`)):R(void 0)}function Z2(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 Q2(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 $2(e,t){return 1-e*Math.sin(t)*Math.sin(t)/2}function e4(e,t,n){return Math.max(0,$2(e,t)-n)}function t4(e){return e<8?.2:.485-2.88/e}function n4(e,t,n,r){let i=e*1e3,a=t4(r);return a<=0||n<=0||t<=0?1/0:2*i/(r*t*t*n*a)}function r4(e,t,n=!1){let r=(1.4+6.5/e)*(20/(t*180/Math.PI))**.15;return n?r*.85:r}function i4(e,t,n,r,i,a=!1){return n4(e,t,n,r)*r4(r,i,a)}function a4(e){return e/2}function o4(e,t){return e+2*t}function s4(e){return e%2==0?Math.PI/e:0}function c4(e,t,n){return e*(1+t/n)+s4(n)}function l4(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=X2(n,r,i,s);if(B(c))return c;let l=q2(a,o,s,n,r);if(B(l))return l;let u=Y2(n,r,t,a,l.value),d=[];for(let e=0;e<i;e++){let t=e*2*Math.PI/i,a=c4(t,n,r);d.push({rotationDeg:a*180/Math.PI,position:[u*Math.cos(t),u*Math.sin(t),0]})}return R(d)}function u4(e,t,n,r,i){let a=t*e.toothPitch,o=(t+1)%n*e.toothPitch,s=V2(e.alphaPitch),c=a-e.halfToothAngle-s,l=a+e.halfToothAngle+s,u=U2(e.rb,e.alphaTip,c,r,1),d=U2(e.rb,e.alphaTip,l,r,-1).reverse(),f=jk(u),p=Mk(u),m=jk(d),h=Mk(d),g=[],_=e=>{i.register(e),g.push(e)},v=e.isInternal?e.rb<e.rRoot:e.rb>e.rRoot;v&&_(Fk([e.rRoot*Math.cos(c),e.rRoot*Math.sin(c),0],f));let y=e.rPitch*1e-5,b=Hk(u,{tolerance:y});if(B(b))return b;_(b.value),_(zk(p,[e.rTip*Math.cos(a),e.rTip*Math.sin(a),0],m));let x=Hk(d,{tolerance:y});if(B(x))return x;_(x.value),v&&_(Fk(h,[e.rRoot*Math.cos(l),e.rRoot*Math.sin(l),0]));let S=o-e.halfToothAngle-s,C=.5*(l+S);return S<l&&(C+=Math.PI),_(zk(v?[e.rRoot*Math.cos(l),e.rRoot*Math.sin(l),0]:h,[e.rRoot*Math.cos(C),e.rRoot*Math.sin(C),0],v?[e.rRoot*Math.cos(S),e.rRoot*Math.sin(S),0]:[e.rb*Math.cos(S),e.rb*Math.sin(S),0])),R(g)}function d4(e){return p4(e,!1)}function f4(e){return p4(e,!0)}function p4(e,t){try{var n=WT();let{teeth:r,moduleSize:i,pressureAngle:a,shift:o,clearance:s,flankThinning:c,samples:l=W2(i)}=e;if(r<4)return z(W(`GEAR_TEETH_TOO_FEW`,`gear needs ≥ 4 teeth, got ${r}`));if(i<=0)return z(W(`GEAR_MODULE_NONPOSITIVE`,`module must be > 0, got ${i}`));let u=G2(r,i,a,o,s,c,t),d=n.u(new iE),f=[];for(let e=0;e<r;e++){let t=u4(u,e,r,l,d);if(B(t))return t;f.push(...t.value)}let p=Gk(f);return B(p)?p:R(p.value)}catch(e){n.e=e}finally{n.d()}}function m4(e){let{teeth:t,moduleSize:n,thickness:r,pressureAngleDeg:i=20,shift:a=0,clearance:o=B2,flankThinning:s=0,bore:c=0,samples:l}=e;if(r<=0)return z(W(`GEAR_THICKNESS_NONPOSITIVE`,`thickness must be > 0`));if(l!==void 0&&(!Number.isInteger(l)||l<1))return z(W(`GEAR_SAMPLES_INVALID`,`samples must be a positive integer; got ${String(l)}`));let u=i*Math.PI/180,d=G2(t,n,u,a,o,s,!1);if(c>0&&c>=2*d.rRoot)return z(W(`GEAR_BORE_TOO_LARGE`,`bore diameter ${c.toFixed(2)} ≥ root diameter ${(2*d.rRoot).toFixed(2)} — would erase the gear teeth`));let f=d4({teeth:t,moduleSize:n,pressureAngle:u,shift:a,clearance:o,flankThinning:s,...l===void 0?{}:{samples:l}});if(B(f))return f;let p=g4(t,u,a);return x4(f.value,r,c,d,p)}function h4(e){let{teeth:t,moduleSize:n,thickness:r,pressureAngleDeg:i=20,shift:a=0,clearance:o=B2,flankThinning:s=0,ringWallThickness:c=2*e.moduleSize,samples:l}=e;if(r<=0)return z(W(`GEAR_THICKNESS_NONPOSITIVE`,`thickness must be > 0`));if(c<=0)return z(W(`GEAR_WALL_NONPOSITIVE`,`ringWallThickness must be > 0`));if(l!==void 0&&(!Number.isInteger(l)||l<1))return z(W(`GEAR_SAMPLES_INVALID`,`samples must be a positive integer; got ${String(l)}`));let u=i*Math.PI/180,d=f4({teeth:t,moduleSize:n,pressureAngle:u,shift:a,clearance:o,flankThinning:s,...l===void 0?{}:{samples:l}});if(B(d))return d;let f=G2(t,n,u,a,o,s,!0),p=b4(f.rPitch+c);return B(p)?p:C4(p.value,d.value,r,f,[])}function g4(e,t,n){let r=e4(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 _4(e){let t=y4(e);if(B(t))return t;let n=t.value,r=v4(n);if(B(r))return r;let{sun:i,planet:a,ring:o}=r.value,s=D4(n,i,a,o),c=T4(a.solid,n);a.solid.delete();let l=E4(o.solid,n.zr),u=O4(n,s);return R({sun:i.solid,planets:c,ring:l,ringTeeth:n.zr,workingPressureAngle:n.alphaW_sp,centerDistance:n.centerDistance,contactRatio:{sunPlanet:s.crSunPlanet,planetRing:s.crPlanetRing},undercutDeficit:{sun:s.undercutSun,planet:s.undercutPlanet},...s.lewisStress?{lewisStress:s.lewisStress}:{},...s.stressConcentrationFactor?{stressConcentrationFactor:s.stressConcentrationFactor}:{},diagnostics:u})}function v4(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=m4({...n,teeth:e.sunTeeth,shift:e.sunShift,bore:e.sunBore});if(B(r))return r;let i=m4({...n,teeth:e.planetTeeth,shift:e.planetShift,bore:e.planetBore});if(B(i))return r.value.solid.delete(),i;let a=h4({...n,teeth:e.zr,shift:e.ringShift,ringWallThickness:e.ringWallThickness});return B(a)?(r.value.solid.delete(),i.value.solid.delete(),a):R({sun:r.value,planet:i.value,ring:a.value})}function y4(e){let t=e.moduleSize??3,n=e.sunTeeth??15,r=e.planetTeeth??12,i=e.numPlanets??3,a=e.pressureAngleDeg??20,o=a*Math.PI/180,s=e.sunShift??0,c=e.planetShift??0,l=e.ringShift??0;if(e.thickness<=0)return z(W(`GEAR_THICKNESS_NONPOSITIVE`,`thickness must be > 0`));let u=X2(n,r,i,c);if(B(u))return u;let d=o4(n,r),f=q2(o,s,c,n,r);if(B(f))return f;let p=J2(o,c,l,r,d);if(B(p))return p;let m=Y2(n,r,t,o,f.value);return R({moduleSize:t,sunTeeth:n,planetTeeth:r,numPlanets:i,pressureAngleDeg:a,alpha:o,alphaW_sp:f.value,alphaW_pr:p.value,clearance:e.clearance??.25,bHalf:a4(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 b4(e){try{var t=WT();let n=Gk([t.u(new iE).register(Ik(e,[0,0,0],[0,0,1]))]);return B(n)?n:R(n.value)}catch(e){t.e=e}finally{t.d()}}function x4(e,t,n,r,i){try{var a=WT();let o=a.u(new iE);o.register(e);let s=Kk(e);if(B(s))return s;o.register(s.value);let c=Vq(s.value,[0,0,t]);if(B(c))return c;if(n<=0)return R(w4(c.value,r,i));let l=a.u(new iE);l.register(c.value);let u=S4(n/2);if(B(u))return u;l.register(u.value);let d=Vq(u.value,[0,0,t+1]);if(B(d))return d;l.register(d.value);let f=l.register(rj(d.value,[0,0,-.5])),p=OA(c.value,f);return B(p)?p:R(w4(p.value,r,i))}catch(e){a.e=e}finally{a.d()}}function S4(e){let t=b4(e);return B(t)?t:Kk(t.value)}function C4(e,t,n,r,i){let a=Kk(e,[t]);if(B(a))return a;let o=Vq(a.value,[0,0,n]);return B(o)?o:R(w4(o.value,r,i))}function w4(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 T4(e,t){let n=[];try{for(let r=0;r<t.numPlanets;r++){let i=r*2*Math.PI/t.numPlanets,a=ij(e,c4(i,t.sunTeeth,t.planetTeeth)*180/Math.PI);try{let e=[t.centerDistance*Math.cos(i),t.centerDistance*Math.sin(i),0];n.push(rj(a,e))}finally{a.delete()}}return n}catch(e){for(let e of n)e.delete();throw e}}function E4(e,t){let n=s4(t);if(n===0)return e;let r=ij(e,n*180/Math.PI);return e.delete(),r}function D4(e,t,n,r){let i={crSunPlanet:Z2(t.tipDiameter/2,t.baseDiameter/2,n.tipDiameter/2,n.baseDiameter/2,e.centerDistance,e.moduleSize,e.alpha,e.alphaW_sp),crPlanetRing:Q2(n.tipDiameter/2,n.baseDiameter/2,r.tipDiameter/2,r.baseDiameter/2,e.centerDistance,e.moduleSize,e.alpha,e.alphaW_pr),undercutSun:e4(e.sunTeeth,e.alpha,e.sunShift),undercutPlanet:e4(e.planetTeeth,e.alpha,e.planetShift)};if(e.appliedTorque!==void 0){let t=e.appliedTorque;i.lewisStress={sun:i4(t,e.moduleSize,e.thickness,e.sunTeeth,e.alpha),planet:i4(t*e.planetTeeth/e.sunTeeth,e.moduleSize,e.thickness,e.planetTeeth,e.alpha),ring:i4(t*e.zr/e.sunTeeth,e.moduleSize,e.thickness,e.zr,e.alpha,!0)},i.stressConcentrationFactor={sun:r4(e.sunTeeth,e.alpha),planet:r4(e.planetTeeth,e.alpha),ring:r4(e.zr,e.alpha,!0)}}return i}function O4(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 k4=NZ({addHoles:()=>Vj,bezier:()=>Oj,box:()=>hj,bsplineApprox:()=>Dj,circle:()=>Sj,compound:()=>Lj,cone:()=>vj,cylinder:()=>gj,ellipse:()=>Cj,ellipseArc:()=>Ej,ellipsoid:()=>bj,face:()=>Mj,fill:()=>qk,filledFace:()=>Nj,helix:()=>wj,line:()=>xj,offsetFace:()=>zj,polygon:()=>Fj,polyhedron:()=>J$,sewShells:()=>Bj,solid:()=>Rj,sphere:()=>_j,subFace:()=>Pj,tangentArc:()=>kj,threePointArc:()=>Tj,torus:()=>yj,vertex:()=>Ij,wire:()=>Aj,wireLoop:()=>jj}),A4=NZ({checkBoolean:()=>eN,convexHull:()=>U$,cut:()=>z0,cutAll:()=>MA,cutAllBisect:()=>GM,fuse:()=>R0,fuseAll:()=>jA,fuseAllBisect:()=>YM,hull:()=>H$,intersect:()=>H0,minkowski:()=>q$,section:()=>U0,sectionToFace:()=>W0,slice:()=>K0,split:()=>G0}),j4=NZ({chamfer:()=>Z0,draft:()=>t2,fillet:()=>X0,heal:()=>n2,offset:()=>$0,shell:()=>Q0,simplify:()=>r2,thicken:()=>e2,variableFillet:()=>TN}),M4=NZ({applyMatrix:()=>F0,clone:()=>P0,composeTransforms:()=>fj,mirror:()=>M0,rotate:()=>j0,scale:()=>N0,transformCopy:()=>I0,translate:()=>k0}),N4=NZ({checkAllInterferences:()=>a0,checkInterference:()=>i0,createDistanceQuery:()=>cP,measureArea:()=>iP,measureCurvatureAt:()=>lP,measureCurvatureAtMid:()=>uP,measureDistance:()=>oP,measureDistanceProps:()=>sP,measureLength:()=>aP,measureLinearProps:()=>nP,measureSurfaceProps:()=>tP,measureVolume:()=>rP,measureVolumeProps:()=>eP}),P4=NZ({blueprintToDXF:()=>xX,exportAssemblySTEP:()=>NF,exportDXF:()=>bX,exportGlb:()=>sX,exportGltf:()=>oX,exportIGES:()=>DM,exportOBJ:()=>XY,exportSTEP:()=>TM,exportSTEPConfigured:()=>iZ,exportSTL:()=>EM,exportThreeMF:()=>BX,importDXF:()=>u0,importGLB:()=>D0,importIGES:()=>sZ,importOBJ:()=>m0,importSTEP:()=>aZ,importSTL:()=>oZ,importSVG:()=>rZ,importSVGPathD:()=>nZ,importThreeMF:()=>E0}),F4=NZ({cornerFinder:()=>_z,edgeFinder:()=>FL,faceFinder:()=>RL,getSingleFace:()=>VL,vertexFinder:()=>WZ,wireFinder:()=>BL}),I4=NZ({complexExtrude:()=>VN,extrude:()=>d2,guidedSweep:()=>KN,loft:()=>p2,multiSectionSweep:()=>GN,revolve:()=>f2,roof:()=>_1,supportExtrude:()=>BN,surfaceFromGrid:()=>L$,surfaceFromImage:()=>B$,sweep:()=>zN,twistExtrude:()=>HN}),L4=NZ({circularPattern:()=>FF,linearPattern:()=>PF}),R4=14695981039346656037n,z4=1099511628211n,B4=18446744073709551615n;function V4(){return R4}function H4(e,t){return(e^BigInt(t&255))*z4&B4}function U4(e,t){let n=e;for(let e=0;e<t.length;e++)n=H4(n,t[e]??0);return n}var W4=new TextEncoder;function G4(e,t){return U4(e,W4.encode(t))}var K4=new ArrayBuffer(8),q4=new DataView(K4),J4=new Uint8Array(K4);function Y4(e,t){return q4.setFloat64(0,Object.is(t,-0)?0:t),U4(e,J4)}function X4(e,t){let n=e,r=t&B4;for(let e=0;e<8;e++)n=H4(n,Number(r&255n)),r>>=8n;return n}function Z4(e,t){let n=e,r=t|0;for(let e=0;e<4;e++)n=H4(n,r&255),r>>>=8;return n}function Q4(e,t){return H4(e,+!!t)}function $4(e){return(e&B4).toString(16).padStart(16,`0`)}var e3=new Set;function t3(e){return G4(V4(),e)}function n3(e){return{kind:`NumLit`,value:e,structuralHash:Y4(t3(`NumLit`),e),freeParams:e3}}function r3(e){let t=t3(`Vec3Lit`);for(let n of e)t=Y4(t,n);return{kind:`Vec3Lit`,value:e,structuralHash:t,freeParams:e3}}function i3(e){let t=t3(`Vec2Lit`);for(let n of e)t=Y4(t,n);return{kind:`Vec2Lit`,value:e,structuralHash:t,freeParams:e3}}function a3(e){return{kind:`Param`,name:e,structuralHash:G4(t3(`Param`),e),freeParams:new Set([e])}}function o3(e,t,n){let r=G4(t3(`BinOp`),e);return r=X4(r,t.structuralHash),r=X4(r,n.structuralHash),{kind:`BinOp`,op:e,a:t,b:n,structuralHash:r,freeParams:g3(t.freeParams,n.freeParams)}}function s3(e,t){let n=G4(t3(`UnaryOp`),e);return n=X4(n,t.structuralHash),{kind:`UnaryOp`,op:e,arg:t,structuralHash:n,freeParams:t.freeParams}}function c3(e,t){let n=Z4(t3(`Component`),t);return n=X4(n,e.structuralHash),{kind:`Component`,vec:e,index:t,structuralHash:n,freeParams:e.freeParams}}function l3(e,t){let n=Z4(t3(`BuildVec`),e),r=new Set;for(let e of t){n=X4(n,e.structuralHash);for(let t of e.freeParams)r.add(t)}return{kind:`BuildVec`,dim:e,components:t,structuralHash:n,freeParams:r}}var u3=(e,t)=>o3(`+`,e,t),d3=(e,t)=>o3(`*`,e,t);function f3(e){return typeof e==`number`?n3(e):e}function p3(e,t){if(!Array.isArray(e))return e;let n=e;return n.every(e=>typeof e==`number`)?t===3?r3([n[0],n[1],n[2]]):i3([n[0],n[1]]):l3(t,n.map(f3))}function m3(e){return p3(e,3)}function h3(e){return p3(e,2)}function g3(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 _3(e){return typeof e==`number`}function v3(e,t){return _3(e)?R(e):z(W(H.NULL_SHAPE_INPUT,`${t}: expected number, got ${Array.isArray(e)?`vector(${e.length})`:typeof e}`))}function y3(e,t,n){return Array.isArray(e)&&e.length===t?R(e):z(W(H.NULL_SHAPE_INPUT,`${n}: expected Vec${t}, got ${_3(e)?`number`:`vector(${e.length})`}`))}function b3(e,t){switch(e.kind){case`NumLit`:return R(e.value);case`Vec3Lit`:return R(e.value);case`Vec2Lit`:return R(e.value);case`Param`:{let n=t[e.name];return n===void 0?z(W(H.NULL_SHAPE_INPUT,`unbound param: ${e.name}`)):R(n)}case`BinOp`:return x3(e,t);case`UnaryOp`:return S3(e,t);case`Component`:return C3(e,t);case`BuildVec`:return w3(e,t)}}function x3(e,t){let n=b3(e.a,t);if(!n.ok)return n;let r=b3(e.b,t);if(!r.ok)return r;let i=v3(n.value,`BinOp(${e.op}).a`);if(!i.ok)return i;let a=v3(r.value,`BinOp(${e.op}).b`);if(!a.ok)return a;switch(e.op){case`+`:return R(i.value+a.value);case`-`:return R(i.value-a.value);case`*`:return R(i.value*a.value);case`/`:return a.value===0?z(W(H.NULL_SHAPE_INPUT,`BinOp(/): division by zero`)):R(i.value/a.value)}}function S3(e,t){let n=b3(e.arg,t);if(!n.ok)return n;let r=v3(n.value,`UnaryOp(${e.op})`);if(!r.ok)return r;let i=r.value;switch(e.op){case`neg`:return R(-i);case`sin`:return R(Math.sin(i));case`cos`:return R(Math.cos(i));case`sqrt`:return R(Math.sqrt(i));case`abs`:return R(Math.abs(i))}}function C3(e,t){let n=b3(e.vec,t);if(!n.ok)return n;if(_3(n.value))return z(W(H.NULL_SHAPE_INPUT,`Component: cannot index a scalar`));let r=n.value,i=r[e.index];return i===void 0?z(W(H.NULL_SHAPE_INPUT,`Component: index ${e.index} out of range for Vec${r.length}`)):R(i)}function w3(e,t){if(e.components.length!==e.dim)return z(W(H.NULL_SHAPE_INPUT,`BuildVec(${e.dim}): expected ${e.dim} components, got ${e.components.length}`));let n=[];for(let r of e.components){let e=b3(r,t);if(!e.ok)return e;let i=v3(e.value,`BuildVec.component`);if(!i.ok)return i;n.push(i.value)}return R(e.dim===2?[n[0],n[1]]:[n[0],n[1],n[2]])}function T3(e,t,n){let r=b3(e,t);return r.ok?v3(r.value,n):r}function E3(e,t,n){let r=b3(e,t);if(!r.ok)return r;let i=y3(r.value,3,n);if(!i.ok)return i;let[a,o,s]=i.value;return R([a,o,s])}function D3(e,t,n){let r=b3(e,t);if(!r.ok)return r;let i=y3(r.value,2,n);if(!i.ok)return i;let[a,o]=i.value;return R([a,o])}function O3(e,t){if(t.size===0)return Object.freeze({});let n={};for(let r of t){let t=e[r];t!==void 0&&(n[r]=t)}return Object.freeze(n)}function k3(e){return{kind:`Line`,to:h3(e)}}function A3(e,t,n){return{kind:`Arc`,to:h3(e),radius:f3(t),largeArc:n?.largeArc??!1,clockwise:n?.clockwise??!1}}function j3(e,t){return{kind:`Bezier`,controls:e.map(h3),to:h3(t)}}function M3(e,t,n){return{kind:`EllipseArc`,to:h3(e),radii:h3(t),rotation:f3(n?.rotation??0),largeArc:n?.largeArc??!1,clockwise:n?.clockwise??!1}}function N3(e,t){let n=Z4(e,t.length),r=(e,t)=>X4(e,t.structuralHash);for(let e of t)if(n=G4(n,e.kind),n=r(n,e.to),e.kind===`Arc`)n=r(n,e.radius),n=Q4(Q4(n,e.largeArc),e.clockwise);else if(e.kind===`Bezier`){n=Z4(n,e.controls.length);for(let t of e.controls)n=r(n,t)}else e.kind===`EllipseArc`&&(n=r(n,e.radii),n=r(n,e.rotation),n=Q4(Q4(n,e.largeArc),e.clockwise));return n}function P3(e){let t=[];for(let n of e)t.push(n.to),n.kind===`Arc`?t.push(n.radius):n.kind===`Bezier`?t.push(...n.controls):n.kind===`EllipseArc`&&t.push(n.radii,n.rotation);return t}function F3(e,t){switch(e.kind){case`Line`:return k3(t(e.to));case`Arc`:return A3(t(e.to),t(e.radius),{largeArc:e.largeArc,clockwise:e.clockwise});case`Bezier`:return j3(e.controls.map(t),t(e.to));case`EllipseArc`:return M3(t(e.to),t(e.radii),{rotation:t(e.rotation),largeArc:e.largeArc,clockwise:e.clockwise})}}var I3=new Set;function L3(e){return G4(V4(),e)}function R3(e,t){return X4(e,t.structuralHash)}function z3(e,t){return t===void 0?Q4(e,!1):R3(Q4(e,!0),t)}function B3(e,t){return t===void 0?Q4(e,!1):Y4(Q4(e,!0),t)}function V3(...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?I3:t}function H3(e,t,n){let r=f3(e),i=f3(t),a=f3(n),o=L3(`Box`);return o=R3(R3(R3(o,r),i),a),{kind:`Box`,x:r,y:i,z:a,structuralHash:o,freeParams:V3(r,i,a)}}function U3(e){let t=f3(e);return{kind:`Sphere`,radius:t,structuralHash:R3(L3(`Sphere`),t),freeParams:t.freeParams}}function W3(e,t){let n=f3(e),r=f3(t);return{kind:`Cylinder`,radius:n,height:r,structuralHash:R3(R3(L3(`Cylinder`),n),r),freeParams:V3(n,r)}}function G3(e,t,n){let r=f3(e),i=f3(t),a=f3(n),o=L3(`Cone`);return o=R3(R3(R3(o,r),i),a),{kind:`Cone`,radius1:r,radius2:i,height:a,structuralHash:o,freeParams:V3(r,i,a)}}function K3(e,t){let n=f3(e),r=f3(t);return{kind:`Torus`,majorRadius:n,minorRadius:r,structuralHash:R3(R3(L3(`Torus`),n),r),freeParams:V3(n,r)}}function q3(e){let t=e.map(m3),n=Z4(L3(`Polygon`),t.length);for(let e of t)n=R3(n,e);return{kind:`Polygon`,points:t,structuralHash:n,freeParams:V3(...t)}}function J3(e){let t=f3(e);return{kind:`Circle`,radius:t,structuralHash:R3(L3(`Circle`),t),freeParams:t.freeParams}}function Y3(e,t){let n=m3(e),r=m3(t);return{kind:`Line`,from:n,to:r,structuralHash:R3(R3(L3(`Line`),n),r),freeParams:V3(n,r)}}function X3(e){let t=m3(e);return{kind:`Vertex`,point:t,structuralHash:R3(L3(`Vertex`),t),freeParams:t.freeParams}}function Z3(e){return{kind:`Empty`,output:e,structuralHash:G4(L3(`Empty`),e),freeParams:I3}}function Q3(){return Z3(`Solid`)}function $3(){return Z3(`Face`)}function e6(){return Z3(`Wire`)}function t6(e,t,n,r){return B3(R3(R3(L3(e),t),n),r)}function n6(e,t,n){return{kind:`Fuse`,a:e,b:t,tolerance:n,structuralHash:t6(`Fuse`,e,t,n),freeParams:V3(e,t)}}function r6(e,t,n){return{kind:`Cut`,a:e,b:t,tolerance:n,structuralHash:t6(`Cut`,e,t,n),freeParams:V3(e,t)}}function i6(e,t,n){return{kind:`Intersect`,a:e,b:t,tolerance:n,structuralHash:t6(`Intersect`,e,t,n),freeParams:V3(e,t)}}function a6(e,t){let n=[...e],r=Z4(L3(`FuseAll`),n.length);for(let e of n)r=R3(r,e);return r=B3(r,t),{kind:`FuseAll`,shapes:n,tolerance:t,structuralHash:r,freeParams:V3(...n)}}function o6(e,t,n){let r=[...t],i=R3(L3(`CutAll`),e);i=Z4(i,r.length);for(let e of r)i=R3(i,e);return i=B3(i,n),{kind:`CutAll`,base:e,tools:r,tolerance:n,structuralHash:i,freeParams:V3(e,...r)}}function s6(e){return e===void 0?void 0:m3(e)}function c6(e,t){let n=m3(t);return{kind:`Translate`,target:e,vector:n,structuralHash:R3(R3(L3(`Translate`),e),n),freeParams:V3(e,n)}}function l6(e,t,n){let r=f3(t),i=s6(n?.axis),a=s6(n?.at),o=R3(R3(L3(`Rotate`),e),r);return o=z3(o,i),o=z3(o,a),{kind:`Rotate`,target:e,angle:r,axis:i,at:a,structuralHash:o,freeParams:V3(e,r,i,a)}}function u6(e,t,n){let r=f3(t),i=s6(n?.center),a=R3(R3(L3(`Scale`),e),r);return a=z3(a,i),{kind:`Scale`,target:e,factor:r,center:i,structuralHash:a,freeParams:V3(e,r,i)}}function d6(e,t){let n=s6(t?.normal),r=s6(t?.at),i=R3(L3(`Mirror`),e);return i=z3(i,n),i=z3(i,r),{kind:`Mirror`,target:e,normal:n,at:r,structuralHash:i,freeParams:V3(e,n,r)}}function f6(e,t){let n=m3(t);return{kind:`Extrude`,profile:e,vector:n,structuralHash:R3(R3(L3(`Extrude`),e),n),freeParams:V3(e,n)}}function p6(e,t){let n=h3(e),r=[...t],i=R3(L3(`Path`),n);return i=N3(i,r),{kind:`Path`,start:n,segments:r,structuralHash:i,freeParams:V3(n,...P3(r))}}function m6(e,t){let n=[...e],r=t?.ruled??!0,i=Z4(L3(`Loft`),n.length);for(let e of n)i=R3(i,e);return i=Q4(i,r),{kind:`Loft`,sections:n,ruled:r,structuralHash:i,freeParams:V3(...n)}}function h6(e,t=360,n){let r=f3(t),i=s6(n?.axis),a=s6(n?.at),o=R3(R3(L3(`Revolve`),e),r);return o=z3(o,i),o=z3(o,a),{kind:`Revolve`,profile:e,angle:r,axis:i,at:a,structuralHash:o,freeParams:V3(e,r,i,a)}}function g6(e){let t=[...e],n=Z4(L3(`Compound`),t.length);for(let e of t)n=R3(n,e);return{kind:`Compound`,children:t,structuralHash:n,freeParams:V3(...t)}}function _6(e,t,n=!1){let r=t.map(e=>e.map(e=>[...e])),i=Z4(Q4(R3(L3(`Instance`),e),n),r.length);for(let e of r)for(let t of e.flat())i=Y4(i,t);return{kind:`Instance`,source:e,placements:r,fuse:n,structuralHash:i,freeParams:V3(e)}}function v6(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 v6(e.a);case`FuseAll`:return e.shapes[0]?v6(e.shapes[0]):`Solid`;case`CutAll`:return v6(e.base);case`Translate`:case`Rotate`:case`Scale`:case`Mirror`:return v6(e.target);case`Extrude`:case`Revolve`:case`Loft`:return`Solid`;case`Path`:return`Wire`;case`Compound`:return`Compound`;case`Instance`:return e.fuse?`Solid`:`Compound`}}function y6(e,t){let n=T3(e.x,t.env,`Box.x`);if(!n.ok)return n;let r=T3(e.y,t.env,`Box.y`);if(!r.ok)return r;let i=T3(e.z,t.env,`Box.z`);return i.ok?R(hj(n.value,r.value,i.value)):i}function b6(e,t){let n=T3(e.radius,t.env,`Sphere.radius`);return n.ok?R(_j(n.value)):n}function x6(e,t){let n=T3(e.radius,t.env,`Cylinder.radius`);if(!n.ok)return n;let r=T3(e.height,t.env,`Cylinder.height`);return r.ok?R(gj(n.value,r.value)):r}function S6(e,t){let n=T3(e.radius1,t.env,`Cone.radius1`);if(!n.ok)return n;let r=T3(e.radius2,t.env,`Cone.radius2`);if(!r.ok)return r;let i=T3(e.height,t.env,`Cone.height`);return i.ok?R(vj(n.value,r.value,i.value)):i}function C6(e,t){let n=T3(e.majorRadius,t.env,`Torus.majorRadius`);if(!n.ok)return n;let r=T3(e.minorRadius,t.env,`Torus.minorRadius`);return r.ok?R(yj(n.value,r.value)):r}function w6(e,t){let n=[];for(let r of e.points){let e=E3(r,t.env,`Polygon.point`);if(!e.ok)return e;n.push(e.value)}return Fj(n)}function T6(e,t){let n=T3(e.radius,t.env,`Circle.radius`);return n.ok?R(Sj(n.value)):n}function E6(e,t){let n=E3(e.from,t.env,`Line.from`);if(!n.ok)return n;let r=E3(e.to,t.env,`Line.to`);return r.ok?R(xj(n.value,r.value)):r}function D6(e,t){let n=E3(e.point,t.env,`Vertex.point`);return n.ok?R(Ij(n.value)):n}function O6(e){return z(vD(H.NULL_SHAPE_INPUT,`${e}: empty result has no kernel representation`))}function k6(e,t,n){let r=e.evalNode(t);return r.ok?FE(r.value)?R(r.value):z(hD(H.CSG_NOT_3D,`${n}: operand did not produce a 3D shape`)):r}function A6(e,t){return{unsafe:!0,fuzzyValue:e.tolerance??t.tolerance}}function j6(e,t){if(e.a.kind===`Empty`)return t.evalNode(e.b);if(e.b.kind===`Empty`)return t.evalNode(e.a);let n=k6(t,e.a,`Fuse.a`);if(!n.ok)return n;let r=k6(t,e.b,`Fuse.b`);return r.ok?DA(n.value,r.value,A6(e,t)):r}function M6(e,t){if(e.a.kind===`Empty`)return O6(`Cut`);if(e.b.kind===`Empty`)return t.evalNode(e.a);let n=k6(t,e.a,`Cut.a`);if(!n.ok)return n;let r=k6(t,e.b,`Cut.b`);return r.ok?OA(n.value,r.value,A6(e,t)):r}function N6(e,t){if(e.a.kind===`Empty`||e.b.kind===`Empty`)return O6(`Intersect`);let n=k6(t,e.a,`Intersect.a`);if(!n.ok)return n;let r=k6(t,e.b,`Intersect.b`);return r.ok?kA(n.value,r.value,A6(e,t)):r}function P6(e,t,n){let r=[];for(let i of t){let t=k6(e,i,n);if(!t.ok)return t;r.push(t.value)}return R(r)}function F6(e,t){let n=e.shapes.filter(e=>e.kind!==`Empty`);if(n.length===0)return O6(`FuseAll`);if(n.length===1&&n[0])return t.evalNode(n[0]);let r=P6(t,n,`FuseAll.operand`);return r.ok?jA(r.value,A6(e,t)):r}function I6(e,t){if(e.base.kind===`Empty`)return O6(`CutAll`);let n=e.tools.filter(e=>e.kind!==`Empty`);if(n.length===0)return t.evalNode(e.base);let r=k6(t,e.base,`CutAll.base`);if(!r.ok)return r;let i=P6(t,n,`CutAll.tool`);return i.ok?MA(r.value,i.value,A6(e,t)):i}function L6(e){return z(vD(H.NULL_SHAPE_INPUT,`${e}: cannot transform an Empty node`))}function R6(e,t,n,r){return e?E3(e,t,n):R(r)}function z6(e,t){let n=F(),{handle:r,dispose:i}=n.composeTransform(t),a;try{a=LE(n.locate(e.wrapped,r))}finally{i()}return bA(e)&&wA(e,a),a}function B6(e,t){if(e.target.kind===`Empty`)return L6(`Translate`);let n=E3(e.vector,t.env,`Translate.vector`);if(!n.ok)return n;let r=t.evalNode(e.target);return r.ok?R(z6(r.value,[{type:`translate`,x:n.value[0],y:n.value[1],z:n.value[2]}])):r}function V6(e,t){if(e.target.kind===`Empty`)return L6(`Rotate`);let n=T3(e.angle,t.env,`Rotate.angle`);if(!n.ok)return n;let r=R6(e.axis,t.env,`Rotate.axis`,[0,0,1]);if(!r.ok)return r;let i=R6(e.at,t.env,`Rotate.at`,[0,0,0]);if(!i.ok)return i;let a=t.evalNode(e.target);return a.ok?R(z6(a.value,[{type:`rotate`,angle:n.value,axis:r.value,center:i.value}])):a}function H6(e,t){if(e.target.kind===`Empty`)return L6(`Scale`);let n=T3(e.factor,t.env,`Scale.factor`);if(!n.ok)return n;let r=R6(e.center,t.env,`Scale.center`,[0,0,0]);if(!r.ok)return r;let i=t.evalNode(e.target);return i.ok?R(oj(i.value,n.value,r.value)):i}function U6(e,t){if(e.target.kind===`Empty`)return L6(`Mirror`);let n=R6(e.normal,t.env,`Mirror.normal`,[1,0,0]);if(!n.ok)return n;let r=R6(e.at,t.env,`Mirror.at`,[0,0,0]);if(!r.ok)return r;let i=t.evalNode(e.target);return i.ok?R(aj(i.value,n.value,r.value)):i}function W6(e,t){let n=e.children.filter(e=>e.kind!==`Empty`);if(n.length===0)return z(vD(H.NULL_SHAPE_INPUT,`Compound: cannot materialize a compound with zero non-empty children`));let r=[];for(let e of n){let n=t.evalNode(e);if(!n.ok)return n;r.push(n.value)}return R(Lj(r))}function G6(){return z(vD(H.NULL_SHAPE_INPUT,`Empty: cannot materialize an Empty node directly — only valid as boolean/transform operand`))}function K6(e,t){let n=t.evalNode(e.source);return n.ok?T1(S1(n.value,e.placements),{fuse:e.fuse}):n}function q6(e,t,n){let r=e.evalNode(t);if(!r.ok)return r;if(!jE(r.value))return z(hD(`CSG_NOT_FACE`,`${n}: node did not produce a Face`));let i=mO(r.value);return i.ok?_O(i.value)?R(i.value):z(hD(`CSG_NOT_FACE`,`${n}: face is not planar`)):z(hD(`CSG_NOT_FACE`,`${n}: ${i.error}`))}function J6(e,t){let n=E3(e.vector,t.env,`Extrude.vector`);if(!n.ok)return n;let r=q6(t,e.profile,`Extrude.profile`);return r.ok?Vq(r.value,n.value):r}function Y6(e,t){let n=T3(e.angle,t.env,`Revolve.angle`);if(!n.ok)return n;if(n.value<=0)return z(W(`CSG_REVOLVE_ANGLE`,`Revolve.angle must be positive (degrees), got ${n.value}`));let r=Math.min(n.value,360),i=e.axis?E3(e.axis,t.env,`Revolve.axis`):R([0,0,1]);if(!i.ok)return i;let a=e.at?E3(e.at,t.env,`Revolve.at`):R([0,0,0]);if(!a.ok)return a;let o=q6(t,e.profile,`Revolve.profile`);return o.ok?Hq(o.value,a.value,i.value,r*Math.PI/180):o}function X6(e,t){try{var n=WT();if(e.sections.length<2)return z(W(`CSG_LOFT_SECTIONS`,`Loft requires at least 2 sections, got ${e.sections.length}`));let r=n.u(new iE),i=[];for(let[n,a]of e.sections.entries()){let e=q6(t,a,`Loft.sections[${n}]`);if(!e.ok)return e;let o=yk(e.value);r.register(o),i.push(o)}return qN(i,{ruled:e.ruled})}catch(e){n.e=e}finally{n.d()}}var Z6=1e-9;function Q6(e){return[e[0],e[1],0]}function $6(e){return z(W(`CSG_PATH_SEGMENT`,`Path: ${e}`))}function e8(e,t,n,r,i){let[a,o]=e,[s,c]=t,l=s-a,u=c-o,d=Math.hypot(l,u);if(d<Z6)return $6(`Arc: coincident endpoints`);if(d>2*n+1e-6)return $6(`Arc: radius ${n} too small for chord ${d}`);let f=Math.sqrt(Math.max(0,n*n-d/2*(d/2))),p=l/d,m=u/d,h=i===r?1:-1,g=(a+s)/2+h*f*-m,_=(o+c)/2+h*f*p,v=Math.atan2(o-_,a-g),y=Math.atan2(c-_,s-g);if(i)for(;y>=v-Z6;)y-=2*Math.PI;else for(;y<=v+Z6;)y+=2*Math.PI;let b=(v+y)/2;return R([g+n*Math.cos(b),_+n*Math.sin(b)])}function t8(e,t,n,r,i,a){let o=!a,[s,c]=n;if(s<=0||c<=0)return $6(`EllipseArc: non-positive radius`);let l=Math.cos(r),u=Math.sin(r),d=(e[0]-t[0])/2,f=(e[1]-t[1])/2,p=l*d+u*f,m=-u*d+l*f,h=p*p/(s*s)+m*m/(c*c);if(h>1){let e=Math.sqrt(h);s*=e,c*=e}let g=s*s*c*c-s*s*m*m-c*c*p*p,_=s*s*m*m+c*c*p*p;if(_<Z6)return $6(`EllipseArc: coincident endpoints`);let v=(i===o?-1:1)*Math.sqrt(Math.max(0,g/_)),y=v*(s*m/c),b=v*(-(c*p)/s),x=l*y-u*b+(e[0]+t[0])/2,S=u*y+l*b+(e[1]+t[1])/2,C=Math.atan2((m-b)/c,(p-y)/s),w=Math.atan2((-m-b)/c,(-p-y)/s)-C;!o&&w>0&&(w-=2*Math.PI),o&&w<0&&(w+=2*Math.PI);let ee=w>=0?C:C+w,te=w>=0?C+w:C;return R({center:[x,S],theta1:ee,theta2:te,rx:s,ry:c})}function n8(e,t,n){if(t.kind!==`EllipseArc`)return $6(`internal: not an ellipse segment`);let r=D3(t.to,n.env,`Path.EllipseArc.to`);if(!r.ok)return r;let i=D3(t.radii,n.env,`Path.EllipseArc.radii`);if(!i.ok)return i;let a=T3(t.rotation,n.env,`Path.EllipseArc.rotation`);if(!a.ok)return a;let o=a.value*Math.PI/180,s=t8(e,r.value,i.value,o,t.largeArc,t.clockwise);if(!s.ok)return s;let{center:c,theta1:l,theta2:u,rx:d,ry:f}=s.value,p,m;if(d>=f?(p=Bk(d,f,l,u,Q6(c),[0,0,1]),m=o):(p=Bk(f,d,l-Math.PI/2,u-Math.PI/2,Q6(c),[0,0,1]),m=o+Math.PI/2),!p.ok)return p;let h=p.value;if(Math.abs(m)>Z6)try{var g=WT();let e=r8(g.u(h),m*180/Math.PI,c);if(!e.ok)return e;h=e.value}catch(e){g.e=e}finally{g.d()}if(t.clockwise)try{var _=WT();h=oM(_.u(h))}catch(e){_.e=e}finally{_.d()}return R(h)}function r8(e,t,n){let r=F(),{handle:i,dispose:a}=r.composeTransform([{type:`rotate`,angle:t,axis:[0,0,1],center:[n[0],n[1],0]}]);try{return R(LE(r.locate(e.wrapped,i)))}catch(e){return z(U(`CSG_PATH_ELLIPSE_ROTATE`,`Path: kernel cannot relocate ellipse-arc edges`,e,{operation:`evalPath`}))}finally{a()}}function i8(e,t){return D3(e.to,t.env,`Path.${e.kind}.to`)}function a8(e,t,n){switch(t.kind){case`Line`:{let r=i8(t,n);return r.ok?Math.hypot(r.value[0]-e[0],r.value[1]-e[1])<Z6?$6(`Line: zero length`):R(Fk(Q6(e),Q6(r.value))):r}case`Arc`:{let r=i8(t,n);if(!r.ok)return r;let i=T3(t.radius,n.env,`Path.Arc.radius`);if(!i.ok)return i;let a=e8(e,r.value,i.value,t.largeArc,t.clockwise);return a.ok?R(zk(Q6(e),Q6(a.value),Q6(r.value))):a}case`Bezier`:{let r=i8(t,n);if(!r.ok)return r;let i=[];for(let e of t.controls){let t=D3(e,n.env,`Path.Bezier.control`);if(!t.ok)return t;i.push(Q6(t.value))}return Uk([Q6(e),...i,Q6(r.value)])}case`EllipseArc`:return n8(e,t,n)}}function o8(e,t){try{var n=WT();if(e.segments.length===0)return $6(`at least one segment required`);let r=D3(e.start,t.env,`Path.start`);if(!r.ok)return r;let i=n.u(new iE),a=[],o=r.value;for(let n of e.segments){let e=a8(o,n,t);if(!e.ok)return e;i.register(e.value),a.push(e.value);let r=i8(n,t);if(!r.ok)return r;o=r.value}return Gk(a)}catch(e){n.e=e}finally{n.d()}}function s8(e,t){switch(e.kind){case`Box`:return y6(e,t);case`Sphere`:return b6(e,t);case`Cylinder`:return x6(e,t);case`Cone`:return S6(e,t);case`Torus`:return C6(e,t);case`Polygon`:return w6(e,t);case`Circle`:return T6(e,t);case`Line`:return E6(e,t);case`Vertex`:return D6(e,t);case`Empty`:return G6();case`Fuse`:return j6(e,t);case`Cut`:return M6(e,t);case`Intersect`:return N6(e,t);case`FuseAll`:return F6(e,t);case`CutAll`:return I6(e,t);case`Translate`:return B6(e,t);case`Rotate`:return V6(e,t);case`Scale`:return H6(e,t);case`Mirror`:return U6(e,t);case`Compound`:return W6(e,t);case`Instance`:return K6(e,t);case`Extrude`:return J6(e,t);case`Revolve`:return Y6(e,t);case`Loft`:return X6(e,t);case`Path`:return o8(e,t)}}function c8(e,t){if(typeof t==`number`)return Y4(Q4(e,!1),t);let n=Q4(e,!0);n=Z4(n,t.length);for(let e of t)n=Y4(n,e);return n}function l8(e,t){if(t.size===0)return V4();let n=O3(e,t),r=Object.keys(n).sort(),i=V4();for(let e of r){i=G4(i,e);let t=n[e];t!==void 0&&(i=c8(i,t))}return i}function u8(e,t,n,r){let i=l8(t,e.freeParams),a=r===void 0?`d`:Y4(V4(),r).toString(16);return`${$4(e.structuralHash)}:${n}:${$4(i)}:${a}`}var d8=[1,0,0,0];function f8(e,t){let n=T3(e.angle,t,`evaluateMesh.peelRigid`);if(!n.ok)return null;let r=e.axis?E3(e.axis,t,`evaluateMesh.peelRigid`):R([0,0,1]);if(!r.ok)return null;let i=e.at?E3(e.at,t,`evaluateMesh.peelRigid`):R([0,0,0]);return i.ok?{angle:n.value,axis:r.value,center:i.value}:null}function p8(e,t){let n=e,r=d8,i=[0,0,0];for(;;)if(n.kind===`Translate`){let e=E3(n.vector,t,`evaluateMesh.peelRigid`);if(!e.ok)break;let a=YF(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=f8(n,t);if(!e)break;let a=XF(e.axis,e.angle*Math.PI/180),o=QF(r,a),s=YF(r,e.center),c=YF(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 m8(e){return e[0]===1&&e[1]===0&&e[2]===0&&e[3]===0}function h8(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 g8(e,t,n){let[r,i,a]=n,o=m8(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;h8(c,s,l,u,d,f,r,i,a);let p=e.normals,m=new Float32Array(p.length);return h8(m,p,l,u,d,f,0,0,0),{...e,vertices:c,normals:m}}function _8(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 v8=class{cache=new Map;refCounts=new Map;evaluating=!1;pendingKeys=[];kernelId;defaultTolerance;maxCacheEntries;maxMeshCacheEntries;meshCache=new Map;onStep;hits=0;misses=0;evictions=0;constructor(e={}){this.kernelId=e.kernel??NT()??`unregistered`,this.defaultTolerance=e.tolerance,e.onStep&&(this.onStep=e.onStep);let t=e.maxCacheEntries;if(t!==void 0&&(!Number.isInteger(t)||t<1))throw RangeError(`Evaluator: maxCacheEntries must be a positive integer, got ${String(t)}`);this.maxCacheEntries=t;let n=e.maxMeshCacheEntries;if(n!==void 0&&(!Number.isInteger(n)||n<1))throw RangeError(`Evaluator: maxMeshCacheEntries must be a positive integer, got ${String(n)}`);this.maxMeshCacheEntries=n}evaluate(e,t={}){if(this.maxCacheEntries!==void 0&&this.evaluating)throw Error(`Evaluator.evaluate() is not reentrant when maxCacheEntries is set — do not call it from an onStep callback.`);return PT(this.kernelId,()=>{this.evaluating=!0;let n=!1;try{let r=this.evaluateInner(e,t);return this.maxCacheEntries!==void 0&&r.ok&&this.trimCache(this.maxCacheEntries),n=r.ok,r}finally{!n&&this.maxCacheEntries!==void 0&&this.rollbackPending(),this.pendingKeys.length=0,this.evaluating=!1}})}evaluateMesh(e,t={},n={}){n.signal?.throwIfAborted();let r=n.cache??!0,i=ho(),a=n.tolerance??i.tolerance,o=n.angularTolerance??i.angularTolerance,s=`${u8(e,t,this.kernelId,this.defaultTolerance)}|${uM(a,o,n.skipNormals??!1,n.includeUVs??!1)}`;if(r){let r=this.meshCache.get(s);if(r!==void 0)return this.maxMeshCacheEntries!==void 0&&(this.meshCache.delete(s),this.meshCache.set(s,r)),R(r);let{inner:i,rot:a,trans:o}=p8(e,t);if(i!==e){let r=this.evaluateMesh(i,t,n);if(!r.ok)return r;let c=this.evaluate(i,t);if(!c.ok)return c;let l=WD(c.value).map(Wj),u=this.evaluate(e,t);if(!u.ok)return u;let d=WD(u.value).map(Wj),f=g8(r.value,a,o),p=_8(f.faceGroups,l,d),m=new Set(d);if(p.every(e=>m.has(e.faceId))){let e={...f,faceGroups:p};return this.meshCache.set(s,e),this.maxMeshCacheEntries!==void 0&&this.trimMeshCache(this.maxMeshCacheEntries),R(e)}}}let c=this.evaluate(e,t);if(!c.ok)return c;let l=PT(this.kernelId,()=>bM(c.value,n));return r&&(this.meshCache.set(s,l),this.maxMeshCacheEntries!==void 0&&this.trimMeshCache(this.maxMeshCacheEntries)),R(l)}evaluateInner(e,t){let n=u8(e,t,this.kernelId,this.defaultTolerance),r=this.cache.get(n);if(r!==void 0)return this.hits++,this.maxCacheEntries!==void 0&&(this.cache.delete(n),this.cache.set(n,r)),this.onStep?.({node:e,cacheKey:n,cacheHit:!0}),R(r);this.misses++;let i=s8(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 y8(e,t){try{var n=WT();let r=t(n.u(new v8(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 b8(e){return{csgVersion:1,root:D8(e)}}function x8(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:x8(e.a),b:x8(e.b)};case`UnaryOp`:return{kind:`UnaryOp`,op:e.op,arg:x8(e.arg)};case`Component`:return{kind:`Component`,vec:x8(e.vec),index:e.index};case`BuildVec`:return{kind:`BuildVec`,dim:e.dim,components:e.components.map(x8)}}}function S8(e){switch(e.kind){case`Box`:return{kind:`Box`,x:x8(e.x),y:x8(e.y),z:x8(e.z)};case`Sphere`:return{kind:`Sphere`,radius:x8(e.radius)};case`Cylinder`:return{kind:`Cylinder`,radius:x8(e.radius),height:x8(e.height)};case`Cone`:return{kind:`Cone`,radius1:x8(e.radius1),radius2:x8(e.radius2),height:x8(e.height)};case`Torus`:return{kind:`Torus`,majorRadius:x8(e.majorRadius),minorRadius:x8(e.minorRadius)};case`Polygon`:return{kind:`Polygon`,points:e.points.map(x8)};case`Circle`:return{kind:`Circle`,radius:x8(e.radius)};case`Line`:return{kind:`Line`,from:x8(e.from),to:x8(e.to)};case`Vertex`:return{kind:`Vertex`,point:x8(e.point)};case`Empty`:return{kind:`Empty`,output:e.output};default:return}}function C8(e){switch(e.kind){case`Fuse`:case`Cut`:case`Intersect`:return{kind:e.kind,a:D8(e.a),b:D8(e.b),tolerance:e.tolerance};case`FuseAll`:return{kind:`FuseAll`,shapes:e.shapes.map(D8),tolerance:e.tolerance};case`CutAll`:return{kind:`CutAll`,base:D8(e.base),tools:e.tools.map(D8),tolerance:e.tolerance};default:return}}function w8(e){return e?x8(e):void 0}function T8(e){switch(e.kind){case`Line`:return{kind:`Line`,to:x8(e.to)};case`Arc`:return{kind:`Arc`,to:x8(e.to),radius:x8(e.radius),largeArc:e.largeArc,clockwise:e.clockwise};case`Bezier`:return{kind:`Bezier`,controls:e.controls.map(x8),to:x8(e.to)};case`EllipseArc`:return{kind:`EllipseArc`,to:x8(e.to),radii:x8(e.radii),rotation:x8(e.rotation),largeArc:e.largeArc,clockwise:e.clockwise}}}function E8(e){switch(e.kind){case`Translate`:return{kind:`Translate`,target:D8(e.target),vector:x8(e.vector)};case`Rotate`:return{kind:`Rotate`,target:D8(e.target),angle:x8(e.angle),axis:w8(e.axis),at:w8(e.at)};case`Scale`:return{kind:`Scale`,target:D8(e.target),factor:x8(e.factor),center:w8(e.center)};case`Mirror`:return{kind:`Mirror`,target:D8(e.target),normal:w8(e.normal),at:w8(e.at)};default:return}}function D8(e){return e.kind===`Extrude`?{kind:`Extrude`,profile:D8(e.profile),vector:x8(e.vector)}:e.kind===`Revolve`?{kind:`Revolve`,profile:D8(e.profile),angle:x8(e.angle),axis:w8(e.axis),at:w8(e.at)}:e.kind===`Loft`?{kind:`Loft`,sections:e.sections.map(D8),ruled:e.ruled}:e.kind===`Path`?{kind:`Path`,start:x8(e.start),segments:e.segments.map(T8)}:e.kind===`Compound`?{kind:`Compound`,children:e.children.map(D8)}:e.kind===`Instance`?{kind:`Instance`,source:D8(e.source),placements:e.placements,fuse:e.fuse}:S8(e)??C8(e)??E8(e)}function O8(e){return z(W(H.NULL_SHAPE_INPUT,`csg.fromJSON: ${e}`))}function k8(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function A8(e){return typeof e==`number`&&Number.isFinite(e)}function j8(e){return typeof e==`string`}function M8(e,t){if(!Array.isArray(e)||e.length!==3)return O8(`${t}: expected Vec3 array`);let[n,r,i]=e;return!A8(n)||!A8(r)||!A8(i)?O8(`${t}: Vec3 contains non-number`):R([n,r,i])}function N8(e,t){if(!Array.isArray(e)||e.length!==2)return O8(`${t}: expected Vec2 array`);let[n,r]=e;return!A8(n)||!A8(r)?O8(`${t}: Vec2 contains non-number`):R([n,r])}function P8(e){if(!k8(e))return O8(`input is not an object`);let t=e.csgVersion;if(t!==1)return O8(`unsupported csgVersion ${String(t)} (expected 1)`);let n=e.root;return H8(n)}function F8(e){if(!k8(e))return O8(`expression: not an object`);let t=e.kind;switch(t){case`NumLit`:return A8(e.value)?R(n3(e.value)):O8(`NumLit.value`);case`Vec3Lit`:{let t=M8(e.value,`Vec3Lit.value`);return t.ok?R(r3(t.value)):t}case`Vec2Lit`:{let t=N8(e.value,`Vec2Lit.value`);return t.ok?R(i3(t.value)):t}case`Param`:return j8(e.name)?R(a3(e.name)):O8(`Param.name`);case`BinOp`:return I8(e);case`UnaryOp`:return L8(e);case`Component`:return R8(e);case`BuildVec`:return z8(e);default:return O8(`unknown expression kind: ${String(t)}`)}}function I8(e){let t=e.op;if(t!==`+`&&t!==`-`&&t!==`*`&&t!==`/`)return O8(`BinOp.op: ${String(t)}`);let n=F8(e.a);if(!n.ok)return n;let r=F8(e.b);return r.ok?R(o3(t,n.value,r.value)):r}function L8(e){let t=e.op;if(!j8(t)||![`neg`,`sin`,`cos`,`sqrt`,`abs`].includes(t))return O8(`UnaryOp.op: ${String(t)}`);let n=F8(e.arg);return n.ok?R(s3(t,n.value)):n}function R8(e){let t=e.index;if(t!==0&&t!==1&&t!==2)return O8(`Component.index: ${String(t)}`);let n=F8(e.vec);return n.ok?R(c3(n.value,t)):n}function z8(e){let t=e.dim;if(t!==2&&t!==3)return O8(`BuildVec.dim: ${String(t)}`);let n=e.components;if(!Array.isArray(n))return O8(`BuildVec.components: not array`);if(n.length!==t)return O8(`BuildVec.components: expected ${t} components, got ${n.length}`);let r=[];for(let e of n){let t=F8(e);if(!t.ok)return t;r.push(t.value)}return R(l3(t,r))}function B8(e,t){if(!Array.isArray(e))return O8(`${t}: not array`);let n=[];for(let t of e){let e=H8(t);if(!e.ok)return e;n.push(e.value)}return R(n)}function V8(e){let t=e.tolerance;return t==null?R(void 0):A8(t)?R(t):O8(`tolerance: not a finite number`)}function H8(e){if(!k8(e))return O8(`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 W8(t,e);case`Fuse`:case`Cut`:case`Intersect`:return Q8(t,e);case`FuseAll`:case`CutAll`:return $8(t,e);case`Translate`:case`Rotate`:case`Scale`:case`Mirror`:return e5(t,e);case`Compound`:return f5(e);case`Instance`:return m5(e);case`Extrude`:return o5(e);case`Revolve`:return s5(e);case`Loft`:return c5(e);case`Path`:return d5(e);default:return O8(`unknown node kind: ${String(t)}`)}}function U8(e,t,n){let r=F8(e[t]);return r.ok?R(n(r.value)):r}function W8(e,t){switch(e){case`Box`:return G8(t);case`Sphere`:return U8(t,`radius`,U3);case`Cylinder`:return K8(t);case`Cone`:return q8(t);case`Torus`:return J8(t);case`Polygon`:return Y8(t);case`Circle`:return U8(t,`radius`,J3);case`Line`:return X8(t);case`Vertex`:return U8(t,`point`,X3);case`Empty`:return Z8(t)}return O8(`unhandled primitive: ${e}`)}function G8(e){let t=F8(e.x);if(!t.ok)return t;let n=F8(e.y);if(!n.ok)return n;let r=F8(e.z);return r.ok?R(H3(t.value,n.value,r.value)):r}function K8(e){let t=F8(e.radius);if(!t.ok)return t;let n=F8(e.height);return n.ok?R(W3(t.value,n.value)):n}function q8(e){let t=F8(e.radius1);if(!t.ok)return t;let n=F8(e.radius2);if(!n.ok)return n;let r=F8(e.height);return r.ok?R(G3(t.value,n.value,r.value)):r}function J8(e){let t=F8(e.majorRadius);if(!t.ok)return t;let n=F8(e.minorRadius);return n.ok?R(K3(t.value,n.value)):n}function Y8(e){let t=e.points;if(!Array.isArray(t))return O8(`Polygon.points: not array`);let n=[];for(let e of t){let t=F8(e);if(!t.ok)return t;n.push(t.value)}return R(q3(n))}function X8(e){let t=F8(e.from);if(!t.ok)return t;let n=F8(e.to);return n.ok?R(Y3(t.value,n.value)):n}function Z8(e){let t=e.output;switch(t){case`Solid`:return R(Q3());case`Face`:return R($3());case`Wire`:return R(e6());default:return O8(`Empty.output: ${String(t)}`)}}function Q8(e,t){let n=H8(t.a);if(!n.ok)return n;let r=H8(t.b);if(!r.ok)return r;let i=V8(t);if(!i.ok)return i;switch(e){case`Fuse`:return R(n6(n.value,r.value,i.value));case`Cut`:return R(r6(n.value,r.value,i.value));case`Intersect`:return R(i6(n.value,r.value,i.value))}}function $8(e,t){let n=V8(t);if(!n.ok)return n;if(e===`FuseAll`){let e=B8(t.shapes,`FuseAll.shapes`);return e.ok?R(a6(e.value,n.value)):e}let r=H8(t.base);if(!r.ok)return r;let i=B8(t.tools,`CutAll.tools`);return i.ok?R(o6(r.value,i.value,n.value)):i}function e5(e,t){let n=H8(t.target);if(!n.ok)return n;switch(e){case`Translate`:return t5(t,n.value);case`Rotate`:return r5(t,n.value);case`Scale`:return i5(t,n.value);case`Mirror`:return a5(t,n.value)}}function t5(e,t){let n=F8(e.vector);return n.ok?R(c6(t,n.value)):n}function n5(e,t){if(e[t]===void 0)return R(void 0);let n=F8(e[t]);return n.ok?R(n.value):n}function r5(e,t){let n=F8(e.angle);if(!n.ok)return n;let r=n5(e,`axis`);if(!r.ok)return r;let i=n5(e,`at`);return i.ok?R(l6(t,n.value,{axis:r.value,at:i.value})):i}function i5(e,t){let n=F8(e.factor);if(!n.ok)return n;let r=n5(e,`center`);return r.ok?R(u6(t,n.value,{center:r.value})):r}function a5(e,t){let n=n5(e,`normal`);if(!n.ok)return n;let r=n5(e,`at`);return r.ok?R(d6(t,{normal:n.value,at:r.value})):r}function o5(e){let t=H8(e.profile);if(!t.ok)return t;let n=F8(e.vector);return n.ok?R(f6(t.value,n.value)):n}function s5(e){let t=H8(e.profile);if(!t.ok)return t;let n=F8(e.angle);if(!n.ok)return n;let r=n5(e,`axis`);if(!r.ok)return r;let i=n5(e,`at`);return i.ok?R(h6(t.value,n.value,{axis:r.value,at:i.value})):i}function c5(e){let t=B8(e.sections,`Loft.sections`);if(!t.ok)return t;let n=e.ruled;return n!==void 0&&typeof n!=`boolean`?O8(`Loft.ruled: not a boolean`):R(m6(t.value,{ruled:n}))}function l5(e,t){let n=e[t];return n===void 0?R(!1):typeof n==`boolean`?R(n):O8(`${t}: not a boolean`)}function u5(e){if(!k8(e))return O8(`segment: not an object`);let t=F8(e.to);if(!t.ok)return t;let n=e.kind;switch(n){case`Line`:return R(k3(t.value));case`Arc`:{let n=F8(e.radius);if(!n.ok)return n;let r=l5(e,`largeArc`);if(!r.ok)return r;let i=l5(e,`clockwise`);return i.ok?R(A3(t.value,n.value,{largeArc:r.value,clockwise:i.value})):i}case`Bezier`:{let n=e.controls;if(!Array.isArray(n))return O8(`Bezier.controls: not array`);let r=[];for(let e of n){let t=F8(e);if(!t.ok)return t;r.push(t.value)}return R(j3(r,t.value))}case`EllipseArc`:{let n=F8(e.radii);if(!n.ok)return n;let r=F8(e.rotation);if(!r.ok)return r;let i=l5(e,`largeArc`);if(!i.ok)return i;let a=l5(e,`clockwise`);return a.ok?R(M3(t.value,n.value,{rotation:r.value,largeArc:i.value,clockwise:a.value})):a}default:return O8(`unknown segment kind: ${String(n)}`)}}function d5(e){let t=F8(e.start);if(!t.ok)return t;let n=e.segments;if(!Array.isArray(n))return O8(`Path.segments: not array`);let r=[];for(let e of n){let t=u5(e);if(!t.ok)return t;r.push(t.value)}return R(p6(t.value,r))}function f5(e){let t=B8(e.children,`Compound.children`);return t.ok?R(g6(t.value)):t}function p5(e){return Array.isArray(e)&&e.length===4&&e.every(e=>Array.isArray(e)&&e.length===4&&e.every(A8))}function m5(e){let t=H8(e.source);if(!t.ok)return t;let n=e.placements;return!Array.isArray(n)||!n.every(p5)?O8(`Instance.placements must be an array of 4x4 number matrices`):R(_6(t.value,n,e.fuse===!0))}function h5(e){return v5(e)}function g5(e){switch(e.kind){case`NumLit`:case`Vec3Lit`:case`Vec2Lit`:case`Param`:return e;case`BinOp`:{let t=g5(e.a),n=g5(e.b);if(t.kind===`NumLit`&&n.kind===`NumLit`)switch(e.op){case`+`:return n3(t.value+n.value);case`-`:return n3(t.value-n.value);case`*`:return n3(t.value*n.value);case`/`:return n3(t.value/n.value)}return t!==e.a||n!==e.b?o3(e.op,t,n):e}case`UnaryOp`:{let t=g5(e.arg);if(t.kind===`NumLit`){let n=t.value;switch(e.op){case`neg`:return n3(-n);case`sin`:return n3(Math.sin(n));case`cos`:return n3(Math.cos(n));case`sqrt`:return n3(Math.sqrt(n));case`abs`:return n3(Math.abs(n))}}return t===e.arg?e:s3(e.op,t)}case`Component`:{let t=g5(e.vec);return t.kind===`Vec3Lit`||t.kind===`Vec2Lit`&&(e.index===0||e.index===1)?n3(t.value[e.index]):t===e.vec?e:c3(t,e.index)}case`BuildVec`:{let t=e.components.map(g5);return _5(e.dim,t)||(t.some((t,n)=>t!==e.components[n])?l3(e.dim,t):e)}}}function _5(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?i3([n[0],n[1]]):r3([n[0],n[1],n[2]])}function v5(e){switch(e.kind){case`Box`:return H3(g5(e.x),g5(e.y),g5(e.z));case`Sphere`:return U3(g5(e.radius));case`Cylinder`:return W3(g5(e.radius),g5(e.height));case`Cone`:return G3(g5(e.radius1),g5(e.radius2),g5(e.height));case`Torus`:return K3(g5(e.majorRadius),g5(e.minorRadius));case`Polygon`:return q3(e.points.map(g5));case`Circle`:return J3(g5(e.radius));case`Line`:return Y3(g5(e.from),g5(e.to));case`Vertex`:return X3(g5(e.point));case`Empty`:return e;case`Fuse`:return b5(e.a,e.b,e.tolerance);case`Cut`:return x5(e.a,e.b,e.tolerance);case`Intersect`:return S5(e.a,e.b,e.tolerance);case`FuseAll`:return C5(e.shapes,e.tolerance);case`CutAll`:return w5(e.base,e.tools,e.tolerance);case`Translate`:return T5(e.target,e.vector);case`Rotate`:return l6(v5(e.target),g5(e.angle),{axis:e.axis?g5(e.axis):void 0,at:e.at?g5(e.at):void 0});case`Scale`:return u6(v5(e.target),g5(e.factor),{center:e.center?g5(e.center):void 0});case`Mirror`:return d6(v5(e.target),{normal:e.normal?g5(e.normal):void 0,at:e.at?g5(e.at):void 0});case`Compound`:return g6(e.children.map(v5).filter(e=>e.kind!==`Empty`));case`Instance`:return _6(v5(e.source),e.placements,e.fuse);case`Extrude`:case`Revolve`:case`Loft`:case`Path`:return y5(e)}}function y5(e){switch(e.kind){case`Extrude`:return f6(v5(e.profile),g5(e.vector));case`Revolve`:return h6(v5(e.profile),g5(e.angle),{axis:e.axis?g5(e.axis):void 0,at:e.at?g5(e.at):void 0});case`Loft`:return m6(e.sections.map(v5),{ruled:e.ruled});case`Path`:return p6(g5(e.start),e.segments.map(e=>F3(e,g5)))}}function b5(e,t,n){let r=v5(e),i=v5(t);return r.kind===`Empty`?i:i.kind===`Empty`?r:n6(r,i,n)}function x5(e,t,n){let r=v5(e),i=v5(t);return i.kind===`Empty`||r.kind===`Empty`?r:r6(r,i,n)}function S5(e,t,n){let r=v5(e),i=v5(t);return r.kind===`Empty`?r:i.kind===`Empty`?i:i6(r,i,n)}function C5(e,t){let n=e.map(v5).filter(e=>e.kind!==`Empty`);return n.length===0?Q3():n.length===1?n[0]:a6(n,t)}function w5(e,t,n){let r=v5(e);if(r.kind===`Empty`)return r;let i=t.map(v5).filter(e=>e.kind!==`Empty`);return i.length===0?r:o6(r,i,n)}function T5(e,t){let n=v5(e),r=g5(t);if(r.kind!==`Vec3Lit`)return c6(n,r);let[i,a,o]=r.value;if(i===0&&a===0&&o===0)return n;if(n.kind===`Translate`){let e=g5(n.vector);if(e.kind===`Vec3Lit`)return c6(n.target,[e.value[0]+i,e.value[1]+a,e.value[2]+o])}return c6(n,r)}function E5(e,t,n){return D5(e,t,n)}function D5(e,t,n){return t(e)?n:O5(e,t,n)}function O5(e,t,n){switch(e.kind){case`Box`:case`Sphere`:case`Cylinder`:case`Cone`:case`Torus`:case`Polygon`:case`Circle`:case`Line`:case`Vertex`:case`Empty`:case`Path`:return e;case`Fuse`:return n6(D5(e.a,t,n),D5(e.b,t,n),e.tolerance);case`Cut`:return r6(D5(e.a,t,n),D5(e.b,t,n),e.tolerance);case`Intersect`:return i6(D5(e.a,t,n),D5(e.b,t,n),e.tolerance);case`FuseAll`:return a6(e.shapes.map(e=>D5(e,t,n)),e.tolerance);case`CutAll`:return o6(D5(e.base,t,n),e.tools.map(e=>D5(e,t,n)),e.tolerance);case`Translate`:return c6(D5(e.target,t,n),e.vector);case`Rotate`:return l6(D5(e.target,t,n),e.angle,{axis:e.axis,at:e.at});case`Scale`:return u6(D5(e.target,t,n),e.factor,{center:e.center});case`Mirror`:return d6(D5(e.target,t,n),{normal:e.normal,at:e.at});case`Compound`:return g6(e.children.map(e=>D5(e,t,n)));case`Instance`:return _6(D5(e.source,t,n),e.placements,e.fuse);case`Extrude`:return f6(D5(e.profile,t,n),e.vector);case`Revolve`:return h6(D5(e.profile,t,n),e.angle,{axis:e.axis,at:e.at});case`Loft`:return m6(e.sections.map(e=>D5(e,t,n)),{ruled:e.ruled})}}function k5(e,t){t(e);for(let n of A5(e))k5(n,t)}function A5(e){switch(e.kind){case`Box`:case`Sphere`:case`Cylinder`:case`Cone`:case`Torus`:case`Polygon`:case`Circle`:case`Line`:case`Vertex`:case`Empty`:case`Path`:return[];case`Fuse`:case`Cut`:case`Intersect`:return[e.a,e.b];case`FuseAll`:return e.shapes;case`CutAll`:return[e.base,...e.tools];case`Translate`:case`Rotate`:case`Scale`:case`Mirror`:return[e.target];case`Compound`:return e.children;case`Instance`:return[e.source];case`Extrude`:case`Revolve`:return[e.profile];case`Loft`:return e.sections}}function j5(e){let t=0;return k5(e,()=>{t++}),t}var M5=NZ({CSG_VERSION:()=>1,Evaluator:()=>v8,add:()=>u3,arcTo:()=>A3,asScalarExpr:()=>f3,asVec2Expr:()=>h3,asVec3Expr:()=>m3,bezierTo:()=>j3,binOp:()=>o3,box:()=>H3,buildVec:()=>l3,circle:()=>J3,component:()=>c3,compound:()=>g6,cone:()=>G3,cut:()=>r6,cutAll:()=>o6,cylinder:()=>W3,ellipseArcTo:()=>M3,emptyFace:()=>$3,emptySolid:()=>Q3,emptyWire:()=>e6,extrude:()=>f6,foldExpr:()=>g5,forEachNode:()=>k5,fromJSON:()=>P8,fuse:()=>n6,fuseAll:()=>a6,instance:()=>_6,intersect:()=>i6,line:()=>Y3,lineTo:()=>k3,loft:()=>m6,mirror:()=>d6,mul:()=>d3,nodeCount:()=>j5,numLit:()=>n3,optimize:()=>h5,outputKindOf:()=>v6,param:()=>a3,path:()=>p6,polygon:()=>q3,replaceNode:()=>E5,revolve:()=>h6,rotate:()=>l6,scale:()=>u6,sphere:()=>U3,toJSON:()=>b8,torus:()=>K3,translate:()=>c6,unaryOp:()=>s3,vec2Lit:()=>i3,vec3Lit:()=>r3,vertex:()=>X3,withEvaluator:()=>y8});export{dz as BaseSketcher2d,fz as BlueprintSketcher,r as BrepBugError,H as BrepErrorCode,x2 as BrepWrapperError,Cy as BrepkitAdapter,Wq as CompoundSketch,o as DEFAULT_CAPABILITIES,CD as DEG2RAD,iE as DisposalScope,a as EXACT_BREP_CAPABILITIES,CJ as FaceSketcher,G as HASH_CODE_MAX,WE as OK,uo as OcctWasmAdapter,wD as RAD2DEG,oJ as Sketch,SJ as Sketcher,sJ as Sketches,RF as addChild,Vj as addHoles,hI as addJoint,n0 as addMate,XI as addStep,CP as adjacentFaces,$E as all,JE as andThen,RZ as applyGlue,F0 as applyMatrix,cM as approximateCurve,mE as as2D,pE as as3D,ZO as asTopo,RP as assignRoles,jN as autoHeal,Oj as bezier,xX as blueprintToDXF,WA as booleanPipeline,A4 as booleans,v2 as boss,hj as box,Dj as bsplineApprox,i as bug,yJ as cameraFromPlane,vJ as cameraLookAt,AP as captureHint,rk as cast,LE as castShape,RE as castShape3D,Z0 as chamfer,BM as chamferDistAngleShape,lN as chamferWithEvolution,a0 as checkAllInterferences,eN as checkBoolean,i0 as checkInterference,Sj as circle,FF as circularPattern,vk as classifyPointOnFace,vM as clearMeshCache,P0 as clone,pO as closedWire,uD as collect,WF as collectShapes,gA as colorFaces,hA as colorShape,VN as complexExtrude,fj as composeTransforms,Lj as compound,rJ as compoundSketchExtrude,tJ as compoundSketchFace,aJ as compoundSketchLoft,iJ as compoundSketchRevolve,vD as computationError,l1 as computeStraightSkeleton,vj as cone,I4 as construction,U$ as convexHull,_z as cornerFinder,UF as countNodes,MF as createAssembly,LF as createAssemblyNode,FY as createBlueprint,_J as createCamera,DE as createCompound,IY as createCompoundBlueprint,_F as createDerivedFaceRef,cP as createDistanceQuery,xE as createEdge,eF as createEdgeRef,CE as createFace,eE as createHandle,YI as createHistory,rE as createKernelHandle,yM as createMeshCache,WO as createNamedPlane,TZ as createOperationRegistry,HO as createPlane,zP as createRef,rL as createRegistry,wE as createShell,TE as createSolid,_Z as createTaskQueue,bE as createVertex,cF as createVertexRef,SE as createWire,wZ as createWorkerClient,AZ as createWorkerHandler,jZ as createWorkerPool,M5 as csg,mo as currentQuality,DY as curve2dBoundingBox,PY as curve2dDistanceFrom,OY as curve2dFirstPoint,NY as curve2dIsOnCurve,kY as curve2dLastPoint,jY as curve2dParameter,AY as curve2dSplitAt,MY as curve2dTangentAt,tM as curveAxis,Zj as curveEndPoint,nM as curveIsClosed,rM as curveIsPeriodic,eM as curveLength,iM as curvePeriod,Qj as curvePointAt,Xj as curveStartPoint,$j as curveTangentAt,z0 as cut,rB as cut2D,V0 as cutAll,GM as cutAllBisect,Kz as cutBlueprints,oN as cutWithEvolution,gj as cylinder,cI as cylindricalJoint,kP as defaultScorer,yZ as dequeueTask,o2 as describe,eY as deserializeDrawing,uL as deserializeHistory,ak as deserializeShape,tk as downcast,t2 as draft,nY as draw,sY as drawCircle,cY as drawEllipse,hY as drawFaceOutline,fY as drawParametricFunction,dY as drawPointsInterpolation,lY as drawPolysides,mY as drawProjection,iY as drawRectangle,rY as drawRoundedRectangle,aY as drawSingleCircle,oY as drawSingleEllipse,uY as drawText,xY as drawingChamfer,vY as drawingCut,bY as drawingFillet,_Y as drawingFuse,yY as drawingIntersect,gY as drawingToSketchOnPlane,g2 as drill,FL as edgeFinder,yP as edgesOfFace,Cj as ellipse,Ej as ellipseArc,bj as ellipsoid,vZ as enqueueTask,z as err,NF as exportAssemblySTEP,bX as exportDXF,sX as exportGlb,oX as exportGltf,DM as exportIGES,XY as exportOBJ,TM as exportSTEP,iZ as exportSTEPConfigured,EM as exportSTL,BX as exportThreeMF,WI as exportURDF,d2 as extrude,Uq as extrudeAll,Mj as face,_k as faceAxis,gk as faceCenter,RL as faceFinder,ck as faceGeomType,lk as faceOrientation,_P as facesOfEdge,vP as facesOfVertex,jQ as fieldBoolean,FQ as fieldContour,MQ as fieldOffset,PQ as fieldReinit,NQ as fieldShell,qk as fill,Nj as filledFace,X0 as fillet,cN as filletWithEvolution,iA as findFacesByTag,VF as findNode,QI as findStep,PN as fixSelfIntersection,MN as fixShape,YE as flatMap,nD as flatten,uk as flipFaceOrientation,oM as flipOrientation,uZ as fontMetrics,yI as forwardKinematics,c2 as fromBREP,A$ as fromKernelDir,k$ as fromKernelPnt,O$ as fromKernelVec,iD as fromNullable,R0 as fuse,tB as fuse2D,B0 as fuseAll,YM as fuseAllBisect,Gz as fuseBlueprints,aN as fuseWithEvolution,G2 as gearGeometry,XZ as getActiveVoxelId,rO as getBounds,LY as getBounds2D,YD as getCompSolids,Yj as getCurveType,JT as getDisposalStats,UD as getEdges,vA as getFaceColor,Ck as getFaceOrigins,aA as getFaceTags,WD as getFaces,uJ as getFont,Wj as getHashCode,$I as getHistoryShape,F as getKernel,FT as getKernelCapabilities,zT as getKernelTier,VM as getNurbsCurveData,HM as getNurbsSurfaceData,aM as getOrientation,RY as getOrientation2D,Co as getPerformanceStats,_A as getShapeColor,vE as getShapeKind,JD as getShells,VL as getSingleFace,qD as getSolids,sk as getSurfaceType,sA as getTagMetadata,KD as getVertices,YZ as getVoxel,GD as getWires,IF as gridPattern,KN as guidedSweep,n2 as heal,ON as healFace,DN as healSolid,kN as healWire,wj as helix,H$ as hull,u0 as importDXF,D0 as importGLB,sZ as importIGES,m0 as importOBJ,aZ as importSTEP,oZ as importSTL,rZ as importSVG,nZ as importSVGPathD,E0 as importThreeMF,JI as importURDF,UT as init,AT as initFromManifold,VT as initFromOC,ZZ as initVoxel,xk as innerWires,S1 as instance,w1 as instanceCount,C1 as instanceGrid,D1 as instancedMesh,sM as interpolateCurve,H0 as intersect,iB as intersect2D,qz as intersectBlueprints,sN as intersectWithEvolution,HD as invalidateShapeCache,NI as inverseKinematics,P4 as io,yD as ioError,fE as is2D,dE as is3D,mZ as isBatchRequest,BZ as isChamferRadius,lO as isClosedWire,ik as isCompSolid,PE as isCompound,bF as isDerivedFaceRef,pZ as isDisposeRequest,kE as isEdge,xF as isEdgeRef,u2 as isEmpty,qj as isEqualShape,B as isErr,gZ as isErrorResponse,jE as isFace,CF as isFaceRef,VZ as isFilletRadius,dZ as isInitRequest,zY as isInside2D,x1 as isInstanced,wF as isLineageRef,uE as isLive,dO as isManifoldShell,zZ as isNumber,GE as isOk,fZ as isOperationRequest,uO as isOrientedFace,_O as isPlanarFace,vO as isPlanarWire,mJ as isProjectionPlane,xZ as isQueueEmpty,Kj as isSameShape,IE as isShape1D,FE as isShape3D,ME as isShell,NE as isSolid,hZ as isSuccessResponse,l2 as isValid,fO as isValidSolid,OE as isVertex,SF as isVertexRef,AE as isWire,nO as iterCompSolids,XD as iterEdges,ZD as iterFaces,tO as iterShells,eO as iterSolids,$O as iterTopo,$D as iterVertices,QD as iterWires,FI as jointTrajectory,mI as jointTransform,RI as jointsFromDH,jD as kernelCall,MD as kernelCallRaw,ND as kernelCallScoped,U as kernelError,S$ as latticeInfill,C$ as latticeInfillShape,xj as line,PF as linearPattern,lJ as loadFont,L0 as locate,p2 as loft,JN as loftAll,NJ as makeBaseBox,m4 as makeExternalGear,h4 as makeInternalGear,KO as makePlane,_4 as makePlanetaryGear,gJ as makeProjectedEdges,hO as manifoldShell,KE as map,rD as mapBoth,qE as mapErr,lD as match,T1 as materialize,iP as measureArea,lP as measureCurvatureAt,uP as measureCurvatureAtMid,oP as measureDistance,sP as measureDistanceProps,aP as measureLength,nP as measureLinearProps,tP as measureSurfaceProps,rP as measureVolume,eP as measureVolumeProps,N4 as measurement,bI as mechanismDOF,i2 as mesh,a2 as meshEdges,MM as meshLODs,PM as meshLODsProgressive,OM as meshMultiLOD,q$ as minkowski,M0 as mirror,WY as mirror2D,TY as mirrorDrawing,y2 as mirrorJoin,j4 as modifiers,cL as modifyStep,_D as moduleInitError,GN as multiSectionSweep,hk as normalAt,$0 as offset,zj as offsetFace,pQ as offsetMesh,gQ as offsetShape,lM as offsetWire2D,R as ok,XE as or,ZE as orElse,ez as organiseBlueprints,mO as orientedFace,yk as outerWire,L4 as patterns,bZ as pendingCount,pD as pipeline,YO as pivotPlane,yO as planarFace,lI as planarJoint,bO as planarWire,l4 as planetPlacements,_2 as pocket,fk as pointOnSurface,nQ as pointsInside,Fj as polygon,J$ as polyhedron,kJ as polysideInnerRadius,vz as polysidesBlueprint,dN as positionOnCurve,HT as prewarm,k4 as primitives,sI as prismaticJoint,bJ as projectEdges,mk as projectPointOnFace,F4 as query,bD as queryError,b2 as rectangularPattern,EZ as registerHandler,jT as registerKernel,RT as registerKernelTier,iL as registerOperation,nL as registerShape,JZ as registerVoxel,SZ as rejectAll,zF as removeChild,bk as removeHolesFromFace,aQ as repairMesh,sL as replayFrom,oL as replayHistory,YT as resetDisposalStats,wo as resetPerformanceStats,sj as resize,$ as resolve,O0 as resolve3D,vF as resolveDerivedFaceRef,wO as resolveDirection,tF as resolveEdgeRef,EF as resolveLineageRef,GO as resolvePlane,GP as resolveRef,OF as resolveRefIn,AF as resolveRefParams,lF as resolveVertexRef,EY as reverseCurve,oI as revoluteJoint,f2 as revolve,_1 as roof,j0 as rotate,HY as rotate2D,CY as rotateDrawing,yz as roundedRectangleBlueprint,N0 as scale,UY as scale2D,wY as scaleDrawing,ZQ as sdfBox,t$ as sdfCapsule,e$ as sdfCone,$Q as sdfCylinder,p$ as sdfFieldAxialRamp,g$ as sdfFieldClamp,f$ as sdfFieldConst,h$ as sdfFieldFromSdf,m$ as sdfFieldRadialRamp,s$ as sdfLattice,r$ as sdfPlane,QQ as sdfRoundedBox,XQ as sdfSphere,c$ as sdfStrutLattice,a$ as sdfSweep,n$ as sdfTorus,U0 as section,W0 as sectionToFace,lL as serializeHistory,fI as setJointValue,dI as setJointValues,Sk as setShapeOrigin,oA as setTagMetadata,Bj as sewShells,z2 as shape,sQ as shapeToMeshInput,ek as shapeType,TP as sharedEdges,Q0 as shell,mQ as shellMesh,_Q as shellShape,uN as shellWithEvolution,r2 as simplify,wJ as sketchCircle,TJ as sketchEllipse,Zq as sketchExtrude,Jq as sketchFace,AJ as sketchFaceOffset,MJ as sketchHelix,$q as sketchLoft,qY as sketchOnFace2D,KY as sketchOnPlane2D,jJ as sketchParametricFunction,OJ as sketchPolysides,EJ as sketchRectangle,Xq as sketchRevolve,DJ as sketchRoundedRectangle,Qq as sketchSweep,cZ as sketchText,Yq as sketchWires,gD as sketcherStateError,K0 as slice,Rj as solid,NN as solidFromShell,r0 as solveAssembly,_j as sphere,uI as sphericalJoint,G0 as split,eL as stepCount,tL as stepsFrom,GY as stretch2D,Pj as subFace,BN as supportExtrude,FZ as supportsConstraintSketch,PZ as supportsProjection,L$ as surfaceFromGrid,B$ as surfaceFromImage,zN as sweep,rA as tagFaces,kj as tangentArc,eD as tap,tD as tapErr,fJ as textBlueprints,lZ as textMetrics,e2 as thicken,dL as thread,Tj as threePointArc,s2 as toBREP,FM as toBufferGeometryData,IM as toGroupedBufferGeometryData,T$ as toKernelVec,RM as toLODGeometryData,zM as toLODGeometryLevels,LM as toLineGeometryData,BY as toSVGPathD,SO as toVec2,xO as toVec3,yj as torus,w$ as tpmsLattice,I0 as transformCopy,M4 as transforms,k0 as translate,VY as translate2D,SY as translateDrawing,JO as translatePlane,dD as tryCatch,fD as tryCatchAsync,HN as twistExtrude,hD as typeCastError,ZI as undoLast,xD as unsupportedError,V as unwrap,cD as unwrapErr,oD as unwrapOr,sD as unwrapOrElse,BF as updateNode,VP as updateRoles,dk as uvBounds,pk as uvCoordinates,gO as validSolid,X2 as validatePlanetary,W as validationError,TN as variableFillet,TO as vecAdd,LO as vecAngle,AO as vecCross,NO as vecDistance,kO as vecDot,FO as vecEquals,IO as vecIsZero,jO as vecLength,MO as vecLengthSq,OO as vecNegate,PO as vecNormalize,RO as vecProjectToPlane,VO as vecRepr,zO as vecRotate,DO as vecScale,EO as vecSub,Ij as vertex,WZ as vertexFinder,cO as vertexPosition,SP as verticesOfEdge,bP as verticesOfFace,hQ as voxelBoolean,AQ as voxelBooleanField,LQ as voxelBooleanFieldShapes,vQ as voxelBooleanShapes,kQ as voxelField,IQ as voxelFieldFromShape,HF as walkAssembly,tQ as windingNumbers,Aj as wire,BL as wireFinder,jj as wireLoop,xP as wiresOfFace,PT as withKernel,N$ as withKernelDir,M$ as withKernelPnt,j$ as withKernelVec,IT as withQuality,aE as withScope,cE as withScopeResult,lE as withScopeResultAsync,BT as withTier,QE as zipResults};
|
|
60
|
+
`),n=[],r=[];for(let e of t){let t=e.trim();if(t.startsWith(`v `)){let e=f0(t);e&&n.push(e)}else if(t.startsWith(`f `)){let e=p0(t);e.length>=3&&r.push(e)}}if(n.length===0||r.length===0)return z(yD(H.OBJ_IMPORT_FAILED,`OBJ file contains no valid geometry`));try{return h0(n,r)}catch(e){let t=e instanceof Error?e.message:String(e);return z(yD(H.OBJ_IMPORT_FAILED,`OBJ import failed: ${t}`,e))}}function h0(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 d0(n,H.OBJ_IMPORT_FAILED)}function g0(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 _0(e){return e>=97&&e<=122||e>=65&&e<=90||e>=48&&e<=57||e===95}function v0(e){let t={},n=0;for(;n<e.length;){let r=e.indexOf(`="`,n);if(r<0)break;let i=r;for(;i>0&&_0(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 y0(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 b0(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 x0(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 S0(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=v0(e.slice(r,o+1)).id;if(s===void 0)continue;let c=parseInt(s,10),l=[];for(let e of y0(a,`color`)){let t=v0(e).color;t!==void 0&&l.push(x0(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=v0(e.slice(n,o+1)).id;if(s===void 0)continue;let c=parseInt(s,10),l=[];for(let e of y0(a,`base`)){let t=v0(e).displaycolor;t===void 0?l.push([0,0,0,1]):l.push(x0(t))}t.set(c,l)}return t}function C0(e){let t=[],n=[],r=[],i=S0(e);for(let n of y0(e,`vertex`)){let e=v0(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=b0(e,`object`);if(s!==null){let e=s.indexOf(`>`);if(e>=0){let t=v0(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 y0(e,`triangle`)){let e=v0(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 w0(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 T0(e){let t=F(),n=e.vertices.map(([e,t,n])=>({x:e,y:t,z:n})),r=e.triangles;try{return R(I(t.buildSolidFromFaces(n,r,1e-6)))}catch{let t=[];for(let[n,r,i]of e.triangles){let a=e.vertices[n],o=e.vertices[r],s=e.vertices[i];!a||!o||!s||t.push([a,o,s])}return d0(t,H.THREEMF_IMPORT_FAILED)}}async function E0(e){try{let t=await e.arrayBuffer(),n=g0(new Uint8Array(t),`3D/3dmodel.model`);if(!n)return z(yD(H.THREEMF_IMPORT_FAILED,`3MF archive does not contain 3D/3dmodel.model (or uses unsupported compression)`));let r=C0(new TextDecoder().decode(n));if(r.vertices.length===0||r.triangles.length===0)return z(yD(H.THREEMF_IMPORT_FAILED,`3MF model contains no valid geometry`));let i=T0(r);if(i.ok){let e=w0(r.triangleColors);e!==null&&hA(i.value,e)}return i}catch(e){let t=e instanceof Error?e.message:String(e);return z(yD(H.THREEMF_IMPORT_FAILED,`3MF import failed: ${t}`,e))}}async function D0(e){try{let t=await e.arrayBuffer();return R(I(F().importGLB(t)))}catch(e){let t=e instanceof Error?e.message:String(e);return z(yD(H.GLB_IMPORT_FAILED,`Failed to import GLB: ${t}`,e))}}function $(e){return`__wrapped`in e?e.val:e}function O0(e){return $(e)}function k0(e,t){return rj($(e),t)}function A0(e,t){if(Array.isArray(e))throw Error(`${t}() expects an options object, e.g. ${t}(shape, { ... }), not an array of coordinates.`)}function j0(e,t,n){A0(n,`rotate`);let r=n?.at;return ij($(e),t,r,n?.axis)}function M0(e,t){A0(t,`mirror`);let n=t?.at;return aj($(e),t?.normal??[1,0,0],n)}function N0(e,t,n){return oj($(e),t,n?.center)}function P0(e){return Hj($(e))}function F0(e,t){return dj($(e),t)}function I0(e,t){return mj($(e),t)}function L0(e,t){return pj($(e),t)}function R0(e,t,n){return DA($(e),$(t),{...n,unsafe:!0})}function z0(e,t,n){return OA($(e),$(t),{...n,unsafe:!0})}function B0(e,t){return jA(e.map(e=>$(e)),{...t,unsafe:!0})}function V0(e,t,n){return MA($(e),t.map(e=>$(e)),{...n,unsafe:!0})}function H0(e,t,n){return kA($(e),$(t),{...n,unsafe:!0})}function U0(e,t,n){return FA($(e),t,n)}function W0(e,t,n){return VA($(e),t,n)}function G0(e,t){return HA($(e),t)}function K0(e,t,n){return UA($(e),t,n)}function q0(e,t){if(e!==void 0)return Array.isArray(e)?e:typeof e==`object`&&`findAll`in e?e.findAll(t):e(FL()).findAll(t)}function J0(e,t){return Array.isArray(e)?e:typeof e==`object`&&`findAll`in e?e.findAll(t):e(RL()).findAll(t)}function Y0(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 X0(e,t,n){let r=$(e),i,a;return n===void 0?(i=void 0,a=t):(i=q0(t,r),a=n),yN(r,i,a)}function Z0(e,t,n){let r=$(e),i,a;n===void 0?(i=void 0,a=t):(i=q0(t,r),a=n);let o=Y0(a);return o.mode===`distAngle`?BM(r,[...i??UD(r)],o.distance,o.angle):bN(r,i,o.distance)}function Q0(e,t,n,r){let i=$(e);return xN(i,J0(t,i),n,r?.tolerance)}function $0(e,t,n){return SN($(e),t,n?.tolerance)}function e2(e,t){return _N($(e),t)}function t2(e,t,n){let r=$(e);return wN(r,J0(t,r),n.pullDirection,n.neutralPlane,n.angle)}function n2(e){return AN($(e))}function r2(e){return Jj($(e))}function i2(e,t){return bM($(e),t)}function a2(e,t){return xM($(e),t)}function o2(e){return sO($(e))}function s2(e){return Uj($(e))}function c2(e){return ak(e)}function l2(e){return EN($(e))}function u2(e){return Gj($(e))}function d2(e,t){return Vq($(e),typeof t==`number`?[0,0,t]:t)}function f2(e,t){let n=t?.at??[0,0,0];return Hq($(e),n,t?.axis??[0,0,1],t?.angle??2*Math.PI)}function p2(e,t){return qN(e.map(e=>$(e)),t)}function m2(e,n){if(n===void 0){let t=WD(e);if(t.length===0)return z(W(H.COMPOUND_NO_FACES,`compoundOps: shape has no faces`));let n=jk(t),r=gk(n)[2];for(let e=1;e<t.length;e++){let i=Ak(t,e),a=gk(i)[2];a>r&&(n=i,r=a)}return R(n)}if(typeof n==`function`){let r=n(RL()).findAll(e);return r.length===0?z(bD(H.COMPOUND_FACE_NOT_FOUND,`compoundOps: face finder matched no faces`)):R(t(r,0))}return R(n)}function h2(e){return`sketchOnPlane`in e&&typeof e.sketchOnPlane==`function`?{wire:e.sketchOnPlane(`XY`).wire,owned:!0}:{wire:e,owned:!1}}function g2(e,t){let n=$(e),{at:r,radius:i,axis:a}=t,o=a??[0,0,1];if(i<=0)return z(W(`DRILL_INVALID_RADIUS`,`Drill radius must be positive`));if(IO(o))return z(W(`DRILL_ZERO_AXIS`,`Drill axis cannot be zero`));let s=PO(o),c=r.length===2?[r[0],r[1],0]:[r[0],r[1],r[2]],l;if(t.depth!==void 0)l=JA(i,t.depth,c,s);else{let e=rO(n),t=[[e.xMin,e.yMin,e.zMin],[e.xMax,e.yMin,e.zMin],[e.xMin,e.yMax,e.zMin],[e.xMax,e.yMax,e.zMin],[e.xMin,e.yMin,e.zMax],[e.xMax,e.yMin,e.zMax],[e.xMin,e.yMax,e.zMax],[e.xMax,e.yMax,e.zMax]],r=1/0,a=-1/0;for(let e of t){let t=(e[0]-c[0])*s[0]+(e[1]-c[1])*s[1]+(e[2]-c[2])*s[2];t<r&&(r=t),t>a&&(a=t)}--r,a+=1,l=JA(i,a-r,[c[0]+s[0]*r,c[1]+s[1]*r,c[2]+s[2]*r],s)}try{return OA(n,l,{unsafe:!0})}finally{l[Symbol.dispose]()}}function _2(e,t){try{var n=WT();let r=$(e),{profile:i,depth:a}=t;if(a<=0)return z(W(`POCKET_INVALID_DEPTH`,`Pocket depth must be positive`));let o=m2(r,t.face);if(B(o))return o;let s=o.value,c=hk(s),l=gk(s),u=n.u(new iE),{wire:d,owned:f}=h2(i);f&&u.register(d);let p=Kk(d);if(B(p))return p;u.register(p.value);let m=Vq(u.register(rj(p.value,l)),DO(PO(c),-a));return B(m)?m:(u.register(m.value),OA(r,m.value,{unsafe:!0}))}catch(e){n.e=e}finally{n.d()}}function v2(e,t){try{var n=WT();let r=$(e),{profile:i,height:a}=t;if(a<=0)return z(W(`BOSS_INVALID_HEIGHT`,`Boss height must be positive`));let o=m2(r,t.face);if(B(o))return o;let s=o.value,c=hk(s),l=gk(s),u=n.u(new iE),{wire:d,owned:f}=h2(i);f&&u.register(d);let p=Kk(d);if(B(p))return p;u.register(p.value);let m=Vq(u.register(rj(p.value,l)),DO(PO(c),a));return B(m)?m:(u.register(m.value),DA(r,m.value,{unsafe:!0}))}catch(e){n.e=e}finally{n.d()}}function y2(e,t){try{var n=WT();let r=$(e),i=t?.normal??[1,0,0],a=t?.at;return IO(i)?z(W(`MIRROR_ZERO_NORMAL`,`Mirror plane normal cannot be zero`)):DA(r,n.u(aj(r,i,a)),{unsafe:!0})}catch(e){n.e=e}finally{n.d()}}function b2(e,t){let n=$(e),{xDir:r,xCount:i,xSpacing:a,yDir:o,yCount:s,ySpacing:c}=t;if(i<1||s<1)return z(W(`PATTERN_INVALID_COUNT`,`Pattern counts must be at least 1`));if(IO(r))return z(W(`PATTERN_ZERO_DIRECTION`,`X direction cannot be zero`));if(IO(o))return z(W(`PATTERN_ZERO_DIRECTION`,`Y direction cannot be zero`));if(i===1&&s===1)return R(n);let l=PO(r),u=PO(o),d=[n],f=[];for(let e=0;e<i;e++)for(let t=0;t<s;t++){if(e===0&&t===0)continue;let r=rj(n,[l[0]*a*e+u[0]*c*t,l[1]*a*e+u[1]*c*t,l[2]*a*e+u[2]*c*t]);d.push(r),f.push(r)}try{return jA(d,{unsafe:!0})}finally{for(let e of f)e[Symbol.dispose]()}}var x2=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 S2(e){if(B(e))throw new x2(e.error);return e.value}function C2(e){return e}function w2(e){return e}function T2(e){return e}function E2(e){return e}function D2(e){return{val:e,__wrapped:!0,translate:t=>L2(k0(e,t)),rotate:(t,n)=>L2(j0(e,t,n)),mirror:t=>L2(M0(e,t)),scale:(t,n)=>L2(N0(e,t,n)),applyMatrix:t=>L2(S2(F0(e,t))),moveX:t=>L2(k0(e,[t,0,0])),moveY:t=>L2(k0(e,[0,t,0])),moveZ:t=>L2(k0(e,[0,0,t])),rotateX:t=>L2(j0(e,t,{axis:[1,0,0]})),rotateY:t=>L2(j0(e,t,{axis:[0,1,0]})),rotateZ:t=>L2(j0(e,t,{axis:[0,0,1]})),bounds:()=>rO(e),describe:()=>o2(e),clone:()=>L2(S2(P0(e))),mesh:t=>i2(e,t),meshEdges:t=>a2(e,t),isValid:()=>l2(e),isEmpty:()=>u2(e),heal:()=>L2(S2(n2(e))),simplify:()=>L2(S2(r2(e))),toBREP:()=>S2(s2(e)),apply:t=>L2(t(e)),applyResult:t=>L2(S2(t(e))),done:()=>e}}function O2(e){return{fuse:(t,n)=>R2(S2(R0(e,$(t),{...n,unsafe:!0}))),cut:(t,n)=>R2(S2(z0(e,$(t),{...n,unsafe:!0}))),intersect:(t,n)=>R2(S2(H0(e,$(t),{...n,unsafe:!0}))),fuseAll:(t,n)=>R2(E2(S2(jA([e,...t.map($)],{...n,unsafe:!0})))),cutAll:(t,n)=>R2(E2(S2(MA(e,t,{...n,unsafe:!0})))),section:(t,n)=>L2(S2(U0(e,t,n))),split:t=>L2(S2(G0(e,t))),slice:(t,n)=>S2(K0(e,t,n))}}function k2(e){return{fillet(...t){return t.length===1?R2(E2(S2(X0(C2(e),t[0])))):R2(E2(S2(X0(C2(e),t[0],t[1]))))},chamfer(...t){return t.length===1?R2(E2(S2(Z0(C2(e),t[0])))):R2(E2(S2(Z0(C2(e),t[0],t[1]))))},shell:(t,n,r)=>R2(E2(S2(Q0(C2(e),t,n,r)))),offset:(t,n)=>R2(E2(S2($0(C2(e),t,n)))),draft:(t,n)=>R2(E2(S2(t2(C2(e),t,n))))}}function A2(e){return{drill:t=>R2(S2(g2(e,t))),pocket:t=>R2(S2(_2(e,t))),boss:t=>R2(S2(v2(e,t))),mirrorJoin:t=>R2(S2(y2(e,t))),rectangularPattern:t=>R2(S2(b2(e,t)))}}function j2(e){return{volume:()=>S2(rP(e)),area:()=>S2(iP(e)),volumeProps:()=>S2(eP(e)),surfaceProps:()=>S2(tP(e))}}function M2(e){return{edges:()=>UD(e),faces:()=>WD(e),wires:()=>GD(e),vertices:()=>KD(e)}}function N2(e){return{linearPattern:(t,n,r)=>R2(E2(S2(PF(e,t,n,r)))),circularPattern:(t,n,r)=>R2(E2(S2(FF(e,t,n,r))))}}function P2(e){return{...D2(e),...O2(e),...k2(e),...A2(e),...j2(e),...M2(e),...N2(e)}}function F2(e){return{...D2(e),length:()=>eM(e),startPoint:()=>Xj(e),endPoint:()=>Zj(e),pointAt:t=>Qj(e,t),tangentAt:t=>$j(e,t),isClosed:()=>nM(e),sweep(t,n){if(!AE(e))throw Error(`sweep requires a Wire`);let r=S2(zN(T2(e),$(t),n));return R2(Array.isArray(r)?r[0]:r)}}}function I2(e){return{...D2(e),area:()=>S2(iP(e)),normalAt:t=>hk(e,t),center:()=>gk(e),surfaceType:()=>S2(sk(e)),outerWire:()=>yk(e),innerWires:()=>xk(e),extrude:t=>R2(S2(d2(w2(e),t))),revolve:t=>R2(S2(f2(w2(e),t)))}}function L2(e){return FE(e)?P2(e):jE(e)?I2(e):kE(e)||AE(e)?F2(e):D2(e)}function R2(e){return P2(e)}function z2(e){if(e&&typeof e==`object`&&`face`in e&&typeof e.face==`function`&&`_defaultOrigin`in e)return I2(e.face());if(e&&typeof e==`object`&&`wrapped`in e)return jE(e)?I2(e):FE(e)?P2(e):kE(e)||AE(e)?F2(e):D2(e);throw Error(`shape() requires a Sketch or branded shape type`)}var B2=.25,V2=e=>Math.tan(e)-e;function H2(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 U2(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(H2(e,s*t,n,i))}return a}function W2(e){return Math.max(16,Math.round(8*Math.sqrt(e)))}function G2(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 K2(e,t,n){if(t===0)return R(e);let r=V2(e)+2*t*Math.tan(e)/n,i,a;if(r>V2(e)?(i=e,a=Math.PI/2-1e-6):(i=1e-4,a=e),r>V2(a)||r<V2(i))return z(W(`GEAR_PA_OUT_OF_RANGE`,`working pressure angle out of range — target inv(αw)=${r.toFixed(4)} not in [${V2(i).toFixed(4)}, ${V2(a).toFixed(4)}]`,void 0,{target:r,invLo:V2(i),invHi:V2(a)}));for(let e=0;e<50;e++){let e=.5*(i+a);V2(e)<r?i=e:a=e}return R(.5*(i+a))}function q2(e,t,n,r,i){return K2(e,t+n,r+i)}function J2(e,t,n,r,i){return K2(e,n-t,i-r)}function Y2(e,t,n,r,i){return(e+t)*n*Math.cos(r)/(2*Math.cos(i))}function X2(e,t,n,r){if(!Number.isInteger(e)||!Number.isInteger(t)||!Number.isInteger(n))return z(W(`GEAR_NON_INTEGER_TEETH`,`tooth counts and planet count must be integers`));if(e<4||t<4||n<2)return z(W(`GEAR_TEETH_TOO_FEW`,`zs ≥ 4, zp ≥ 4, N ≥ 2 required`));if((2*e+2*t)%n!=0)return z(W(`GEAR_ASSEMBLY`,`(2·zs + 2·zp) must be divisible by N — got ${2*e+2*t} mod ${n} = ${(2*e+2*t)%n}`));let i=t+2+2*r,a=(e+t)*Math.sin(Math.PI/n);return a<=i?z(W(`GEAR_PLANET_COLLISION`,`planet tips would collide: (zs+zp)·sin(π/N) = ${a.toFixed(3)} ≤ planet tip = ${i.toFixed(3)}`)):R(void 0)}function Z2(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 Q2(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 $2(e,t){return 1-e*Math.sin(t)*Math.sin(t)/2}function e4(e,t,n){return Math.max(0,$2(e,t)-n)}function t4(e){return e<8?.2:.485-2.88/e}function n4(e,t,n,r){let i=e*1e3,a=t4(r);return a<=0||n<=0||t<=0?1/0:2*i/(r*t*t*n*a)}function r4(e,t,n=!1){let r=(1.4+6.5/e)*(20/(t*180/Math.PI))**.15;return n?r*.85:r}function i4(e,t,n,r,i,a=!1){return n4(e,t,n,r)*r4(r,i,a)}function a4(e){return e/2}function o4(e,t){return e+2*t}function s4(e){return e%2==0?Math.PI/e:0}function c4(e,t,n){return e*(1+t/n)+s4(n)}function l4(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=X2(n,r,i,s);if(B(c))return c;let l=q2(a,o,s,n,r);if(B(l))return l;let u=Y2(n,r,t,a,l.value),d=[];for(let e=0;e<i;e++){let t=e*2*Math.PI/i,a=c4(t,n,r);d.push({rotationDeg:a*180/Math.PI,position:[u*Math.cos(t),u*Math.sin(t),0]})}return R(d)}function u4(e,t,n,r,i){let a=t*e.toothPitch,o=(t+1)%n*e.toothPitch,s=V2(e.alphaPitch),c=a-e.halfToothAngle-s,l=a+e.halfToothAngle+s,u=U2(e.rb,e.alphaTip,c,r,1),d=U2(e.rb,e.alphaTip,l,r,-1).reverse(),f=jk(u),p=Mk(u),m=jk(d),h=Mk(d),g=[],_=e=>{i.register(e),g.push(e)},v=e.isInternal?e.rb<e.rRoot:e.rb>e.rRoot;v&&_(Fk([e.rRoot*Math.cos(c),e.rRoot*Math.sin(c),0],f));let y=e.rPitch*1e-5,b=Hk(u,{tolerance:y});if(B(b))return b;_(b.value),_(zk(p,[e.rTip*Math.cos(a),e.rTip*Math.sin(a),0],m));let x=Hk(d,{tolerance:y});if(B(x))return x;_(x.value),v&&_(Fk(h,[e.rRoot*Math.cos(l),e.rRoot*Math.sin(l),0]));let S=o-e.halfToothAngle-s,C=.5*(l+S);return S<l&&(C+=Math.PI),_(zk(v?[e.rRoot*Math.cos(l),e.rRoot*Math.sin(l),0]:h,[e.rRoot*Math.cos(C),e.rRoot*Math.sin(C),0],v?[e.rRoot*Math.cos(S),e.rRoot*Math.sin(S),0]:[e.rb*Math.cos(S),e.rb*Math.sin(S),0])),R(g)}function d4(e){return p4(e,!1)}function f4(e){return p4(e,!0)}function p4(e,t){try{var n=WT();let{teeth:r,moduleSize:i,pressureAngle:a,shift:o,clearance:s,flankThinning:c,samples:l=W2(i)}=e;if(r<4)return z(W(`GEAR_TEETH_TOO_FEW`,`gear needs ≥ 4 teeth, got ${r}`));if(i<=0)return z(W(`GEAR_MODULE_NONPOSITIVE`,`module must be > 0, got ${i}`));let u=G2(r,i,a,o,s,c,t),d=n.u(new iE),f=[];for(let e=0;e<r;e++){let t=u4(u,e,r,l,d);if(B(t))return t;f.push(...t.value)}let p=Gk(f);return B(p)?p:R(p.value)}catch(e){n.e=e}finally{n.d()}}function m4(e){let{teeth:t,moduleSize:n,thickness:r,pressureAngleDeg:i=20,shift:a=0,clearance:o=B2,flankThinning:s=0,bore:c=0,samples:l}=e;if(r<=0)return z(W(`GEAR_THICKNESS_NONPOSITIVE`,`thickness must be > 0`));if(l!==void 0&&(!Number.isInteger(l)||l<1))return z(W(`GEAR_SAMPLES_INVALID`,`samples must be a positive integer; got ${String(l)}`));let u=i*Math.PI/180,d=G2(t,n,u,a,o,s,!1);if(c>0&&c>=2*d.rRoot)return z(W(`GEAR_BORE_TOO_LARGE`,`bore diameter ${c.toFixed(2)} ≥ root diameter ${(2*d.rRoot).toFixed(2)} — would erase the gear teeth`));let f=d4({teeth:t,moduleSize:n,pressureAngle:u,shift:a,clearance:o,flankThinning:s,...l===void 0?{}:{samples:l}});if(B(f))return f;let p=g4(t,u,a);return x4(f.value,r,c,d,p)}function h4(e){let{teeth:t,moduleSize:n,thickness:r,pressureAngleDeg:i=20,shift:a=0,clearance:o=B2,flankThinning:s=0,ringWallThickness:c=2*e.moduleSize,samples:l}=e;if(r<=0)return z(W(`GEAR_THICKNESS_NONPOSITIVE`,`thickness must be > 0`));if(c<=0)return z(W(`GEAR_WALL_NONPOSITIVE`,`ringWallThickness must be > 0`));if(l!==void 0&&(!Number.isInteger(l)||l<1))return z(W(`GEAR_SAMPLES_INVALID`,`samples must be a positive integer; got ${String(l)}`));let u=i*Math.PI/180,d=f4({teeth:t,moduleSize:n,pressureAngle:u,shift:a,clearance:o,flankThinning:s,...l===void 0?{}:{samples:l}});if(B(d))return d;let f=G2(t,n,u,a,o,s,!0),p=b4(f.rPitch+c);return B(p)?p:C4(p.value,d.value,r,f,[])}function g4(e,t,n){let r=e4(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 _4(e){let t=y4(e);if(B(t))return t;let n=t.value,r=v4(n);if(B(r))return r;let{sun:i,planet:a,ring:o}=r.value,s=D4(n,i,a,o),c=T4(a.solid,n);a.solid.delete();let l=E4(o.solid,n.zr),u=O4(n,s);return R({sun:i.solid,planets:c,ring:l,ringTeeth:n.zr,workingPressureAngle:n.alphaW_sp,centerDistance:n.centerDistance,contactRatio:{sunPlanet:s.crSunPlanet,planetRing:s.crPlanetRing},undercutDeficit:{sun:s.undercutSun,planet:s.undercutPlanet},...s.lewisStress?{lewisStress:s.lewisStress}:{},...s.stressConcentrationFactor?{stressConcentrationFactor:s.stressConcentrationFactor}:{},diagnostics:u})}function v4(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=m4({...n,teeth:e.sunTeeth,shift:e.sunShift,bore:e.sunBore});if(B(r))return r;let i=m4({...n,teeth:e.planetTeeth,shift:e.planetShift,bore:e.planetBore});if(B(i))return r.value.solid.delete(),i;let a=h4({...n,teeth:e.zr,shift:e.ringShift,ringWallThickness:e.ringWallThickness});return B(a)?(r.value.solid.delete(),i.value.solid.delete(),a):R({sun:r.value,planet:i.value,ring:a.value})}function y4(e){let t=e.moduleSize??3,n=e.sunTeeth??15,r=e.planetTeeth??12,i=e.numPlanets??3,a=e.pressureAngleDeg??20,o=a*Math.PI/180,s=e.sunShift??0,c=e.planetShift??0,l=e.ringShift??0;if(e.thickness<=0)return z(W(`GEAR_THICKNESS_NONPOSITIVE`,`thickness must be > 0`));let u=X2(n,r,i,c);if(B(u))return u;let d=o4(n,r),f=q2(o,s,c,n,r);if(B(f))return f;let p=J2(o,c,l,r,d);if(B(p))return p;let m=Y2(n,r,t,o,f.value);return R({moduleSize:t,sunTeeth:n,planetTeeth:r,numPlanets:i,pressureAngleDeg:a,alpha:o,alphaW_sp:f.value,alphaW_pr:p.value,clearance:e.clearance??.25,bHalf:a4(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 b4(e){try{var t=WT();let n=Gk([t.u(new iE).register(Ik(e,[0,0,0],[0,0,1]))]);return B(n)?n:R(n.value)}catch(e){t.e=e}finally{t.d()}}function x4(e,t,n,r,i){try{var a=WT();let o=a.u(new iE);o.register(e);let s=Kk(e);if(B(s))return s;o.register(s.value);let c=Vq(s.value,[0,0,t]);if(B(c))return c;if(n<=0)return R(w4(c.value,r,i));let l=a.u(new iE);l.register(c.value);let u=S4(n/2);if(B(u))return u;l.register(u.value);let d=Vq(u.value,[0,0,t+1]);if(B(d))return d;l.register(d.value);let f=l.register(rj(d.value,[0,0,-.5])),p=OA(c.value,f);return B(p)?p:R(w4(p.value,r,i))}catch(e){a.e=e}finally{a.d()}}function S4(e){let t=b4(e);return B(t)?t:Kk(t.value)}function C4(e,t,n,r,i){let a=Kk(e,[t]);if(B(a))return a;let o=Vq(a.value,[0,0,n]);return B(o)?o:R(w4(o.value,r,i))}function w4(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 T4(e,t){let n=[];try{for(let r=0;r<t.numPlanets;r++){let i=r*2*Math.PI/t.numPlanets,a=ij(e,c4(i,t.sunTeeth,t.planetTeeth)*180/Math.PI);try{let e=[t.centerDistance*Math.cos(i),t.centerDistance*Math.sin(i),0];n.push(rj(a,e))}finally{a.delete()}}return n}catch(e){for(let e of n)e.delete();throw e}}function E4(e,t){let n=s4(t);if(n===0)return e;let r=ij(e,n*180/Math.PI);return e.delete(),r}function D4(e,t,n,r){let i={crSunPlanet:Z2(t.tipDiameter/2,t.baseDiameter/2,n.tipDiameter/2,n.baseDiameter/2,e.centerDistance,e.moduleSize,e.alpha,e.alphaW_sp),crPlanetRing:Q2(n.tipDiameter/2,n.baseDiameter/2,r.tipDiameter/2,r.baseDiameter/2,e.centerDistance,e.moduleSize,e.alpha,e.alphaW_pr),undercutSun:e4(e.sunTeeth,e.alpha,e.sunShift),undercutPlanet:e4(e.planetTeeth,e.alpha,e.planetShift)};if(e.appliedTorque!==void 0){let t=e.appliedTorque;i.lewisStress={sun:i4(t,e.moduleSize,e.thickness,e.sunTeeth,e.alpha),planet:i4(t*e.planetTeeth/e.sunTeeth,e.moduleSize,e.thickness,e.planetTeeth,e.alpha),ring:i4(t*e.zr/e.sunTeeth,e.moduleSize,e.thickness,e.zr,e.alpha,!0)},i.stressConcentrationFactor={sun:r4(e.sunTeeth,e.alpha),planet:r4(e.planetTeeth,e.alpha),ring:r4(e.zr,e.alpha,!0)}}return i}function O4(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 k4=NZ({addHoles:()=>Vj,bezier:()=>Oj,box:()=>hj,bsplineApprox:()=>Dj,circle:()=>Sj,compound:()=>Lj,cone:()=>vj,cylinder:()=>gj,ellipse:()=>Cj,ellipseArc:()=>Ej,ellipsoid:()=>bj,face:()=>Mj,fill:()=>qk,filledFace:()=>Nj,helix:()=>wj,line:()=>xj,offsetFace:()=>zj,polygon:()=>Fj,polyhedron:()=>J$,sewShells:()=>Bj,solid:()=>Rj,sphere:()=>_j,subFace:()=>Pj,tangentArc:()=>kj,threePointArc:()=>Tj,torus:()=>yj,vertex:()=>Ij,wire:()=>Aj,wireLoop:()=>jj}),A4=NZ({checkBoolean:()=>eN,convexHull:()=>U$,cut:()=>z0,cutAll:()=>MA,cutAllBisect:()=>GM,fuse:()=>R0,fuseAll:()=>jA,fuseAllBisect:()=>YM,hull:()=>H$,intersect:()=>H0,minkowski:()=>q$,section:()=>U0,sectionToFace:()=>W0,slice:()=>K0,split:()=>G0}),j4=NZ({chamfer:()=>Z0,draft:()=>t2,fillet:()=>X0,heal:()=>n2,offset:()=>$0,shell:()=>Q0,simplify:()=>r2,thicken:()=>e2,variableFillet:()=>TN}),M4=NZ({applyMatrix:()=>F0,clone:()=>P0,composeTransforms:()=>fj,mirror:()=>M0,rotate:()=>j0,scale:()=>N0,transformCopy:()=>I0,translate:()=>k0}),N4=NZ({checkAllInterferences:()=>a0,checkInterference:()=>i0,createDistanceQuery:()=>cP,measureArea:()=>iP,measureCurvatureAt:()=>lP,measureCurvatureAtMid:()=>uP,measureDistance:()=>oP,measureDistanceProps:()=>sP,measureLength:()=>aP,measureLinearProps:()=>nP,measureSurfaceProps:()=>tP,measureVolume:()=>rP,measureVolumeProps:()=>eP}),P4=NZ({blueprintToDXF:()=>xX,exportAssemblySTEP:()=>NF,exportDXF:()=>bX,exportGlb:()=>sX,exportGltf:()=>oX,exportIGES:()=>DM,exportOBJ:()=>XY,exportSTEP:()=>TM,exportSTEPConfigured:()=>iZ,exportSTL:()=>EM,exportThreeMF:()=>BX,importDXF:()=>u0,importGLB:()=>D0,importIGES:()=>sZ,importOBJ:()=>m0,importSTEP:()=>aZ,importSTL:()=>oZ,importSVG:()=>rZ,importSVGPathD:()=>nZ,importThreeMF:()=>E0}),F4=NZ({cornerFinder:()=>_z,edgeFinder:()=>FL,faceFinder:()=>RL,getSingleFace:()=>VL,vertexFinder:()=>WZ,wireFinder:()=>BL}),I4=NZ({complexExtrude:()=>VN,extrude:()=>d2,guidedSweep:()=>KN,loft:()=>p2,multiSectionSweep:()=>GN,revolve:()=>f2,roof:()=>_1,supportExtrude:()=>BN,surfaceFromGrid:()=>L$,surfaceFromImage:()=>B$,sweep:()=>zN,twistExtrude:()=>HN}),L4=NZ({circularPattern:()=>FF,linearPattern:()=>PF}),R4=14695981039346656037n,z4=1099511628211n,B4=18446744073709551615n;function V4(){return R4}function H4(e,t){return(e^BigInt(t&255))*z4&B4}function U4(e,t){let n=e;for(let e=0;e<t.length;e++)n=H4(n,t[e]??0);return n}var W4=new TextEncoder;function G4(e,t){return U4(e,W4.encode(t))}var K4=new ArrayBuffer(8),q4=new DataView(K4),J4=new Uint8Array(K4);function Y4(e,t){return q4.setFloat64(0,Object.is(t,-0)?0:t),U4(e,J4)}function X4(e,t){let n=e,r=t&B4;for(let e=0;e<8;e++)n=H4(n,Number(r&255n)),r>>=8n;return n}function Z4(e,t){let n=e,r=t|0;for(let e=0;e<4;e++)n=H4(n,r&255),r>>>=8;return n}function Q4(e,t){return H4(e,+!!t)}function $4(e){return(e&B4).toString(16).padStart(16,`0`)}var e3=new Set;function t3(e){return G4(V4(),e)}function n3(e){return{kind:`NumLit`,value:e,structuralHash:Y4(t3(`NumLit`),e),freeParams:e3}}function r3(e){let t=t3(`Vec3Lit`);for(let n of e)t=Y4(t,n);return{kind:`Vec3Lit`,value:e,structuralHash:t,freeParams:e3}}function i3(e){let t=t3(`Vec2Lit`);for(let n of e)t=Y4(t,n);return{kind:`Vec2Lit`,value:e,structuralHash:t,freeParams:e3}}function a3(e){return{kind:`Param`,name:e,structuralHash:G4(t3(`Param`),e),freeParams:new Set([e])}}function o3(e,t,n){let r=G4(t3(`BinOp`),e);return r=X4(r,t.structuralHash),r=X4(r,n.structuralHash),{kind:`BinOp`,op:e,a:t,b:n,structuralHash:r,freeParams:g3(t.freeParams,n.freeParams)}}function s3(e,t){let n=G4(t3(`UnaryOp`),e);return n=X4(n,t.structuralHash),{kind:`UnaryOp`,op:e,arg:t,structuralHash:n,freeParams:t.freeParams}}function c3(e,t){let n=Z4(t3(`Component`),t);return n=X4(n,e.structuralHash),{kind:`Component`,vec:e,index:t,structuralHash:n,freeParams:e.freeParams}}function l3(e,t){let n=Z4(t3(`BuildVec`),e),r=new Set;for(let e of t){n=X4(n,e.structuralHash);for(let t of e.freeParams)r.add(t)}return{kind:`BuildVec`,dim:e,components:t,structuralHash:n,freeParams:r}}var u3=(e,t)=>o3(`+`,e,t),d3=(e,t)=>o3(`*`,e,t);function f3(e){return typeof e==`number`?n3(e):e}function p3(e,t){if(!Array.isArray(e))return e;let n=e;return n.every(e=>typeof e==`number`)?t===3?r3([n[0],n[1],n[2]]):i3([n[0],n[1]]):l3(t,n.map(f3))}function m3(e){return p3(e,3)}function h3(e){return p3(e,2)}function g3(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 _3(e){return typeof e==`number`}function v3(e,t){return _3(e)?R(e):z(W(H.NULL_SHAPE_INPUT,`${t}: expected number, got ${Array.isArray(e)?`vector(${e.length})`:typeof e}`))}function y3(e,t,n){return Array.isArray(e)&&e.length===t?R(e):z(W(H.NULL_SHAPE_INPUT,`${n}: expected Vec${t}, got ${_3(e)?`number`:`vector(${e.length})`}`))}function b3(e,t){switch(e.kind){case`NumLit`:return R(e.value);case`Vec3Lit`:return R(e.value);case`Vec2Lit`:return R(e.value);case`Param`:{let n=t[e.name];return n===void 0?z(W(H.NULL_SHAPE_INPUT,`unbound param: ${e.name}`)):R(n)}case`BinOp`:return x3(e,t);case`UnaryOp`:return S3(e,t);case`Component`:return C3(e,t);case`BuildVec`:return w3(e,t)}}function x3(e,t){let n=b3(e.a,t);if(!n.ok)return n;let r=b3(e.b,t);if(!r.ok)return r;let i=v3(n.value,`BinOp(${e.op}).a`);if(!i.ok)return i;let a=v3(r.value,`BinOp(${e.op}).b`);if(!a.ok)return a;switch(e.op){case`+`:return R(i.value+a.value);case`-`:return R(i.value-a.value);case`*`:return R(i.value*a.value);case`/`:return a.value===0?z(W(H.NULL_SHAPE_INPUT,`BinOp(/): division by zero`)):R(i.value/a.value)}}function S3(e,t){let n=b3(e.arg,t);if(!n.ok)return n;let r=v3(n.value,`UnaryOp(${e.op})`);if(!r.ok)return r;let i=r.value;switch(e.op){case`neg`:return R(-i);case`sin`:return R(Math.sin(i));case`cos`:return R(Math.cos(i));case`sqrt`:return R(Math.sqrt(i));case`abs`:return R(Math.abs(i))}}function C3(e,t){let n=b3(e.vec,t);if(!n.ok)return n;if(_3(n.value))return z(W(H.NULL_SHAPE_INPUT,`Component: cannot index a scalar`));let r=n.value,i=r[e.index];return i===void 0?z(W(H.NULL_SHAPE_INPUT,`Component: index ${e.index} out of range for Vec${r.length}`)):R(i)}function w3(e,t){if(e.components.length!==e.dim)return z(W(H.NULL_SHAPE_INPUT,`BuildVec(${e.dim}): expected ${e.dim} components, got ${e.components.length}`));let n=[];for(let r of e.components){let e=b3(r,t);if(!e.ok)return e;let i=v3(e.value,`BuildVec.component`);if(!i.ok)return i;n.push(i.value)}return R(e.dim===2?[n[0],n[1]]:[n[0],n[1],n[2]])}function T3(e,t,n){let r=b3(e,t);return r.ok?v3(r.value,n):r}function E3(e,t,n){let r=b3(e,t);if(!r.ok)return r;let i=y3(r.value,3,n);if(!i.ok)return i;let[a,o,s]=i.value;return R([a,o,s])}function D3(e,t,n){let r=b3(e,t);if(!r.ok)return r;let i=y3(r.value,2,n);if(!i.ok)return i;let[a,o]=i.value;return R([a,o])}function O3(e,t){if(t.size===0)return Object.freeze({});let n={};for(let r of t){let t=e[r];t!==void 0&&(n[r]=t)}return Object.freeze(n)}function k3(e){return{kind:`Line`,to:h3(e)}}function A3(e,t,n){return{kind:`Arc`,to:h3(e),radius:f3(t),largeArc:n?.largeArc??!1,clockwise:n?.clockwise??!1}}function j3(e,t){return{kind:`Bezier`,controls:e.map(h3),to:h3(t)}}function M3(e,t,n){return{kind:`EllipseArc`,to:h3(e),radii:h3(t),rotation:f3(n?.rotation??0),largeArc:n?.largeArc??!1,clockwise:n?.clockwise??!1}}function N3(e,t){let n=Z4(e,t.length),r=(e,t)=>X4(e,t.structuralHash);for(let e of t)if(n=G4(n,e.kind),n=r(n,e.to),e.kind===`Arc`)n=r(n,e.radius),n=Q4(Q4(n,e.largeArc),e.clockwise);else if(e.kind===`Bezier`){n=Z4(n,e.controls.length);for(let t of e.controls)n=r(n,t)}else e.kind===`EllipseArc`&&(n=r(n,e.radii),n=r(n,e.rotation),n=Q4(Q4(n,e.largeArc),e.clockwise));return n}function P3(e){let t=[];for(let n of e)t.push(n.to),n.kind===`Arc`?t.push(n.radius):n.kind===`Bezier`?t.push(...n.controls):n.kind===`EllipseArc`&&t.push(n.radii,n.rotation);return t}function F3(e,t){switch(e.kind){case`Line`:return k3(t(e.to));case`Arc`:return A3(t(e.to),t(e.radius),{largeArc:e.largeArc,clockwise:e.clockwise});case`Bezier`:return j3(e.controls.map(t),t(e.to));case`EllipseArc`:return M3(t(e.to),t(e.radii),{rotation:t(e.rotation),largeArc:e.largeArc,clockwise:e.clockwise})}}var I3=new Set;function L3(e){return G4(V4(),e)}function R3(e,t){return X4(e,t.structuralHash)}function z3(e,t){return t===void 0?Q4(e,!1):R3(Q4(e,!0),t)}function B3(e,t){return t===void 0?Q4(e,!1):Y4(Q4(e,!0),t)}function V3(...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?I3:t}function H3(e,t,n){let r=f3(e),i=f3(t),a=f3(n),o=L3(`Box`);return o=R3(R3(R3(o,r),i),a),{kind:`Box`,x:r,y:i,z:a,structuralHash:o,freeParams:V3(r,i,a)}}function U3(e){let t=f3(e);return{kind:`Sphere`,radius:t,structuralHash:R3(L3(`Sphere`),t),freeParams:t.freeParams}}function W3(e,t){let n=f3(e),r=f3(t);return{kind:`Cylinder`,radius:n,height:r,structuralHash:R3(R3(L3(`Cylinder`),n),r),freeParams:V3(n,r)}}function G3(e,t,n){let r=f3(e),i=f3(t),a=f3(n),o=L3(`Cone`);return o=R3(R3(R3(o,r),i),a),{kind:`Cone`,radius1:r,radius2:i,height:a,structuralHash:o,freeParams:V3(r,i,a)}}function K3(e,t){let n=f3(e),r=f3(t);return{kind:`Torus`,majorRadius:n,minorRadius:r,structuralHash:R3(R3(L3(`Torus`),n),r),freeParams:V3(n,r)}}function q3(e){let t=e.map(m3),n=Z4(L3(`Polygon`),t.length);for(let e of t)n=R3(n,e);return{kind:`Polygon`,points:t,structuralHash:n,freeParams:V3(...t)}}function J3(e){let t=f3(e);return{kind:`Circle`,radius:t,structuralHash:R3(L3(`Circle`),t),freeParams:t.freeParams}}function Y3(e,t){let n=m3(e),r=m3(t);return{kind:`Line`,from:n,to:r,structuralHash:R3(R3(L3(`Line`),n),r),freeParams:V3(n,r)}}function X3(e){let t=m3(e);return{kind:`Vertex`,point:t,structuralHash:R3(L3(`Vertex`),t),freeParams:t.freeParams}}function Z3(e){return{kind:`Empty`,output:e,structuralHash:G4(L3(`Empty`),e),freeParams:I3}}function Q3(){return Z3(`Solid`)}function $3(){return Z3(`Face`)}function e6(){return Z3(`Wire`)}function t6(e,t,n,r){return B3(R3(R3(L3(e),t),n),r)}function n6(e,t,n){return{kind:`Fuse`,a:e,b:t,tolerance:n,structuralHash:t6(`Fuse`,e,t,n),freeParams:V3(e,t)}}function r6(e,t,n){return{kind:`Cut`,a:e,b:t,tolerance:n,structuralHash:t6(`Cut`,e,t,n),freeParams:V3(e,t)}}function i6(e,t,n){return{kind:`Intersect`,a:e,b:t,tolerance:n,structuralHash:t6(`Intersect`,e,t,n),freeParams:V3(e,t)}}function a6(e,t){let n=[...e],r=Z4(L3(`FuseAll`),n.length);for(let e of n)r=R3(r,e);return r=B3(r,t),{kind:`FuseAll`,shapes:n,tolerance:t,structuralHash:r,freeParams:V3(...n)}}function o6(e,t,n){let r=[...t],i=R3(L3(`CutAll`),e);i=Z4(i,r.length);for(let e of r)i=R3(i,e);return i=B3(i,n),{kind:`CutAll`,base:e,tools:r,tolerance:n,structuralHash:i,freeParams:V3(e,...r)}}function s6(e){return e===void 0?void 0:m3(e)}function c6(e,t){let n=m3(t);return{kind:`Translate`,target:e,vector:n,structuralHash:R3(R3(L3(`Translate`),e),n),freeParams:V3(e,n)}}function l6(e,t,n){let r=f3(t),i=s6(n?.axis),a=s6(n?.at),o=R3(R3(L3(`Rotate`),e),r);return o=z3(o,i),o=z3(o,a),{kind:`Rotate`,target:e,angle:r,axis:i,at:a,structuralHash:o,freeParams:V3(e,r,i,a)}}function u6(e,t,n){let r=f3(t),i=s6(n?.center),a=R3(R3(L3(`Scale`),e),r);return a=z3(a,i),{kind:`Scale`,target:e,factor:r,center:i,structuralHash:a,freeParams:V3(e,r,i)}}function d6(e,t){let n=s6(t?.normal),r=s6(t?.at),i=R3(L3(`Mirror`),e);return i=z3(i,n),i=z3(i,r),{kind:`Mirror`,target:e,normal:n,at:r,structuralHash:i,freeParams:V3(e,n,r)}}function f6(e,t){let n=m3(t);return{kind:`Extrude`,profile:e,vector:n,structuralHash:R3(R3(L3(`Extrude`),e),n),freeParams:V3(e,n)}}function p6(e,t,n){let r=n?.frenet??!1,i=R3(R3(L3(`Sweep`),e),t);return i=Q4(i,r),{kind:`Sweep`,profile:e,spine:t,frenet:r,structuralHash:i,freeParams:V3(e,t)}}function m6(e,t){let n=h3(e),r=[...t],i=R3(L3(`Path`),n);return i=N3(i,r),{kind:`Path`,start:n,segments:r,structuralHash:i,freeParams:V3(n,...P3(r))}}function h6(e,t){let n=[...e],r=t?.ruled??!0,i=Z4(L3(`Loft`),n.length);for(let e of n)i=R3(i,e);return i=Q4(i,r),{kind:`Loft`,sections:n,ruled:r,structuralHash:i,freeParams:V3(...n)}}function g6(e,t=360,n){let r=f3(t),i=s6(n?.axis),a=s6(n?.at),o=R3(R3(L3(`Revolve`),e),r);return o=z3(o,i),o=z3(o,a),{kind:`Revolve`,profile:e,angle:r,axis:i,at:a,structuralHash:o,freeParams:V3(e,r,i,a)}}function _6(e){let t=[...e],n=Z4(L3(`Compound`),t.length);for(let e of t)n=R3(n,e);return{kind:`Compound`,children:t,structuralHash:n,freeParams:V3(...t)}}function v6(e,t,n=!1){let r=t.map(e=>e.map(e=>[...e])),i=Z4(Q4(R3(L3(`Instance`),e),n),r.length);for(let e of r)for(let t of e.flat())i=Y4(i,t);return{kind:`Instance`,source:e,placements:r,fuse:n,structuralHash:i,freeParams:V3(e)}}function y6(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 y6(e.a);case`FuseAll`:return e.shapes[0]?y6(e.shapes[0]):`Solid`;case`CutAll`:return y6(e.base);case`Translate`:case`Rotate`:case`Scale`:case`Mirror`:return y6(e.target);case`Extrude`:case`Revolve`:case`Loft`:case`Sweep`:return`Solid`;case`Path`:return`Wire`;case`Compound`:return`Compound`;case`Instance`:return e.fuse?`Solid`:`Compound`}}function b6(e,t){let n=T3(e.x,t.env,`Box.x`);if(!n.ok)return n;let r=T3(e.y,t.env,`Box.y`);if(!r.ok)return r;let i=T3(e.z,t.env,`Box.z`);return i.ok?R(hj(n.value,r.value,i.value)):i}function x6(e,t){let n=T3(e.radius,t.env,`Sphere.radius`);return n.ok?R(_j(n.value)):n}function S6(e,t){let n=T3(e.radius,t.env,`Cylinder.radius`);if(!n.ok)return n;let r=T3(e.height,t.env,`Cylinder.height`);return r.ok?R(gj(n.value,r.value)):r}function C6(e,t){let n=T3(e.radius1,t.env,`Cone.radius1`);if(!n.ok)return n;let r=T3(e.radius2,t.env,`Cone.radius2`);if(!r.ok)return r;let i=T3(e.height,t.env,`Cone.height`);return i.ok?R(vj(n.value,r.value,i.value)):i}function w6(e,t){let n=T3(e.majorRadius,t.env,`Torus.majorRadius`);if(!n.ok)return n;let r=T3(e.minorRadius,t.env,`Torus.minorRadius`);return r.ok?R(yj(n.value,r.value)):r}function T6(e,t){let n=[];for(let r of e.points){let e=E3(r,t.env,`Polygon.point`);if(!e.ok)return e;n.push(e.value)}return Fj(n)}function E6(e,t){let n=T3(e.radius,t.env,`Circle.radius`);return n.ok?R(Sj(n.value)):n}function D6(e,t){let n=E3(e.from,t.env,`Line.from`);if(!n.ok)return n;let r=E3(e.to,t.env,`Line.to`);return r.ok?R(xj(n.value,r.value)):r}function O6(e,t){let n=E3(e.point,t.env,`Vertex.point`);return n.ok?R(Ij(n.value)):n}function k6(e){return z(vD(H.NULL_SHAPE_INPUT,`${e}: empty result has no kernel representation`))}function A6(e,t,n){let r=e.evalNode(t);return r.ok?FE(r.value)?R(r.value):z(hD(H.CSG_NOT_3D,`${n}: operand did not produce a 3D shape`)):r}function j6(e,t){return{unsafe:!0,fuzzyValue:e.tolerance??t.tolerance}}function M6(e,t){if(e.a.kind===`Empty`)return t.evalNode(e.b);if(e.b.kind===`Empty`)return t.evalNode(e.a);let n=A6(t,e.a,`Fuse.a`);if(!n.ok)return n;let r=A6(t,e.b,`Fuse.b`);return r.ok?DA(n.value,r.value,j6(e,t)):r}function N6(e,t){if(e.a.kind===`Empty`)return k6(`Cut`);if(e.b.kind===`Empty`)return t.evalNode(e.a);let n=A6(t,e.a,`Cut.a`);if(!n.ok)return n;let r=A6(t,e.b,`Cut.b`);return r.ok?OA(n.value,r.value,j6(e,t)):r}function P6(e,t){if(e.a.kind===`Empty`||e.b.kind===`Empty`)return k6(`Intersect`);let n=A6(t,e.a,`Intersect.a`);if(!n.ok)return n;let r=A6(t,e.b,`Intersect.b`);return r.ok?kA(n.value,r.value,j6(e,t)):r}function F6(e,t,n){let r=[];for(let i of t){let t=A6(e,i,n);if(!t.ok)return t;r.push(t.value)}return R(r)}function I6(e,t){let n=e.shapes.filter(e=>e.kind!==`Empty`);if(n.length===0)return k6(`FuseAll`);if(n.length===1&&n[0])return t.evalNode(n[0]);let r=F6(t,n,`FuseAll.operand`);return r.ok?jA(r.value,j6(e,t)):r}function L6(e,t){if(e.base.kind===`Empty`)return k6(`CutAll`);let n=e.tools.filter(e=>e.kind!==`Empty`);if(n.length===0)return t.evalNode(e.base);let r=A6(t,e.base,`CutAll.base`);if(!r.ok)return r;let i=F6(t,n,`CutAll.tool`);return i.ok?MA(r.value,i.value,j6(e,t)):i}function R6(e){return z(vD(H.NULL_SHAPE_INPUT,`${e}: cannot transform an Empty node`))}function z6(e,t,n,r){return e?E3(e,t,n):R(r)}function B6(e,t){let n=F(),{handle:r,dispose:i}=n.composeTransform(t),a;try{a=LE(n.locate(e.wrapped,r))}finally{i()}return bA(e)&&wA(e,a),a}function V6(e,t){if(e.target.kind===`Empty`)return R6(`Translate`);let n=E3(e.vector,t.env,`Translate.vector`);if(!n.ok)return n;let r=t.evalNode(e.target);return r.ok?R(B6(r.value,[{type:`translate`,x:n.value[0],y:n.value[1],z:n.value[2]}])):r}function H6(e,t){if(e.target.kind===`Empty`)return R6(`Rotate`);let n=T3(e.angle,t.env,`Rotate.angle`);if(!n.ok)return n;let r=z6(e.axis,t.env,`Rotate.axis`,[0,0,1]);if(!r.ok)return r;let i=z6(e.at,t.env,`Rotate.at`,[0,0,0]);if(!i.ok)return i;let a=t.evalNode(e.target);return a.ok?R(B6(a.value,[{type:`rotate`,angle:n.value,axis:r.value,center:i.value}])):a}function U6(e,t){if(e.target.kind===`Empty`)return R6(`Scale`);let n=T3(e.factor,t.env,`Scale.factor`);if(!n.ok)return n;let r=z6(e.center,t.env,`Scale.center`,[0,0,0]);if(!r.ok)return r;let i=t.evalNode(e.target);return i.ok?R(oj(i.value,n.value,r.value)):i}function W6(e,t){if(e.target.kind===`Empty`)return R6(`Mirror`);let n=z6(e.normal,t.env,`Mirror.normal`,[1,0,0]);if(!n.ok)return n;let r=z6(e.at,t.env,`Mirror.at`,[0,0,0]);if(!r.ok)return r;let i=t.evalNode(e.target);return i.ok?R(aj(i.value,n.value,r.value)):i}function G6(e,t){let n=e.children.filter(e=>e.kind!==`Empty`);if(n.length===0)return z(vD(H.NULL_SHAPE_INPUT,`Compound: cannot materialize a compound with zero non-empty children`));let r=[];for(let e of n){let n=t.evalNode(e);if(!n.ok)return n;r.push(n.value)}return R(Lj(r))}function K6(){return z(vD(H.NULL_SHAPE_INPUT,`Empty: cannot materialize an Empty node directly — only valid as boolean/transform operand`))}function q6(e,t){let n=t.evalNode(e.source);return n.ok?T1(S1(n.value,e.placements),{fuse:e.fuse}):n}function J6(e,t,n){let r=e.evalNode(t);if(!r.ok)return r;if(!jE(r.value))return z(hD(`CSG_NOT_FACE`,`${n}: node did not produce a Face`));let i=mO(r.value);return i.ok?_O(i.value)?R(i.value):z(hD(`CSG_NOT_FACE`,`${n}: face is not planar`)):z(hD(`CSG_NOT_FACE`,`${n}: ${i.error}`))}function Y6(e,t){let n=E3(e.vector,t.env,`Extrude.vector`);if(!n.ok)return n;let r=J6(t,e.profile,`Extrude.profile`);return r.ok?Vq(r.value,n.value):r}function X6(e,t){let n=T3(e.angle,t.env,`Revolve.angle`);if(!n.ok)return n;if(n.value<=0)return z(W(`CSG_REVOLVE_ANGLE`,`Revolve.angle must be positive (degrees), got ${n.value}`));let r=Math.min(n.value,360),i=e.axis?E3(e.axis,t.env,`Revolve.axis`):R([0,0,1]);if(!i.ok)return i;let a=e.at?E3(e.at,t.env,`Revolve.at`):R([0,0,0]);if(!a.ok)return a;let o=J6(t,e.profile,`Revolve.profile`);return o.ok?Hq(o.value,a.value,i.value,r*Math.PI/180):o}function Z6(e,t){try{var n=WT();if(e.sections.length<2)return z(W(`CSG_LOFT_SECTIONS`,`Loft requires at least 2 sections, got ${e.sections.length}`));let r=n.u(new iE),i=[];for(let[n,a]of e.sections.entries()){let e=J6(t,a,`Loft.sections[${n}]`);if(!e.ok)return e;let o=yk(e.value);r.register(o),i.push(o)}return qN(i,{ruled:e.ruled})}catch(e){n.e=e}finally{n.d()}}var Q6=1e-9;function $6(e){return[e[0],e[1],0]}function e8(e){return z(W(`CSG_PATH_SEGMENT`,`Path: ${e}`))}function t8(e,t,n,r,i){let[a,o]=e,[s,c]=t,l=s-a,u=c-o,d=Math.hypot(l,u);if(d<Q6)return e8(`Arc: coincident endpoints`);if(d>2*n+1e-6)return e8(`Arc: radius ${n} too small for chord ${d}`);let f=Math.sqrt(Math.max(0,n*n-d/2*(d/2))),p=l/d,m=u/d,h=i===r?1:-1,g=(a+s)/2+h*f*-m,_=(o+c)/2+h*f*p,v=Math.atan2(o-_,a-g),y=Math.atan2(c-_,s-g);if(i)for(;y>=v-Q6;)y-=2*Math.PI;else for(;y<=v+Q6;)y+=2*Math.PI;let b=(v+y)/2;return R([g+n*Math.cos(b),_+n*Math.sin(b)])}function n8(e,t,n,r,i,a){let o=!a,[s,c]=n;if(s<=0||c<=0)return e8(`EllipseArc: non-positive radius`);let l=Math.cos(r),u=Math.sin(r),d=(e[0]-t[0])/2,f=(e[1]-t[1])/2,p=l*d+u*f,m=-u*d+l*f,h=p*p/(s*s)+m*m/(c*c);if(h>1){let e=Math.sqrt(h);s*=e,c*=e}let g=s*s*c*c-s*s*m*m-c*c*p*p,_=s*s*m*m+c*c*p*p;if(_<Q6)return e8(`EllipseArc: coincident endpoints`);let v=(i===o?-1:1)*Math.sqrt(Math.max(0,g/_)),y=v*(s*m/c),b=v*(-(c*p)/s),x=l*y-u*b+(e[0]+t[0])/2,S=u*y+l*b+(e[1]+t[1])/2,C=Math.atan2((m-b)/c,(p-y)/s),w=Math.atan2((-m-b)/c,(-p-y)/s)-C;!o&&w>0&&(w-=2*Math.PI),o&&w<0&&(w+=2*Math.PI);let ee=w>=0?C:C+w,te=w>=0?C+w:C;return R({center:[x,S],theta1:ee,theta2:te,rx:s,ry:c})}function r8(e,t,n){if(t.kind!==`EllipseArc`)return e8(`internal: not an ellipse segment`);let r=D3(t.to,n.env,`Path.EllipseArc.to`);if(!r.ok)return r;let i=D3(t.radii,n.env,`Path.EllipseArc.radii`);if(!i.ok)return i;let a=T3(t.rotation,n.env,`Path.EllipseArc.rotation`);if(!a.ok)return a;let o=a.value*Math.PI/180,s=n8(e,r.value,i.value,o,t.largeArc,t.clockwise);if(!s.ok)return s;let{center:c,theta1:l,theta2:u,rx:d,ry:f}=s.value,p,m;if(d>=f?(p=Bk(d,f,l,u,$6(c),[0,0,1]),m=o):(p=Bk(f,d,l-Math.PI/2,u-Math.PI/2,$6(c),[0,0,1]),m=o+Math.PI/2),!p.ok)return p;let h=p.value;if(Math.abs(m)>Q6)try{var g=WT();let e=i8(g.u(h),m*180/Math.PI,c);if(!e.ok)return e;h=e.value}catch(e){g.e=e}finally{g.d()}if(t.clockwise)try{var _=WT();h=oM(_.u(h))}catch(e){_.e=e}finally{_.d()}return R(h)}function i8(e,t,n){let r=F(),{handle:i,dispose:a}=r.composeTransform([{type:`rotate`,angle:t,axis:[0,0,1],center:[n[0],n[1],0]}]);try{return R(LE(r.locate(e.wrapped,i)))}catch(e){return z(U(`CSG_PATH_ELLIPSE_ROTATE`,`Path: kernel cannot relocate ellipse-arc edges`,e,{operation:`evalPath`}))}finally{a()}}function a8(e,t){return D3(e.to,t.env,`Path.${e.kind}.to`)}function o8(e,t,n){switch(t.kind){case`Line`:{let r=a8(t,n);return r.ok?Math.hypot(r.value[0]-e[0],r.value[1]-e[1])<Q6?e8(`Line: zero length`):R(Fk($6(e),$6(r.value))):r}case`Arc`:{let r=a8(t,n);if(!r.ok)return r;let i=T3(t.radius,n.env,`Path.Arc.radius`);if(!i.ok)return i;let a=t8(e,r.value,i.value,t.largeArc,t.clockwise);return a.ok?R(zk($6(e),$6(a.value),$6(r.value))):a}case`Bezier`:{let r=a8(t,n);if(!r.ok)return r;let i=[];for(let e of t.controls){let t=D3(e,n.env,`Path.Bezier.control`);if(!t.ok)return t;i.push($6(t.value))}return Uk([$6(e),...i,$6(r.value)])}case`EllipseArc`:return r8(e,t,n)}}function s8(e,t){try{var n=WT();if(e.segments.length===0)return e8(`at least one segment required`);let r=D3(e.start,t.env,`Path.start`);if(!r.ok)return r;let i=n.u(new iE),a=[],o=r.value;for(let n of e.segments){let e=o8(o,n,t);if(!e.ok)return e;i.register(e.value),a.push(e.value);let r=a8(n,t);if(!r.ok)return r;o=r.value}return Gk(a)}catch(e){n.e=e}finally{n.d()}}function c8(e,t){try{var n=WT();let r=J6(t,e.profile,`Sweep.profile`);if(!r.ok)return r;let i=t.evalNode(e.spine);if(!i.ok)return i;let a=n.u(new iE),o;if(AE(i.value))o=i.value;else if(kE(i.value)){let e=Gk([i.value]);if(!e.ok)return e;a.register(e.value),o=e.value}else return z(hD(`CSG_SWEEP_SPINE`,`Sweep.spine: node did not produce a Wire or Edge`));let s=yk(r.value);a.register(s);let c=zN(s,o,{frenet:e.frenet});if(!c.ok)return c;if(Array.isArray(c.value)){for(let e of c.value)e[Symbol.dispose]();return z(hD(`CSG_SWEEP_SPINE`,`Sweep: unexpected shell-mode result`))}return R(c.value)}catch(e){n.e=e}finally{n.d()}}function l8(e,t){switch(e.kind){case`Box`:return b6(e,t);case`Sphere`:return x6(e,t);case`Cylinder`:return S6(e,t);case`Cone`:return C6(e,t);case`Torus`:return w6(e,t);case`Polygon`:return T6(e,t);case`Circle`:return E6(e,t);case`Line`:return D6(e,t);case`Vertex`:return O6(e,t);case`Empty`:return K6();case`Fuse`:return M6(e,t);case`Cut`:return N6(e,t);case`Intersect`:return P6(e,t);case`FuseAll`:return I6(e,t);case`CutAll`:return L6(e,t);case`Translate`:return V6(e,t);case`Rotate`:return H6(e,t);case`Scale`:return U6(e,t);case`Mirror`:return W6(e,t);case`Compound`:return G6(e,t);case`Instance`:return q6(e,t);case`Extrude`:return Y6(e,t);case`Revolve`:return X6(e,t);case`Loft`:return Z6(e,t);case`Path`:return s8(e,t);case`Sweep`:return c8(e,t)}}function u8(e,t){if(typeof t==`number`)return Y4(Q4(e,!1),t);let n=Q4(e,!0);n=Z4(n,t.length);for(let e of t)n=Y4(n,e);return n}function d8(e,t){if(t.size===0)return V4();let n=O3(e,t),r=Object.keys(n).sort(),i=V4();for(let e of r){i=G4(i,e);let t=n[e];t!==void 0&&(i=u8(i,t))}return i}function f8(e,t,n,r){let i=d8(t,e.freeParams),a=r===void 0?`d`:Y4(V4(),r).toString(16);return`${$4(e.structuralHash)}:${n}:${$4(i)}:${a}`}var p8=[1,0,0,0];function m8(e,t){let n=T3(e.angle,t,`evaluateMesh.peelRigid`);if(!n.ok)return null;let r=e.axis?E3(e.axis,t,`evaluateMesh.peelRigid`):R([0,0,1]);if(!r.ok)return null;let i=e.at?E3(e.at,t,`evaluateMesh.peelRigid`):R([0,0,0]);return i.ok?{angle:n.value,axis:r.value,center:i.value}:null}function h8(e,t){let n=e,r=p8,i=[0,0,0];for(;;)if(n.kind===`Translate`){let e=E3(n.vector,t,`evaluateMesh.peelRigid`);if(!e.ok)break;let a=YF(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=m8(n,t);if(!e)break;let a=XF(e.axis,e.angle*Math.PI/180),o=QF(r,a),s=YF(r,e.center),c=YF(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 g8(e){return e[0]===1&&e[1]===0&&e[2]===0&&e[3]===0}function _8(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 v8(e,t,n){let[r,i,a]=n,o=g8(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;_8(c,s,l,u,d,f,r,i,a);let p=e.normals,m=new Float32Array(p.length);return _8(m,p,l,u,d,f,0,0,0),{...e,vertices:c,normals:m}}function y8(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 b8=class{cache=new Map;refCounts=new Map;evaluating=!1;pendingKeys=[];kernelId;defaultTolerance;maxCacheEntries;maxMeshCacheEntries;meshCache=new Map;onStep;hits=0;misses=0;evictions=0;constructor(e={}){this.kernelId=e.kernel??NT()??`unregistered`,this.defaultTolerance=e.tolerance,e.onStep&&(this.onStep=e.onStep);let t=e.maxCacheEntries;if(t!==void 0&&(!Number.isInteger(t)||t<1))throw RangeError(`Evaluator: maxCacheEntries must be a positive integer, got ${String(t)}`);this.maxCacheEntries=t;let n=e.maxMeshCacheEntries;if(n!==void 0&&(!Number.isInteger(n)||n<1))throw RangeError(`Evaluator: maxMeshCacheEntries must be a positive integer, got ${String(n)}`);this.maxMeshCacheEntries=n}evaluate(e,t={}){if(this.maxCacheEntries!==void 0&&this.evaluating)throw Error(`Evaluator.evaluate() is not reentrant when maxCacheEntries is set — do not call it from an onStep callback.`);return PT(this.kernelId,()=>{this.evaluating=!0;let n=!1;try{let r=this.evaluateInner(e,t);return this.maxCacheEntries!==void 0&&r.ok&&this.trimCache(this.maxCacheEntries),n=r.ok,r}finally{!n&&this.maxCacheEntries!==void 0&&this.rollbackPending(),this.pendingKeys.length=0,this.evaluating=!1}})}evaluateMesh(e,t={},n={}){n.signal?.throwIfAborted();let r=n.cache??!0,i=ho(),a=n.tolerance??i.tolerance,o=n.angularTolerance??i.angularTolerance,s=`${f8(e,t,this.kernelId,this.defaultTolerance)}|${uM(a,o,n.skipNormals??!1,n.includeUVs??!1)}`;if(r){let r=this.meshCache.get(s);if(r!==void 0)return this.maxMeshCacheEntries!==void 0&&(this.meshCache.delete(s),this.meshCache.set(s,r)),R(r);let{inner:i,rot:a,trans:o}=h8(e,t);if(i!==e){let r=this.evaluateMesh(i,t,n);if(!r.ok)return r;let c=this.evaluate(i,t);if(!c.ok)return c;let l=WD(c.value).map(Wj),u=this.evaluate(e,t);if(!u.ok)return u;let d=WD(u.value).map(Wj),f=v8(r.value,a,o),p=y8(f.faceGroups,l,d),m=new Set(d);if(p.every(e=>m.has(e.faceId))){let e={...f,faceGroups:p};return this.meshCache.set(s,e),this.maxMeshCacheEntries!==void 0&&this.trimMeshCache(this.maxMeshCacheEntries),R(e)}}}let c=this.evaluate(e,t);if(!c.ok)return c;let l=PT(this.kernelId,()=>bM(c.value,n));return r&&(this.meshCache.set(s,l),this.maxMeshCacheEntries!==void 0&&this.trimMeshCache(this.maxMeshCacheEntries)),R(l)}evaluateInner(e,t){let n=f8(e,t,this.kernelId,this.defaultTolerance),r=this.cache.get(n);if(r!==void 0)return this.hits++,this.maxCacheEntries!==void 0&&(this.cache.delete(n),this.cache.set(n,r)),this.onStep?.({node:e,cacheKey:n,cacheHit:!0}),R(r);this.misses++;let i=l8(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 x8(e,t){try{var n=WT();let r=t(n.u(new b8(e)));if(r instanceof Promise)throw Error(`withEvaluator() callback returned a Promise. Async code must construct an Evaluator directly and dispose it manually — borrowed shapes would otherwise be freed before the Promise resolves.`);return r}catch(e){n.e=e}finally{n.d()}}var S8=1;function C8(e){return{csgVersion:2,root:A8(e)}}function w8(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:w8(e.a),b:w8(e.b)};case`UnaryOp`:return{kind:`UnaryOp`,op:e.op,arg:w8(e.arg)};case`Component`:return{kind:`Component`,vec:w8(e.vec),index:e.index};case`BuildVec`:return{kind:`BuildVec`,dim:e.dim,components:e.components.map(w8)}}}function T8(e){switch(e.kind){case`Box`:return{kind:`Box`,x:w8(e.x),y:w8(e.y),z:w8(e.z)};case`Sphere`:return{kind:`Sphere`,radius:w8(e.radius)};case`Cylinder`:return{kind:`Cylinder`,radius:w8(e.radius),height:w8(e.height)};case`Cone`:return{kind:`Cone`,radius1:w8(e.radius1),radius2:w8(e.radius2),height:w8(e.height)};case`Torus`:return{kind:`Torus`,majorRadius:w8(e.majorRadius),minorRadius:w8(e.minorRadius)};case`Polygon`:return{kind:`Polygon`,points:e.points.map(w8)};case`Circle`:return{kind:`Circle`,radius:w8(e.radius)};case`Line`:return{kind:`Line`,from:w8(e.from),to:w8(e.to)};case`Vertex`:return{kind:`Vertex`,point:w8(e.point)};case`Empty`:return{kind:`Empty`,output:e.output};default:return}}function E8(e){switch(e.kind){case`Fuse`:case`Cut`:case`Intersect`:return{kind:e.kind,a:A8(e.a),b:A8(e.b),tolerance:e.tolerance};case`FuseAll`:return{kind:`FuseAll`,shapes:e.shapes.map(A8),tolerance:e.tolerance};case`CutAll`:return{kind:`CutAll`,base:A8(e.base),tools:e.tools.map(A8),tolerance:e.tolerance};default:return}}function D8(e){return e?w8(e):void 0}function O8(e){switch(e.kind){case`Line`:return{kind:`Line`,to:w8(e.to)};case`Arc`:return{kind:`Arc`,to:w8(e.to),radius:w8(e.radius),largeArc:e.largeArc,clockwise:e.clockwise};case`Bezier`:return{kind:`Bezier`,controls:e.controls.map(w8),to:w8(e.to)};case`EllipseArc`:return{kind:`EllipseArc`,to:w8(e.to),radii:w8(e.radii),rotation:w8(e.rotation),largeArc:e.largeArc,clockwise:e.clockwise}}}function k8(e){switch(e.kind){case`Translate`:return{kind:`Translate`,target:A8(e.target),vector:w8(e.vector)};case`Rotate`:return{kind:`Rotate`,target:A8(e.target),angle:w8(e.angle),axis:D8(e.axis),at:D8(e.at)};case`Scale`:return{kind:`Scale`,target:A8(e.target),factor:w8(e.factor),center:D8(e.center)};case`Mirror`:return{kind:`Mirror`,target:A8(e.target),normal:D8(e.normal),at:D8(e.at)};default:return}}function A8(e){return e.kind===`Extrude`?{kind:`Extrude`,profile:A8(e.profile),vector:w8(e.vector)}:e.kind===`Revolve`?{kind:`Revolve`,profile:A8(e.profile),angle:w8(e.angle),axis:D8(e.axis),at:D8(e.at)}:e.kind===`Loft`?{kind:`Loft`,sections:e.sections.map(A8),ruled:e.ruled}:e.kind===`Path`?{kind:`Path`,start:w8(e.start),segments:e.segments.map(O8)}:e.kind===`Sweep`?{kind:`Sweep`,profile:A8(e.profile),spine:A8(e.spine),frenet:e.frenet}:e.kind===`Compound`?{kind:`Compound`,children:e.children.map(A8)}:e.kind===`Instance`?{kind:`Instance`,source:A8(e.source),placements:e.placements,fuse:e.fuse}:T8(e)??E8(e)??k8(e)}function j8(e){return z(W(H.NULL_SHAPE_INPUT,`csg.fromJSON: ${e}`))}function M8(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function N8(e){return typeof e==`number`&&Number.isFinite(e)}function P8(e){return typeof e==`string`}function F8(e,t){if(!Array.isArray(e)||e.length!==3)return j8(`${t}: expected Vec3 array`);let[n,r,i]=e;return!N8(n)||!N8(r)||!N8(i)?j8(`${t}: Vec3 contains non-number`):R([n,r,i])}function I8(e,t){if(!Array.isArray(e)||e.length!==2)return j8(`${t}: expected Vec2 array`);let[n,r]=e;return!N8(n)||!N8(r)?j8(`${t}: Vec2 contains non-number`):R([n,r])}function L8(e){if(!M8(e))return j8(`input is not an object`);let t=e.csgVersion;if(typeof t!=`number`||!Number.isInteger(t)||t<S8||t>2)return j8(`unsupported csgVersion ${String(t)} (expected ${S8}..2)`);let n=e.root;return G8(n)}function R8(e){if(!M8(e))return j8(`expression: not an object`);let t=e.kind;switch(t){case`NumLit`:return N8(e.value)?R(n3(e.value)):j8(`NumLit.value`);case`Vec3Lit`:{let t=F8(e.value,`Vec3Lit.value`);return t.ok?R(r3(t.value)):t}case`Vec2Lit`:{let t=I8(e.value,`Vec2Lit.value`);return t.ok?R(i3(t.value)):t}case`Param`:return P8(e.name)?R(a3(e.name)):j8(`Param.name`);case`BinOp`:return z8(e);case`UnaryOp`:return B8(e);case`Component`:return V8(e);case`BuildVec`:return H8(e);default:return j8(`unknown expression kind: ${String(t)}`)}}function z8(e){let t=e.op;if(t!==`+`&&t!==`-`&&t!==`*`&&t!==`/`)return j8(`BinOp.op: ${String(t)}`);let n=R8(e.a);if(!n.ok)return n;let r=R8(e.b);return r.ok?R(o3(t,n.value,r.value)):r}function B8(e){let t=e.op;if(!P8(t)||![`neg`,`sin`,`cos`,`sqrt`,`abs`].includes(t))return j8(`UnaryOp.op: ${String(t)}`);let n=R8(e.arg);return n.ok?R(s3(t,n.value)):n}function V8(e){let t=e.index;if(t!==0&&t!==1&&t!==2)return j8(`Component.index: ${String(t)}`);let n=R8(e.vec);return n.ok?R(c3(n.value,t)):n}function H8(e){let t=e.dim;if(t!==2&&t!==3)return j8(`BuildVec.dim: ${String(t)}`);let n=e.components;if(!Array.isArray(n))return j8(`BuildVec.components: not array`);if(n.length!==t)return j8(`BuildVec.components: expected ${t} components, got ${n.length}`);let r=[];for(let e of n){let t=R8(e);if(!t.ok)return t;r.push(t.value)}return R(l3(t,r))}function U8(e,t){if(!Array.isArray(e))return j8(`${t}: not array`);let n=[];for(let t of e){let e=G8(t);if(!e.ok)return e;n.push(e.value)}return R(n)}function W8(e){let t=e.tolerance;return t==null?R(void 0):N8(t)?R(t):j8(`tolerance: not a finite number`)}function G8(e){if(!M8(e))return j8(`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 q8(t,e);case`Fuse`:case`Cut`:case`Intersect`:return t5(t,e);case`FuseAll`:case`CutAll`:return n5(t,e);case`Translate`:case`Rotate`:case`Scale`:case`Mirror`:return r5(t,e);case`Compound`:return g5(e);case`Instance`:return v5(e);case`Extrude`:return l5(e);case`Revolve`:return u5(e);case`Loft`:return d5(e);case`Path`:return h5(e);case`Sweep`:return m5(e);default:return j8(`unknown node kind: ${String(t)}`)}}function K8(e,t,n){let r=R8(e[t]);return r.ok?R(n(r.value)):r}function q8(e,t){switch(e){case`Box`:return J8(t);case`Sphere`:return K8(t,`radius`,U3);case`Cylinder`:return Y8(t);case`Cone`:return X8(t);case`Torus`:return Z8(t);case`Polygon`:return Q8(t);case`Circle`:return K8(t,`radius`,J3);case`Line`:return $8(t);case`Vertex`:return K8(t,`point`,X3);case`Empty`:return e5(t)}return j8(`unhandled primitive: ${e}`)}function J8(e){let t=R8(e.x);if(!t.ok)return t;let n=R8(e.y);if(!n.ok)return n;let r=R8(e.z);return r.ok?R(H3(t.value,n.value,r.value)):r}function Y8(e){let t=R8(e.radius);if(!t.ok)return t;let n=R8(e.height);return n.ok?R(W3(t.value,n.value)):n}function X8(e){let t=R8(e.radius1);if(!t.ok)return t;let n=R8(e.radius2);if(!n.ok)return n;let r=R8(e.height);return r.ok?R(G3(t.value,n.value,r.value)):r}function Z8(e){let t=R8(e.majorRadius);if(!t.ok)return t;let n=R8(e.minorRadius);return n.ok?R(K3(t.value,n.value)):n}function Q8(e){let t=e.points;if(!Array.isArray(t))return j8(`Polygon.points: not array`);let n=[];for(let e of t){let t=R8(e);if(!t.ok)return t;n.push(t.value)}return R(q3(n))}function $8(e){let t=R8(e.from);if(!t.ok)return t;let n=R8(e.to);return n.ok?R(Y3(t.value,n.value)):n}function e5(e){let t=e.output;switch(t){case`Solid`:return R(Q3());case`Face`:return R($3());case`Wire`:return R(e6());default:return j8(`Empty.output: ${String(t)}`)}}function t5(e,t){let n=G8(t.a);if(!n.ok)return n;let r=G8(t.b);if(!r.ok)return r;let i=W8(t);if(!i.ok)return i;switch(e){case`Fuse`:return R(n6(n.value,r.value,i.value));case`Cut`:return R(r6(n.value,r.value,i.value));case`Intersect`:return R(i6(n.value,r.value,i.value))}}function n5(e,t){let n=W8(t);if(!n.ok)return n;if(e===`FuseAll`){let e=U8(t.shapes,`FuseAll.shapes`);return e.ok?R(a6(e.value,n.value)):e}let r=G8(t.base);if(!r.ok)return r;let i=U8(t.tools,`CutAll.tools`);return i.ok?R(o6(r.value,i.value,n.value)):i}function r5(e,t){let n=G8(t.target);if(!n.ok)return n;switch(e){case`Translate`:return i5(t,n.value);case`Rotate`:return o5(t,n.value);case`Scale`:return s5(t,n.value);case`Mirror`:return c5(t,n.value)}}function i5(e,t){let n=R8(e.vector);return n.ok?R(c6(t,n.value)):n}function a5(e,t){if(e[t]===void 0)return R(void 0);let n=R8(e[t]);return n.ok?R(n.value):n}function o5(e,t){let n=R8(e.angle);if(!n.ok)return n;let r=a5(e,`axis`);if(!r.ok)return r;let i=a5(e,`at`);return i.ok?R(l6(t,n.value,{axis:r.value,at:i.value})):i}function s5(e,t){let n=R8(e.factor);if(!n.ok)return n;let r=a5(e,`center`);return r.ok?R(u6(t,n.value,{center:r.value})):r}function c5(e,t){let n=a5(e,`normal`);if(!n.ok)return n;let r=a5(e,`at`);return r.ok?R(d6(t,{normal:n.value,at:r.value})):r}function l5(e){let t=G8(e.profile);if(!t.ok)return t;let n=R8(e.vector);return n.ok?R(f6(t.value,n.value)):n}function u5(e){let t=G8(e.profile);if(!t.ok)return t;let n=R8(e.angle);if(!n.ok)return n;let r=a5(e,`axis`);if(!r.ok)return r;let i=a5(e,`at`);return i.ok?R(g6(t.value,n.value,{axis:r.value,at:i.value})):i}function d5(e){let t=U8(e.sections,`Loft.sections`);if(!t.ok)return t;let n=e.ruled;return n!==void 0&&typeof n!=`boolean`?j8(`Loft.ruled: not a boolean`):R(h6(t.value,{ruled:n}))}function f5(e,t){let n=e[t];return n===void 0?R(!1):typeof n==`boolean`?R(n):j8(`${t}: not a boolean`)}function p5(e){if(!M8(e))return j8(`segment: not an object`);let t=R8(e.to);if(!t.ok)return t;let n=e.kind;switch(n){case`Line`:return R(k3(t.value));case`Arc`:{let n=R8(e.radius);if(!n.ok)return n;let r=f5(e,`largeArc`);if(!r.ok)return r;let i=f5(e,`clockwise`);return i.ok?R(A3(t.value,n.value,{largeArc:r.value,clockwise:i.value})):i}case`Bezier`:{let n=e.controls;if(!Array.isArray(n))return j8(`Bezier.controls: not array`);let r=[];for(let e of n){let t=R8(e);if(!t.ok)return t;r.push(t.value)}return R(j3(r,t.value))}case`EllipseArc`:{let n=R8(e.radii);if(!n.ok)return n;let r=R8(e.rotation);if(!r.ok)return r;let i=f5(e,`largeArc`);if(!i.ok)return i;let a=f5(e,`clockwise`);return a.ok?R(M3(t.value,n.value,{rotation:r.value,largeArc:i.value,clockwise:a.value})):a}default:return j8(`unknown segment kind: ${String(n)}`)}}function m5(e){let t=G8(e.profile);if(!t.ok)return t;let n=G8(e.spine);if(!n.ok)return n;let r=f5(e,`frenet`);return r.ok?R(p6(t.value,n.value,{frenet:r.value})):r}function h5(e){let t=R8(e.start);if(!t.ok)return t;let n=e.segments;if(!Array.isArray(n))return j8(`Path.segments: not array`);let r=[];for(let e of n){let t=p5(e);if(!t.ok)return t;r.push(t.value)}return R(m6(t.value,r))}function g5(e){let t=U8(e.children,`Compound.children`);return t.ok?R(_6(t.value)):t}function _5(e){return Array.isArray(e)&&e.length===4&&e.every(e=>Array.isArray(e)&&e.length===4&&e.every(N8))}function v5(e){let t=G8(e.source);if(!t.ok)return t;let n=e.placements;return!Array.isArray(n)||!n.every(_5)?j8(`Instance.placements must be an array of 4x4 number matrices`):R(v6(t.value,n,e.fuse===!0))}function y5(e){return S5(e)}function b5(e){switch(e.kind){case`NumLit`:case`Vec3Lit`:case`Vec2Lit`:case`Param`:return e;case`BinOp`:{let t=b5(e.a),n=b5(e.b);if(t.kind===`NumLit`&&n.kind===`NumLit`)switch(e.op){case`+`:return n3(t.value+n.value);case`-`:return n3(t.value-n.value);case`*`:return n3(t.value*n.value);case`/`:return n3(t.value/n.value)}return t!==e.a||n!==e.b?o3(e.op,t,n):e}case`UnaryOp`:{let t=b5(e.arg);if(t.kind===`NumLit`){let n=t.value;switch(e.op){case`neg`:return n3(-n);case`sin`:return n3(Math.sin(n));case`cos`:return n3(Math.cos(n));case`sqrt`:return n3(Math.sqrt(n));case`abs`:return n3(Math.abs(n))}}return t===e.arg?e:s3(e.op,t)}case`Component`:{let t=b5(e.vec);return t.kind===`Vec3Lit`||t.kind===`Vec2Lit`&&(e.index===0||e.index===1)?n3(t.value[e.index]):t===e.vec?e:c3(t,e.index)}case`BuildVec`:{let t=e.components.map(b5);return x5(e.dim,t)||(t.some((t,n)=>t!==e.components[n])?l3(e.dim,t):e)}}}function x5(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?i3([n[0],n[1]]):r3([n[0],n[1],n[2]])}function S5(e){switch(e.kind){case`Box`:return H3(b5(e.x),b5(e.y),b5(e.z));case`Sphere`:return U3(b5(e.radius));case`Cylinder`:return W3(b5(e.radius),b5(e.height));case`Cone`:return G3(b5(e.radius1),b5(e.radius2),b5(e.height));case`Torus`:return K3(b5(e.majorRadius),b5(e.minorRadius));case`Polygon`:return q3(e.points.map(b5));case`Circle`:return J3(b5(e.radius));case`Line`:return Y3(b5(e.from),b5(e.to));case`Vertex`:return X3(b5(e.point));case`Empty`:return e;case`Fuse`:return w5(e.a,e.b,e.tolerance);case`Cut`:return T5(e.a,e.b,e.tolerance);case`Intersect`:return E5(e.a,e.b,e.tolerance);case`FuseAll`:return D5(e.shapes,e.tolerance);case`CutAll`:return O5(e.base,e.tools,e.tolerance);case`Translate`:return k5(e.target,e.vector);case`Rotate`:return l6(S5(e.target),b5(e.angle),{axis:e.axis?b5(e.axis):void 0,at:e.at?b5(e.at):void 0});case`Scale`:return u6(S5(e.target),b5(e.factor),{center:e.center?b5(e.center):void 0});case`Mirror`:return d6(S5(e.target),{normal:e.normal?b5(e.normal):void 0,at:e.at?b5(e.at):void 0});case`Compound`:return _6(e.children.map(S5).filter(e=>e.kind!==`Empty`));case`Instance`:return v6(S5(e.source),e.placements,e.fuse);case`Extrude`:case`Revolve`:case`Loft`:case`Sweep`:case`Path`:return C5(e)}}function C5(e){switch(e.kind){case`Extrude`:return f6(S5(e.profile),b5(e.vector));case`Revolve`:return g6(S5(e.profile),b5(e.angle),{axis:e.axis?b5(e.axis):void 0,at:e.at?b5(e.at):void 0});case`Loft`:return h6(e.sections.map(S5),{ruled:e.ruled});case`Sweep`:return p6(S5(e.profile),S5(e.spine),{frenet:e.frenet});case`Path`:return m6(b5(e.start),e.segments.map(e=>F3(e,b5)))}}function w5(e,t,n){let r=S5(e),i=S5(t);return r.kind===`Empty`?i:i.kind===`Empty`?r:n6(r,i,n)}function T5(e,t,n){let r=S5(e),i=S5(t);return i.kind===`Empty`||r.kind===`Empty`?r:r6(r,i,n)}function E5(e,t,n){let r=S5(e),i=S5(t);return r.kind===`Empty`?r:i.kind===`Empty`?i:i6(r,i,n)}function D5(e,t){let n=e.map(S5).filter(e=>e.kind!==`Empty`);return n.length===0?Q3():n.length===1?n[0]:a6(n,t)}function O5(e,t,n){let r=S5(e);if(r.kind===`Empty`)return r;let i=t.map(S5).filter(e=>e.kind!==`Empty`);return i.length===0?r:o6(r,i,n)}function k5(e,t){let n=S5(e),r=b5(t);if(r.kind!==`Vec3Lit`)return c6(n,r);let[i,a,o]=r.value;if(i===0&&a===0&&o===0)return n;if(n.kind===`Translate`){let e=b5(n.vector);if(e.kind===`Vec3Lit`)return c6(n.target,[e.value[0]+i,e.value[1]+a,e.value[2]+o])}return c6(n,r)}function A5(e,t,n){return j5(e,t,n)}function j5(e,t,n){return t(e)?n:M5(e,t,n)}function M5(e,t,n){switch(e.kind){case`Box`:case`Sphere`:case`Cylinder`:case`Cone`:case`Torus`:case`Polygon`:case`Circle`:case`Line`:case`Vertex`:case`Empty`:case`Path`:return e;case`Fuse`:return n6(j5(e.a,t,n),j5(e.b,t,n),e.tolerance);case`Cut`:return r6(j5(e.a,t,n),j5(e.b,t,n),e.tolerance);case`Intersect`:return i6(j5(e.a,t,n),j5(e.b,t,n),e.tolerance);case`FuseAll`:return a6(e.shapes.map(e=>j5(e,t,n)),e.tolerance);case`CutAll`:return o6(j5(e.base,t,n),e.tools.map(e=>j5(e,t,n)),e.tolerance);case`Translate`:return c6(j5(e.target,t,n),e.vector);case`Rotate`:return l6(j5(e.target,t,n),e.angle,{axis:e.axis,at:e.at});case`Scale`:return u6(j5(e.target,t,n),e.factor,{center:e.center});case`Mirror`:return d6(j5(e.target,t,n),{normal:e.normal,at:e.at});case`Compound`:return _6(e.children.map(e=>j5(e,t,n)));case`Instance`:return v6(j5(e.source,t,n),e.placements,e.fuse);case`Extrude`:return f6(j5(e.profile,t,n),e.vector);case`Revolve`:return g6(j5(e.profile,t,n),e.angle,{axis:e.axis,at:e.at});case`Loft`:return h6(e.sections.map(e=>j5(e,t,n)),{ruled:e.ruled});case`Sweep`:return p6(j5(e.profile,t,n),j5(e.spine,t,n),{frenet:e.frenet})}}function N5(e,t){t(e);for(let n of P5(e))N5(n,t)}function P5(e){switch(e.kind){case`Box`:case`Sphere`:case`Cylinder`:case`Cone`:case`Torus`:case`Polygon`:case`Circle`:case`Line`:case`Vertex`:case`Empty`:case`Path`:return[];case`Fuse`:case`Cut`:case`Intersect`:return[e.a,e.b];case`FuseAll`:return e.shapes;case`CutAll`:return[e.base,...e.tools];case`Translate`:case`Rotate`:case`Scale`:case`Mirror`:return[e.target];case`Compound`:return e.children;case`Instance`:return[e.source];case`Extrude`:case`Revolve`:return[e.profile];case`Loft`:return e.sections;case`Sweep`:return[e.profile,e.spine]}}function F5(e){let t=0;return N5(e,()=>{t++}),t}var I5=NZ({CSG_VERSION:()=>2,Evaluator:()=>b8,add:()=>u3,arcTo:()=>A3,asScalarExpr:()=>f3,asVec2Expr:()=>h3,asVec3Expr:()=>m3,bezierTo:()=>j3,binOp:()=>o3,box:()=>H3,buildVec:()=>l3,circle:()=>J3,component:()=>c3,compound:()=>_6,cone:()=>G3,cut:()=>r6,cutAll:()=>o6,cylinder:()=>W3,ellipseArcTo:()=>M3,emptyFace:()=>$3,emptySolid:()=>Q3,emptyWire:()=>e6,extrude:()=>f6,foldExpr:()=>b5,forEachNode:()=>N5,fromJSON:()=>L8,fuse:()=>n6,fuseAll:()=>a6,instance:()=>v6,intersect:()=>i6,line:()=>Y3,lineTo:()=>k3,loft:()=>h6,mirror:()=>d6,mul:()=>d3,nodeCount:()=>F5,numLit:()=>n3,optimize:()=>y5,outputKindOf:()=>y6,param:()=>a3,path:()=>m6,polygon:()=>q3,replaceNode:()=>A5,revolve:()=>g6,rotate:()=>l6,scale:()=>u6,sphere:()=>U3,sweep:()=>p6,toJSON:()=>C8,torus:()=>K3,translate:()=>c6,unaryOp:()=>s3,vec2Lit:()=>i3,vec3Lit:()=>r3,vertex:()=>X3,withEvaluator:()=>x8});export{dz as BaseSketcher2d,fz as BlueprintSketcher,r as BrepBugError,H as BrepErrorCode,x2 as BrepWrapperError,Cy as BrepkitAdapter,Wq as CompoundSketch,o as DEFAULT_CAPABILITIES,CD as DEG2RAD,iE as DisposalScope,a as EXACT_BREP_CAPABILITIES,CJ as FaceSketcher,G as HASH_CODE_MAX,WE as OK,uo as OcctWasmAdapter,wD as RAD2DEG,oJ as Sketch,SJ as Sketcher,sJ as Sketches,RF as addChild,Vj as addHoles,hI as addJoint,n0 as addMate,XI as addStep,CP as adjacentFaces,$E as all,JE as andThen,RZ as applyGlue,F0 as applyMatrix,cM as approximateCurve,mE as as2D,pE as as3D,ZO as asTopo,RP as assignRoles,jN as autoHeal,Oj as bezier,xX as blueprintToDXF,WA as booleanPipeline,A4 as booleans,v2 as boss,hj as box,Dj as bsplineApprox,i as bug,yJ as cameraFromPlane,vJ as cameraLookAt,AP as captureHint,rk as cast,LE as castShape,RE as castShape3D,Z0 as chamfer,BM as chamferDistAngleShape,lN as chamferWithEvolution,a0 as checkAllInterferences,eN as checkBoolean,i0 as checkInterference,Sj as circle,FF as circularPattern,vk as classifyPointOnFace,vM as clearMeshCache,P0 as clone,pO as closedWire,uD as collect,WF as collectShapes,gA as colorFaces,hA as colorShape,VN as complexExtrude,fj as composeTransforms,Lj as compound,rJ as compoundSketchExtrude,tJ as compoundSketchFace,aJ as compoundSketchLoft,iJ as compoundSketchRevolve,vD as computationError,l1 as computeStraightSkeleton,vj as cone,I4 as construction,U$ as convexHull,_z as cornerFinder,UF as countNodes,MF as createAssembly,LF as createAssemblyNode,FY as createBlueprint,_J as createCamera,DE as createCompound,IY as createCompoundBlueprint,_F as createDerivedFaceRef,cP as createDistanceQuery,xE as createEdge,eF as createEdgeRef,CE as createFace,eE as createHandle,YI as createHistory,rE as createKernelHandle,yM as createMeshCache,WO as createNamedPlane,TZ as createOperationRegistry,HO as createPlane,zP as createRef,rL as createRegistry,wE as createShell,TE as createSolid,_Z as createTaskQueue,bE as createVertex,cF as createVertexRef,SE as createWire,wZ as createWorkerClient,AZ as createWorkerHandler,jZ as createWorkerPool,I5 as csg,mo as currentQuality,DY as curve2dBoundingBox,PY as curve2dDistanceFrom,OY as curve2dFirstPoint,NY as curve2dIsOnCurve,kY as curve2dLastPoint,jY as curve2dParameter,AY as curve2dSplitAt,MY as curve2dTangentAt,tM as curveAxis,Zj as curveEndPoint,nM as curveIsClosed,rM as curveIsPeriodic,eM as curveLength,iM as curvePeriod,Qj as curvePointAt,Xj as curveStartPoint,$j as curveTangentAt,z0 as cut,rB as cut2D,V0 as cutAll,GM as cutAllBisect,Kz as cutBlueprints,oN as cutWithEvolution,gj as cylinder,cI as cylindricalJoint,kP as defaultScorer,yZ as dequeueTask,o2 as describe,eY as deserializeDrawing,uL as deserializeHistory,ak as deserializeShape,tk as downcast,t2 as draft,nY as draw,sY as drawCircle,cY as drawEllipse,hY as drawFaceOutline,fY as drawParametricFunction,dY as drawPointsInterpolation,lY as drawPolysides,mY as drawProjection,iY as drawRectangle,rY as drawRoundedRectangle,aY as drawSingleCircle,oY as drawSingleEllipse,uY as drawText,xY as drawingChamfer,vY as drawingCut,bY as drawingFillet,_Y as drawingFuse,yY as drawingIntersect,gY as drawingToSketchOnPlane,g2 as drill,FL as edgeFinder,yP as edgesOfFace,Cj as ellipse,Ej as ellipseArc,bj as ellipsoid,vZ as enqueueTask,z as err,NF as exportAssemblySTEP,bX as exportDXF,sX as exportGlb,oX as exportGltf,DM as exportIGES,XY as exportOBJ,TM as exportSTEP,iZ as exportSTEPConfigured,EM as exportSTL,BX as exportThreeMF,WI as exportURDF,d2 as extrude,Uq as extrudeAll,Mj as face,_k as faceAxis,gk as faceCenter,RL as faceFinder,ck as faceGeomType,lk as faceOrientation,_P as facesOfEdge,vP as facesOfVertex,jQ as fieldBoolean,FQ as fieldContour,MQ as fieldOffset,PQ as fieldReinit,NQ as fieldShell,qk as fill,Nj as filledFace,X0 as fillet,cN as filletWithEvolution,iA as findFacesByTag,VF as findNode,QI as findStep,PN as fixSelfIntersection,MN as fixShape,YE as flatMap,nD as flatten,uk as flipFaceOrientation,oM as flipOrientation,uZ as fontMetrics,yI as forwardKinematics,c2 as fromBREP,A$ as fromKernelDir,k$ as fromKernelPnt,O$ as fromKernelVec,iD as fromNullable,R0 as fuse,tB as fuse2D,B0 as fuseAll,YM as fuseAllBisect,Gz as fuseBlueprints,aN as fuseWithEvolution,G2 as gearGeometry,XZ as getActiveVoxelId,rO as getBounds,LY as getBounds2D,YD as getCompSolids,Yj as getCurveType,JT as getDisposalStats,UD as getEdges,vA as getFaceColor,Ck as getFaceOrigins,aA as getFaceTags,WD as getFaces,uJ as getFont,Wj as getHashCode,$I as getHistoryShape,F as getKernel,FT as getKernelCapabilities,zT as getKernelTier,VM as getNurbsCurveData,HM as getNurbsSurfaceData,aM as getOrientation,RY as getOrientation2D,Co as getPerformanceStats,_A as getShapeColor,vE as getShapeKind,JD as getShells,VL as getSingleFace,qD as getSolids,sk as getSurfaceType,sA as getTagMetadata,KD as getVertices,YZ as getVoxel,GD as getWires,IF as gridPattern,KN as guidedSweep,n2 as heal,ON as healFace,DN as healSolid,kN as healWire,wj as helix,H$ as hull,u0 as importDXF,D0 as importGLB,sZ as importIGES,m0 as importOBJ,aZ as importSTEP,oZ as importSTL,rZ as importSVG,nZ as importSVGPathD,E0 as importThreeMF,JI as importURDF,UT as init,AT as initFromManifold,VT as initFromOC,ZZ as initVoxel,xk as innerWires,S1 as instance,w1 as instanceCount,C1 as instanceGrid,D1 as instancedMesh,sM as interpolateCurve,H0 as intersect,iB as intersect2D,qz as intersectBlueprints,sN as intersectWithEvolution,HD as invalidateShapeCache,NI as inverseKinematics,P4 as io,yD as ioError,fE as is2D,dE as is3D,mZ as isBatchRequest,BZ as isChamferRadius,lO as isClosedWire,ik as isCompSolid,PE as isCompound,bF as isDerivedFaceRef,pZ as isDisposeRequest,kE as isEdge,xF as isEdgeRef,u2 as isEmpty,qj as isEqualShape,B as isErr,gZ as isErrorResponse,jE as isFace,CF as isFaceRef,VZ as isFilletRadius,dZ as isInitRequest,zY as isInside2D,x1 as isInstanced,wF as isLineageRef,uE as isLive,dO as isManifoldShell,zZ as isNumber,GE as isOk,fZ as isOperationRequest,uO as isOrientedFace,_O as isPlanarFace,vO as isPlanarWire,mJ as isProjectionPlane,xZ as isQueueEmpty,Kj as isSameShape,IE as isShape1D,FE as isShape3D,ME as isShell,NE as isSolid,hZ as isSuccessResponse,l2 as isValid,fO as isValidSolid,OE as isVertex,SF as isVertexRef,AE as isWire,nO as iterCompSolids,XD as iterEdges,ZD as iterFaces,tO as iterShells,eO as iterSolids,$O as iterTopo,$D as iterVertices,QD as iterWires,FI as jointTrajectory,mI as jointTransform,RI as jointsFromDH,jD as kernelCall,MD as kernelCallRaw,ND as kernelCallScoped,U as kernelError,S$ as latticeInfill,C$ as latticeInfillShape,xj as line,PF as linearPattern,lJ as loadFont,L0 as locate,p2 as loft,JN as loftAll,NJ as makeBaseBox,m4 as makeExternalGear,h4 as makeInternalGear,KO as makePlane,_4 as makePlanetaryGear,gJ as makeProjectedEdges,hO as manifoldShell,KE as map,rD as mapBoth,qE as mapErr,lD as match,T1 as materialize,iP as measureArea,lP as measureCurvatureAt,uP as measureCurvatureAtMid,oP as measureDistance,sP as measureDistanceProps,aP as measureLength,nP as measureLinearProps,tP as measureSurfaceProps,rP as measureVolume,eP as measureVolumeProps,N4 as measurement,bI as mechanismDOF,i2 as mesh,a2 as meshEdges,MM as meshLODs,PM as meshLODsProgressive,OM as meshMultiLOD,q$ as minkowski,M0 as mirror,WY as mirror2D,TY as mirrorDrawing,y2 as mirrorJoin,j4 as modifiers,cL as modifyStep,_D as moduleInitError,GN as multiSectionSweep,hk as normalAt,$0 as offset,zj as offsetFace,pQ as offsetMesh,gQ as offsetShape,lM as offsetWire2D,R as ok,XE as or,ZE as orElse,ez as organiseBlueprints,mO as orientedFace,yk as outerWire,L4 as patterns,bZ as pendingCount,pD as pipeline,YO as pivotPlane,yO as planarFace,lI as planarJoint,bO as planarWire,l4 as planetPlacements,_2 as pocket,fk as pointOnSurface,nQ as pointsInside,Fj as polygon,J$ as polyhedron,kJ as polysideInnerRadius,vz as polysidesBlueprint,dN as positionOnCurve,HT as prewarm,k4 as primitives,sI as prismaticJoint,bJ as projectEdges,mk as projectPointOnFace,F4 as query,bD as queryError,b2 as rectangularPattern,EZ as registerHandler,jT as registerKernel,RT as registerKernelTier,iL as registerOperation,nL as registerShape,JZ as registerVoxel,SZ as rejectAll,zF as removeChild,bk as removeHolesFromFace,aQ as repairMesh,sL as replayFrom,oL as replayHistory,YT as resetDisposalStats,wo as resetPerformanceStats,sj as resize,$ as resolve,O0 as resolve3D,vF as resolveDerivedFaceRef,wO as resolveDirection,tF as resolveEdgeRef,EF as resolveLineageRef,GO as resolvePlane,GP as resolveRef,OF as resolveRefIn,AF as resolveRefParams,lF as resolveVertexRef,EY as reverseCurve,oI as revoluteJoint,f2 as revolve,_1 as roof,j0 as rotate,HY as rotate2D,CY as rotateDrawing,yz as roundedRectangleBlueprint,N0 as scale,UY as scale2D,wY as scaleDrawing,ZQ as sdfBox,t$ as sdfCapsule,e$ as sdfCone,$Q as sdfCylinder,p$ as sdfFieldAxialRamp,g$ as sdfFieldClamp,f$ as sdfFieldConst,h$ as sdfFieldFromSdf,m$ as sdfFieldRadialRamp,s$ as sdfLattice,r$ as sdfPlane,QQ as sdfRoundedBox,XQ as sdfSphere,c$ as sdfStrutLattice,a$ as sdfSweep,n$ as sdfTorus,U0 as section,W0 as sectionToFace,lL as serializeHistory,fI as setJointValue,dI as setJointValues,Sk as setShapeOrigin,oA as setTagMetadata,Bj as sewShells,z2 as shape,sQ as shapeToMeshInput,ek as shapeType,TP as sharedEdges,Q0 as shell,mQ as shellMesh,_Q as shellShape,uN as shellWithEvolution,r2 as simplify,wJ as sketchCircle,TJ as sketchEllipse,Zq as sketchExtrude,Jq as sketchFace,AJ as sketchFaceOffset,MJ as sketchHelix,$q as sketchLoft,qY as sketchOnFace2D,KY as sketchOnPlane2D,jJ as sketchParametricFunction,OJ as sketchPolysides,EJ as sketchRectangle,Xq as sketchRevolve,DJ as sketchRoundedRectangle,Qq as sketchSweep,cZ as sketchText,Yq as sketchWires,gD as sketcherStateError,K0 as slice,Rj as solid,NN as solidFromShell,r0 as solveAssembly,_j as sphere,uI as sphericalJoint,G0 as split,eL as stepCount,tL as stepsFrom,GY as stretch2D,Pj as subFace,BN as supportExtrude,FZ as supportsConstraintSketch,PZ as supportsProjection,L$ as surfaceFromGrid,B$ as surfaceFromImage,zN as sweep,rA as tagFaces,kj as tangentArc,eD as tap,tD as tapErr,fJ as textBlueprints,lZ as textMetrics,e2 as thicken,dL as thread,Tj as threePointArc,s2 as toBREP,FM as toBufferGeometryData,IM as toGroupedBufferGeometryData,T$ as toKernelVec,RM as toLODGeometryData,zM as toLODGeometryLevels,LM as toLineGeometryData,BY as toSVGPathD,SO as toVec2,xO as toVec3,yj as torus,w$ as tpmsLattice,I0 as transformCopy,M4 as transforms,k0 as translate,VY as translate2D,SY as translateDrawing,JO as translatePlane,dD as tryCatch,fD as tryCatchAsync,HN as twistExtrude,hD as typeCastError,ZI as undoLast,xD as unsupportedError,V as unwrap,cD as unwrapErr,oD as unwrapOr,sD as unwrapOrElse,BF as updateNode,VP as updateRoles,dk as uvBounds,pk as uvCoordinates,gO as validSolid,X2 as validatePlanetary,W as validationError,TN as variableFillet,TO as vecAdd,LO as vecAngle,AO as vecCross,NO as vecDistance,kO as vecDot,FO as vecEquals,IO as vecIsZero,jO as vecLength,MO as vecLengthSq,OO as vecNegate,PO as vecNormalize,RO as vecProjectToPlane,VO as vecRepr,zO as vecRotate,DO as vecScale,EO as vecSub,Ij as vertex,WZ as vertexFinder,cO as vertexPosition,SP as verticesOfEdge,bP as verticesOfFace,hQ as voxelBoolean,AQ as voxelBooleanField,LQ as voxelBooleanFieldShapes,vQ as voxelBooleanShapes,kQ as voxelField,IQ as voxelFieldFromShape,HF as walkAssembly,tQ as windingNumbers,Aj as wire,BL as wireFinder,jj as wireLoop,xP as wiresOfFace,PT as withKernel,N$ as withKernelDir,M$ as withKernelPnt,j$ as withKernelVec,IT as withQuality,aE as withScope,cE as withScopeResult,lE as withScopeResultAsync,BT as withTier,QE as zipResults};
|
|
@@ -4205,4 +4205,4 @@ No matching component was found for:
|
|
|
4205
4205
|
|
|
4206
4206
|
gl_FragColor = vec4(lineColor, alpha);
|
|
4207
4207
|
}
|
|
4208
|
-
`;function Jy({cellSize:e=10,lineColor:t=`#888898`,lineOpacity:n=.1,fadeStart:r=50,fadeEnd:i=200}){let a=(0,v.useRef)(null),o=i*2.5;return(0,v.useEffect)(()=>()=>{a.current?.dispose()},[]),(0,Q.jsxs)(`mesh`,{rotation:[-Math.PI/2,0,0],position:[0,-.01,0],children:[(0,Q.jsx)(`planeGeometry`,{args:[o,o]}),(0,Q.jsx)(`shaderMaterial`,{ref:a,vertexShader:Ky,fragmentShader:qy,uniforms:{cellSize:{value:e},lineColor:{value:new K(t)},lineOpacity:{value:n},fadeStart:{value:r},fadeEnd:{value:i}},transparent:!0,depthWrite:!1,side:2,polygonOffset:!0,polygonOffsetFactor:1,polygonOffsetUnits:1})]})}function Yy(){return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`hemisphereLight`,{args:[`#ffffff`,`#1a1a2e`,.65]}),(0,Q.jsx)(`directionalLight`,{position:[-50,60,80],intensity:.85,color:`#fff8f0`}),(0,Q.jsx)(`directionalLight`,{position:[40,-40,30],intensity:.15,color:`#e0e8ff`})]})}function Xy({autoRotate:e=!1,target:t,gridVisible:n=!0,gridProps:r,controlsProps:i,controlsRef:a,onControlsStart:o}){let s={...a?{ref:a}:{},...t?{target:t}:{},...o?{onStart:o}:{}};return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(Yy,{}),(0,Q.jsx)(Gy,{}),(0,Q.jsx)(by,{makeDefault:!0,autoRotate:e,autoRotateSpeed:1.5,...s,...i}),n&&(0,Q.jsx)(Jy,{...r})]})}var Zy={iso:new G(.6,.5,.6),front:new G(0,.3,1),top:new G(0,1,-.01),right:new G(1,.3,0)};function Qy({data:e,view:t,fitSignal:n,projection:r,onFirstFrame:i}){let a=S_(e=>e.camera),o=S_(e=>e.invalidate),s=(0,v.useRef)(!1),c=(0,v.useRef)(i);c.current=i;let{center:l,radius:u}=(0,v.useMemo)(()=>{let t=xy(e);t.computeBoundingSphere();let n=t.boundingSphere??new Bi(new G,1),r={center:n.center.clone(),radius:n.radius||1};return t.dispose(),r},[e]);return(0,v.useEffect)(()=>{let e=Zy[t].clone().normalize();a.position.copy(l).addScaledVector(e,u*3),a.near=u/100,a.far=u*100;let n=a;if(n.isOrthographicCamera){let e=Math.min(n.right-n.left,n.top-n.bottom);e>0&&u>0&&(n.zoom=e/(u*2.4))}a.lookAt(l),a.updateProjectionMatrix(),o(),s.current||(s.current=!0,c.current?.())},[a,o,l,u,t,n,r]),null}function $y(){let e=S_(e=>e.camera),t=(0,v.useRef)([e.position.x,e.position.y,e.position.z]);return(0,Q.jsx)(yy,{makeDefault:!0,position:t.current,zoom:20,near:.1,far:2e3})}function eb(){let e=S_(e=>e.gl);return(0,v.useEffect)(()=>(e.localClippingEnabled=!0,()=>{e.localClippingEnabled=!1}),[e]),null}function tb({data:e,view:t=`iso`,fitSignal:n,autoRotate:r=!1,gridVisible:i=!0,projection:a=`perspective`,onFirstFrame:o,onError:s,errorFallback:c,children:l}){return(0,Q.jsx)(Ay,{onError:s,fallback:c,children:(0,Q.jsxs)(Uv,{frameloop:r?`always`:`demand`,gl:{preserveDrawingBuffer:!0},children:[(0,Q.jsx)(eb,{}),a===`orthographic`&&(0,Q.jsx)($y,{}),(0,Q.jsx)(Xy,{autoRotate:r,gridVisible:i}),(0,Q.jsx)(Qy,{data:e,view:t,fitSignal:n,projection:a,onFirstFrame:o}),l]})})}var nb=[`iso`,`front`,`top`,`right`],rb={solid:`Solid`,wireframe:`Wire`,xray:`X-ray`},ib={iso:`Iso`,front:`Front`,top:`Top`,right:`Right`};function ab({viewMode:e,onViewModeChange:t,showEdges:n,onToggleEdges:r,showGrid:i,onToggleGrid:a,autoRotate:o,onToggleAutoRotate:s,projection:c,onToggleProjection:l,activeView:u,onView:d,onFit:f,onScreenshot:p,touch:m=!1,className:h}){return(0,Q.jsxs)(`div`,{className:h,style:h?void 0:{...cb,gap:m?8:6},children:[(f||p)&&(0,Q.jsxs)(ob,{touch:m,children:[f&&(0,Q.jsx)(sb,{label:`Fit`,onClick:f,touch:m}),p&&(0,Q.jsx)(sb,{label:`Snap`,onClick:p,touch:m})]}),e&&t&&(0,Q.jsx)(ob,{touch:m,children:Object.keys(rb).map(n=>(0,Q.jsx)(sb,{label:rb[n],active:e===n,touch:m,onClick:()=>{t(n)}},n))}),(r||a||s||l)&&(0,Q.jsxs)(ob,{touch:m,children:[r&&(0,Q.jsx)(sb,{label:`Edges`,active:n,onClick:r,touch:m}),a&&(0,Q.jsx)(sb,{label:`Grid`,active:i,onClick:a,touch:m}),s&&(0,Q.jsx)(sb,{label:`Spin`,active:o,onClick:s,touch:m}),l&&(0,Q.jsx)(sb,{label:c===`orthographic`?`Ortho`:`Persp`,active:c===`orthographic`,touch:m,onClick:l})]}),d&&(0,Q.jsx)(ob,{touch:m,children:nb.map(e=>(0,Q.jsx)(sb,{label:ib[e],active:u===e,touch:m,onClick:()=>{d(e)}},e))})]})}function ob({children:e,touch:t}){return(0,Q.jsx)(`div`,{style:t?fb:lb,children:e})}function sb({label:e,active:t,onClick:n,touch:r}){return(0,Q.jsx)(`button`,{type:`button`,onClick:n,"aria-pressed":t,style:{...r?pb:ub,...t?db:null},children:e})}var cb={position:`absolute`,top:12,right:12,zIndex:10,display:`flex`,flexDirection:`column`,gap:6,pointerEvents:`none`,fontFamily:`ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif`},lb={display:`flex`,flexDirection:`column`,gap:4,padding:4,borderRadius:8,background:`rgba(26, 29, 33, 0.7)`,backdropFilter:`blur(6px)`,border:`1px solid rgba(255, 255, 255, 0.08)`},ub={cursor:`pointer`,pointerEvents:`auto`,padding:`4px 10px`,borderRadius:5,fontSize:12,fontWeight:500,lineHeight:1.2,color:`#9aa3ad`,background:`rgba(255, 255, 255, 0.04)`,border:`1px solid transparent`,transition:`color 120ms, background 120ms`},db={color:`#6ee7d7`,background:`rgba(45, 212, 191, 0.16)`,borderColor:`rgba(45, 212, 191, 0.3)`},fb={...lb,gap:6,padding:6},pb={...ub,padding:`9px 14px`,fontSize:13,borderRadius:6};function mb({dims:e,volume:t,area:n,triangles:r,valid:i,unit:a,className:o}){let s=a?` ${a}`:``,c=[];return e&&c.push((0,Q.jsx)(hb,{label:`Size`,value:`${gb(e[0])} × ${gb(e[1])} × ${gb(e[2])}${s}`},`size`)),t!==void 0&&c.push((0,Q.jsx)(hb,{label:`Volume`,value:`${gb(t)}${a?` ${a}³`:``}`},`vol`)),n!==void 0&&c.push((0,Q.jsx)(hb,{label:`Area`,value:`${gb(n)}${a?` ${a}²`:``}`},`area`)),r!==void 0&&c.push((0,Q.jsx)(hb,{label:`Triangles`,value:r.toLocaleString()},`tris`)),i!==void 0&&c.push((0,Q.jsx)(hb,{label:`Validity`,value:i?`valid`:`invalid`,valueColor:i?`#6ee7d7`:`#f0a0a0`},`valid`)),c.length===0?null:(0,Q.jsx)(`div`,{className:o,style:o?void 0:_b,children:c})}function hb({label:e,value:t,valueColor:n}){return(0,Q.jsxs)(`div`,{style:vb,children:[(0,Q.jsx)(`span`,{style:yb,children:e}),(0,Q.jsx)(`span`,{style:{...bb,...n?{color:n}:null},children:t})]})}function gb(e){return Number.isFinite(e)?Number.isInteger(e)?e.toLocaleString():Number(e.toFixed(2)).toLocaleString():`—`}var _b={position:`absolute`,left:12,bottom:12,zIndex:10,display:`flex`,flexDirection:`column`,gap:2,padding:`8px 10px`,borderRadius:8,minWidth:150,background:`rgba(26, 29, 33, 0.7)`,backdropFilter:`blur(6px)`,border:`1px solid rgba(255, 255, 255, 0.08)`,fontFamily:`ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif`},vb={display:`flex`,justifyContent:`space-between`,gap:16,fontSize:12,lineHeight:1.5},yb={color:`#7b8591`},bb={color:`#c8cdd3`,fontVariantNumeric:`tabular-nums`},xb={PLANE:`Planar`,CYLINDER:`Cylindrical`,CONE:`Conical`,SPHERE:`Spherical`,TORUS:`Toroidal`,BEZIER_SURFACE:`Bézier`,BSPLINE_SURFACE:`B-spline`,REVOLUTION_SURFACE:`Revolved`,EXTRUSION_SURFACE:`Extruded`,OFFSET_SURFACE:`Offset`,OTHER_SURFACE:`Surface`};function Sb(e){return xb[e]??`Surface`}function Cb(e){return Number.isFinite(e)?Number.isInteger(e)?e.toLocaleString():Number(e.toFixed(2)).toLocaleString():`—`}function wb({face:e,onClear:t,unit:n,className:r}){if(!e)return null;let[i,a,o]=e.normal;return(0,Q.jsxs)(`div`,{className:r,style:r?void 0:Eb,children:[(0,Q.jsxs)(`div`,{style:Db,children:[(0,Q.jsxs)(`span`,{style:Ob,children:[Sb(e.surfaceType),` face`]}),t&&(0,Q.jsx)(`button`,{type:`button`,onClick:t,"aria-label":`Clear selection`,style:kb,children:`✕`})]}),(0,Q.jsx)(Tb,{label:`Area`,value:`${Cb(e.area)}${n?` ${n}²`:``}`}),(0,Q.jsx)(Tb,{label:`Normal`,value:`${Cb(i)}, ${Cb(a)}, ${Cb(o)}`})]})}function Tb({label:e,value:t}){return(0,Q.jsxs)(`div`,{style:Ab,children:[(0,Q.jsx)(`span`,{style:jb,children:e}),(0,Q.jsx)(`span`,{style:Mb,children:t})]})}var Eb={position:`absolute`,left:12,top:12,zIndex:10,display:`flex`,flexDirection:`column`,gap:2,padding:`8px 10px`,borderRadius:8,minWidth:170,background:`rgba(26, 29, 33, 0.7)`,backdropFilter:`blur(6px)`,border:`1px solid rgba(74, 206, 204, 0.3)`,fontFamily:`ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif`},Db={display:`flex`,justifyContent:`space-between`,alignItems:`center`,gap:12,marginBottom:2},Ob={color:`#6ee7d7`,fontSize:12,fontWeight:600},kb={cursor:`pointer`,border:`none`,background:`transparent`,color:`#7b8591`,fontSize:12,lineHeight:1,padding:0},Ab={display:`flex`,justifyContent:`space-between`,gap:16,fontSize:12,lineHeight:1.5},jb={color:`#7b8591`},Mb={color:`#c8cdd3`,fontVariantNumeric:`tabular-nums`},Nb=[`x`,`y`,`z`];function Pb({enabled:e,onToggle:t,axis:n,onAxisChange:r,position:i,min:a,max:o,onPositionChange:s,flip:c,onToggleFlip:l,className:u}){return(0,Q.jsxs)(`div`,{className:u,style:u?void 0:Ib,children:[(0,Q.jsx)(Fb,{label:`Section`,active:e,onClick:t}),e&&(0,Q.jsxs)(Q.Fragment,{children:[Nb.map(e=>(0,Q.jsx)(Fb,{label:e.toUpperCase(),active:n===e,onClick:()=>{r(e)}},e)),(0,Q.jsx)(`input`,{type:`range`,min:a,max:o,step:(o-a)/200||.01,value:i,disabled:a===o,onChange:e=>{s(Number(e.target.value))},"aria-label":`Section position`,style:{...zb,...a===o?{opacity:.4}:null}}),(0,Q.jsx)(Fb,{label:`Flip`,active:c,onClick:l})]})]})}function Fb({label:e,active:t,onClick:n}){return(0,Q.jsx)(`button`,{type:`button`,onClick:n,"aria-pressed":t,style:{...Lb,...t?Rb:null},children:e})}var Ib={position:`absolute`,bottom:12,left:`50%`,transform:`translateX(-50%)`,zIndex:10,display:`flex`,alignItems:`center`,gap:4,padding:4,borderRadius:8,background:`rgba(26, 29, 33, 0.7)`,backdropFilter:`blur(6px)`,border:`1px solid rgba(255, 255, 255, 0.08)`,fontFamily:`ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif`},Lb={cursor:`pointer`,padding:`4px 10px`,borderRadius:5,fontSize:12,fontWeight:500,lineHeight:1.2,color:`#9aa3ad`,background:`rgba(255, 255, 255, 0.04)`,border:`1px solid transparent`},Rb={color:`#6ee7d7`,background:`rgba(45, 212, 191, 0.16)`,borderColor:`rgba(45, 212, 191, 0.3)`},zb={width:160,accentColor:`#4ACECC`,margin:`0 4px`};function Bb(e){let t=new URLSearchParams(e),n=t.get(`file`);return n?{dir:t.get(`dir`),file:n}:null}function Vb(e){let t=e.lastIndexOf(`.`);return t===-1?``:e.slice(t).toLowerCase()}function Hb({inspect:e=!1}={}){let[t,n]=(0,v.useState)({status:`idle`});return(0,v.useEffect)(()=>{let t=Bb(window.location.search);if(!t){n({status:`error`,error:`missing ?file= parameter`});return}if(!t.dir){n({status:`error`,error:`missing ?dir= parameter`});return}n({status:`loading`});let r=new Worker(new URL(``+new URL(`kernelWorker-I47G6iFU.js`,import.meta.url).href,``+import.meta.url),{type:`module`}),i=!1;r.addEventListener(`message`,e=>{i||(e.data.type===`loaded`?n({status:`ready`,data:e.data.meshData,measurements:e.data.measurements}):n({status:`error`,error:e.data.error}))});let a=`/__model/${t.file.split(`/`).map(encodeURIComponent).join(`/`)}?dir=${encodeURIComponent(t.dir)}`;return fetch(a).then(e=>{if(!e.ok)throw Error(`fetch ${t.file}: ${e.status}`);return e.arrayBuffer()}).then(n=>{let i={type:`load`,bytes:n,ext:Vb(t.file),inspect:e};r.postMessage(i,[n])}).catch(e=>{i||n({status:`error`,error:e instanceof Error?e.message:String(e)})}),()=>{i=!0,r.terminate()}},[e]),t}var Ub=[`iso`,`front`,`top`,`right`],Wb=new Set;function Gb(e){return Ub.includes(e)}function Kb(e){return Wb.add(e),()=>Wb.delete(e)}function qb(e){for(let t of Wb)t(e)}function Jb(){globalThis.__ready=!0}function Yb(){let e=globalThis;e.__ready=!1,e.__renderView=e=>{Gb(e)&&qb({view:e})},e.__setScene=e=>{e&&Gb(e.view)&&qb(e)}}function Xb({marks:e}){return(0,Q.jsx)(Q.Fragment,{children:e.map((e,t)=>(0,Q.jsx)(ay,{position:[e.pos[0],e.pos[1],e.pos[2]],center:!0,children:(0,Q.jsx)(`div`,{style:{background:`#ffcc00`,color:`#000`,font:`700 13px monospace`,padding:`1px 5px`,borderRadius:4,border:`1px solid #000`,whiteSpace:`nowrap`,pointerEvents:`none`},children:e.label})},`${e.label}-${t}`))})}var Zb=new URLSearchParams(window.location.search),Qb=Zb.get(`ui`)!==`0`,$b=Zb.get(`dims`)===`1`;function ex(){let e=document.querySelector(`canvas`);if(!e)return;let t=e.toDataURL(`image/png`),n=document.createElement(`a`);n.href=t,n.download=`brepjs-view.png`,n.click()}function tx(){let e=Hb({inspect:Qb}),[t,n]=(0,v.useState)(`iso`),[r,i]=(0,v.useState)(`solid`),[a,o]=(0,v.useState)(!0),[s,c]=(0,v.useState)(!0),[l,u]=(0,v.useState)(!1),[d,f]=(0,v.useState)(`perspective`),[p,m]=(0,v.useState)(0),[h,g]=(0,v.useState)(null),[_,y]=(0,v.useState)(null),[b,x]=(0,v.useState)(!1),[S,C]=(0,v.useState)(`x`),[w,T]=(0,v.useState)(0),[E,D]=(0,v.useState)(!1),[O,k]=(0,v.useState)([]),A=(0,v.useCallback)(()=>{m(e=>e+1)},[]),ee=(0,v.useCallback)(e=>{g(e)},[]),j=(0,v.useCallback)(e=>{y(e?e.faceId:null)},[]),M=(0,v.useMemo)(()=>e.status===`ready`?Sy(e.data):null,[e]);(0,v.useEffect)(()=>Kb(e=>{if(n(e.view),i(e.viewMode??`solid`),e.section&&M){let t=e.section.axis===`x`?0:e.section.axis===`y`?1:2;C(e.section.axis),T(M.min[t]+e.section.frac*(M.max[t]-M.min[t])),x(!0)}else x(!1);k(e.marks??[])}),[M]);let te=S===`x`?0:S===`y`?1:2,N=M?M.min[te]:0,P=M?M.max[te]:1,F=(0,v.useCallback)(e=>{if(!M)return 0;let t=e===`x`?0:e===`y`?1:2;return(M.min[t]+M.max[t])/2},[M]),ne=(0,v.useCallback)(()=>{x(e=>(e||T(F(S)),!e))},[F,S]),re=(0,v.useCallback)(e=>{C(e),T(F(e))},[F]),ie=(0,v.useMemo)(()=>b&&M?[wy(S,w,E)]:void 0,[b,M,S,w,E]);return e.status===`error`?(0,Q.jsxs)(`div`,{style:{color:`#e88`,padding:16,fontFamily:`monospace`},children:[`error: `,e.error]}):e.status===`ready`?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsxs)(tb,{data:e.data,view:t,fitSignal:p,autoRotate:l,gridVisible:s,projection:d,onFirstFrame:Jb,children:[(0,Q.jsx)(ky,{data:e.data,viewMode:r,...ie?{clippingPlanes:ie}:{},...Qb?{onFacePick:ee,onFaceHover:j}:{}}),a&&r!==`wireframe`&&e.data.edges.length>0&&(0,Q.jsx)(Ny,{edges:e.data.edges,...ie?{clippingPlanes:ie}:{}}),Qb&&(0,Q.jsx)(Vy,{data:e.data,selectedFaceIds:h?[h.faceId]:[],hoverFaceId:_}),O.length>0&&(0,Q.jsx)(Xb,{marks:O})]}),Qb&&(0,Q.jsx)(wb,{face:h,onClear:()=>{g(null)}}),Qb&&(0,Q.jsx)(Pb,{enabled:b,onToggle:ne,axis:S,onAxisChange:re,position:w,min:N,max:P,onPositionChange:T,flip:E,onToggleFlip:()=>{D(e=>!e)}}),Qb&&(0,Q.jsx)(mb,{dims:Cy(e.data),volume:e.measurements.volume,area:e.measurements.area,triangles:e.data.index.length/3,valid:e.measurements.valid}),!Qb&&$b&&(0,Q.jsx)(mb,{dims:Cy(e.data)}),Qb&&(0,Q.jsx)(ab,{viewMode:r,onViewModeChange:i,showEdges:a,onToggleEdges:()=>{o(e=>!e)},showGrid:s,onToggleGrid:()=>{c(e=>!e)},autoRotate:l,onToggleAutoRotate:()=>{u(e=>!e)},projection:d,onToggleProjection:()=>{f(e=>e===`perspective`?`orthographic`:`perspective`)},activeView:t,onView:n,onFit:A,onScreenshot:ex})]}):(0,Q.jsx)(`div`,{style:{color:`#9aa`,padding:16,fontFamily:`monospace`},children:`loading model…`})}Yb();var nx=document.getElementById(`root`);nx&&(0,y.createRoot)(nx).render((0,Q.jsx)(v.StrictMode,{children:(0,Q.jsx)(tx,{})}));
|
|
4208
|
+
`;function Jy({cellSize:e=10,lineColor:t=`#888898`,lineOpacity:n=.1,fadeStart:r=50,fadeEnd:i=200}){let a=(0,v.useRef)(null),o=i*2.5;return(0,v.useEffect)(()=>()=>{a.current?.dispose()},[]),(0,Q.jsxs)(`mesh`,{rotation:[-Math.PI/2,0,0],position:[0,-.01,0],children:[(0,Q.jsx)(`planeGeometry`,{args:[o,o]}),(0,Q.jsx)(`shaderMaterial`,{ref:a,vertexShader:Ky,fragmentShader:qy,uniforms:{cellSize:{value:e},lineColor:{value:new K(t)},lineOpacity:{value:n},fadeStart:{value:r},fadeEnd:{value:i}},transparent:!0,depthWrite:!1,side:2,polygonOffset:!0,polygonOffsetFactor:1,polygonOffsetUnits:1})]})}function Yy(){return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`hemisphereLight`,{args:[`#ffffff`,`#1a1a2e`,.65]}),(0,Q.jsx)(`directionalLight`,{position:[-50,60,80],intensity:.85,color:`#fff8f0`}),(0,Q.jsx)(`directionalLight`,{position:[40,-40,30],intensity:.15,color:`#e0e8ff`})]})}function Xy({autoRotate:e=!1,target:t,gridVisible:n=!0,gridProps:r,controlsProps:i,controlsRef:a,onControlsStart:o}){let s={...a?{ref:a}:{},...t?{target:t}:{},...o?{onStart:o}:{}};return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(Yy,{}),(0,Q.jsx)(Gy,{}),(0,Q.jsx)(by,{makeDefault:!0,autoRotate:e,autoRotateSpeed:1.5,...s,...i}),n&&(0,Q.jsx)(Jy,{...r})]})}var Zy={iso:new G(.6,.5,.6),front:new G(0,.3,1),top:new G(0,1,-.01),right:new G(1,.3,0)};function Qy({data:e,view:t,fitSignal:n,projection:r,onFirstFrame:i}){let a=S_(e=>e.camera),o=S_(e=>e.invalidate),s=(0,v.useRef)(!1),c=(0,v.useRef)(i);c.current=i;let{center:l,radius:u}=(0,v.useMemo)(()=>{let t=xy(e);t.computeBoundingSphere();let n=t.boundingSphere??new Bi(new G,1),r={center:n.center.clone(),radius:n.radius||1};return t.dispose(),r},[e]);return(0,v.useEffect)(()=>{let e=Zy[t].clone().normalize();a.position.copy(l).addScaledVector(e,u*3),a.near=u/100,a.far=u*100;let n=a;if(n.isOrthographicCamera){let e=Math.min(n.right-n.left,n.top-n.bottom);e>0&&u>0&&(n.zoom=e/(u*2.4))}a.lookAt(l),a.updateProjectionMatrix(),o(),s.current||(s.current=!0,c.current?.())},[a,o,l,u,t,n,r]),null}function $y(){let e=S_(e=>e.camera),t=(0,v.useRef)([e.position.x,e.position.y,e.position.z]);return(0,Q.jsx)(yy,{makeDefault:!0,position:t.current,zoom:20,near:.1,far:2e3})}function eb(){let e=S_(e=>e.gl);return(0,v.useEffect)(()=>(e.localClippingEnabled=!0,()=>{e.localClippingEnabled=!1}),[e]),null}function tb({data:e,view:t=`iso`,fitSignal:n,autoRotate:r=!1,gridVisible:i=!0,projection:a=`perspective`,onFirstFrame:o,onError:s,errorFallback:c,children:l}){return(0,Q.jsx)(Ay,{onError:s,fallback:c,children:(0,Q.jsxs)(Uv,{frameloop:r?`always`:`demand`,gl:{preserveDrawingBuffer:!0},children:[(0,Q.jsx)(eb,{}),a===`orthographic`&&(0,Q.jsx)($y,{}),(0,Q.jsx)(Xy,{autoRotate:r,gridVisible:i}),(0,Q.jsx)(Qy,{data:e,view:t,fitSignal:n,projection:a,onFirstFrame:o}),l]})})}var nb=[`iso`,`front`,`top`,`right`],rb={solid:`Solid`,wireframe:`Wire`,xray:`X-ray`},ib={iso:`Iso`,front:`Front`,top:`Top`,right:`Right`};function ab({viewMode:e,onViewModeChange:t,showEdges:n,onToggleEdges:r,showGrid:i,onToggleGrid:a,autoRotate:o,onToggleAutoRotate:s,projection:c,onToggleProjection:l,activeView:u,onView:d,onFit:f,onScreenshot:p,touch:m=!1,className:h}){return(0,Q.jsxs)(`div`,{className:h,style:h?void 0:{...cb,gap:m?8:6},children:[(f||p)&&(0,Q.jsxs)(ob,{touch:m,children:[f&&(0,Q.jsx)(sb,{label:`Fit`,onClick:f,touch:m}),p&&(0,Q.jsx)(sb,{label:`Snap`,onClick:p,touch:m})]}),e&&t&&(0,Q.jsx)(ob,{touch:m,children:Object.keys(rb).map(n=>(0,Q.jsx)(sb,{label:rb[n],active:e===n,touch:m,onClick:()=>{t(n)}},n))}),(r||a||s||l)&&(0,Q.jsxs)(ob,{touch:m,children:[r&&(0,Q.jsx)(sb,{label:`Edges`,active:n,onClick:r,touch:m}),a&&(0,Q.jsx)(sb,{label:`Grid`,active:i,onClick:a,touch:m}),s&&(0,Q.jsx)(sb,{label:`Spin`,active:o,onClick:s,touch:m}),l&&(0,Q.jsx)(sb,{label:c===`orthographic`?`Ortho`:`Persp`,active:c===`orthographic`,touch:m,onClick:l})]}),d&&(0,Q.jsx)(ob,{touch:m,children:nb.map(e=>(0,Q.jsx)(sb,{label:ib[e],active:u===e,touch:m,onClick:()=>{d(e)}},e))})]})}function ob({children:e,touch:t}){return(0,Q.jsx)(`div`,{style:t?fb:lb,children:e})}function sb({label:e,active:t,onClick:n,touch:r}){return(0,Q.jsx)(`button`,{type:`button`,onClick:n,"aria-pressed":t,style:{...r?pb:ub,...t?db:null},children:e})}var cb={position:`absolute`,top:12,right:12,zIndex:10,display:`flex`,flexDirection:`column`,gap:6,pointerEvents:`none`,fontFamily:`ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif`},lb={display:`flex`,flexDirection:`column`,gap:4,padding:4,borderRadius:8,background:`rgba(26, 29, 33, 0.7)`,backdropFilter:`blur(6px)`,border:`1px solid rgba(255, 255, 255, 0.08)`},ub={cursor:`pointer`,pointerEvents:`auto`,padding:`4px 10px`,borderRadius:5,fontSize:12,fontWeight:500,lineHeight:1.2,color:`#9aa3ad`,background:`rgba(255, 255, 255, 0.04)`,border:`1px solid transparent`,transition:`color 120ms, background 120ms`},db={color:`#6ee7d7`,background:`rgba(45, 212, 191, 0.16)`,borderColor:`rgba(45, 212, 191, 0.3)`},fb={...lb,gap:6,padding:6},pb={...ub,padding:`9px 14px`,fontSize:13,borderRadius:6};function mb({dims:e,volume:t,area:n,triangles:r,valid:i,unit:a,className:o}){let s=a?` ${a}`:``,c=[];return e&&c.push((0,Q.jsx)(hb,{label:`Size`,value:`${gb(e[0])} × ${gb(e[1])} × ${gb(e[2])}${s}`},`size`)),t!==void 0&&c.push((0,Q.jsx)(hb,{label:`Volume`,value:`${gb(t)}${a?` ${a}³`:``}`},`vol`)),n!==void 0&&c.push((0,Q.jsx)(hb,{label:`Area`,value:`${gb(n)}${a?` ${a}²`:``}`},`area`)),r!==void 0&&c.push((0,Q.jsx)(hb,{label:`Triangles`,value:r.toLocaleString()},`tris`)),i!==void 0&&c.push((0,Q.jsx)(hb,{label:`Validity`,value:i?`valid`:`invalid`,valueColor:i?`#6ee7d7`:`#f0a0a0`},`valid`)),c.length===0?null:(0,Q.jsx)(`div`,{className:o,style:o?void 0:_b,children:c})}function hb({label:e,value:t,valueColor:n}){return(0,Q.jsxs)(`div`,{style:vb,children:[(0,Q.jsx)(`span`,{style:yb,children:e}),(0,Q.jsx)(`span`,{style:{...bb,...n?{color:n}:null},children:t})]})}function gb(e){return Number.isFinite(e)?Number.isInteger(e)?e.toLocaleString():Number(e.toFixed(2)).toLocaleString():`—`}var _b={position:`absolute`,left:12,bottom:12,zIndex:10,display:`flex`,flexDirection:`column`,gap:2,padding:`8px 10px`,borderRadius:8,minWidth:150,background:`rgba(26, 29, 33, 0.7)`,backdropFilter:`blur(6px)`,border:`1px solid rgba(255, 255, 255, 0.08)`,fontFamily:`ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif`},vb={display:`flex`,justifyContent:`space-between`,gap:16,fontSize:12,lineHeight:1.5},yb={color:`#7b8591`},bb={color:`#c8cdd3`,fontVariantNumeric:`tabular-nums`},xb={PLANE:`Planar`,CYLINDER:`Cylindrical`,CONE:`Conical`,SPHERE:`Spherical`,TORUS:`Toroidal`,BEZIER_SURFACE:`Bézier`,BSPLINE_SURFACE:`B-spline`,REVOLUTION_SURFACE:`Revolved`,EXTRUSION_SURFACE:`Extruded`,OFFSET_SURFACE:`Offset`,OTHER_SURFACE:`Surface`};function Sb(e){return xb[e]??`Surface`}function Cb(e){return Number.isFinite(e)?Number.isInteger(e)?e.toLocaleString():Number(e.toFixed(2)).toLocaleString():`—`}function wb({face:e,onClear:t,unit:n,className:r}){if(!e)return null;let[i,a,o]=e.normal;return(0,Q.jsxs)(`div`,{className:r,style:r?void 0:Eb,children:[(0,Q.jsxs)(`div`,{style:Db,children:[(0,Q.jsxs)(`span`,{style:Ob,children:[Sb(e.surfaceType),` face`]}),t&&(0,Q.jsx)(`button`,{type:`button`,onClick:t,"aria-label":`Clear selection`,style:kb,children:`✕`})]}),(0,Q.jsx)(Tb,{label:`Area`,value:`${Cb(e.area)}${n?` ${n}²`:``}`}),(0,Q.jsx)(Tb,{label:`Normal`,value:`${Cb(i)}, ${Cb(a)}, ${Cb(o)}`})]})}function Tb({label:e,value:t}){return(0,Q.jsxs)(`div`,{style:Ab,children:[(0,Q.jsx)(`span`,{style:jb,children:e}),(0,Q.jsx)(`span`,{style:Mb,children:t})]})}var Eb={position:`absolute`,left:12,top:12,zIndex:10,display:`flex`,flexDirection:`column`,gap:2,padding:`8px 10px`,borderRadius:8,minWidth:170,background:`rgba(26, 29, 33, 0.7)`,backdropFilter:`blur(6px)`,border:`1px solid rgba(74, 206, 204, 0.3)`,fontFamily:`ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif`},Db={display:`flex`,justifyContent:`space-between`,alignItems:`center`,gap:12,marginBottom:2},Ob={color:`#6ee7d7`,fontSize:12,fontWeight:600},kb={cursor:`pointer`,border:`none`,background:`transparent`,color:`#7b8591`,fontSize:12,lineHeight:1,padding:0},Ab={display:`flex`,justifyContent:`space-between`,gap:16,fontSize:12,lineHeight:1.5},jb={color:`#7b8591`},Mb={color:`#c8cdd3`,fontVariantNumeric:`tabular-nums`},Nb=[`x`,`y`,`z`];function Pb({enabled:e,onToggle:t,axis:n,onAxisChange:r,position:i,min:a,max:o,onPositionChange:s,flip:c,onToggleFlip:l,className:u}){return(0,Q.jsxs)(`div`,{className:u,style:u?void 0:Ib,children:[(0,Q.jsx)(Fb,{label:`Section`,active:e,onClick:t}),e&&(0,Q.jsxs)(Q.Fragment,{children:[Nb.map(e=>(0,Q.jsx)(Fb,{label:e.toUpperCase(),active:n===e,onClick:()=>{r(e)}},e)),(0,Q.jsx)(`input`,{type:`range`,min:a,max:o,step:(o-a)/200||.01,value:i,disabled:a===o,onChange:e=>{s(Number(e.target.value))},"aria-label":`Section position`,style:{...zb,...a===o?{opacity:.4}:null}}),(0,Q.jsx)(Fb,{label:`Flip`,active:c,onClick:l})]})]})}function Fb({label:e,active:t,onClick:n}){return(0,Q.jsx)(`button`,{type:`button`,onClick:n,"aria-pressed":t,style:{...Lb,...t?Rb:null},children:e})}var Ib={position:`absolute`,bottom:12,left:`50%`,transform:`translateX(-50%)`,zIndex:10,display:`flex`,alignItems:`center`,gap:4,padding:4,borderRadius:8,background:`rgba(26, 29, 33, 0.7)`,backdropFilter:`blur(6px)`,border:`1px solid rgba(255, 255, 255, 0.08)`,fontFamily:`ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif`},Lb={cursor:`pointer`,padding:`4px 10px`,borderRadius:5,fontSize:12,fontWeight:500,lineHeight:1.2,color:`#9aa3ad`,background:`rgba(255, 255, 255, 0.04)`,border:`1px solid transparent`},Rb={color:`#6ee7d7`,background:`rgba(45, 212, 191, 0.16)`,borderColor:`rgba(45, 212, 191, 0.3)`},zb={width:160,accentColor:`#4ACECC`,margin:`0 4px`};function Bb(e){let t=new URLSearchParams(e),n=t.get(`file`);return n?{dir:t.get(`dir`),file:n}:null}function Vb(e){let t=e.lastIndexOf(`.`);return t===-1?``:e.slice(t).toLowerCase()}function Hb({inspect:e=!1}={}){let[t,n]=(0,v.useState)({status:`idle`});return(0,v.useEffect)(()=>{let t=Bb(window.location.search);if(!t){n({status:`error`,error:`missing ?file= parameter`});return}if(!t.dir){n({status:`error`,error:`missing ?dir= parameter`});return}n({status:`loading`});let r=new Worker(new URL(``+new URL(`kernelWorker-TfyT4uug.js`,import.meta.url).href,``+import.meta.url),{type:`module`}),i=!1;r.addEventListener(`message`,e=>{i||(e.data.type===`loaded`?n({status:`ready`,data:e.data.meshData,measurements:e.data.measurements}):n({status:`error`,error:e.data.error}))});let a=`/__model/${t.file.split(`/`).map(encodeURIComponent).join(`/`)}?dir=${encodeURIComponent(t.dir)}`;return fetch(a).then(e=>{if(!e.ok)throw Error(`fetch ${t.file}: ${e.status}`);return e.arrayBuffer()}).then(n=>{let i={type:`load`,bytes:n,ext:Vb(t.file),inspect:e};r.postMessage(i,[n])}).catch(e=>{i||n({status:`error`,error:e instanceof Error?e.message:String(e)})}),()=>{i=!0,r.terminate()}},[e]),t}var Ub=[`iso`,`front`,`top`,`right`],Wb=new Set;function Gb(e){return Ub.includes(e)}function Kb(e){return Wb.add(e),()=>Wb.delete(e)}function qb(e){for(let t of Wb)t(e)}function Jb(){globalThis.__ready=!0}function Yb(){let e=globalThis;e.__ready=!1,e.__renderView=e=>{Gb(e)&&qb({view:e})},e.__setScene=e=>{e&&Gb(e.view)&&qb(e)}}function Xb({marks:e}){return(0,Q.jsx)(Q.Fragment,{children:e.map((e,t)=>(0,Q.jsx)(ay,{position:[e.pos[0],e.pos[1],e.pos[2]],center:!0,children:(0,Q.jsx)(`div`,{style:{background:`#ffcc00`,color:`#000`,font:`700 13px monospace`,padding:`1px 5px`,borderRadius:4,border:`1px solid #000`,whiteSpace:`nowrap`,pointerEvents:`none`},children:e.label})},`${e.label}-${t}`))})}var Zb=new URLSearchParams(window.location.search),Qb=Zb.get(`ui`)!==`0`,$b=Zb.get(`dims`)===`1`;function ex(){let e=document.querySelector(`canvas`);if(!e)return;let t=e.toDataURL(`image/png`),n=document.createElement(`a`);n.href=t,n.download=`brepjs-view.png`,n.click()}function tx(){let e=Hb({inspect:Qb}),[t,n]=(0,v.useState)(`iso`),[r,i]=(0,v.useState)(`solid`),[a,o]=(0,v.useState)(!0),[s,c]=(0,v.useState)(!0),[l,u]=(0,v.useState)(!1),[d,f]=(0,v.useState)(`perspective`),[p,m]=(0,v.useState)(0),[h,g]=(0,v.useState)(null),[_,y]=(0,v.useState)(null),[b,x]=(0,v.useState)(!1),[S,C]=(0,v.useState)(`x`),[w,T]=(0,v.useState)(0),[E,D]=(0,v.useState)(!1),[O,k]=(0,v.useState)([]),A=(0,v.useCallback)(()=>{m(e=>e+1)},[]),ee=(0,v.useCallback)(e=>{g(e)},[]),j=(0,v.useCallback)(e=>{y(e?e.faceId:null)},[]),M=(0,v.useMemo)(()=>e.status===`ready`?Sy(e.data):null,[e]);(0,v.useEffect)(()=>Kb(e=>{if(n(e.view),i(e.viewMode??`solid`),e.section&&M){let t=e.section.axis===`x`?0:e.section.axis===`y`?1:2;C(e.section.axis),T(M.min[t]+e.section.frac*(M.max[t]-M.min[t])),x(!0)}else x(!1);k(e.marks??[])}),[M]);let te=S===`x`?0:S===`y`?1:2,N=M?M.min[te]:0,P=M?M.max[te]:1,F=(0,v.useCallback)(e=>{if(!M)return 0;let t=e===`x`?0:e===`y`?1:2;return(M.min[t]+M.max[t])/2},[M]),ne=(0,v.useCallback)(()=>{x(e=>(e||T(F(S)),!e))},[F,S]),re=(0,v.useCallback)(e=>{C(e),T(F(e))},[F]),ie=(0,v.useMemo)(()=>b&&M?[wy(S,w,E)]:void 0,[b,M,S,w,E]);return e.status===`error`?(0,Q.jsxs)(`div`,{style:{color:`#e88`,padding:16,fontFamily:`monospace`},children:[`error: `,e.error]}):e.status===`ready`?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsxs)(tb,{data:e.data,view:t,fitSignal:p,autoRotate:l,gridVisible:s,projection:d,onFirstFrame:Jb,children:[(0,Q.jsx)(ky,{data:e.data,viewMode:r,...ie?{clippingPlanes:ie}:{},...Qb?{onFacePick:ee,onFaceHover:j}:{}}),a&&r!==`wireframe`&&e.data.edges.length>0&&(0,Q.jsx)(Ny,{edges:e.data.edges,...ie?{clippingPlanes:ie}:{}}),Qb&&(0,Q.jsx)(Vy,{data:e.data,selectedFaceIds:h?[h.faceId]:[],hoverFaceId:_}),O.length>0&&(0,Q.jsx)(Xb,{marks:O})]}),Qb&&(0,Q.jsx)(wb,{face:h,onClear:()=>{g(null)}}),Qb&&(0,Q.jsx)(Pb,{enabled:b,onToggle:ne,axis:S,onAxisChange:re,position:w,min:N,max:P,onPositionChange:T,flip:E,onToggleFlip:()=>{D(e=>!e)}}),Qb&&(0,Q.jsx)(mb,{dims:Cy(e.data),volume:e.measurements.volume,area:e.measurements.area,triangles:e.data.index.length/3,valid:e.measurements.valid}),!Qb&&$b&&(0,Q.jsx)(mb,{dims:Cy(e.data)}),Qb&&(0,Q.jsx)(ab,{viewMode:r,onViewModeChange:i,showEdges:a,onToggleEdges:()=>{o(e=>!e)},showGrid:s,onToggleGrid:()=>{c(e=>!e)},autoRotate:l,onToggleAutoRotate:()=>{u(e=>!e)},projection:d,onToggleProjection:()=>{f(e=>e===`perspective`?`orthographic`:`perspective`)},activeView:t,onView:n,onFit:A,onScreenshot:ex})]}):(0,Q.jsx)(`div`,{style:{color:`#9aa`,padding:16,fontFamily:`monospace`},children:`loading model…`})}Yb();var nx=document.getElementById(`root`);nx&&(0,y.createRoot)(nx).render((0,Q.jsx)(v.StrictMode,{children:(0,Q.jsx)(tx,{})}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
function e(e,t,n={}){let r={position:e.vertices,normal:e.normals,index:e.triangles,edges:t,faceGroups:e.faceGroups.map(e=>({start:e.start,count:e.count,faceId:e.faceId}))};return n.color&&(r.color=n.color),r}function t(e,t){let r={valid:n(()=>e.isValid(t))??!1},i=n(()=>e.measureVolume(t));i&&e.isOk(i)&&typeof i.value==`number`&&i.value>0&&(r.volume=i.value);let a=n(()=>e.measureArea(t));return a&&e.isOk(a)&&typeof a.value==`number`&&a.value>0&&(r.area=a.value),r}function n(e){try{return e()}catch{return}}function r(e,t){switch(t.replace(/^\./,``).toLowerCase()){case`step`:case`stp`:return e.importSTEP;case`stl`:return e.importSTL;case`iges`:case`igs`:return e.importIGES;case`3mf`:return e.importThreeMF;case`glb`:case`gltf`:return e.importGLB;case`obj`:return e.importOBJ;default:throw Error(`unsupported file extension: ${t}`)}}function i(e,t){let n;try{n=e.getFaces(t)}catch(e){return console.warn(`[brepjs-cad] getFaces threw; faces unselectable`,e),[]}let r=[];for(let t of n)try{let n=e.getSurfaceType(t),i=e.isOk(n)&&n.value?n.value:`OTHER_SURFACE`,a=e.measureArea(t),o=e.isOk(a)&&typeof a.value==`number`?a.value:NaN;r.push({faceId:e.getHashCode(t),surfaceType:i,area:o,normal:e.normalAt(t)})}catch(e){console.warn(`[brepjs-cad] face metadata threw; skipping face`,e)}return r}async function a(n,a,o,s=!1){let c=await r(n,o)(a);if(!n.isOk(c)){let e=c.error;throw Error(`import failed: ${typeof e==`string`?e:JSON.stringify(e)}`)}let l=c.value,u=e(n.mesh(l),n.meshEdges(l).lines);return s&&(u.faceInfos=i(n,l)),{meshData:u,measurements:t(n,l)}}function o(e,t){t?self.postMessage(e,t):self.postMessage(e)}let s=null;function c(){return s||=l().catch(e=>{throw s=null,e}),s}async function l(){let e=new URL(`./`,self.location.origin).href,t=await fetch(`${e}wasm/occt-wasm.js`);if(!t.ok)throw Error(`failed to load occt-wasm.js: ${t.status}`);let n=URL.createObjectURL(new Blob([await t.text()],{type:`application/javascript`})),r=await import(n);URL.revokeObjectURL(n);let i=await r.default({locateFile:t=>t.endsWith(`.wasm`)?`${e}wasm/occt-wasm.wasm`:t}),a=await import(`./brepjs-
|
|
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-hbOuqw9u.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)});
|
package/viewer/dist/index.html
CHANGED