@pascal-app/core 1.1.0 → 1.1.1

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 (124) hide show
  1. package/dist/agent-operations/__fixtures__/cases.d.ts +3 -2
  2. package/dist/agent-operations/__fixtures__/cases.d.ts.map +1 -1
  3. package/dist/agent-operations/__fixtures__/place-items-cases.d.ts.map +1 -1
  4. package/dist/agent-operations/__fixtures__/place-items-cases.js +28 -0
  5. package/dist/agent-operations/__fixtures__/roof-bearing-cases.d.ts +12209 -12209
  6. package/dist/agent-operations/asset-catalog.d.ts +21 -11
  7. package/dist/agent-operations/asset-catalog.d.ts.map +1 -1
  8. package/dist/agent-operations/asset-catalog.js +28 -10
  9. package/dist/agent-operations/asset-views.d.ts +8 -3
  10. package/dist/agent-operations/asset-views.d.ts.map +1 -1
  11. package/dist/agent-operations/asset-views.js +19 -3
  12. package/dist/agent-operations/batch.d.ts +7 -1
  13. package/dist/agent-operations/batch.d.ts.map +1 -1
  14. package/dist/agent-operations/batch.js +17 -2
  15. package/dist/agent-operations/catalog-asset.d.ts +15 -0
  16. package/dist/agent-operations/catalog-asset.d.ts.map +1 -0
  17. package/dist/agent-operations/catalog-asset.js +4 -0
  18. package/dist/agent-operations/circulation-spaces.d.ts +2963 -2963
  19. package/dist/agent-operations/design-brief.d.ts.map +1 -1
  20. package/dist/agent-operations/design-brief.js +2 -0
  21. package/dist/agent-operations/furnish-room.d.ts.map +1 -1
  22. package/dist/agent-operations/furnish-room.js +2 -1
  23. package/dist/agent-operations/index.d.ts +3 -0
  24. package/dist/agent-operations/index.d.ts.map +1 -1
  25. package/dist/agent-operations/index.js +4 -1
  26. package/dist/agent-operations/level-reads.d.ts.map +1 -1
  27. package/dist/agent-operations/level-reads.js +4 -1
  28. package/dist/agent-operations/place-in-room.d.ts.map +1 -1
  29. package/dist/agent-operations/place-in-room.js +2 -1
  30. package/dist/agent-operations/place-items.d.ts.map +1 -1
  31. package/dist/agent-operations/place-items.js +2 -1
  32. package/dist/agent-operations/scene-queries.d.ts +585 -585
  33. package/dist/agent-operations/scene-view.d.ts.map +1 -1
  34. package/dist/agent-operations/scene-view.js +38 -13
  35. package/dist/agent-operations/search-assets.d.ts.map +1 -1
  36. package/dist/agent-operations/search-assets.js +6 -0
  37. package/dist/agent-operations/types.d.ts +3 -2
  38. package/dist/agent-operations/types.d.ts.map +1 -1
  39. package/dist/agent-operations/usage-checks.js +18 -3
  40. package/dist/agent-tools/assets.js +1 -1
  41. package/dist/building/__fixtures__/wall-opening-cases.d.ts +234 -234
  42. package/dist/building/level-duplication.d.ts +3516 -3516
  43. package/dist/building/level-duplication.d.ts.map +1 -1
  44. package/dist/building/level-duplication.js +3 -1
  45. package/dist/building/wall-openings.d.ts +75 -75
  46. package/dist/commands/structure/shared.d.ts +3407 -3407
  47. package/dist/commands/structure/zone-wall-merge.d.ts +566 -566
  48. package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts +585 -585
  49. package/dist/index.d.ts +2 -0
  50. package/dist/index.d.ts.map +1 -1
  51. package/dist/index.js +2 -0
  52. package/dist/lib/__fixtures__/mezzanine.d.ts +9262 -9262
  53. package/dist/lib/absorb-wall-separators.d.ts +1344 -1344
  54. package/dist/lib/asset-storage.d.ts.map +1 -1
  55. package/dist/lib/asset-storage.js +3 -0
  56. package/dist/lib/floor-foundation-datum.d.ts.map +1 -1
  57. package/dist/lib/floor-foundation-datum.js +5 -1
  58. package/dist/lib/floorplan/context.d.ts +95 -0
  59. package/dist/lib/floorplan/context.d.ts.map +1 -0
  60. package/dist/lib/floorplan/context.js +155 -0
  61. package/dist/lib/floorplan/index.d.ts +6 -0
  62. package/dist/lib/floorplan/index.d.ts.map +1 -0
  63. package/dist/lib/floorplan/index.js +5 -0
  64. package/dist/lib/floorplan/marks.d.ts +71 -0
  65. package/dist/lib/floorplan/marks.d.ts.map +1 -0
  66. package/dist/lib/floorplan/marks.js +157 -0
  67. package/dist/lib/floorplan/plan-math.d.ts +18 -0
  68. package/dist/lib/floorplan/plan-math.d.ts.map +1 -0
  69. package/dist/lib/floorplan/plan-math.js +82 -0
  70. package/dist/lib/floorplan/svg-paths.d.ts +17 -0
  71. package/dist/lib/floorplan/svg-paths.d.ts.map +1 -0
  72. package/dist/lib/floorplan/svg-paths.js +92 -0
  73. package/dist/lib/floorplan/wall-affordances.d.ts +31 -0
  74. package/dist/lib/floorplan/wall-affordances.d.ts.map +1 -0
  75. package/dist/lib/floorplan/wall-affordances.js +24 -0
  76. package/dist/registry/__fixtures__/roof-planes.d.ts +69 -0
  77. package/dist/registry/__fixtures__/roof-planes.d.ts.map +1 -0
  78. package/dist/registry/__fixtures__/roof-planes.js +59 -0
  79. package/dist/registry/index.d.ts +2 -1
  80. package/dist/registry/index.d.ts.map +1 -1
  81. package/dist/registry/index.js +1 -0
  82. package/dist/registry/roofs.d.ts +34 -0
  83. package/dist/registry/roofs.d.ts.map +1 -0
  84. package/dist/registry/roofs.js +61 -0
  85. package/dist/registry/types.d.ts +30 -0
  86. package/dist/registry/types.d.ts.map +1 -1
  87. package/dist/registry/validate-relations.d.ts +5 -1
  88. package/dist/registry/validate-relations.d.ts.map +1 -1
  89. package/dist/registry/validate-relations.js +6 -2
  90. package/dist/schema/asset-url.d.ts +8 -0
  91. package/dist/schema/asset-url.d.ts.map +1 -1
  92. package/dist/schema/asset-url.js +17 -0
  93. package/dist/schema/nodes/roof.d.ts +1 -1
  94. package/dist/schema/nodes/roof.d.ts.map +1 -1
  95. package/dist/schema/nodes/roof.js +13 -8
  96. package/dist/schema/types.d.ts +1 -1
  97. package/dist/services/roof-level.d.ts.map +1 -1
  98. package/dist/services/roof-level.js +12 -2
  99. package/dist/services/roof-move.d.ts +4 -2
  100. package/dist/services/roof-move.d.ts.map +1 -1
  101. package/dist/services/roof-move.js +21 -9
  102. package/dist/spatial/usage-field/findings.d.ts +7 -1
  103. package/dist/spatial/usage-field/findings.d.ts.map +1 -1
  104. package/dist/spatial/usage-field/findings.js +42 -10
  105. package/dist/spatial/usage-field/path.d.ts.map +1 -1
  106. package/dist/spatial/usage-field/path.js +28 -18
  107. package/dist/store/actions/node-actions.d.ts +1641 -1641
  108. package/dist/store/scene-annotations.d.ts +1778 -1778
  109. package/dist/systems/document-reconcile.d.ts.map +1 -1
  110. package/dist/systems/document-reconcile.js +1 -2
  111. package/dist/systems/roof/roof-elevation.d.ts +11 -6
  112. package/dist/systems/roof/roof-elevation.d.ts.map +1 -1
  113. package/dist/systems/roof/roof-elevation.js +24 -11
  114. package/dist/systems/slab/__fixtures__/floor-step.d.ts +1622 -1622
  115. package/dist/systems/slab/__fixtures__/raised-room.d.ts +585 -585
  116. package/dist/systems/stair/stair-opening-preview.d.ts +1919 -1919
  117. package/dist/utils/ensure-scene-openings.d.ts +3409 -3409
  118. package/dist/utils/floor-plate-migration.d.ts +1344 -1344
  119. package/dist/utils/owned-floor-opening-migration.d.ts +1344 -1344
  120. package/dist/utils/reconcile-structure-on-load.d.ts +1641 -1641
  121. package/dist/utils/scene-bounds.d.ts +32 -0
  122. package/dist/utils/scene-bounds.d.ts.map +1 -0
  123. package/dist/utils/scene-bounds.js +201 -0
  124. package/package.json +1 -1
@@ -24,179 +24,47 @@ export declare const materializeLegacyAutoOpenings: (nodes: {
24
24
  fromIds: string[];
25
25
  } | undefined;
26
26
  } | undefined;
