@pascal-app/core 1.1.0 → 1.1.2

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 (133) 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 +2618 -2618
  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 +4 -2
  13. package/dist/agent-operations/batch.d.ts.map +1 -1
  14. package/dist/agent-operations/batch.js +9 -6
  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 +585 -585
  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 +5716 -7
  24. package/dist/agent-operations/index.d.ts.map +1 -1
  25. package/dist/agent-operations/index.js +17 -3
  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 +3818 -3818
  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 +10 -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-operations/verify-scene.d.ts +7 -3
  41. package/dist/agent-operations/verify-scene.d.ts.map +1 -1
  42. package/dist/agent-operations/verify-scene.js +15 -7
  43. package/dist/agent-tools/assets.js +1 -1
  44. package/dist/building/__fixtures__/wall-opening-cases.d.ts +30 -30
  45. package/dist/building/level-duplication.d.ts +3409 -3409
  46. package/dist/building/level-duplication.d.ts.map +1 -1
  47. package/dist/building/level-duplication.js +3 -1
  48. package/dist/building/wall-openings.d.ts +75 -75
  49. package/dist/commands/structure/shared.d.ts +3407 -3407
  50. package/dist/commands/structure/zone-wall-merge.d.ts +652 -652
  51. package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts +3818 -3818
  52. package/dist/index.d.ts +2 -0
  53. package/dist/index.d.ts.map +1 -1
  54. package/dist/index.js +2 -0
  55. package/dist/lib/__fixtures__/mezzanine.d.ts +2003 -2003
  56. package/dist/lib/absorb-wall-separators.d.ts +1032 -1032
  57. package/dist/lib/asset-storage.d.ts.map +1 -1
  58. package/dist/lib/asset-storage.js +3 -0
  59. package/dist/lib/floor-foundation-datum.d.ts.map +1 -1
  60. package/dist/lib/floor-foundation-datum.js +5 -1
  61. package/dist/lib/floorplan/context.d.ts +95 -0
  62. package/dist/lib/floorplan/context.d.ts.map +1 -0
  63. package/dist/lib/floorplan/context.js +155 -0
  64. package/dist/lib/floorplan/index.d.ts +6 -0
  65. package/dist/lib/floorplan/index.d.ts.map +1 -0
  66. package/dist/lib/floorplan/index.js +5 -0
  67. package/dist/lib/floorplan/marks.d.ts +71 -0
  68. package/dist/lib/floorplan/marks.d.ts.map +1 -0
  69. package/dist/lib/floorplan/marks.js +157 -0
  70. package/dist/lib/floorplan/plan-math.d.ts +18 -0
  71. package/dist/lib/floorplan/plan-math.d.ts.map +1 -0
  72. package/dist/lib/floorplan/plan-math.js +82 -0
  73. package/dist/lib/floorplan/svg-paths.d.ts +17 -0
  74. package/dist/lib/floorplan/svg-paths.d.ts.map +1 -0
  75. package/dist/lib/floorplan/svg-paths.js +92 -0
  76. package/dist/lib/floorplan/wall-affordances.d.ts +31 -0
  77. package/dist/lib/floorplan/wall-affordances.d.ts.map +1 -0
  78. package/dist/lib/floorplan/wall-affordances.js +24 -0
  79. package/dist/lib/steps.d.ts +8 -0
  80. package/dist/lib/steps.d.ts.map +1 -0
  81. package/dist/lib/steps.js +7 -0
  82. package/dist/registry/__fixtures__/roof-planes.d.ts +69 -0
  83. package/dist/registry/__fixtures__/roof-planes.d.ts.map +1 -0
  84. package/dist/registry/__fixtures__/roof-planes.js +59 -0
  85. package/dist/registry/index.d.ts +2 -1
  86. package/dist/registry/index.d.ts.map +1 -1
  87. package/dist/registry/index.js +1 -0
  88. package/dist/registry/roofs.d.ts +34 -0
  89. package/dist/registry/roofs.d.ts.map +1 -0
  90. package/dist/registry/roofs.js +61 -0
  91. package/dist/registry/types.d.ts +30 -0
  92. package/dist/registry/types.d.ts.map +1 -1
  93. package/dist/registry/validate-relations.d.ts +5 -1
  94. package/dist/registry/validate-relations.d.ts.map +1 -1
  95. package/dist/registry/validate-relations.js +6 -2
  96. package/dist/schema/asset-url.d.ts +8 -0
  97. package/dist/schema/asset-url.d.ts.map +1 -1
  98. package/dist/schema/asset-url.js +17 -0
  99. package/dist/schema/nodes/roof.d.ts +1 -1
  100. package/dist/schema/nodes/roof.d.ts.map +1 -1
  101. package/dist/schema/nodes/roof.js +13 -8
  102. package/dist/schema/types.d.ts +1 -1
  103. package/dist/services/roof-level.d.ts.map +1 -1
  104. package/dist/services/roof-level.js +12 -2
  105. package/dist/services/roof-move.d.ts +4 -2
  106. package/dist/services/roof-move.d.ts.map +1 -1
  107. package/dist/services/roof-move.js +21 -9
  108. package/dist/spatial/usage-field/findings.d.ts +10 -1
  109. package/dist/spatial/usage-field/findings.d.ts.map +1 -1
  110. package/dist/spatial/usage-field/findings.js +56 -12
  111. package/dist/spatial/usage-field/measure.d.ts +3 -1
  112. package/dist/spatial/usage-field/measure.d.ts.map +1 -1
  113. package/dist/spatial/usage-field/measure.js +7 -2
  114. package/dist/spatial/usage-field/path.d.ts.map +1 -1
  115. package/dist/spatial/usage-field/path.js +28 -18
  116. package/dist/store/actions/node-actions.d.ts +2380 -2380
  117. package/dist/store/scene-annotations.d.ts +1279 -1279
  118. package/dist/systems/document-reconcile.d.ts.map +1 -1
  119. package/dist/systems/document-reconcile.js +1 -2
  120. package/dist/systems/roof/roof-elevation.d.ts +11 -6
  121. package/dist/systems/roof/roof-elevation.d.ts.map +1 -1
  122. package/dist/systems/roof/roof-elevation.js +24 -11
  123. package/dist/systems/slab/__fixtures__/floor-step.d.ts +2381 -2381
  124. package/dist/systems/slab/__fixtures__/raised-room.d.ts +3818 -3818
  125. package/dist/systems/stair/stair-opening-preview.d.ts +900 -900
  126. package/dist/utils/ensure-scene-openings.d.ts +4815 -4815
  127. package/dist/utils/floor-plate-migration.d.ts +1032 -1032
  128. package/dist/utils/owned-floor-opening-migration.d.ts +1032 -1032
  129. package/dist/utils/reconcile-structure-on-load.d.ts +2380 -2380
  130. package/dist/utils/scene-bounds.d.ts +32 -0
  131. package/dist/utils/scene-bounds.d.ts.map +1 -0
  132. package/dist/utils/scene-bounds.js +201 -0
  133. package/package.json +1 -1
@@ -30,647 +30,29 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
30
30
  fromIds: string[];
31
31
  } | undefined;
32
32
  } | undefined;
