@selvajs/compute 3.1.0-beta.3 → 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.
Files changed (56) hide show
  1. package/dist/chunk-54O6BO24.js +4 -0
  2. package/dist/chunk-54O6BO24.js.map +1 -0
  3. package/dist/chunk-7KFBCOZM.cjs +2 -0
  4. package/dist/chunk-7KFBCOZM.cjs.map +1 -0
  5. package/dist/chunk-EZRBMUXT.cjs +62 -0
  6. package/dist/chunk-EZRBMUXT.cjs.map +1 -0
  7. package/dist/chunk-GF6ZIJWX.cjs +4 -0
  8. package/dist/chunk-GF6ZIJWX.cjs.map +1 -0
  9. package/dist/chunk-ORGJSKR4.js +62 -0
  10. package/dist/chunk-ORGJSKR4.js.map +1 -0
  11. package/dist/chunk-PJATLYMU.js +2 -0
  12. package/dist/chunk-PJATLYMU.js.map +1 -0
  13. package/dist/core.cjs +1 -1
  14. package/dist/core.d.cts +40 -3
  15. package/dist/core.d.ts +40 -3
  16. package/dist/core.js +1 -1
  17. package/dist/grasshopper.cjs +1 -1
  18. package/dist/grasshopper.cjs.map +1 -1
  19. package/dist/grasshopper.d.cts +220 -20
  20. package/dist/grasshopper.d.ts +220 -20
  21. package/dist/grasshopper.js +1 -1
  22. package/dist/{handle-files-9pkEgDIp.d.cts → handle-files-DMnx92gr.d.cts} +46 -10
  23. package/dist/{handle-files-9pkEgDIp.d.ts → handle-files-DMnx92gr.d.ts} +46 -10
  24. package/dist/index.cjs +1 -1
  25. package/dist/index.cjs.map +1 -1
  26. package/dist/index.d.cts +4 -4
  27. package/dist/index.d.ts +4 -4
  28. package/dist/index.js +1 -1
  29. package/dist/{types-V7G83j5m.d.cts → types-C9YpTbr3.d.cts} +27 -6
  30. package/dist/{types-V7G83j5m.d.ts → types-C9YpTbr3.d.ts} +27 -6
  31. package/dist/{types-B-JygDUF.d.ts → types-Ci8Z0-hF.d.cts} +92 -20
  32. package/dist/{types-DGeAQnkB.d.cts → types-DuOh5XqS.d.ts} +92 -20
  33. package/dist/visualization-C3YOGQTW.js +2 -0
  34. package/dist/visualization-CERJ6XDX.cjs +2 -0
  35. package/dist/visualization-CERJ6XDX.cjs.map +1 -0
  36. package/dist/visualization.cjs +1 -1
  37. package/dist/visualization.d.cts +104 -13
  38. package/dist/visualization.d.ts +104 -13
  39. package/dist/visualization.js +1 -1
  40. package/package.json +1 -1
  41. package/dist/chunk-CTZ4ZOSM.js +0 -2
  42. package/dist/chunk-CTZ4ZOSM.js.map +0 -1
  43. package/dist/chunk-EUMIGWRX.cjs +0 -4
  44. package/dist/chunk-EUMIGWRX.cjs.map +0 -1
  45. package/dist/chunk-HNG75VAI.js +0 -55
  46. package/dist/chunk-HNG75VAI.js.map +0 -1
  47. package/dist/chunk-JIE3W4KP.cjs +0 -2
  48. package/dist/chunk-JIE3W4KP.cjs.map +0 -1
  49. package/dist/chunk-L3CNT26S.cjs +0 -55
  50. package/dist/chunk-L3CNT26S.cjs.map +0 -1
  51. package/dist/chunk-QAOHGIFT.js +0 -4
  52. package/dist/chunk-QAOHGIFT.js.map +0 -1
  53. package/dist/visualization-SI2GEY4M.cjs +0 -2
  54. package/dist/visualization-SI2GEY4M.cjs.map +0 -1
  55. package/dist/visualization-UJZN4PJD.js +0 -2
  56. /package/dist/{visualization-UJZN4PJD.js.map → visualization-C3YOGQTW.js.map} +0 -0
package/dist/index.d.cts CHANGED
@@ -1,7 +1,7 @@
1
1
  export { Logger, camelcaseKeys, enableDebugLogging, fetchRhinoCompute, getLogger, setLogger, toCamelCase } from './core.cjs';
2
- export { C as ComputeServerStats, E as ErrorCode, a as ErrorCodes, F as FileBaseInfo, b as FileData, P as ProcessedFile, R as RhinoComputeError, d as downloadFileData, e as extractFilesFromComputeResponse } from './handle-files-9pkEgDIp.cjs';
3
- export { C as ComputeConfig, R as RetryPolicy, a as RhinoModelUnit, S as ServerTiming } from './types-V7G83j5m.cjs';
4
- export { CacheOptions, DataTreeValue, GetValuesOptions, GetValuesResult, GrasshopperClient, GrasshopperResponseProcessor, ParsedContext, SchedulerMode, SolveContext, SolveOptions, SolveResult, SolveScheduler, SolveSchedulerOptions, TreeBuilder, fetchDefinitionIO, fetchParsedDefinitionIO, processInput, processInputs, solveGrasshopperDefinition } from './grasshopper.cjs';
5
- export { B as BooleanInputType, D as DataItem, a as DataTree, b as DataTreeDefault, c as DataTreePath, d as DefaultValue, F as FileInputType, G as GeometryInputType, e as GrasshopperComputeConfig, f as GrasshopperComputeResponse, g as GrasshopperParsedIO, h as GrasshopperParsedIORaw, i as GrasshopperRequestSchema, I as InnerTreeData, j as InputParam, k as InputParamSchema, N as NumericInputType, O as OutputParamSchema, l as OutputType, T as TextInputType, V as ValueListInputType } from './types-DGeAQnkB.cjs';
2
+ export { C as ComputeServerStats, E as ErrorCode, a as ErrorCodes, F as FileBaseInfo, b as FileData, P as ProcessedFile, R as RhinoComputeError, d as downloadFileData, e as extractFilesFromComputeResponse } from './handle-files-DMnx92gr.cjs';
3
+ export { C as ComputeConfig, R as RetryPolicy, a as RhinoModelUnit, S as ServerTiming } from './types-C9YpTbr3.cjs';
4
+ export { CacheOptions, DataTreeValue, DefinitionRef, GetValuesOptions, GetValuesResult, GrasshopperClient, GrasshopperResponseProcessor, ParsedContext, SchedulerMode, SolveContext, SolveDefinition, SolveOptions, SolveResult, SolveScheduler, SolveSchedulerOptions, TreeBuilder, fetchDefinitionIO, fetchParsedDefinitionIO, hashDefinition, hashSolveInput, isDefinitionRef, processInput, processInputs, solveGrasshopperDefinition, stableStringify } from './grasshopper.cjs';
5
+ export { B as BooleanInputType, D as DataItem, a as DataTree, b as DataTreeDefault, c as DataTreePath, d as DefaultValue, F as FileInputType, G as GeometryInputType, e as GrasshopperComputeConfig, f as GrasshopperComputeResponse, g as GrasshopperParsedIO, h as GrasshopperParsedIORaw, i as GrasshopperRequestSchema, I as InnerTreeData, j as InputParam, k as InputParamSchema, N as NumericInputType, O as OutputParamSchema, l as OutputType, T as TextInputType, V as ValueListInputType } from './types-Ci8Z0-hF.cjs';
6
6
  import 'three';
