@selvajs/compute 3.1.0-beta.4 → 3.1.0-beta.5
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/dist/chunk-54O6BO24.js +4 -0
- package/dist/chunk-54O6BO24.js.map +1 -0
- package/dist/chunk-7KFBCOZM.cjs +2 -0
- package/dist/chunk-7KFBCOZM.cjs.map +1 -0
- package/dist/chunk-EZRBMUXT.cjs +62 -0
- package/dist/chunk-EZRBMUXT.cjs.map +1 -0
- package/dist/chunk-GF6ZIJWX.cjs +4 -0
- package/dist/chunk-GF6ZIJWX.cjs.map +1 -0
- package/dist/chunk-ORGJSKR4.js +62 -0
- package/dist/chunk-ORGJSKR4.js.map +1 -0
- package/dist/chunk-PJATLYMU.js +2 -0
- package/dist/chunk-PJATLYMU.js.map +1 -0
- package/dist/core.cjs +1 -1
- package/dist/core.d.cts +40 -3
- package/dist/core.d.ts +40 -3
- package/dist/core.js +1 -1
- package/dist/grasshopper.cjs +1 -1
- package/dist/grasshopper.cjs.map +1 -1
- package/dist/grasshopper.d.cts +220 -20
- package/dist/grasshopper.d.ts +220 -20
- package/dist/grasshopper.js +1 -1
- package/dist/{handle-files-9pkEgDIp.d.cts → handle-files-DMnx92gr.d.cts} +46 -10
- package/dist/{handle-files-9pkEgDIp.d.ts → handle-files-DMnx92gr.d.ts} +46 -10
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +4 -4
- package/dist/index.d.ts +4 -4
- package/dist/index.js +1 -1
- package/dist/{types-V7G83j5m.d.cts → types-C9YpTbr3.d.cts} +27 -6
- package/dist/{types-V7G83j5m.d.ts → types-C9YpTbr3.d.ts} +27 -6
- package/dist/{types-DxPi5SEx.d.cts → types-Ci8Z0-hF.d.cts} +60 -17
- package/dist/{types-BBSF_ISX.d.ts → types-DuOh5XqS.d.ts} +60 -17
- package/dist/visualization-C3YOGQTW.js +2 -0
- package/dist/visualization-CERJ6XDX.cjs +2 -0
- package/dist/visualization-CERJ6XDX.cjs.map +1 -0
- package/dist/visualization.cjs +1 -1
- package/dist/visualization.d.cts +62 -8
- package/dist/visualization.d.ts +62 -8
- package/dist/visualization.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-33753HSV.cjs +0 -2
- package/dist/chunk-33753HSV.cjs.map +0 -1
- package/dist/chunk-4JNRO7TX.cjs +0 -62
- package/dist/chunk-4JNRO7TX.cjs.map +0 -1
- package/dist/chunk-6V6SUB4V.js +0 -62
- package/dist/chunk-6V6SUB4V.js.map +0 -1
- package/dist/chunk-D7A3YIYD.cjs +0 -4
- package/dist/chunk-D7A3YIYD.cjs.map +0 -1
- package/dist/chunk-EMXDP7KY.js +0 -4
- package/dist/chunk-EMXDP7KY.js.map +0 -1
- package/dist/chunk-MDFVHHH6.js +0 -2
- package/dist/chunk-MDFVHHH6.js.map +0 -1
- package/dist/visualization-3XYZHAIV.js +0 -2
- package/dist/visualization-DEAMRV7R.cjs +0 -2
- package/dist/visualization-DEAMRV7R.cjs.map +0 -1
- /package/dist/{visualization-3XYZHAIV.js.map → visualization-C3YOGQTW.js.map} +0 -0
package/dist/visualization.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import * as THREE from 'three';
|
|
2
2
|
import { OrbitControls } from 'three/addons/controls/OrbitControls.js';
|
|
3
|
-
import { M as MaterialAppearanceOptions, f as GrasshopperComputeResponse, m as MeshExtractionOptions, n as MeshBatchParsingOptions, o as DisplayBatch, p as DisplayItem } from './types-
|
|
4
|
-
export { q as DisplayCurve, r as DisplayIdentity, s as DisplayItemBase, t as DisplayPoint, u as DisplayPosition, v as MeshBatch } from './types-
|
|
3
|
+
import { M as MaterialAppearanceOptions, f as GrasshopperComputeResponse, m as MeshExtractionOptions, n as MeshBatchParsingOptions, o as DisplayBatch, p as DisplayItem } from './types-DuOh5XqS.js';
|
|
4
|
+
export { q as DisplayCurve, r as DisplayIdentity, s as DisplayItemBase, t as DisplayPoint, u as DisplayPosition, v as MeshBatch } from './types-DuOh5XqS.js';
|
|
5
5
|
import { CSS2DObject } from 'three/addons/renderers/CSS2DRenderer.js';
|
|
6
6
|
import { LineSegments2 } from 'three/addons/lines/LineSegments2.js';
|
|
7
7
|
import { RhinoModule } from 'rhino3dm';
|
|
8
|
-
import './types-
|
|
8
|
+
import './types-C9YpTbr3.js';
|
|
9
9
|
|
|
10
10
|
type CameraConfig = {
|
|
11
11
|
position?: THREE.Vector3;
|
|
@@ -210,12 +210,20 @@ interface CameraController {
|
|
|
210
210
|
* singularity.
|
|
211
211
|
*/
|
|
212
212
|
setViewDirection(direction: THREE.Vector3, animate?: boolean): void;
|
|
213
|
+
/**
|
|
214
|
+
* Frame an arbitrary world-space box (e.g. a double-clicked object) from the current view
|
|
215
|
+
* direction, moving the *active* camera — in 2D mode that means resizing the ortho frustum, not
|
|
216
|
+
* just translating. No-op on an empty box.
|
|
217
|
+
*/
|
|
218
|
+
frameBounds(box: THREE.Box3, animate?: boolean): void;
|
|
213
219
|
/** Enable/disable orbit rotation at runtime (pan/zoom unaffected). */
|
|
214
220
|
setRotateEnabled(enabled: boolean): void;
|
|
215
221
|
/** Whether rotation is currently enabled. */
|
|
216
222
|
isRotateEnabled(): boolean;
|
|
217
223
|
/** Keep the orthographic frustum aspect in sync on canvas resize. Called by the resize loop. */
|
|
218
224
|
updateAspect(width: number, height: number): void;
|
|
225
|
+
/** Cancel any in-flight camera tween. Call on viewer teardown so ticks can't touch disposed controls. */
|
|
226
|
+
dispose(): void;
|
|
219
227
|
}
|
|
220
228
|
interface CameraControllerDeps {
|
|
221
229
|
scene: THREE.Scene;
|
|
@@ -282,14 +290,24 @@ declare function createGrid(options?: GridOptions): Grid;
|
|
|
282
290
|
*
|
|
283
291
|
* Caller responsibilities (mirror ViewHelper's own contract):
|
|
284
292
|
* - call {@link ViewGizmo.render} *after* the main scene render each frame (overlay viewport),
|
|
285
|
-
* - call {@link ViewGizmo.update} each frame (no-op now; kept for API symmetry),
|
|
286
293
|
* - forward pointer clicks to {@link ViewGizmo.handleClick}.
|
|
287
294
|
*/
|
|
288
295
|
interface ViewGizmo {
|
|
289
296
|
render(renderer: THREE.WebGLRenderer): void;
|
|
297
|
+
/**
|
|
298
|
+
* @deprecated No-op, kept only for API stability. This wrapper never uses ViewHelper's
|
|
299
|
+
* click→animate path (see module comment) — view changes snap instantly through the camera
|
|
300
|
+
* controller — so there is never a gizmo animation to advance. Safe to stop calling.
|
|
301
|
+
*/
|
|
290
302
|
update(delta: number): void;
|
|
291
303
|
/** Hit-test a click. Returns true if it hit the gizmo (and a view change started). */
|
|
292
304
|
handleClick(event: MouseEvent): boolean;
|
|
305
|
+
/**
|
|
306
|
+
* @deprecated Always `false`, kept only for API stability. Gizmo clicks snap the view
|
|
307
|
+
* instantly rather than animating (deliberately — ViewHelper's built-in animation assumes a
|
|
308
|
+
* Y-up world and rolls the view in this Z-up scene), so there is no animation window to gate
|
|
309
|
+
* input on.
|
|
310
|
+
*/
|
|
293
311
|
readonly isAnimating: boolean;
|
|
294
312
|
/** Show/hide the gizmo at runtime. Hidden = not rendered and not click-hittable. */
|
|
295
313
|
setVisible(visible: boolean): void;
|
|
@@ -392,6 +410,14 @@ interface MeasureDeps {
|
|
|
392
410
|
canvas: HTMLCanvasElement;
|
|
393
411
|
scene: THREE.Scene;
|
|
394
412
|
getActiveCamera: () => THREE.Camera;
|
|
413
|
+
/**
|
|
414
|
+
* The current orbit target (e.g. `controls.target`). Used to scale the line/point pick
|
|
415
|
+
* threshold with the view: the tolerance is a fraction of the camera→target distance, so it
|
|
416
|
+
* stays roughly constant on screen wherever the user has framed the model. Optional for
|
|
417
|
+
* backward compatibility — without it the perspective fallback is the camera's distance to the
|
|
418
|
+
* world origin, which misjudges the threshold for off-origin content. Thread it in when you can.
|
|
419
|
+
*/
|
|
420
|
+
getViewTarget?: () => THREE.Vector3;
|
|
395
421
|
labelLayer: LabelLayer;
|
|
396
422
|
options?: MeasureOptions;
|
|
397
423
|
}
|
|
@@ -500,6 +526,13 @@ declare const PLASTIC_MATERIAL: THREE.MeshPhysicalMaterial;
|
|
|
500
526
|
declare const GLASS_MATERIAL: THREE.MeshPhysicalMaterial;
|
|
501
527
|
declare const RUBBER_MATERIAL: THREE.MeshPhysicalMaterial;
|
|
502
528
|
declare const WOOD_MATERIAL: THREE.MeshPhysicalMaterial;
|
|
529
|
+
/**
|
|
530
|
+
* The module-scope singleton materials above, as a set. Scene-clearing code must NOT dispose a
|
|
531
|
+
* material in this set: they are shared across meshes and across solves, and `dispose()` on a
|
|
532
|
+
* still-referenced material forces a shader program rebuild on its next use (and would free any
|
|
533
|
+
* textures they gain later while other objects still use them).
|
|
534
|
+
*/
|
|
535
|
+
declare const SHARED_MATERIALS: ReadonlySet<THREE.Material>;
|
|
503
536
|
|
|
504
537
|
declare const threeMaterials_CONCRETE_MATERIAL: typeof CONCRETE_MATERIAL;
|
|
505
538
|
declare const threeMaterials_EMISSIVE_MATERIAL: typeof EMISSIVE_MATERIAL;
|
|
@@ -507,9 +540,10 @@ declare const threeMaterials_GLASS_MATERIAL: typeof GLASS_MATERIAL;
|
|
|
507
540
|
declare const threeMaterials_METAL_MATERIAL: typeof METAL_MATERIAL;
|
|
508
541
|
declare const threeMaterials_PLASTIC_MATERIAL: typeof PLASTIC_MATERIAL;
|
|
509
542
|
declare const threeMaterials_RUBBER_MATERIAL: typeof RUBBER_MATERIAL;
|
|
543
|
+
declare const threeMaterials_SHARED_MATERIALS: typeof SHARED_MATERIALS;
|
|
510
544
|
declare const threeMaterials_WOOD_MATERIAL: typeof WOOD_MATERIAL;
|
|
511
545
|
declare namespace threeMaterials {
|
|
512
|
-
export { threeMaterials_CONCRETE_MATERIAL as CONCRETE_MATERIAL, threeMaterials_EMISSIVE_MATERIAL as EMISSIVE_MATERIAL, threeMaterials_GLASS_MATERIAL as GLASS_MATERIAL, threeMaterials_METAL_MATERIAL as METAL_MATERIAL, threeMaterials_PLASTIC_MATERIAL as PLASTIC_MATERIAL, threeMaterials_RUBBER_MATERIAL as RUBBER_MATERIAL, threeMaterials_WOOD_MATERIAL as WOOD_MATERIAL };
|
|
546
|
+
export { threeMaterials_CONCRETE_MATERIAL as CONCRETE_MATERIAL, threeMaterials_EMISSIVE_MATERIAL as EMISSIVE_MATERIAL, threeMaterials_GLASS_MATERIAL as GLASS_MATERIAL, threeMaterials_METAL_MATERIAL as METAL_MATERIAL, threeMaterials_PLASTIC_MATERIAL as PLASTIC_MATERIAL, threeMaterials_RUBBER_MATERIAL as RUBBER_MATERIAL, threeMaterials_SHARED_MATERIALS as SHARED_MATERIALS, threeMaterials_WOOD_MATERIAL as WOOD_MATERIAL };
|
|
513
547
|
}
|
|
514
548
|
|
|
515
549
|
/**
|
|
@@ -588,6 +622,12 @@ interface RenderPipelineOptions {
|
|
|
588
622
|
}
|
|
589
623
|
declare function createRenderPipeline(renderer: THREE.WebGLRenderer, scene: THREE.Scene, camera: THREE.Camera, width: number, height: number, options: RenderPipelineOptions): RenderPipeline;
|
|
590
624
|
|
|
625
|
+
/**
|
|
626
|
+
* Metres per model unit, keyed by Rhino `UnitSystem` name (the `modelunits` string on the compute
|
|
627
|
+
* response). Imperial factors are the exact international definitions (1 in = 0.0254 m,
|
|
628
|
+
* 1 ft = 0.3048 m, 1 mi = 1609.344 m). Units not in this table scale 1 and log a one-time warning
|
|
629
|
+
* — see {@link getScaleFactor}.
|
|
630
|
+
*/
|
|
591
631
|
declare const SCALE_FACTORS: Record<string, number>;
|
|
592
632
|
/**
|
|
593
633
|
* Extracts and processes display meshes from a ComputePointerResponse using the Grasshopper WebDisplay component.
|
|
@@ -595,7 +635,9 @@ declare const SCALE_FACTORS: Record<string, number>;
|
|
|
595
635
|
* This is the primary entry point for extracting mesh geometry from Grasshopper compute responses.
|
|
596
636
|
* It handles all aspects of mesh processing: decompression, coordinate transformation, scaling, and positioning.
|
|
597
637
|
*
|
|
598
|
-
* **Note:**
|
|
638
|
+
* **Note:** The entire pipeline (base64 decode, inflate, dequantization, mesh construction) runs
|
|
639
|
+
* synchronously on the calling thread — large batches will block the UI for their duration. The
|
|
640
|
+
* function is `async` only so its shape can stay stable if parsing moves off-thread later.
|
|
599
641
|
*
|
|
600
642
|
* @param data - The ComputePointerResponse containing Grasshopper output trees.
|
|
601
643
|
* @param options - Configuration for mesh extraction and parsing behavior. All options are optional with sensible defaults.
|
|
@@ -606,7 +648,7 @@ declare const SCALE_FACTORS: Record<string, number>;
|
|
|
606
648
|
* - Only works with the WebDisplay component of GHHeadless.
|
|
607
649
|
* - Requires changes to Rhino.Compute (see https://github.com/TheVessen/compute.rhino3d).
|
|
608
650
|
* - Provides a performant way to display mesh data in Three.js.
|
|
609
|
-
* -
|
|
651
|
+
* - All decoding is synchronous on the main thread; there is no Web Worker offload today.
|
|
610
652
|
* - Supports mesh metadata (names, user data) if provided in the compute response.
|
|
611
653
|
*
|
|
612
654
|
* @internal Internal helper: high-level extraction remains public via visualization module, but this
|
|
@@ -651,9 +693,14 @@ interface ParseTelemetry {
|
|
|
651
693
|
* over the blob. The function stays `async` so callers don't have to change shape if we move
|
|
652
694
|
* parsing into a worker later.
|
|
653
695
|
*
|
|
696
|
+
* A batch with no `compressedData` (genuinely empty/absent geometry) resolves to `[]`. A corrupt,
|
|
697
|
+
* truncated, or unsupported blob throws so callers get a signal instead of a silent empty scene —
|
|
698
|
+
* `getThreeMeshesFromComputeResponse` documents (and now delivers) exactly that rethrow.
|
|
699
|
+
*
|
|
654
700
|
* @param batch - DisplayBatch object
|
|
655
701
|
* @param options - Rendering options
|
|
656
702
|
* @returns Promise resolving to array of Three.js mesh objects
|
|
703
|
+
* @throws {RhinoComputeError} On a corrupt/truncated/unsupported mesh blob or malformed group metadata.
|
|
657
704
|
*/
|
|
658
705
|
declare function parseMeshBatchObject(batch: DisplayBatch, options?: MeshBatchParsingOptions,
|
|
659
706
|
/** @internal Timings threaded from an outer entry point; not a caller option. */
|
|
@@ -669,13 +716,20 @@ telemetry?: ParseTelemetry): Promise<THREE.Mesh[]>;
|
|
|
669
716
|
* @param blob - Raw blob bytes from a binary WebSocket frame.
|
|
670
717
|
* @param options - Rendering options.
|
|
671
718
|
* @returns Promise resolving to array of Three.js mesh objects.
|
|
719
|
+
* @throws {RhinoComputeError} On a corrupt/truncated/unsupported mesh blob or malformed group metadata.
|
|
672
720
|
*/
|
|
673
721
|
declare function parseMeshBatchBlob(blob: ArrayBuffer | Uint8Array, options?: MeshBatchParsingOptions): Promise<THREE.Mesh[]>;
|
|
674
722
|
|
|
675
723
|
interface DisplayItemParseOptions {
|
|
676
724
|
/** rhino3dm instance for decoding curve JSON. Omit to skip curves (points still render). */
|
|
677
725
|
rhino?: RhinoModule;
|
|
678
|
-
/**
|
|
726
|
+
/**
|
|
727
|
+
* No-op. Historically toggled the Rhino Z-up → Three Y-up rotation, but the pipeline now keeps
|
|
728
|
+
* one coordinate frame end to end ({@link rhinoToThree} is the identity), so this flag no longer
|
|
729
|
+
* changes the result. Do NOT pre-rotate your own geometry to compensate — none is applied.
|
|
730
|
+
*
|
|
731
|
+
* @deprecated Retained only so existing call sites compile unchanged; has no effect.
|
|
732
|
+
*/
|
|
679
733
|
applyTransforms?: boolean;
|
|
680
734
|
}
|
|
681
735
|
/**
|
package/dist/visualization.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{J as h,K as c,L as v,M as j,a as e,b as r,c as t,d as o,e as i,f as a,g as s,h as p,i as n,j as l,k as f,l as m,m as y,n as u,o as d,p as x,u as C,v as g}from"./chunk-ORGJSKR4.js";import"./chunk-54O6BO24.js";export{n as EDGE_USERDATA_KIND,e as Materials,v as SCALE_FACTORS,l as addEdges,o as applyOffset,i as computeCombinedBoundingBox,a as createCameraController,s as createGrid,u as createLabelLayer,x as createMeasureTool,y as createRenderPipeline,p as createViewGizmo,j as getThreeMeshesFromComputeResponse,C as initThree,f as isEdgeOverlay,t as parseColor,g as parseDisplayItems,c as parseMeshBatchBlob,h as parseMeshBatchObject,m as removeEdges,d as snapToVertex,r as updateScene};
|
|
2
2
|
//# sourceMappingURL=visualization.js.map
|
package/package.json
CHANGED
package/dist/chunk-33753HSV.cjs
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var _chunkD7A3YIYDcjs = require('./chunk-D7A3YIYD.cjs');function p(t,e){if(!t||typeof t!="object")return;let r=t;if(e in r)return r[e];let n=J(r).get(e.toLowerCase());return n===void 0?void 0:r[n]}function L(t,e){if(!t||typeof t!="object")return!1;let r=t;return e in r?!0:J(r).has(e.toLowerCase())}var H=new WeakMap;function J(t){let e=H.get(t);if(!e){e=new Map;for(let r of Object.keys(t)){let n=r.toLowerCase();e.has(n)||e.set(n,r)}H.set(t,e)}return e}function C(t,e){e||typeof window<"u"&&_chunkD7A3YIYDcjs.e.call(void 0, ).warn(`Warning: ${t} is running on the client side. For better performance and security, consider running this on the server side.`)}var Se="Unable to load grasshopper definition";function Ie(t){return t instanceof _chunkD7A3YIYDcjs.d?t.code===_chunkD7A3YIYDcjs.c.DEFINITION_NOT_CACHED||t.message.includes(Se):!1}function xe(t,e){if(!e)return;let r=p(t,"values");if(!Array.isArray(r)||r.length===0)return;let n=[];for(let a of r){let o=p(a,"innerTree");(!o||Object.keys(o).length===0)&&n.push(_nullishCoalesce(p(a,"paramName"), () => ("<unnamed>")))}if(n.length===0)return;let s=n.length===r.length?"all":`${n.length}/${r.length}`;_chunkD7A3YIYDcjs.e.call(void 0, ).warn(`Solve returned empty output(s) (${s}): ${n.join(", ")}. These parameters produced no data \u2014 check the definition's inputs and the branch feeding each.`)}async function D(t,e,r){r.debug&&C("solveGrasshopperDefinition",_nullishCoalesce(r.suppressBrowserWarning, () => (r.suppressClientSideWarning)));let{response:n}=await O(P(e,t),r);return n}async function Y(t,e,r){return r.debug&&C("solveGrasshopperDefinitionWithCacheKey",_nullishCoalesce(r.suppressBrowserWarning, () => (r.suppressClientSideWarning))),O(P(e,t),r)}async function Q(t,e,r,n){n.debug&&C("solveByCacheKey",_nullishCoalesce(n.suppressBrowserWarning, () => (n.suppressClientSideWarning)));let s={algo:null,pointer:e,values:t};try{return{...await O(s,n),missed:!1}}catch(a){if(!Ie(a))throw a;return{...await O(P(r,t),n),missed:!0}}}async function O(t,e){De(t,e);let r=await _chunkD7A3YIYDcjs.l.call(void 0, "grasshopper",t,e),{pointer:n,algo:s,...a}=r,o=a;return xe(o,e.debug),{response:o,cacheKey:typeof n=="string"?n:null}}function P(t,e){let r={algo:null,pointer:null,values:e};return t instanceof Uint8Array?r.algo=_chunkD7A3YIYDcjs.k.call(void 0, t):/^https?:\/\//i.test(t)?r.pointer=t:_chunkD7A3YIYDcjs.i.call(void 0, t)?r.algo=t:r.algo=_chunkD7A3YIYDcjs.h.call(void 0, t),r}function De(t,e){e.cachesolve!=null&&(t.cachesolve=e.cachesolve),e.cacheerroredsolves!=null&&(t.cacheerroredsolves=e.cacheerroredsolves),e.modelunits!=null&&(t.modelunits=e.modelunits),e.angletolerance!=null&&(t.angletolerance=e.angletolerance),e.absolutetolerance!=null&&(t.absolutetolerance=e.absolutetolerance),e.dataversion!=null&&(t.dataversion=e.dataversion)}function Pe(t){let e=new WeakSet,r=n=>{if(n==null)return JSON.stringify(n);if(typeof n=="number")return Number.isFinite(n)?String(n):JSON.stringify(null);if(typeof n=="string"||typeof n=="boolean")return JSON.stringify(n);if(typeof n=="bigint")return JSON.stringify(n.toString());if(n instanceof Uint8Array){let s=n.length>64?Array.from(n.slice(0,32)).concat(Array.from(n.slice(-32))):Array.from(n);return JSON.stringify({__u8:!0,len:n.length,sample:s})}return Array.isArray(n)?`[${n.map(r).join(",")}]`:typeof n=="object"?e.has(n)?JSON.stringify("[Circular]"):(e.add(n),`{${Object.keys(n).sort().map(o=>`${JSON.stringify(o)}:${r(n[o])}`).join(",")}}`):JSON.stringify(null)};return r(t)}function X(t,e){let r=2166136261;for(let n=0;n<t;n++)r^=e(n),r=r+((r<<1)+(r<<4)+(r<<7)+(r<<8)+(r<<24))>>>0;return r.toString(16).padStart(8,"0")}function Z(t){return X(t.length,e=>t.charCodeAt(e))}function we(t){return X(t.length,e=>t[e])}function ee(t,e){return Z(`${W(t)}|${Pe(e)}`)}function W(t){return typeof t=="string"?`s:${t.length}:${Z(t)}`:`u8:${t.length}:${we(t)}`}var Re=100;function Ee(t){return t instanceof Uint8Array?!0:!/^https?:\/\//i.test(t)}var S=class{constructor(e,r,n={},s){_chunkD7A3YIYDcjs.b.call(void 0, this,"executor");_chunkD7A3YIYDcjs.b.call(void 0, this,"baseConfig");_chunkD7A3YIYDcjs.b.call(void 0, this,"mode");_chunkD7A3YIYDcjs.b.call(void 0, this,"maxConcurrent");_chunkD7A3YIYDcjs.b.call(void 0, this,"timeoutMs");_chunkD7A3YIYDcjs.b.call(void 0, this,"retry");_chunkD7A3YIYDcjs.b.call(void 0, this,"cacheEnabled");_chunkD7A3YIYDcjs.b.call(void 0, this,"cacheMax");_chunkD7A3YIYDcjs.b.call(void 0, this,"cacheTtl");_chunkD7A3YIYDcjs.b.call(void 0, this,"cache",new Map);_chunkD7A3YIYDcjs.b.call(void 0, this,"cacheKeyExecutor");_chunkD7A3YIYDcjs.b.call(void 0, this,"reuseServerDefinitionCache");_chunkD7A3YIYDcjs.b.call(void 0, this,"serverCacheKeys",new Map);_chunkD7A3YIYDcjs.b.call(void 0, this,"onStart");_chunkD7A3YIYDcjs.b.call(void 0, this,"onSettle");_chunkD7A3YIYDcjs.b.call(void 0, this,"onSuperseded");_chunkD7A3YIYDcjs.b.call(void 0, this,"subscribers",new Set);_chunkD7A3YIYDcjs.b.call(void 0, this,"inFlight",new Set);_chunkD7A3YIYDcjs.b.call(void 0, this,"pendingForLatestWins",null);_chunkD7A3YIYDcjs.b.call(void 0, this,"fifoQueue",[]);_chunkD7A3YIYDcjs.b.call(void 0, this,"_lastResult",null);_chunkD7A3YIYDcjs.b.call(void 0, this,"_lastError",null);_chunkD7A3YIYDcjs.b.call(void 0, this,"_lastDurationMs",null);_chunkD7A3YIYDcjs.b.call(void 0, this,"disposed",!1);this.executor=e,this.cacheKeyExecutor=s,this.baseConfig=r,this.mode=_nullishCoalesce(n.mode, () => ("latest-wins")),this.maxConcurrent=Math.max(1,_nullishCoalesce(n.maxConcurrent, () => ((this.mode==="parallel"?4:1)))),this.timeoutMs=n.timeoutMs,this.retry=n.retry;let a=n.cache;this.cacheEnabled=a!==void 0&&a!==!1;let o=typeof a=="object"?a:{};this.cacheMax=_nullishCoalesce(o.maxEntries, () => (50)),this.cacheTtl=_nullishCoalesce(o.ttlMs, () => (0)),this.reuseServerDefinitionCache=!!s&&(_nullishCoalesce(n.reuseServerDefinitionCache, () => (!0))),this.onStart=n.onStart,this.onSettle=n.onSettle,this.onSuperseded=n.onSuperseded}get isSolving(){return this.inFlight.size>0}get hasPending(){return this.pendingForLatestWins!==null||this.fifoQueue.length>0}get inFlightCount(){return this.inFlight.size}get queueDepth(){return this.fifoQueue.length+(this.pendingForLatestWins?1:0)}get lastResult(){return this._lastResult}get lastError(){return this._lastError}get lastDurationMs(){return this._lastDurationMs}subscribe(e){return this.subscribers.add(e),()=>this.subscribers.delete(e)}notify(){for(let e of this.subscribers)try{e()}catch(r){_chunkD7A3YIYDcjs.e.call(void 0, ).error("[SolveScheduler] subscriber threw:",r)}}solve(e,r,n){if(this.disposed)return Promise.reject(new (0, _chunkD7A3YIYDcjs.d)("SolveScheduler has been disposed and cannot be used",_chunkD7A3YIYDcjs.c.INVALID_STATE));let s=ee(e,r),a={key:s,enqueuedAt:Date.now(),startedAt:null};if(this.cacheEnabled){let o=this.readCache(s);if(o){let i={status:"success",response:o,durationMs:0,fromCache:!0};return this._lastResult=o,this._lastError=null,this._lastDurationMs=0,this.runHook(this.onStart,a),this.runHook(this.onSettle,a,i),this.notify(),Promise.resolve(o)}}return new Promise((o,i)=>{let u={definition:e,dataTree:r,ctx:a,resolve:o,reject:i,externalSignal:_optionalChain([n, 'optionalAccess', _2 => _2.signal])};if(_optionalChain([u, 'access', _3 => _3.externalSignal, 'optionalAccess', _4 => _4.aborted])){this.settleError(u,this.makeAbortError(a));return}this.enqueue(u)})}enqueue(e){switch(this.mode){case"latest-wins":{this.pendingForLatestWins&&(this.supersede(this.pendingForLatestWins),this.pendingForLatestWins=null);for(let r of this.inFlight)this.supersede(r),r.controller.abort();this.inFlight.size===0?this.execute(e):this.pendingForLatestWins=e;break}case"queue":case"parallel":{this.inFlight.size<this.maxConcurrent?this.execute(e):this.fifoQueue.push(e);break}}this.notify()}async execute(e){let r=new AbortController,n=e;n.controller=r,this.inFlight.add(n),e.ctx.startedAt=Date.now();let s=()=>r.abort();_optionalChain([e, 'access', _5 => _5.externalSignal, 'optionalAccess', _6 => _6.addEventListener, 'call', _7 => _7("abort",s,{once:!0})]),this.runHook(this.onStart,e.ctx),this.notify();let a=performance.now();try{let o={...this.baseConfig,signal:r.signal,...this.timeoutMs!==void 0&&{timeoutMs:this.timeoutMs},...this.retry!==void 0&&{retry:this.retry}},{response:i,definitionReuploaded:u}=await this.runExecutor(e.definition,e.dataTree,o),c=performance.now()-a;if(this.cacheEnabled&&this.writeCache(e.ctx.key,i),!this.settleSuccess(e,i))return;this._lastResult=i,this._lastError=null,this._lastDurationMs=c,this.runHook(this.onSettle,e.ctx,{status:"success",response:i,durationMs:c,fromCache:!1,definitionReuploaded:u})}catch(o){let i=performance.now()-a,u=this.normalizeExecutionError(o,n);this._lastError=u,this._lastDurationMs=i,this.settleError(e,u)&&this.runHook(this.onSettle,e.ctx,{status:"error",error:u,durationMs:i})}finally{_optionalChain([e, 'access', _8 => _8.externalSignal, 'optionalAccess', _9 => _9.removeEventListener, 'call', _10 => _10("abort",s)]),this.inFlight.delete(n),this.drainNext(),this.notify()}}async runExecutor(e,r,n){if(!this.cacheKeyExecutor||!this.reuseServerDefinitionCache||!Ee(e))return{response:await this.executor(e,r,n)};let s=W(e),a=_nullishCoalesce(this.serverCacheKeys.get(s), () => (null)),o=await this.cacheKeyExecutor(e,r,a,n);if(o.cacheKey)for(this.serverCacheKeys.delete(s),this.serverCacheKeys.set(s,o.cacheKey);this.serverCacheKeys.size>Re;){let i=this.serverCacheKeys.keys().next().value;if(i===void 0)break;this.serverCacheKeys.delete(i)}else this.serverCacheKeys.delete(s);return{response:o.response,definitionReuploaded:o.missed}}drainNext(){if(!this.disposed){if(this.mode==="latest-wins"){if(this.pendingForLatestWins&&this.inFlight.size===0){let e=this.pendingForLatestWins;this.pendingForLatestWins=null,this.execute(e)}return}for(;this.fifoQueue.length>0&&this.inFlight.size<this.maxConcurrent;){let e=this.fifoQueue.shift();this.execute(e)}}}supersede(e){let r=new (0, _chunkD7A3YIYDcjs.d)("Superseded by newer solve",_chunkD7A3YIYDcjs.c.SUPERSEDED,{context:{key:e.ctx.key,enqueuedAt:e.ctx.enqueuedAt}});this.settleError(e,r)&&this.runHook(this.onSuperseded,e.ctx)}makeAbortError(e){return new (0, _chunkD7A3YIYDcjs.d)("Request aborted by caller",_chunkD7A3YIYDcjs.c.ABORTED,{context:{key:e.key,enqueuedAt:e.enqueuedAt}})}settleError(e,r){return e.settled?!1:(e.settled={error:r},e.reject(r),!0)}settleSuccess(e,r){return e.settled?!1:(e.settled={ok:!0},e.resolve(r),!0)}isAbortLikeError(e){if(e instanceof Error){if(e.name==="AbortError")return!0;if(typeof DOMException<"u"&&e instanceof DOMException)return e.name==="AbortError"}return!1}normalizeExecutionError(e,r){return r.settled&&"error"in r.settled?r.settled.error:e instanceof _chunkD7A3YIYDcjs.d?e:this.isAbortLikeError(e)?this.makeAbortError(r.ctx):new (0, _chunkD7A3YIYDcjs.d)(e instanceof Error?e.message:String(e),_chunkD7A3YIYDcjs.c.UNKNOWN_ERROR,{originalError:e instanceof Error?e:new Error(String(e))})}cancelAll(){for(this.pendingForLatestWins&&(this.rejectAsAborted(this.pendingForLatestWins),this.pendingForLatestWins=null);this.fifoQueue.length>0;){let e=this.fifoQueue.shift();this.rejectAsAborted(e)}for(let e of this.inFlight){let r=this.makeAbortError(e.ctx);this.settleError(e,r)&&this.runHook(this.onSettle,e.ctx,{status:"error",error:r,durationMs:e.ctx.startedAt?performance.now()-e.ctx.startedAt:0}),e.controller.abort()}this.notify()}rejectAsAborted(e){this.settleError(e,this.makeAbortError(e.ctx))}readCache(e){if(!this.cacheEnabled)return null;let r=this.cache.get(e);return r?this.cacheTtl>0&&Date.now()-r.insertedAt>this.cacheTtl?(this.cache.delete(e),null):(this.cache.delete(e),this.cache.set(e,r),r.response):null}writeCache(e,r){if(this.cacheEnabled)for(this.cache.set(e,{response:r,insertedAt:Date.now()});this.cache.size>this.cacheMax;){let n=this.cache.keys().next().value;if(n===void 0)break;this.cache.delete(n)}}clearCache(){this.cache.clear()}dispose(){this.disposed||(this.disposed=!0,this.cancelAll(),this.subscribers.clear(),this.cache.clear())}runHook(e,...r){if(e)try{e(...r)}catch(n){_chunkD7A3YIYDcjs.e.call(void 0, ).error("[SolveScheduler] hook threw:",n)}}};var w=class t{constructor(e){_chunkD7A3YIYDcjs.b.call(void 0, this,"config");_chunkD7A3YIYDcjs.b.call(void 0, this,"serverStats");_chunkD7A3YIYDcjs.b.call(void 0, this,"disposed",!1);this.config=this.normalizeComputeConfig(e),this.serverStats=new (0, _chunkD7A3YIYDcjs.n)(this.config.serverUrl,this.config.apiKey)}static async create(e){let r=new t(e),n=Math.max(1,(_nullishCoalesce(_optionalChain([e, 'access', _11 => _11.retry, 'optionalAccess', _12 => _12.attempts]), () => (2)))+1),s=_nullishCoalesce(_optionalChain([e, 'access', _13 => _13.retry, 'optionalAccess', _14 => _14.baseDelayMs]), () => (250)),a=_nullishCoalesce(_optionalChain([e, 'access', _15 => _15.retry, 'optionalAccess', _16 => _16.maxDelayMs]), () => (1e3));for(let o=0;o<n;o++){if(await r.serverStats.isServerOnline())return r;if(o<n-1){let i=Math.min(s*2**o,a);await new Promise(u=>setTimeout(u,i))}}throw await r.dispose(),new (0, _chunkD7A3YIYDcjs.d)("Rhino Compute server is not online",_chunkD7A3YIYDcjs.c.NETWORK_ERROR,{context:{serverUrl:r.config.serverUrl,attempts:n}})}getConfig(){return this.ensureNotDisposed(),{...this.config}}async getIO(e){return this.ensureNotDisposed(),F(e,this.config)}async getRawIO(e){return this.ensureNotDisposed(),R(e,this.config)}async solve(e,r,n){this.ensureNotDisposed();try{if(typeof e=="string"&&!_optionalChain([e, 'optionalAccess', _17 => _17.trim, 'call', _18 => _18()]))throw new (0, _chunkD7A3YIYDcjs.d)("Definition URL/content is required",_chunkD7A3YIYDcjs.c.INVALID_INPUT,{context:{receivedUrl:e}});if(e instanceof Uint8Array&&e.length===0)throw new (0, _chunkD7A3YIYDcjs.d)("Definition content is empty",_chunkD7A3YIYDcjs.c.INVALID_INPUT);let s={...this.config,..._optionalChain([n, 'optionalAccess', _19 => _19.signal])!==void 0&&{signal:n.signal},..._optionalChain([n, 'optionalAccess', _20 => _20.timeoutMs])!==void 0&&{timeoutMs:n.timeoutMs},..._optionalChain([n, 'optionalAccess', _21 => _21.retry])!==void 0&&{retry:n.retry}},a=await D(r,e,s);if(_optionalChain([a, 'optionalAccess', _22 => _22.errors])&&a.errors.length>0)throw new (0, _chunkD7A3YIYDcjs.d)(a.errors.join("; ")||"Computation failed",_chunkD7A3YIYDcjs.c.COMPUTATION_ERROR,{context:{definition:typeof e=="string"&&e.length<200?e:"...content...",inputs:r,errors:a.errors,warnings:a.warnings}});return a}catch(s){throw this.config.debug&&_chunkD7A3YIYDcjs.e.call(void 0, ).error("Compute failed:",s),s instanceof _chunkD7A3YIYDcjs.d?s:new (0, _chunkD7A3YIYDcjs.d)(s instanceof Error?s.message:String(s),_chunkD7A3YIYDcjs.c.COMPUTATION_ERROR,{context:{definition:typeof e=="string"&&e.length<200?e:"...content...",inputs:r},originalError:s instanceof Error?s:new Error(String(s))})}}createScheduler(e){this.ensureNotDisposed();let r=(s,a,o)=>D(a,s,o),n=(s,a,o,i)=>o===null?Y(a,s,i).then(u=>({...u,missed:!1})):Q(a,o,s,i);return new S(r,this.config,e,n)}async dispose(){this.disposed||(this.disposed=!0,await this.serverStats.dispose())}ensureNotDisposed(){if(this.disposed)throw new (0, _chunkD7A3YIYDcjs.d)("GrasshopperClient has been disposed and cannot be used",_chunkD7A3YIYDcjs.c.INVALID_STATE)}normalizeComputeConfig(e){return{...e,serverUrl:_chunkD7A3YIYDcjs.m.call(void 0, e.serverUrl),apiKey:e.apiKey,authToken:e.authToken,debug:_nullishCoalesce(e.debug, () => (!1)),suppressBrowserWarning:_nullishCoalesce(e.suppressBrowserWarning, () => (e.suppressClientSideWarning))}}};var k=new Map;function te(t,e){k.set(t,e)}te("Rhino.Geometry.Point3d",(t,e)=>{let r=e;return!r||typeof r.X!="number"?null:new t.Point([r.X,r.Y,r.Z])});te("Rhino.Geometry.Line",(t,e)=>{let r=e;return!r||!r.From||!r.To?null:new t.Line([r.From.X,r.From.Y,r.From.Z],[r.To.X,r.To.Y,r.To.Z])});function Ae(t){if(k.has(t))return k.get(t);for(let[e,r]of k)if(t.startsWith(e))return r}function ve(t){return!!(t&&typeof t=="object"&&typeof t.data=="string")}function re(t,e,r){let n=Ae(e);if(n)try{return n(r,t)}catch(s){_chunkD7A3YIYDcjs.e.call(void 0, ).warn(`Failed to decode Rhino type ${e}:`,s)}try{if(ve(t))return r.CommonObject.decode(t)}catch(s){return _chunkD7A3YIYDcjs.e.call(void 0, ).warn(`Failed to decode ${e} with CommonObject:`,s),{__decodeError:!0,type:e,raw:t}}return t}var I={STRING:"System.String",INT:"System.Int32",DOUBLE:"System.Double",BOOL:"System.Boolean"},Ne="Rhino.Geometry.",Oe=["WebDisplay"],Fe="FileData";function ne(t){return Oe.some(e=>t.includes(e))}function se(t){if(typeof t!="string")return t;let e=t.trim();if(!(e.startsWith("{")||e.startsWith("[")||e.startsWith('"')))return t;try{let n=JSON.parse(e);if(typeof n=="string")try{return JSON.parse(n)}catch (e2){return n}return n}catch (e3){return t}}function ke(t,e,r){switch(e){case I.STRING:return typeof t!="string"?t:t.replace(/^"(.*)"$/,"$1");case I.INT:return Number.parseInt(t,10);case I.DOUBLE:return Number.parseFloat(t);case I.BOOL:return String(t).toLowerCase()==="true";default:return r&&e.startsWith(Ne)?re(t,e,r):t}}function oe(t,e,r,n){if(typeof t!="string")return t;let s=r?se(t):t;return ke(s,e,n)}function Ge(t){if(!t||typeof t!="object")return!1;let e=t;return typeof e.fileName=="string"&&typeof e.fileType=="string"&&"data"in e&&typeof e.isBase64Encoded=="boolean"&&typeof e.subFolder=="string"}function G(t,e){for(let r of Object.values(t))if(Array.isArray(r))for(let n of r)e(n)}function ae(t,e=!1,r={}){let{parseValues:n=!0,rhino:s,stringOnly:a=!1}=r,o={},i=new Set;for(let u of t.values)G(u.InnerTree,c=>{if(ne(c.type)||a&&c.type!==I.STRING)return;let m=e?c.id:u.ParamName;if(!m)return;let y=oe(c.data,c.type,n,s);m in o?i.has(m)?o[m].push(y):(o[m]=[o[m],y],i.add(m)):o[m]=y});return{values:o}}function ie(t){let e=[];for(let r of t.values)G(r.InnerTree,n=>{if(!n.type.includes(Fe))return;let s=se(n.data);Ge(s)&&e.push(s)});return e}function ue(t,e,r={}){let{parseValues:n=!0,rhino:s,stringOnly:a=!1}=r,o;if("byName"in e?o=t.values.find(u=>u.ParamName===e.byName):o=t.values.find(u=>{let c=!1;return G(u.InnerTree,m=>{m.id===e.byId&&(c=!0)}),c}),!o)return;let i=[];if(G(o.InnerTree,u=>{if("byId"in e&&u.id!==e.byId||ne(u.type)||a&&u.type!==I.STRING)return;let c=oe(u.data,u.type,n,s);i.push(c)}),i.length!==0)return i.length===1?i[0]:i}var E=class{constructor(e,r=!1){this.response=e;this.debug=r}getValues(e=!1,r={}){return ae(this.response,e,r)}getValue(e,r){return ue(this.response,e,r)}async extractMeshesFromResponse(e){let r={debug:this.debug,...e},n;try{({getThreeMeshesFromComputeResponse:n}=await Promise.resolve().then(() => _interopRequireWildcard(require("./visualization-DEAMRV7R.cjs"))))}catch(s){throw new (0, _chunkD7A3YIYDcjs.d)("Failed to load three.js visualization module. Ensure three.js is installed as a peer dependency.",_chunkD7A3YIYDcjs.c.INVALID_STATE,{context:{originalError:s instanceof Error?s.message:String(s)}})}return n(this.response,r)}getFileData(){return ie(this.response)}async getAndDownloadFiles(e,r){let n=this.getFileData();await _chunkD7A3YIYDcjs.r.call(void 0, n,e,r)}};function pe(t){return p(t,"data")}function Me(t){return p(t,"type")}function le(t){if(typeof t.default!="object"||t.default===null)return{schema:t};if(!L(t.default,"innerTree")){let n=`Input "${_nullishCoalesce(t.name, () => ("unknown"))}" default had an unrecognized shape (no innerTree key); the default was dropped.`;return _chunkD7A3YIYDcjs.e.call(void 0, ).warn("Unexpected structure in input.default:",t.default),{schema:{...t,default:null},warning:{code:"MALFORMED_DEFAULT",message:n}}}let e=_nullishCoalesce(p(t.default,"innerTree"), () => ({}));if(Object.keys(e).length===0)return{schema:{...t,default:void 0}};if(t.treeAccess||t.atMost&&t.atMost>1){let n={};for(let[s,a]of Object.entries(e)){if(!Array.isArray(a)){let o=`Input "${_nullishCoalesce(t.name, () => ("unknown"))}" default had a non-array innerTree branch ("${s}"); the default was dropped.`;return _chunkD7A3YIYDcjs.e.call(void 0, ).warn("Unexpected structure in input.default innerTree:",t.default),{schema:{...t,default:null},warning:{code:"MALFORMED_DEFAULT",message:o}}}n[s]=a.map(o=>{let i=pe(o),u=Me(o);if(typeof i=="string"){if(u==="System.Double"||u==="System.Int32"){let c=Number(i);return Number.isNaN(c)?i:c}if(u==="System.Boolean")return i.toLowerCase()==="true";if(_optionalChain([u, 'optionalAccess', _23 => _23.startsWith, 'call', _24 => _24("Rhino.Geometry")]))try{return JSON.parse(i)}catch (e4){return i}}return i})}return{schema:{...t,default:n}}}let r=[];for(let n of Object.values(e))Array.isArray(n)&&n.forEach(s=>{s&&typeof s=="object"&&L(s,"data")&&r.push(pe(s))});return r.length===0?{schema:{...t,default:void 0}}:r.length===1?{schema:{...t,default:r[0]}}:{schema:{...t,default:r}}}var B=/^\{(\d+(?:;\d+)*)?\}$/;function A(t){if(typeof t!="object"||t===null||Array.isArray(t))return!1;let e=Object.entries(t);return e.length>0&&e.every(([r,n])=>B.test(r)&&Array.isArray(n))}function x(t,e,r){if(t==null)return t;if(Array.isArray(t)){let s=t.map(e).filter(a=>a!==null);return s.length>0?s:void 0}let n=e(t);return n!==null?n:r?void 0:t}var Ve=t=>{if(typeof t=="number")return t;if(typeof t=="string"){let e=t.trim();if(e==="")return null;let r=Number(e);return Number.isNaN(r)?null:r}return null},Le=t=>{if(typeof t=="boolean")return t;if(typeof t=="string"){let e=t.toLowerCase();if(e==="true")return!0;if(e==="false")return!1;throw new Error(`Invalid boolean string: "${t}"`)}return null},We=t=>typeof t=="string"?t.length>=2&&t.startsWith('"')&&t.endsWith('"')?t.slice(1,-1):t.startsWith('"')?t.slice(1):t:null,Be=t=>{if(typeof t=="string"){let e=t.trim();return e.startsWith('"')&&e.endsWith('"')&&(e=e.slice(1,-1).trim()),e}return null};function fe(t){return e=>{if(typeof e=="object"&&e!==null)return e;if(typeof e=="string"&&e.trim()!=="")try{let r=JSON.parse(e);return typeof r=="object"&&r!==null?r:(_chunkD7A3YIYDcjs.e.call(void 0, ).warn(`Parsed value for input ${t} is not an object`),null)}catch(r){return _chunkD7A3YIYDcjs.e.call(void 0, ).warn(`Failed to parse object value "${e}" for input ${t}`,r),null}return null}}function ce(t,e,r){let n=Number(t.toFixed(e));return Math.abs(t-n)<r?n:t}function je(t,e){if(!Number.isFinite(t)||t===0)return .1;let r=Math.abs(t);if(r>=1){let g=String(t).split(".")[1];if(g&&g.length>0){let b=Math.min(g.length,12),T=Math.pow(10,-b),U=Number(T.toFixed(b));return Math.abs(U-T)<e?U:T}return 1}let n=String(t),s=n.toLowerCase().match(/e(-?\d+)/);if(s){let y=Number(s[1]);if(y<0||n.toLowerCase().includes("e-")){let g=Math.abs(y),b=Math.pow(10,-g),T=Number(b.toFixed(g));return Math.abs(T-b)<e?T:b}return .1}let a=12,i=r.toFixed(a).replace(/0+$/,""),u=Math.min((i.split(".")[1]||"").length,a);if(u===0)return .1;let c=Math.pow(10,-u),m=Number(c.toFixed(u));return Math.abs(m-c)<e?m:c}function Ue(t,e=1e-8){let r=t.paramType==="Integer";if(A(t.default))return{default:t.default,stepSize:r?1:.1};let n=x(t.default,Ve,!0);if(r)return Array.isArray(n)?n=n.map(m=>typeof m=="number"?Math.round(m):m):typeof n=="number"&&(n=Math.round(n)),{default:n,stepSize:1};let s=Array.isArray(n)?n[0]:n,a;typeof s=="number"&&Number.isFinite(s)&&s!==0?a=s:typeof t.minimum=="number"&&Number.isFinite(t.minimum)&&t.minimum!==0?a=t.minimum:typeof t.maximum=="number"&&Number.isFinite(t.maximum)&&t.maximum!==0&&(a=t.maximum);let o=a!==void 0?je(a,e):.1,i=0,u=String(o),c=u.toLowerCase().match(/e(-?\d+)/);if(c?i=Math.abs(Number(c[1])):i=_nullishCoalesce(_optionalChain([u, 'access', _25 => _25.split, 'call', _26 => _26("."), 'access', _27 => _27[1], 'optionalAccess', _28 => _28.length]), () => (0)),i===0&&typeof s=="number"&&s!==0&&Math.abs(s)<1){let m=Math.ceil(-Math.log10(Math.abs(s)));Number.isFinite(m)&&m>0&&(i=m)}return i=Math.min(Math.max(i,0),12),Array.isArray(n)?n=n.map(m=>typeof m=="number"?ce(m,i,e):m):typeof n=="number"&&(n=ce(n,i,e)),{default:n,stepSize:o}}var Ke={types:["Number","Integer"],parse(t,e){let{default:r,stepSize:n}=Ue(t);return{...e,paramType:t.paramType,minimum:t.minimum,maximum:t.maximum,atLeast:t.atLeast,atMost:t.atMost,stepSize:n,default:r}},fallback(t,e){let r=(_nullishCoalesce(t.atMost, () => (1)))>1;return{...e,paramType:t.paramType,minimum:t.minimum,maximum:t.maximum,atLeast:t.atLeast,atMost:t.atMost,default:r?[0]:0}}},ze={types:["Boolean"],parse(t,e){let r;try{r=x(t.default,Le,!1)}catch(n){throw n instanceof Error?new (0, _chunkD7A3YIYDcjs.d)(n.message):n}return{...e,paramType:"Boolean",default:r}},fallback(t,e){let r=(_nullishCoalesce(t.atMost, () => (1)))>1;return{...e,paramType:"Boolean",default:r?[!1]:!1}}},$e={types:["Text"],parse(t,e){let r=x(t.default,We,!1);return{...e,paramType:"Text",default:r}},fallback(t,e){let r=(_nullishCoalesce(t.atMost, () => (1)))>1;return{...e,paramType:"Text",default:r?[""]:""}}},_e={types:["ValueList"],parse(t,e){if(!t.values||typeof t.values!="object"||Object.keys(t.values).length===0)throw _chunkD7A3YIYDcjs.d.missingValues(t.nickname||"unnamed","ValueList");if(t.default!==void 0&&t.default!==null){let r=String(t.default).toLowerCase();Object.keys(t.values).some(s=>s.toLowerCase()===r)||_chunkD7A3YIYDcjs.e.call(void 0, ).warn(`ValueList input "${t.nickname||"unnamed"}" default value "${t.default}" is not in available values`)}return{...e,paramType:"ValueList",values:t.values,default:t.default}},fallback(t,e){let r=(_nullishCoalesce(t.atMost, () => (1)))>1;return{...e,paramType:"ValueList",values:_nullishCoalesce(t.values, () => ({})),default:r?[t.default]:t.default}}},me={types:["Geometry"],parse(t,e){let r=x(t.default,fe(t.nickname||"unnamed"),!0);return{...e,paramType:"Geometry",default:r}},fallback(t,e){let r=(_nullishCoalesce(t.atMost, () => (1)))>1;return{...e,paramType:"Geometry",default:r?[null]:null}}},qe={types:["File"],parse(t,e){let r=x(t.default,fe(t.nickname||"unnamed"),!0);return{...e,paramType:"File",acceptedFormats:t.acceptedFormats,default:r}},fallback(t,e){let r=(_nullishCoalesce(t.atMost, () => (1)))>1;return{...e,paramType:"File",default:r?[null]:null}}},He={types:["Color"],parse(t,e){let r=x(t.default,Be,!1);return{...e,paramType:"Color",default:r}},fallback(t,e){let r=(_nullishCoalesce(t.atMost, () => (1)))>1;return{...e,paramType:"Color",default:r?["0, 0, 0"]:"0, 0, 0"}}},Je=[Ke,ze,$e,_e,me,qe,He],j=new Map(Je.flatMap(t=>t.types.map(e=>[e,t]))),de=me;var Ye=new Map([...j.keys()].map(t=>[t.toLowerCase(),t]));function Qe(t){return _nullishCoalesce(Ye.get(_optionalChain([t, 'optionalAccess', _29 => _29.toLowerCase, 'call', _30 => _30()])), () => (t))}function he(t){return ye(t).input}function ye(t){let e={description:t.description,name:t.name,nickname:t.nickname,treeAccess:t.treeAccess,groupName:_nullishCoalesce(t.groupName, () => ("")),id:t.id},r=Qe(t.paramType),n={...t,paramType:r},s;try{let{schema:o,warning:i}=le(n);n=o,s=i&&{inputName:t.name||"unknown",paramType:r,message:i.message,code:i.code}}catch(o){n={...n,default:null},s={inputName:t.name||"unknown",paramType:r,message:`Input "${_nullishCoalesce(t.name, () => ("unknown"))}" default could not be normalized and was dropped: ${o instanceof Error?o.message:String(o)}`,code:"MALFORMED_DEFAULT"}}let a=j.get(r);try{if(!a)throw _chunkD7A3YIYDcjs.d.unknownParamType(r,t.name);return{input:a.parse(n,e),error:s}}catch(o){if(o instanceof _chunkD7A3YIYDcjs.d)return _chunkD7A3YIYDcjs.e.call(void 0, ).error(`Validation error for input ${t.name||"unknown"}:`,o.message),{input:(_nullishCoalesce(a, () => (de))).fallback(n,e),error:{inputName:t.name||"unknown",paramType:r,message:o.message,code:o.code}};throw new (0, _chunkD7A3YIYDcjs.d)(o instanceof Error?o.message:String(o),"VALIDATION_ERROR",{context:{paramName:t.name,paramType:r},originalError:o instanceof Error?o:new Error(String(o))})}}function ge(t){return M(t).inputs}function M(t){let e=[],r=[];for(let n of t){let{input:s,error:a}=ye(n);e.push(s),a&&r.push(a)}return{inputs:e,parseErrors:r}}function be(t){return{id:p(t,"id"),name:p(t,"name"),nickname:_nullishCoalesce(p(t,"nickname"), () => (null)),description:p(t,"description"),paramType:p(t,"paramType"),treeAccess:p(t,"treeAccess"),minimum:_nullishCoalesce(p(t,"minimum"), () => (null)),maximum:_nullishCoalesce(p(t,"maximum"), () => (null)),atLeast:p(t,"atLeast"),atMost:p(t,"atMost"),stepSize:p(t,"stepSize"),default:p(t,"default"),values:p(t,"values"),acceptedFormats:p(t,"acceptedFormats"),groupName:_nullishCoalesce(p(t,"groupName"), () => (""))}}function Te(t){return{name:p(t,"name"),nickname:_nullishCoalesce(p(t,"nickname"), () => (null)),paramType:p(t,"paramType"),id:p(t,"id")}}async function R(t,e){let r=P(t,[]),n={};if(r.algo&&(n.algo=r.algo),r.pointer&&(n.pointer=r.pointer),!n.algo&&!n.pointer)throw new (0, _chunkD7A3YIYDcjs.d)("Definition must resolve to either a URL pointer or base64 algo",_chunkD7A3YIYDcjs.c.INVALID_INPUT,{context:{definition:t}});let s=await _chunkD7A3YIYDcjs.l.call(void 0, "io",n,e);if(!s||typeof s!="object")throw new (0, _chunkD7A3YIYDcjs.d)("Invalid IO response structure",_chunkD7A3YIYDcjs.c.INVALID_INPUT,{context:{response:s,definition:t}});let a=Ce(p(s,"warnings")),o=Ce(p(s,"errors")),i=p(s,"inputs"),u=p(s,"outputs");return{inputs:Array.isArray(i)?i.map(be):[],outputs:Array.isArray(u)?u.map(Te):[],...a&&{loadWarnings:a},...o&&{loadErrors:o}}}function Ce(t){if(!Array.isArray(t))return;let e=t.filter(r=>typeof r=="string"&&r.trim().length>0);return e.length>0?e:void 0}async function F(t,e){C("fetchParsedDefinitionIO",_nullishCoalesce(e.suppressBrowserWarning, () => (e.suppressClientSideWarning)));let{inputs:r,outputs:n,loadWarnings:s,loadErrors:a}=await R(t,e),{inputs:o,parseErrors:i}=M(r);return{inputs:o,outputs:n,...i.length>0&&{parseErrors:i},...s&&{loadWarnings:s},...a&&{loadErrors:a}}}var V=class t{constructor(e){_chunkD7A3YIYDcjs.b.call(void 0, this,"innerTree");_chunkD7A3YIYDcjs.b.call(void 0, this,"paramName");this.paramName=e,this.innerTree={}}append(e,r){let n=t.formatPathString(e);this.innerTree[n]||(this.innerTree[n]=[]);let s=r.map(a=>({data:t.serializeValue(a)}));return this.innerTree[n].push(...s),this}appendSingle(e,r){return this.append(e,[r])}fromDataTreeDefault(e){this.innerTree={};for(let[r,n]of Object.entries(e)){if(!Array.isArray(n))continue;let s=t.parsePathString(r);this.append(s,n)}return this}appendFlat(e){let r=Array.isArray(e)?e:[e];return this.append([0],r)}flatten(){let e=[];for(let r of Object.values(this.innerTree))if(Array.isArray(r))for(let n of r)e.push(t.deserializeValue(n.data));return e}getPaths(){return Object.keys(this.innerTree)}getPath(e){let r=t.formatPathString(e),n=this.innerTree[r];if(n)return n.map(s=>t.deserializeValue(s.data))}toComputeFormat(){return{ParamName:this.paramName,InnerTree:this.innerTree}}getInnerTree(){return this.innerTree}getParamName(){return this.paramName}static fromInputParams(e){return e.filter(r=>t.hasValidValue(r.default)).map(r=>{let n=new t(r.nickname||"unnamed"),s=r.default;if(r.treeAccess&&A(s))n.fromDataTreeDefault(s),t.isNumericInput(r)&&n.applyNumericConstraints(r.minimum,r.maximum,r.nickname||"unnamed");else{let a=Array.isArray(s)?s:[s],o=t.processValues(a,r);n.appendFlat(o)}return n.toComputeFormat()})}static fromInputParam(e){return t.hasValidValue(e.default)?t.fromInputParams([e])[0]:void 0}static replaceTreeValue(e,r,n){let s=e.length>0&&e[0]instanceof t,a=t.buildFromValue(r,n);if(s){let c=e,m=c.findIndex(y=>y.getParamName()===r);return m!==-1?c[m]=a:c.push(a),c}let o=e,i=a.toComputeFormat(),u=o.findIndex(c=>c.ParamName===r);return u!==-1?o[u]=i:o.push(i),o}static buildFromValue(e,r){let n=new t(e);return A(r)?n.fromDataTreeDefault(r):n.appendFlat(r),n}static getTreeValue(e,r){let s=e.length>0&&e[0]instanceof t?t.readFromBuilders(e,r):t.readFromDataTrees(e,r);return s===null||s.length===0?null:s.length===1?s[0]:s}static readFromBuilders(e,r){let n=e.find(s=>s.getParamName()===r);return n?n.flatten():null}static readFromDataTrees(e,r){let n=e.find(o=>o.ParamName===r);if(!_optionalChain([n, 'optionalAccess', _31 => _31.InnerTree]))return null;let s=Object.keys(n.InnerTree)[0];if(!s)return null;let a=n.InnerTree[s];return Array.isArray(a)?a.map(o=>_optionalChain([o, 'optionalAccess', _32 => _32.data])!==void 0?t.deserializeValue(o.data):null).filter(o=>o!==null):_optionalChain([a, 'optionalAccess', _33 => _33.data])!==void 0?[t.deserializeValue(a.data)]:a!==void 0?[a]:null}static parsePathString(e){let r=e.match(B);return r?r[1]?r[1].split(";").map(Number):[]:(_chunkD7A3YIYDcjs.e.call(void 0, ).warn(`Invalid TreeBuilder path format: ${e}, using [0]`),[0])}static formatPathString(e){return`{${e.join(";")}}`}applyNumericConstraints(e,r,n){for(let s of Object.values(this.innerTree))if(Array.isArray(s))for(let a of s){let o=t.deserializeValue(a.data);if(typeof o=="number"){let i=t.clampValue(o,e,r,n);a.data=t.serializeValue(i)}}}static serializeValue(e){return typeof e=="boolean"||typeof e=="number"||typeof e=="string"?e:typeof e=="object"&&e!==null?JSON.stringify(e):String(e)}static deserializeValue(e){if(typeof e=="boolean"||typeof e=="number"||typeof e!="string")return e;if(e.startsWith("{")||e.startsWith("["))try{return JSON.parse(e)}catch (e5){return e}return e.trim()!==""&&!isNaN(Number(e))?Number(e):e==="true"?!0:e==="false"?!1:e}static hasValidValue(e){return e==null?!1:typeof e=="string"?!0:!(Array.isArray(e)&&e.length===0||typeof e=="object"&&!Array.isArray(e)&&Object.keys(e).length===0)}static isNumericInput(e){return e.paramType==="Number"||e.paramType==="Integer"}static processValues(e,r){return e.map(n=>t.isNumericInput(r)&&typeof n=="number"?t.clampValue(n,r.minimum,r.maximum,r.nickname||"unnamed"):n).filter(n=>n!=null)}static clampValue(e,r,n,s){let a=e;return r!=null&&a<r&&(_chunkD7A3YIYDcjs.e.call(void 0, ).warn(`${s}: ${e} below min ${r}, clamping`),a=r),n!=null&&a>n&&(_chunkD7A3YIYDcjs.e.call(void 0, ).warn(`${s}: ${e} above max ${n}, clamping`),a=n),a}};exports.a = D; exports.b = S; exports.c = w; exports.d = E; exports.e = he; exports.f = ge; exports.g = R; exports.h = F; exports.i = V;
|
|
2
|
-
//# sourceMappingURL=chunk-33753HSV.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/selva-compute/selva-compute/dist/chunk-33753HSV.cjs","../src/core/utils/read-field.ts","../src/core/utils/warnings.ts","../src/features/grasshopper/solve.ts"],"names":["readField","obj","name","record","key","lowerKeyMap","hasField","lowerKeyCache","map","lower","warnIfClientSide","functionName","suppress","getLogger","DEFINITION_LOAD_FAILED","isDefinitionLoadMiss","error","RhinoComputeError","ErrorCodes","warnOnEmptyInnerTrees","response","debug","values","empty","param","innerTree","scope"],"mappings":"AAAA,2/BAA8G,SCyB9FA,CAAAA,CAAuBC,CAAAA,CAAcC,CAAAA,CAA6B,CACjF,EAAA,CAAI,CAACD,CAAAA,EAAO,OAAOA,CAAAA,EAAQ,QAAA,CAAU,MAAA,CAErC,IAAME,CAAAA,CAASF,CAAAA,CACf,EAAA,CAAIC,EAAAA,GAAQC,CAAAA,CAAQ,OAAOA,CAAAA,CAAOD,CAAI,CAAA,CAEtC,IAAME,CAAAA,CAAMC,CAAAA,CAAYF,CAAM,CAAA,CAAE,GAAA,CAAID,CAAAA,CAAK,WAAA,CAAY,CAAC,CAAA,CACtD,OAAOE,CAAAA,GAAQ,KAAA,CAAA,CAAY,KAAA,CAAA,CAAaD,CAAAA,CAAOC,CAAG,CACnD,CAOO,SAASE,CAAAA,CAASL,CAAAA,CAAcC,CAAAA,CAAuB,CAC7D,EAAA,CAAI,CAACD,CAAAA,EAAO,OAAOA,CAAAA,EAAQ,QAAA,CAAU,MAAO,CAAA,CAAA,CAC5C,IAAME,CAAAA,CAASF,CAAAA,CACf,OAAIC,EAAAA,GAAQC,CAAAA,CAAe,CAAA,CAAA,CACpBE,CAAAA,CAAYF,CAAM,CAAA,CAAE,GAAA,CAAID,CAAAA,CAAK,WAAA,CAAY,CAAC,CAClD,CASA,IAAMK,CAAAA,CAAgB,IAAI,OAAA,CAE1B,SAASF,CAAAA,CAAYF,CAAAA,CAAsD,CAC1E,IAAIK,CAAAA,CAAMD,CAAAA,CAAc,GAAA,CAAIJ,CAAM,CAAA,CAClC,EAAA,CAAI,CAACK,CAAAA,CAAK,CACTA,CAAAA,CAAM,IAAI,GAAA,CACV,GAAA,CAAA,IAAWJ,EAAAA,GAAO,MAAA,CAAO,IAAA,CAAKD,CAAM,CAAA,CAAG,CACtC,IAAMM,CAAAA,CAAQL,CAAAA,CAAI,WAAA,CAAY,CAAA,CACzBI,CAAAA,CAAI,GAAA,CAAIC,CAAK,CAAA,EAAGD,CAAAA,CAAI,GAAA,CAAIC,CAAAA,CAAOL,CAAG,CACxC,CACAG,CAAAA,CAAc,GAAA,CAAIJ,CAAAA,CAAQK,CAAG,CAC9B,CACA,OAAOA,CACR,CCjEO,SAASE,CAAAA,CAAiBC,CAAAA,CAAsBC,CAAAA,CAA0B,CAC5EA,CAAAA,EAIA,OAAO,MAAA,CAAW,GAAA,EACrBC,iCAAAA,CAAU,CAAE,IAAA,CACX,CAAA,SAAA,EAAYF,CAAY,CAAA,8GAAA,CACzB,CAEF,CCeA,IAAMG,EAAAA,CAAyB,uCAAA,CAG/B,SAASC,EAAAA,CAAqBC,CAAAA,CAAyB,CACtD,OAAMA,EAAAA,WAAiBC,mBAAAA,CAEtBD,CAAAA,CAAM,IAAA,GAASE,mBAAAA,CAAW,qBAAA,EAC1BF,CAAAA,CAAM,OAAA,CAAQ,QAAA,CAASF,EAAsB,CAAA,CAHI,CAAA,CAKnD,CAeO,SAASK,EAAAA,CAAsBC,CAAAA,CAAsCC,CAAAA,CAAuB,CAClG,EAAA,CAAI,CAACA,CAAAA,CAAO,MAAA,CAEZ,IAAMC,CAAAA,CAAStB,CAAAA,CAAqBoB,CAAAA,CAAU,QAAQ,CAAA,CACtD,EAAA,CAAI,CAAC,KAAA,CAAM,OAAA,CAAQE,CAAM,CAAA,EAAKA,CAAAA,CAAO,MAAA,GAAW,CAAA,CAAG,MAAA,CAEnD,IAAMC,CAAAA,CAAkB,CAAC,CAAA,CACzB,GAAA,CAAA,IAAWC,EAAAA,GAASF,CAAAA,CAAQ,CAC3B,IAAMG,CAAAA,CAAYzB,CAAAA,CAAmCwB,CAAAA,CAAO,WAAW,CAAA,CAAA,CAEnE,CAACC,CAAAA,EAAa,MAAA,CAAO,IAAA,CAAKA,CAAS,CAAA,CAAE,MAAA,GAAW,CAAA,CAAA,EACnDF,CAAAA,CAAM,IAAA,kBAAKvB,CAAAA,CAAkBwB,CAAAA,CAAO,WAAW,CAAA,SAAK,aAAW,CAEjE,CAEA,EAAA,CAAID,CAAAA,CAAM,MAAA,GAAW,CAAA,CAAG,MAAA,CAExB,IAAMG,CAAAA,CAAQH,CAAAA,CAAM,MAAA,GAAWD,CAAAA,CAAO,MAAA,CAAS,KAAA,CAAQ,CAAA,EAAA","file":"/home/runner/work/selva-compute/selva-compute/dist/chunk-33753HSV.cjs","sourcesContent":[null,"/**\n * Case-insensitive single-key reader for wire payloads.\n *\n * The Rhino Compute family serializes the same logical field with different\n * casing depending on the server branch:\n *\n * - mcneel 8.x / 9.x: the IO schema is PascalCase (`ParamType`, `Default`,\n * `InnerTree`, …) because those C# classes carry no `[JsonProperty]`.\n * - VektorNode Compute8: the IO schema is camelCase (`paramType`, `default`,\n * …) because the fork added `[JsonProperty(\"camelCase\")]`, BUT the nested\n * `default` DataTree wrapper stays PascalCase (`ParamName` / `InnerTree`)\n * since `Resthopper.IO.DataTree` is an external type the fork can't attribute.\n *\n * So a single response can mix casings, and which casing a given field uses\n * depends on the server branch. Rather than deep-camelCasing the whole payload\n * (the old `camelcaseKeys` approach — which corrupted user-authored value-list\n * label keys and item `data` JSON), read the specific fields we care about\n * case-insensitively and leave everything else verbatim.\n *\n * Prefers an exact-case match when present, then falls back to the first\n * case-insensitive match. Returns `undefined` when no key matches.\n *\n * @param obj - The source object (any non-object input yields `undefined`).\n * @param name - The logical field name, in any casing.\n */\nexport function readField<T = unknown>(obj: unknown, name: string): T | undefined {\n\tif (!obj || typeof obj !== 'object') return undefined;\n\n\tconst record = obj as Record<string, unknown>;\n\tif (name in record) return record[name] as T;\n\n\tconst key = lowerKeyMap(record).get(name.toLowerCase());\n\treturn key === undefined ? undefined : (record[key] as T);\n}\n\n/**\n * True when `obj` has a key matching `name` (case-insensitively). Distinguishes\n * \"field present but value is null/undefined\" from \"field absent\" — needed where\n * presence itself carries meaning (e.g. an `innerTree` that exists but is empty).\n */\nexport function hasField(obj: unknown, name: string): boolean {\n\tif (!obj || typeof obj !== 'object') return false;\n\tconst record = obj as Record<string, unknown>;\n\tif (name in record) return true;\n\treturn lowerKeyMap(record).has(name.toLowerCase());\n}\n\n/**\n * Per-object cache of `lowercased key → actual key`, so reading N fields off\n * the same payload object costs one `Object.keys` scan instead of N. Keyed by\n * object identity (WeakMap), which assumes payloads are immutable wire data —\n * keys added to an object after its first read are not seen. First matching\n * key wins, preserving the original linear-scan order.\n */\nconst lowerKeyCache = new WeakMap<object, Map<string, string>>();\n\nfunction lowerKeyMap(record: Record<string, unknown>): Map<string, string> {\n\tlet map = lowerKeyCache.get(record);\n\tif (!map) {\n\t\tmap = new Map();\n\t\tfor (const key of Object.keys(record)) {\n\t\t\tconst lower = key.toLowerCase();\n\t\t\tif (!map.has(lower)) map.set(lower, key);\n\t\t}\n\t\tlowerKeyCache.set(record, map);\n\t}\n\treturn map;\n}\n","import { getLogger } from './logger';\n\nexport function warnIfClientSide(functionName: string, suppress?: boolean): void {\n\tif (suppress) {\n\t\treturn;\n\t}\n\n\tif (typeof window !== 'undefined') {\n\t\tgetLogger().warn(\n\t\t\t`Warning: ${functionName} is running on the client side. For better performance and security, consider running this on the server side.`\n\t\t);\n\t}\n}\n","import { fetchRhinoCompute, RhinoComputeError, ErrorCodes } from '@/core';\nimport { base64ByteArray, encodeStringToBase64, isBase64 } from '@/core/utils/encoding';\nimport { getLogger } from '@/core/utils/logger';\nimport { readField } from '@/core/utils/read-field';\nimport { warnIfClientSide } from '@/core/utils/warnings';\n\nimport {\n\tGrasshopperRequestSchema,\n\tGrasshopperComputeConfig,\n\tGrasshopperComputeResponse,\n\tDataTree\n} from './types';\n\n/**\n * The exact message the server throws when it can neither resolve a `pointer`\n * nor a base64 `algo` to a definition (ResthopperEndpoints.cs). This is the\n * signal that a cache-key pointer missed the server's definition cache (GC'd, or\n * a different child in the pool), so the caller should retry with the full\n * definition. Matched as a substring because the server wraps it with a category\n * prefix in its exception handler.\n *\n * NOTE: the server only includes this message when running in debug mode; its\n * production exception handler scrubs the message to a generic string. The\n * reliable signal is therefore {@link ErrorCodes.DEFINITION_NOT_CACHED}, derived\n * from the server's machine `code` (which isn't scrubbed). The string match is\n * kept as a fallback for debug-mode servers and forks that don't yet emit a code.\n */\nconst DEFINITION_LOAD_FAILED = 'Unable to load grasshopper definition';\n\n/** Does this error look like a server-side definition-load miss? */\nfunction isDefinitionLoadMiss(error: unknown): boolean {\n\tif (!(error instanceof RhinoComputeError)) return false;\n\treturn (\n\t\terror.code === ErrorCodes.DEFINITION_NOT_CACHED ||\n\t\terror.message.includes(DEFINITION_LOAD_FAILED)\n\t);\n}\n\n/**\n * Debug aid: a solve can return successfully yet hand back outputs whose\n * `InnerTree` is empty (`{}`), meaning that parameter produced nothing — often a\n * sign the definition didn't actually compute (wrong/missing inputs, a guarded\n * branch). The names tell you exactly which output was empty so you can trace it\n * back to the responsible branch.\n *\n * Only logs when `debug` is set: an empty output can be legitimate, so this is a\n * diagnostic, never a hard failure. Reads `ParamName` / `InnerTree`\n * case-insensitively to stay robust across server-branch casing.\n *\n * @internal Exported for testing.\n */\nexport function warnOnEmptyInnerTrees(response: GrasshopperComputeResponse, debug?: boolean): void {\n\tif (!debug) return;\n\n\tconst values = readField<unknown[]>(response, 'values');\n\tif (!Array.isArray(values) || values.length === 0) return;\n\n\tconst empty: string[] = [];\n\tfor (const param of values) {\n\t\tconst innerTree = readField<Record<string, unknown>>(param, 'innerTree');\n\t\t// Treat a missing or empty innerTree as \"produced nothing\".\n\t\tif (!innerTree || Object.keys(innerTree).length === 0) {\n\t\t\tempty.push(readField<string>(param, 'paramName') ?? '<unnamed>');\n\t\t}\n\t}\n\n\tif (empty.length === 0) return;\n\n\tconst scope = empty.length === values.length ? 'all' : `${empty.length}/${values.length}`;\n\tgetLogger().warn(\n\t\t`Solve returned empty output(s) (${scope}): ${empty.join(', ')}. ` +\n\t\t\t`These parameters produced no data — check the definition's inputs and the branch feeding each.`\n\t);\n}\n\n/**\n * Result of a solve that also reports the definition's server-side cache key.\n *\n * `cacheKey` is the `md5_…` identifier the server assigned to the (base64)\n * definition — stable for identical content. A caller that holds it can solve\n * the same definition again by reference (`pointer: cacheKey`) instead of\n * re-uploading the full base64, which matters a lot for large (multi-MB)\n * definitions on a live UI. `null` when the server didn't return one (e.g. a\n * URL-pointer solve).\n */\nexport interface SolveWithCacheKey {\n\tresponse: GrasshopperComputeResponse;\n\tcacheKey: string | null;\n}\n\n/**\n * Runs a Rhino Compute job using the provided tree prototypes and Grasshopper definition.\n *\n * @public Use this for direct compute control. For high-level API, use `GrasshopperClient.solve()`.\n *\n * @param dataTree - An array of `DataTree` objects representing the input data for the compute job.\n * @param definition - The Grasshopper definition, which can be:\n * - A URL string (e.g., 'https://example.com/definition.gh')\n * - A base64-encoded string of the .gh file\n * - A plain string (will be base64-encoded)\n * - A Uint8Array of the .gh file (will be base64-encoded)\n * @param config - Compute configuration (server URL, API key, etc. along with optional timeout, units, etc.)\n * @returns An object containing the compute result and extracted file data.\n *\n * @example\n * // Using a URL\n * await solveGrasshopperDefinition(trees, 'https://example.com/definition.gh', config);\n *\n * // Using a base64 string\n * await solveGrasshopperDefinition(trees, 'UEsDBBQAAAAIAL...', config);\n *\n * // Using binary data\n * const fileData = new Uint8Array([...]);\n * await solveGrasshopperDefinition(trees, fileData, config);\n */\nexport async function solveGrasshopperDefinition(\n\tdataTree: DataTree[],\n\tdefinition: string | Uint8Array,\n\tconfig: GrasshopperComputeConfig\n): Promise<GrasshopperComputeResponse> {\n\tif (config.debug) {\n\t\twarnIfClientSide(\n\t\t\t'solveGrasshopperDefinition',\n\t\t\tconfig.suppressBrowserWarning ?? config.suppressClientSideWarning\n\t\t);\n\t}\n\n\tconst { response } = await runSolve(prepareGrasshopperArgs(definition, dataTree), config);\n\treturn response;\n}\n\n/**\n * Solve while reporting the server's definition cache key.\n *\n * Behaves like {@link solveGrasshopperDefinition} but returns the `cacheKey` the\n * server assigned, so a caller (e.g. the scheduler) can later solve the same\n * definition by reference instead of re-uploading it. The cache key is only\n * meaningful for base64/binary definitions; a URL-pointer solve returns the URL.\n *\n * @internal\n */\nexport async function solveGrasshopperDefinitionWithCacheKey(\n\tdataTree: DataTree[],\n\tdefinition: string | Uint8Array,\n\tconfig: GrasshopperComputeConfig\n): Promise<SolveWithCacheKey> {\n\tif (config.debug) {\n\t\twarnIfClientSide(\n\t\t\t'solveGrasshopperDefinitionWithCacheKey',\n\t\t\tconfig.suppressBrowserWarning ?? config.suppressClientSideWarning\n\t\t);\n\t}\n\n\treturn runSolve(prepareGrasshopperArgs(definition, dataTree), config);\n}\n\n/**\n * Solve a definition by its server-side cache key (`pointer: cacheKey`),\n * skipping the (potentially multi-MB) base64 upload. If the key has been evicted\n * from the server's definition cache — `DEFINITION_LOAD_FAILED` — transparently\n * retry once with the full `definition` and report the fresh cache key so the\n * caller can update its mapping.\n *\n * @returns The solve result plus the (possibly refreshed) cache key, and whether\n * the fast path missed (so callers can record the new key / track hit rate).\n * @internal\n */\nexport async function solveByCacheKey(\n\tdataTree: DataTree[],\n\tcacheKey: string,\n\tdefinition: string | Uint8Array,\n\tconfig: GrasshopperComputeConfig\n): Promise<SolveWithCacheKey & { missed: boolean }> {\n\tif (config.debug) {\n\t\twarnIfClientSide(\n\t\t\t'solveByCacheKey',\n\t\t\tconfig.suppressBrowserWarning ?? config.suppressClientSideWarning\n\t\t);\n\t}\n\n\tconst pointerArgs: GrasshopperRequestSchema = { algo: null, pointer: cacheKey, values: dataTree };\n\n\ttry {\n\t\tconst fast = await runSolve(pointerArgs, config);\n\t\treturn { ...fast, missed: false };\n\t} catch (error) {\n\t\tif (!isDefinitionLoadMiss(error)) throw error;\n\t\t// Cache miss — fall back to the full upload and capture the fresh key.\n\t\tconst full = await runSolve(prepareGrasshopperArgs(definition, dataTree), config);\n\t\treturn { ...full, missed: true };\n\t}\n}\n\n/**\n * Shared solve body: apply optional settings, POST, and split the server's\n * `pointer` (its cache key) off the response. `algo` — the request's full\n * base64 definition echoed back on every solve — is stripped too: keeping it\n * pins a multi-MB copy per response, multiplied by every cache holding\n * responses (the scheduler's LRU alone up to `maxEntries` times). Stripping via\n * shallow copy rather than `delete` keeps any already-observed response object\n * unmutated.\n */\nasync function runSolve(\n\targs: GrasshopperRequestSchema,\n\tconfig: GrasshopperComputeConfig\n): Promise<SolveWithCacheKey> {\n\tapplyOptionalComputeSettings(args, config);\n\n\tconst result = await fetchRhinoCompute<GrasshopperComputeResponse>('grasshopper', args, config);\n\n\tconst {\n\t\tpointer,\n\t\talgo: _algo,\n\t\t...rest\n\t} = result as GrasshopperComputeResponse & { pointer?: unknown; algo?: unknown };\n\tconst response = rest as GrasshopperComputeResponse;\n\twarnOnEmptyInnerTrees(response, config.debug);\n\treturn {\n\t\tresponse,\n\t\tcacheKey: typeof pointer === 'string' ? pointer : null\n\t};\n}\n\n// ============================================================================\n// Grasshopper Arguments\n// ============================================================================\n\n/**\n * Prepares Grasshopper arguments from a definition and data tree.\n * Automatically detects the definition format and converts it appropriately.\n *\n * @param definition - Can be a URL, base64 string, plain string, or Uint8Array\n * @param dataTree - Array of DataTree objects for compute inputs\n * @internal\n */\nexport function prepareGrasshopperArgs(\n\tdefinition: string | Uint8Array,\n\tdataTree: DataTree[]\n): GrasshopperRequestSchema {\n\tconst args: GrasshopperRequestSchema = {\n\t\talgo: null,\n\t\tpointer: null,\n\t\tvalues: dataTree\n\t};\n\n\tif (definition instanceof Uint8Array) {\n\t\t// Binary data → convert to base64\n\t\targs.algo = base64ByteArray(definition);\n\t} else if (/^https?:\\/\\//i.test(definition)) {\n\t\t// URL → use as pointer reference\n\t\targs.pointer = definition;\n\t} else if (isBase64(definition)) {\n\t\t// Already base64 → use as-is\n\t\targs.algo = definition;\n\t} else {\n\t\t// Plain string → encode to base64\n\t\targs.algo = encodeStringToBase64(definition);\n\t}\n\n\treturn args;\n}\n\n/**\n * @internal\n */\nexport function applyOptionalComputeSettings(\n\targlist: GrasshopperRequestSchema,\n\toptions: GrasshopperComputeConfig\n): void {\n\tif (options.cachesolve != null) arglist.cachesolve = options.cachesolve;\n\tif (options.cacheerroredsolves != null) arglist.cacheerroredsolves = options.cacheerroredsolves;\n\tif (options.modelunits != null) arglist.modelunits = options.modelunits;\n\tif (options.angletolerance != null) arglist.angletolerance = options.angletolerance;\n\tif (options.absolutetolerance != null) arglist.absolutetolerance = options.absolutetolerance;\n\tif (options.dataversion != null) arglist.dataversion = options.dataversion;\n}\n"]}
|
package/dist/chunk-4JNRO7TX.cjs
DELETED
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var _chunkD7A3YIYDcjs = require('./chunk-D7A3YIYD.cjs');var _three = require('three'); var k = _interopRequireWildcard(_three); var j = _interopRequireWildcard(_three); var z = _interopRequireWildcard(_three); var N = _interopRequireWildcard(_three); var K = _interopRequireWildcard(_three); var Ae = _interopRequireWildcard(_three); var D = _interopRequireWildcard(_three); var ae = _interopRequireWildcard(_three); var E = _interopRequireWildcard(_three); var P = _interopRequireWildcard(_three); var W = _interopRequireWildcard(_three); var B = _interopRequireWildcard(_three);var Y={HUGE_THRESHOLD:1e4,LARGE_THRESHOLD:1e3,SCALE_RATIO_THRESHOLD:100,NEAR_PLANE_FACTOR:{TINY:1e-4,SMALL:.001,NORMAL:.01},FAR_PLANE_FACTOR:{HUGE:100,LARGE:50,NORMAL:20},INITIAL_DISTANCE_MULTIPLIER:4};function sn(e,n,t,r,o){if(Qe(e),n.length===0)return;n.forEach(d=>{e.add(d)});let a=Q(n),i=a.getCenter(new k.Vector3),s=a.getSize(new k.Vector3),l=Math.max(s.x,s.y,s.z);if(l/Math.min(s.x||1,s.y||1,s.z||1)>Y.SCALE_RATIO_THRESHOLD||l>Y.HUGE_THRESHOLD?(t.near=l*Y.NEAR_PLANE_FACTOR.TINY,t.far=l*Y.FAR_PLANE_FACTOR.HUGE):l>Y.LARGE_THRESHOLD?(t.near=l*Y.NEAR_PLANE_FACTOR.SMALL,t.far=l*Y.FAR_PLANE_FACTOR.LARGE):(t.near=Math.max(.01,l*Y.NEAR_PLANE_FACTOR.NORMAL),t.far=Math.max(2e3,l*Y.FAR_PLANE_FACTOR.NORMAL)),t.updateProjectionMatrix(),o)r.minDistance=t.near*2,r.maxDistance=t.far*.9;else{let d=l*Y.INITIAL_DISTANCE_MULTIPLIER;t.position.set(i.x+d*.8,i.y+d,i.z+d*1.2),r.target.copy(i),r.minDistance=t.near*2,r.maxDistance=t.far*.9,r.update()}}function Re(e){if(!e||typeof e!="string")return _chunkD7A3YIYDcjs.e.call(void 0, ).warn(`Invalid color input: ${e}, using white`),new k.Color(16777215);let n=e.trim();if(/^#?[0-9A-Fa-f]{6}$/.test(n))try{let t=n.startsWith("#")?n:`#${n}`;return new k.Color(t)}catch (e2){return _chunkD7A3YIYDcjs.e.call(void 0, ).warn(`Invalid hex color: ${e}, using white`),new k.Color(16777215)}if(n.includes(",")){let t=n.split(",").map(r=>parseInt(r.trim(),10));if(t.length===3&&t.every(r=>!isNaN(r)&&r>=0&&r<=255))return new k.Color(t[0]/255,t[1]/255,t[2]/255)}try{return new k.Color(n.toLowerCase())}catch (e3){return _chunkD7A3YIYDcjs.e.call(void 0, ).warn(`Invalid color string: ${e}, using white`),new k.Color(16777215)}}function Te(e,n,t="z"){e.forEach(r=>{r.position[t]-=n})}function Q(e){let n=new k.Box3;return e.length===0||e.forEach(t=>{t.updateMatrixWorld(!0);let r=new k.Box3().setFromObject(t);n.union(r)}),n}var Ke=new Set(["floor","grid","label-layer"]);function Qe(e){[...e.children].forEach(t=>{Ke.has(t.userData.id)||t.userData.source!=="user"&&(t.traverse(r=>{let o=r;if(!o.geometry&&!o.material)return;_optionalChain([o, 'access', _2 => _2.geometry, 'optionalAccess', _3 => _3.dispose, 'call', _4 => _4()]);let a=o.material;if(!a)return;(Array.isArray(a)?a:[a]).forEach(s=>{for(let l of Object.values(s))l instanceof k.Texture&&l.dispose();s.dispose()})}),t.removeFromParent())})}function et(e){let n=e.clone().normalize(),t=new j.Vector3(0,0,1),r=new j.Vector3(0,1,0),o=Math.abs(n.dot(t))>.9?r:t,a=new j.Vector3().crossVectors(n,o).normalize(),i=new j.Vector3().crossVectors(a,n).normalize();return{top:n.clone(),bottom:n.clone().negate(),front:i.clone(),back:i.clone().negate(),right:a.clone(),left:a.clone().negate(),iso:i.clone().multiplyScalar(1.2).add(a.clone()).add(n.clone()).normalize()}}function we(e){let{scene:n,perspective:t,controls:r,onActiveCameraChange:o}=e,a=(_nullishCoalesce(e.up, () => (t.up))).clone().normalize(),i=et(a),s=new j.OrthographicCamera(-1,1,1,-1,t.near,t.far);s.up.copy(a);let l="perspective",c=t.aspect,d=()=>l==="perspective"?t:s,u=()=>{let p=t.position.distanceTo(r.target)*Math.tan(t.fov*Math.PI/360),M=p*c;s.left=-M,s.right=M,s.top=p,s.bottom=-p,s.near=t.near,s.far=t.far,s.updateProjectionMatrix()},m=h=>{h!==l&&(h==="orthographic"?(s.position.copy(t.position),s.up.copy(t.up),s.lookAt(r.target),u()):t.position.copy(s.position),l=h,r.object=d(),r.update(),o(d()))},f=(h,p=!0)=>{let M=nt(n),w=M.isEmpty()?r.target.clone():M.getCenter(new j.Vector3),L=M.isEmpty()?new j.Vector3(1,1,1):M.getSize(new j.Vector3),b=Math.max(L.x,L.y,L.z)||1,T=t.fov*(Math.PI/180),C=b/(2*Math.tan(T/2))*1.5,I=ot(h,a),S=w.clone().add(I.clone().multiplyScalar(C)),V=d();p?it(V,r,S,w,()=>{l==="orthographic"&&u()}):(V.position.copy(S),r.target.copy(w),l==="orthographic"&&u(),r.update())};return{getActiveCamera:d,getProjection:()=>l,setProjection:m,toggleProjection:()=>(m(l==="perspective"?"orthographic":"perspective"),l),setView:(h,p=!0)=>{f(i[h],p)},setViewDirection:f,setRotateEnabled:h=>{r.enableRotate=h},isRotateEnabled:()=>r.enableRotate,updateAspect:(h,p)=>{c=p===0?c:h/p,l==="orthographic"&&u()}}}var tt=new Set(["grid","floor","label-layer","measure"]);function rt(e){let n=e;for(;n;){if(typeof n.userData.id=="string"&&tt.has(n.userData.id))return!0;n=n.parent}return!1}function nt(e){let n=[];return e.traverse(t=>{let r=t;t.visible&&!rt(t)&&r.geometry&&n.push(t)}),Q(n)}function ot(e,n){let t=n.clone().normalize(),r=e.clone().normalize();if(Math.abs(r.dot(t))<.9999)return e;let o=Math.abs(t.dot(new j.Vector3(0,0,1)))>.9?new j.Vector3(0,1,0):new j.Vector3(0,0,1),a=new j.Vector3().crossVectors(t,o).normalize(),i=.5*Math.PI/180;return r.multiplyScalar(Math.cos(i)).add(a.multiplyScalar(Math.sin(i))).normalize()}var at=e=>1-Math.pow(1-e,3);function it(e,n,t,r,o,a=250){let i=e.position.clone(),s=n.target.clone(),l=performance.now(),c=()=>{let d=at(Math.min((performance.now()-l)/a,1));e.position.lerpVectors(i,t,d),n.target.lerpVectors(s,r,d),o(),n.update(),d<1&&requestAnimationFrame(c)};requestAnimationFrame(c)}var st=`
|
|
2
|
-
varying vec3 vWorldPos;
|
|
3
|
-
void main() {
|
|
4
|
-
vec4 world = modelMatrix * vec4(position, 1.0);
|
|
5
|
-
vWorldPos = world.xyz;
|
|
6
|
-
gl_Position = projectionMatrix * viewMatrix * world;
|
|
7
|
-
}
|
|
8
|
-
`,lt=`
|
|
9
|
-
precision highp float;
|
|
10
|
-
varying vec3 vWorldPos;
|
|
11
|
-
|
|
12
|
-
uniform vec2 uAxes; // indices (0=x,1=y,2=z) of the two in-plane world axes
|
|
13
|
-
uniform float uCell;
|
|
14
|
-
uniform float uMajor;
|
|
15
|
-
uniform vec3 uCellColor;
|
|
16
|
-
uniform vec3 uMajorColor;
|
|
17
|
-
uniform vec3 uCenter; // fade center (camera position), projected onto plane
|
|
18
|
-
uniform float uFade;
|
|
19
|
-
|
|
20
|
-
// Antialiased grid line intensity for a given spacing, using screen-space derivatives so lines
|
|
21
|
-
// stay ~1px regardless of zoom (the standard "pristine grid" technique).
|
|
22
|
-
float gridLine(vec2 coord, float spacing) {
|
|
23
|
-
vec2 c = coord / spacing;
|
|
24
|
-
vec2 d = fwidth(c);
|
|
25
|
-
vec2 g = abs(fract(c - 0.5) - 0.5) / max(d, 1e-6);
|
|
26
|
-
float line = min(g.x, g.y);
|
|
27
|
-
return 1.0 - clamp(line, 0.0, 1.0);
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
// Index a vec3 by a float axis id (0/1/2) without dynamic indexing (WebGL1-safe).
|
|
31
|
-
float axis(vec3 v, float i) {
|
|
32
|
-
return i < 0.5 ? v.x : (i < 1.5 ? v.y : v.z);
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
void main() {
|
|
36
|
-
// Pick the two in-plane world coordinates.
|
|
37
|
-
vec2 coord = vec2(axis(vWorldPos, uAxes.x), axis(vWorldPos, uAxes.y));
|
|
38
|
-
|
|
39
|
-
float minor = gridLine(coord, uCell);
|
|
40
|
-
float major = gridLine(coord, uCell * uMajor);
|
|
41
|
-
|
|
42
|
-
vec3 color = mix(uCellColor, uMajorColor, major);
|
|
43
|
-
float alpha = max(minor, major);
|
|
44
|
-
|
|
45
|
-
// Radial fade from the camera-projected center.
|
|
46
|
-
float dist = distance(vWorldPos, uCenter);
|
|
47
|
-
float fade = 1.0 - clamp(dist / uFade, 0.0, 1.0);
|
|
48
|
-
alpha *= fade * fade;
|
|
49
|
-
|
|
50
|
-
if (alpha < 0.001) discard;
|
|
51
|
-
gl_FragColor = vec4(color, alpha);
|
|
52
|
-
}
|
|
53
|
-
`;function He(e={}){let{cellSize:n=1,majorEvery:t=10,cellColor:r=8947848,majorColor:o=4473924,fadeDistance:a=100,plane:i="y"}=e,s=i==="y"?new z.Vector2(0,2):i==="z"?new z.Vector2(0,1):new z.Vector2(1,2),l=a*2.5,c=new z.PlaneGeometry(l,l);i==="y"?c.rotateX(-Math.PI/2):i==="x"&&c.rotateY(Math.PI/2);let d=new z.ShaderMaterial({vertexShader:st,fragmentShader:lt,transparent:!0,depthWrite:!1,side:z.DoubleSide,uniforms:{uAxes:{value:s},uCell:{value:n},uMajor:{value:t},uCellColor:{value:new z.Color(r)},uMajorColor:{value:new z.Color(o)},uCenter:{value:new z.Vector3},uFade:{value:a}}}),u=new z.Mesh(c,d);u.name="grid",u.userData.id="grid",u.renderOrder=-1;let m=new z.Vector3;return{object:u,update:f=>{i==="y"?(u.position.set(f.x,0,f.z),m.set(f.x,0,f.z)):i==="z"?(u.position.set(f.x,f.y,0),m.set(f.x,f.y,0)):(u.position.set(0,f.y,f.z),m.set(0,f.y,f.z)),d.uniforms.uCenter.value.copy(m)},setVisible:f=>{u.visible=f},dispose:()=>{c.dispose(),d.dispose()}}}var _ViewHelperjs = require('three/addons/helpers/ViewHelper.js');function ve(e){let{camera:n,domElement:t,controller:r}=e,o=new (0, _ViewHelperjs.ViewHelper)(n,t);o.setLabels("X","Y","Z");let a=!0,i=128,s=new N.Raycaster,l=new N.OrthographicCamera(-2,2,2,-2,0,4);l.position.set(0,0,2),l.updateMatrixWorld();let c={posX:new N.Vector3(1,0,0),negX:new N.Vector3(-1,0,0),posY:new N.Vector3(0,1,0),negY:new N.Vector3(0,-1,0),posZ:new N.Vector3(0,0,1),negZ:new N.Vector3(0,0,-1)},d=m=>{let f=t.getBoundingClientRect(),y=f.left+t.offsetWidth-i-o.location.right,v=f.top+t.offsetHeight-i-o.location.bottom,g=new N.Vector2((m.clientX-y)/i*2-1,-((m.clientY-v)/i)*2+1);if(Math.abs(g.x)>1||Math.abs(g.y)>1)return null;o.quaternion.copy(n.quaternion).invert(),o.updateMatrixWorld(),s.setFromCamera(g,l);let h=s.intersectObjects(o.children,!1);for(let p of h){let M=_optionalChain([p, 'access', _5 => _5.object, 'access', _6 => _6.userData, 'optionalAccess', _7 => _7.type]);if(typeof M=="string"&&M in c)return M}return null};return{render:m=>{if(!a)return;let f=m.autoClear;m.autoClear=!1,o.render(m),m.autoClear=f},update:m=>{o.animating&&o.update(m)},handleClick:m=>{if(!a)return!1;let f=d(m);return f?(r.getProjection()==="orthographic"&&r.setProjection("perspective"),r.setViewDirection(c[f],!1),!0):!1},get isAnimating(){return o.animating},setVisible:m=>{a=m},isVisible:()=>a,dispose:()=>o.dispose()}}var _LineSegmentsGeometryjs = require('three/addons/lines/LineSegmentsGeometry.js');var _LineSegments2js = require('three/addons/lines/LineSegments2.js');var _LineMaterialjs = require('three/addons/lines/LineMaterial.js');var ne="edge-overlay",mt=2236962,pt=1.5,ft=30;function xe(e,n={}){let t=new K.Color(_nullishCoalesce(n.color, () => (mt))),r=_nullishCoalesce(n.width, () => (pt)),o=_nullishCoalesce(n.thresholdAngle, () => (ft)),a=[];return e.traverse(i=>{if(!(i instanceof K.Mesh)||i.userData.id==="floor"||i.userData.id==="grid"||i.userData.kind===ne||i.children.some(l=>_optionalChain([l, 'access', _8 => _8.userData, 'optionalAccess', _9 => _9.kind])===ne)||!i.geometry)return;let s=Et(i.geometry,t,r,o);i.add(s),a.push(s)}),a}function Et(e,n,t,r){let o=new K.EdgesGeometry(e,r),a=new _LineSegmentsGeometryjs.LineSegmentsGeometry;a.setPositions(o.attributes.position.array),o.dispose();let i=new (0, _LineMaterialjs.LineMaterial)({color:n});i.linewidth=t,i.polygonOffset=!0,i.polygonOffsetFactor=-1,i.polygonOffsetUnits=-1;let s=new (0, _LineSegments2js.LineSegments2)(a,i);return s.userData.kind=ne,s.raycast=()=>{},s}function ht(e){return _optionalChain([e, 'access', _10 => _10.userData, 'optionalAccess', _11 => _11.kind])===ne}function yn(e){let n=[];e.traverse(t=>{t instanceof _LineSegments2js.LineSegments2&&ht(t)&&n.push(t)});for(let t of n)t.geometry.dispose(),t.material.dispose(),t.removeFromParent();return n.length}var _EffectComposerjs = require('three/addons/postprocessing/EffectComposer.js');var _RenderPassjs = require('three/addons/postprocessing/RenderPass.js');var _GTAOPassjs = require('three/addons/postprocessing/GTAOPass.js');var _SMAAPassjs = require('three/addons/postprocessing/SMAAPass.js');var _OutputPassjs = require('three/addons/postprocessing/OutputPass.js');function Ce(e,n,t,r,o,a){let i=new (0, _EffectComposerjs.EffectComposer)(e),s=new (0, _RenderPassjs.RenderPass)(n,t);i.addPass(s);let l=new (0, _GTAOPassjs.GTAOPass)(n,t,r,o);l.blendIntensity=_nullishCoalesce(a.aoIntensity, () => (1)),l.updateGtaoMaterial({screenSpaceRadius:!0}),i.addPass(l);let c=new _SMAAPassjs.SMAAPass;i.addPass(c);let d=new _OutputPassjs.OutputPass;return i.addPass(d),e.toneMapping=a.toneMapping,e.toneMappingExposure=a.toneMappingExposure,i.setSize(r,o),{render:u=>i.render(u),setSize:(u,m,f)=>{i.setPixelRatio(f),i.setSize(u,m)},setCamera:u=>{s.camera=u,l.camera=u},dispose:()=>{i.dispose(),l.dispose(),c.dispose(),d.dispose()}}}var _CSS2DRendererjs = require('three/addons/renderers/CSS2DRenderer.js');function Se(e,n){let t=new _CSS2DRendererjs.CSS2DRenderer,r=t.domElement;r.style.position="absolute",r.style.top="0",r.style.left="0",r.style.width="100%",r.style.height="100%",r.style.overflow="hidden",r.style.pointerEvents="none",r.style.zIndex="30",getComputedStyle(e).position==="static"&&(e.style.position="relative"),e.appendChild(r);let o={width:e.clientWidth||1,height:e.clientHeight||1};t.setSize(o.width,o.height);let a=new Ae.Group;a.name="label-layer",a.userData.id="label-layer",n.add(a);let i=new Set;return{addLabel:(l,c,d)=>{let u=document.createElement("div");u.textContent=l,d?u.className=d:Object.assign(u.style,{padding:"2px 6px",borderRadius:"4px",background:"rgba(20, 20, 20, 0.78)",color:"#fff",font:"12px/1.3 system-ui, sans-serif",whiteSpace:"pre",textAlign:"center",userSelect:"none"}),u.style.pointerEvents="none";let m=new (0, _CSS2DRendererjs.CSS2DObject)(u);return m.position.copy(c),a.add(m),i.add(m),{object:m,setPosition:f=>m.position.copy(f),setText:f=>{u.textContent=f},remove:()=>{m.removeFromParent(),u.remove(),i.delete(m)}}},render:(l,c)=>t.render(l,c),setSize:(l,c)=>t.setSize(l,c),dispose:()=>{i.forEach(l=>{l.removeFromParent(),l.element.remove()}),i.clear(),a.removeFromParent(),r.remove()}}}var _Line2js = require('three/addons/lines/Line2.js');var _LineGeometryjs = require('three/addons/lines/LineGeometry.js');var Ct=12,At=16763904,St=.015,De={Millimeters:{metersPerUnit:1/1e3,suffix:"mm"},Centimeters:{metersPerUnit:1/100,suffix:"cm"},Meters:{metersPerUnit:1,suffix:"m"},Inches:{metersPerUnit:1/39.37,suffix:"in"},Feet:{metersPerUnit:1/3.28084,suffix:"ft"}};function Dt(e){let n=e&&De[e]||De.Meters;return t=>`${(t/n.metersPerUnit).toPrecision(3)} ${n.suffix}`}function Lt(e){let n=e.object;return n instanceof D.Mesh?e.face?[e.face.a,e.face.b,e.face.c]:null:n instanceof D.Points?e.index!=null?[e.index]:null:n instanceof D.Line&&e.index!=null?[e.index,e.index+1]:null}function Ot(e,n,t,r){let o=e.point.clone(),a=e.object,i=Lt(e);if(!i||!a.geometry)return o;let s=a.geometry.attributes.position;if(!s)return o;let l=m=>{let f=m.clone().project(n);return new D.Vector2((f.x+1)/2*t.width,(1-f.y)/2*t.height)},c=l(o),d=o,u=r;for(let m of i){if(m>=s.count)continue;let y=new D.Vector3().fromBufferAttribute(s,m).applyMatrix4(a.matrixWorld),v=l(y).distanceTo(c);v<u&&(u=v,d=y)}return d}function Le(e){let{canvas:n,scene:t,getActiveCamera:r,labelLayer:o,options:a={}}=e,i=_nullishCoalesce(a.snapPixels, () => (Ct)),s=new D.Color(_nullishCoalesce(a.color, () => (At))),l=Dt(a.displayUnit),c=(R,H)=>`${l(R)}
|
|
54
|
-
\u0394x ${l(H.x)} \u0394y ${l(H.y)} \u0394z ${l(H.z)}`,d=_nullishCoalesce(a.format, () => (c)),u=new D.Raycaster,m=new D.Vector2,f=!1,y=[],v=[],g=null,h=null,p=new D.PointsMaterial({color:s,size:8,sizeAttenuation:!1,depthTest:!1}),M=new D.PointsMaterial({color:s,size:11,sizeAttenuation:!1,depthTest:!1,transparent:!0,opacity:.5}),w=null,L=R=>{if(!R){w&&(w.visible=!1);return}if(!w){let H=new D.BufferGeometry;H.setAttribute("position",new D.Float32BufferAttribute([0,0,0],3)),w=new D.Points(H,M),w.renderOrder=1e3,w.userData.id="measure",w.raycast=()=>{},t.add(w)}w.position.copy(R),w.visible=!0},b=R=>{let H=new D.BufferGeometry;H.setAttribute("position",new D.Float32BufferAttribute([R.x,R.y,R.z],3));let F=new D.Points(H,p);return F.renderOrder=999,F.userData.id="measure",F.raycast=()=>{},t.add(F),F},T=()=>{y.length=0,v.forEach(R=>{R.geometry.dispose(),R.removeFromParent()}),v.length=0,g&&(g.geometry.dispose(),g.material.dispose(),g.removeFromParent(),g=null),_optionalChain([h, 'optionalAccess', _12 => _12.remove, 'call', _13 => _13()]),h=null},C=()=>{if(y.length!==2)return;let[R,H]=y,F=new _LineGeometryjs.LineGeometry;F.setPositions([R.x,R.y,R.z,H.x,H.y,H.z]);let U=new (0, _LineMaterialjs.LineMaterial)({color:s});U.linewidth=2,U.depthTest=!1,g=new (0, _Line2js.Line2)(F,U),g.renderOrder=998,g.userData.id="measure",g.raycast=()=>{},t.add(g);let Z=R.clone().add(H).multiplyScalar(.5),$=new D.Vector3(Math.abs(H.x-R.x),Math.abs(H.y-R.y),Math.abs(H.z-R.z));h=o.addLabel(d(R.distanceTo(H),$),Z,a.labelClassName)},I=R=>{let H=n.getBoundingClientRect();m.x=(R.clientX-H.left)/H.width*2-1,m.y=-((R.clientY-H.top)/H.height)*2+1;let F=r();u.setFromCamera(m,F);let Z=F.position.length()*St;u.params.Line.threshold=Z,u.params.Points.threshold=Z;let $=u.intersectObjects(t.children,!0).filter(J=>J.object.userData.id!=="measure"&&J.object.userData.id!=="grid");return $.length===0?null:Ot($[0],F,{width:H.width,height:H.height},i)};return{setEnabled:R=>{f=R,R||(T(),L(null))},isEnabled:()=>f,handleClick:R=>{if(!f)return!1;y.length===2&&T();let H=I(R);return H===null||(y.push(H),v.push(b(H)),y.length===2&&C()),!0},handleMove:R=>{f&&L(I(R))},clear:T,dispose:()=>{T(),w&&(w.geometry.dispose(),w.removeFromParent(),w=null),p.dispose(),M.dispose()}}}var te=new Map,ee=new Map,oe=1;function Oe(e){oe=Math.max(1,e);for(let n of te.values())n.anisotropy!==oe&&(n.anisotropy=oe,n.needsUpdate=!0)}function Pe(e,n){let t=te.get(n);if(t){e.map=t,e.needsUpdate=!0;return}typeof document>"u"||Pt(n).then(r=>{e.map=r,e.needsUpdate=!0}).catch(r=>{_chunkD7A3YIYDcjs.e.call(void 0, ).warn(`Failed to load material texture ${n}:`,r)})}function On(){for(let e of te.values())e.dispose();te.clear(),ee.clear()}function Pt(e){let n=ee.get(e);return n||(n=new Promise((t,r)=>{new ae.TextureLoader().load(e,o=>{o.colorSpace=ae.SRGBColorSpace,o.anisotropy=oe,te.set(e,o),ee.delete(e),t(o)},void 0,o=>{ee.delete(e),r(o)})}),ee.set(e,n)),n}var _OrbitControlsjs = require('three/addons/controls/OrbitControls.js');var _HDRLoaderjs = require('three/addons/loaders/HDRLoader.js');var ie=new E.Vector3(0,0,1),de={technical:{toneMapping:E.NeutralToneMapping,toneMappingExposure:1,envMapIntensity:.5,cullBackfaces:!1,ambientOcclusion:!0,edges:!0,grid:!0},rendered:{toneMapping:E.ACESFilmicToneMapping,toneMappingExposure:1,envMapIntensity:1.3,cullBackfaces:!1,ambientOcclusion:!0,edges:!1,grid:!1}};function Bt(e){let n=de[e];return{envMapIntensity:n.envMapIntensity,cullBackfaces:n.cullBackfaces}}function Ft(e){let n=Math.abs(e.x),t=Math.abs(e.y),r=Math.abs(e.z);return r>=n&&r>=t?"z":t>=n&&t>=r?"y":"x"}var Wn=function(e,n){let t=Ut(n||{}),r=_optionalChain([t, 'access', _14 => _14.environment, 'optionalAccess', _15 => _15.sceneUp])||ie,o=jt(t),a=Xt(t,e);a.up.copy(r);let i=qt(e,t);Oe(i.capabilities.getMaxAnisotropy());let s=Jt(a,e,t),l=we({scene:o,perspective:a,controls:s,onActiveCameraChange:()=>{},up:r}),c=()=>l.getActiveCamera(),d=!1;Wt(o,t,()=>d);let u=$t(o,t),m=()=>{u&&kt(u,ue(o))};_optionalChain([t, 'access', _16 => _16.floor, 'optionalAccess', _17 => _17.enabled])&&Yt(o,t);let f=t.grid.enabled?He({cellSize:t.grid.cellSize,majorEvery:t.grid.majorEvery,cellColor:t.grid.cellColor,majorColor:t.grid.majorColor,fadeDistance:t.grid.fadeDistance,plane:t.grid.plane}):null;f&&o.add(f.object);let y=t.gizmo.enabled?ve({camera:a,domElement:e,controller:l}):null,v=_nullishCoalesce(e.parentElement, () => (e)),g=t.measure.enabled?Se(v,o):null,h=t.measure.enabled&&g?Le({canvas:e,scene:o,getActiveCamera:c,labelLayer:g,options:{snapPixels:t.measure.snapPixels,color:t.measure.color,labelClassName:t.measure.labelClassName,displayUnit:t.measure.displayUnit,format:t.measure.format}}):null,p=t.events.enableEventHandlers!==!1?Zt(e,o,c,a,s,t):{dispose:()=>{},fitToView:()=>{},clearSelection:()=>{}},M=5,w=0,L=0,b=x=>{w=x.clientX,L=x.clientY},T=x=>Math.hypot(x.clientX-w,x.clientY-L)>M,C=x=>{if(!T(x)){if(_optionalChain([h, 'optionalAccess', _18 => _18.handleClick, 'call', _19 => _19(x)])){x.stopImmediatePropagation();return}_optionalChain([y, 'optionalAccess', _20 => _20.handleClick, 'call', _21 => _21(x)])&&x.stopImmediatePropagation()}};(y||h)&&(e.addEventListener("mousedown",b,{capture:!0}),e.addEventListener("click",C,{capture:!0}));let I=x=>_optionalChain([h, 'optionalAccess', _22 => _22.handleMove, 'call', _23 => _23(x)]);h&&e.addEventListener("mousemove",I,{passive:!0});let S=x=>{xe(x,{color:t.edges.color,width:t.edges.width,thresholdAngle:t.edges.thresholdAngle})},V=e.parentElement,R=()=>V?{width:V.clientWidth,height:V.clientHeight}:{width:window.innerWidth,height:window.innerHeight},H=null,F=()=>{let{width:x,height:O}=R(),_=Math.min(window.devicePixelRatio,2),q=Ce(i,o,c(),Math.max(1,x),Math.max(1,O),{toneMapping:_nullishCoalesce(t.render.toneMapping, () => (E.NeutralToneMapping)),toneMappingExposure:_nullishCoalesce(t.render.toneMappingExposure, () => (1)),aoIntensity:t.render.aoIntensity});return q.setSize(Math.max(1,x),Math.max(1,O),_),q},U=x=>{x&&!H?H=F():!x&&H&&(H.dispose(),H=null)};t.render.ambientOcclusion&&(H=F());let Z=x=>{let O=de[x];$=x,i.toneMapping=O.toneMapping,i.toneMappingExposure=O.toneMappingExposure,t.render.toneMapping=O.toneMapping,t.render.toneMappingExposure=O.toneMappingExposure,H&&U(!1),U(O.ambientOcclusion),o.traverse(_=>{if(_.userData.source!=="compute")return;let q=_,Ze=Array.isArray(q.material)?q.material:q.material?[q.material]:[];for(let ge of Ze)"envMapIntensity"in ge&&(ge.envMapIntensity=O.envMapIntensity)}),o.traverse(_=>{_.userData.kind==="edge-overlay"&&(_.visible=O.edges)}),f&&(f.object.visible=O.grid)},$=_nullishCoalesce(_optionalChain([n, 'optionalAccess', _24 => _24.renderStyle]), () => (null)),J=()=>$?Bt($):void 0,{animate:We,dispose:$e}=Nt(i,o,a,c,l,s,R,t.events.onFrame,f,y,()=>H,g);We(),o.up.set(r.x,r.y,r.z),m();let ye=x=>{x.traverse(O=>{let _=O;!_.geometry&&!_.material||(_optionalChain([_, 'access', _25 => _25.geometry, 'optionalAccess', _26 => _26.dispose, 'call', _27 => _27()]),Array.isArray(_.material)?_.material.forEach(q=>q.dispose()):_optionalChain([_, 'access', _28 => _28.material, 'optionalAccess', _29 => _29.dispose, 'call', _30 => _30()]))})},Ye=x=>{x.userData.source="user",o.add(x)},Xe=x=>{x.removeFromParent(),ye(x)},qe=()=>{o.children.filter(O=>O.userData.source==="user").forEach(O=>{O.removeFromParent(),ye(O)})};return{scene:o,camera:a,controls:s,renderer:i,cameraController:l,grid:f,gizmo:y,measureTool:h,applyEdges:S,setAmbientOcclusion:U,setRenderStyle:Z,getMaterialAppearance:J,updateShadowBounds:m,dispose:()=>{d=!0,$e(),p.dispose(),(y||h)&&(e.removeEventListener("mousedown",b,{capture:!0}),e.removeEventListener("click",C,{capture:!0})),h&&e.removeEventListener("mousemove",I),_optionalChain([h, 'optionalAccess', _31 => _31.dispose, 'call', _32 => _32()]),_optionalChain([g, 'optionalAccess', _33 => _33.dispose, 'call', _34 => _34()]),_optionalChain([y, 'optionalAccess', _35 => _35.dispose, 'call', _36 => _36()]),_optionalChain([f, 'optionalAccess', _37 => _37.dispose, 'call', _38 => _38()]),_optionalChain([H, 'optionalAccess', _39 => _39.dispose, 'call', _40 => _40()]),s.dispose(),i.dispose(),i.forceContextLoss(),o.traverse(x=>{let O=x;!O.geometry&&!O.material||(_optionalChain([O, 'access', _41 => _41.geometry, 'optionalAccess', _42 => _42.dispose, 'call', _43 => _43()]),Array.isArray(O.material)?O.material.forEach(_=>_.dispose()):_optionalChain([O, 'access', _44 => _44.material, 'optionalAccess', _45 => _45.dispose, 'call', _46 => _46()]))}),_optionalChain([o, 'access', _47 => _47.environment, 'optionalAccess', _48 => _48.dispose, 'call', _49 => _49()]),o.background instanceof E.Texture&&o.background.dispose()},fitToView:p.fitToView,clearSelection:p.clearSelection,addUserGeometry:Ye,removeUserGeometry:Xe,clearUserGeometry:qe}};function Ut(e){let n=e.sceneScale||"m",r={mm:{cameraDistance:20,near:.1,far:2e3,floorSize:100,lightDistance:10,lightHeight:20,minDistance:.1,shadowSize:100,scaleFactor:1e3},cm:{cameraDistance:20,near:.1,far:2e3,floorSize:100,lightDistance:25,lightHeight:50,minDistance:.1,shadowSize:100,scaleFactor:100},m:{cameraDistance:10,near:.01,far:2e3,floorSize:50,lightDistance:25,lightHeight:50,minDistance:.001,shadowSize:100,scaleFactor:1},inches:{cameraDistance:15,near:.1,far:2e3,floorSize:80,lightDistance:20,lightHeight:40,minDistance:.1,shadowSize:80,scaleFactor:39.37},feet:{cameraDistance:8,near:.1,far:2e3,floorSize:40,lightDistance:15,lightHeight:30,minDistance:.1,shadowSize:60,scaleFactor:3.28084}}[n],o=e.renderStyle?de[e.renderStyle]:null;return{sceneScale:n,renderStyle:_nullishCoalesce(e.renderStyle, () => ("technical")),camera:{position:_optionalChain([e, 'access', _50 => _50.camera, 'optionalAccess', _51 => _51.position])||new E.Vector3(-r.cameraDistance,-r.cameraDistance,r.cameraDistance),fov:_optionalChain([e, 'access', _52 => _52.camera, 'optionalAccess', _53 => _53.fov])||20,near:_optionalChain([e, 'access', _54 => _54.camera, 'optionalAccess', _55 => _55.near])||r.near,far:_optionalChain([e, 'access', _56 => _56.camera, 'optionalAccess', _57 => _57.far])||r.far,target:_optionalChain([e, 'access', _58 => _58.camera, 'optionalAccess', _59 => _59.target])||new E.Vector3(0,0,0)},lighting:{enableSunlight:_nullishCoalesce(_optionalChain([e, 'access', _60 => _60.lighting, 'optionalAccess', _61 => _61.enableSunlight]), () => (!0)),sunlightIntensity:_nullishCoalesce(_optionalChain([e, 'access', _62 => _62.lighting, 'optionalAccess', _63 => _63.sunlightIntensity]), () => (1)),sunlightPosition:_optionalChain([e, 'access', _64 => _64.lighting, 'optionalAccess', _65 => _65.sunlightPosition])||new E.Vector3(r.lightDistance,r.lightDistance,r.lightHeight),ambientLightColor:_optionalChain([e, 'access', _66 => _66.lighting, 'optionalAccess', _67 => _67.ambientLightColor])||new E.Color(4210752),ambientLightIntensity:_nullishCoalesce(_optionalChain([e, 'access', _68 => _68.lighting, 'optionalAccess', _69 => _69.ambientLightIntensity]), () => (1)),sunlightColor:_optionalChain([e, 'access', _70 => _70.lighting, 'optionalAccess', _71 => _71.sunlightColor])||16777215},environment:{hdrPath:_optionalChain([e, 'access', _72 => _72.environment, 'optionalAccess', _73 => _73.hdrPath])||"/baseHDR.hdr",backgroundColor:_optionalChain([e, 'access', _74 => _74.environment, 'optionalAccess', _75 => _75.backgroundColor])||new E.Color(15790320),enableEnvironmentLighting:_nullishCoalesce(_optionalChain([e, 'access', _76 => _76.environment, 'optionalAccess', _77 => _77.enableEnvironmentLighting]), () => (!0)),sceneUp:_optionalChain([e, 'access', _78 => _78.environment, 'optionalAccess', _79 => _79.sceneUp])||ie,showEnvironment:_nullishCoalesce(_optionalChain([e, 'access', _80 => _80.environment, 'optionalAccess', _81 => _81.showEnvironment]), () => (!1))},floor:{enabled:_nullishCoalesce(_optionalChain([e, 'access', _82 => _82.floor, 'optionalAccess', _83 => _83.enabled]), () => (!1)),size:_optionalChain([e, 'access', _84 => _84.floor, 'optionalAccess', _85 => _85.size])||r.floorSize,color:_optionalChain([e, 'access', _86 => _86.floor, 'optionalAccess', _87 => _87.color])||new E.Color(8421504),roughness:_nullishCoalesce(_optionalChain([e, 'access', _88 => _88.floor, 'optionalAccess', _89 => _89.roughness]), () => (.7)),metalness:_nullishCoalesce(_optionalChain([e, 'access', _90 => _90.floor, 'optionalAccess', _91 => _91.metalness]), () => (0)),receiveShadow:_nullishCoalesce(_optionalChain([e, 'access', _92 => _92.floor, 'optionalAccess', _93 => _93.receiveShadow]), () => (!0))},render:{enableShadows:_nullishCoalesce(_optionalChain([e, 'access', _94 => _94.render, 'optionalAccess', _95 => _95.enableShadows]), () => (!0)),shadowMapSize:_optionalChain([e, 'access', _96 => _96.render, 'optionalAccess', _97 => _97.shadowMapSize])||2048,antialias:_nullishCoalesce(_optionalChain([e, 'access', _98 => _98.render, 'optionalAccess', _99 => _99.antialias]), () => (!0)),pixelRatio:_optionalChain([e, 'access', _100 => _100.render, 'optionalAccess', _101 => _101.pixelRatio])||Math.min(window.devicePixelRatio,2),toneMapping:_optionalChain([e, 'access', _102 => _102.render, 'optionalAccess', _103 => _103.toneMapping])||_optionalChain([o, 'optionalAccess', _104 => _104.toneMapping])||E.NeutralToneMapping,toneMappingExposure:_nullishCoalesce(_nullishCoalesce(_optionalChain([e, 'access', _105 => _105.render, 'optionalAccess', _106 => _106.toneMappingExposure]), () => (_optionalChain([o, 'optionalAccess', _107 => _107.toneMappingExposure]))), () => (1)),preserveDrawingBuffer:_nullishCoalesce(_optionalChain([e, 'access', _108 => _108.render, 'optionalAccess', _109 => _109.preserveDrawingBuffer]), () => (!1)),ambientOcclusion:_nullishCoalesce(_nullishCoalesce(_optionalChain([e, 'access', _110 => _110.render, 'optionalAccess', _111 => _111.ambientOcclusion]), () => (_optionalChain([o, 'optionalAccess', _112 => _112.ambientOcclusion]))), () => (!1)),aoIntensity:_nullishCoalesce(_optionalChain([e, 'access', _113 => _113.render, 'optionalAccess', _114 => _114.aoIntensity]), () => (1))},controls:{enableDamping:_nullishCoalesce(_optionalChain([e, 'access', _115 => _115.controls, 'optionalAccess', _116 => _116.enableDamping]), () => (!1)),dampingFactor:_optionalChain([e, 'access', _117 => _117.controls, 'optionalAccess', _118 => _118.dampingFactor])||.05,autoRotate:_nullishCoalesce(_optionalChain([e, 'access', _119 => _119.controls, 'optionalAccess', _120 => _120.autoRotate]), () => (!1)),autoRotateSpeed:_optionalChain([e, 'access', _121 => _121.controls, 'optionalAccess', _122 => _122.autoRotateSpeed])||.5,enableZoom:_nullishCoalesce(_optionalChain([e, 'access', _123 => _123.controls, 'optionalAccess', _124 => _124.enableZoom]), () => (!0)),enablePan:_nullishCoalesce(_optionalChain([e, 'access', _125 => _125.controls, 'optionalAccess', _126 => _126.enablePan]), () => (!0)),minDistance:_optionalChain([e, 'access', _127 => _127.controls, 'optionalAccess', _128 => _128.minDistance])||r.minDistance,maxDistance:_optionalChain([e, 'access', _129 => _129.controls, 'optionalAccess', _130 => _130.maxDistance])||1/0},grid:{enabled:_nullishCoalesce(_nullishCoalesce(_optionalChain([e, 'access', _131 => _131.grid, 'optionalAccess', _132 => _132.enabled]), () => (_optionalChain([o, 'optionalAccess', _133 => _133.grid]))), () => (!1)),cellSize:_nullishCoalesce(_optionalChain([e, 'access', _134 => _134.grid, 'optionalAccess', _135 => _135.cellSize]), () => (1)),majorEvery:_nullishCoalesce(_optionalChain([e, 'access', _136 => _136.grid, 'optionalAccess', _137 => _137.majorEvery]), () => (10)),cellColor:_nullishCoalesce(_optionalChain([e, 'access', _138 => _138.grid, 'optionalAccess', _139 => _139.cellColor]), () => (8947848)),majorColor:_nullishCoalesce(_optionalChain([e, 'access', _140 => _140.grid, 'optionalAccess', _141 => _141.majorColor]), () => (4473924)),fadeDistance:_nullishCoalesce(_optionalChain([e, 'access', _142 => _142.grid, 'optionalAccess', _143 => _143.fadeDistance]), () => (100)),plane:_nullishCoalesce(_optionalChain([e, 'access', _144 => _144.grid, 'optionalAccess', _145 => _145.plane]), () => (Ft(_nullishCoalesce(_optionalChain([e, 'access', _146 => _146.environment, 'optionalAccess', _147 => _147.sceneUp]), () => (ie)))))},gizmo:{enabled:_nullishCoalesce(_optionalChain([e, 'access', _148 => _148.gizmo, 'optionalAccess', _149 => _149.enabled]), () => (!1))},edges:{enabled:_nullishCoalesce(_nullishCoalesce(_optionalChain([e, 'access', _150 => _150.edges, 'optionalAccess', _151 => _151.enabled]), () => (_optionalChain([o, 'optionalAccess', _152 => _152.edges]))), () => (!1)),color:_nullishCoalesce(_optionalChain([e, 'access', _153 => _153.edges, 'optionalAccess', _154 => _154.color]), () => (2236962)),width:_nullishCoalesce(_optionalChain([e, 'access', _155 => _155.edges, 'optionalAccess', _156 => _156.width]), () => (1.5)),thresholdAngle:_nullishCoalesce(_optionalChain([e, 'access', _157 => _157.edges, 'optionalAccess', _158 => _158.thresholdAngle]), () => (30))},measure:{enabled:_nullishCoalesce(_optionalChain([e, 'access', _159 => _159.measure, 'optionalAccess', _160 => _160.enabled]), () => (!1)),snapPixels:_optionalChain([e, 'access', _161 => _161.measure, 'optionalAccess', _162 => _162.snapPixels]),color:_optionalChain([e, 'access', _163 => _163.measure, 'optionalAccess', _164 => _164.color]),labelClassName:_optionalChain([e, 'access', _165 => _165.measure, 'optionalAccess', _166 => _166.labelClassName]),displayUnit:_optionalChain([e, 'access', _167 => _167.measure, 'optionalAccess', _168 => _168.displayUnit]),format:_optionalChain([e, 'access', _169 => _169.measure, 'optionalAccess', _170 => _170.format])},events:{onBackgroundClicked:_optionalChain([e, 'access', _171 => _171.events, 'optionalAccess', _172 => _172.onBackgroundClicked]),onObjectSelected:_optionalChain([e, 'access', _173 => _173.events, 'optionalAccess', _174 => _174.onObjectSelected]),onMeshMetadataClicked:_optionalChain([e, 'access', _175 => _175.events, 'optionalAccess', _176 => _176.onMeshMetadataClicked]),onMeshDoubleClicked:_optionalChain([e, 'access', _177 => _177.events, 'optionalAccess', _178 => _178.onMeshDoubleClicked]),selectionColor:_optionalChain([e, 'access', _179 => _179.events, 'optionalAccess', _180 => _180.selectionColor])||"#ff0000",enableEventHandlers:_nullishCoalesce(_optionalChain([e, 'access', _181 => _181.events, 'optionalAccess', _182 => _182.enableEventHandlers]), () => (!0)),enableKeyboardControls:_nullishCoalesce(_optionalChain([e, 'access', _183 => _183.events, 'optionalAccess', _184 => _184.enableKeyboardControls]), () => (!0)),enableClickToFocus:_nullishCoalesce(_optionalChain([e, 'access', _185 => _185.events, 'optionalAccess', _186 => _186.enableClickToFocus]), () => (!0)),enableDoubleClickZoom:_nullishCoalesce(_optionalChain([e, 'access', _187 => _187.events, 'optionalAccess', _188 => _188.enableDoubleClickZoom]), () => (!0)),onReady:_optionalChain([e, 'access', _189 => _189.events, 'optionalAccess', _190 => _190.onReady]),onFrame:_optionalChain([e, 'access', _191 => _191.events, 'optionalAccess', _192 => _192.onFrame])}}}var zt=new Set(["grid","floor","label-layer","measure"]);function _t(e){let n=e;for(;n;){if(typeof n.userData.id=="string"&&zt.has(n.userData.id))return!0;n=n.parent}return!1}function ue(e){let n=new E.Box3;return e.traverse(t=>{let r=t;t.visible&&!_t(t)&&r.geometry&&n.expandByObject(t)}),n}function kt(e,n){if(n.isEmpty())return;let t=n.getCenter(new E.Vector3),r=n.getSize(new E.Vector3).length()*.5*1.2,o=e.shadow.camera;o.left=-r,o.right=r,o.top=r,o.bottom=-r,e.target.position.copy(t),e.target.updateMatrixWorld();let a=e.position.distanceTo(t);o.near=Math.max(r*.01,a-r),o.far=a+r,o.updateProjectionMatrix()}function jt(e){let n=new E.Scene,t=typeof e.environment.backgroundColor=="string"?new E.Color(e.environment.backgroundColor):e.environment.backgroundColor;return n.background=t||null,n}function Gt(e,n,t,r,o=200){let a=e.position.clone(),i=n.target.clone(),s=performance.now(),l=d=>1-Math.pow(1-d,3),c=()=>{let d=performance.now()-s,u=l(Math.min(d/o,1));e.position.lerpVectors(a,t,u),n.target.lerpVectors(i,r,u),n.update(),u<1&&requestAnimationFrame(c)};requestAnimationFrame(c)}function Nt(e,n,t,r,o,a,i,s,l,c,d,u){let m=null,f=performance.now(),y=()=>{let{width:h,height:p}=i();if(h===0||p===0)return;let M=Math.min(window.devicePixelRatio,2),w=Math.floor(h*M),L=Math.floor(p*M);(e.domElement.width!==w||e.domElement.height!==L)&&(e.setPixelRatio(M),e.setSize(h,p,!1),t.aspect=h/p,t.updateProjectionMatrix(),o.updateAspect(h,p),_optionalChain([d, 'optionalCall', _193 => _193(), 'optionalAccess', _194 => _194.setSize, 'call', _195 => _195(h,p,M)]),_optionalChain([u, 'optionalAccess', _196 => _196.setSize, 'call', _197 => _197(h,p)]))},v=function(){m=requestAnimationFrame(v);let h=performance.now(),p=(h-f)/1e3;f=h,y(),(a.enableDamping||a.autoRotate)&&a.update(),l&&l.update(r().position),c&&c.update(p),_optionalChain([s, 'optionalCall', _198 => _198(p)]);let M=r(),w=_optionalChain([d, 'optionalCall', _199 => _199()]);w?(w.setCamera(M),w.render(p)):e.render(n,M),u&&u.render(n,M),c&&c.render(e)};return{animate:v,dispose:()=>{m!==null&&(cancelAnimationFrame(m),m=null)}}}function Wt(e,n,t){n.environment.enableEnvironmentLighting?new (0, _HDRLoaderjs.HDRLoader)().load(n.environment.hdrPath||"/baseHDR.hdr",function(r){if(t()){r.dispose();return}if(!_optionalChain([r, 'optionalAccess', _200 => _200.image])){_chunkD7A3YIYDcjs.e.call(void 0, ).warn("HDR loaded without image data; skipping environment map."),_optionalChain([n, 'access', _201 => _201.events, 'access', _202 => _202.onReady, 'optionalCall', _203 => _203()]);return}r.mapping=E.EquirectangularReflectionMapping,e.environment=r,n.environment.showEnvironment&&(e.background=r),_optionalChain([n, 'access', _204 => _204.events, 'access', _205 => _205.onReady, 'optionalCall', _206 => _206()])},void 0,function(r){t()||(_chunkD7A3YIYDcjs.e.call(void 0, ).warn("HDR texture could not be loaded, falling back to basic lighting:",r),_optionalChain([n, 'access', _207 => _207.events, 'access', _208 => _208.onReady, 'optionalCall', _209 => _209()]))}):_optionalChain([n, 'access', _210 => _210.events, 'access', _211 => _211.onReady, 'optionalCall', _212 => _212()])}function $t(e,n){let t=new E.AmbientLight(n.lighting.ambientLightColor,n.lighting.ambientLightIntensity);if(e.add(t),!n.lighting.enableSunlight)return null;let r=new E.DirectionalLight(_nullishCoalesce(n.lighting.sunlightColor, () => (16777215)),n.lighting.sunlightIntensity),o=n.lighting.sunlightPosition;return o&&r.position.set(o.x,o.y,o.z),n.render.enableShadows?(r.castShadow=!0,r.shadow.mapSize.width=n.render.shadowMapSize||2048,r.shadow.mapSize.height=n.render.shadowMapSize||2048,r.shadow.bias=-1e-4,r.shadow.normalBias=.02,r.shadow.radius=4,e.add(r),e.add(r.target),r):(e.add(r),null)}function Yt(e,n){let t=n.floor.size,r=new E.PlaneGeometry(t,t),o=typeof n.floor.color=="string"?new E.Color(n.floor.color):n.floor.color,a=new E.MeshStandardMaterial({color:o,roughness:n.floor.roughness,metalness:n.floor.metalness,side:E.DoubleSide}),i=new E.Mesh(r,a);i.userData.id="floor",i.name="floor";let s=(_optionalChain([n, 'access', _213 => _213.environment, 'optionalAccess', _214 => _214.sceneUp])||ie).clone().normalize();i.quaternion.setFromUnitVectors(new E.Vector3(0,0,1),s),i.position.set(0,0,0),n.floor.receiveShadow&&n.render.enableShadows&&(i.receiveShadow=!0),e.add(i)}function Xt(e,n){let t=n.parentElement,r=t?t.clientWidth:window.innerWidth,o=t?t.clientHeight:window.innerHeight,a=new E.PerspectiveCamera(e.camera.fov,r/o,e.camera.near,e.camera.far),i=e.camera.position;return i&&a.position.set(i.x,i.y,i.z),a}function qt(e,n){let t=new E.WebGLRenderer({antialias:n.render.antialias,canvas:e,alpha:!0,powerPreference:"high-performance",preserveDrawingBuffer:n.render.preserveDrawingBuffer,logarithmicDepthBuffer:!0}),r=e.parentElement,o=r?r.clientWidth:window.innerWidth,a=r?r.clientHeight:window.innerHeight;return r&&(e.style.width="100%",e.style.height="100%",e.style.display="block"),t.setSize(o,a,!1),t.setPixelRatio(n.render.pixelRatio||Math.min(window.devicePixelRatio,2)),n.render.enableShadows&&(t.shadowMap.enabled=!0,t.shadowMap.type=E.VSMShadowMap),t.toneMapping=n.render.toneMapping,t.toneMappingExposure=_nullishCoalesce(n.render.toneMappingExposure, () => (1)),t.outputColorSpace=E.SRGBColorSpace,t.sortObjects=!0,t}function Zt(e,n,t,r,o,a){let i=new Set,s=new Map,l=new E.Raycaster,c=new E.Vector2,d=new E.Vector2,u=b=>{let T=b;for(;T;){if(!T.visible)return!1;T=T.parent}return!0},m=()=>{let b=ue(n);if(b.isEmpty()){_chunkD7A3YIYDcjs.e.call(void 0, ).warn("No objects to fit to view");return}let T=b.getCenter(new E.Vector3),C=b.getSize(new E.Vector3),I=Math.max(C.x,C.y,C.z),S=r.fov*(Math.PI/180),V=I/(2*Math.tan(S/2));V*=1.5;let R=r.position.clone().sub(o.target);R.lengthSq()<1e-12&&R.set(.8,1,1.2),R.normalize(),r.position.copy(T.clone().add(R.multiplyScalar(V))),o.target.copy(T),o.update()},f=typeof a.events.selectionColor=="string"?new E.Color(a.events.selectionColor):a.events.selectionColor instanceof E.Color?a.events.selectionColor:new E.Color("#ff0000"),y=()=>{i.forEach(b=>{let T=b;if(s.has(b)){let C=s.get(b),I=T.material;I instanceof E.Material?I.dispose():Array.isArray(I)&&I.forEach(V=>V.dispose()),T.material=C,s.delete(b);let S=b;for(;S.parent;)S=S.parent;S!==n&&(C instanceof E.Material?C.dispose():C.forEach(V=>V.dispose()))}}),i.clear()},v=b=>{let T=b;if(!(T.material instanceof E.Material))return!1;s.set(b,T.material);let C=T.material.clone();return b instanceof E.Mesh&&"emissive"in C?C.emissive=f.clone():"color"in C&&(C.color=f.clone()),T.material=C,!0},g=()=>{let b=ue(n),T=b.isEmpty()?1:b.getSize(new E.Vector3).length();l.params.Points.threshold=T*.01},h=b=>{d.set(b.clientX,b.clientY)},p=b=>{let T=new E.Vector2(b.clientX,b.clientY);if(d.distanceTo(T)>5)return;let C=e.getBoundingClientRect();c.x=(b.clientX-C.left)/C.width*2-1,c.y=-((b.clientY-C.top)/C.height)*2+1,g(),l.setFromCamera(c,t());let I=l.intersectObjects(n.children,!0).filter(S=>u(S.object));if(I.length>0){let S=I[0].object;i.has(S)||(y(),i.add(S),v(S),_optionalChain([a, 'access', _215 => _215.events, 'optionalAccess', _216 => _216.onObjectSelected, 'optionalCall', _217 => _217(S)]),S instanceof E.Mesh&&Object.keys(S.userData).length>0&&_optionalChain([a, 'access', _218 => _218.events, 'optionalAccess', _219 => _219.onMeshMetadataClicked, 'optionalCall', _220 => _220(S.userData)]))}else y(),_optionalChain([a, 'access', _221 => _221.events, 'optionalAccess', _222 => _222.onBackgroundClicked, 'optionalCall', _223 => _223({x:c.x,y:c.y})])},M=b=>{let T=e.getBoundingClientRect();c.x=(b.clientX-T.left)/T.width*2-1,c.y=-((b.clientY-T.top)/T.height)*2+1,g(),l.setFromCamera(c,t());let C=l.intersectObjects(n.children,!0).filter(J=>u(J.object));if(C.length===0)return;let I=C[0].object;if(_optionalChain([a, 'access', _224 => _224.events, 'optionalAccess', _225 => _225.onMeshDoubleClicked, 'optionalCall', _226 => _226(I)]),!_optionalChain([a, 'access', _227 => _227.events, 'optionalAccess', _228 => _228.enableDoubleClickZoom]))return;let S=new E.Box3().setFromObject(I);if(S.isEmpty())return;let V=S.getCenter(new E.Vector3),R=S.getSize(new E.Vector3),H=Math.max(R.x,R.y,R.z),F=r.fov*(Math.PI/180),U=H/(2*Math.tan(F/2))*1.5,Z=r.position.clone().sub(o.target).normalize(),$=V.clone().add(Z.multiplyScalar(U));Gt(r,o,$,V)},w=b=>{if(_optionalChain([a, 'access', _229 => _229.events, 'optionalAccess', _230 => _230.enableKeyboardControls]))switch(b.key.toLowerCase()){case"f":b.preventDefault(),m();break;case"escape":b.preventDefault(),y();break;case" ":b.preventDefault(),m();break}};return _optionalChain([a, 'access', _231 => _231.events, 'optionalAccess', _232 => _232.enableClickToFocus])&&(e.addEventListener("mousedown",h),e.addEventListener("click",p),e.addEventListener("dblclick",M)),_optionalChain([a, 'access', _233 => _233.events, 'optionalAccess', _234 => _234.enableKeyboardControls])&&(e.setAttribute("tabindex","0"),e.addEventListener("keydown",w)),{dispose:()=>{e.removeEventListener("mousedown",h),e.removeEventListener("click",p),e.removeEventListener("dblclick",M),e.removeEventListener("keydown",w),y()},fitToView:m,clearSelection:y}}function Jt(e,n,t){let r=new (0, _OrbitControlsjs.OrbitControls)(e,n),o=t.camera.target;return o&&r.target.set(o.x,o.y,o.z),r.enableDamping=t.controls.enableDamping||!1,r.dampingFactor=t.controls.dampingFactor||.05,r.autoRotate=t.controls.autoRotate||!1,r.autoRotateSpeed=t.controls.autoRotateSpeed||.5,r.enableZoom=_nullishCoalesce(t.controls.enableZoom, () => (!0)),r.enablePan=_nullishCoalesce(t.controls.enablePan, () => (!0)),r.minDistance=t.controls.minDistance||.001,r.maxDistance=t.controls.maxDistance||1/0,r.screenSpacePanning=!1,r.maxPolarAngle=Math.PI,r.update(),r}var ar={};_chunkD7A3YIYDcjs.a.call(void 0, ar,{CONCRETE_MATERIAL:()=>er,EMISSIVE_MATERIAL:()=>Kt,GLASS_MATERIAL:()=>rr,METAL_MATERIAL:()=>Qt,PLASTIC_MATERIAL:()=>tr,RUBBER_MATERIAL:()=>nr,WOOD_MATERIAL:()=>or});var Kt=new P.MeshPhysicalMaterial({color:0,emissive:new P.Color(16777215),emissiveIntensity:5,metalness:0,roughness:.2,clearcoat:.3,clearcoatRoughness:.2,depthWrite:!0,depthTest:!0,transparent:!1,alphaTest:0,polygonOffset:!0,side:P.FrontSide,dithering:!0}),Qt=new P.MeshPhysicalMaterial({color:new P.Color(0),metalness:.9,roughness:.3,envMapIntensity:1.2,clearcoat:.3,clearcoatRoughness:.2,reflectivity:1,ior:2.5,thickness:1,depthWrite:!0,transparent:!1,alphaTest:0,depthTest:!0,polygonOffset:!0,side:P.FrontSide,dithering:!0}),er=new P.MeshPhysicalMaterial({color:new P.Color(13421772),metalness:0,roughness:.92,envMapIntensity:.15,clearcoat:.05,clearcoatRoughness:.9,reflectivity:.15,transmission:0,ior:1.45,thickness:0,depthWrite:!0,transparent:!1,alphaTest:.5,depthTest:!0,polygonOffset:!0,side:P.FrontSide,dithering:!0}),tr=new P.MeshPhysicalMaterial({color:new P.Color(16777215),metalness:0,roughness:.3,envMapIntensity:.5,clearcoat:.5,clearcoatRoughness:.1,reflectivity:.5,ior:1.4,transmission:0,transparent:!1,depthWrite:!0,side:P.FrontSide,dithering:!0,polygonOffset:!0,polygonOffsetFactor:1,polygonOffsetUnits:1}),rr=new P.MeshPhysicalMaterial({color:new P.Color(16777215),metalness:0,roughness:0,transmission:.95,transparent:!0,opacity:.3,envMapIntensity:1,clearcoat:1,clearcoatRoughness:0,ior:1.52,reflectivity:.9,thickness:1,side:P.DoubleSide,polygonOffset:!0,polygonOffsetFactor:1,polygonOffsetUnits:1}),nr=new P.MeshPhysicalMaterial({color:new P.Color(1710618),metalness:0,roughness:.9,envMapIntensity:.2,clearcoat:.1,clearcoatRoughness:.8,reflectivity:.2,ior:1.3,transmission:0,depthWrite:!0,side:P.FrontSide,polygonOffset:!0,polygonOffsetFactor:1,polygonOffsetUnits:1}),or=new P.MeshPhysicalMaterial({color:new P.Color(8934707),metalness:0,roughness:.7,envMapIntensity:.3,clearcoat:.3,clearcoatRoughness:.4,reflectivity:.3,ior:1.3,transmission:0,depthWrite:!0,side:P.FrontSide,dithering:!0,polygonOffset:!0,polygonOffsetFactor:1,polygonOffsetUnits:1});function se(e,n,t,r=!0){return{x:e,y:n,z:t}}var cr="#ffffff",Ie=12,ur=4e-4,dr=12,mr=.05;function Ve(e,n={}){if(!e||e.length===0)return[];let{rhino:t,applyTransforms:r=!0}=n,o=[];for(let a of e)switch(a.kind){case"curve":{let i=fr(a,t,r);i&&o.push(i);break}case"point":{o.push(Er(a,r));break}default:{let i=a;_chunkD7A3YIYDcjs.e.call(void 0, ).warn(`Skipping unknown display item kind: ${String(i.kind)}`);break}}return o}var pr=2;function fr(e,n,t){if(!n)return _chunkD7A3YIYDcjs.e.call(void 0, ).warn("No rhino3dm instance provided; skipping curve display item."),null;let r=hr(e.json,n);if(!r)return null;let o;try{o=yr(r,t)}finally{re(r)}if(o.length<2)return null;let a=[];for(let u of o)a.push(u.x,u.y,u.z);let i=new _LineGeometryjs.LineGeometry;i.setPositions(a);let s=Be(e.color,e.opacity),l=new (0, _LineMaterialjs.LineMaterial)({color:s.color}),c=l;c.linewidth=_nullishCoalesce(e.width, () => (pr)),c.transparent=s.transparent,c.opacity=s.opacity;let d=new (0, _Line2js.Line2)(i,l);return d.computeLineDistances(),d.name=e.name,d.userData={source:"compute",id:e.id,layer:e.layer,kind:"curve",metadata:e.metadata},d}function Er(e,n){let{x:t,y:r,z:o}=se(e.position.X,e.position.Y,e.position.Z,n),a=new W.BufferGeometry;a.setAttribute("position",new W.Float32BufferAttribute([t,r,o],3));let i=new W.PointsMaterial({...Be(e.color,e.opacity),size:6,sizeAttenuation:!1}),s=new W.Points(a,i);return s.name=e.name,s.userData={source:"compute",id:e.id,layer:e.layer,kind:"point",metadata:e.metadata},s}function re(e){_optionalChain([e, 'optionalAccess', _235 => _235.delete, 'optionalCall', _236 => _236()])}function hr(e,n){try{let t=JSON.parse(e),r=n.CommonObject.decode(t);return r&&typeof r.pointAt=="function"?r:(re(r),_chunkD7A3YIYDcjs.e.call(void 0, ).warn("Decoded display-item JSON is not a curve; skipping."),null)}catch(t){return _chunkD7A3YIYDcjs.e.call(void 0, ).warn("Failed to decode curve display item JSON:",t),null}}function yr(e,n){let t=gr(e,n);return t||br(e,n)}function gr(e,n){if(!e.isPolyline())return null;let t=e.tryGetPolyline(),r=Array.isArray(t)?t[1]:t;if(!r||typeof r.count!="number"||r.count<2)return re(r),null;let o=[];for(let a=0;a<r.count;a++){let i=r.get(a),{x:s,y:l,z:c}=se(i[0],i[1],i[2],n);o.push(new W.Vector3(s,l,c))}return re(r),o}function br(e,n){let t=e.domain,r=t[0],a=t[1]-r,i=u=>{let m=e.pointAt(u),{x:f,y,z:v}=se(m[0],m[1],m[2],n);return new W.Vector3(f,y,v)},s=Rr(e),l=r,c=i(r),d=[c];for(let u=0;u<Ie;u++){let m=r+a*(u+1)/Ie,f=i(m);me(l,c,m,f,i,s,dr,d),d.push(f),l=m,c=f}return d}function me(e,n,t,r,o,a,i,s){if(i<=0)return;let l=(e+t)/2,c=o(l),d=wr(c,n,r),u=Tr(n,c,r);d<=a&&u<=mr||(me(e,n,l,c,o,a,i-1,s),s.push(c),me(l,c,t,r,o,a,i-1,s))}function Rr(e){let n=e.getBoundingBox(),t=n.min,r=n.max;re(n);let o=Math.hypot(r[0]-t[0],r[1]-t[1],r[2]-t[2]);return Math.max(o*ur,1e-6)}function Tr(e,n,t){let r=n.clone().sub(e),o=t.clone().sub(n),a=r.length(),i=o.length();if(a===0||i===0)return 0;let s=Math.max(-1,Math.min(1,r.dot(o)/(a*i)));return Math.acos(s)}function wr(e,n,t){let r=t.clone().sub(n),o=r.lengthSq();if(o===0)return e.distanceTo(n);let a=Math.max(0,Math.min(1,e.clone().sub(n).dot(r)/o)),i=n.clone().addScaledVector(r,a);return e.distanceTo(i)}function Be(e,n){let t=_nullishCoalesce(n, () => (1));return{color:new W.Color(_nullishCoalesce(e, () => (cr))),transparent:t<1,opacity:t}}var _fflate = require('fflate');var Fe=1096174675,vr=1515605075,Ue= exports.w =3,ze=1,fe= exports.x =1,Mr=2,xr= exports.y =4,Cr= exports.z =8,Ar= exports.A =16;var Sr=1,_e=12,ke=56;function Ee(e){let n=Pr(Or(e)),t=new DataView(n.buffer,n.byteOffset,n.byteLength);if(n.byteLength<_e)throw G("Blob too small to contain SLVA header.",{expectedBytes:_e,availableBytes:n.byteLength});let r=0,o=t.getUint32(r,!0);if(r+=4,o!==Fe)throw G(`Invalid SLVA magic: 0x${o.toString(16)}`,{expectedMagic:`0x${Fe.toString(16)}`,actualMagic:`0x${o.toString(16)}`});let a=t.getUint32(r,!0);if(r+=4,a<ze||a>Ue)throw G(`Unsupported SLVA version: ${a}`,{minSupportedVersion:ze,maxSupportedVersion:Ue,actualVersion:a});let i=t.getUint32(r,!0);if(r+=4,r+i>n.byteLength)throw G("Insufficient data to read metadata JSON.",{expectedBytes:i,availableBytes:n.byteLength-r,offset:r});let s=n.subarray(r,r+i);r+=i;let l;try{l=JSON.parse(Ir(s))}catch(U){throw G(`Failed to parse metadata JSON: ${U instanceof Error?U.message:String(U)}`,{metadataLen:i})}if(r+ke>n.byteLength)throw G("Insufficient data to read geometry header.",{expectedBytes:ke,availableBytes:n.byteLength-r,offset:r});let c=t.getUint32(r,!0);r+=4;let d=t.getFloat64(r,!0);r+=8;let u=t.getFloat64(r,!0);r+=8;let m=t.getFloat64(r,!0);r+=8;let f=t.getFloat64(r,!0);r+=8;let y=t.getFloat64(r,!0);r+=8;let v=t.getFloat64(r,!0);r+=8;let g=t.getUint32(r,!0);r+=4;let h=(c&fe)!==0,p=(c&xr)!==0,M=g*3,L=M*(h?4:2);if(r+L>n.byteLength)throw G("Insufficient data to read vertices.",{expectedBytes:L,availableBytes:n.byteLength-r,offset:r,useFloat32:h,vertexCount:g});let b=n.byteOffset+r,T;if(h?T=Ge(n.buffer,b,M):p?T=Fr(pe(n.buffer,b,M)):T=Vr(n.buffer,b,M),r+=L,r+4>n.byteLength)throw G("Insufficient data to read index count.",{expectedBytes:4,availableBytes:n.byteLength-r,offset:r});let C=t.getUint32(r,!0);r+=4;let I=(c&Mr)!==0,V=C*(I?2:4);if(r+V>n.byteLength)throw G("Insufficient data to read indices.",{expectedBytes:V,availableBytes:n.byteLength-r,offset:r,indexCount:C,useUint16Indices:I});let R=I?pe(n.buffer,n.byteOffset+r,C):Br(n.buffer,n.byteOffset+r,C);p&&(R=R instanceof Uint16Array?Ur(R):zr(R)),r+=V;let H=null;if((c&Cr)!==0){let U=Dr(n,t,r,g,p);H=U.uvs,r=U.offset}let F=null;return(c&Ar)!==0&&(F=Lr(n,r,g,p)),{metadata:l,flags:c,vertices:T,indices:R,origin:[d,u,m],scale:[f,y,v],uvs:H,colors:F}}var je=36;function Dr(e,n,t,r,o){if(t+je>e.byteLength)throw G("Insufficient data to read UV chunk header.",{expectedBytes:je,availableBytes:e.byteLength-t,offset:t});let a=n.getUint32(t,!0);t+=4;let i=n.getFloat64(t,!0);t+=8;let s=n.getFloat64(t,!0);t+=8;let l=n.getFloat64(t,!0);t+=8;let c=n.getFloat64(t,!0);t+=8;let d=r*2,u=a===Sr,m=d*(u?4:2);if(t+m>e.byteLength)throw G("Insufficient data to read UV chunk.",{expectedBytes:m,availableBytes:e.byteLength-t,offset:t,uvFormat:a,vertexCount:r});let f=e.byteOffset+t,y;if(u)y=Ge(e.buffer,f,d).slice();else{let v=pe(e.buffer,f,d);y=new Float32Array(d);let g=0,h=0;for(let p=0;p<d;p+=2)o?(g=g+X(v[p])&65535,h=h+X(v[p+1])&65535):(g=v[p],h=v[p+1]),y[p]=i+g*l,y[p+1]=s+h*c}return{uvs:y,offset:t+m}}function Lr(e,n,t,r){let o=t*3;if(n+o>e.byteLength)throw G("Insufficient data to read vertex-color chunk.",{expectedBytes:o,availableBytes:e.byteLength-n,offset:n,vertexCount:t});let a=e.subarray(n,n+o);if(!r)return a.slice();let i=new Uint8Array(o),s=0,l=0,c=0;for(let d=0;d<o;d+=3)s=s+X(a[d])&255,l=l+X(a[d+1])&255,c=c+X(a[d+2])&255,i[d]=s,i[d+1]=l,i[d+2]=c;return i}function Or(e){return typeof e=="string"?_chunkD7A3YIYDcjs.j.call(void 0, e):e instanceof Uint8Array?e:new Uint8Array(e)}function Pr(e){if(e.byteLength<8)return e;let n=new DataView(e.buffer,e.byteOffset,e.byteLength);if(n.getUint32(0,!0)!==vr)return e;let t=n.getUint32(4,!0),r=e.subarray(8),o=Math.max(r.byteLength*1032+1024,1<<20);if(t>o)throw G("SLVZ header declares an implausible uncompressed length",{uncompressedLen:t,deflatedBytes:r.byteLength,maxPlausibleLen:o});try{return _fflate.inflateSync.call(void 0, r,{out:new Uint8Array(t)})}catch(a){throw G(`Failed to inflate SLVZ blob: ${a instanceof Error?a.message:String(a)}`,{uncompressedLen:t,deflatedBytes:r.byteLength})}}function Ir(e){if(typeof TextDecoder<"u")return new TextDecoder("utf-8").decode(e);if(typeof globalThis.Buffer<"u")return globalThis.Buffer.from(e).toString("utf-8");throw new (0, _chunkD7A3YIYDcjs.d)("No UTF-8 decoder available in this environment.",_chunkD7A3YIYDcjs.c.INVALID_STATE)}function Vr(e,n,t){if(t===0)return new Int16Array(0);if(n%2===0)return new Int16Array(e,n,t);let r=new Uint8Array(t*2);return r.set(new Uint8Array(e,n,t*2)),new Int16Array(r.buffer)}function Ge(e,n,t){if(t===0)return new Float32Array(0);if(n%4===0)return new Float32Array(e,n,t);let r=new Uint8Array(t*4);return r.set(new Uint8Array(e,n,t*4)),new Float32Array(r.buffer)}function pe(e,n,t){if(t===0)return new Uint16Array(0);if(n%2===0)return new Uint16Array(e,n,t);let r=new Uint8Array(t*2);return r.set(new Uint8Array(e,n,t*2)),new Uint16Array(r.buffer)}function Br(e,n,t){if(t===0)return new Uint32Array(0);if(n%4===0)return new Uint32Array(e,n,t);let r=new Uint8Array(t*4);return r.set(new Uint8Array(e,n,t*4)),new Uint32Array(r.buffer)}function X(e){return e>>>1^-(e&1)}function Fr(e){let n=new Int16Array(e.length),t=0,r=0,o=0;for(let a=0;a<e.length;a+=3)t=t+X(e[a])<<16>>16,r=r+X(e[a+1])<<16>>16,o=o+X(e[a+2])<<16>>16,n[a]=t,n[a+1]=r,n[a+2]=o;return n}function Ur(e){let n=new Uint16Array(e.length),t=0;for(let r=0;r<e.length;r++)t=t+X(e[r])&65535,n[r]=t;return n}function zr(e){let n=new Uint32Array(e.length),t=0;for(let r=0;r<e.length;r++)t=t+X(e[r])>>>0,n[r]=t;return n}function G(e,n){return new (0, _chunkD7A3YIYDcjs.d)(e,_chunkD7A3YIYDcjs.c.VALIDATION_ERROR,{context:n})}async function lo(e,n){let{debug:t=!1}=_nullishCoalesce(n, () => ({})),r=t?performance.now():0;try{let o=performance.now(),a=JSON.parse(e),i=performance.now()-o;return await he(a,n,{parseTime:i,perfStart:r})}catch(o){return _chunkD7A3YIYDcjs.e.call(void 0, ).error("Error parsing mesh batch:",o),[]}}async function he(e,n,t){let{mergeByMaterial:r=!0,applyTransforms:o=!0,debug:a=!1,material:i}=_nullishCoalesce(n, () => ({})),{parseTime:s=0,perfStart:l=a?performance.now():0}=_nullishCoalesce(t, () => ({}));try{let c=performance.now(),d=Ee(e.compressedData),u=performance.now()-c,m=a?$r(e.compressedData):0;return Ne(d,{mergeByMaterial:r,applyTransforms:o,debug:a,material:i,parseTime:s,decodeTime:u,perfStart:l,blobBytes:m,fallback:{materials:e.materials,groups:e.groups,sourceComponentId:e.sourceComponentId}})}catch(c){return _chunkD7A3YIYDcjs.e.call(void 0, ).error("Error parsing mesh batch object:",c),[]}}async function co(e,n){let{mergeByMaterial:t=!0,applyTransforms:r=!0,debug:o=!1,material:a}=_nullishCoalesce(n, () => ({})),i=o?performance.now():0;try{let s=performance.now(),l=Ee(e),c=performance.now()-s,d=e.byteLength;return Ne(l,{mergeByMaterial:t,applyTransforms:r,debug:o,material:a,parseTime:0,decodeTime:c,perfStart:i,blobBytes:d})}catch(s){return _chunkD7A3YIYDcjs.e.call(void 0, ).error("Error parsing mesh batch blob:",s),[]}}function Ne(e,n){let{mergeByMaterial:t,applyTransforms:r,debug:o,material:a,parseTime:i,decodeTime:s,perfStart:l,blobBytes:c,fallback:d}=n,u=_nullishCoalesce(_nullishCoalesce(e.metadata.materials, () => (_optionalChain([d, 'optionalAccess', _237 => _237.materials]))), () => ([])),m=_nullishCoalesce(_nullishCoalesce(e.metadata.groups, () => (_optionalChain([d, 'optionalAccess', _238 => _238.groups]))), () => ([])),f=_nullishCoalesce(_optionalChain([d, 'optionalAccess', _239 => _239.sourceComponentId]), () => (e.metadata.sourceComponentId)),y=(e.flags&fe)!==0,v=y?kr(e.vertices,r):_r(e.vertices,e.origin,e.scale,r);if(o){let w=e.vertices.byteLength+e.indices.byteLength;_chunkD7A3YIYDcjs.e.call(void 0, ).debug("Mesh Batch Stats:"),_chunkD7A3YIYDcjs.e.call(void 0, ).debug(` Materials: ${u.length} | Groups: ${m.length}`),_chunkD7A3YIYDcjs.e.call(void 0, ).debug(` Vertices: ${e.vertices.length/3} | Indices: ${e.indices.length}`),_chunkD7A3YIYDcjs.e.call(void 0, ).debug(` Format: ${y?"float32":"int16 quantized"}`),_chunkD7A3YIYDcjs.e.call(void 0, ).debug(` Blob: ${(c/1024/1024).toFixed(2)} MB | Geometry on wire: ${(w/1024/1024).toFixed(2)} MB`)}let g=performance.now(),h=u.map(w=>jr(w,{vertexColors:e.colors!=null,appearance:a})),p=[];for(let w of m)if(t&&w.meshes.length>1){let L=Nr(w,v,e.indices,h,e.uvs,e.colors);L.userData.sourceComponentId=_nullishCoalesce(f, () => (null)),p.push(L)}else{let L=Wr(w,v,e.indices,h,e.uvs,e.colors);for(let b of L)b.userData.sourceComponentId=_nullishCoalesce(f, () => (null));p.push(...L)}let M=performance.now()-g;if(o){let w=performance.now()-l;_chunkD7A3YIYDcjs.e.call(void 0, ).debug("Performance:"),i>0&&_chunkD7A3YIYDcjs.e.call(void 0, ).debug(` Parse JSON: ${i.toFixed(2)}ms`),_chunkD7A3YIYDcjs.e.call(void 0, ).debug(` Decode binary: ${s.toFixed(2)}ms`),_chunkD7A3YIYDcjs.e.call(void 0, ).debug(` Create Meshes: ${M.toFixed(2)}ms`),_chunkD7A3YIYDcjs.e.call(void 0, ).debug(` Total: ${w.toFixed(2)}ms`)}return Promise.resolve(p)}function _r(e,n,t,r){let o=new Float32Array(e.length),a=n[0],i=n[1],s=n[2],l=t[0],c=t[1],d=t[2];for(let u=0;u<e.length;u+=3)o[u]=a+(e[u]+32767)*l,o[u+1]=i+(e[u+1]+32767)*c,o[u+2]=s+(e[u+2]+32767)*d;return o}function kr(e,n){return e}function jr(e,n){let t=Re(e.color),r=_nullishCoalesce(_optionalChain([n, 'optionalAccess', _240 => _240.vertexColors]), () => (!1)),o=_optionalChain([n, 'optionalAccess', _241 => _241.appearance]),a=new B.MeshPhysicalMaterial({color:t,metalness:e.metalness,roughness:e.roughness,opacity:e.opacity,transparent:e.transparent,vertexColors:r,side:_optionalChain([o, 'optionalAccess', _242 => _242.cullBackfaces])?B.FrontSide:B.DoubleSide,polygonOffset:!0,polygonOffsetFactor:.5,polygonOffsetUnits:.5,depthWrite:!0,depthTest:!0});return _optionalChain([o, 'optionalAccess', _243 => _243.envMapIntensity])!=null&&(a.envMapIntensity=o.envMapIntensity),r&&Gr(a),e.map&&Pe(a,e.map),a}function Gr(e){e.onBeforeCompile=n=>{n.vertexShader=n.vertexShader.replace("#include <color_vertex>",`#include <color_vertex>
|
|
55
|
-
#if defined( USE_COLOR ) || defined( USE_COLOR_ALPHA )
|
|
56
|
-
vColor.rgb = mix(
|
|
57
|
-
vColor.rgb / 12.92,
|
|
58
|
-
pow( ( vColor.rgb + 0.055 ) / 1.055, vec3( 2.4 ) ),
|
|
59
|
-
step( vec3( 0.04045 ), vColor.rgb )
|
|
60
|
-
);
|
|
61
|
-
#endif`)}}function Nr(e,n,t,r,o=null,a=null){let i=0,s=0;for(let p of e.meshes)i+=p.vertexCount,s+=p.indexCount;let l=new Float32Array(i*3),c=new Uint32Array(s),d=o?new Float32Array(i*2):null,u=a?new Uint8Array(i*3):null,m=0,f=0;for(let p of e.meshes){let M=p.vertexStart*3,w=p.vertexCount*3;if(l.set(n.subarray(M,M+w),m*3),d&&o){let T=p.vertexStart*2;d.set(o.subarray(T,T+p.vertexCount*2),m*2)}u&&a&&u.set(a.subarray(M,M+w),m*3);let L=t.subarray(p.indexStart,p.indexStart+p.indexCount),b=m-p.vertexStart;if(b===0)c.set(L,f);else for(let T=0;T<L.length;T++)c[f+T]=L[T]+b;m+=p.vertexCount,f+=p.indexCount}let y=new B.BufferGeometry;y.setAttribute("position",new B.BufferAttribute(l,3)),y.setIndex(new B.BufferAttribute(c,1)),d&&y.setAttribute("uv",new B.BufferAttribute(d,2)),u&&y.setAttribute("color",new B.BufferAttribute(u,3,!0)),y.computeVertexNormals();let v=new B.Mesh(y,r[e.materialId]),g=e.meshes[0],h=e.meshes.map(p=>p.name).filter(p=>p&&p.length>0);return v.name=h.length>0?h[0]:`merged_material_${e.materialId}`,v.castShadow=!0,v.receiveShadow=!0,v.userData={source:"compute",name:v.name,layer:_nullishCoalesce(_optionalChain([g, 'optionalAccess', _244 => _244.layer]), () => ("")),originalIndex:_nullishCoalesce(_optionalChain([g, 'optionalAccess', _245 => _245.originalIndex]), () => (0)),metadata:_nullishCoalesce(_optionalChain([g, 'optionalAccess', _246 => _246.metadata]), () => ({})),mergedFrom:e.meshes.slice(1).map(p=>({name:p.name,layer:p.layer,originalIndex:p.originalIndex}))},v}function Wr(e,n,t,r,o=null,a=null){let i=[];for(let s of e.meshes){let l=s.vertexStart*3,c=s.vertexCount*3,d=n.slice(l,l+c),u=t.subarray(s.indexStart,s.indexStart+s.indexCount),m=new Uint32Array(u.length),f=s.vertexStart;for(let g=0;g<u.length;g++)m[g]=u[g]-f;let y=new B.BufferGeometry;if(y.setAttribute("position",new B.BufferAttribute(d,3)),y.setIndex(new B.BufferAttribute(m,1)),o){let g=s.vertexStart*2,h=o.slice(g,g+s.vertexCount*2);y.setAttribute("uv",new B.BufferAttribute(h,2))}if(a){let g=a.slice(l,l+c);y.setAttribute("color",new B.BufferAttribute(g,3,!0))}y.computeVertexNormals();let v=new B.Mesh(y,r[e.materialId]);v.name=s.name,v.userData={source:"compute",name:s.name,layer:_nullishCoalesce(s.layer, () => ("")),originalIndex:s.originalIndex,metadata:_nullishCoalesce(s.metadata, () => ({}))},v.castShadow=!0,v.receiveShadow=!0,i.push(v)}return i}function $r(e){return Math.floor(e.length*3/4)}var Yr={Millimeters:1/1e3,Centimeters:1/100,Meters:1,Inches:1/39.37,Feet:1/3.28084},Xr="Display";async function ho(e,n){let t=performance.now(),r=[],{allowScaling:o=!0,allowAutoPosition:a=!0,rhino:i,debug:s=!1,parsing:l={}}=_nullishCoalesce(n, () => ({}));try{let c=o?qr(e.modelunits):1;return await Zr(e,r,c,l,i,s),a&&en(r),r}catch(c){throw tn(c,r),c}finally{s&&nn(t)}}function qr(e){return _nullishCoalesce(Yr[e], () => (1))}async function Zr(e,n,t,r,o,a){for(let i of e.values){let s=i.InnerTree;for(let l in s){let c=s[l];c&&await Jr(c,n,t,r,o,a)}}}async function Jr(e,n,t,r,o,a){for(let i of e){if(!i.type.includes(Xr))continue;let s={mergeByMaterial:!0,applyTransforms:!0,debug:!1,...r},l=Kr(i.data);if(!l){_chunkD7A3YIYDcjs.e.call(void 0, ).error("Error parsing display batch envelope: invalid JSON");continue}let c=await he(l,s),d=Ve(l.items,{rhino:o,applyTransforms:s.applyTransforms}),u=[...c,...d];if(t!==1)for(let m of u)m.scale.set(t,t,t);n.push(...u),a&&_chunkD7A3YIYDcjs.e.call(void 0, ).debug(`Extracted ${c.length} meshes and ${d.length} items from batch`)}}function Kr(e){return typeof e=="string"?Qr(e):e}function Qr(e){try{return JSON.parse(e)}catch (e4){return}}function en(e){if(e.length===0)return;let n=Q(e);Te(e,n.min.z,"z")}function tn(e,n){_chunkD7A3YIYDcjs.e.call(void 0, ).error("An unexpected error occurred:",e),rn(n)}function rn(e){for(let n of e){let t=n;t.geometry&&t.geometry.dispose(),t.material&&(Array.isArray(t.material)?t.material.forEach(r=>r.dispose()):t.material.dispose())}}function nn(e){let n=performance.now()-e;_chunkD7A3YIYDcjs.e.call(void 0, ).info("Time to process meshes:",`${n.toFixed(2)}ms`)}exports.a = sn; exports.b = Re; exports.c = Te; exports.d = Q; exports.e = we; exports.f = He; exports.g = ve; exports.h = ne; exports.i = xe; exports.j = ht; exports.k = yn; exports.l = Ce; exports.m = Se; exports.n = Ot; exports.o = Le; exports.p = Oe; exports.q = On; exports.r = Bt; exports.s = Wn; exports.t = ar; exports.u = Ve; exports.v = Fe; exports.w = Ue; exports.x = fe; exports.y = xr; exports.z = Cr; exports.A = Ar; exports.B = Ee; exports.C = lo; exports.D = he; exports.E = co; exports.F = Yr; exports.G = ho;
|
|
62
|
-
//# sourceMappingURL=chunk-4JNRO7TX.cjs.map
|