33
- id: `beam_${string}`;
34
- start: [number, number];
35
- end: [number, number];
36
- width: number;
37
- depth: number;
38
- size?: string | undefined;
39
- plies: number;
40
- material: "glulam" | "lvl" | "pressure-treated" | "sawn" | "steel";
41
- placement: "dropped" | "flush";
42
- topElevation?: number | undefined;
43
- supportSlabId?: string | undefined;
44
- type: "beam";
45
- } | {
46
- object: "node";
47
- name?: string | undefined;
48
- parentId: string | null;
49
- visible: boolean;
50
- camera?: {
51
- position: [number, number, number];
52
- target: [number, number, number];
53
- mode: "orthographic" | "perspective";
54
- fov?: number | undefined;
55
- zoom?: number | undefined;
56
- } | undefined;
57
- metadata: Record<string, unknown>;
58
- provenance?: {
59
- refs: {
60
- ns?: string | undefined;
61
- id: string;
62
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
63
- }[];
64
- lineage?: {
65
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
66
- fromIds: string[];
67
- } | undefined;
68
- } | undefined;
69
- id: `measurement_${string}`;
70
- measurement: {
71
- kind: "volume";
72
- base: ({
73
- kind: "feature";
74
- reference: {
75
- nodeId: string;
76
- featureId: string;
77
- parameters?: Record<string, string | number | boolean> | undefined;
78
- };
79
- fallback: [number, number, number];
80
- } | [number, number, number])[];
81
- extrusion: [number, number, number];
82
- } | {
83
- kind: "distance";
84
- points: [{
85
- kind: "feature";
86
- reference: {
87
- nodeId: string;
88
- featureId: string;
89
- parameters?: Record<string, string | number | boolean> | undefined;
90
- };
91
- fallback: [number, number, number];
92
- } | [number, number, number], {
93
- kind: "feature";
94
- reference: {
95
- nodeId: string;
96
- featureId: string;
97
- parameters?: Record<string, string | number | boolean> | undefined;
98
- };
99
- fallback: [number, number, number];
100
- } | [number, number, number]];
101
- } | {
102
- kind: "angle";
103
- points: [{
104
- kind: "feature";
105
- reference: {
106
- nodeId: string;
107
- featureId: string;
108
- parameters?: Record<string, string | number | boolean> | undefined;
109
- };
110
- fallback: [number, number, number];
111
- } | [number, number, number], {
112
- kind: "feature";
113
- reference: {
114
- nodeId: string;
115
- featureId: string;
116
- parameters?: Record<string, string | number | boolean> | undefined;
117
- };
118
- fallback: [number, number, number];
119
- } | [number, number, number], {
120
- kind: "feature";
121
- reference: {
122
- nodeId: string;
123
- featureId: string;
124
- parameters?: Record<string, string | number | boolean> | undefined;
125
- };
126
- fallback: [number, number, number];
127
- } | [number, number, number]];
128
- } | {
129
- kind: "area";
130
- base: ({
131
- kind: "feature";
132
- reference: {
133
- nodeId: string;
134
- featureId: string;
135
- parameters?: Record<string, string | number | boolean> | undefined;
136
- };
137
- fallback: [number, number, number];
138
- } | [number, number, number])[];
139
- } | {
140
- kind: "perimeter";
141
- base: ({
142
- kind: "feature";
143
- reference: {
144
- nodeId: string;
145
- featureId: string;
146
- parameters?: Record<string, string | number | boolean> | undefined;
147
- };
148
- fallback: [number, number, number];
149
- } | [number, number, number])[];
150
- };
151
- type: "measurement";
152
- } | {
153
- object: "node";
154
- name?: string | undefined;
155
- parentId: string | null;
156
- visible: boolean;
157
- camera?: {
158
- position: [number, number, number];
159
- target: [number, number, number];
160
- mode: "orthographic" | "perspective";
161
- fov?: number | undefined;
162
- zoom?: number | undefined;
163
- } | undefined;
164
- metadata: Record<string, unknown>;
165
- provenance?: {
166
- refs: {
167
- ns?: string | undefined;
168
- id: string;
169
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
170
- }[];
171
- lineage?: {
172
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
173
- fromIds: string[];
174
- } | undefined;
175
- } | undefined;
176
- id: `duct-segment_${string}`;
177
- path: [number, number, number][];
178
- autoHangers?: boolean | undefined;
179
- hangerOverrides?: Record<string, {
180
- fraction?: number | undefined;
181
- skipped?: boolean | undefined;
182
- hostId?: string | undefined;
183
- }> | undefined;
184
- hangerStyle?: "double" | "single" | undefined;
185
- hangerSpacing?: number | undefined;
186
- hangerMaxReach?: number | undefined;
187
- wallAttachment?: {
188
- wallId: `wall_${string}`;
189
- side: "back" | "front";
190
- startUV: [number, number];
191
- endUV: [number, number];
192
- offset: number;
193
- } | undefined;
194
- shape: "oval" | "rect" | "round";
195
- diameter: number;
196
- width: number;
197
- height: number;
198
- roll: number;
199
- ductMaterial: "duct-board" | "flex" | "sheet-metal" | "spiral";
200
- seamDetail: boolean;
201
- insulated: boolean;
202
- insulationR: number;
203
- system: "return" | "supply";
204
- slots?: Record<string, string> | undefined;
205
- type: "duct-segment";
206
- } | {
207
- object: "node";
208
- name?: string | undefined;
209
- parentId: string | null;
210
- visible: boolean;
211
- camera?: {
212
- position: [number, number, number];
213
- target: [number, number, number];
214
- mode: "orthographic" | "perspective";
215
- fov?: number | undefined;
216
- zoom?: number | undefined;
217
- } | undefined;
218
- metadata: Record<string, unknown>;
219
- provenance?: {
220
- refs: {
221
- ns?: string | undefined;
222
- id: string;
223
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
224
- }[];
225
- lineage?: {
226
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
227
- fromIds: string[];
228
- } | undefined;
229
- } | undefined;
230
- id: `floor-opening_${string}`;
231
- polygon: [number, number][];
232
- hostZoneId?: string | undefined;
233
- legacyPlateCuts?: Record<string, [number, number][][]> | undefined;
234
- legacyCeilingCuts?: Record<string, [number, number][][]> | undefined;
235
- source: string;
236
- ownerId?: string | undefined;
237
- surfaceId?: string | undefined;
238
- drawnOn: "ceiling" | "floor";
239
- cutsPrimary: boolean;
240
- cutsAdjacent: boolean;
241
- type: "floor-opening";
242
- } | {
243
- object: "node";
244
- name?: string | undefined;
245
- parentId: string | null;
246
- visible: boolean;
247
- camera?: {
248
- position: [number, number, number];
249
- target: [number, number, number];
250
- mode: "orthographic" | "perspective";
251
- fov?: number | undefined;
252
- zoom?: number | undefined;
253
- } | undefined;
254
- metadata: Record<string, unknown>;
255
- provenance?: {
256
- refs: {
257
- ns?: string | undefined;
258
- id: string;
259
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
260
- }[];
261
- lineage?: {
262
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
263
- fromIds: string[];
264
- } | undefined;
265
- } | undefined;
266
- id: `lineset_${string}`;
267
- path: [number, number, number][];
268
- suctionDiameter: number;
269
- liquidDiameter: number;
270
- insulated: boolean;
271
- type: "lineset";
272
- } | {
273
- object: "node";
274
- name?: string | undefined;
275
- parentId: string | null;
276
- visible: boolean;
277
- camera?: {
278
- position: [number, number, number];
279
- target: [number, number, number];
280
- mode: "orthographic" | "perspective";
281
- fov?: number | undefined;
282
- zoom?: number | undefined;
283
- } | undefined;
284
- metadata: Record<string, unknown>;
285
- provenance?: {
286
- refs: {
287
- ns?: string | undefined;
288
- id: string;
289
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
290
- }[];
291
- lineage?: {
292
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
293
- fromIds: string[];
294
- } | undefined;
295
- } | undefined;
296
- id: `pipe-trap_${string}`;
297
- position: [number, number, number];
298
- rotation: number;
299
- diameter: number;
300
- pipeMaterial: "abs" | "cast-iron" | "pvc";
301
- armLengthM: number;
302
- type: "pipe-trap";
303
- } | {
304
- object: "node";
305
- name?: string | undefined;
306
- parentId: string | null;
307
- visible: boolean;
308
- camera?: {
309
- position: [number, number, number];
310
- target: [number, number, number];
311
- mode: "orthographic" | "perspective";
312
- fov?: number | undefined;
313
- zoom?: number | undefined;
314
- } | undefined;
315
- metadata: Record<string, unknown>;
316
- provenance?: {
317
- refs: {
318
- ns?: string | undefined;
319
- id: string;
320
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
321
- }[];
322
- lineage?: {
323
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
324
- fromIds: string[];
325
- } | undefined;
326
- } | undefined;
327
- id: `scan_${string}`;
328
- url: string | null;
329
- captureSession: {
330
- sessionId: string;
331
- schemaVersion?: number | undefined;
332
- revisionId?: string | undefined;
333
- manifestUrl?: string | undefined;
334
- } | null;
335
- layers: Record<string, boolean>;
336
- position: [number, number, number];
337
- rotation: [number, number, number];
338
- scale: number;
339
- opacity: number;
340
- type: "scan";
341
- } | {
342
- object: "node";
343
- name?: string | undefined;
344
- parentId: string | null;
345
- visible: boolean;
346
- camera?: {
347
- position: [number, number, number];
348
- target: [number, number, number];
349
- mode: "orthographic" | "perspective";
350
- fov?: number | undefined;
351
- zoom?: number | undefined;
352
- } | undefined;
353
- metadata: Record<string, unknown>;
354
- provenance?: {
355
- refs: {
356
- ns?: string | undefined;
357
- id: string;
358
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
359
- }[];
360
- lineage?: {
361
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
362
- fromIds: string[];
363
- } | undefined;
364
- } | undefined;
365
- id: `slab_${string}`;
366
- material?: {
367
- id?: string | undefined;
368
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
369
- properties?: {
370
- color: string;
371
- roughness: number;
372
- metalness: number;
373
- opacity: number;
374
- transparent: boolean;
375
- side: "back" | "double" | "front";
376
- } | undefined;
377
- texture?: {
378
- url: string;
379
- repeat?: [number, number] | undefined;
380
- scale?: number | undefined;
381
- offset?: [number, number] | undefined;
382
- normalMap?: string | undefined;
383
- normalScale?: number | undefined;
384
- bumpMap?: string | undefined;
385
- bumpScale?: number | undefined;
386
- } | undefined;
387
- } | undefined;
388
- materialPreset?: string | undefined;
389
- slots?: Record<string, string> | undefined;
390
- polygon: [number, number][];
391
- holes: [number, number][][];
392
- holeMetadata: {
393
- source: "elevator" | "floor-opening" | "manual" | "room" | "stair";
394
- openingId?: string | undefined;
395
- stairId?: string | undefined;
396
- elevatorId?: string | undefined;
397
- }[];
398
- elevation: number;
399
- floorHeight?: number | undefined;
400
- referenceFloorElevation?: number | undefined;
401
- foundation?: {
402
- type: "none" | "solid";
403
- material?: string | {
404
- id?: string | undefined;
405
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
406
- properties?: {
407
- color: string;
408
- roughness: number;
409
- metalness: number;
410
- opacity: number;
411
- transparent: boolean;
412
- side: "back" | "double" | "front";
413
- } | undefined;
414
- texture?: {
415
- url: string;
416
- repeat?: [number, number] | undefined;
417
- scale?: number | undefined;
418
- offset?: [number, number] | undefined;
419
- normalMap?: string | undefined;
420
- normalScale?: number | undefined;
421
- bumpMap?: string | undefined;
422
- bumpScale?: number | undefined;
423
- } | undefined;
424
- } | undefined;
425
- } | undefined;
426
- thickness: number;
427
- recessed: boolean;
428
- recessedRimElevation?: number | undefined;
429
- fillToTerrain?: boolean | undefined;
430
- boundary?: "auto" | undefined;
431
- support?: "open" | undefined;
432
- plateRole?: "base" | "platform" | "sunken" | undefined;
433
- railing?: {
434
- start: [number, number];
435
- end: [number, number];
436
- }[] | undefined;
437
- zoneIds?: string[] | undefined;
438
- associatedZoneIds?: string[] | undefined;
439
- autoFromWalls: boolean;
440
- surfaceScript?: {
441
- kind: "script";
442
- meta?: {
443
- description?: string | undefined;
444
- category?: string | undefined;
445
- tags?: string[] | undefined;
446
- parent?: string | undefined;
447
- } | undefined;
448
- language: "bpy" | "three";
449
- script: string;
450
- params: Record<string, string | number | boolean>;
451
- artifact: string;
452
- manifest: {
453
- bounds: {
454
- min: [number, number, number];
455
- max: [number, number, number];
456
- };
457
- params: {
458
- id: string;
459
- label?: string | undefined;
460
- kind: "boolean" | "number" | "string";
461
- default: string | number | boolean;
462
- min?: number | undefined;
463
- max?: number | undefined;
464
- step?: number | undefined;
465
- unit?: string | undefined;
466
- options?: string[] | undefined;
467
- }[];
468
- parts: {
469
- id: string;
470
- label?: string | undefined;
471
- type?: string | undefined;
472
- bounds?: {
473
- min: [number, number, number];
474
- max: [number, number, number];
475
- } | undefined;
476
- }[];
477
- surfaces: {
478
- part?: string | undefined;
479
- y: number;
480
- polygon: [number, number][];
481
- }[];
482
- slots: {
483
- id: string;
484
- label?: string | undefined;
485
- color?: string | undefined;
486
- roughness?: number | undefined;
487
- metalness?: number | undefined;
488
- transparent?: boolean | undefined;
489
- emissive?: boolean | undefined;
490
- }[];
491
- anchors: {
492
- id: string;
493
- position: [number, number, number];
494
- normal?: [number, number, number] | undefined;
495
- }[];
496
- lights: {
497
- id: string;
498
- position: [number, number, number];
499
- color: string;
500
- intensity: number;
501
- distance?: number | undefined;
502
- spot?: {
503
- direction: [number, number, number];
504
- angle: number;
505
- softness: number;
506
- } | undefined;
507
- shadows?: boolean | undefined;
508
- glow?: {
509
- size: number;
510
- strength: number;
511
- } | undefined;
512
- }[];
513
- undersides: {
514
- part?: string | undefined;
515
- polygon: [number, number][];
516
- plane: [number, number, number, number];
517
- }[];
518
- animations: {
519
- name: string;
520
- duration: number;
521
- }[];
522
- cutters?: {
523
- host: "ceiling" | "mounted" | "slab" | "wall";
524
- polygon: number[][];
525
- minY: number;
526
- maxY: number;
527
- }[] | undefined;
528
- cutout: boolean;
529
- collider: boolean;
530
- shape?: {
531
- tolerance: number;
532
- bands: {
533
- y0: number;
534
- y1: number;
535
- polygons: {
536
- outer: [number, number][];
537
- holes?: [number, number][][] | undefined;
538
- }[];
539
- }[];
540
- } | undefined;
541
- triangles: number;
542
- coverage?: number | undefined;
543
- uncovered?: {
544
- min: [number, number];
545
- max: [number, number];
546
- }[] | undefined;
547
- };
548
- images?: {
549
- artifact: string;
550
- thumbnail: string;
551
- floorPlan: string;
552
- } | undefined;
553
- inputs: string;
554
- } | undefined;
555
- type: "slab";
556
- } | {
557
- object: "node";
558
- name?: string | undefined;
559
- parentId: string | null;
560
- visible: boolean;
561
- camera?: {
562
- position: [number, number, number];
563
- target: [number, number, number];
564
- mode: "orthographic" | "perspective";
565
- fov?: number | undefined;
566
- zoom?: number | undefined;
567
- } | undefined;
568
- metadata: Record<string, unknown>;
569
- provenance?: {
570
- refs: {
571
- ns?: string | undefined;
33
+ id: `block_${string}`;
34
+ children: string[];
35
+ position: [number, number, number];
36
+ rotation: number;
37
+ supportSlabId?: string | undefined;
38
+ topology: {
39
+ vertices: {
572
40
  id: string;
573
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
41
+ position: [number, number, number];
574
42
  }[];
575
- lineage?: {
576
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
577
- fromIds: string[];
578
- } | undefined;
579
- } | undefined;
580
- id: `structural-grid_${string}`;
581
- start: [number, number];
582
- end: [number, number];
583
- label: string;
584
- showStartBubble: boolean;
585
- showEndBubble: boolean;
586
- type: "structural-grid";
587
- } | {
588
- object: "node";
589
- parentId: string | null;
590
- visible: boolean;
591
- camera?: {
592
- position: [number, number, number];
593
- target: [number, number, number];
594
- mode: "orthographic" | "perspective";
595
- fov?: number | undefined;
596
- zoom?: number | undefined;
597
- } | undefined;
598
- provenance?: {
599
- refs: {
600
- ns?: string | undefined;
43
+ edges: {
601
44
  id: string;
602
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
45
+ vertexIds: [string, string];
603
46
  }[];
604
- lineage?: {
605
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
606
- fromIds: string[];
607
- } | undefined;
608
- } | undefined;
609
- id: `unit_${string}`;
610
- name: string;
611
- kind: "apartment" | "commercial" | "common" | "hotel-room";
612
- members: `zone_${string}`[];
613
- color: string;
614
- metadata: Record<string, unknown>;
615
- type: "unit";
616
- } | {
617
- object: "node";
618
- name?: string | undefined;
619
- parentId: string | null;
620
- visible: boolean;
621
- camera?: {
622
- position: [number, number, number];
623
- target: [number, number, number];
624
- mode: "orthographic" | "perspective";
625
- fov?: number | undefined;
626
- zoom?: number | undefined;
627
- } | undefined;
628
- metadata: Record<string, unknown>;
629
- provenance?: {
630
- refs: {
631
- ns?: string | undefined;
47
+ faces: {
632
48
  id: string;
633
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
49
+ vertexIds: string[];
50
+ materialSlot: string;
634
51
  }[];
635
- lineage?: {
636
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
637
- fromIds: string[];
638
- } | undefined;
639
- } | undefined;
640
- id: `cupola_${string}`;
641
- material?: {
642
- id?: string | undefined;
643
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
644
- properties?: {
645
- color: string;
646
- roughness: number;
647
- metalness: number;
648
- opacity: number;
649
- transparent: boolean;
650
- side: "back" | "double" | "front";
651
- } | undefined;
652
- texture?: {
653
- url: string;
654
- repeat?: [number, number] | undefined;
655
- scale?: number | undefined;
656
- offset?: [number, number] | undefined;
657
- normalMap?: string | undefined;
658
- normalScale?: number | undefined;
659
- bumpMap?: string | undefined;
660
- bumpScale?: number | undefined;
661
- } | undefined;
662
- } | undefined;
663
- slots?: Record<string, string> | undefined;
664
- materialPreset: string;
665
- roofSegmentId?: string | undefined;
666
- position: [number, number, number];
667
- rotation: number;
668
- width: number;
669
- depth: number;
670
- height: number;
671
- roofStyle: "dome" | "pyramid";
672
- finial: boolean;
673
- type: "cupola";
52
+ };
53
+ slots: Record<string, string>;
54
+ slotNames: Record<string, string>;
55
+ type: "block";
674
56
  } | {
675
57
  object: "node";
676
58
  name?: string | undefined;
@@ -695,27 +77,42 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
695
77
  fromIds: string[];
696
78
  } | undefined;
697
79
  } | undefined;
698
- matchFenceStyle?: boolean | undefined;
699
- matchFenceHeight?: boolean | undefined;
700
- leafType?: "double" | "single" | undefined;
701
- style?: "guard" | "horizontal" | "match" | "picket" | "privacy" | "rail" | "slat" | undefined;
702
- height?: number | undefined;
703
- clearance?: number | undefined;
704
- thickness?: number | undefined;
705
- frameWidth?: number | undefined;
706
- spacing?: number | undefined;
707
- boardWidth?: number | undefined;
708
- hinge?: "left" | "right" | undefined;
709
- swing?: "inward" | "outward" | undefined;
710
- openAngle?: number | undefined;
711
- leafSplit?: number | undefined;
712
- brace?: "cross" | "diagonal" | "none" | undefined;
713
- showHardware?: boolean | undefined;
714
- showPosts?: boolean | undefined;
715
- id: `fence-gate_${string}`;
716
- center: number;
717
- width: number;
718
- type: "fence-gate";
80
+ id: `construction-dimension_${string}`;
81
+ anchors: ({
82
+ kind: "feature";
83
+ reference: {
84
+ nodeId: string;
85
+ featureId: string;
86
+ parameters?: Record<string, string | number | boolean> | undefined;
87
+ };
88
+ fallback: [number, number, number];
89
+ } | [number, number, number])[];
90
+ baseline: {
91
+ origin: [number, number];
92
+ direction: [number, number];
93
+ };
94
+ chainMode: "continuous" | "point-to-point";
95
+ mode: "angular" | "arc-length" | "center-mark" | "chord" | "coordinate" | "diameter" | "linear" | "radius";
96
+ featureCount: number;
97
+ showCenterMark: boolean;
98
+ prefix: string;
99
+ suffix: string;
100
+ textOverride: string | null;
101
+ datumPolicy: "centerline" | "finish-face" | "structural-face" | "wall-face";
102
+ terminator: "architectural-tick" | "dot" | "filled-arrow" | "open-arrow";
103
+ textPosition: "above" | "centered";
104
+ imperialPrecision: "1" | "1/16" | "1/2" | "1/4" | "1/8";
105
+ metricNotation: "meters" | "millimeters";
106
+ extensionStartGap: number;
107
+ extensionOvershoot: number;
108
+ drawingType: "floor-plan" | "foundation-plan" | "reflected-ceiling-plan" | "roof-plan" | "site-plan";
109
+ drawingOverrides: {
110
+ drawingType: "floor-plan" | "foundation-plan" | "reflected-ceiling-plan" | "roof-plan" | "site-plan";
111
+ presentation: "controlled" | "omit" | "shown";
112
+ suppressedSegmentIndexes: number[];
113
+ }[];
114
+ controllingDimensionId: `construction-dimension_${string}` | null;
115
+ type: "construction-dimension";
719
116
  } | {
720
117
  object: "node";
721
118
  name?: string | undefined;
@@ -740,14 +137,19 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
740
137
  fromIds: string[];
741
138
  } | undefined;
742
139
  } | undefined;