27
- id: `beam_${string}`;
28
- start: [number, number];
29
- end: [number, number];
30
- width: number;
31
- depth: number;
32
- size?: string | undefined;
33
- plies: number;
34
- material: "glulam" | "lvl" | "pressure-treated" | "sawn" | "steel";
35
- placement: "dropped" | "flush";
36
- topElevation?: number | undefined;
37
- supportSlabId?: string | undefined;
38
- type: "beam";
39
- } | {
40
- object: "node";
41
- name?: string | undefined;
42
- parentId: string | null;
43
- visible: boolean;
44
- camera?: {
45
- position: [number, number, number];
46
- target: [number, number, number];
47
- mode: "orthographic" | "perspective";
48
- fov?: number | undefined;
49
- zoom?: number | undefined;
50
- } | undefined;
51
- metadata: Record<string, unknown>;
52
- provenance?: {
53
- refs: {
54
- ns?: string | undefined;
55
- id: string;
56
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
57
- }[];
58
- lineage?: {
59
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
60
- fromIds: string[];
27
+ id: `bvent_${string}`;
28
+ material?: {
29
+ id?: string | undefined;
30
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
31
+ properties?: {
32
+ color: string;
33
+ roughness: number;
34
+ metalness: number;
35
+ opacity: number;
36
+ transparent: boolean;
37
+ side: "back" | "double" | "front";
61
38
  } | undefined;
62
- } | undefined;
63
- id: `measurement_${string}`;
64
- measurement: {
65
- kind: "volume";
66
- base: ({
67
- kind: "feature";
68
- reference: {
69
- nodeId: string;
70
- featureId: string;
71
- parameters?: Record<string, string | number | boolean> | undefined;
72
- };
73
- fallback: [number, number, number];
74
- } | [number, number, number])[];
75
- extrusion: [number, number, number];
76
- } | {
77
- kind: "distance";
78
- points: [{
79
- kind: "feature";
80
- reference: {
81
- nodeId: string;
82
- featureId: string;
83
- parameters?: Record<string, string | number | boolean> | undefined;
84
- };
85
- fallback: [number, number, number];
86
- } | [number, number, number], {
87
- kind: "feature";
88
- reference: {
89
- nodeId: string;
90
- featureId: string;
91
- parameters?: Record<string, string | number | boolean> | undefined;
92
- };
93
- fallback: [number, number, number];
94
- } | [number, number, number]];
95
- } | {
96
- kind: "angle";
97
- points: [{
98
- kind: "feature";
99
- reference: {
100
- nodeId: string;
101
- featureId: string;
102
- parameters?: Record<string, string | number | boolean> | undefined;
103
- };
104
- fallback: [number, number, number];
105
- } | [number, number, number], {
106
- kind: "feature";
107
- reference: {
108
- nodeId: string;
109
- featureId: string;
110
- parameters?: Record<string, string | number | boolean> | undefined;
111
- };
112
- fallback: [number, number, number];
113
- } | [number, number, number], {
114
- kind: "feature";
115
- reference: {
116
- nodeId: string;
117
- featureId: string;
118
- parameters?: Record<string, string | number | boolean> | undefined;
119
- };
120
- fallback: [number, number, number];
121
- } | [number, number, number]];
122
- } | {
123
- kind: "area";
124
- base: ({
125
- kind: "feature";
126
- reference: {
127
- nodeId: string;
128
- featureId: string;
129
- parameters?: Record<string, string | number | boolean> | undefined;
130
- };
131
- fallback: [number, number, number];
132
- } | [number, number, number])[];
133
- } | {
134
- kind: "perimeter";
135
- base: ({
136
- kind: "feature";
137
- reference: {
138
- nodeId: string;
139
- featureId: string;
140
- parameters?: Record<string, string | number | boolean> | undefined;
141
- };
142
- fallback: [number, number, number];
143
- } | [number, number, number])[];
144
- };
145
- type: "measurement";
146
- } | {
147
- object: "node";
148
- name?: string | undefined;
149
- parentId: string | null;
150
- visible: boolean;
151
- camera?: {
152
- position: [number, number, number];
153
- target: [number, number, number];
154
- mode: "orthographic" | "perspective";
155
- fov?: number | undefined;
156
- zoom?: number | undefined;
157
- } | undefined;
158
- metadata: Record<string, unknown>;
159
- provenance?: {
160
- refs: {
161
- ns?: string | undefined;
162
- id: string;
163
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
164
- }[];
165
- lineage?: {
166
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
167
- fromIds: string[];
39
+ texture?: {
40
+ url: string;
41
+ repeat?: [number, number] | undefined;
42
+ scale?: number | undefined;
43
+ offset?: [number, number] | undefined;
44
+ normalMap?: string | undefined;
45
+ normalScale?: number | undefined;
46
+ bumpMap?: string | undefined;
47
+ bumpScale?: number | undefined;
168
48
  } | undefined;
169
49
  } | undefined;
170
- id: `duct-segment_${string}`;
171
- path: [number, number, number][];
172
- autoHangers?: boolean | undefined;
173
- hangerOverrides?: Record<string, {
174
- fraction?: number | undefined;
175
- skipped?: boolean | undefined;
176
- hostId?: string | undefined;
177
- }> | undefined;
178
- hangerStyle?: "double" | "single" | undefined;
179
- hangerSpacing?: number | undefined;
180
- hangerMaxReach?: number | undefined;
181
- wallAttachment?: {
182
- wallId: `wall_${string}`;
183
- side: "back" | "front";
184
- startUV: [number, number];
185
- endUV: [number, number];
186
- offset: number;
187
- } | undefined;
188
- shape: "oval" | "rect" | "round";
189
- diameter: number;
50
+ slots?: Record<string, string> | undefined;
51
+ materialPreset: string;
52
+ roofSegmentId?: string | undefined;
53
+ position: [number, number, number];
54
+ rotation: number;
190
55
  width: number;
56
+ depth: number;
191
57
  height: number;
192
- roll: number;
193
- ductMaterial: "duct-board" | "flex" | "sheet-metal" | "spiral";
194
- seamDetail: boolean;
195
- insulated: boolean;
196
- insulationR: number;
197
- system: "return" | "supply";
198
- slots?: Record<string, string> | undefined;
199
- type: "duct-segment";
58
+ hoodOverhang: number;
59
+ topTaper: number;
60
+ capHeight: number;
61
+ capGap: number;
62
+ domeCurvature: number;
63
+ baseInset: number;
64
+ baseHeight: number;
65
+ cornerBevel: number;
66
+ style: "box" | "cap" | "dome";
67
+ type: "box-vent";
200
68
  } | {
201
69
  object: "node";
202
70
  name?: string | undefined;
@@ -221,223 +89,18 @@ export declare const materializeLegacyAutoOpenings: (nodes: {
221
89
  fromIds: string[];
222
90
  } | undefined;
223
91
  } | undefined;
224
- id: `floor-opening_${string}`;
225
- polygon: [number, number][];
226
- hostZoneId?: string | undefined;
227
- legacyPlateCuts?: Record<string, [number, number][][]> | undefined;
228
- legacyCeilingCuts?: Record<string, [number, number][][]> | undefined;
229
- source: string;
230
- ownerId?: string | undefined;
231
- surfaceId?: string | undefined;
232
- drawnOn: "ceiling" | "floor";
233
- cutsPrimary: boolean;
234
- cutsAdjacent: boolean;
235
- type: "floor-opening";
236
- } | {
237
- object: "node";
238
- name?: string | undefined;
239
- parentId: string | null;
240
- visible: boolean;
241
- camera?: {
242
- position: [number, number, number];
243
- target: [number, number, number];
244
- mode: "orthographic" | "perspective";
245
- fov?: number | undefined;
246
- zoom?: number | undefined;
247
- } | undefined;
248
- metadata: Record<string, unknown>;
249
- provenance?: {
250
- refs: {
251
- ns?: string | undefined;
252
- id: string;
253
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
254
- }[];
255
- lineage?: {
256
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
257
- fromIds: string[];
258
- } | undefined;
259
- } | undefined;
260
- id: `lineset_${string}`;
261
- path: [number, number, number][];
262
- suctionDiameter: number;
263
- liquidDiameter: number;
264
- insulated: boolean;
265
- type: "lineset";
266
- } | {
267
- object: "node";
268
- name?: string | undefined;
269
- parentId: string | null;
270
- visible: boolean;
271
- camera?: {
272
- position: [number, number, number];
273
- target: [number, number, number];
274
- mode: "orthographic" | "perspective";
275
- fov?: number | undefined;
276
- zoom?: number | undefined;
277
- } | undefined;
278
- metadata: Record<string, unknown>;
279
- provenance?: {
280
- refs: {
281
- ns?: string | undefined;
282
- id: string;
283
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
284
- }[];
285
- lineage?: {
286
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
287
- fromIds: string[];
288
- } | undefined;
289
- } | undefined;
290
- id: `pipe-trap_${string}`;
291
- position: [number, number, number];
292
- rotation: number;
293
- diameter: number;
294
- pipeMaterial: "abs" | "cast-iron" | "pvc";
295
- armLengthM: number;
296
- type: "pipe-trap";
297
- } | {
298
- object: "node";
299
- name?: string | undefined;
300
- parentId: string | null;
301
- visible: boolean;
302
- camera?: {
303
- position: [number, number, number];
304
- target: [number, number, number];
305
- mode: "orthographic" | "perspective";
306
- fov?: number | undefined;
307
- zoom?: number | undefined;
308
- } | undefined;
309
- metadata: Record<string, unknown>;
310
- provenance?: {
311
- refs: {
312
- ns?: string | undefined;
313
- id: string;
314
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
315
- }[];
316
- lineage?: {
317
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
318
- fromIds: string[];
319
- } | undefined;
320
- } | undefined;
321
- id: `scan_${string}`;
322
- url: string | null;
323
- captureSession: {
324
- sessionId: string;
325
- schemaVersion?: number | undefined;
326
- revisionId?: string | undefined;
327
- manifestUrl?: string | undefined;
328
- } | null;
329
- layers: Record<string, boolean>;
330
- position: [number, number, number];
331
- rotation: [number, number, number];
332
- scale: number;
333
- opacity: number;
334
- type: "scan";
335
- } | {
336
- object: "node";
337
- name?: string | undefined;
338
- parentId: string | null;
339
- visible: boolean;
340
- camera?: {
341
- position: [number, number, number];
342
- target: [number, number, number];
343
- mode: "orthographic" | "perspective";
344
- fov?: number | undefined;
345
- zoom?: number | undefined;
346
- } | undefined;
347
- metadata: Record<string, unknown>;
348
- provenance?: {
349
- refs: {
350
- ns?: string | undefined;
351
- id: string;
352
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
353
- }[];
354
- lineage?: {
355
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
356
- fromIds: string[];
357
- } | undefined;
358
- } | undefined;
359
- id: `slab_${string}`;
360
- material?: {
361
- id?: string | undefined;
362
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
363
- properties?: {
364
- color: string;
365
- roughness: number;
366
- metalness: number;
367
- opacity: number;
368
- transparent: boolean;
369
- side: "back" | "double" | "front";
370
- } | undefined;
371
- texture?: {
372
- url: string;
373
- repeat?: [number, number] | undefined;
374
- scale?: number | undefined;
375
- offset?: [number, number] | undefined;
376
- normalMap?: string | undefined;
377
- normalScale?: number | undefined;
378
- bumpMap?: string | undefined;
379
- bumpScale?: number | undefined;
380
- } | undefined;
381
- } | undefined;
382
- materialPreset?: string | undefined;
383
- slots?: Record<string, string> | undefined;
384
- polygon: [number, number][];
385
- holes: [number, number][][];
386
- holeMetadata: {
387
- source: "elevator" | "floor-opening" | "manual" | "room" | "stair";
388
- openingId?: string | undefined;
389
- stairId?: string | undefined;
390
- elevatorId?: string | undefined;
391
- }[];
392
- elevation: number;
393
- floorHeight?: number | undefined;
394
- referenceFloorElevation?: number | undefined;
395
- foundation?: {
396
- type: "none" | "solid";
397
- material?: string | {
398
- id?: string | undefined;
399
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
400
- properties?: {
401
- color: string;
402
- roughness: number;
403
- metalness: number;
404
- opacity: number;
405
- transparent: boolean;
406
- side: "back" | "double" | "front";
407
- } | undefined;
408
- texture?: {
409
- url: string;
410
- repeat?: [number, number] | undefined;
411
- scale?: number | undefined;
412
- offset?: [number, number] | undefined;
413
- normalMap?: string | undefined;
414
- normalScale?: number | undefined;
415
- bumpMap?: string | undefined;
416
- bumpScale?: number | undefined;
417
- } | undefined;
418
- } | undefined;
419
- } | undefined;
420
- thickness: number;
421
- recessed: boolean;
422
- recessedRimElevation?: number | undefined;
423
- fillToTerrain?: boolean | undefined;
424
- boundary?: "auto" | undefined;
425
- support?: "open" | undefined;
426
- plateRole?: "base" | "platform" | "sunken" | undefined;
427
- railing?: {
428
- start: [number, number];
429
- end: [number, number];
430
- }[] | undefined;
431
- zoneIds?: string[] | undefined;
432
- associatedZoneIds?: string[] | undefined;
433
- autoFromWalls: boolean;
434
- surfaceScript?: {
435
- kind: "script";
436
- meta?: {
437
- description?: string | undefined;
438
- category?: string | undefined;
439
- tags?: string[] | undefined;
440
- parent?: string | undefined;
92
+ id: `column_${string}`;
93
+ children: string[];
94
+ position: [number, number, number];
95
+ rotation: number;
96
+ supportSlabId?: string | undefined;
97
+ source?: {
98
+ kind: "script";
99
+ meta?: {
100
+ description?: string | undefined;
101
+ category?: string | undefined;
102
+ tags?: string[] | undefined;
103
+ parent?: string | undefined;
441
104
  } | undefined;
442
105
  language: "bpy" | "three";
443
106
  script: string;
@@ -544,94 +207,80 @@ export declare const materializeLegacyAutoOpenings: (nodes: {
544
207
  thumbnail: string;
545
208
  floorPlan: string;
546
209
  } | undefined;
547
- inputs: string;
548
- } | undefined;
549
- type: "slab";
550
- } | {
551
- object: "node";
552
- name?: string | undefined;
553
- parentId: string | null;
554
- visible: boolean;
555
- camera?: {
556
- position: [number, number, number];
557
- target: [number, number, number];
558
- mode: "orthographic" | "perspective";
559
- fov?: number | undefined;
560
- zoom?: number | undefined;
561
- } | undefined;
562
- metadata: Record<string, unknown>;
563
- provenance?: {
564
- refs: {
565
- ns?: string | undefined;
566
- id: string;
567
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
568
- }[];
569
- lineage?: {
570
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
571
- fromIds: string[];
572
- } | undefined;
573
- } | undefined;
574
- id: `structural-grid_${string}`;
575
- start: [number, number];
576
- end: [number, number];
577
- label: string;
578
- showStartBubble: boolean;
579
- showEndBubble: boolean;
580
- type: "structural-grid";
581
- } | {
582
- object: "node";
583
- parentId: string | null;
584
- visible: boolean;
585
- camera?: {
586
- position: [number, number, number];
587
- target: [number, number, number];
588
- mode: "orthographic" | "perspective";
589
- fov?: number | undefined;
590
- zoom?: number | undefined;
591
- } | undefined;
592
- provenance?: {
593
- refs: {
594
- ns?: string | undefined;
595
- id: string;
596
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
597
- }[];
598
- lineage?: {
599
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
600
- fromIds: string[];
601
- } | undefined;
602
- } | undefined;
603
- id: `unit_${string}`;
604
- name: string;
605
- kind: "apartment" | "commercial" | "common" | "hotel-room";
606
- members: `zone_${string}`[];
607
- color: string;
608
- metadata: Record<string, unknown>;
609
- type: "unit";
610
- } | {
611
- object: "node";
612
- name?: string | undefined;
613
- parentId: string | null;
614
- visible: boolean;
615
- camera?: {
616
- position: [number, number, number];
617
- target: [number, number, number];
618
- mode: "orthographic" | "perspective";
619
- fov?: number | undefined;
620
- zoom?: number | undefined;
621
210
  } | undefined;
622
- metadata: Record<string, unknown>;
623
- provenance?: {
624
- refs: {
625
- ns?: string | undefined;
626
- id: string;
627
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
628
- }[];
629
- lineage?: {
630
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
631
- fromIds: string[];
632
- } | undefined;
633
- } | undefined;
634
- id: `cupola_${string}`;
211
+ style: "cluster" | "dravidian-carved" | "faceted" | "fluted" | "lathe-turned" | "plain";
212
+ crossSection: "octagonal" | "rectangular" | "round" | "sixteen-sided" | "square";
213
+ height: number;
214
+ radius: number;
215
+ width: number;
216
+ depth: number;
217
+ edgeSoftness: number;
218
+ baseHeight: number;
219
+ capitalHeight: number;
220
+ shaftProfile: "baluster" | "bulged" | "hourglass" | "straight" | "tapered";
221
+ shaftTaper: number;
222
+ shaftBulge: number;
223
+ shaftStartScale: number;
224
+ shaftEndScale: number;
225
+ shaftSegmentCount: number;
226
+ shaftTwistStep: number;
227
+ shaftCornerRadius: number;
228
+ shaftDetail: "fluted" | "lathe-turned" | "none" | "panelled" | "spiral";
229
+ baseStyle: "lotus" | "none" | "panelled-pedestal" | "ribbed-lotus" | "round-rings" | "simple-square" | "square-plinth" | "stepped-square";
230
+ baseWidthScale: number;
231
+ baseDepthScale: number;
232
+ baseTierCount: number;
233
+ baseStepSpread: number;
234
+ basePlinthHeightRatio: number;
235
+ baseRoundBandScale: number;
236
+ baseNeckScale: number;
237
+ baseRoundBandCount: number;
238
+ baseRibCount: number;
239
+ baseCarvingLevel: number;
240
+ basePanelInset: number;
241
+ capitalStyle: "corinthian-leaf" | "doric" | "ionic-volute" | "leaf-carved" | "none" | "rounded" | "simple" | "simple-slab" | "south-indian-bracket" | "stepped" | "volute" | "wood-bracket";
242
+ capitalWidthScale: number;
243
+ capitalDepthScale: number;
244
+ capitalTierCount: number;
245
+ capitalStepSpread: number;
246
+ capitalBandCount: number;
247
+ voluteSize: number;
248
+ voluteCount: number;
249
+ leafCount: number;
250
+ leafRows: number;
251
+ bracketDepth: number;
252
+ bracketTierCount: number;
253
+ pendantCount: number;
254
+ capitalCarvingLevel: number;
255
+ ringCount: number;
256
+ ringPlacement: "bottom" | "ends" | "even" | "top";
257
+ ringThickness: number;
258
+ ringSpread: number;
259
+ fluteCount: number;
260
+ fluteDepth: number;
261
+ fluteWidth: number;
262
+ spiralTwist: number;
263
+ spiralRibCount: number;
264
+ panelCount: number;
265
+ panelInsetDepth: number;
266
+ panelShape: "arched" | "diamond" | "rectangle";
267
+ latheRingCount: number;
268
+ latheRingSpacing: "bottom" | "ends" | "even" | "top";
269
+ carvingLevel: number;
270
+ carvingPlacement: "all" | "base" | "capital" | "shaft";
271
+ lowerBandEnabled: boolean;
272
+ lowerBandHeight: number;
273
+ lowerBandCarvingLevel: number;
274
+ dentilCount: number;
275
+ beadCount: number;
276
+ supportStyle: "a-frame" | "box-frame" | "k-brace" | "portal-frame" | "single-strut" | "trestle" | "tripod" | "v-frame" | "vertical" | "x-brace" | "y-frame";
277
+ braceWidth: number;
278
+ braceDepth: number;
279
+ braceBottomSpread: number;
280
+ braceTopSpread: number;
281
+ bracePlateEnabled: boolean;
282
+ role?: "ornament" | "post" | undefined;
283
+ postBase?: "none" | "pier" | "post-base" | undefined;
635
284
  material?: {
636
285
  id?: string | undefined;
637
286
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
@@ -654,17 +303,9 @@ export declare const materializeLegacyAutoOpenings: (nodes: {
654
303
  bumpScale?: number | undefined;
655
304
  } | undefined;
656
305
  } | undefined;
306
+ materialPreset?: string | undefined;
657
307
  slots?: Record<string, string> | undefined;
658
- materialPreset: string;
659
- roofSegmentId?: string | undefined;
660
- position: [number, number, number];
661
- rotation: number;
662
- width: number;
663
- depth: number;
664
- height: number;
665
- roofStyle: "dome" | "pyramid";
666
- finial: boolean;
667
- type: "cupola";
308
+ type: "column";
668
309
  } | {
669
310
  object: "node";
670
311
  name?: string | undefined;
@@ -689,27 +330,29 @@ export declare const materializeLegacyAutoOpenings: (nodes: {
689
330
  fromIds: string[];
690
331
  } | undefined;
691
332
  } | undefined;
692
- matchFenceStyle?: boolean | undefined;
693
- matchFenceHeight?: boolean | undefined;
694
- leafType?: "double" | "single" | undefined;
695
- style?: "guard" | "horizontal" | "match" | "picket" | "privacy" | "rail" | "slat" | undefined;
696
- height?: number | undefined;
697
- clearance?: number | undefined;
698
- thickness?: number | undefined;
699
- frameWidth?: number | undefined;
700
- spacing?: number | undefined;
701
- boardWidth?: number | undefined;
702
- hinge?: "left" | "right" | undefined;
703
- swing?: "inward" | "outward" | undefined;
704
- openAngle?: number | undefined;
705
- leafSplit?: number | undefined;
706
- brace?: "cross" | "diagonal" | "none" | undefined;
707
- showHardware?: boolean | undefined;
708
- showPosts?: boolean | undefined;
709
- id: `fence-gate_${string}`;
710
- center: number;
333
+ id: `duct-fitting_${string}`;
334
+ position: [number, number, number];
335
+ rotation: [number, number, number];
336
+ fittingType: "access-panel" | "coupling" | "cross" | "damper" | "elbow" | "end-cap" | "reducer" | "tee" | "transition";
337
+ shape: "oval" | "rect" | "round";
338
+ inletShape?: "oval" | "rect" | "round" | undefined;
339
+ outletShape?: "oval" | "rect" | "round" | undefined;
711
340
  width: number;
712
- type: "fence-gate";
341
+ height: number;
342
+ shape2: "oval" | "rect" | "round";
343
+ width2: number;
344
+ height2: number;
345
+ angle: number;
346
+ branchAngle: number;
347
+ diameter: number;
348
+ diameter2: number;
349
+ ductMaterial: "duct-board" | "flex" | "sheet-metal";
350
+ system: "return" | "supply";
351
+ damperAngle: number;
352
+ panelWidth: number;
353
+ panelHeight: number;
354
+ slots?: Record<string, string> | undefined;
355
+ type: "duct-fitting";
713
356
  } | {
714
357
  object: "node";
715
358
  name?: string | undefined;
@@ -734,14 +377,23 @@ export declare const materializeLegacyAutoOpenings: (nodes: {
734
377
  fromIds: string[];
735
378
  } | undefined;
736
379
  } | undefined;
737
- center: number;
380
+ id: `hvac-equipment_${string}`;
381
+ position: [number, number, number];
382
+ rotation: number;
383
+ supportSlabId?: string | undefined;
384
+ equipmentType: "air-handler" | "condenser" | "furnace";
738
385
  width: number;
739
- matchFenceStyle?: boolean | undefined;
740
- matchFenceHeight?: boolean | undefined;
741
- height?: number | undefined;
742
- showPosts: boolean;
743
- id: `fence-opening_${string}`;
744
- type: "fence-opening";
386
+ depth: number;
387
+ height: number;
388
+ supplyShape: "oval" | "rect" | "round";
389
+ returnShape: "oval" | "rect" | "round";
390
+ supplyDiameter: number;
391
+ returnDiameter: number;
392
+ supplyWidth: number;
393
+ supplyHeight: number;
394
+ returnWidth: number;
395
+ returnHeight: number;
396
+ type: "hvac-equipment";
745
397
  } | {
746
398
  object: "node";
747
399
  name?: string | undefined;
@@ -766,77 +418,17 @@ export declare const materializeLegacyAutoOpenings: (nodes: {
766
418
  fromIds: string[];
767
419
  } | undefined;
768
420
  } | undefined;
769
- id: `skylight_${string}`;
770
- material?: {
771
- id?: string | undefined;
772
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
773
- properties?: {
774
- color: string;
775
- roughness: number;
776
- metalness: number;
777
- opacity: number;
778
- transparent: boolean;
779
- side: "back" | "double" | "front";
780
- } | undefined;
781
- texture?: {
782
- url: string;
783
- repeat?: [number, number] | undefined;
784
- scale?: number | undefined;
785
- offset?: [number, number] | undefined;
786
- normalMap?: string | undefined;
787
- normalScale?: number | undefined;
788
- bumpMap?: string | undefined;
789
- bumpScale?: number | undefined;
790
- } | undefined;
791
- } | undefined;
792
- materialPreset?: string | undefined;
793
- glassMaterial?: {
794
- id?: string | undefined;
795
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
796
- properties?: {
797
- color: string;
798
- roughness: number;
799
- metalness: number;
800
- opacity: number;
801
- transparent: boolean;
802
- side: "back" | "double" | "front";
803
- } | undefined;
804
- texture?: {
805
- url: string;
806
- repeat?: [number, number] | undefined;
807
- scale?: number | undefined;
808
- offset?: [number, number] | undefined;
809
- normalMap?: string | undefined;
810
- normalScale?: number | undefined;
811
- bumpMap?: string | undefined;
812
- bumpScale?: number | undefined;
813
- } | undefined;
814
- } | undefined;
815
- glassMaterialPreset?: string | undefined;
816
- roofSegmentId?: string | undefined;
421
+ id: `pipe-fitting_${string}`;
817
422
  position: [number, number, number];
818
- rotation: number;
819
- width: number;
820
- height: number;
821
- frameThickness: number;
822
- frameDepth: number;
823
- skylightType: "flat" | "lantern" | "opening" | "sliding" | "walk-on";
824
- glassThickness: number;
825
- lanternHeight: number;
826
- lanternTopScale: number;
827
- openingAngle: number;
828
- openingSide: "bottom" | "left" | "right" | "top";
829
- operationState: number;
830
- motorHousing: boolean;
831
- slideFraction: number;
832
- slideDirection: "x" | "z";
833
- trackWidth: number;
834
- motorHousingSize: number;
835
- curb: boolean;
836
- curbHeight: number;
837
- cutoutOffset: number;
838
- surfaceNormal?: [number, number, number] | undefined;
839
- type: "skylight";
423
+ rotation: [number, number, number];
424
+ fittingType: "cleanout" | "coupling" | "cross" | "elbow" | "end-cap" | "reducer" | "sanitary-tee" | "wye";
425
+ angle: number;
426
+ diameter: number;
427
+ diameter2: number;
428
+ cleanoutStyle: "end" | "inline";
429
+ pipeMaterial: "abs" | "cast-iron" | "pvc";
430
+ system: "vent" | "waste";
431
+ type: "pipe-fitting";
840
432
  } | {
841
433
  object: "node";
842
434
  name?: string | undefined;
@@ -1029,481 +621,30 @@ export declare const materializeLegacyAutoOpenings: (nodes: {
1029
621
  inset?: number | undefined;
1030
622
  bottom?: number | undefined;
1031
623
  lift?: number | undefined;
1032
- src?: string | undefined;
1033
- }[];
1034
- backing?: {
1035
- id: string;
1036
- role: "air" | "covering" | "deck" | "fill" | "finish" | "furring" | "glazing" | "insulation" | "lining" | "membrane" | "sheathing" | "shell" | "structure" | "substrate" | "underlay";
1037
- thickness: number;
1038
- core?: true | undefined;
1039
- spacing?: number | undefined;
1040
- material?: string | undefined;
1041
- slot?: string | undefined;
1042
- returns?: boolean | undefined;
1043
- display?: "construction" | "finished" | undefined;
1044
- inset?: number | undefined;
1045
- bottom?: number | undefined;
1046
- lift?: number | undefined;
1047
- src?: string | undefined;
1048
- }[] | undefined;
1049
- face?: "exterior" | "front" | undefined;
1050
- presetId?: string | undefined;
1051
- cavityInsulation?: string | undefined;
1052
- };
1053
- }[] | undefined;
1054
- children: string[];
1055
- type: "site";
1056
- } | {
1057
- object: "node";
1058
- name?: string | undefined;
1059
- parentId: string | null;
1060
- visible: boolean;
1061
- camera?: {
1062
- position: [number, number, number];
1063
- target: [number, number, number];
1064
- mode: "orthographic" | "perspective";
1065
- fov?: number | undefined;
1066
- zoom?: number | undefined;
1067
- } | undefined;
1068
- metadata: Record<string, unknown>;
1069
- provenance?: {
1070
- refs: {
1071
- ns?: string | undefined;
1072
- id: string;
1073
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
1074
- }[];
1075
- lineage?: {
1076
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
1077
- fromIds: string[];
1078
- } | undefined;
1079
- } | undefined;
1080
- type: "item";
1081
- id: `item_${string}`;
1082
- position: [number, number, number];
1083
- rotation: [number, number, number];
1084
- scale: [number, number, number];
1085
- side?: "back" | "front" | undefined;
1086
- children: string[];
1087
- wallId?: string | undefined;
1088
- wallT?: number | undefined;
1089
- roofSegmentId?: string | undefined;
1090
- roofFace?: "back" | "front" | "left" | "right" | undefined;
1091
- blockFaceId?: string | undefined;
1092
- supportSlabId?: string | undefined;
1093
- collectionIds?: `collection_${string}`[] | undefined;
1094
- slots?: Record<string, string> | undefined;
1095
- source?: {
1096
- kind: "script";
1097
- meta?: {
1098
- description?: string | undefined;
1099
- category?: string | undefined;
1100
- tags?: string[] | undefined;
1101
- parent?: string | undefined;
1102
- } | undefined;
1103
- language: "bpy" | "three";
1104
- script: string;
1105
- params: Record<string, string | number | boolean>;
1106
- artifact: string;
1107
- manifest: {
1108
- bounds: {
1109
- min: [number, number, number];
1110
- max: [number, number, number];
1111
- };
1112
- params: {
1113
- id: string;
1114
- label?: string | undefined;
1115
- kind: "boolean" | "number" | "string";
1116
- default: string | number | boolean;
1117
- min?: number | undefined;
1118
- max?: number | undefined;
1119
- step?: number | undefined;
1120
- unit?: string | undefined;
1121
- options?: string[] | undefined;
1122
- }[];
1123
- parts: {
1124
- id: string;
1125
- label?: string | undefined;
1126
- type?: string | undefined;
1127
- bounds?: {
1128
- min: [number, number, number];
1129
- max: [number, number, number];
1130
- } | undefined;
1131
- }[];
1132
- surfaces: {
1133
- part?: string | undefined;
1134
- y: number;
1135
- polygon: [number, number][];
1136
- }[];
1137
- slots: {
1138
- id: string;
1139
- label?: string | undefined;
1140
- color?: string | undefined;
1141
- roughness?: number | undefined;
1142
- metalness?: number | undefined;
1143
- transparent?: boolean | undefined;
1144
- emissive?: boolean | undefined;
1145
- }[];
1146
- anchors: {
1147
- id: string;
1148
- position: [number, number, number];
1149
- normal?: [number, number, number] | undefined;
1150
- }[];
1151
- lights: {
1152
- id: string;
1153
- position: [number, number, number];
1154
- color: string;
1155
- intensity: number;
1156
- distance?: number | undefined;
1157
- spot?: {
1158
- direction: [number, number, number];
1159
- angle: number;
1160
- softness: number;
1161
- } | undefined;
1162
- shadows?: boolean | undefined;
1163
- glow?: {
1164
- size: number;
1165
- strength: number;
1166
- } | undefined;
1167
- }[];
1168
- undersides: {
1169
- part?: string | undefined;
1170
- polygon: [number, number][];
1171
- plane: [number, number, number, number];
1172
- }[];
1173
- animations: {
1174
- name: string;
1175
- duration: number;
1176
- }[];
1177
- cutters?: {
1178
- host: "ceiling" | "mounted" | "slab" | "wall";
1179
- polygon: number[][];
1180
- minY: number;
1181
- maxY: number;
1182
- }[] | undefined;
1183
- cutout: boolean;
1184
- collider: boolean;
1185
- shape?: {
1186
- tolerance: number;
1187
- bands: {
1188
- y0: number;
1189
- y1: number;
1190
- polygons: {
1191
- outer: [number, number][];
1192
- holes?: [number, number][][] | undefined;
1193
- }[];
1194
- }[];
1195
- } | undefined;
1196
- triangles: number;
1197
- coverage?: number | undefined;
1198
- uncovered?: {
1199
- min: [number, number];
1200
- max: [number, number];
1201
- }[] | undefined;
1202
- };
1203
- images?: {
1204
- artifact: string;
1205
- thumbnail: string;
1206
- floorPlan: string;
1207
- } | undefined;
1208
- } | undefined;
1209
- asset: {
1210
- id: string;
1211
- category: string;
1212
- name: string;
1213
- thumbnail: string;
1214
- floorPlanUrl?: string | undefined;
1215
- source: "community" | "library" | "mine";
1216
- isDraft?: boolean | undefined;
1217
- src: string;
1218
- dimensions: [number, number, number];
1219
- attachTo?: "ceiling" | "wall" | "wall-side" | undefined;
1220
- recessed?: boolean | undefined;
1221
- tags?: string[] | undefined;
1222
- functionTags?: string[] | undefined;
1223
- offset: [number, number, number];
1224
- rotation: [number, number, number];
1225
- scale: [number, number, number];
1226
- surface?: {
1227
- height: number;
1228
- } | undefined;
1229
- interactive?: {
1230
- controls: ({
1231
- kind: "toggle";
1232
- label?: string | undefined;
1233
- default?: boolean | undefined;
1234
- } | {
1235
- kind: "slider";
1236
- label: string;
1237
- min: number;
1238
- max: number;
1239
- step: number;
1240
- unit?: string | undefined;
1241
- displayMode: "dial" | "slider" | "stepper";
1242
- default?: number | undefined;
1243
- } | {
1244
- kind: "temperature";
1245
- label: string;
1246
- min: number;
1247
- max: number;
1248
- unit: "C" | "F";
1249
- default?: number | undefined;
1250
- })[];
1251
- effects: ({
1252
- kind: "animation";
1253
- mode?: "ambient" | "open-close" | undefined;
1254
- control?: number | undefined;
1255
- clips: {
1256
- on?: string | undefined;
1257
- off?: string | undefined;
1258
- loop?: string | undefined;
1259
- };
1260
- } | {
1261
- kind: "light";
1262
- color: string;
1263
- intensityRange: [number, number];
1264
- distance?: number | undefined;
1265
- offset: [number, number, number];
1266
- spot?: {
1267
- direction: [number, number, number];
1268
- angle: number;
1269
- softness: number;
1270
- } | undefined;
1271
- shadows?: boolean | undefined;
1272
- glow?: {
1273
- size: number;
1274
- strength: number;
1275
- } | undefined;
1276
- })[];
1277
- } | undefined;
1278
- };
1279
- } | {
1280
- object: "node";
1281
- name?: string | undefined;
1282
- parentId: string | null;
1283
- visible: boolean;
1284
- camera?: {
1285
- position: [number, number, number];
1286
- target: [number, number, number];
1287
- mode: "orthographic" | "perspective";
1288
- fov?: number | undefined;
1289
- zoom?: number | undefined;
1290
- } | undefined;
1291
- metadata: Record<string, unknown>;
1292
- provenance?: {
1293
- refs: {
1294
- ns?: string | undefined;
1295
- id: string;
1296
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
1297
- }[];
1298
- lineage?: {
1299
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
1300
- fromIds: string[];
1301
- } | undefined;
1302
- } | undefined;
1303
- id: `door_${string}`;
1304
- material?: {
1305
- id?: string | undefined;
1306
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1307
- properties?: {
1308
- color: string;
1309
- roughness: number;
1310
- metalness: number;
1311
- opacity: number;
1312
- transparent: boolean;
1313
- side: "back" | "double" | "front";
1314
- } | undefined;
1315
- texture?: {
1316
- url: string;
1317
- repeat?: [number, number] | undefined;
1318
- scale?: number | undefined;
1319
- offset?: [number, number] | undefined;
1320
- normalMap?: string | undefined;
1321
- normalScale?: number | undefined;
1322
- bumpMap?: string | undefined;
1323
- bumpScale?: number | undefined;
1324
- } | undefined;
1325
- } | undefined;
1326
- slots?: Record<string, string> | undefined;
1327
- source?: {
1328
- kind: "script";
1329
- meta?: {
1330
- description?: string | undefined;
1331
- category?: string | undefined;
1332
- tags?: string[] | undefined;
1333
- parent?: string | undefined;
1334
- } | undefined;
1335
- language: "bpy" | "three";
1336
- script: string;
1337
- params: Record<string, string | number | boolean>;
1338
- artifact: string;
1339
- manifest: {
1340
- bounds: {
1341
- min: [number, number, number];
1342
- max: [number, number, number];
1343
- };
1344
- params: {
1345
- id: string;
1346
- label?: string | undefined;
1347
- kind: "boolean" | "number" | "string";
1348
- default: string | number | boolean;
1349
- min?: number | undefined;
1350
- max?: number | undefined;
1351
- step?: number | undefined;
1352
- unit?: string | undefined;
1353
- options?: string[] | undefined;
1354
- }[];
1355
- parts: {
1356
- id: string;
1357
- label?: string | undefined;
1358
- type?: string | undefined;
1359
- bounds?: {
1360
- min: [number, number, number];
1361
- max: [number, number, number];
1362
- } | undefined;
1363
- }[];
1364
- surfaces: {
1365
- part?: string | undefined;
1366
- y: number;
1367
- polygon: [number, number][];
1368
- }[];
1369
- slots: {
1370
- id: string;
1371
- label?: string | undefined;
1372
- color?: string | undefined;
1373
- roughness?: number | undefined;
1374
- metalness?: number | undefined;
1375
- transparent?: boolean | undefined;
1376
- emissive?: boolean | undefined;
1377
- }[];
1378
- anchors: {
1379
- id: string;
1380
- position: [number, number, number];
1381
- normal?: [number, number, number] | undefined;
1382
- }[];
1383
- lights: {
1384
- id: string;
1385
- position: [number, number, number];
1386
- color: string;
1387
- intensity: number;
1388
- distance?: number | undefined;
1389
- spot?: {
1390
- direction: [number, number, number];
1391
- angle: number;
1392
- softness: number;
1393
- } | undefined;
1394
- shadows?: boolean | undefined;
1395
- glow?: {
1396
- size: number;
1397
- strength: number;
1398
- } | undefined;
1399
- }[];
1400
- undersides: {
1401
- part?: string | undefined;
1402
- polygon: [number, number][];
1403
- plane: [number, number, number, number];
1404
- }[];
1405
- animations: {
1406
- name: string;
1407
- duration: number;
1408
- }[];
1409
- cutters?: {
1410
- host: "ceiling" | "mounted" | "slab" | "wall";
1411
- polygon: number[][];
1412
- minY: number;
1413
- maxY: number;
1414
- }[] | undefined;
1415
- cutout: boolean;
1416
- collider: boolean;
1417
- shape?: {
1418
- tolerance: number;
1419
- bands: {
1420
- y0: number;
1421
- y1: number;
1422
- polygons: {
1423
- outer: [number, number][];
1424
- holes?: [number, number][][] | undefined;
1425
- }[];
1426
- }[];
1427
- } | undefined;
1428
- triangles: number;
1429
- coverage?: number | undefined;
1430
- uncovered?: {
1431
- min: [number, number];
1432
- max: [number, number];
624
+ src?: string | undefined;
625
+ }[];
626
+ backing?: {
627
+ id: string;
628
+ role: "air" | "covering" | "deck" | "fill" | "finish" | "furring" | "glazing" | "insulation" | "lining" | "membrane" | "sheathing" | "shell" | "structure" | "substrate" | "underlay";
629
+ thickness: number;
630
+ core?: true | undefined;
631
+ spacing?: number | undefined;
632
+ material?: string | undefined;
633
+ slot?: string | undefined;
634
+ returns?: boolean | undefined;
635
+ display?: "construction" | "finished" | undefined;
636
+ inset?: number | undefined;
637
+ bottom?: number | undefined;
638
+ lift?: number | undefined;
639
+ src?: string | undefined;
1433
640
  }[] | undefined;
641
+ face?: "exterior" | "front" | undefined;
642
+ presetId?: string | undefined;
643
+ cavityInsulation?: string | undefined;
1434
644
  };
1435
- images?: {
1436
- artifact: string;
1437
- thumbnail: string;
1438
- floorPlan: string;
1439
- } | undefined;
1440
- } | undefined;
1441
- position: [number, number, number];
1442
- rotation: [number, number, number];
1443
- side?: "back" | "front" | undefined;
1444
- verticalAnchor?: "floor" | "wall" | undefined;
1445
- floorThresholdVersion: 0 | 1;
1446
- wallId?: string | undefined;
1447
- roofSegmentId?: string | undefined;
1448
- roofFace?: "back" | "front" | "left" | "right" | undefined;
1449
- width: number;
1450
- height: number;
1451
- sidelightLeft?: number | undefined;
1452
- sidelightRight?: number | undefined;
1453
- transomHeight?: number | undefined;
1454
- slidingStyle?: "bypass" | "patio" | undefined;
1455
- mark?: string | undefined;
1456
- constructionType: "framed" | "masonry";
1457
- dimensionReference: "finish-opening" | "masonry-opening" | "nominal" | "rough-opening";
1458
- roughOpeningWidth?: number | undefined;
1459
- roughOpeningHeight?: number | undefined;
1460
- masonryOpeningWidth?: number | undefined;
1461
- masonryOpeningHeight?: number | undefined;
1462
- finishOpeningWidth?: number | undefined;
1463
- finishOpeningHeight?: number | undefined;
1464
- doorCategory: "garage" | "interior";
1465
- doorType: "barn" | "double" | "folding" | "french" | "garage-rollup" | "garage-sectional" | "garage-tiltup" | "hinged" | "pocket" | "sliding";
1466
- leafCount: 1 | 2 | 3 | 4 | 6 | 8;
1467
- operationState: number;
1468
- slideDirection: "left" | "right";
1469
- trackStyle: "none" | "overhead" | "pocket" | "visible";
1470
- garagePanelCount: number;
1471
- openingKind: "door" | "opening";
1472
- openingShape: "arch" | "rectangle" | "rounded";
1473
- openingRadiusMode: "all" | "individual";
1474
- openingTopRadii: [number, number];
1475
- cornerRadius: number;
1476
- archHeight: number;
1477
- openingRevealRadius: number;
1478
- frameThickness: number;
1479
- frameDepth?: number | undefined;
1480
- threshold: boolean;
1481
- thresholdHeight: number;
1482
- casingFaceA?: boolean | undefined;
1483
- casingFaceB?: boolean | undefined;
1484
- casingWidth?: number | undefined;
1485
- hingesSide: "left" | "right";
1486
- swingDirection: "inward" | "outward";
1487
- swingAngle: number;
1488
- segments: {
1489
- type: "empty" | "glass" | "panel";
1490
- heightRatio: number;
1491
- columnRatios: number[];
1492
- dividerThickness: number;
1493
- panelDepth: number;
1494
- panelInset: number;
1495
- }[];
1496
- handle: boolean;
1497
- handleStyle?: "bar" | "knob" | "lever" | "lever-curved" | "plate" | undefined;
1498
- handleHeight: number;
1499
- handleSide: "left" | "right";
1500
- contentPadding: [number, number];
1501
- doorCloser: boolean;
1502
- panicBar: boolean;
1503
- panicBarStyle: "crossbar" | "touchbar";
1504
- panicBarRods: boolean;
1505
- panicBarHeight: number;
1506
- type: "door";
645
+ }[] | undefined;
646
+ children: string[];
647
+ type: "site";
1507
648
  } | {
1508
649
  object: "node";
1509
650
  name?: string | undefined;
@@ -1528,29 +669,20 @@ export declare const materializeLegacyAutoOpenings: (nodes: {
1528
669
  fromIds: string[];
1529
670
  } | undefined;
1530
671
  } | undefined;
1531
- id: `window_${string}`;
1532
- material?: {
1533
- id?: string | undefined;
1534
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1535
- properties?: {
1536
- color: string;
1537
- roughness: number;
1538
- metalness: number;
1539
- opacity: number;
1540
- transparent: boolean;
1541
- side: "back" | "double" | "front";
1542
- } | undefined;
1543
- texture?: {
1544
- url: string;
1545
- repeat?: [number, number] | undefined;
1546
- scale?: number | undefined;
1547
- offset?: [number, number] | undefined;
1548
- normalMap?: string | undefined;
1549
- normalScale?: number | undefined;
1550
- bumpMap?: string | undefined;
1551
- bumpScale?: number | undefined;
1552
- } | undefined;
1553
- } | undefined;
672
+ type: "item";
673
+ id: `item_${string}`;
674
+ position: [number, number, number];
675
+ rotation: [number, number, number];
676
+ scale: [number, number, number];
677
+ side?: "back" | "front" | undefined;
678
+ children: string[];
679
+ wallId?: string | undefined;
680
+ wallT?: number | undefined;
681
+ roofSegmentId?: string | undefined;
682
+ roofFace?: "back" | "front" | "left" | "right" | undefined;
683
+ blockFaceId?: string | undefined;
684
+ supportSlabId?: string | undefined;
685
+ collectionIds?: `collection_${string}`[] | undefined;
1554
686
  slots?: Record<string, string> | undefined;
1555
687
  source?: {
1556
688
  kind: "script";
@@ -1666,73 +798,76 @@ export declare const materializeLegacyAutoOpenings: (nodes: {
1666
798
  floorPlan: string;
1667
799
  } | undefined;
1668
800
  } | undefined;
1669
- position: [number, number, number];
1670
- rotation: [number, number, number];
1671
- side?: "back" | "front" | undefined;
1672
- verticalAnchor?: "floor" | "wall" | undefined;
1673
- floorThresholdVersion: 0 | 1;
1674
- wallId?: string | undefined;
1675
- dormerId?: string | undefined;
1676
- dormerFace?: "back" | "front" | "left" | "right" | undefined;
1677
- roofSegmentId?: string | undefined;
1678
- roofFace?: "back" | "front" | "left" | "right" | undefined;
1679
- width: number;
1680
- height: number;
1681
- mark?: string | undefined;
1682
- constructionType: "framed" | "masonry";
1683
- dimensionReference: "finish-opening" | "masonry-opening" | "nominal" | "rough-opening";
1684
- roughOpeningWidth?: number | undefined;
1685
- roughOpeningHeight?: number | undefined;
1686
- masonryOpeningWidth?: number | undefined;
1687
- masonryOpeningHeight?: number | undefined;
1688
- finishOpeningWidth?: number | undefined;
1689
- finishOpeningHeight?: number | undefined;
1690
- openingKind: "opening" | "window";
1691
- windowType: "awning" | "bay" | "bow" | "casement" | "double-hung" | "fixed" | "hopper" | "louvered" | "single-hung" | "sliding" | "tilt-turn";
1692
- operationState: number;
1693
- openingDirection?: "inward" | "outward" | undefined;
1694
- tiltTurnMode?: "tilt" | "turn" | undefined;
1695
- awningDirection: "down" | "up";
1696
- casementStyle: "french" | "single";
1697
- hingesSide: "left" | "right";
1698
- openingShape: "arch" | "rectangle" | "rounded";
1699
- openingRadiusMode: "all" | "individual";
1700
- openingCornerRadii: [number, number, number, number];
1701
- cornerRadius: number;
1702
- archHeight: number;
1703
- openingRevealRadius: number;
1704
- frameThickness: number;
1705
- frameDepth?: number | undefined;
1706
- windowHandle?: boolean | undefined;
1707
- sashGrid?: boolean | undefined;
1708
- columnRatios: number[];
1709
- rowRatios: number[];
1710
- columnDividerThickness: number;
1711
- rowDividerThickness: number;
1712
- corner?: {
1713
- end: "end" | "start";
1714
- partnerId: string;
1715
- post: "none" | "post";
1716
- } | undefined;
1717
- sill: boolean;
1718
- sillDepth: number;
1719
- sillThickness: number;
1720
- sillOverhang?: number | undefined;
1721
- sillInterior?: boolean | undefined;
1722
- sillInteriorDepth?: number | undefined;
1723
- sillInteriorThickness?: number | undefined;
1724
- sillInteriorOverhang?: number | undefined;
1725
- shutters?: "board-batten" | "louvered" | "none" | "panel" | undefined;
1726
- shutterWidth?: number | undefined;
1727
- shutterOpen?: number | undefined;
1728
- shutterSides?: "both" | "left" | "right" | undefined;
1729
- rollerShutter?: "box" | "concealed" | "none" | undefined;
1730
- rollerShutterBoxHeight?: number | undefined;
1731
- rollerShutterOpen?: number | undefined;
1732
- casingFaceA?: boolean | undefined;
1733
- casingFaceB?: boolean | undefined;
1734
- casingWidth?: number | undefined;
1735
- type: "window";
801
+ asset: {
802
+ id: string;
803
+ category: string;
804
+ name: string;
805
+ thumbnail: string;
806
+ floorPlanUrl?: string | undefined;
807
+ source: "community" | "library" | "mine";
808
+ isDraft?: boolean | undefined;
809
+ src: string;
810
+ dimensions: [number, number, number];
811
+ attachTo?: "ceiling" | "wall" | "wall-side" | undefined;
812
+ recessed?: boolean | undefined;
813
+ tags?: string[] | undefined;
814
+ functionTags?: string[] | undefined;
815
+ offset: [number, number, number];
816
+ rotation: [number, number, number];
817
+ scale: [number, number, number];
818
+ surface?: {
819
+ height: number;
820
+ } | undefined;
821
+ interactive?: {
822
+ controls: ({
823
+ kind: "toggle";
824
+ label?: string | undefined;
825
+ default?: boolean | undefined;
826
+ } | {
827
+ kind: "slider";
828
+ label: string;
829
+ min: number;
830
+ max: number;
831
+ step: number;
832
+ unit?: string | undefined;
833
+ displayMode: "dial" | "slider" | "stepper";
834
+ default?: number | undefined;
835
+ } | {
836
+ kind: "temperature";
837
+ label: string;
838
+ min: number;
839
+ max: number;
840
+ unit: "C" | "F";
841
+ default?: number | undefined;
842
+ })[];
843
+ effects: ({
844
+ kind: "animation";
845
+ mode?: "ambient" | "open-close" | undefined;
846
+ control?: number | undefined;
847
+ clips: {
848
+ on?: string | undefined;
849
+ off?: string | undefined;
850
+ loop?: string | undefined;
851
+ };
852
+ } | {
853
+ kind: "light";
854
+ color: string;
855
+ intensityRange: [number, number];
856
+ distance?: number | undefined;
857
+ offset: [number, number, number];
858
+ spot?: {
859
+ direction: [number, number, number];
860
+ angle: number;
861
+ softness: number;
862
+ } | undefined;
863
+ shadows?: boolean | undefined;
864
+ glow?: {
865
+ size: number;
866
+ strength: number;
867
+ } | undefined;
868
+ })[];
869
+ } | undefined;
870
+ };
1736
871
  } | {
1737
872
  object: "node";
1738
873
  name?: string | undefined;
@@ -1757,11 +892,30 @@ export declare const materializeLegacyAutoOpenings: (nodes: {
1757
892
  fromIds: string[];
1758
893
  } | undefined;
1759
894
  } | undefined;
1760
- id: `column_${string}`;
1761
- children: string[];
1762
- position: [number, number, number];
1763
- rotation: number;
1764
- supportSlabId?: string | undefined;
895
+ id: `door_${string}`;
896
+ material?: {
897
+ id?: string | undefined;
898
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
899
+ properties?: {
900
+ color: string;
901
+ roughness: number;
902
+ metalness: number;
903
+ opacity: number;
904
+ transparent: boolean;
905
+ side: "back" | "double" | "front";
906
+ } | undefined;
907
+ texture?: {
908
+ url: string;
909
+ repeat?: [number, number] | undefined;
910
+ scale?: number | undefined;
911
+ offset?: [number, number] | undefined;
912
+ normalMap?: string | undefined;
913
+ normalScale?: number | undefined;
914
+ bumpMap?: string | undefined;
915
+ bumpScale?: number | undefined;
916
+ } | undefined;
917
+ } | undefined;
918
+ slots?: Record<string, string> | undefined;
1765
919
  source?: {
1766
920
  kind: "script";
1767
921
  meta?: {
@@ -1876,79 +1030,97 @@ export declare const materializeLegacyAutoOpenings: (nodes: {
1876
1030
  floorPlan: string;
1877
1031
  } | undefined;
1878
1032
  } | undefined;
1879
- style: "cluster" | "dravidian-carved" | "faceted" | "fluted" | "lathe-turned" | "plain";
1880
- crossSection: "octagonal" | "rectangular" | "round" | "sixteen-sided" | "square";
1881
- height: number;
1882
- radius: number;
1033
+ position: [number, number, number];
1034
+ rotation: [number, number, number];
1035
+ side?: "back" | "front" | undefined;
1036
+ verticalAnchor?: "floor" | "wall" | undefined;
1037
+ floorThresholdVersion: 0 | 1;
1038
+ wallId?: string | undefined;
1039
+ roofSegmentId?: string | undefined;
1040
+ roofFace?: "back" | "front" | "left" | "right" | undefined;
1883
1041
  width: number;
1884
- depth: number;
1885
- edgeSoftness: number;
1886
- baseHeight: number;
1887
- capitalHeight: number;
1888
- shaftProfile: "baluster" | "bulged" | "hourglass" | "straight" | "tapered";
1889
- shaftTaper: number;
1890
- shaftBulge: number;
1891
- shaftStartScale: number;
1892
- shaftEndScale: number;
1893
- shaftSegmentCount: number;
1894
- shaftTwistStep: number;
1895
- shaftCornerRadius: number;
1896
- shaftDetail: "fluted" | "lathe-turned" | "none" | "panelled" | "spiral";
1897
- baseStyle: "lotus" | "none" | "panelled-pedestal" | "ribbed-lotus" | "round-rings" | "simple-square" | "square-plinth" | "stepped-square";
1898
- baseWidthScale: number;
1899
- baseDepthScale: number;
1900
- baseTierCount: number;
1901
- baseStepSpread: number;
1902
- basePlinthHeightRatio: number;
1903
- baseRoundBandScale: number;
1904
- baseNeckScale: number;
1905
- baseRoundBandCount: number;
1906
- baseRibCount: number;
1907
- baseCarvingLevel: number;
1908
- basePanelInset: number;
1909
- capitalStyle: "corinthian-leaf" | "doric" | "ionic-volute" | "leaf-carved" | "none" | "rounded" | "simple" | "simple-slab" | "south-indian-bracket" | "stepped" | "volute" | "wood-bracket";
1910
- capitalWidthScale: number;
1911
- capitalDepthScale: number;
1912
- capitalTierCount: number;
1913
- capitalStepSpread: number;
1914
- capitalBandCount: number;
1915
- voluteSize: number;
1916
- voluteCount: number;
1917
- leafCount: number;
1918
- leafRows: number;
1919
- bracketDepth: number;
1920
- bracketTierCount: number;
1921
- pendantCount: number;
1922
- capitalCarvingLevel: number;
1923
- ringCount: number;
1924
- ringPlacement: "bottom" | "ends" | "even" | "top";
1925
- ringThickness: number;
1926
- ringSpread: number;
1927
- fluteCount: number;
1928
- fluteDepth: number;
1929
- fluteWidth: number;
1930
- spiralTwist: number;
1931
- spiralRibCount: number;
1932
- panelCount: number;
1933
- panelInsetDepth: number;
1934
- panelShape: "arched" | "diamond" | "rectangle";
1935
- latheRingCount: number;
1936
- latheRingSpacing: "bottom" | "ends" | "even" | "top";
1937
- carvingLevel: number;
1938
- carvingPlacement: "all" | "base" | "capital" | "shaft";
1939
- lowerBandEnabled: boolean;
1940
- lowerBandHeight: number;
1941
- lowerBandCarvingLevel: number;
1942
- dentilCount: number;
1943
- beadCount: number;
1944
- supportStyle: "a-frame" | "box-frame" | "k-brace" | "portal-frame" | "single-strut" | "trestle" | "tripod" | "v-frame" | "vertical" | "x-brace" | "y-frame";
1945
- braceWidth: number;
1946
- braceDepth: number;
1947
- braceBottomSpread: number;
1948
- braceTopSpread: number;
1949
- bracePlateEnabled: boolean;
1950
- role?: "ornament" | "post" | undefined;
1951
- postBase?: "none" | "pier" | "post-base" | undefined;
1042
+ height: number;
1043
+ sidelightLeft?: number | undefined;
1044
+ sidelightRight?: number | undefined;
1045
+ transomHeight?: number | undefined;
1046
+ slidingStyle?: "bypass" | "patio" | undefined;
1047
+ mark?: string | undefined;
1048
+ constructionType: "framed" | "masonry";
1049
+ dimensionReference: "finish-opening" | "masonry-opening" | "nominal" | "rough-opening";
1050
+ roughOpeningWidth?: number | undefined;
1051
+ roughOpeningHeight?: number | undefined;
1052
+ masonryOpeningWidth?: number | undefined;
1053
+ masonryOpeningHeight?: number | undefined;
1054
+ finishOpeningWidth?: number | undefined;
1055
+ finishOpeningHeight?: number | undefined;
1056
+ doorCategory: "garage" | "interior";
1057
+ doorType: "barn" | "double" | "folding" | "french" | "garage-rollup" | "garage-sectional" | "garage-tiltup" | "hinged" | "pocket" | "sliding";
1058
+ leafCount: 1 | 2 | 3 | 4 | 6 | 8;
1059
+ operationState: number;
1060
+ slideDirection: "left" | "right";
1061
+ trackStyle: "none" | "overhead" | "pocket" | "visible";
1062
+ garagePanelCount: number;
1063
+ openingKind: "door" | "opening";
1064
+ openingShape: "arch" | "rectangle" | "rounded";
1065
+ openingRadiusMode: "all" | "individual";
1066
+ openingTopRadii: [number, number];
1067
+ cornerRadius: number;
1068
+ archHeight: number;
1069
+ openingRevealRadius: number;
1070
+ frameThickness: number;
1071
+ frameDepth?: number | undefined;
1072
+ threshold: boolean;
1073
+ thresholdHeight: number;
1074
+ casingFaceA?: boolean | undefined;
1075
+ casingFaceB?: boolean | undefined;
1076
+ casingWidth?: number | undefined;
1077
+ hingesSide: "left" | "right";
1078
+ swingDirection: "inward" | "outward";
1079
+ swingAngle: number;
1080
+ segments: {
1081
+ type: "empty" | "glass" | "panel";
1082
+ heightRatio: number;
1083
+ columnRatios: number[];
1084
+ dividerThickness: number;
1085
+ panelDepth: number;
1086
+ panelInset: number;
1087
+ }[];
1088
+ handle: boolean;
1089
+ handleStyle?: "bar" | "knob" | "lever" | "lever-curved" | "plate" | undefined;
1090
+ handleHeight: number;
1091
+ handleSide: "left" | "right";
1092
+ contentPadding: [number, number];
1093
+ doorCloser: boolean;
1094
+ panicBar: boolean;
1095
+ panicBarStyle: "crossbar" | "touchbar";
1096
+ panicBarRods: boolean;
1097
+ panicBarHeight: number;
1098
+ type: "door";
1099
+ } | {
1100
+ object: "node";
1101
+ name?: string | undefined;
1102
+ parentId: string | null;
1103
+ visible: boolean;
1104
+ camera?: {
1105
+ position: [number, number, number];
1106
+ target: [number, number, number];
1107
+ mode: "orthographic" | "perspective";
1108
+ fov?: number | undefined;
1109
+ zoom?: number | undefined;
1110
+ } | undefined;
1111
+ metadata: Record<string, unknown>;
1112
+ provenance?: {
1113
+ refs: {
1114
+ ns?: string | undefined;
1115
+ id: string;
1116
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
1117
+ }[];
1118
+ lineage?: {
1119
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
1120
+ fromIds: string[];
1121
+ } | undefined;
1122
+ } | undefined;
1123
+ id: `window_${string}`;
1952
1124
  material?: {
1953
1125
  id?: string | undefined;
1954
1126
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
@@ -1971,9 +1143,188 @@ export declare const materializeLegacyAutoOpenings: (nodes: {
1971
1143
  bumpScale?: number | undefined;
1972
1144
  } | undefined;
1973
1145
  } | undefined;
1974
- materialPreset?: string | undefined;
1975
- slots?: Record<string, string> | undefined;
1976
- type: "column";
1146
+ slots?: Record<string, string> | undefined;
1147
+ source?: {
1148
+ kind: "script";
1149
+ meta?: {
1150
+ description?: string | undefined;
1151
+ category?: string | undefined;
1152
+ tags?: string[] | undefined;
1153
+ parent?: string | undefined;
1154
+ } | undefined;
1155
+ language: "bpy" | "three";
1156
+ script: string;
1157
+ params: Record<string, string | number | boolean>;
1158
+ artifact: string;
1159
+ manifest: {
1160
+ bounds: {
1161
+ min: [number, number, number];
1162
+ max: [number, number, number];
1163
+ };
1164
+ params: {
1165
+ id: string;
1166
+ label?: string | undefined;
1167
+ kind: "boolean" | "number" | "string";
1168
+ default: string | number | boolean;
1169
+ min?: number | undefined;
1170
+ max?: number | undefined;
1171
+ step?: number | undefined;
1172
+ unit?: string | undefined;
1173
+ options?: string[] | undefined;
1174
+ }[];
1175
+ parts: {
1176
+ id: string;
1177
+ label?: string | undefined;
1178
+ type?: string | undefined;
1179
+ bounds?: {
1180
+ min: [number, number, number];
1181
+ max: [number, number, number];
1182
+ } | undefined;
1183
+ }[];
1184
+ surfaces: {
1185
+ part?: string | undefined;
1186
+ y: number;
1187
+ polygon: [number, number][];
1188
+ }[];
1189
+ slots: {
1190
+ id: string;
1191
+ label?: string | undefined;
1192
+ color?: string | undefined;
1193
+ roughness?: number | undefined;
1194
+ metalness?: number | undefined;
1195
+ transparent?: boolean | undefined;
1196
+ emissive?: boolean | undefined;
1197
+ }[];
1198
+ anchors: {
1199
+ id: string;
1200
+ position: [number, number, number];
1201
+ normal?: [number, number, number] | undefined;
1202
+ }[];
1203
+ lights: {
1204
+ id: string;
1205
+ position: [number, number, number];
1206
+ color: string;
1207
+ intensity: number;
1208
+ distance?: number | undefined;
1209
+ spot?: {
1210
+ direction: [number, number, number];
1211
+ angle: number;
1212
+ softness: number;
1213
+ } | undefined;
1214
+ shadows?: boolean | undefined;
1215
+ glow?: {
1216
+ size: number;
1217
+ strength: number;
1218
+ } | undefined;
1219
+ }[];
1220
+ undersides: {
1221
+ part?: string | undefined;
1222
+ polygon: [number, number][];
1223
+ plane: [number, number, number, number];
1224
+ }[];
1225
+ animations: {
1226
+ name: string;
1227
+ duration: number;
1228
+ }[];
1229
+ cutters?: {
1230
+ host: "ceiling" | "mounted" | "slab" | "wall";
1231
+ polygon: number[][];
1232
+ minY: number;
1233
+ maxY: number;
1234
+ }[] | undefined;
1235
+ cutout: boolean;
1236
+ collider: boolean;
1237
+ shape?: {
1238
+ tolerance: number;
1239
+ bands: {
1240
+ y0: number;
1241
+ y1: number;
1242
+ polygons: {
1243
+ outer: [number, number][];
1244
+ holes?: [number, number][][] | undefined;
1245
+ }[];
1246
+ }[];
1247
+ } | undefined;
1248
+ triangles: number;
1249
+ coverage?: number | undefined;
1250
+ uncovered?: {
1251
+ min: [number, number];
1252
+ max: [number, number];
1253
+ }[] | undefined;
1254
+ };
1255
+ images?: {
1256
+ artifact: string;
1257
+ thumbnail: string;
1258
+ floorPlan: string;
1259
+ } | undefined;
1260
+ } | undefined;
1261
+ position: [number, number, number];
1262
+ rotation: [number, number, number];
1263
+ side?: "back" | "front" | undefined;
1264
+ verticalAnchor?: "floor" | "wall" | undefined;
1265
+ floorThresholdVersion: 0 | 1;
1266
+ wallId?: string | undefined;
1267
+ dormerId?: string | undefined;
1268
+ dormerFace?: "back" | "front" | "left" | "right" | undefined;
1269
+ roofSegmentId?: string | undefined;
1270
+ roofFace?: "back" | "front" | "left" | "right" | undefined;
1271
+ width: number;
1272
+ height: number;
1273
+ mark?: string | undefined;
1274
+ constructionType: "framed" | "masonry";
1275
+ dimensionReference: "finish-opening" | "masonry-opening" | "nominal" | "rough-opening";
1276
+ roughOpeningWidth?: number | undefined;
1277
+ roughOpeningHeight?: number | undefined;
1278
+ masonryOpeningWidth?: number | undefined;
1279
+ masonryOpeningHeight?: number | undefined;
1280
+ finishOpeningWidth?: number | undefined;
1281
+ finishOpeningHeight?: number | undefined;
1282
+ openingKind: "opening" | "window";
1283
+ windowType: "awning" | "bay" | "bow" | "casement" | "double-hung" | "fixed" | "hopper" | "louvered" | "single-hung" | "sliding" | "tilt-turn";
1284
+ operationState: number;
1285
+ openingDirection?: "inward" | "outward" | undefined;
1286
+ tiltTurnMode?: "tilt" | "turn" | undefined;
1287
+ awningDirection: "down" | "up";
1288
+ casementStyle: "french" | "single";
1289
+ hingesSide: "left" | "right";
1290
+ openingShape: "arch" | "rectangle" | "rounded";
1291
+ openingRadiusMode: "all" | "individual";
1292
+ openingCornerRadii: [number, number, number, number];
1293
+ cornerRadius: number;
1294
+ archHeight: number;
1295
+ openingRevealRadius: number;
1296
+ frameThickness: number;
1297
+ frameDepth?: number | undefined;
1298
+ windowHandle?: boolean | undefined;
1299
+ sashGrid?: boolean | undefined;
1300
+ columnRatios: number[];
1301
+ rowRatios: number[];
1302
+ columnDividerThickness: number;
1303
+ rowDividerThickness: number;
1304
+ corner?: {
1305
+ end: "end" | "start";
1306
+ partnerId: string;
1307
+ post: "none" | "post";
1308
+ } | undefined;
1309
+ sill: boolean;
1310
+ sillDepth: number;
1311
+ sillThickness: number;
1312
+ sillOverhang?: number | undefined;
1313
+ sillInterior?: boolean | undefined;
1314
+ sillInteriorDepth?: number | undefined;
1315
+ sillInteriorThickness?: number | undefined;
1316
+ sillInteriorOverhang?: number | undefined;
1317
+ shutters?: "board-batten" | "louvered" | "none" | "panel" | undefined;
1318
+ shutterWidth?: number | undefined;
1319
+ shutterOpen?: number | undefined;
1320
+ shutterSides?: "both" | "left" | "right" | undefined;
1321
+ rollerShutter?: "box" | "concealed" | "none" | undefined;
1322
+ rollerShutterBoxHeight?: number | undefined;
1323
+ rollerShutterOpen?: number | undefined;
1324
+ casingFaceA?: boolean | undefined;
1325
+ casingFaceB?: boolean | undefined;
1326
+ casingWidth?: number | undefined;
1327
+ type: "window";
1977
1328
  } | {
1978
1329
  object: "node";
1979
1330
  name?: string | undefined;
@@ -2457,57 +1808,272 @@ export declare const materializeLegacyAutoOpenings: (nodes: {
2457
1808
  bumpScale?: number | undefined;
2458
1809
  } | undefined;
2459
1810
  } | undefined;
2460
- heelMaterialPreset?: string | undefined;
2461
- position: [number, number, number];
2462
- rotation: number;
2463
- support: {
2464
- kind: "level";
2465
- } | {
2466
- kind: "walls";
2467
- } | {
2468
- kind: "roof";
2469
- roofSegmentId: `rseg_${string}`;
2470
- localPosition: [number, number];
2471
- curbHeight: number;
2472
- };
2473
- assembly?: {
2474
- layers: {
2475
- id: string;
2476
- role: "air" | "covering" | "deck" | "fill" | "finish" | "furring" | "glazing" | "insulation" | "lining" | "membrane" | "sheathing" | "shell" | "structure" | "substrate" | "underlay";
2477
- thickness: number;
2478
- core?: true | undefined;
2479
- spacing?: number | undefined;
2480
- material?: string | undefined;
2481
- slot?: string | undefined;
2482
- returns?: boolean | undefined;
2483
- display?: "construction" | "finished" | undefined;
2484
- inset?: number | undefined;
2485
- bottom?: number | undefined;
2486
- lift?: number | undefined;
2487
- src?: string | undefined;
2488
- }[];
2489
- backing?: {
2490
- id: string;
2491
- role: "air" | "covering" | "deck" | "fill" | "finish" | "furring" | "glazing" | "insulation" | "lining" | "membrane" | "sheathing" | "shell" | "structure" | "substrate" | "underlay";
2492
- thickness: number;
2493
- core?: true | undefined;
2494
- spacing?: number | undefined;
2495
- material?: string | undefined;
2496
- slot?: string | undefined;
2497
- returns?: boolean | undefined;
2498
- display?: "construction" | "finished" | undefined;
2499
- inset?: number | undefined;
2500
- bottom?: number | undefined;
2501
- lift?: number | undefined;
2502
- src?: string | undefined;
2503
- }[] | undefined;
2504
- face?: "exterior" | "front" | undefined;
2505
- presetId?: string | undefined;
2506
- cavityInsulation?: string | undefined;
1811
+ heelMaterialPreset?: string | undefined;
1812
+ position: [number, number, number];
1813
+ rotation: number;
1814
+ support: {
1815
+ kind: "level";
1816
+ } | {
1817
+ kind: "walls";
1818
+ } | {
1819
+ kind: "roof";
1820
+ roofSegmentId: `rseg_${string}`;
1821
+ localPosition: [number, number];
1822
+ curbHeight: number;
1823
+ };
1824
+ assembly?: {
1825
+ layers: {
1826
+ id: string;
1827
+ role: "air" | "covering" | "deck" | "fill" | "finish" | "furring" | "glazing" | "insulation" | "lining" | "membrane" | "sheathing" | "shell" | "structure" | "substrate" | "underlay";
1828
+ thickness: number;
1829
+ core?: true | undefined;
1830
+ spacing?: number | undefined;
1831
+ material?: string | undefined;
1832
+ slot?: string | undefined;
1833
+ returns?: boolean | undefined;
1834
+ display?: "construction" | "finished" | undefined;
1835
+ inset?: number | undefined;
1836
+ bottom?: number | undefined;
1837
+ lift?: number | undefined;
1838
+ src?: string | undefined;
1839
+ }[];
1840
+ backing?: {
1841
+ id: string;
1842
+ role: "air" | "covering" | "deck" | "fill" | "finish" | "furring" | "glazing" | "insulation" | "lining" | "membrane" | "sheathing" | "shell" | "structure" | "substrate" | "underlay";
1843
+ thickness: number;
1844
+ core?: true | undefined;
1845
+ spacing?: number | undefined;
1846
+ material?: string | undefined;
1847
+ slot?: string | undefined;
1848
+ returns?: boolean | undefined;
1849
+ display?: "construction" | "finished" | undefined;
1850
+ inset?: number | undefined;
1851
+ bottom?: number | undefined;
1852
+ lift?: number | undefined;
1853
+ src?: string | undefined;
1854
+ }[] | undefined;
1855
+ face?: "exterior" | "front" | undefined;
1856
+ presetId?: string | undefined;
1857
+ cavityInsulation?: string | undefined;
1858
+ } | undefined;
1859
+ slots?: Record<string, string> | undefined;
1860
+ children: string[];
1861
+ type: "roof";
1862
+ } | {
1863
+ object: "node";
1864
+ name?: string | undefined;
1865
+ parentId: string | null;
1866
+ visible: boolean;
1867
+ camera?: {
1868
+ position: [number, number, number];
1869
+ target: [number, number, number];
1870
+ mode: "orthographic" | "perspective";
1871
+ fov?: number | undefined;
1872
+ zoom?: number | undefined;
1873
+ } | undefined;
1874
+ metadata: Record<string, unknown>;
1875
+ provenance?: {
1876
+ refs: {
1877
+ ns?: string | undefined;
1878
+ id: string;
1879
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
1880
+ }[];
1881
+ lineage?: {
1882
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
1883
+ fromIds: string[];
1884
+ } | undefined;
1885
+ } | undefined;
1886
+ id: `slab_${string}`;
1887
+ material?: {
1888
+ id?: string | undefined;
1889
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1890
+ properties?: {
1891
+ color: string;
1892
+ roughness: number;
1893
+ metalness: number;
1894
+ opacity: number;
1895
+ transparent: boolean;
1896
+ side: "back" | "double" | "front";
1897
+ } | undefined;
1898
+ texture?: {
1899
+ url: string;
1900
+ repeat?: [number, number] | undefined;
1901
+ scale?: number | undefined;
1902
+ offset?: [number, number] | undefined;
1903
+ normalMap?: string | undefined;
1904
+ normalScale?: number | undefined;
1905
+ bumpMap?: string | undefined;
1906
+ bumpScale?: number | undefined;
1907
+ } | undefined;
1908
+ } | undefined;
1909
+ materialPreset?: string | undefined;
1910
+ slots?: Record<string, string> | undefined;
1911
+ polygon: [number, number][];
1912
+ holes: [number, number][][];
1913
+ holeMetadata: {
1914
+ source: "elevator" | "floor-opening" | "manual" | "room" | "stair";
1915
+ openingId?: string | undefined;
1916
+ stairId?: string | undefined;
1917
+ elevatorId?: string | undefined;
1918
+ }[];
1919
+ elevation: number;
1920
+ floorHeight?: number | undefined;
1921
+ referenceFloorElevation?: number | undefined;
1922
+ foundation?: {
1923
+ type: "none" | "solid";
1924
+ material?: string | {
1925
+ id?: string | undefined;
1926
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1927
+ properties?: {
1928
+ color: string;
1929
+ roughness: number;
1930
+ metalness: number;
1931
+ opacity: number;
1932
+ transparent: boolean;
1933
+ side: "back" | "double" | "front";
1934
+ } | undefined;
1935
+ texture?: {
1936
+ url: string;
1937
+ repeat?: [number, number] | undefined;
1938
+ scale?: number | undefined;
1939
+ offset?: [number, number] | undefined;
1940
+ normalMap?: string | undefined;
1941
+ normalScale?: number | undefined;
1942
+ bumpMap?: string | undefined;
1943
+ bumpScale?: number | undefined;
1944
+ } | undefined;
1945
+ } | undefined;
1946
+ } | undefined;
1947
+ thickness: number;
1948
+ recessed: boolean;
1949
+ recessedRimElevation?: number | undefined;
1950
+ fillToTerrain?: boolean | undefined;
1951
+ boundary?: "auto" | undefined;
1952
+ support?: "open" | undefined;
1953
+ plateRole?: "base" | "platform" | "sunken" | undefined;
1954
+ railing?: {
1955
+ start: [number, number];
1956
+ end: [number, number];
1957
+ }[] | undefined;
1958
+ zoneIds?: string[] | undefined;
1959
+ associatedZoneIds?: string[] | undefined;
1960
+ autoFromWalls: boolean;
1961
+ surfaceScript?: {
1962
+ kind: "script";
1963
+ meta?: {
1964
+ description?: string | undefined;
1965
+ category?: string | undefined;
1966
+ tags?: string[] | undefined;
1967
+ parent?: string | undefined;
1968
+ } | undefined;
1969
+ language: "bpy" | "three";
1970
+ script: string;
1971
+ params: Record<string, string | number | boolean>;
1972
+ artifact: string;
1973
+ manifest: {
1974
+ bounds: {
1975
+ min: [number, number, number];
1976
+ max: [number, number, number];
1977
+ };
1978
+ params: {
1979
+ id: string;
1980
+ label?: string | undefined;
1981
+ kind: "boolean" | "number" | "string";
1982
+ default: string | number | boolean;
1983
+ min?: number | undefined;
1984
+ max?: number | undefined;
1985
+ step?: number | undefined;
1986
+ unit?: string | undefined;
1987
+ options?: string[] | undefined;
1988
+ }[];
1989
+ parts: {
1990
+ id: string;
1991
+ label?: string | undefined;
1992
+ type?: string | undefined;
1993
+ bounds?: {
1994
+ min: [number, number, number];
1995
+ max: [number, number, number];
1996
+ } | undefined;
1997
+ }[];
1998
+ surfaces: {
1999
+ part?: string | undefined;
2000
+ y: number;
2001
+ polygon: [number, number][];
2002
+ }[];
2003
+ slots: {
2004
+ id: string;
2005
+ label?: string | undefined;
2006
+ color?: string | undefined;
2007
+ roughness?: number | undefined;
2008
+ metalness?: number | undefined;
2009
+ transparent?: boolean | undefined;
2010
+ emissive?: boolean | undefined;
2011
+ }[];
2012
+ anchors: {
2013
+ id: string;
2014
+ position: [number, number, number];
2015
+ normal?: [number, number, number] | undefined;
2016
+ }[];
2017
+ lights: {
2018
+ id: string;
2019
+ position: [number, number, number];
2020
+ color: string;
2021
+ intensity: number;
2022
+ distance?: number | undefined;
2023
+ spot?: {
2024
+ direction: [number, number, number];
2025
+ angle: number;
2026
+ softness: number;
2027
+ } | undefined;
2028
+ shadows?: boolean | undefined;
2029
+ glow?: {
2030
+ size: number;
2031
+ strength: number;
2032
+ } | undefined;
2033
+ }[];
2034
+ undersides: {
2035
+ part?: string | undefined;
2036
+ polygon: [number, number][];
2037
+ plane: [number, number, number, number];
2038
+ }[];
2039
+ animations: {
2040
+ name: string;
2041
+ duration: number;
2042
+ }[];
2043
+ cutters?: {
2044
+ host: "ceiling" | "mounted" | "slab" | "wall";
2045
+ polygon: number[][];
2046
+ minY: number;
2047
+ maxY: number;
2048
+ }[] | undefined;
2049
+ cutout: boolean;
2050
+ collider: boolean;
2051
+ shape?: {
2052
+ tolerance: number;
2053
+ bands: {
2054
+ y0: number;
2055
+ y1: number;
2056
+ polygons: {
2057
+ outer: [number, number][];
2058
+ holes?: [number, number][][] | undefined;
2059
+ }[];
2060
+ }[];
2061
+ } | undefined;
2062
+ triangles: number;
2063
+ coverage?: number | undefined;
2064
+ uncovered?: {
2065
+ min: [number, number];
2066
+ max: [number, number];
2067
+ }[] | undefined;
2068
+ };
2069
+ images?: {
2070
+ artifact: string;
2071
+ thumbnail: string;
2072
+ floorPlan: string;
2073
+ } | undefined;
2074
+ inputs: string;
2507
2075
  } | undefined;
2508
- slots?: Record<string, string> | undefined;
2509
- children: `rseg_${string}`[];
2510
- type: "roof";
2076
+ type: "slab";
2511
2077
  } | {
2512
2078
  object: "node";
2513
2079
  name?: string | undefined;
@@ -3153,6 +2719,42 @@ export declare const materializeLegacyAutoOpenings: (nodes: {
3153
2719
  start: [number, number];
3154
2720
  end: [number, number];
3155
2721
  type: "separator";
2722
+ } | {
2723
+ object: "node";
2724
+ name?: string | undefined;
2725
+ parentId: string | null;
2726
+ visible: boolean;
2727
+ camera?: {
2728
+ position: [number, number, number];
2729
+ target: [number, number, number];
2730
+ mode: "orthographic" | "perspective";
2731
+ fov?: number | undefined;
2732
+ zoom?: number | undefined;
2733
+ } | undefined;
2734
+ metadata: Record<string, unknown>;
2735
+ provenance?: {
2736
+ refs: {
2737
+ ns?: string | undefined;
2738
+ id: string;
2739
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
2740
+ }[];
2741
+ lineage?: {
2742
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
2743
+ fromIds: string[];
2744
+ } | undefined;
2745
+ } | undefined;
2746
+ id: `floor-opening_${string}`;
2747
+ polygon: [number, number][];
2748
+ hostZoneId?: string | undefined;
2749
+ legacyPlateCuts?: Record<string, [number, number][][]> | undefined;
2750
+ legacyCeilingCuts?: Record<string, [number, number][][]> | undefined;
2751
+ source: string;
2752
+ ownerId?: string | undefined;
2753
+ surfaceId?: string | undefined;
2754
+ drawnOn: "ceiling" | "floor";
2755
+ cutsPrimary: boolean;
2756
+ cutsAdjacent: boolean;
2757
+ type: "floor-opening";
3156
2758
  } | {
3157
2759
  object: "node";
3158
2760
  name?: string | undefined;
@@ -3247,6 +2849,42 @@ export declare const materializeLegacyAutoOpenings: (nodes: {
3247
2849
  color: string;
3248
2850
  style: "guard" | "horizontal" | "picket" | "privacy" | "rail" | "slat";
3249
2851
  type: "fence";
2852
+ } | {
2853
+ object: "node";
2854
+ name?: string | undefined;
2855
+ parentId: string | null;
2856
+ visible: boolean;
2857
+ camera?: {
2858
+ position: [number, number, number];
2859
+ target: [number, number, number];
2860
+ mode: "orthographic" | "perspective";
2861
+ fov?: number | undefined;
2862
+ zoom?: number | undefined;
2863
+ } | undefined;
2864
+ metadata: Record<string, unknown>;
2865
+ provenance?: {
2866
+ refs: {
2867
+ ns?: string | undefined;
2868
+ id: string;
2869
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
2870
+ }[];
2871
+ lineage?: {
2872
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
2873
+ fromIds: string[];
2874
+ } | undefined;
2875
+ } | undefined;
2876
+ id: `beam_${string}`;
2877
+ start: [number, number];
2878
+ end: [number, number];
2879
+ width: number;
2880
+ depth: number;
2881
+ size?: string | undefined;
2882
+ plies: number;
2883
+ material: "glulam" | "lvl" | "pressure-treated" | "sawn" | "steel";
2884
+ placement: "dropped" | "flush";
2885
+ topElevation?: number | undefined;
2886
+ supportSlabId?: string | undefined;
2887
+ type: "beam";
3250
2888
  } | {
3251
2889
  object: "node";
3252
2890
  name?: string | undefined;
@@ -3354,6 +2992,37 @@ export declare const materializeLegacyAutoOpenings: (nodes: {
3354
2992
  slots: Record<string, string>;
3355
2993
  slotNames: Record<string, string>;
3356
2994
  type: "block";
2995
+ } | {
2996
+ object: "node";
2997
+ name?: string | undefined;
2998
+ parentId: string | null;
2999
+ visible: boolean;
3000
+ camera?: {
3001
+ position: [number, number, number];
3002
+ target: [number, number, number];
3003
+ mode: "orthographic" | "perspective";
3004
+ fov?: number | undefined;
3005
+ zoom?: number | undefined;
3006
+ } | undefined;
3007
+ metadata: Record<string, unknown>;
3008
+ provenance?: {
3009
+ refs: {
3010
+ ns?: string | undefined;
3011
+ id: string;
3012
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
3013
+ }[];
3014
+ lineage?: {
3015
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
3016
+ fromIds: string[];
3017
+ } | undefined;
3018
+ } | undefined;
3019
+ id: `structural-grid_${string}`;
3020
+ start: [number, number];
3021
+ end: [number, number];
3022
+ label: string;
3023
+ showStartBubble: boolean;
3024
+ showEndBubble: boolean;
3025
+ type: "structural-grid";
3357
3026
  } | {
3358
3027
  object: "node";
3359
3028
  name?: string | undefined;
@@ -4163,6 +3832,44 @@ export declare const materializeLegacyAutoOpenings: (nodes: {
4163
3832
  railingPostThrough?: boolean | undefined;
4164
3833
  children: `sseg_${string}`[];
4165
3834
  type: "stair";
3835
+ } | {
3836
+ object: "node";
3837
+ name?: string | undefined;
3838
+ parentId: string | null;
3839
+ visible: boolean;
3840
+ camera?: {
3841
+ position: [number, number, number];
3842
+ target: [number, number, number];
3843
+ mode: "orthographic" | "perspective";
3844
+ fov?: number | undefined;
3845
+ zoom?: number | undefined;
3846
+ } | undefined;
3847
+ metadata: Record<string, unknown>;
3848
+ provenance?: {
3849
+ refs: {
3850
+ ns?: string | undefined;
3851
+ id: string;
3852
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
3853
+ }[];
3854
+ lineage?: {
3855
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
3856
+ fromIds: string[];
3857
+ } | undefined;
3858
+ } | undefined;
3859
+ id: `scan_${string}`;
3860
+ url: string | null;
3861
+ captureSession: {
3862
+ sessionId: string;
3863
+ schemaVersion?: number | undefined;
3864
+ revisionId?: string | undefined;
3865
+ manifestUrl?: string | undefined;
3866
+ } | null;
3867
+ layers: Record<string, boolean>;
3868
+ position: [number, number, number];
3869
+ rotation: [number, number, number];
3870
+ scale: number;
3871
+ opacity: number;
3872
+ type: "scan";
4166
3873
  } | {
4167
3874
  object: "node";
4168
3875
  name?: string | undefined;
@@ -4204,6 +3911,113 @@ export declare const materializeLegacyAutoOpenings: (nodes: {
4204
3911
  label: string;
4205
3912
  } | null;
4206
3913
  type: "guide";
3914
+ } | {
3915
+ object: "node";
3916
+ name?: string | undefined;
3917
+ parentId: string | null;
3918
+ visible: boolean;
3919
+ camera?: {
3920
+ position: [number, number, number];
3921
+ target: [number, number, number];
3922
+ mode: "orthographic" | "perspective";
3923
+ fov?: number | undefined;
3924
+ zoom?: number | undefined;
3925
+ } | undefined;
3926
+ metadata: Record<string, unknown>;
3927
+ provenance?: {
3928
+ refs: {
3929
+ ns?: string | undefined;
3930
+ id: string;
3931
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
3932
+ }[];
3933
+ lineage?: {
3934
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
3935
+ fromIds: string[];
3936
+ } | undefined;
3937
+ } | undefined;
3938
+ id: `measurement_${string}`;
3939
+ measurement: {
3940
+ kind: "distance";
3941
+ points: [{
3942
+ kind: "feature";
3943
+ reference: {
3944
+ nodeId: string;
3945
+ featureId: string;
3946
+ parameters?: Record<string, string | number | boolean> | undefined;
3947
+ };
3948
+ fallback: [number, number, number];
3949
+ } | [number, number, number], {
3950
+ kind: "feature";
3951
+ reference: {
3952
+ nodeId: string;
3953
+ featureId: string;
3954
+ parameters?: Record<string, string | number | boolean> | undefined;
3955
+ };
3956
+ fallback: [number, number, number];
3957
+ } | [number, number, number]];
3958
+ } | {
3959
+ kind: "angle";
3960
+ points: [{
3961
+ kind: "feature";
3962
+ reference: {
3963
+ nodeId: string;
3964
+ featureId: string;
3965
+ parameters?: Record<string, string | number | boolean> | undefined;
3966
+ };
3967
+ fallback: [number, number, number];
3968
+ } | [number, number, number], {
3969
+ kind: "feature";
3970
+ reference: {
3971
+ nodeId: string;
3972
+ featureId: string;
3973
+ parameters?: Record<string, string | number | boolean> | undefined;
3974
+ };
3975
+ fallback: [number, number, number];
3976
+ } | [number, number, number], {
3977
+ kind: "feature";
3978
+ reference: {
3979
+ nodeId: string;
3980
+ featureId: string;
3981
+ parameters?: Record<string, string | number | boolean> | undefined;
3982
+ };
3983
+ fallback: [number, number, number];
3984
+ } | [number, number, number]];
3985
+ } | {
3986
+ kind: "area";
3987
+ base: ({
3988
+ kind: "feature";
3989
+ reference: {
3990
+ nodeId: string;
3991
+ featureId: string;
3992
+ parameters?: Record<string, string | number | boolean> | undefined;
3993
+ };
3994
+ fallback: [number, number, number];
3995
+ } | [number, number, number])[];
3996
+ } | {
3997
+ kind: "perimeter";
3998
+ base: ({
3999
+ kind: "feature";
4000
+ reference: {
4001
+ nodeId: string;
4002
+ featureId: string;
4003
+ parameters?: Record<string, string | number | boolean> | undefined;
4004
+ };
4005
+ fallback: [number, number, number];
4006
+ } | [number, number, number])[];
4007
+ } | {
4008
+ kind: "volume";
4009
+ base: ({
4010
+ kind: "feature";
4011
+ reference: {
4012
+ nodeId: string;
4013
+ featureId: string;
4014
+ parameters?: Record<string, string | number | boolean> | undefined;
4015
+ };
4016
+ fallback: [number, number, number];
4017
+ } | [number, number, number])[];
4018
+ extrusion: [number, number, number];
4019
+ };
4020
+ type: "measurement";
4207
4021
  } | {
4208
4022
  object: "node";
4209
4023
  name?: string | undefined;
@@ -4322,29 +4136,36 @@ export declare const materializeLegacyAutoOpenings: (nodes: {
4322
4136
  fromIds: string[];
4323
4137
  } | undefined;
4324
4138
  } | undefined;
4325
- id: `duct-fitting_${string}`;
4326
- position: [number, number, number];
4327
- rotation: [number, number, number];
4328
- fittingType: "access-panel" | "coupling" | "cross" | "damper" | "elbow" | "end-cap" | "reducer" | "tee" | "transition";
4139
+ id: `duct-segment_${string}`;
4140
+ path: [number, number, number][];
4141
+ autoHangers?: boolean | undefined;
4142
+ hangerOverrides?: Record<string, {
4143
+ fraction?: number | undefined;
4144
+ skipped?: boolean | undefined;
4145
+ hostId?: string | undefined;
4146
+ }> | undefined;
4147
+ hangerStyle?: "double" | "single" | undefined;
4148
+ hangerSpacing?: number | undefined;
4149
+ hangerMaxReach?: number | undefined;
4150
+ wallAttachment?: {
4151
+ wallId: `wall_${string}`;
4152
+ side: "back" | "front";
4153
+ startUV: [number, number];
4154
+ endUV: [number, number];
4155
+ offset: number;
4156
+ } | undefined;
4329
4157
  shape: "oval" | "rect" | "round";
4330
- inletShape?: "oval" | "rect" | "round" | undefined;
4331
- outletShape?: "oval" | "rect" | "round" | undefined;
4158
+ diameter: number;
4332
4159
  width: number;
4333
4160
  height: number;
4334
- shape2: "oval" | "rect" | "round";
4335
- width2: number;
4336
- height2: number;
4337
- angle: number;
4338
- branchAngle: number;
4339
- diameter: number;
4340
- diameter2: number;
4341
- ductMaterial: "duct-board" | "flex" | "sheet-metal";
4161
+ roll: number;
4162
+ ductMaterial: "duct-board" | "flex" | "sheet-metal" | "spiral";
4163
+ seamDetail: boolean;
4164
+ insulated: boolean;
4165
+ insulationR: number;
4342
4166
  system: "return" | "supply";
4343
- damperAngle: number;
4344
- panelWidth: number;
4345
- panelHeight: number;
4346
4167
  slots?: Record<string, string> | undefined;
4347
- type: "duct-fitting";
4168
+ type: "duct-segment";
4348
4169
  } | {
4349
4170
  object: "node";
4350
4171
  name?: string | undefined;
@@ -4406,23 +4227,12 @@ export declare const materializeLegacyAutoOpenings: (nodes: {
4406
4227
  fromIds: string[];
4407
4228
  } | undefined;
4408
4229
  } | undefined;
4409
- id: `hvac-equipment_${string}`;
4410
- position: [number, number, number];
4411
- rotation: number;
4412
- supportSlabId?: string | undefined;
4413
- equipmentType: "air-handler" | "condenser" | "furnace";
4414
- width: number;
4415
- depth: number;
4416
- height: number;
4417
- supplyShape: "oval" | "rect" | "round";
4418
- returnShape: "oval" | "rect" | "round";
4419
- supplyDiameter: number;
4420
- returnDiameter: number;
4421
- supplyWidth: number;
4422
- supplyHeight: number;
4423
- returnWidth: number;
4424
- returnHeight: number;
4425
- type: "hvac-equipment";
4230
+ id: `lineset_${string}`;
4231
+ path: [number, number, number][];
4232
+ suctionDiameter: number;
4233
+ liquidDiameter: number;
4234
+ insulated: boolean;
4235
+ type: "lineset";
4426
4236
  } | {
4427
4237
  object: "node";
4428
4238
  name?: string | undefined;
@@ -4521,17 +4331,13 @@ export declare const materializeLegacyAutoOpenings: (nodes: {
4521
4331
  fromIds: string[];
4522
4332
  } | undefined;
4523
4333
  } | undefined;
4524
- id: `pipe-fitting_${string}`;
4334
+ id: `pipe-trap_${string}`;
4525
4335
  position: [number, number, number];
4526
- rotation: [number, number, number];
4527
- fittingType: "cleanout" | "coupling" | "cross" | "elbow" | "end-cap" | "reducer" | "sanitary-tee" | "wye";
4528
- angle: number;
4336
+ rotation: number;
4529
4337
  diameter: number;
4530
- diameter2: number;
4531
- cleanoutStyle: "end" | "inline";
4532
4338
  pipeMaterial: "abs" | "cast-iron" | "pvc";
4533
- system: "vent" | "waste";
4534
- type: "pipe-fitting";
4339
+ armLengthM: number;
4340
+ type: "pipe-trap";
4535
4341
  } | {
4536
4342
  object: "node";
4537
4343
  name?: string | undefined;
@@ -4634,6 +4440,35 @@ export declare const materializeLegacyAutoOpenings: (nodes: {
4634
4440
  doorDurationMs: number;
4635
4441
  dwellMs: number;
4636
4442
  type: "elevator";
4443
+ } | {
4444
+ object: "node";
4445
+ parentId: string | null;
4446
+ visible: boolean;
4447
+ camera?: {
4448
+ position: [number, number, number];
4449
+ target: [number, number, number];
4450
+ mode: "orthographic" | "perspective";
4451
+ fov?: number | undefined;
4452
+ zoom?: number | undefined;
4453
+ } | undefined;
4454
+ provenance?: {
4455
+ refs: {
4456
+ ns?: string | undefined;
4457
+ id: string;
4458
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
4459
+ }[];
4460
+ lineage?: {
4461
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
4462
+ fromIds: string[];
4463
+ } | undefined;
4464
+ } | undefined;
4465
+ id: `unit_${string}`;
4466
+ name: string;
4467
+ kind: "apartment" | "commercial" | "common" | "hotel-room";
4468
+ members: `zone_${string}`[];
4469
+ color: string;
4470
+ metadata: Record<string, unknown>;
4471
+ type: "unit";
4637
4472
  } | {
4638
4473
  object: "node";
4639
4474
  name?: string | undefined;
@@ -4664,6 +4499,83 @@ export declare const materializeLegacyAutoOpenings: (nodes: {
4664
4499
  rotation: [number, number, number];
4665
4500
  groundLevelId?: `level_${string}` | undefined;
4666
4501
  type: "building";
4502
+ } | {
4503
+ object: "node";
4504
+ name?: string | undefined;
4505
+ parentId: string | null;
4506
+ visible: boolean;
4507
+ camera?: {
4508
+ position: [number, number, number];
4509
+ target: [number, number, number];
4510
+ mode: "orthographic" | "perspective";
4511
+ fov?: number | undefined;
4512
+ zoom?: number | undefined;
4513
+ } | undefined;
4514
+ metadata: Record<string, unknown>;
4515
+ provenance?: {
4516
+ refs: {
4517
+ ns?: string | undefined;
4518
+ id: string;
4519
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
4520
+ }[];
4521
+ lineage?: {
4522
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
4523
+ fromIds: string[];
4524
+ } | undefined;
4525
+ } | undefined;
4526
+ matchFenceStyle?: boolean | undefined;
4527
+ matchFenceHeight?: boolean | undefined;
4528
+ leafType?: "double" | "single" | undefined;
4529
+ style?: "guard" | "horizontal" | "match" | "picket" | "privacy" | "rail" | "slat" | undefined;
4530
+ height?: number | undefined;
4531
+ clearance?: number | undefined;
4532
+ thickness?: number | undefined;
4533
+ frameWidth?: number | undefined;
4534
+ spacing?: number | undefined;
4535
+ boardWidth?: number | undefined;
4536
+ hinge?: "left" | "right" | undefined;
4537
+ swing?: "inward" | "outward" | undefined;
4538
+ openAngle?: number | undefined;
4539
+ leafSplit?: number | undefined;
4540
+ brace?: "cross" | "diagonal" | "none" | undefined;
4541
+ showHardware?: boolean | undefined;
4542
+ showPosts?: boolean | undefined;
4543
+ id: `fence-gate_${string}`;
4544
+ center: number;
4545
+ width: number;
4546
+ type: "fence-gate";
4547
+ } | {
4548
+ object: "node";
4549
+ name?: string | undefined;
4550
+ parentId: string | null;
4551
+ visible: boolean;
4552
+ camera?: {
4553
+ position: [number, number, number];
4554
+ target: [number, number, number];
4555
+ mode: "orthographic" | "perspective";
4556
+ fov?: number | undefined;
4557
+ zoom?: number | undefined;
4558
+ } | undefined;
4559
+ metadata: Record<string, unknown>;
4560
+ provenance?: {
4561
+ refs: {
4562
+ ns?: string | undefined;
4563
+ id: string;
4564
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
4565
+ }[];
4566
+ lineage?: {
4567
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
4568
+ fromIds: string[];
4569
+ } | undefined;
4570
+ } | undefined;
4571
+ center: number;
4572
+ width: number;
4573
+ matchFenceStyle?: boolean | undefined;
4574
+ matchFenceHeight?: boolean | undefined;
4575
+ height?: number | undefined;
4576
+ showPosts: boolean;
4577
+ id: `fence-opening_${string}`;
4578
+ type: "fence-opening";
4667
4579
  } | {
4668
4580
  object: "node";
4669
4581
  name?: string | undefined;
@@ -5017,7 +4929,7 @@ export declare const materializeLegacyAutoOpenings: (nodes: {
5017
4929
  fromIds: string[];
5018
4930
  } | undefined;
5019
4931
  } | undefined;
5020
- id: `bvent_${string}`;
4932
+ id: `rvent_${string}`;
5021
4933
  material?: {
5022
4934
  id?: string | undefined;
5023
4935
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
@@ -5040,24 +4952,16 @@ export declare const materializeLegacyAutoOpenings: (nodes: {
5040
4952
  bumpScale?: number | undefined;
5041
4953
  } | undefined;
5042
4954
  } | undefined;
5043
- slots?: Record<string, string> | undefined;
5044
- materialPreset: string;
4955
+ materialPreset?: string | undefined;
5045
4956
  roofSegmentId?: string | undefined;
5046
4957
  position: [number, number, number];
5047
4958
  rotation: number;
4959
+ length: number;
5048
4960
  width: number;
5049
- depth: number;
5050
4961
  height: number;
5051
- hoodOverhang: number;
5052
- topTaper: number;
5053
- capHeight: number;
5054
- capGap: number;
5055
- domeCurvature: number;
5056
- baseInset: number;
5057
- baseHeight: number;
5058
- cornerBevel: number;
5059
- style: "box" | "cap" | "dome";
5060
- type: "box-vent";
4962
+ style: "metal" | "shingled" | "standard";
4963
+ endCaps: boolean;
4964
+ type: "ridge-vent";
5061
4965
  } | {
5062
4966
  object: "node";
5063
4967
  name?: string | undefined;
@@ -5082,7 +4986,7 @@ export declare const materializeLegacyAutoOpenings: (nodes: {
5082
4986
  fromIds: string[];
5083
4987
  } | undefined;
5084
4988
  } | undefined;
5085
- id: `rvent_${string}`;
4989
+ id: `tvent_${string}`;
5086
4990
  material?: {
5087
4991
  id?: string | undefined;
5088
4992
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
@@ -5105,16 +5009,19 @@ export declare const materializeLegacyAutoOpenings: (nodes: {
5105
5009
  bumpScale?: number | undefined;
5106
5010
  } | undefined;
5107
5011
  } | undefined;
5108
- materialPreset?: string | undefined;
5012
+ slots?: Record<string, string> | undefined;
5013
+ materialPreset: string;
5109
5014
  roofSegmentId?: string | undefined;
5110
5015
  position: [number, number, number];
5111
5016
  rotation: number;
5112
- length: number;
5113
- width: number;
5017
+ diameter: number;
5114
5018
  height: number;
5115
- style: "metal" | "shingled" | "standard";
5116
- endCaps: boolean;
5117
- type: "ridge-vent";
5019
+ neckHeight: number;
5020
+ baseOverhang: number;
5021
+ vaneCount: number;
5022
+ spinSpeed: number;
5023
+ style: "cylinder" | "globe";
5024
+ type: "turbine-vent";
5118
5025
  } | {
5119
5026
  object: "node";
5120
5027
  name?: string | undefined;
@@ -5139,7 +5046,7 @@ export declare const materializeLegacyAutoOpenings: (nodes: {
5139
5046
  fromIds: string[];
5140
5047
  } | undefined;
5141
5048
  } | undefined;
5142
- id: `tvent_${string}`;
5049
+ id: `cupola_${string}`;
5143
5050
  material?: {
5144
5051
  id?: string | undefined;
5145
5052
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
@@ -5167,14 +5074,12 @@ export declare const materializeLegacyAutoOpenings: (nodes: {
5167
5074
  roofSegmentId?: string | undefined;
5168
5075
  position: [number, number, number];
5169
5076
  rotation: number;
5170
- diameter: number;
5077
+ width: number;
5078
+ depth: number;
5171
5079
  height: number;
5172
- neckHeight: number;
5173
- baseOverhang: number;
5174
- vaneCount: number;
5175
- spinSpeed: number;
5176
- style: "cylinder" | "globe";
5177
- type: "turbine-vent";
5080
+ roofStyle: "dome" | "pyramid";
5081
+ finial: boolean;
5082
+ type: "cupola";
5178
5083
  } | {
5179
5084
  object: "node";
5180
5085
  name?: string | undefined;
@@ -5503,6 +5408,101 @@ export declare const materializeLegacyAutoOpenings: (nodes: {
5503
5408
  frameDepth: number;
5504
5409
  surfaceNormal?: [number, number, number] | undefined;
5505
5410
  type: "solar-panel";
5411
+ } | {
5412
+ object: "node";
5413
+ name?: string | undefined;
5414
+ parentId: string | null;
5415
+ visible: boolean;
5416
+ camera?: {
5417
+ position: [number, number, number];
5418
+ target: [number, number, number];
5419
+ mode: "orthographic" | "perspective";
5420
+ fov?: number | undefined;
5421
+ zoom?: number | undefined;
5422
+ } | undefined;
5423
+ metadata: Record<string, unknown>;
5424
+ provenance?: {
5425
+ refs: {
5426
+ ns?: string | undefined;
5427
+ id: string;
5428
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
5429
+ }[];
5430
+ lineage?: {
5431
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
5432
+ fromIds: string[];
5433
+ } | undefined;
5434
+ } | undefined;
5435
+ id: `skylight_${string}`;
5436
+ material?: {
5437
+ id?: string | undefined;
5438
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
5439
+ properties?: {
5440
+ color: string;
5441
+ roughness: number;
5442
+ metalness: number;
5443
+ opacity: number;
5444
+ transparent: boolean;
5445
+ side: "back" | "double" | "front";
5446
+ } | undefined;
5447
+ texture?: {
5448
+ url: string;
5449
+ repeat?: [number, number] | undefined;
5450
+ scale?: number | undefined;
5451
+ offset?: [number, number] | undefined;
5452
+ normalMap?: string | undefined;
5453
+ normalScale?: number | undefined;
5454
+ bumpMap?: string | undefined;
5455
+ bumpScale?: number | undefined;
5456
+ } | undefined;
5457
+ } | undefined;
5458
+ materialPreset?: string | undefined;
5459
+ glassMaterial?: {
5460
+ id?: string | undefined;
5461
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
5462
+ properties?: {
5463
+ color: string;
5464
+ roughness: number;
5465
+ metalness: number;
5466
+ opacity: number;
5467
+ transparent: boolean;
5468
+ side: "back" | "double" | "front";
5469
+ } | undefined;
5470
+ texture?: {
5471
+ url: string;
5472
+ repeat?: [number, number] | undefined;
5473
+ scale?: number | undefined;
5474
+ offset?: [number, number] | undefined;
5475
+ normalMap?: string | undefined;
5476
+ normalScale?: number | undefined;
5477
+ bumpMap?: string | undefined;
5478
+ bumpScale?: number | undefined;
5479
+ } | undefined;
5480
+ } | undefined;
5481
+ glassMaterialPreset?: string | undefined;
5482
+ roofSegmentId?: string | undefined;
5483
+ position: [number, number, number];
5484
+ rotation: number;
5485
+ width: number;
5486
+ height: number;
5487
+ frameThickness: number;
5488
+ frameDepth: number;
5489
+ skylightType: "flat" | "lantern" | "opening" | "sliding" | "walk-on";
5490
+ glassThickness: number;
5491
+ lanternHeight: number;
5492
+ lanternTopScale: number;
5493
+ openingAngle: number;
5494
+ openingSide: "bottom" | "left" | "right" | "top";
5495
+ operationState: number;
5496
+ motorHousing: boolean;
5497
+ slideFraction: number;
5498
+ slideDirection: "x" | "z";
5499
+ trackWidth: number;
5500
+ motorHousingSize: number;
5501
+ curb: boolean;
5502
+ curbHeight: number;
5503
+ cutoutOffset: number;
5504
+ surfaceNormal?: [number, number, number] | undefined;
5505
+ type: "skylight";
5506
5506
  } | {
5507
5507
  object: "node";
5508
5508
  name?: string | undefined;