7
7
  import 'rhino3dm';
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  export { Logger, camelcaseKeys, enableDebugLogging, fetchRhinoCompute, getLogger, setLogger, toCamelCase } from './core.js';
2
- export { C as ComputeServerStats, E as ErrorCode, a as ErrorCodes, F as FileBaseInfo, b as FileData, P as ProcessedFile, R as RhinoComputeError, d as downloadFileData, e as extractFilesFromComputeResponse } from './handle-files-9pkEgDIp.js';
3
- export { C as ComputeConfig, R as RetryPolicy, a as RhinoModelUnit, S as ServerTiming } from './types-V7G83j5m.js';
4
- export { CacheOptions, DataTreeValue, GetValuesOptions, GetValuesResult, GrasshopperClient, GrasshopperResponseProcessor, ParsedContext, SchedulerMode, SolveContext, SolveOptions, SolveResult, SolveScheduler, SolveSchedulerOptions, TreeBuilder, fetchDefinitionIO, fetchParsedDefinitionIO, processInput, processInputs, solveGrasshopperDefinition } from './grasshopper.js';
5
- export { B as BooleanInputType, D as DataItem, a as DataTree, b as DataTreeDefault, c as DataTreePath, d as DefaultValue, F as FileInputType, G as GeometryInputType, e as GrasshopperComputeConfig, f as GrasshopperComputeResponse, g as GrasshopperParsedIO, h as GrasshopperParsedIORaw, i as GrasshopperRequestSchema, I as InnerTreeData, j as InputParam, k as InputParamSchema, N as NumericInputType, O as OutputParamSchema, l as OutputType, T as TextInputType, V as ValueListInputType } from './types-B-JygDUF.js';
2
+ export { C as ComputeServerStats, E as ErrorCode, a as ErrorCodes, F as FileBaseInfo, b as FileData, P as ProcessedFile, R as RhinoComputeError, d as downloadFileData, e as extractFilesFromComputeResponse } from './handle-files-DMnx92gr.js';
3
+ export { C as ComputeConfig, R as RetryPolicy, a as RhinoModelUnit, S as ServerTiming } from './types-C9YpTbr3.js';
4
+ export { CacheOptions, DataTreeValue, DefinitionRef, GetValuesOptions, GetValuesResult, GrasshopperClient, GrasshopperResponseProcessor, ParsedContext, SchedulerMode, SolveContext, SolveDefinition, SolveOptions, SolveResult, SolveScheduler, SolveSchedulerOptions, TreeBuilder, fetchDefinitionIO, fetchParsedDefinitionIO, hashDefinition, hashSolveInput, isDefinitionRef, processInput, processInputs, solveGrasshopperDefinition, stableStringify } from './grasshopper.js';
5
+ export { B as BooleanInputType, D as DataItem, a as DataTree, b as DataTreeDefault, c as DataTreePath, d as DefaultValue, F as FileInputType, G as GeometryInputType, e as GrasshopperComputeConfig, f as GrasshopperComputeResponse, g as GrasshopperParsedIO, h as GrasshopperParsedIORaw, i as GrasshopperRequestSchema, I as InnerTreeData, j as InputParam, k as InputParamSchema, N as NumericInputType, O as OutputParamSchema, l as OutputType, T as TextInputType, V as ValueListInputType } from './types-DuOh5XqS.js';
6
6
  import 'three';
7
7
  import 'rhino3dm';
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import{a as d,b as g,c as h,d as i,e as j,f as k,g as l,h as n,i as q}from"./chunk-CTZ4ZOSM.js";import{c as o,d as r,e,f,g as m,l as p,n as t,o as x,p as a,q as b,r as c}from"./chunk-QAOHGIFT.js";export{t as ComputeServerStats,o as ErrorCodes,h as GrasshopperClient,i as GrasshopperResponseProcessor,r as RhinoComputeError,g as SolveScheduler,q as TreeBuilder,a as camelcaseKeys,c as downloadFileData,m as enableDebugLogging,b as extractFilesFromComputeResponse,l as fetchDefinitionIO,n as fetchParsedDefinitionIO,p as fetchRhinoCompute,e as getLogger,j as processInput,k as processInputs,f as setLogger,d as solveGrasshopperDefinition,x as toCamelCase};
1
+ import{a as d,b as g,c as h,d as i,e as j,f as k,g as l,h as n,i as q,j as s,k as u,l as v,m as w}from"./chunk-PJATLYMU.js";import{c as o,d as r,e,f,g as m,l as p,n as t,o as x,p as a,s as b,t as c}from"./chunk-54O6BO24.js";export{t as ComputeServerStats,o as ErrorCodes,l as GrasshopperClient,n as GrasshopperResponseProcessor,r as RhinoComputeError,k as SolveScheduler,w as TreeBuilder,a as camelcaseKeys,c as downloadFileData,m as enableDebugLogging,b as extractFilesFromComputeResponse,u as fetchDefinitionIO,v as fetchParsedDefinitionIO,p as fetchRhinoCompute,e as getLogger,j as hashDefinition,i as hashSolveInput,d as isDefinitionRef,q as processInput,s as processInputs,f as setLogger,g as solveGrasshopperDefinition,h as stableStringify,x as toCamelCase};
2
2
  //# sourceMappingURL=index.js.map
@@ -6,7 +6,16 @@ type RhinoModelUnit = 'None' | 'Microns' | 'Millimeters' | 'Centimeters' | 'Mete
6
6
  * Retry policy for transient errors (network, 502, 503, 504, optionally 429).
7
7
  *
8
8
  * Retries use exponential backoff with jitter, capped at `maxDelayMs`.