743
- center: number;
140
+ id: `duct-terminal_${string}`;
141
+ position: [number, number, number];
142
+ rotation: number;
143
+ supportSlabId?: string | undefined;
144
+ terminalType: "diffuser" | "return-grille" | "supply-register";
145
+ mount: "ceiling" | "floor" | "wall";
744
146
  width: number;
745
- matchFenceStyle?: boolean | undefined;
746
- matchFenceHeight?: boolean | undefined;
747
- height?: number | undefined;
748
- showPosts: boolean;
749
- id: `fence-opening_${string}`;
750
- type: "fence-opening";
147
+ depth: number;
148
+ collarShape: "oval" | "rect" | "round";
149
+ collarDiameter: number;
150
+ collarWidth: number;
151
+ collarHeight: number;
152
+ type: "duct-terminal";
751
153
  } | {
752
154
  object: "node";
753
155
  name?: string | undefined;
@@ -769,80 +171,54 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
769
171
  }[];
770
172
  lineage?: {
771
173
  op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
772
- fromIds: string[];
773
- } | undefined;
774
- } | undefined;
775
- id: `skylight_${string}`;
776
- material?: {
777
- id?: string | undefined;
778
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
779
- properties?: {
780
- color: string;
781
- roughness: number;
782
- metalness: number;
783
- opacity: number;
784
- transparent: boolean;
785
- side: "back" | "double" | "front";
786
- } | undefined;
787
- texture?: {
788
- url: string;
789
- repeat?: [number, number] | undefined;
790
- scale?: number | undefined;
791
- offset?: [number, number] | undefined;
792
- normalMap?: string | undefined;
793
- normalScale?: number | undefined;
794
- bumpMap?: string | undefined;
795
- bumpScale?: number | undefined;
796
- } | undefined;
797
- } | undefined;
798
- materialPreset?: string | undefined;
799
- glassMaterial?: {
800
- id?: string | undefined;
801
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
802
- properties?: {
803
- color: string;
804
- roughness: number;
805
- metalness: number;
806
- opacity: number;
807
- transparent: boolean;
808
- side: "back" | "double" | "front";
809
- } | undefined;
810
- texture?: {
811
- url: string;
812
- repeat?: [number, number] | undefined;
813
- scale?: number | undefined;
814
- offset?: [number, number] | undefined;
815
- normalMap?: string | undefined;
816
- normalScale?: number | undefined;
817
- bumpMap?: string | undefined;
818
- bumpScale?: number | undefined;
174
+ fromIds: string[];
819
175
  } | undefined;
820
176
  } | undefined;
