@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
@@ -24,276 +24,54 @@ 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[];
61
- } | 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[];
168
- } | undefined;
169
- } | 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;
190
- width: number;
191
- 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";
200
- } | {
201
- object: "node";
202
- name?: string | undefined;
203
- parentId: string | null;
204
- visible: boolean;
205
- camera?: {
206
- position: [number, number, number];
207
- target: [number, number, number];
208
- mode: "orthographic" | "perspective";
209
- fov?: number | undefined;
210
- zoom?: number | undefined;
211
- } | undefined;
212
- metadata: Record<string, unknown>;
213
- provenance?: {
214
- refs: {
215
- ns?: string | undefined;
216
- id: string;
217
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
218
- }[];
219
- lineage?: {
220
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
221
- fromIds: string[];
222
- } | undefined;
223
- } | 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[];
27
+ id: `elevator_${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";
258
38
  } | 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[];
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;
288
48
  } | undefined;
289
49
  } | undefined;
290
- id: `pipe-trap_${string}`;
50
+ materialPreset?: string | undefined;
51
+ slots?: Record<string, string> | undefined;
291
52
  position: [number, number, number];
292
53
  rotation: number;
293
- diameter: number;
294
- pipeMaterial: "abs" | "cast-iron" | "pvc";
295
- armLengthM: number;
296
- type: "pipe-trap";
54
+ width: number;
55
+ depth: number;
56
+ shaftWidth?: number | undefined;
57
+ shaftDepth?: number | undefined;
58
+ shaftWallThickness: number;
59
+ shaftStyle: "glass" | "solid";
60
+ cabHeight: number;
61
+ doorWidth: number;
62
+ doorHeight: number;
63
+ doorStyle: "center-opening" | "single-left" | "single-right";
64
+ doorPanelStyle: "glass-frame" | "segmented-panel" | "solid-panel";
65
+ fromLevelId: string | null;
66
+ toLevelId: string | null;
67
+ servedLevelIds?: string[] | undefined;
68
+ disabledLevelIds: string[];
69
+ serviceOnlyLevelIds: string[];
70
+ defaultLevelId: string | null;
71
+ speed: number;
72
+ doorDurationMs: number;
73
+ dwellMs: number;
74
+ type: "elevator";
297
75
  } | {
298
76
  object: "node";
299
77
  name?: string | undefined;
@@ -318,120 +96,22 @@ export declare const materializeLegacyAutoOpenings: (nodes: {
318
96
  fromIds: string[];
319
97
  } | undefined;
320
98
  } | 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>;
99
+ type: "item";
100
+ id: `item_${string}`;
330
101
  position: [number, number, number];
331
102
  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;
103
+ scale: [number, number, number];
104
+ side?: "back" | "front" | undefined;
105
+ children: string[];
106
+ wallId?: string | undefined;
107
+ wallT?: number | undefined;
108
+ roofSegmentId?: string | undefined;
109
+ roofFace?: "back" | "front" | "left" | "right" | undefined;
110
+ blockFaceId?: string | undefined;
111
+ supportSlabId?: string | undefined;
112
+ collectionIds?: `collection_${string}`[] | undefined;
383
113
  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?: {
114
+ source?: {
435
115
  kind: "script";
436
116
  meta?: {
437
117
  description?: string | undefined;
@@ -544,69 +224,77 @@ export declare const materializeLegacyAutoOpenings: (nodes: {
544
224
  thumbnail: string;
545
225
  floorPlan: string;
546
226
  } | 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
227
  } | 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[];
228
+ asset: {
229
+ id: string;
230
+ category: string;
231
+ name: string;
232
+ thumbnail: string;
233
+ floorPlanUrl?: string | undefined;
234
+ source: "community" | "library" | "mine";
235
+ isDraft?: boolean | undefined;
236
+ src: string;
237
+ dimensions: [number, number, number];
238
+ attachTo?: "ceiling" | "wall" | "wall-side" | undefined;
239
+ recessed?: boolean | undefined;
240
+ tags?: string[] | undefined;
241
+ functionTags?: string[] | undefined;
242
+ offset: [number, number, number];
243
+ rotation: [number, number, number];
244
+ scale: [number, number, number];
245
+ surface?: {
246
+ height: number;
572
247
  } | 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[];
248
+ interactive?: {
249
+ controls: ({
250
+ kind: "toggle";
251
+ label?: string | undefined;
252
+ default?: boolean | undefined;
253
+ } | {
254
+ kind: "slider";
255
+ label: string;
256
+ min: number;
257
+ max: number;
258
+ step: number;
259
+ unit?: string | undefined;
260
+ displayMode: "dial" | "slider" | "stepper";
261
+ default?: number | undefined;
262
+ } | {
263
+ kind: "temperature";
264
+ label: string;
265
+ min: number;
266
+ max: number;
267
+ unit: "C" | "F";
268
+ default?: number | undefined;
269
+ })[];
270
+ effects: ({
271
+ kind: "animation";
272
+ mode?: "ambient" | "open-close" | undefined;
273
+ control?: number | undefined;
274
+ clips: {
275
+ on?: string | undefined;
276
+ off?: string | undefined;
277
+ loop?: string | undefined;
278
+ };
279
+ } | {
280
+ kind: "light";
281
+ color: string;
282
+ intensityRange: [number, number];
283
+ distance?: number | undefined;
284
+ offset: [number, number, number];
285
+ spot?: {
286
+ direction: [number, number, number];
287
+ angle: number;
288
+ softness: number;
289
+ } | undefined;
290
+ shadows?: boolean | undefined;
291
+ glow?: {
292
+ size: number;
293
+ strength: number;
294
+ } | undefined;
295
+ })[];
601
296
  } | 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";
297
+ };
610
298
  } | {
611
299
  object: "node";
612
300
  name?: string | undefined;
@@ -631,7 +319,8 @@ export declare const materializeLegacyAutoOpenings: (nodes: {
631
319
  fromIds: string[];
632
320
  } | undefined;
633
321
  } | undefined;
634
- id: `cupola_${string}`;
322
+ id: `ceiling_${string}`;
323
+ children: (`item_${string}` | `procedural-item_${string}`)[];
635
324
  material?: {
636
325
  id?: string | undefined;
637
326
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
@@ -654,94 +343,50 @@ export declare const materializeLegacyAutoOpenings: (nodes: {
654
343
  bumpScale?: number | undefined;
655
344
  } | undefined;
656
345
  } | undefined;
346
+ materialPreset?: string | undefined;
657
347
  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";
668
- } | {
669
- object: "node";
670
- name?: string | undefined;
671
- parentId: string | null;
672
- visible: boolean;
673
- camera?: {
674
- position: [number, number, number];
675
- target: [number, number, number];
676
- mode: "orthographic" | "perspective";
677
- fov?: number | undefined;
678
- zoom?: number | undefined;
679
- } | undefined;
680
- metadata: Record<string, unknown>;
681
- provenance?: {
682
- refs: {
683
- ns?: string | undefined;
684
- id: string;
685
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
686
- }[];
687
- lineage?: {
688
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
689
- fromIds: string[];
690
- } | undefined;
691
- } | undefined;
692
- matchFenceStyle?: boolean | undefined;
693
- matchFenceHeight?: boolean | undefined;
694
- leafType?: "double" | "single" | undefined;
695
- style?: "guard" | "horizontal" | "match" | "picket" | "privacy" | "rail" | "slat" | undefined;
348
+ polygon: [number, number][];
349
+ holes: [number, number][][];
350
+ holeMetadata: {
351
+ source: "elevator" | "floor-opening" | "manual" | "room" | "stair";
352
+ openingId?: string | undefined;
353
+ stairId?: string | undefined;
354
+ elevatorId?: string | undefined;
355
+ }[];
356
+ openingIds?: string[] | undefined;
696
357
  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;
711
- width: number;
712
- type: "fence-gate";
713
- } | {
714
- object: "node";
715
- name?: string | undefined;
716
- parentId: string | null;
717
- visible: boolean;
718
- camera?: {
719
- position: [number, number, number];
720
- target: [number, number, number];
721
- mode: "orthographic" | "perspective";
722
- fov?: number | undefined;
723
- zoom?: number | undefined;
724
- } | undefined;
725
- metadata: Record<string, unknown>;
726
- provenance?: {
727
- refs: {
728
- ns?: string | undefined;
729
- id: string;
730
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
731
- }[];
732
- lineage?: {
733
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
734
- fromIds: string[];
358
+ buildUp?: {
359
+ presetId?: string | undefined;
360
+ finish?: {
361
+ kind: "drywall" | "plaster" | "wood-plank";
362
+ thickness: number;
363
+ name?: string | undefined;
364
+ } | undefined;
365
+ framing?: {
366
+ system: "joists" | "truss-chords";
367
+ size: "2x10" | "2x12" | "2x4" | "2x6" | "2x8";
368
+ spacing: number;
369
+ } | undefined;
370
+ decking?: {
371
+ kind: "osb" | "plywood";
372
+ thickness: number;
373
+ name?: string | undefined;
374
+ } | undefined;
375
+ insulation?: {
376
+ kind: "batt" | "blown" | "rigid";
377
+ thickness: number;
378
+ name?: string | undefined;
735
379
  } | undefined;
736
380
  } | undefined;
737
- center: number;
738
- 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";
381
+ regions?: {
382
+ id: string;
383
+ polygon: [number, number][];
384
+ finish: string | Record<string, unknown>;
385
+ }[] | undefined;
386
+ boundary?: "auto" | undefined;
387
+ zoneId?: string | undefined;
388
+ autoFromWalls: boolean;
389
+ type: "ceiling";
745
390
  } | {
746
391
  object: "node";
747
392
  name?: string | undefined;
@@ -766,77 +411,42 @@ export declare const materializeLegacyAutoOpenings: (nodes: {
766
411
  fromIds: string[];
767
412
  } | undefined;
768
413
  } | 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;
817
- 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";
414
+ id: `construction-dimension_${string}`;
415
+ anchors: ({
416
+ kind: "feature";
417
+ reference: {
418
+ nodeId: string;
419
+ featureId: string;
420
+ parameters?: Record<string, string | number | boolean> | undefined;
421
+ };
422
+ fallback: [number, number, number];
423
+ } | [number, number, number])[];
424
+ baseline: {
425
+ origin: [number, number];
426
+ direction: [number, number];
427
+ };
428
+ chainMode: "continuous" | "point-to-point";
429
+ mode: "angular" | "arc-length" | "center-mark" | "chord" | "coordinate" | "diameter" | "linear" | "radius";
430
+ featureCount: number;
431
+ showCenterMark: boolean;
432
+ prefix: string;
433
+ suffix: string;
434
+ textOverride: string | null;
435
+ datumPolicy: "centerline" | "finish-face" | "structural-face" | "wall-face";
436
+ terminator: "architectural-tick" | "dot" | "filled-arrow" | "open-arrow";
437
+ textPosition: "above" | "centered";
438
+ imperialPrecision: "1" | "1/16" | "1/2" | "1/4" | "1/8";
439
+ metricNotation: "meters" | "millimeters";
440
+ extensionStartGap: number;
441
+ extensionOvershoot: number;
442
+ drawingType: "floor-plan" | "foundation-plan" | "reflected-ceiling-plan" | "roof-plan" | "site-plan";
443
+ drawingOverrides: {
444
+ drawingType: "floor-plan" | "foundation-plan" | "reflected-ceiling-plan" | "roof-plan" | "site-plan";
445
+ presentation: "controlled" | "omit" | "shown";
446
+ suppressedSegmentIndexes: number[];
447
+ }[];
448
+ controllingDimensionId: `construction-dimension_${string}` | null;
449
+ type: "construction-dimension";
840
450
  } | {
841
451
  object: "node";
842
452
  name?: string | undefined;
@@ -1031,251 +641,28 @@ export declare const materializeLegacyAutoOpenings: (nodes: {
1031
641
  lift?: number | undefined;
1032
642
  src?: string | undefined;
1033
643
  }[];
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
- };
644
+ backing?: {
645
+ id: string;
646
+ role: "air" | "covering" | "deck" | "fill" | "finish" | "furring" | "glazing" | "insulation" | "lining" | "membrane" | "sheathing" | "shell" | "structure" | "substrate" | "underlay";
647
+ thickness: number;
648
+ core?: true | undefined;
649
+ spacing?: number | undefined;
650
+ material?: string | undefined;
651
+ slot?: string | undefined;
652
+ returns?: boolean | undefined;
653
+ display?: "construction" | "finished" | undefined;
654
+ inset?: number | undefined;
655
+ bottom?: number | undefined;
656
+ lift?: number | undefined;
657
+ src?: string | undefined;
658
+ }[] | undefined;
659
+ face?: "exterior" | "front" | undefined;
660
+ presetId?: string | undefined;
661
+ cavityInsulation?: string | undefined;
662
+ };
663
+ }[] | undefined;
664
+ children: string[];
665
+ type: "site";
1279
666
  } | {
1280
667
  object: "node";
1281
668
  name?: string | undefined;
@@ -2506,8 +1893,223 @@ export declare const materializeLegacyAutoOpenings: (nodes: {
2506
1893
  cavityInsulation?: string | undefined;
2507
1894
  } | undefined;
2508
1895
  slots?: Record<string, string> | undefined;
2509
- children: `rseg_${string}`[];
1896
+ children: string[];
2510
1897
  type: "roof";
1898
+ } | {
1899
+ object: "node";
1900
+ name?: string | undefined;
1901
+ parentId: string | null;
1902
+ visible: boolean;
1903
+ camera?: {
1904
+ position: [number, number, number];
1905
+ target: [number, number, number];
1906
+ mode: "orthographic" | "perspective";
1907
+ fov?: number | undefined;
1908
+ zoom?: number | undefined;
1909
+ } | undefined;
1910
+ metadata: Record<string, unknown>;
1911
+ provenance?: {
1912
+ refs: {
1913
+ ns?: string | undefined;
1914
+ id: string;
1915
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
1916
+ }[];
1917
+ lineage?: {
1918
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
1919
+ fromIds: string[];
1920
+ } | undefined;
1921
+ } | undefined;
1922
+ id: `slab_${string}`;
1923
+ material?: {
1924
+ id?: string | undefined;
1925
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1926
+ properties?: {
1927
+ color: string;
1928
+ roughness: number;
1929
+ metalness: number;
1930
+ opacity: number;
1931
+ transparent: boolean;
1932
+ side: "back" | "double" | "front";
1933
+ } | undefined;
1934
+ texture?: {
1935
+ url: string;
1936
+ repeat?: [number, number] | undefined;
1937
+ scale?: number | undefined;
1938
+ offset?: [number, number] | undefined;
1939
+ normalMap?: string | undefined;
1940
+ normalScale?: number | undefined;
1941
+ bumpMap?: string | undefined;
1942
+ bumpScale?: number | undefined;
1943
+ } | undefined;
1944
+ } | undefined;
1945
+ materialPreset?: string | undefined;
1946
+ slots?: Record<string, string> | undefined;
1947
+ polygon: [number, number][];
1948
+ holes: [number, number][][];
1949
+ holeMetadata: {
1950
+ source: "elevator" | "floor-opening" | "manual" | "room" | "stair";
1951
+ openingId?: string | undefined;
1952
+ stairId?: string | undefined;
1953
+ elevatorId?: string | undefined;
1954
+ }[];
1955
+ elevation: number;
1956
+ floorHeight?: number | undefined;
1957
+ referenceFloorElevation?: number | undefined;
1958
+ foundation?: {
1959
+ type: "none" | "solid";
1960
+ material?: string | {
1961
+ id?: string | undefined;
1962
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1963
+ properties?: {
1964
+ color: string;
1965
+ roughness: number;
1966
+ metalness: number;
1967
+ opacity: number;
1968
+ transparent: boolean;
1969
+ side: "back" | "double" | "front";
1970
+ } | undefined;
1971
+ texture?: {
1972
+ url: string;
1973
+ repeat?: [number, number] | undefined;
1974
+ scale?: number | undefined;
1975
+ offset?: [number, number] | undefined;
1976
+ normalMap?: string | undefined;
1977
+ normalScale?: number | undefined;
1978
+ bumpMap?: string | undefined;
1979
+ bumpScale?: number | undefined;
1980
+ } | undefined;
1981
+ } | undefined;
1982
+ } | undefined;
1983
+ thickness: number;
1984
+ recessed: boolean;
1985
+ recessedRimElevation?: number | undefined;
1986
+ fillToTerrain?: boolean | undefined;
1987
+ boundary?: "auto" | undefined;
1988
+ support?: "open" | undefined;
1989
+ plateRole?: "base" | "platform" | "sunken" | undefined;
1990
+ railing?: {
1991
+ start: [number, number];
1992
+ end: [number, number];
1993
+ }[] | undefined;
1994
+ zoneIds?: string[] | undefined;
1995
+ associatedZoneIds?: string[] | undefined;
1996
+ autoFromWalls: boolean;
1997
+ surfaceScript?: {
1998
+ kind: "script";
1999
+ meta?: {
2000
+ description?: string | undefined;
2001
+ category?: string | undefined;
2002
+ tags?: string[] | undefined;
2003
+ parent?: string | undefined;
2004
+ } | undefined;
2005
+ language: "bpy" | "three";
2006
+ script: string;
2007
+ params: Record<string, string | number | boolean>;
2008
+ artifact: string;
2009
+ manifest: {
2010
+ bounds: {
2011
+ min: [number, number, number];
2012
+ max: [number, number, number];
2013
+ };
2014
+ params: {
2015
+ id: string;
2016
+ label?: string | undefined;
2017
+ kind: "boolean" | "number" | "string";
2018
+ default: string | number | boolean;
2019
+ min?: number | undefined;
2020
+ max?: number | undefined;
2021
+ step?: number | undefined;
2022
+ unit?: string | undefined;
2023
+ options?: string[] | undefined;
2024
+ }[];
2025
+ parts: {
2026
+ id: string;
2027
+ label?: string | undefined;
2028
+ type?: string | undefined;
2029
+ bounds?: {
2030
+ min: [number, number, number];
2031
+ max: [number, number, number];
2032
+ } | undefined;
2033
+ }[];
2034
+ surfaces: {
2035
+ part?: string | undefined;
2036
+ y: number;
2037
+ polygon: [number, number][];
2038
+ }[];
2039
+ slots: {
2040
+ id: string;
2041
+ label?: string | undefined;
2042
+ color?: string | undefined;
2043
+ roughness?: number | undefined;
2044
+ metalness?: number | undefined;
2045
+ transparent?: boolean | undefined;
2046
+ emissive?: boolean | undefined;
2047
+ }[];
2048
+ anchors: {
2049
+ id: string;
2050
+ position: [number, number, number];
2051
+ normal?: [number, number, number] | undefined;
2052
+ }[];
2053
+ lights: {
2054
+ id: string;
2055
+ position: [number, number, number];
2056
+ color: string;
2057
+ intensity: number;
2058
+ distance?: number | undefined;
2059
+ spot?: {
2060
+ direction: [number, number, number];
2061
+ angle: number;
2062
+ softness: number;
2063
+ } | undefined;
2064
+ shadows?: boolean | undefined;
2065
+ glow?: {
2066
+ size: number;
2067
+ strength: number;
2068
+ } | undefined;
2069
+ }[];
2070
+ undersides: {
2071
+ part?: string | undefined;
2072
+ polygon: [number, number][];
2073
+ plane: [number, number, number, number];
2074
+ }[];
2075
+ animations: {
2076
+ name: string;
2077
+ duration: number;
2078
+ }[];
2079
+ cutters?: {
2080
+ host: "ceiling" | "mounted" | "slab" | "wall";
2081
+ polygon: number[][];
2082
+ minY: number;
2083
+ maxY: number;
2084
+ }[] | undefined;
2085
+ cutout: boolean;
2086
+ collider: boolean;
2087
+ shape?: {
2088
+ tolerance: number;
2089
+ bands: {
2090
+ y0: number;
2091
+ y1: number;
2092
+ polygons: {
2093
+ outer: [number, number][];
2094
+ holes?: [number, number][][] | undefined;
2095
+ }[];
2096
+ }[];
2097
+ } | undefined;
2098
+ triangles: number;
2099
+ coverage?: number | undefined;
2100
+ uncovered?: {
2101
+ min: [number, number];
2102
+ max: [number, number];
2103
+ }[] | undefined;
2104
+ };
2105
+ images?: {
2106
+ artifact: string;
2107
+ thumbnail: string;
2108
+ floorPlan: string;
2109
+ } | undefined;
2110
+ inputs: string;
2111
+ } | undefined;
2112
+ type: "slab";
2511
2113
  } | {
2512
2114
  object: "node";
2513
2115
  name?: string | undefined;
@@ -3122,9 +2724,37 @@ export declare const materializeLegacyAutoOpenings: (nodes: {
3122
2724
  } | undefined;
3123
2725
  start: [number, number];
3124
2726
  end: [number, number];
3125
- frontSide: "exterior" | "interior" | "unknown";
3126
- backSide: "exterior" | "interior" | "unknown";
3127
- type: "wall";
2727
+ frontSide: "exterior" | "interior" | "unknown";
2728
+ backSide: "exterior" | "interior" | "unknown";
2729
+ type: "wall";
2730
+ } | {
2731
+ object: "node";
2732
+ name?: string | undefined;
2733
+ parentId: string | null;
2734
+ visible: boolean;
2735
+ camera?: {
2736
+ position: [number, number, number];
2737
+ target: [number, number, number];
2738
+ mode: "orthographic" | "perspective";
2739
+ fov?: number | undefined;
2740
+ zoom?: number | undefined;
2741
+ } | undefined;
2742
+ metadata: Record<string, unknown>;
2743
+ provenance?: {
2744
+ refs: {
2745
+ ns?: string | undefined;
2746
+ id: string;
2747
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
2748
+ }[];
2749
+ lineage?: {
2750
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
2751
+ fromIds: string[];
2752
+ } | undefined;
2753
+ } | undefined;
2754
+ id: `separator_${string}`;
2755
+ start: [number, number];
2756
+ end: [number, number];
2757
+ type: "separator";
3128
2758
  } | {
3129
2759
  object: "node";
3130
2760
  name?: string | undefined;
@@ -3149,10 +2779,18 @@ export declare const materializeLegacyAutoOpenings: (nodes: {
3149
2779
  fromIds: string[];
3150
2780
  } | undefined;
3151
2781
  } | undefined;
3152
- id: `separator_${string}`;
3153
- start: [number, number];
3154
- end: [number, number];
3155
- type: "separator";
2782
+ id: `floor-opening_${string}`;
2783
+ polygon: [number, number][];
2784
+ hostZoneId?: string | undefined;
2785
+ legacyPlateCuts?: Record<string, [number, number][][]> | undefined;
2786
+ legacyCeilingCuts?: Record<string, [number, number][][]> | undefined;
2787
+ source: string;
2788
+ ownerId?: string | undefined;
2789
+ surfaceId?: string | undefined;
2790
+ drawnOn: "ceiling" | "floor";
2791
+ cutsPrimary: boolean;
2792
+ cutsAdjacent: boolean;
2793
+ type: "floor-opening";
3156
2794
  } | {
3157
2795
  object: "node";
3158
2796
  name?: string | undefined;
@@ -3271,42 +2909,18 @@ export declare const materializeLegacyAutoOpenings: (nodes: {
3271
2909
  fromIds: string[];
3272
2910
  } | undefined;
3273
2911
  } | undefined;
3274
- id: `construction-dimension_${string}`;
3275
- anchors: ({
3276
- kind: "feature";
3277
- reference: {
3278
- nodeId: string;
3279
- featureId: string;
3280
- parameters?: Record<string, string | number | boolean> | undefined;
3281
- };
3282
- fallback: [number, number, number];
3283
- } | [number, number, number])[];
3284
- baseline: {
3285
- origin: [number, number];
3286
- direction: [number, number];
3287
- };
3288
- chainMode: "continuous" | "point-to-point";
3289
- mode: "angular" | "arc-length" | "center-mark" | "chord" | "coordinate" | "diameter" | "linear" | "radius";
3290
- featureCount: number;
3291
- showCenterMark: boolean;
3292
- prefix: string;
3293
- suffix: string;
3294
- textOverride: string | null;
3295
- datumPolicy: "centerline" | "finish-face" | "structural-face" | "wall-face";
3296
- terminator: "architectural-tick" | "dot" | "filled-arrow" | "open-arrow";
3297
- textPosition: "above" | "centered";
3298
- imperialPrecision: "1" | "1/16" | "1/2" | "1/4" | "1/8";
3299
- metricNotation: "meters" | "millimeters";
3300
- extensionStartGap: number;
3301
- extensionOvershoot: number;
3302
- drawingType: "floor-plan" | "foundation-plan" | "reflected-ceiling-plan" | "roof-plan" | "site-plan";
3303
- drawingOverrides: {
3304
- drawingType: "floor-plan" | "foundation-plan" | "reflected-ceiling-plan" | "roof-plan" | "site-plan";
3305
- presentation: "controlled" | "omit" | "shown";
3306
- suppressedSegmentIndexes: number[];
3307
- }[];
3308
- controllingDimensionId: `construction-dimension_${string}` | null;
3309
- type: "construction-dimension";
2912
+ id: `beam_${string}`;
2913
+ start: [number, number];
2914
+ end: [number, number];
2915
+ width: number;
2916
+ depth: number;
2917
+ size?: string | undefined;
2918
+ plies: number;
2919
+ material: "glulam" | "lvl" | "pressure-treated" | "sawn" | "steel";
2920
+ placement: "dropped" | "flush";
2921
+ topElevation?: number | undefined;
2922
+ supportSlabId?: string | undefined;
2923
+ type: "beam";
3310
2924
  } | {
3311
2925
  object: "node";
3312
2926
  name?: string | undefined;
@@ -3354,6 +2968,37 @@ export declare const materializeLegacyAutoOpenings: (nodes: {
3354
2968
  slots: Record<string, string>;
3355
2969
  slotNames: Record<string, string>;
3356
2970
  type: "block";
2971
+ } | {
2972
+ object: "node";
2973
+ name?: string | undefined;
2974
+ parentId: string | null;
2975
+ visible: boolean;
2976
+ camera?: {
2977
+ position: [number, number, number];
2978
+ target: [number, number, number];
2979
+ mode: "orthographic" | "perspective";
2980
+ fov?: number | undefined;
2981
+ zoom?: number | undefined;
2982
+ } | undefined;
2983
+ metadata: Record<string, unknown>;
2984
+ provenance?: {
2985
+ refs: {
2986
+ ns?: string | undefined;
2987
+ id: string;
2988
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
2989
+ }[];
2990
+ lineage?: {
2991
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
2992
+ fromIds: string[];
2993
+ } | undefined;
2994
+ } | undefined;
2995
+ id: `structural-grid_${string}`;
2996
+ start: [number, number];
2997
+ end: [number, number];
2998
+ label: string;
2999
+ showStartBubble: boolean;
3000
+ showEndBubble: boolean;
3001
+ type: "structural-grid";
3357
3002
  } | {
3358
3003
  object: "node";
3359
3004
  name?: string | undefined;
@@ -3800,98 +3445,6 @@ export declare const materializeLegacyAutoOpenings: (nodes: {
3800
3445
  color: string;
3801
3446
  metadata: Record<string, unknown>;
3802
3447
  type: "zone";
3803
- } | {
3804
- object: "node";
3805
- name?: string | undefined;
3806
- parentId: string | null;
3807
- visible: boolean;
3808
- camera?: {
3809
- position: [number, number, number];
3810
- target: [number, number, number];
3811
- mode: "orthographic" | "perspective";
3812
- fov?: number | undefined;
3813
- zoom?: number | undefined;
3814
- } | undefined;
3815
- metadata: Record<string, unknown>;
3816
- provenance?: {
3817
- refs: {
3818
- ns?: string | undefined;
3819
- id: string;
3820
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
3821
- }[];
3822
- lineage?: {
3823
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
3824
- fromIds: string[];
3825
- } | undefined;
3826
- } | undefined;
3827
- id: `ceiling_${string}`;
3828
- children: (`item_${string}` | `procedural-item_${string}`)[];
3829
- material?: {
3830
- id?: string | undefined;
3831
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
3832
- properties?: {
3833
- color: string;
3834
- roughness: number;
3835
- metalness: number;
3836
- opacity: number;
3837
- transparent: boolean;
3838
- side: "back" | "double" | "front";
3839
- } | undefined;
3840
- texture?: {
3841
- url: string;
3842
- repeat?: [number, number] | undefined;
3843
- scale?: number | undefined;
3844
- offset?: [number, number] | undefined;
3845
- normalMap?: string | undefined;
3846
- normalScale?: number | undefined;
3847
- bumpMap?: string | undefined;
3848
- bumpScale?: number | undefined;
3849
- } | undefined;
3850
- } | undefined;
3851
- materialPreset?: string | undefined;
3852
- slots?: Record<string, string> | undefined;
3853
- polygon: [number, number][];
3854
- holes: [number, number][][];
3855
- holeMetadata: {
3856
- source: "elevator" | "floor-opening" | "manual" | "room" | "stair";
3857
- openingId?: string | undefined;
3858
- stairId?: string | undefined;
3859
- elevatorId?: string | undefined;
3860
- }[];
3861
- openingIds?: string[] | undefined;
3862
- height?: number | undefined;
3863
- buildUp?: {
3864
- presetId?: string | undefined;
3865
- finish?: {
3866
- kind: "drywall" | "plaster" | "wood-plank";
3867
- thickness: number;
3868
- name?: string | undefined;
3869
- } | undefined;
3870
- framing?: {
3871
- system: "joists" | "truss-chords";
3872
- size: "2x10" | "2x12" | "2x4" | "2x6" | "2x8";
3873
- spacing: number;
3874
- } | undefined;
3875
- decking?: {
3876
- kind: "osb" | "plywood";
3877
- thickness: number;
3878
- name?: string | undefined;
3879
- } | undefined;
3880
- insulation?: {
3881
- kind: "batt" | "blown" | "rigid";
3882
- thickness: number;
3883
- name?: string | undefined;
3884
- } | undefined;
3885
- } | undefined;
3886
- regions?: {
3887
- id: string;
3888
- polygon: [number, number][];
3889
- finish: string | Record<string, unknown>;
3890
- }[] | undefined;
3891
- boundary?: "auto" | undefined;
3892
- zoneId?: string | undefined;
3893
- autoFromWalls: boolean;
3894
- type: "ceiling";
3895
3448
  } | {
3896
3449
  object: "node";
3897
3450
  name?: string | undefined;
@@ -4163,6 +3716,44 @@ export declare const materializeLegacyAutoOpenings: (nodes: {
4163
3716
  railingPostThrough?: boolean | undefined;
4164
3717
  children: `sseg_${string}`[];
4165
3718
  type: "stair";
3719
+ } | {
3720
+ object: "node";
3721
+ name?: string | undefined;
3722
+ parentId: string | null;
3723
+ visible: boolean;
3724
+ camera?: {
3725
+ position: [number, number, number];
3726
+ target: [number, number, number];
3727
+ mode: "orthographic" | "perspective";
3728
+ fov?: number | undefined;
3729
+ zoom?: number | undefined;
3730
+ } | undefined;
3731
+ metadata: Record<string, unknown>;
3732
+ provenance?: {
3733
+ refs: {
3734
+ ns?: string | undefined;
3735
+ id: string;
3736
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
3737
+ }[];
3738
+ lineage?: {
3739
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
3740
+ fromIds: string[];
3741
+ } | undefined;
3742
+ } | undefined;
3743
+ id: `scan_${string}`;
3744
+ url: string | null;
3745
+ captureSession: {
3746
+ sessionId: string;
3747
+ schemaVersion?: number | undefined;
3748
+ revisionId?: string | undefined;
3749
+ manifestUrl?: string | undefined;
3750
+ } | null;
3751
+ layers: Record<string, boolean>;
3752
+ position: [number, number, number];
3753
+ rotation: [number, number, number];
3754
+ scale: number;
3755
+ opacity: number;
3756
+ type: "scan";
4166
3757
  } | {
4167
3758
  object: "node";
4168
3759
  name?: string | undefined;
@@ -4204,6 +3795,113 @@ export declare const materializeLegacyAutoOpenings: (nodes: {
4204
3795
  label: string;
4205
3796
  } | null;
4206
3797
  type: "guide";
3798
+ } | {
3799
+ object: "node";
3800
+ name?: string | undefined;
3801
+ parentId: string | null;
3802
+ visible: boolean;
3803
+ camera?: {
3804
+ position: [number, number, number];
3805
+ target: [number, number, number];
3806
+ mode: "orthographic" | "perspective";
3807
+ fov?: number | undefined;
3808
+ zoom?: number | undefined;
3809
+ } | undefined;
3810
+ metadata: Record<string, unknown>;
3811
+ provenance?: {
3812
+ refs: {
3813
+ ns?: string | undefined;
3814
+ id: string;
3815
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
3816
+ }[];
3817
+ lineage?: {
3818
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
3819
+ fromIds: string[];
3820
+ } | undefined;
3821
+ } | undefined;
3822
+ id: `measurement_${string}`;
3823
+ measurement: {
3824
+ kind: "distance";
3825
+ points: [{
3826
+ kind: "feature";
3827
+ reference: {
3828
+ nodeId: string;
3829
+ featureId: string;
3830
+ parameters?: Record<string, string | number | boolean> | undefined;
3831
+ };
3832
+ fallback: [number, number, number];
3833
+ } | [number, number, number], {
3834
+ kind: "feature";
3835
+ reference: {
3836
+ nodeId: string;
3837
+ featureId: string;
3838
+ parameters?: Record<string, string | number | boolean> | undefined;
3839
+ };
3840
+ fallback: [number, number, number];
3841
+ } | [number, number, number]];
3842
+ } | {
3843
+ kind: "angle";
3844
+ points: [{
3845
+ kind: "feature";
3846
+ reference: {
3847
+ nodeId: string;
3848
+ featureId: string;
3849
+ parameters?: Record<string, string | number | boolean> | undefined;
3850
+ };
3851
+ fallback: [number, number, number];
3852
+ } | [number, number, number], {
3853
+ kind: "feature";
3854
+ reference: {
3855
+ nodeId: string;
3856
+ featureId: string;
3857
+ parameters?: Record<string, string | number | boolean> | undefined;
3858
+ };
3859
+ fallback: [number, number, number];
3860
+ } | [number, number, number], {
3861
+ kind: "feature";
3862
+ reference: {
3863
+ nodeId: string;
3864
+ featureId: string;
3865
+ parameters?: Record<string, string | number | boolean> | undefined;
3866
+ };
3867
+ fallback: [number, number, number];
3868
+ } | [number, number, number]];
3869
+ } | {
3870
+ kind: "area";
3871
+ base: ({
3872
+ kind: "feature";
3873
+ reference: {
3874
+ nodeId: string;
3875
+ featureId: string;
3876
+ parameters?: Record<string, string | number | boolean> | undefined;
3877
+ };
3878
+ fallback: [number, number, number];
3879
+ } | [number, number, number])[];
3880
+ } | {
3881
+ kind: "perimeter";
3882
+ base: ({
3883
+ kind: "feature";
3884
+ reference: {
3885
+ nodeId: string;
3886
+ featureId: string;
3887
+ parameters?: Record<string, string | number | boolean> | undefined;
3888
+ };
3889
+ fallback: [number, number, number];
3890
+ } | [number, number, number])[];
3891
+ } | {
3892
+ kind: "volume";
3893
+ base: ({
3894
+ kind: "feature";
3895
+ reference: {
3896
+ nodeId: string;
3897
+ featureId: string;
3898
+ parameters?: Record<string, string | number | boolean> | undefined;
3899
+ };
3900
+ fallback: [number, number, number];
3901
+ } | [number, number, number])[];
3902
+ extrusion: [number, number, number];
3903
+ };
3904
+ type: "measurement";
4207
3905
  } | {
4208
3906
  object: "node";
4209
3907
  name?: string | undefined;
@@ -4298,6 +3996,60 @@ export declare const materializeLegacyAutoOpenings: (nodes: {
4298
3996
  materialPreset?: string | undefined;
4299
3997
  slots?: Record<string, string> | undefined;
4300
3998
  type: "shelf";
3999
+ } | {
4000
+ object: "node";
4001
+ name?: string | undefined;
4002
+ parentId: string | null;
4003
+ visible: boolean;
4004
+ camera?: {
4005
+ position: [number, number, number];
4006
+ target: [number, number, number];
4007
+ mode: "orthographic" | "perspective";
4008
+ fov?: number | undefined;
4009
+ zoom?: number | undefined;
4010
+ } | undefined;
4011
+ metadata: Record<string, unknown>;
4012
+ provenance?: {
4013
+ refs: {
4014
+ ns?: string | undefined;
4015
+ id: string;
4016
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
4017
+ }[];
4018
+ lineage?: {
4019
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
4020
+ fromIds: string[];
4021
+ } | undefined;
4022
+ } | undefined;
4023
+ id: `duct-segment_${string}`;
4024
+ path: [number, number, number][];
4025
+ autoHangers?: boolean | undefined;
4026
+ hangerOverrides?: Record<string, {
4027
+ fraction?: number | undefined;
4028
+ skipped?: boolean | undefined;
4029
+ hostId?: string | undefined;
4030
+ }> | undefined;
4031
+ hangerStyle?: "double" | "single" | undefined;
4032
+ hangerSpacing?: number | undefined;
4033
+ hangerMaxReach?: number | undefined;
4034
+ wallAttachment?: {
4035
+ wallId: `wall_${string}`;
4036
+ side: "back" | "front";
4037
+ startUV: [number, number];
4038
+ endUV: [number, number];
4039
+ offset: number;
4040
+ } | undefined;
4041
+ shape: "oval" | "rect" | "round";
4042
+ diameter: number;
4043
+ width: number;
4044
+ height: number;
4045
+ roll: number;
4046
+ ductMaterial: "duct-board" | "flex" | "sheet-metal" | "spiral";
4047
+ seamDetail: boolean;
4048
+ insulated: boolean;
4049
+ insulationR: number;
4050
+ system: "return" | "supply";
4051
+ slots?: Record<string, string> | undefined;
4052
+ type: "duct-segment";
4301
4053
  } | {
4302
4054
  object: "node";
4303
4055
  name?: string | undefined;
@@ -4423,6 +4175,36 @@ export declare const materializeLegacyAutoOpenings: (nodes: {
4423
4175
  returnWidth: number;
4424
4176
  returnHeight: number;
4425
4177
  type: "hvac-equipment";
4178
+ } | {
4179
+ object: "node";
4180
+ name?: string | undefined;
4181
+ parentId: string | null;
4182
+ visible: boolean;
4183
+ camera?: {
4184
+ position: [number, number, number];
4185
+ target: [number, number, number];
4186
+ mode: "orthographic" | "perspective";
4187
+ fov?: number | undefined;
4188
+ zoom?: number | undefined;
4189
+ } | undefined;
4190
+ metadata: Record<string, unknown>;
4191
+ provenance?: {
4192
+ refs: {
4193
+ ns?: string | undefined;
4194
+ id: string;
4195
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
4196
+ }[];
4197
+ lineage?: {
4198
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
4199
+ fromIds: string[];
4200
+ } | undefined;
4201
+ } | undefined;
4202
+ id: `lineset_${string}`;
4203
+ path: [number, number, number][];
4204
+ suctionDiameter: number;
4205
+ liquidDiameter: number;
4206
+ insulated: boolean;
4207
+ type: "lineset";
4426
4208
  } | {
4427
4209
  object: "node";
4428
4210
  name?: string | undefined;
@@ -4556,12 +4338,102 @@ export declare const materializeLegacyAutoOpenings: (nodes: {
4556
4338
  fromIds: string[];
4557
4339
  } | undefined;
4558
4340
  } | undefined;
4559
- id: `level_${string}`;
4560
- 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}`)[];
4561
- level: number;
4562
- baseElevation: number;
4563
- height?: number | undefined;
4564
- type: "level";
4341
+ id: `pipe-trap_${string}`;
4342
+ position: [number, number, number];
4343
+ rotation: number;
4344
+ diameter: number;
4345
+ pipeMaterial: "abs" | "cast-iron" | "pvc";
4346
+ armLengthM: number;
4347
+ type: "pipe-trap";
4348
+ } | {
4349
+ object: "node";
4350
+ name?: string | undefined;
4351
+ parentId: string | null;
4352
+ visible: boolean;
4353
+ camera?: {
4354
+ position: [number, number, number];
4355
+ target: [number, number, number];
4356
+ mode: "orthographic" | "perspective";
4357
+ fov?: number | undefined;
4358
+ zoom?: number | undefined;
4359
+ } | undefined;
4360
+ metadata: Record<string, unknown>;
4361
+ provenance?: {
4362
+ refs: {
4363
+ ns?: string | undefined;
4364
+ id: string;
4365
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
4366
+ }[];
4367
+ lineage?: {
4368
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
4369
+ fromIds: string[];
4370
+ } | undefined;
4371
+ } | undefined;
4372
+ id: `level_${string}`;
4373
+ 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}`)[];
4374
+ level: number;
4375
+ baseElevation: number;
4376
+ height?: number | undefined;
4377
+ type: "level";
4378
+ } | {
4379
+ object: "node";
4380
+ parentId: string | null;
4381
+ visible: boolean;
4382
+ camera?: {
4383
+ position: [number, number, number];
4384
+ target: [number, number, number];
4385
+ mode: "orthographic" | "perspective";
4386
+ fov?: number | undefined;
4387
+ zoom?: number | undefined;
4388
+ } | undefined;
4389
+ provenance?: {
4390
+ refs: {
4391
+ ns?: string | undefined;
4392
+ id: string;
4393
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
4394
+ }[];
4395
+ lineage?: {
4396
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
4397
+ fromIds: string[];
4398
+ } | undefined;
4399
+ } | undefined;
4400
+ id: `unit_${string}`;
4401
+ name: string;
4402
+ kind: "apartment" | "commercial" | "common" | "hotel-room";
4403
+ members: `zone_${string}`[];
4404
+ color: string;
4405
+ metadata: Record<string, unknown>;
4406
+ type: "unit";
4407
+ } | {
4408
+ object: "node";
4409
+ name?: string | undefined;
4410
+ parentId: string | null;
4411
+ visible: boolean;
4412
+ camera?: {
4413
+ position: [number, number, number];
4414
+ target: [number, number, number];
4415
+ mode: "orthographic" | "perspective";
4416
+ fov?: number | undefined;
4417
+ zoom?: number | undefined;
4418
+ } | undefined;
4419
+ metadata: Record<string, unknown>;
4420
+ provenance?: {
4421
+ refs: {
4422
+ ns?: string | undefined;
4423
+ id: string;
4424
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
4425
+ }[];
4426
+ lineage?: {
4427
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
4428
+ fromIds: string[];
4429
+ } | undefined;
4430
+ } | undefined;
4431
+ id: `building_${string}`;
4432
+ children: (`elevator_${string}` | `level_${string}` | `unit_${string}`)[];
4433
+ position: [number, number, number];
4434
+ rotation: [number, number, number];
4435
+ groundLevelId?: `level_${string}` | undefined;
4436
+ type: "building";
4565
4437
  } | {
4566
4438
  object: "node";
4567
4439
  name?: string | undefined;
@@ -4586,54 +4458,27 @@ export declare const materializeLegacyAutoOpenings: (nodes: {
4586
4458
  fromIds: string[];
4587
4459
  } | undefined;
4588
4460
  } | undefined;
4589
- id: `elevator_${string}`;
4590
- material?: {
4591
- id?: string | undefined;
4592
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
4593
- properties?: {
4594
- color: string;
4595
- roughness: number;
4596
- metalness: number;
4597
- opacity: number;
4598
- transparent: boolean;
4599
- side: "back" | "double" | "front";
4600
- } | undefined;
4601
- texture?: {
4602
- url: string;
4603
- repeat?: [number, number] | undefined;
4604
- scale?: number | undefined;
4605
- offset?: [number, number] | undefined;
4606
- normalMap?: string | undefined;
4607
- normalScale?: number | undefined;
4608
- bumpMap?: string | undefined;
4609
- bumpScale?: number | undefined;
4610
- } | undefined;
4611
- } | undefined;
4612
- materialPreset?: string | undefined;
4613
- slots?: Record<string, string> | undefined;
4614
- position: [number, number, number];
4615
- rotation: number;
4461
+ matchFenceStyle?: boolean | undefined;
4462
+ matchFenceHeight?: boolean | undefined;
4463
+ leafType?: "double" | "single" | undefined;
4464
+ style?: "guard" | "horizontal" | "match" | "picket" | "privacy" | "rail" | "slat" | undefined;
4465
+ height?: number | undefined;
4466
+ clearance?: number | undefined;
4467
+ thickness?: number | undefined;
4468
+ frameWidth?: number | undefined;
4469
+ spacing?: number | undefined;
4470
+ boardWidth?: number | undefined;
4471
+ hinge?: "left" | "right" | undefined;
4472
+ swing?: "inward" | "outward" | undefined;
4473
+ openAngle?: number | undefined;
4474
+ leafSplit?: number | undefined;
4475
+ brace?: "cross" | "diagonal" | "none" | undefined;
4476
+ showHardware?: boolean | undefined;
4477
+ showPosts?: boolean | undefined;
4478
+ id: `fence-gate_${string}`;
4479
+ center: number;
4616
4480
  width: number;
4617
- depth: number;
4618
- shaftWidth?: number | undefined;
4619
- shaftDepth?: number | undefined;
4620
- shaftWallThickness: number;
4621
- shaftStyle: "glass" | "solid";
4622
- cabHeight: number;
4623
- doorWidth: number;
4624
- doorHeight: number;
4625
- doorStyle: "center-opening" | "single-left" | "single-right";
4626
- doorPanelStyle: "glass-frame" | "segmented-panel" | "solid-panel";
4627
- fromLevelId: string | null;
4628
- toLevelId: string | null;
4629
- servedLevelIds?: string[] | undefined;
4630
- disabledLevelIds: string[];
4631
- serviceOnlyLevelIds: string[];
4632
- defaultLevelId: string | null;
4633
- speed: number;
4634
- doorDurationMs: number;
4635
- dwellMs: number;
4636
- type: "elevator";
4481
+ type: "fence-gate";
4637
4482
  } | {
4638
4483
  object: "node";
4639
4484
  name?: string | undefined;
@@ -4658,12 +4503,14 @@ export declare const materializeLegacyAutoOpenings: (nodes: {
4658
4503
  fromIds: string[];
4659
4504
  } | undefined;
4660
4505
  } | undefined;
4661
- id: `building_${string}`;
4662
- children: (`elevator_${string}` | `level_${string}` | `unit_${string}`)[];
4663
- position: [number, number, number];
4664
- rotation: [number, number, number];
4665
- groundLevelId?: `level_${string}` | undefined;
4666
- type: "building";
4506
+ center: number;
4507
+ width: number;
4508
+ matchFenceStyle?: boolean | undefined;
4509
+ matchFenceHeight?: boolean | undefined;
4510
+ height?: number | undefined;
4511
+ showPosts: boolean;
4512
+ id: `fence-opening_${string}`;
4513
+ type: "fence-opening";
4667
4514
  } | {
4668
4515
  object: "node";
4669
4516
  name?: string | undefined;
@@ -5175,6 +5022,64 @@ export declare const materializeLegacyAutoOpenings: (nodes: {
5175
5022
  spinSpeed: number;
5176
5023
  style: "cylinder" | "globe";
5177
5024
  type: "turbine-vent";
5025
+ } | {
5026
+ object: "node";
5027
+ name?: string | undefined;
5028
+ parentId: string | null;
5029
+ visible: boolean;
5030
+ camera?: {
5031
+ position: [number, number, number];
5032
+ target: [number, number, number];
5033
+ mode: "orthographic" | "perspective";
5034
+ fov?: number | undefined;
5035
+ zoom?: number | undefined;
5036
+ } | undefined;
5037
+ metadata: Record<string, unknown>;
5038
+ provenance?: {
5039
+ refs: {
5040
+ ns?: string | undefined;
5041
+ id: string;
5042
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
5043
+ }[];
5044
+ lineage?: {
5045
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
5046
+ fromIds: string[];
5047
+ } | undefined;
5048
+ } | undefined;
5049
+ id: `cupola_${string}`;
5050
+ material?: {
5051
+ id?: string | undefined;
5052
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
5053
+ properties?: {
5054
+ color: string;
5055
+ roughness: number;
5056
+ metalness: number;
5057
+ opacity: number;
5058
+ transparent: boolean;
5059
+ side: "back" | "double" | "front";
5060
+ } | undefined;
5061
+ texture?: {
5062
+ url: string;
5063
+ repeat?: [number, number] | undefined;
5064
+ scale?: number | undefined;
5065
+ offset?: [number, number] | undefined;
5066
+ normalMap?: string | undefined;
5067
+ normalScale?: number | undefined;
5068
+ bumpMap?: string | undefined;
5069
+ bumpScale?: number | undefined;
5070
+ } | undefined;
5071
+ } | undefined;
5072
+ slots?: Record<string, string> | undefined;
5073
+ materialPreset: string;
5074
+ roofSegmentId?: string | undefined;
5075
+ position: [number, number, number];
5076
+ rotation: number;
5077
+ width: number;
5078
+ depth: number;
5079
+ height: number;
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;