9
- * If the server returns `Retry-After`, that value is honored instead.
9
+ * If the server returns `Retry-After`, that value is honored instead — even
10
+ * above `maxDelayMs` (the server's stated window wins), up to an absolute
11
+ * 60s safety cap.
12
+ *
13
+ * Duplicate-POST caveat: every compute request is a POST. A network error can
14
+ * strike after the body was sent but before the response arrived — in that
15
+ * window the server may already have executed the request, and a retry runs it
16
+ * again. Compute solves are deterministic/idempotent so this is normally just
17
+ * wasted work, but callers wrapping non-idempotent endpoints should keep
18
+ * `attempts` at 0 (the default).
10
19
  */
11
20
  interface RetryPolicy {
12
21
  /** Maximum number of retry attempts after the initial request (default: 0). */
@@ -53,8 +62,14 @@ interface ComputeConfig {
53
62
  /** @deprecated Renamed to `suppressBrowserWarning`. */
54
63
  suppressClientSideWarning?: boolean;
55
64
  /**
56
- * Per-request timeout in milliseconds. Set to `0` to disable (useful for long
57
- * solves where any timeout is the wrong answer). Default: no timeout.
65
+ * Per-**attempt** timeout in milliseconds. Set to `0` to disable (useful for
66
+ * long solves where any timeout is the wrong answer). Default: no timeout.
67
+ *
68
+ * This is NOT a total deadline: the timeout is re-armed for every retry
69
+ * attempt, so with `retry: { attempts: N }` the worst-case wall clock is
70
+ * `(N + 1) × timeoutMs` plus backoff sleeps between attempts. Callers that
71
+ * need a hard overall deadline should pass their own `signal` (e.g. from
72
+ * `AbortSignal.timeout(totalMs)`), which wins over any pending retry.
58
73
  *
59
74
  * Uses `AbortSignal.timeout` so the timer is not throttled when the tab is hidden.
60
75
  */
@@ -74,12 +89,18 @@ interface ComputeConfig {
74
89
  * breakdown when the response carries one (the `/grasshopper` solve endpoint
75
90
  * emits `decode;dur=N, solve;dur=N, encode;dur=N` on every response).
76
91
  *
77
- * Fires on success only, once per request, before the parsed body is
78
- * returned. The transport stays response-type-agnostic — this is a side
92
+ * Fires once per request, before the parsed body is returned — on success
93
+ * and on the HTTP-500 partial-success path (a solve that completed with
94
+ * Grasshopper errors still carries real timings, often the slowest ones).
95
+ * The transport stays response-type-agnostic — this is a side
79
96
  * channel for telemetry, it does not change what a call returns. Use it to
80
97
  * feed a perf monitor or surface "solve took Nms" without server log access.
98
+ *
99
+ * `requestId` is the same id sent as the `X-Request-ID` header and used in
100
+ * this library's own debug logs — use it to correlate a timing entry with
101
+ * a specific request when multiple solves are in flight concurrently.
81
102
  */
82
- onServerTiming?: (timing: ServerTiming) => void;
103
+ onServerTiming?: (timing: ServerTiming, requestId: string) => void;
83
104
  }
84
105
  /**
85
106
  * Parsed `Server-Timing` metrics from a Compute response. Durations are in
@@ -6,7 +6,16 @@ type RhinoModelUnit = 'None' | 'Microns' | 'Millimeters' | 'Centimeters' | 'Mete
6
6
  * Retry policy for transient errors (network, 502, 503, 504, optionally 429).
7
7
  *
8
8
  * Retries use exponential backoff with jitter, capped at `maxDelayMs`.
9
- * If the server returns `Retry-After`, that value is honored instead.
9
+ * If the server returns `Retry-After`, that value is honored instead — even
10
+ * above `maxDelayMs` (the server's stated window wins), up to an absolute
11
+ * 60s safety cap.
12
+ *
13
+ * Duplicate-POST caveat: every compute request is a POST. A network error can
14
+ * strike after the body was sent but before the response arrived — in that
15
+ * window the server may already have executed the request, and a retry runs it
16
+ * again. Compute solves are deterministic/idempotent so this is normally just
17
+ * wasted work, but callers wrapping non-idempotent endpoints should keep
18
+ * `attempts` at 0 (the default).
10
19
  */
11
20
  interface RetryPolicy {
12
21
  /** Maximum number of retry attempts after the initial request (default: 0). */
@@ -53,8 +62,14 @@ interface ComputeConfig {
53
62
  /** @deprecated Renamed to `suppressBrowserWarning`. */
54
63
  suppressClientSideWarning?: boolean;
55
64
  /**
56
- * Per-request timeout in milliseconds. Set to `0` to disable (useful for long
57
- * solves where any timeout is the wrong answer). Default: no timeout.
65
+ * Per-**attempt** timeout in milliseconds. Set to `0` to disable (useful for
66
+ * long solves where any timeout is the wrong answer). Default: no timeout.
67
+ *
68
+ * This is NOT a total deadline: the timeout is re-armed for every retry
69
+ * attempt, so with `retry: { attempts: N }` the worst-case wall clock is
70
+ * `(N + 1) × timeoutMs` plus backoff sleeps between attempts. Callers that
71
+ * need a hard overall deadline should pass their own `signal` (e.g. from
72
+ * `AbortSignal.timeout(totalMs)`), which wins over any pending retry.
58
73
  *
59
74
  * Uses `AbortSignal.timeout` so the timer is not throttled when the tab is hidden.
60
75
  */
@@ -74,12 +89,18 @@ interface ComputeConfig {
74
89
  * breakdown when the response carries one (the `/grasshopper` solve endpoint
75
90
  * emits `decode;dur=N, solve;dur=N, encode;dur=N` on every response).
76
91
  *
77
- * Fires on success only, once per request, before the parsed body is
78
- * returned. The transport stays response-type-agnostic — this is a side
92
+ * Fires once per request, before the parsed body is returned — on success
93
+ * and on the HTTP-500 partial-success path (a solve that completed with
94
+ * Grasshopper errors still carries real timings, often the slowest ones).
95
+ * The transport stays response-type-agnostic — this is a side
79
96
  * channel for telemetry, it does not change what a call returns. Use it to
80
97
  * feed a perf monitor or surface "solve took Nms" without server log access.
98
+ *
99
+ * `requestId` is the same id sent as the `X-Request-ID` header and used in
100
+ * this library's own debug logs — use it to correlate a timing entry with
101
+ * a specific request when multiple solves are in flight concurrently.
81
102
  */
82
- onServerTiming?: (timing: ServerTiming) => void;
103
+ onServerTiming?: (timing: ServerTiming, requestId: string) => void;
83
104
  }
84
105
  /**
85
106
  * Parsed `Server-Timing` metrics from a Compute response. Durations are in
@@ -1,4 +1,4 @@
1
- import { C as ComputeConfig, a as RhinoModelUnit } from './types-V7G83j5m.js';
1
+ import { C as ComputeConfig, a as RhinoModelUnit } from './types-C9YpTbr3.cjs';
2
2
  import { RhinoModule } from 'rhino3dm';
3
3
 
4
4
  /**
@@ -42,16 +42,39 @@ type InnerTreeData = {
42
42
  [path in DataTreePath]: DataItem[];
43
43
  };
44
44
  /**
45
- * Tree with parameter metadata (used in compute responses)
45
+ * Tree with parameter metadata (used in compute requests and responses).
46
+ *
47
+ * Field casing varies by server branch: stock mcneel compute (8.x/9.x)
48
+ * serializes `Resthopper.IO.DataTree` in PascalCase (`ParamName`/`InnerTree`
49
+ * — the C# class carries no `[JsonProperty]` attributes), while
50
+ * camelCase-serializing forks return `paramName`/`innerTree` instead. This
51
+ * client always *sends* PascalCase (see `DataTree.toCompute()` in
52
+ * `data-tree.ts`), so the PascalCase fields remain the canonical/required
53
+ * shape; the optional camelCase fields exist so responses from camelCase
54
+ * forks are representable without casts. Code that must read trees across
55
+ * both server families should use `readField`/`hasField`
56
+ * (`@/core/utils/read-field`, case-insensitive) rather than direct property
57
+ * access — `warnOnEmptyInnerTrees` in `solve.ts` is the reference example.
46
58
  */
47
59
  interface DataTree {
60
+ /** PascalCase — stock mcneel servers, and the request shape this client sends. */
48
61
  InnerTree: InnerTreeData;
62
+ /** PascalCase — stock mcneel servers, and the request shape this client sends. */
49
63
  ParamName: string;
64
+ /** camelCase — sent instead of `InnerTree` by camelCase server forks. */
65
+ innerTree?: InnerTreeData;
66
+ /** camelCase — sent instead of `ParamName` by camelCase server forks. */
67
+ paramName?: string;
50
68
  }
51
69
  /**
52
- * Output types supported from Grasshopper/Rhino Compute
70
+ * Output types supported from Grasshopper/Rhino Compute.
71
+ *
72
+ * The trailing `(string & {})` keeps the union open — servers can return any
73
+ * GOO type name — without collapsing the whole union to `string` the way a
74
+ * bare `| string` does, so the known literals keep driving autocomplete and
75
+ * `Extract<>`-style narrowing.
53
76
  */
54
- type OutputType = 'System.String' | 'System.Double' | 'System.Int32' | 'System.Boolean' | 'Rhino.Geometry.Point3d' | 'Rhino.Geometry.Line' | 'Rhino.Geometry.Circle' | 'Rhino.Geometry.Arc' | 'Rhino.Geometry.NurbsCurve' | 'Rhino.Geometry.Brep' | 'Rhino.Geometry.Mesh' | 'Rhino.Geometry.Vector3d' | 'Rhino.Geometry.Plane' | 'Rhino.Geometry.Box' | string;
77
+ type OutputType = 'System.String' | 'System.Double' | 'System.Int32' | 'System.Boolean' | 'Rhino.Geometry.Point3d' | 'Rhino.Geometry.Line' | 'Rhino.Geometry.Circle' | 'Rhino.Geometry.Arc' | 'Rhino.Geometry.NurbsCurve' | 'Rhino.Geometry.Brep' | 'Rhino.Geometry.Mesh' | 'Rhino.Geometry.Vector3d' | 'Rhino.Geometry.Plane' | 'Rhino.Geometry.Box' | (string & {});
55
78
  /**
56
79
  * Union type for all possible default value types
57
80
  */
@@ -207,18 +230,34 @@ interface GrasshopperRequestSchema extends GrasshopperBaseSchema, GrasshopperDef
207
230
  /**
208
231
  * Response from Grasshopper compute server
209
232
  * Includes all schema fields + computed results
233
+ *
234
+ * `pointer` is deliberately excluded (`Omit`): the solve layer (`runSolve` in
235
+ * `solve.ts`) splits the server's echoed `pointer` off as the solve's
236
+ * `cacheKey` and strips it from the returned response, so client-returned
237
+ * responses never carry it.
238
+ *
239
+ * The schema-echo fields (`cachesolve`/`modelunits`/`dataversion`) stay
240
+ * optional as inherited from {@link GrasshopperBaseSchema}: the server echoes
241
+ * them back when set, but nothing client-side enforces their presence — don't
242
+ * rely on them without a fallback.
210
243
  */
211
- interface GrasshopperComputeResponse extends GrasshopperBaseSchema, GrasshopperDefinitionSource {
212
- /** Whether cache was used (always present in response) */
213
- cachesolve: boolean;
214
- /** Model units (always present in response) */
244
+ interface GrasshopperComputeResponse extends GrasshopperBaseSchema, Omit<GrasshopperDefinitionSource, 'pointer'> {
245
+ /**
246
+ * Model units the definition was solved in. Every conforming server response
247
+ * carries this (it drives downstream scaling, e.g. the webdisplay parser),
248
+ * but note it is not validated client-side — a non-conforming server or
249
+ * hand-built mock may omit it at runtime.
250
+ */
215
251
  modelunits: RhinoModelUnit;
216
- /** Base64 encoded algorithm (always present in response) */
217
- algo: string;
252
+ /**
253
+ * The server echoes the request's full base64 definition back as `algo`, but the client strips
254
+ * it before returning — retaining it would pin a multi-MB copy of the definition per response,
255
+ * multiplied by every cache that holds responses. Always `undefined` on client-returned
256
+ * responses (inherited optional field from {@link GrasshopperDefinitionSource}).
257
+ */
258
+ algo?: string | null;
218
259
  /** Filename of the definition (always present in response) */
219
260
  filename: string | null;
220
- /** Data version */
221
- dataversion: 7 | 8;
222
261
  /** Recursion level used */
223
262
  recursionlevel?: number;
224
263
  /** Output values organized by parameter */
@@ -362,7 +401,10 @@ interface DisplayItemBase extends DisplayIdentity {
362
401
  /** Opacity 0–1. Omitted means fully opaque. */
363
402
  opacity?: number;
364
403
  }
365
- /** A world position in Rhino's Z-up frame, in Rhino's `{X,Y,Z}` casing. Rotated to Three on parse. */
404
+ /**
405
+ * A world position in Rhino's Z-up frame, in Rhino's `{X,Y,Z}` casing. Used unchanged on parse —
406
+ * the Three scene IS Rhino's Z-up frame, so no rotation is applied (see `../coordinate-transform.ts`).
407
+ */
366
408
  interface DisplayPosition {
367
409
  X: number;
368
410
  Y: number;
@@ -385,7 +427,7 @@ interface DisplayCurve extends DisplayItemBase {
385
427
  /** A single point, shipped raw (no rhino3dm decode), rendered as one vertex of a `THREE.Points`. */
386
428
  interface DisplayPoint extends DisplayItemBase {
387
429
  kind: 'point';
388
- /** World position in Rhino Z-up; the shared Rhino→Three transform is applied on parse. */
430
+ /** World position in Rhino Z-up, used directly — the Three scene shares Rhino's Z-up frame. */
389
431
  position: DisplayPosition;
390
432
  }
391
433
  /**
@@ -416,11 +458,17 @@ interface SerializableMaterial {
416
458
  * Metadata for a single mesh within a batch.
417
459
  *
418
460
  * Offsets and counts are expressed in **vertex-count units** (not float components) and
419
- * **index-count units**. To address the typed-array storage:
420
- * - vertex component offset = `vertexStart * 3`
421
- * - vertex component count = `vertexCount * 3`
422
- * - index byte offset = `indexStart * 4`
423
- * - index count = `indexCount`
461
+ * **index-count units** — i.e. element offsets into the decoded typed arrays, which is how
462
+ * consumers address them (`indices.subarray(indexStart, indexStart + indexCount)`). To address
463
+ * the typed-array storage:
464
+ * - vertex component offset = `vertexStart * 3`
465
+ * - vertex component count = `vertexCount * 3`
466
+ * - index element offset = `indexStart`
467
+ * - index count = `indexCount`
468
+ *
469
+ * If you need *byte* offsets, multiply by the element size, which depends on the blob's flags:
470
+ * indices are 2 bytes each for `FLAG_UINT16_INDICES` (wire v2+) blobs and 4 bytes for uint32
471
+ * blobs; vertex components are 2 bytes (int16 quantized) or 4 bytes (`FLAG_FLOAT32`).
424
472
  */
425
473
  interface MeshMetadata {
426
474
  name: string;
@@ -495,6 +543,30 @@ interface MeshBatchParsingOptions {
495
543
  applyTransforms?: boolean;
496
544
  /** Enable performance monitoring in console. Defaults to false. */
497
545
  debug?: boolean;
546
+ /**
547
+ * Appearance dials applied to every material built from this batch. These drive how "rendered"
548
+ * vs "matte technical" the meshes look; they are set once at parse time (materials are rebuilt
549
+ * per solve). Runtime restyling of an already-built scene lives in the viewer's `setRenderStyle`.
550
+ */
551
+ material?: MaterialAppearanceOptions;
552
+ }
553
+ /**
554
+ * How compute meshes read visually. Bundled so a caller can pick a coherent look ('technical' vs
555
+ * 'rendered') by setting all three together rather than dialing each in isolation.
556
+ */
557
+ interface MaterialAppearanceOptions {
558
+ /**
559
+ * Multiplier on the HDR image-based-lighting reflection strength. ~0.5 reads matte/technical,
560
+ * ~1.3 reads glossy/presentation. Default 1 (three.js's own default — unchanged look).
561
+ */
562
+ envMapIntensity?: number;
563
+ /**
564
+ * Cull back faces (`THREE.FrontSide`) instead of rendering both sides (`THREE.DoubleSide`).
565
+ * FrontSide gives cleaner interior shading, a crisper silhouette, and less overdraw on closed
566
+ * solids — but open surfaces (which Rhino also emits) then vanish when viewed from behind.
567
+ * Default false (keep DoubleSide) to stay safe for surface geometry.
568
+ */
569
+ cullBackfaces?: boolean;
498
570
  }
499
571
  /**
500
572
  * Options for extracting and processing meshes from compute responses.
@@ -515,4 +587,4 @@ interface MeshExtractionOptions {
515
587
  debug?: boolean;
516
588
  }
517
589
 
518
- export type { BooleanInputType as B, DataItem as D, FileInputType as F, GeometryInputType as G, InnerTreeData as I, MeshExtractionOptions as M, NumericInputType as N, OutputParamSchema as O, TextInputType as T, ValueListInputType as V, DataTree as a, DataTreeDefault as b, DataTreePath as c, DefaultValue as d, GrasshopperComputeConfig as e, GrasshopperComputeResponse as f, GrasshopperParsedIO as g, GrasshopperParsedIORaw as h, GrasshopperRequestSchema as i, InputParam as j, InputParamSchema as k, OutputType as l, MeshBatchParsingOptions as m, DisplayBatch as n, DisplayItem as o, DisplayCurve as p, DisplayIdentity as q, DisplayItemBase as r, DisplayPoint as s, DisplayPosition as t, MeshBatch as u };
590
+ export type { BooleanInputType as B, DataItem as D, FileInputType as F, GeometryInputType as G, InnerTreeData as I, MaterialAppearanceOptions as M, NumericInputType as N, OutputParamSchema as O, TextInputType as T, ValueListInputType as V, DataTree as a, DataTreeDefault as b, DataTreePath as c, DefaultValue as d, GrasshopperComputeConfig as e, GrasshopperComputeResponse as f, GrasshopperParsedIO as g, GrasshopperParsedIORaw as h, GrasshopperRequestSchema as i, InputParam as j, InputParamSchema as k, OutputType as l, MeshExtractionOptions as m, MeshBatchParsingOptions as n, DisplayBatch as o, DisplayItem as p, DisplayCurve as q, DisplayIdentity as r, DisplayItemBase as s, DisplayPoint as t, DisplayPosition as u, MeshBatch as v };
@@ -1,4 +1,4 @@
1
- import { C as ComputeConfig, a as RhinoModelUnit } from './types-V7G83j5m.cjs';
1
+ import { C as ComputeConfig, a as RhinoModelUnit } from './types-C9YpTbr3.js';
2
2
  import { RhinoModule } from 'rhino3dm';
3
3
 
4
4
  /**
@@ -42,16 +42,39 @@ type InnerTreeData = {
42
42
  [path in DataTreePath]: DataItem[];
43
43
  };
44
44
  /**
45
- * Tree with parameter metadata (used in compute responses)
45
+ * Tree with parameter metadata (used in compute requests and responses).
46
+ *
47
+ * Field casing varies by server branch: stock mcneel compute (8.x/9.x)
48
+ * serializes `Resthopper.IO.DataTree` in PascalCase (`ParamName`/`InnerTree`
49
+ * — the C# class carries no `[JsonProperty]` attributes), while
50
+ * camelCase-serializing forks return `paramName`/`innerTree` instead. This
51
+ * client always *sends* PascalCase (see `DataTree.toCompute()` in
52
+ * `data-tree.ts`), so the PascalCase fields remain the canonical/required
53
+ * shape; the optional camelCase fields exist so responses from camelCase
54
+ * forks are representable without casts. Code that must read trees across
55
+ * both server families should use `readField`/`hasField`
56
+ * (`@/core/utils/read-field`, case-insensitive) rather than direct property
57
+ * access — `warnOnEmptyInnerTrees` in `solve.ts` is the reference example.
46
58
  */
47
59
  interface DataTree {
60
+ /** PascalCase — stock mcneel servers, and the request shape this client sends. */
48
61
  InnerTree: InnerTreeData;
62
+ /** PascalCase — stock mcneel servers, and the request shape this client sends. */
49
63
  ParamName: string;
64
+ /** camelCase — sent instead of `InnerTree` by camelCase server forks. */
65
+ innerTree?: InnerTreeData;
66
+ /** camelCase — sent instead of `ParamName` by camelCase server forks. */
67
+ paramName?: string;
50
68
  }
51
69
  /**
52
- * Output types supported from Grasshopper/Rhino Compute
70
+ * Output types supported from Grasshopper/Rhino Compute.
71
+ *
72
+ * The trailing `(string & {})` keeps the union open — servers can return any
73
+ * GOO type name — without collapsing the whole union to `string` the way a
74
+ * bare `| string` does, so the known literals keep driving autocomplete and
75
+ * `Extract<>`-style narrowing.
53
76
  */
54
- type OutputType = 'System.String' | 'System.Double' | 'System.Int32' | 'System.Boolean' | 'Rhino.Geometry.Point3d' | 'Rhino.Geometry.Line' | 'Rhino.Geometry.Circle' | 'Rhino.Geometry.Arc' | 'Rhino.Geometry.NurbsCurve' | 'Rhino.Geometry.Brep' | 'Rhino.Geometry.Mesh' | 'Rhino.Geometry.Vector3d' | 'Rhino.Geometry.Plane' | 'Rhino.Geometry.Box' | string;
77
+ type OutputType = 'System.String' | 'System.Double' | 'System.Int32' | 'System.Boolean' | 'Rhino.Geometry.Point3d' | 'Rhino.Geometry.Line' | 'Rhino.Geometry.Circle' | 'Rhino.Geometry.Arc' | 'Rhino.Geometry.NurbsCurve' | 'Rhino.Geometry.Brep' | 'Rhino.Geometry.Mesh' | 'Rhino.Geometry.Vector3d' | 'Rhino.Geometry.Plane' | 'Rhino.Geometry.Box' | (string & {});
55
78
  /**
56
79
  * Union type for all possible default value types
57
80
  */
@@ -207,18 +230,34 @@ interface GrasshopperRequestSchema extends GrasshopperBaseSchema, GrasshopperDef
207
230
  /**
208
231
  * Response from Grasshopper compute server
209
232
  * Includes all schema fields + computed results
233
+ *
234
+ * `pointer` is deliberately excluded (`Omit`): the solve layer (`runSolve` in
235
+ * `solve.ts`) splits the server's echoed `pointer` off as the solve's
236
+ * `cacheKey` and strips it from the returned response, so client-returned
237
+ * responses never carry it.
238
+ *
239
+ * The schema-echo fields (`cachesolve`/`modelunits`/`dataversion`) stay
240
+ * optional as inherited from {@link GrasshopperBaseSchema}: the server echoes
241
+ * them back when set, but nothing client-side enforces their presence — don't
242
+ * rely on them without a fallback.
210
243
  */
211
- interface GrasshopperComputeResponse extends GrasshopperBaseSchema, GrasshopperDefinitionSource {
212
- /** Whether cache was used (always present in response) */
213
- cachesolve: boolean;
214
- /** Model units (always present in response) */
244
+ interface GrasshopperComputeResponse extends GrasshopperBaseSchema, Omit<GrasshopperDefinitionSource, 'pointer'> {
245
+ /**
246
+ * Model units the definition was solved in. Every conforming server response
247
+ * carries this (it drives downstream scaling, e.g. the webdisplay parser),
248
+ * but note it is not validated client-side — a non-conforming server or
249
+ * hand-built mock may omit it at runtime.
250
+ */
215
251
  modelunits: RhinoModelUnit;
216
- /** Base64 encoded algorithm (always present in response) */
217
- algo: string;
252
+ /**
253
+ * The server echoes the request's full base64 definition back as `algo`, but the client strips
254
+ * it before returning — retaining it would pin a multi-MB copy of the definition per response,
255
+ * multiplied by every cache that holds responses. Always `undefined` on client-returned
256
+ * responses (inherited optional field from {@link GrasshopperDefinitionSource}).
257
+ */
258
+ algo?: string | null;
218
259
  /** Filename of the definition (always present in response) */
219
260
  filename: string | null;
220
- /** Data version */
221
- dataversion: 7 | 8;
222
261
  /** Recursion level used */
223
262
  recursionlevel?: number;
224
263
  /** Output values organized by parameter */
@@ -362,7 +401,10 @@ interface DisplayItemBase extends DisplayIdentity {
362
401
  /** Opacity 0–1. Omitted means fully opaque. */
363
402
  opacity?: number;
364
403
  }
365
- /** A world position in Rhino's Z-up frame, in Rhino's `{X,Y,Z}` casing. Rotated to Three on parse. */
404
+ /**
405
+ * A world position in Rhino's Z-up frame, in Rhino's `{X,Y,Z}` casing. Used unchanged on parse —
406
+ * the Three scene IS Rhino's Z-up frame, so no rotation is applied (see `../coordinate-transform.ts`).
407
+ */
366
408
  interface DisplayPosition {
367
409
  X: number;
368
410
  Y: number;
@@ -385,7 +427,7 @@ interface DisplayCurve extends DisplayItemBase {
385
427
  /** A single point, shipped raw (no rhino3dm decode), rendered as one vertex of a `THREE.Points`. */
386
428
  interface DisplayPoint extends DisplayItemBase {
387
429
  kind: 'point';
388
- /** World position in Rhino Z-up; the shared Rhino→Three transform is applied on parse. */
430
+ /** World position in Rhino Z-up, used directly — the Three scene shares Rhino's Z-up frame. */
389
431
  position: DisplayPosition;
390
432
  }
391
433
  /**
@@ -416,11 +458,17 @@ interface SerializableMaterial {
416
458
  * Metadata for a single mesh within a batch.
417
459
  *
418
460
  * Offsets and counts are expressed in **vertex-count units** (not float components) and
419
- * **index-count units**. To address the typed-array storage:
420
- * - vertex component offset = `vertexStart * 3`
421
- * - vertex component count = `vertexCount * 3`
422
- * - index byte offset = `indexStart * 4`
423
- * - index count = `indexCount`
461
+ * **index-count units** — i.e. element offsets into the decoded typed arrays, which is how
462
+ * consumers address them (`indices.subarray(indexStart, indexStart + indexCount)`). To address
463
+ * the typed-array storage:
464
+ * - vertex component offset = `vertexStart * 3`
465
+ * - vertex component count = `vertexCount * 3`
466
+ * - index element offset = `indexStart`
467
+ * - index count = `indexCount`
468
+ *
469
+ * If you need *byte* offsets, multiply by the element size, which depends on the blob's flags:
470
+ * indices are 2 bytes each for `FLAG_UINT16_INDICES` (wire v2+) blobs and 4 bytes for uint32
471
+ * blobs; vertex components are 2 bytes (int16 quantized) or 4 bytes (`FLAG_FLOAT32`).
424
472
  */
425
473
  interface MeshMetadata {
426
474
  name: string;
@@ -495,6 +543,30 @@ interface MeshBatchParsingOptions {
495
543
  applyTransforms?: boolean;
496
544
  /** Enable performance monitoring in console. Defaults to false. */
497
545
  debug?: boolean;
546
+ /**
547
+ * Appearance dials applied to every material built from this batch. These drive how "rendered"
548
+ * vs "matte technical" the meshes look; they are set once at parse time (materials are rebuilt
549
+ * per solve). Runtime restyling of an already-built scene lives in the viewer's `setRenderStyle`.
550
+ */
551
+ material?: MaterialAppearanceOptions;
552
+ }
553
+ /**
554
+ * How compute meshes read visually. Bundled so a caller can pick a coherent look ('technical' vs
555
+ * 'rendered') by setting all three together rather than dialing each in isolation.
556
+ */
557
+ interface MaterialAppearanceOptions {
558
+ /**
559
+ * Multiplier on the HDR image-based-lighting reflection strength. ~0.5 reads matte/technical,
560
+ * ~1.3 reads glossy/presentation. Default 1 (three.js's own default — unchanged look).
561
+ */
562
+ envMapIntensity?: number;
563
+ /**
564
+ * Cull back faces (`THREE.FrontSide`) instead of rendering both sides (`THREE.DoubleSide`).
565
+ * FrontSide gives cleaner interior shading, a crisper silhouette, and less overdraw on closed
566
+ * solids — but open surfaces (which Rhino also emits) then vanish when viewed from behind.
567
+ * Default false (keep DoubleSide) to stay safe for surface geometry.
568
+ */
569
+ cullBackfaces?: boolean;
498
570
  }
499
571
  /**
500
572
  * Options for extracting and processing meshes from compute responses.
@@ -515,4 +587,4 @@ interface MeshExtractionOptions {
515
587
  debug?: boolean;
516
588
  }
517
589
 
518
- export type { BooleanInputType as B, DataItem as D, FileInputType as F, GeometryInputType as G, InnerTreeData as I, MeshExtractionOptions as M, NumericInputType as N, OutputParamSchema as O, TextInputType as T, ValueListInputType as V, DataTree as a, DataTreeDefault as b, DataTreePath as c, DefaultValue as d, GrasshopperComputeConfig as e, GrasshopperComputeResponse as f, GrasshopperParsedIO as g, GrasshopperParsedIORaw as h, GrasshopperRequestSchema as i, InputParam as j, InputParamSchema as k, OutputType as l, MeshBatchParsingOptions as m, DisplayBatch as n, DisplayItem as o, DisplayCurve as p, DisplayIdentity as q, DisplayItemBase as r, DisplayPoint as s, DisplayPosition as t, MeshBatch as u };
590
+ export type { BooleanInputType as B, DataItem as D, FileInputType as F, GeometryInputType as G, InnerTreeData as I, MaterialAppearanceOptions as M, NumericInputType as N, OutputParamSchema as O, TextInputType as T, ValueListInputType as V, DataTree as a, DataTreeDefault as b, DataTreePath as c, DefaultValue as d, GrasshopperComputeConfig as e, GrasshopperComputeResponse as f, GrasshopperParsedIO as g, GrasshopperParsedIORaw as h, GrasshopperRequestSchema as i, InputParam as j, InputParamSchema as k, OutputType as l, MeshExtractionOptions as m, MeshBatchParsingOptions as n, DisplayBatch as o, DisplayItem as p, DisplayCurve as q, DisplayIdentity as r, DisplayItemBase as s, DisplayPoint as t, DisplayPosition as u, MeshBatch as v };
@@ -0,0 +1,2 @@
1
+ import{A as j,B as R,C as I,D,E as B,F as G,G as L,H as P,I as u,J as F,K as b,L as N,M as V,a as e,b as r,c as t,d as o,e as a,f as s,g as p,h as i,i as n,j as l,k as m,l as y,m as f,n as d,o as C,p as x,q as h,r as E,s as M,t as _,u as c,v as A,w as g,x as O,y as S,z as T}from"./chunk-ORGJSKR4.js";import"./chunk-54O6BO24.js";export{g as BINARY_MESH_MAGIC,S as BINARY_MESH_VERSION,O as COMPRESSED_MESH_MAGIC,n as EDGE_USERDATA_KIND,I as FLAG_DELTA_ENCODED,j as FLAG_FLOAT32,D as FLAG_HAS_UVS,B as FLAG_HAS_VERTEX_COLORS,R as FLAG_UINT16_INDICES,T as MIN_SUPPORTED_VERSION,e as Materials,N as SCALE_FACTORS,h as TEXTURE_CACHE_MAX_ENTRIES,L as UV_FORMAT_FLOAT32,G as UV_FORMAT_UINT16,l as addEdges,o as applyOffset,M as clearTextureCache,a as computeCombinedBoundingBox,s as createCameraController,p as createGrid,d as createLabelLayer,x as createMeasureTool,f as createRenderPipeline,i as createViewGizmo,V as getThreeMeshesFromComputeResponse,c as initThree,m as isEdgeOverlay,_ as materialAppearanceForStyle,P as parseBinaryMeshBatch,t as parseColor,A as parseDisplayItems,u as parseMeshBatch,b as parseMeshBatchBlob,F as parseMeshBatchObject,y as removeEdges,E as setTextureAnisotropy,C as snapToVertex,r as updateScene};
2
+ //# sourceMappingURL=visualization-C3YOGQTW.js.map
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkEZRBMUXTcjs = require('./chunk-EZRBMUXT.cjs');require('./chunk-GF6ZIJWX.cjs');exports.BINARY_MESH_MAGIC = _chunkEZRBMUXTcjs.w; exports.BINARY_MESH_VERSION = _chunkEZRBMUXTcjs.y; exports.COMPRESSED_MESH_MAGIC = _chunkEZRBMUXTcjs.x; exports.EDGE_USERDATA_KIND = _chunkEZRBMUXTcjs.i; exports.FLAG_DELTA_ENCODED = _chunkEZRBMUXTcjs.C; exports.FLAG_FLOAT32 = _chunkEZRBMUXTcjs.A; exports.FLAG_HAS_UVS = _chunkEZRBMUXTcjs.D; exports.FLAG_HAS_VERTEX_COLORS = _chunkEZRBMUXTcjs.E; exports.FLAG_UINT16_INDICES = _chunkEZRBMUXTcjs.B; exports.MIN_SUPPORTED_VERSION = _chunkEZRBMUXTcjs.z; exports.Materials = _chunkEZRBMUXTcjs.a; exports.SCALE_FACTORS = _chunkEZRBMUXTcjs.L; exports.TEXTURE_CACHE_MAX_ENTRIES = _chunkEZRBMUXTcjs.q; exports.UV_FORMAT_FLOAT32 = _chunkEZRBMUXTcjs.G; exports.UV_FORMAT_UINT16 = _chunkEZRBMUXTcjs.F; exports.addEdges = _chunkEZRBMUXTcjs.j; exports.applyOffset = _chunkEZRBMUXTcjs.d; exports.clearTextureCache = _chunkEZRBMUXTcjs.s; exports.computeCombinedBoundingBox = _chunkEZRBMUXTcjs.e; exports.createCameraController = _chunkEZRBMUXTcjs.f; exports.createGrid = _chunkEZRBMUXTcjs.g; exports.createLabelLayer = _chunkEZRBMUXTcjs.n; exports.createMeasureTool = _chunkEZRBMUXTcjs.p; exports.createRenderPipeline = _chunkEZRBMUXTcjs.m; exports.createViewGizmo = _chunkEZRBMUXTcjs.h; exports.getThreeMeshesFromComputeResponse = _chunkEZRBMUXTcjs.M; exports.initThree = _chunkEZRBMUXTcjs.u; exports.isEdgeOverlay = _chunkEZRBMUXTcjs.k; exports.materialAppearanceForStyle = _chunkEZRBMUXTcjs.t; exports.parseBinaryMeshBatch = _chunkEZRBMUXTcjs.H; exports.parseColor = _chunkEZRBMUXTcjs.c; exports.parseDisplayItems = _chunkEZRBMUXTcjs.v; exports.parseMeshBatch = _chunkEZRBMUXTcjs.I; exports.parseMeshBatchBlob = _chunkEZRBMUXTcjs.K; exports.parseMeshBatchObject = _chunkEZRBMUXTcjs.J; exports.removeEdges = _chunkEZRBMUXTcjs.l; exports.setTextureAnisotropy = _chunkEZRBMUXTcjs.r; exports.snapToVertex = _chunkEZRBMUXTcjs.o; exports.updateScene = _chunkEZRBMUXTcjs.b;
2
+ //# sourceMappingURL=visualization-CERJ6XDX.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/selva-compute/selva-compute/dist/visualization-CERJ6XDX.cjs"],"names":[],"mappings":"AAAA,iIAA6S,gCAA6B,82DAAi4B","file":"/home/runner/work/selva-compute/selva-compute/dist/visualization-CERJ6XDX.cjs"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkL3CNT26Scjs = require('./chunk-L3CNT26S.cjs');require('./chunk-EUMIGWRX.cjs');exports.EDGE_USERDATA_KIND = _chunkL3CNT26Scjs.h; exports.Materials = _chunkL3CNT26Scjs.q; exports.SCALE_FACTORS = _chunkL3CNT26Scjs.D; exports.addEdges = _chunkL3CNT26Scjs.i; exports.applyOffset = _chunkL3CNT26Scjs.c; exports.computeCombinedBoundingBox = _chunkL3CNT26Scjs.d; exports.createCameraController = _chunkL3CNT26Scjs.e; exports.createGrid = _chunkL3CNT26Scjs.f; exports.createLabelLayer = _chunkL3CNT26Scjs.m; exports.createMeasureTool = _chunkL3CNT26Scjs.o; exports.createRenderPipeline = _chunkL3CNT26Scjs.l; exports.createViewGizmo = _chunkL3CNT26Scjs.g; exports.getThreeMeshesFromComputeResponse = _chunkL3CNT26Scjs.E; exports.initThree = _chunkL3CNT26Scjs.p; exports.isEdgeOverlay = _chunkL3CNT26Scjs.j; exports.parseColor = _chunkL3CNT26Scjs.b; exports.parseDisplayItems = _chunkL3CNT26Scjs.r; exports.parseMeshBatchBlob = _chunkL3CNT26Scjs.C; exports.parseMeshBatchObject = _chunkL3CNT26Scjs.B; exports.removeEdges = _chunkL3CNT26Scjs.k; exports.snapToVertex = _chunkL3CNT26Scjs.n; exports.updateScene = _chunkL3CNT26Scjs.a;
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkEZRBMUXTcjs = require('./chunk-EZRBMUXT.cjs');require('./chunk-GF6ZIJWX.cjs');exports.EDGE_USERDATA_KIND = _chunkEZRBMUXTcjs.i; exports.Materials = _chunkEZRBMUXTcjs.a; exports.SCALE_FACTORS = _chunkEZRBMUXTcjs.L; exports.addEdges = _chunkEZRBMUXTcjs.j; exports.applyOffset = _chunkEZRBMUXTcjs.d; exports.computeCombinedBoundingBox = _chunkEZRBMUXTcjs.e; exports.createCameraController = _chunkEZRBMUXTcjs.f; exports.createGrid = _chunkEZRBMUXTcjs.g; exports.createLabelLayer = _chunkEZRBMUXTcjs.n; exports.createMeasureTool = _chunkEZRBMUXTcjs.p; exports.createRenderPipeline = _chunkEZRBMUXTcjs.m; exports.createViewGizmo = _chunkEZRBMUXTcjs.h; exports.getThreeMeshesFromComputeResponse = _chunkEZRBMUXTcjs.M; exports.initThree = _chunkEZRBMUXTcjs.u; exports.isEdgeOverlay = _chunkEZRBMUXTcjs.k; exports.parseColor = _chunkEZRBMUXTcjs.c; exports.parseDisplayItems = _chunkEZRBMUXTcjs.v; exports.parseMeshBatchBlob = _chunkEZRBMUXTcjs.K; exports.parseMeshBatchObject = _chunkEZRBMUXTcjs.J; exports.removeEdges = _chunkEZRBMUXTcjs.l; exports.snapToVertex = _chunkEZRBMUXTcjs.o; exports.updateScene = _chunkEZRBMUXTcjs.b;
2
2
  //# sourceMappingURL=visualization.cjs.map