821
- glassMaterialPreset?: string | undefined;
822
- roofSegmentId?: string | undefined;
177
+ id: `guide_${string}`;
178
+ url: string;
823
179
  position: [number, number, number];
824
- rotation: number;
825
- width: number;
826
- height: number;
827
- frameThickness: number;
828
- frameDepth: number;
829
- skylightType: "flat" | "lantern" | "opening" | "sliding" | "walk-on";
830
- glassThickness: number;
831
- lanternHeight: number;
832
- lanternTopScale: number;
833
- openingAngle: number;
834
- openingSide: "bottom" | "left" | "right" | "top";
835
- operationState: number;
836
- motorHousing: boolean;
837
- slideFraction: number;
838
- slideDirection: "x" | "z";
839
- trackWidth: number;
840
- motorHousingSize: number;
841
- curb: boolean;
842
- curbHeight: number;
843
- cutoutOffset: number;
844
- surfaceNormal?: [number, number, number] | undefined;
845
- type: "skylight";
180
+ rotation: [number, number, number];
181
+ scale: number;
182
+ opacity: number;
183
+ scaleReference: {
184
+ start: [number, number];
185
+ end: [number, number];
186
+ realLengthMeters: number;
187
+ measuredLengthUnits: number;
188
+ metersPerUnit: number;
189
+ displayLength?: number | undefined;
190
+ displayUnit?: "centimeters" | "feet" | "inches" | "meters" | undefined;
191
+ label: string;
192
+ } | null;
193
+ type: "guide";
194
+ } | {
195
+ object: "node";
196
+ name?: string | undefined;
197
+ parentId: string | null;
198
+ visible: boolean;
199
+ camera?: {
200
+ position: [number, number, number];
201
+ target: [number, number, number];
202
+ mode: "orthographic" | "perspective";
203
+ fov?: number | undefined;
204
+ zoom?: number | undefined;
205
+ } | undefined;
206
+ metadata: Record<string, unknown>;
207
+ provenance?: {
208
+ refs: {
209
+ ns?: string | undefined;
210
+ id: string;
211
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
212
+ }[];
213
+ lineage?: {
214
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
215
+ fromIds: string[];
216
+ } | undefined;
217
+ } | undefined;
218
+ id: `liquid-line_${string}`;
219
+ path: [number, number, number][];
220
+ diameter: number;
221
+ type: "liquid-line";
846
222
  } | {
847
223
  object: "node";
848
224
  name?: string | undefined;
@@ -2511,9 +1887,224 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
2511
1887
  presetId?: string | undefined;
2512
1888
  cavityInsulation?: string | undefined;
2513
1889
  } | undefined;
2514
- slots?: Record<string, string> | undefined;
2515
- children: `rseg_${string}`[];
2516
- type: "roof";
1890
+ slots?: Record<string, string> | undefined;
1891
+ children: string[];
1892
+ type: "roof";
1893
+ } | {
1894
+ object: "node";
1895
+ name?: string | undefined;
1896
+ parentId: string | null;
1897
+ visible: boolean;
1898
+ camera?: {
1899
+ position: [number, number, number];
1900
+ target: [number, number, number];
1901
+ mode: "orthographic" | "perspective";
1902
+ fov?: number | undefined;
1903
+ zoom?: number | undefined;
1904
+ } | undefined;
1905
+ metadata: Record<string, unknown>;
1906
+ provenance?: {
1907
+ refs: {
1908
+ ns?: string | undefined;
1909
+ id: string;
1910
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
1911
+ }[];
1912
+ lineage?: {
1913
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
1914
+ fromIds: string[];
1915
+ } | undefined;
1916
+ } | undefined;
1917
+ id: `slab_${string}`;
1918
+ material?: {
1919
+ id?: string | undefined;
1920
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1921
+ properties?: {
1922
+ color: string;
1923
+ roughness: number;
1924
+ metalness: number;
1925
+ opacity: number;
1926
+ transparent: boolean;
1927
+ side: "back" | "double" | "front";
1928
+ } | undefined;
1929
+ texture?: {
1930
+ url: string;
1931
+ repeat?: [number, number] | undefined;
1932
+ scale?: number | undefined;
1933
+ offset?: [number, number] | undefined;
1934
+ normalMap?: string | undefined;
1935
+ normalScale?: number | undefined;
1936
+ bumpMap?: string | undefined;
1937
+ bumpScale?: number | undefined;
1938
+ } | undefined;
1939
+ } | undefined;
1940
+ materialPreset?: string | undefined;
1941
+ slots?: Record<string, string> | undefined;
1942
+ polygon: [number, number][];
1943
+ holes: [number, number][][];
1944
+ holeMetadata: {
1945
+ source: "elevator" | "floor-opening" | "manual" | "room" | "stair";
1946
+ openingId?: string | undefined;
1947
+ stairId?: string | undefined;
1948
+ elevatorId?: string | undefined;
1949
+ }[];
1950
+ elevation: number;
1951
+ floorHeight?: number | undefined;
1952
+ referenceFloorElevation?: number | undefined;
1953
+ foundation?: {
1954
+ type: "none" | "solid";
1955
+ material?: string | {
1956
+ id?: string | undefined;
1957
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1958
+ properties?: {
1959
+ color: string;
1960
+ roughness: number;
1961
+ metalness: number;
1962
+ opacity: number;
1963
+ transparent: boolean;
1964
+ side: "back" | "double" | "front";
1965
+ } | undefined;
1966
+ texture?: {
1967
+ url: string;
1968
+ repeat?: [number, number] | undefined;
1969
+ scale?: number | undefined;
1970
+ offset?: [number, number] | undefined;
1971
+ normalMap?: string | undefined;
1972
+ normalScale?: number | undefined;
1973
+ bumpMap?: string | undefined;
1974
+ bumpScale?: number | undefined;
1975
+ } | undefined;
1976
+ } | undefined;
1977
+ } | undefined;
1978
+ thickness: number;
1979
+ recessed: boolean;
1980
+ recessedRimElevation?: number | undefined;
1981
+ fillToTerrain?: boolean | undefined;
1982
+ boundary?: "auto" | undefined;
1983
+ support?: "open" | undefined;
1984
+ plateRole?: "base" | "platform" | "sunken" | undefined;
1985
+ railing?: {
1986
+ start: [number, number];
1987
+ end: [number, number];
1988
+ }[] | undefined;
1989
+ zoneIds?: string[] | undefined;
1990
+ associatedZoneIds?: string[] | undefined;
1991
+ autoFromWalls: boolean;
1992
+ surfaceScript?: {
1993
+ kind: "script";
1994
+ meta?: {
1995
+ description?: string | undefined;
1996
+ category?: string | undefined;
1997
+ tags?: string[] | undefined;
1998
+ parent?: string | undefined;
1999
+ } | undefined;
2000
+ language: "bpy" | "three";
2001
+ script: string;
2002
+ params: Record<string, string | number | boolean>;
2003
+ artifact: string;
2004
+ manifest: {
2005
+ bounds: {
2006
+ min: [number, number, number];
2007
+ max: [number, number, number];
2008
+ };
2009
+ params: {
2010
+ id: string;
2011
+ label?: string | undefined;
2012
+ kind: "boolean" | "number" | "string";
2013
+ default: string | number | boolean;
2014
+ min?: number | undefined;
2015
+ max?: number | undefined;
2016
+ step?: number | undefined;
2017
+ unit?: string | undefined;
2018
+ options?: string[] | undefined;
2019
+ }[];
2020
+ parts: {
2021
+ id: string;
2022
+ label?: string | undefined;
2023
+ type?: string | undefined;
2024
+ bounds?: {
2025
+ min: [number, number, number];
2026
+ max: [number, number, number];
2027
+ } | undefined;
2028
+ }[];
2029
+ surfaces: {
2030
+ part?: string | undefined;
2031
+ y: number;
2032
+ polygon: [number, number][];
2033
+ }[];
2034
+ slots: {
2035
+ id: string;
2036
+ label?: string | undefined;
2037
+ color?: string | undefined;
2038
+ roughness?: number | undefined;
2039
+ metalness?: number | undefined;
2040
+ transparent?: boolean | undefined;
2041
+ emissive?: boolean | undefined;
2042
+ }[];
2043
+ anchors: {
2044
+ id: string;
2045
+ position: [number, number, number];
2046
+ normal?: [number, number, number] | undefined;
2047
+ }[];
2048
+ lights: {
2049
+ id: string;
2050
+ position: [number, number, number];
2051
+ color: string;
2052
+ intensity: number;
2053
+ distance?: number | undefined;
2054
+ spot?: {
2055
+ direction: [number, number, number];
2056
+ angle: number;
2057
+ softness: number;
2058
+ } | undefined;
2059
+ shadows?: boolean | undefined;
2060
+ glow?: {
2061
+ size: number;
2062
+ strength: number;
2063
+ } | undefined;
2064
+ }[];
2065
+ undersides: {
2066
+ part?: string | undefined;
2067
+ polygon: [number, number][];
2068
+ plane: [number, number, number, number];
2069
+ }[];
2070
+ animations: {
2071
+ name: string;
2072
+ duration: number;
2073
+ }[];
2074
+ cutters?: {
2075
+ host: "ceiling" | "mounted" | "slab" | "wall";
2076
+ polygon: number[][];
2077
+ minY: number;
2078
+ maxY: number;
2079
+ }[] | undefined;
2080
+ cutout: boolean;
2081
+ collider: boolean;
2082
+ shape?: {
2083
+ tolerance: number;
2084
+ bands: {
2085
+ y0: number;
2086
+ y1: number;
2087
+ polygons: {
2088
+ outer: [number, number][];
2089
+ holes?: [number, number][][] | undefined;
2090
+ }[];
2091
+ }[];
2092
+ } | undefined;
2093
+ triangles: number;
2094
+ coverage?: number | undefined;
2095
+ uncovered?: {
2096
+ min: [number, number];
2097
+ max: [number, number];
2098
+ }[] | undefined;
2099
+ };
2100
+ images?: {
2101
+ artifact: string;
2102
+ thumbnail: string;
2103
+ floorPlan: string;
2104
+ } | undefined;
2105
+ inputs: string;
2106
+ } | undefined;
2107
+ type: "slab";
2517
2108
  } | {
2518
2109
  object: "node";
2519
2110
  name?: string | undefined;
@@ -3159,6 +2750,42 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
3159
2750
  start: [number, number];
3160
2751
  end: [number, number];
3161
2752
  type: "separator";
2753
+ } | {
2754
+ object: "node";
2755
+ name?: string | undefined;
2756
+ parentId: string | null;
2757
+ visible: boolean;
2758
+ camera?: {
2759
+ position: [number, number, number];
2760
+ target: [number, number, number];
2761
+ mode: "orthographic" | "perspective";
2762
+ fov?: number | undefined;
2763
+ zoom?: number | undefined;
2764
+ } | undefined;
2765
+ metadata: Record<string, unknown>;
2766
+ provenance?: {
2767
+ refs: {
2768
+ ns?: string | undefined;
2769
+ id: string;
2770
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
2771
+ }[];
2772
+ lineage?: {
2773
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
2774
+ fromIds: string[];
2775
+ } | undefined;
2776
+ } | undefined;
2777
+ id: `floor-opening_${string}`;
2778
+ polygon: [number, number][];
2779
+ hostZoneId?: string | undefined;
2780
+ legacyPlateCuts?: Record<string, [number, number][][]> | undefined;
2781
+ legacyCeilingCuts?: Record<string, [number, number][][]> | undefined;
2782
+ source: string;
2783
+ ownerId?: string | undefined;
2784
+ surfaceId?: string | undefined;
2785
+ drawnOn: "ceiling" | "floor";
2786
+ cutsPrimary: boolean;
2787
+ cutsAdjacent: boolean;
2788
+ type: "floor-opening";
3162
2789
  } | {
3163
2790
  object: "node";
3164
2791
  name?: string | undefined;
@@ -3277,42 +2904,18 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
3277
2904
  fromIds: string[];
3278
2905
  } | undefined;
3279
2906
  } | undefined;
3280
- id: `construction-dimension_${string}`;
3281
- anchors: ({
3282
- kind: "feature";
3283
- reference: {
3284
- nodeId: string;
3285
- featureId: string;
3286
- parameters?: Record<string, string | number | boolean> | undefined;
3287
- };
3288
- fallback: [number, number, number];
3289
- } | [number, number, number])[];
3290
- baseline: {
3291
- origin: [number, number];
3292
- direction: [number, number];
3293
- };
3294
- chainMode: "continuous" | "point-to-point";
3295
- mode: "angular" | "arc-length" | "center-mark" | "chord" | "coordinate" | "diameter" | "linear" | "radius";
3296
- featureCount: number;
3297
- showCenterMark: boolean;
3298
- prefix: string;
3299
- suffix: string;
3300
- textOverride: string | null;
3301
- datumPolicy: "centerline" | "finish-face" | "structural-face" | "wall-face";
3302
- terminator: "architectural-tick" | "dot" | "filled-arrow" | "open-arrow";
3303
- textPosition: "above" | "centered";
3304
- imperialPrecision: "1" | "1/16" | "1/2" | "1/4" | "1/8";
3305
- metricNotation: "meters" | "millimeters";
3306
- extensionStartGap: number;
3307
- extensionOvershoot: number;
3308
- drawingType: "floor-plan" | "foundation-plan" | "reflected-ceiling-plan" | "roof-plan" | "site-plan";
3309
- drawingOverrides: {
3310
- drawingType: "floor-plan" | "foundation-plan" | "reflected-ceiling-plan" | "roof-plan" | "site-plan";
3311
- presentation: "controlled" | "omit" | "shown";
3312
- suppressedSegmentIndexes: number[];
3313
- }[];
3314
- controllingDimensionId: `construction-dimension_${string}` | null;
3315
- type: "construction-dimension";
2907
+ id: `beam_${string}`;
2908
+ start: [number, number];
2909
+ end: [number, number];
2910
+ width: number;
2911
+ depth: number;
2912
+ size?: string | undefined;
2913
+ plies: number;
2914
+ material: "glulam" | "lvl" | "pressure-treated" | "sawn" | "steel";
2915
+ placement: "dropped" | "flush";
2916
+ topElevation?: number | undefined;
2917
+ supportSlabId?: string | undefined;
2918
+ type: "beam";
3316
2919
  } | {
3317
2920
  object: "node";
3318
2921
  name?: string | undefined;
@@ -3337,29 +2940,13 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
3337
2940
  fromIds: string[];
3338
2941
  } | undefined;
3339
2942
  } | undefined;
3340
- id: `block_${string}`;
3341
- children: string[];
3342
- position: [number, number, number];
3343
- rotation: number;
3344
- supportSlabId?: string | undefined;
3345
- topology: {
3346
- vertices: {
3347
- id: string;
3348
- position: [number, number, number];
3349
- }[];
3350
- edges: {
3351
- id: string;
3352
- vertexIds: [string, string];
3353
- }[];
3354
- faces: {
3355
- id: string;
3356
- vertexIds: string[];
3357
- materialSlot: string;
3358
- }[];
3359
- };
3360
- slots: Record<string, string>;
3361
- slotNames: Record<string, string>;
3362
- type: "block";
2943
+ id: `structural-grid_${string}`;
2944
+ start: [number, number];
2945
+ end: [number, number];
2946
+ label: string;
2947
+ showStartBubble: boolean;
2948
+ showEndBubble: boolean;
2949
+ type: "structural-grid";
3363
2950
  } | {
3364
2951
  object: "node";
3365
2952
  name?: string | undefined;
@@ -4193,23 +3780,127 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
4193
3780
  fromIds: string[];
4194
3781
  } | undefined;
4195
3782
  } | undefined;
4196
- id: `guide_${string}`;
4197
- url: string;
3783
+ id: `scan_${string}`;
3784
+ url: string | null;
3785
+ captureSession: {
3786
+ sessionId: string;
3787
+ schemaVersion?: number | undefined;
3788
+ revisionId?: string | undefined;
3789
+ manifestUrl?: string | undefined;
3790
+ } | null;
3791
+ layers: Record<string, boolean>;
4198
3792
  position: [number, number, number];
4199
3793
  rotation: [number, number, number];
4200
3794
  scale: number;
4201
3795
  opacity: number;
4202
- scaleReference: {
4203
- start: [number, number];
4204
- end: [number, number];
4205
- realLengthMeters: number;
4206
- measuredLengthUnits: number;
4207
- metersPerUnit: number;
4208
- displayLength?: number | undefined;
4209
- displayUnit?: "centimeters" | "feet" | "inches" | "meters" | undefined;
4210
- label: string;
4211
- } | null;
4212
- type: "guide";
3796
+ type: "scan";
3797
+ } | {
3798
+ object: "node";
3799
+ name?: string | undefined;
3800
+ parentId: string | null;
3801
+ visible: boolean;
3802
+ camera?: {
3803
+ position: [number, number, number];
3804
+ target: [number, number, number];
3805
+ mode: "orthographic" | "perspective";
3806
+ fov?: number | undefined;
3807
+ zoom?: number | undefined;
3808
+ } | undefined;
3809
+ metadata: Record<string, unknown>;
3810
+ provenance?: {
3811
+ refs: {
3812
+ ns?: string | undefined;
3813
+ id: string;
3814
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
3815
+ }[];
3816
+ lineage?: {
3817
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
3818
+ fromIds: string[];
3819
+ } | undefined;
3820
+ } | undefined;
3821
+ id: `measurement_${string}`;
3822
+ measurement: {
3823
+ kind: "distance";
3824
+ points: [{
3825
+ kind: "feature";
3826
+ reference: {
3827
+ nodeId: string;
3828
+ featureId: string;
3829
+ parameters?: Record<string, string | number | boolean> | undefined;
3830
+ };
3831
+ fallback: [number, number, number];
3832
+ } | [number, number, number], {
3833
+ kind: "feature";
3834
+ reference: {
3835
+ nodeId: string;
3836
+ featureId: string;
3837
+ parameters?: Record<string, string | number | boolean> | undefined;
3838
+ };
3839
+ fallback: [number, number, number];
3840
+ } | [number, number, number]];
3841
+ } | {
3842
+ kind: "angle";
3843
+ points: [{
3844
+ kind: "feature";
3845
+ reference: {
3846
+ nodeId: string;
3847
+ featureId: string;
3848
+ parameters?: Record<string, string | number | boolean> | undefined;
3849
+ };
3850
+ fallback: [number, number, number];
3851
+ } | [number, number, number], {
3852
+ kind: "feature";
3853
+ reference: {
3854
+ nodeId: string;
3855
+ featureId: string;
3856
+ parameters?: Record<string, string | number | boolean> | undefined;
3857
+ };
3858
+ fallback: [number, number, number];
3859
+ } | [number, number, number], {
3860
+ kind: "feature";
3861
+ reference: {
3862
+ nodeId: string;
3863
+ featureId: string;
3864
+ parameters?: Record<string, string | number | boolean> | undefined;
3865
+ };
3866
+ fallback: [number, number, number];
3867
+ } | [number, number, number]];
3868
+ } | {
3869
+ kind: "area";
3870
+ base: ({
3871
+ kind: "feature";
3872
+ reference: {
3873
+ nodeId: string;
3874
+ featureId: string;
3875
+ parameters?: Record<string, string | number | boolean> | undefined;
3876
+ };
3877
+ fallback: [number, number, number];
3878
+ } | [number, number, number])[];
3879
+ } | {
3880
+ kind: "perimeter";
3881
+ base: ({
3882
+ kind: "feature";
3883
+ reference: {
3884
+ nodeId: string;
3885
+ featureId: string;
3886
+ parameters?: Record<string, string | number | boolean> | undefined;
3887
+ };
3888
+ fallback: [number, number, number];
3889
+ } | [number, number, number])[];
3890
+ } | {
3891
+ kind: "volume";
3892
+ base: ({
3893
+ kind: "feature";
3894
+ reference: {
3895
+ nodeId: string;
3896
+ featureId: string;
3897
+ parameters?: Record<string, string | number | boolean> | undefined;
3898
+ };
3899
+ fallback: [number, number, number];
3900
+ } | [number, number, number])[];
3901
+ extrusion: [number, number, number];
3902
+ };
3903
+ type: "measurement";
4213
3904
  } | {
4214
3905
  object: "node";
4215
3906
  name?: string | undefined;
@@ -4328,29 +4019,36 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
4328
4019
  fromIds: string[];
4329
4020
  } | undefined;
4330
4021
  } | undefined;
4331
- id: `duct-fitting_${string}`;
4332
- position: [number, number, number];
4333
- rotation: [number, number, number];
4334
- fittingType: "access-panel" | "coupling" | "cross" | "damper" | "elbow" | "end-cap" | "reducer" | "tee" | "transition";
4022
+ id: `duct-segment_${string}`;
4023
+ path: [number, number, number][];
4024
+ autoHangers?: boolean | undefined;
4025
+ hangerOverrides?: Record<string, {
4026
+ fraction?: number | undefined;
4027
+ skipped?: boolean | undefined;
4028
+ hostId?: string | undefined;
4029
+ }> | undefined;
4030
+ hangerStyle?: "double" | "single" | undefined;
4031
+ hangerSpacing?: number | undefined;
4032
+ hangerMaxReach?: number | undefined;
4033
+ wallAttachment?: {
4034
+ wallId: `wall_${string}`;
4035
+ side: "back" | "front";
4036
+ startUV: [number, number];
4037
+ endUV: [number, number];
4038
+ offset: number;
4039
+ } | undefined;
4335
4040
  shape: "oval" | "rect" | "round";
4336
- inletShape?: "oval" | "rect" | "round" | undefined;
4337
- outletShape?: "oval" | "rect" | "round" | undefined;
4041
+ diameter: number;
4338
4042
  width: number;
4339
4043
  height: number;
4340
- shape2: "oval" | "rect" | "round";
4341
- width2: number;
4342
- height2: number;
4343
- angle: number;
4344
- branchAngle: number;
4345
- diameter: number;
4346
- diameter2: number;
4347
- ductMaterial: "duct-board" | "flex" | "sheet-metal";
4044
+ roll: number;
4045
+ ductMaterial: "duct-board" | "flex" | "sheet-metal" | "spiral";
4046
+ seamDetail: boolean;
4047
+ insulated: boolean;
4048
+ insulationR: number;
4348
4049
  system: "return" | "supply";
4349
- damperAngle: number;
4350
- panelWidth: number;
4351
- panelHeight: number;
4352
4050
  slots?: Record<string, string> | undefined;
4353
- type: "duct-fitting";
4051
+ type: "duct-segment";
4354
4052
  } | {
4355
4053
  object: "node";
4356
4054
  name?: string | undefined;
@@ -4375,19 +4073,29 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
4375
4073
  fromIds: string[];
4376
4074
  } | undefined;
4377
4075
  } | undefined;
4378
- id: `duct-terminal_${string}`;
4076
+ id: `duct-fitting_${string}`;
4379
4077
  position: [number, number, number];
4380
- rotation: number;
4381
- supportSlabId?: string | undefined;
4382
- terminalType: "diffuser" | "return-grille" | "supply-register";
4383
- mount: "ceiling" | "floor" | "wall";
4078
+ rotation: [number, number, number];
4079
+ fittingType: "access-panel" | "coupling" | "cross" | "damper" | "elbow" | "end-cap" | "reducer" | "tee" | "transition";
4080
+ shape: "oval" | "rect" | "round";
4081
+ inletShape?: "oval" | "rect" | "round" | undefined;
4082
+ outletShape?: "oval" | "rect" | "round" | undefined;
4384
4083
  width: number;
4385
- depth: number;
4386
- collarShape: "oval" | "rect" | "round";
4387
- collarDiameter: number;
4388
- collarWidth: number;
4389
- collarHeight: number;
4390
- type: "duct-terminal";
4084
+ height: number;
4085
+ shape2: "oval" | "rect" | "round";
4086
+ width2: number;
4087
+ height2: number;
4088
+ angle: number;
4089
+ branchAngle: number;
4090
+ diameter: number;
4091
+ diameter2: number;
4092
+ ductMaterial: "duct-board" | "flex" | "sheet-metal";
4093
+ system: "return" | "supply";
4094
+ damperAngle: number;
4095
+ panelWidth: number;
4096
+ panelHeight: number;
4097
+ slots?: Record<string, string> | undefined;
4098
+ type: "duct-fitting";
4391
4099
  } | {
4392
4100
  object: "node";
4393
4101
  name?: string | undefined;
@@ -4453,10 +4161,12 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
4453
4161
  fromIds: string[];
4454
4162
  } | undefined;
4455
4163
  } | undefined;
4456
- id: `liquid-line_${string}`;
4164
+ id: `lineset_${string}`;
4457
4165
  path: [number, number, number][];
4458
- diameter: number;
4459
- type: "liquid-line";
4166
+ suctionDiameter: number;
4167
+ liquidDiameter: number;
4168
+ insulated: boolean;
4169
+ type: "lineset";
4460
4170
  } | {
4461
4171
  object: "node";
4462
4172
  name?: string | undefined;
@@ -4562,12 +4272,174 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
4562
4272
  fromIds: string[];
4563
4273
  } | undefined;
4564
4274
  } | undefined;
4565
- id: `level_${string}`;
4566
- children: (`beam_${string}` | `block_${string}` | `ceiling_${string}` | `column_${string}` | `construction-dimension_${string}` | `duct-fitting_${string}` | `duct-segment_${string}` | `duct-terminal_${string}` | `fence_${string}` | `floor-opening_${string}` | `guide_${string}` | `hvac-equipment_${string}` | `imesh_${string}` | `item_${string}` | `lineset_${string}` | `liquid-line_${string}` | `measurement_${string}` | `pipe-fitting_${string}` | `pipe-segment_${string}` | `pipe-trap_${string}` | `procedural-item_${string}` | `roof_${string}` | `scan_${string}` | `separator_${string}` | `shelf_${string}` | `slab_${string}` | `spawn_${string}` | `stair_${string}` | `structural-grid_${string}` | `wall_${string}` | `zone_${string}`)[];
4567
- level: number;
4568
- baseElevation: number;
4569
- height?: number | undefined;
4570
- type: "level";
4275
+ id: `pipe-trap_${string}`;
4276
+ position: [number, number, number];
4277
+ rotation: number;
4278
+ diameter: number;
4279
+ pipeMaterial: "abs" | "cast-iron" | "pvc";
4280
+ armLengthM: number;
4281
+ type: "pipe-trap";
4282
+ } | {
4283
+ object: "node";
4284
+ name?: string | undefined;
4285
+ parentId: string | null;
4286
+ visible: boolean;
4287
+ camera?: {
4288
+ position: [number, number, number];
4289
+ target: [number, number, number];
4290
+ mode: "orthographic" | "perspective";
4291
+ fov?: number | undefined;
4292
+ zoom?: number | undefined;
4293
+ } | undefined;
4294
+ metadata: Record<string, unknown>;
4295
+ provenance?: {
4296
+ refs: {
4297
+ ns?: string | undefined;
4298
+ id: string;
4299
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
4300
+ }[];
4301
+ lineage?: {
4302
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
4303
+ fromIds: string[];
4304
+ } | undefined;
4305
+ } | undefined;
4306
+ id: `level_${string}`;
4307
+ children: (`beam_${string}` | `block_${string}` | `ceiling_${string}` | `column_${string}` | `construction-dimension_${string}` | `duct-fitting_${string}` | `duct-segment_${string}` | `duct-terminal_${string}` | `fence_${string}` | `floor-opening_${string}` | `guide_${string}` | `hvac-equipment_${string}` | `imesh_${string}` | `item_${string}` | `lineset_${string}` | `liquid-line_${string}` | `measurement_${string}` | `pipe-fitting_${string}` | `pipe-segment_${string}` | `pipe-trap_${string}` | `procedural-item_${string}` | `roof_${string}` | `scan_${string}` | `separator_${string}` | `shelf_${string}` | `slab_${string}` | `spawn_${string}` | `stair_${string}` | `structural-grid_${string}` | `wall_${string}` | `zone_${string}`)[];
4308
+ level: number;
4309
+ baseElevation: number;
4310
+ height?: number | undefined;
4311
+ type: "level";
4312
+ } | {
4313
+ object: "node";
4314
+ name?: string | undefined;
4315
+ parentId: string | null;
4316
+ visible: boolean;
4317
+ camera?: {
4318
+ position: [number, number, number];
4319
+ target: [number, number, number];
4320
+ mode: "orthographic" | "perspective";
4321
+ fov?: number | undefined;
4322
+ zoom?: number | undefined;
4323
+ } | undefined;
4324
+ metadata: Record<string, unknown>;
4325
+ provenance?: {
4326
+ refs: {
4327
+ ns?: string | undefined;
4328
+ id: string;
4329
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
4330
+ }[];
4331
+ lineage?: {
4332
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
4333
+ fromIds: string[];
4334
+ } | undefined;
4335
+ } | undefined;
4336
+ id: `elevator_${string}`;
4337
+ material?: {
4338
+ id?: string | undefined;
4339
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
4340
+ properties?: {
4341
+ color: string;
4342
+ roughness: number;
4343
+ metalness: number;
4344
+ opacity: number;
4345
+ transparent: boolean;
4346
+ side: "back" | "double" | "front";
4347
+ } | undefined;
4348
+ texture?: {
4349
+ url: string;
4350
+ repeat?: [number, number] | undefined;
4351
+ scale?: number | undefined;
4352
+ offset?: [number, number] | undefined;
4353
+ normalMap?: string | undefined;
4354
+ normalScale?: number | undefined;
4355
+ bumpMap?: string | undefined;
4356
+ bumpScale?: number | undefined;
4357
+ } | undefined;
4358
+ } | undefined;
4359
+ materialPreset?: string | undefined;
4360
+ slots?: Record<string, string> | undefined;
4361
+ position: [number, number, number];
4362
+ rotation: number;
4363
+ width: number;
4364
+ depth: number;
4365
+ shaftWidth?: number | undefined;
4366
+ shaftDepth?: number | undefined;
4367
+ shaftWallThickness: number;
4368
+ shaftStyle: "glass" | "solid";
4369
+ cabHeight: number;
4370
+ doorWidth: number;
4371
+ doorHeight: number;
4372
+ doorStyle: "center-opening" | "single-left" | "single-right";
4373
+ doorPanelStyle: "glass-frame" | "segmented-panel" | "solid-panel";
4374
+ fromLevelId: string | null;
4375
+ toLevelId: string | null;
4376
+ servedLevelIds?: string[] | undefined;
4377
+ disabledLevelIds: string[];
4378
+ serviceOnlyLevelIds: string[];
4379
+ defaultLevelId: string | null;
4380
+ speed: number;
4381
+ doorDurationMs: number;
4382
+ dwellMs: number;
4383
+ type: "elevator";
4384
+ } | {
4385
+ object: "node";
4386
+ parentId: string | null;
4387
+ visible: boolean;
4388
+ camera?: {
4389
+ position: [number, number, number];
4390
+ target: [number, number, number];
4391
+ mode: "orthographic" | "perspective";
4392
+ fov?: number | undefined;
4393
+ zoom?: number | undefined;
4394
+ } | undefined;
4395
+ provenance?: {
4396
+ refs: {
4397
+ ns?: string | undefined;
4398
+ id: string;
4399
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
4400
+ }[];
4401
+ lineage?: {
4402
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
4403
+ fromIds: string[];
4404
+ } | undefined;
4405
+ } | undefined;
4406
+ id: `unit_${string}`;
4407
+ name: string;
4408
+ kind: "apartment" | "commercial" | "common" | "hotel-room";
4409
+ members: `zone_${string}`[];
4410
+ color: string;
4411
+ metadata: Record<string, unknown>;
4412
+ type: "unit";
4413
+ } | {
4414
+ object: "node";
4415
+ name?: string | undefined;
4416
+ parentId: string | null;
4417
+ visible: boolean;
4418
+ camera?: {
4419
+ position: [number, number, number];
4420
+ target: [number, number, number];
4421
+ mode: "orthographic" | "perspective";
4422
+ fov?: number | undefined;
4423
+ zoom?: number | undefined;
4424
+ } | undefined;
4425
+ metadata: Record<string, unknown>;
4426
+ provenance?: {
4427
+ refs: {
4428
+ ns?: string | undefined;
4429
+ id: string;
4430
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
4431
+ }[];
4432
+ lineage?: {
4433
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
4434
+ fromIds: string[];
4435
+ } | undefined;
4436
+ } | undefined;
4437
+ id: `building_${string}`;
4438
+ children: (`elevator_${string}` | `level_${string}` | `unit_${string}`)[];
4439
+ position: [number, number, number];
4440
+ rotation: [number, number, number];
4441
+ groundLevelId?: `level_${string}` | undefined;
4442
+ type: "building";
4571
4443
  } | {
4572
4444
  object: "node";
4573
4445
  name?: string | undefined;
@@ -4592,54 +4464,27 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
4592
4464
  fromIds: string[];
4593
4465
  } | undefined;
4594
4466
  } | undefined;
4595
- id: `elevator_${string}`;
4596
- material?: {
4597
- id?: string | undefined;
4598
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
4599
- properties?: {
4600
- color: string;
4601
- roughness: number;
4602
- metalness: number;
4603
- opacity: number;
4604
- transparent: boolean;
4605
- side: "back" | "double" | "front";
4606
- } | undefined;
4607
- texture?: {
4608
- url: string;
4609
- repeat?: [number, number] | undefined;
4610
- scale?: number | undefined;
4611
- offset?: [number, number] | undefined;
4612
- normalMap?: string | undefined;
4613
- normalScale?: number | undefined;
4614
- bumpMap?: string | undefined;
4615
- bumpScale?: number | undefined;
4616
- } | undefined;
4617
- } | undefined;
4618
- materialPreset?: string | undefined;
4619
- slots?: Record<string, string> | undefined;
4620
- position: [number, number, number];
4621
- rotation: number;
4467
+ matchFenceStyle?: boolean | undefined;
4468
+ matchFenceHeight?: boolean | undefined;
4469
+ leafType?: "double" | "single" | undefined;
4470
+ style?: "guard" | "horizontal" | "match" | "picket" | "privacy" | "rail" | "slat" | undefined;
4471
+ height?: number | undefined;
4472
+ clearance?: number | undefined;
4473
+ thickness?: number | undefined;
4474
+ frameWidth?: number | undefined;
4475
+ spacing?: number | undefined;
4476
+ boardWidth?: number | undefined;
4477
+ hinge?: "left" | "right" | undefined;
4478
+ swing?: "inward" | "outward" | undefined;
4479
+ openAngle?: number | undefined;
4480
+ leafSplit?: number | undefined;
4481
+ brace?: "cross" | "diagonal" | "none" | undefined;
4482
+ showHardware?: boolean | undefined;
4483
+ showPosts?: boolean | undefined;
4484
+ id: `fence-gate_${string}`;
4485
+ center: number;
4622
4486
  width: number;
4623
- depth: number;
4624
- shaftWidth?: number | undefined;
4625
- shaftDepth?: number | undefined;
4626
- shaftWallThickness: number;
4627
- shaftStyle: "glass" | "solid";
4628
- cabHeight: number;
4629
- doorWidth: number;
4630
- doorHeight: number;
4631
- doorStyle: "center-opening" | "single-left" | "single-right";
4632
- doorPanelStyle: "glass-frame" | "segmented-panel" | "solid-panel";
4633
- fromLevelId: string | null;
4634
- toLevelId: string | null;
4635
- servedLevelIds?: string[] | undefined;
4636
- disabledLevelIds: string[];
4637
- serviceOnlyLevelIds: string[];
4638
- defaultLevelId: string | null;
4639
- speed: number;
4640
- doorDurationMs: number;
4641
- dwellMs: number;
4642
- type: "elevator";
4487
+ type: "fence-gate";
4643
4488
  } | {
4644
4489
  object: "node";
4645
4490
  name?: string | undefined;
@@ -4664,12 +4509,14 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
4664
4509
  fromIds: string[];
4665
4510
  } | undefined;
4666
4511
  } | undefined;
4667
- id: `building_${string}`;
4668
- children: (`elevator_${string}` | `level_${string}` | `unit_${string}`)[];
4669
- position: [number, number, number];
4670
- rotation: [number, number, number];
4671
- groundLevelId?: `level_${string}` | undefined;
4672
- type: "building";
4512
+ center: number;
4513
+ width: number;
4514
+ matchFenceStyle?: boolean | undefined;
4515
+ matchFenceHeight?: boolean | undefined;
4516
+ height?: number | undefined;
4517
+ showPosts: boolean;
4518
+ id: `fence-opening_${string}`;
4519
+ type: "fence-opening";
4673
4520
  } | {
4674
4521
  object: "node";
4675
4522
  name?: string | undefined;
@@ -5181,6 +5028,64 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
5181
5028
  spinSpeed: number;
5182
5029
  style: "cylinder" | "globe";
5183
5030
  type: "turbine-vent";
5031
+ } | {
5032
+ object: "node";
5033
+ name?: string | undefined;
5034
+ parentId: string | null;
5035
+ visible: boolean;
5036
+ camera?: {
5037
+ position: [number, number, number];
5038
+ target: [number, number, number];
5039
+ mode: "orthographic" | "perspective";
5040
+ fov?: number | undefined;
5041
+ zoom?: number | undefined;
5042
+ } | undefined;
5043
+ metadata: Record<string, unknown>;
5044
+ provenance?: {
5045
+ refs: {
5046
+ ns?: string | undefined;
5047
+ id: string;
5048
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
5049
+ }[];
5050
+ lineage?: {
5051
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
5052
+ fromIds: string[];
5053
+ } | undefined;
5054
+ } | undefined;
5055
+ id: `cupola_${string}`;
5056
+ material?: {
5057
+ id?: string | undefined;
5058
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
5059
+ properties?: {
5060
+ color: string;
5061
+ roughness: number;
5062
+ metalness: number;
5063
+ opacity: number;
5064
+ transparent: boolean;
5065
+ side: "back" | "double" | "front";
5066
+ } | undefined;
5067
+ texture?: {
5068
+ url: string;
5069
+ repeat?: [number, number] | undefined;
5070
+ scale?: number | undefined;
5071
+ offset?: [number, number] | undefined;
5072
+ normalMap?: string | undefined;
5073
+ normalScale?: number | undefined;
5074
+ bumpMap?: string | undefined;
5075
+ bumpScale?: number | undefined;
5076
+ } | undefined;
5077
+ } | undefined;
5078
+ slots?: Record<string, string> | undefined;
5079
+ materialPreset: string;
5080
+ roofSegmentId?: string | undefined;
5081
+ position: [number, number, number];
5082
+ rotation: number;
5083
+ width: number;
5084
+ depth: number;
5085
+ height: number;
5086
+ roofStyle: "dome" | "pyramid";
5087
+ finial: boolean;
5088
+ type: "cupola";
5184
5089
  } | {
5185
5090
  object: "node";
5186
5091
  name?: string | undefined;
@@ -5509,6 +5414,101 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
5509
5414
  frameDepth: number;
5510
5415
  surfaceNormal?: [number, number, number] | undefined;
5511
5416
  type: "solar-panel";
5417
+ } | {
5418
+ object: "node";
5419
+ name?: string | undefined;
5420
+ parentId: string | null;
5421
+ visible: boolean;
5422
+ camera?: {
5423
+ position: [number, number, number];
5424
+ target: [number, number, number];
5425
+ mode: "orthographic" | "perspective";
5426
+ fov?: number | undefined;
5427
+ zoom?: number | undefined;
5428
+ } | undefined;
5429
+ metadata: Record<string, unknown>;
5430
+ provenance?: {
5431
+ refs: {
5432
+ ns?: string | undefined;
5433
+ id: string;
5434
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
5435
+ }[];
5436
+ lineage?: {
5437
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
5438
+ fromIds: string[];
5439
+ } | undefined;
5440
+ } | undefined;
5441
+ id: `skylight_${string}`;
5442
+ material?: {
5443
+ id?: string | undefined;
5444
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
5445
+ properties?: {
5446
+ color: string;
5447
+ roughness: number;
5448
+ metalness: number;
5449
+ opacity: number;
5450
+ transparent: boolean;
5451
+ side: "back" | "double" | "front";
5452
+ } | undefined;
5453
+ texture?: {
5454
+ url: string;
5455
+ repeat?: [number, number] | undefined;
5456
+ scale?: number | undefined;
5457
+ offset?: [number, number] | undefined;
5458
+ normalMap?: string | undefined;
5459
+ normalScale?: number | undefined;
5460
+ bumpMap?: string | undefined;
5461
+ bumpScale?: number | undefined;
5462
+ } | undefined;
5463
+ } | undefined;
5464
+ materialPreset?: string | undefined;
5465
+ glassMaterial?: {
5466
+ id?: string | undefined;
5467
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
5468
+ properties?: {
5469
+ color: string;
5470
+ roughness: number;
5471
+ metalness: number;
5472
+ opacity: number;
5473
+ transparent: boolean;
5474
+ side: "back" | "double" | "front";
5475
+ } | undefined;
5476
+ texture?: {
5477
+ url: string;
5478
+ repeat?: [number, number] | undefined;
5479
+ scale?: number | undefined;
5480
+ offset?: [number, number] | undefined;
5481
+ normalMap?: string | undefined;
5482
+ normalScale?: number | undefined;
5483
+ bumpMap?: string | undefined;
5484
+ bumpScale?: number | undefined;
5485
+ } | undefined;
5486
+ } | undefined;
5487
+ glassMaterialPreset?: string | undefined;
5488
+ roofSegmentId?: string | undefined;
5489
+ position: [number, number, number];
5490
+ rotation: number;
5491
+ width: number;
5492
+ height: number;
5493
+ frameThickness: number;
5494
+ frameDepth: number;
5495
+ skylightType: "flat" | "lantern" | "opening" | "sliding" | "walk-on";
5496
+ glassThickness: number;
5497
+ lanternHeight: number;
5498
+ lanternTopScale: number;
5499
+ openingAngle: number;
5500
+ openingSide: "bottom" | "left" | "right" | "top";
5501
+ operationState: number;
5502
+ motorHousing: boolean;
5503
+ slideFraction: number;
5504
+ slideDirection: "x" | "z";
5505
+ trackWidth: number;
5506
+ motorHousingSize: number;
5507
+ curb: boolean;
5508
+ curbHeight: number;
5509
+ cutoutOffset: number;
5510
+ surfaceNormal?: [number, number, number] | undefined;
5511
+ type: "skylight";
5512
5512
  } | {
5513
5513
  object: "node";
5514
5514
  name?: string | undefined;