@pascal-app/core 1.0.7 → 1.1.0

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 (176) hide show
  1. package/dist/agent-operations/__fixtures__/native-materials.d.ts +4 -0
  2. package/dist/agent-operations/__fixtures__/native-materials.d.ts.map +1 -1
  3. package/dist/agent-operations/__fixtures__/roof-bearing-cases.d.ts +11283 -11279
  4. package/dist/agent-operations/__fixtures__/roof-bearing-cases.d.ts.map +1 -1
  5. package/dist/agent-operations/__fixtures__/verify-scene-cases.d.ts +77 -77
  6. package/dist/agent-operations/author-scene.d.ts.map +1 -1
  7. package/dist/agent-operations/author-scene.js +2 -3
  8. package/dist/agent-operations/circulation-spaces.d.ts +3181 -3180
  9. package/dist/agent-operations/circulation-spaces.d.ts.map +1 -1
  10. package/dist/agent-operations/level-reads.js +1 -1
  11. package/dist/agent-operations/move-plan.d.ts.map +1 -1
  12. package/dist/agent-operations/move-plan.js +11 -9
  13. package/dist/agent-operations/scene-queries.d.ts +2328 -2327
  14. package/dist/agent-operations/scene-queries.d.ts.map +1 -1
  15. package/dist/agent-operations/verify-scene.d.ts.map +1 -1
  16. package/dist/agent-operations/verify-scene.js +4 -2
  17. package/dist/agent-operations/wall-object-observations.d.ts.map +1 -1
  18. package/dist/agent-operations/wall-object-observations.js +1 -1
  19. package/dist/agent-tools/wall-openings.js +2 -2
  20. package/dist/building/__fixtures__/wall-opening-cases.d.ts +229 -228
  21. package/dist/building/__fixtures__/wall-opening-cases.d.ts.map +1 -1
  22. package/dist/building/level-duplication.d.ts +3681 -3679
  23. package/dist/building/level-duplication.d.ts.map +1 -1
  24. package/dist/building/merge-windows.d.ts.map +1 -1
  25. package/dist/building/merge-windows.js +4 -3
  26. package/dist/building/wall-openings.d.ts +20 -6
  27. package/dist/building/wall-openings.d.ts.map +1 -1
  28. package/dist/building/wall-openings.js +74 -25
  29. package/dist/commands/structure/shared.d.ts +1 -0
  30. package/dist/commands/structure/shared.d.ts.map +1 -1
  31. package/dist/commands/structure/zone-wall-merge.d.ts +2351 -2348
  32. package/dist/commands/structure/zone-wall-merge.d.ts.map +1 -1
  33. package/dist/contracts/reference-inventory.d.ts.map +1 -1
  34. package/dist/contracts/reference-inventory.js +0 -1
  35. package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts +6 -1
  36. package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts.map +1 -1
  37. package/dist/hooks/spatial-grid/spatial-grid-manager.js +30 -9
  38. package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts +3181 -3180
  39. package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts.map +1 -1
  40. package/dist/hooks/spatial-grid/spatial-grid-sync.js +8 -4
  41. package/dist/index.d.ts +11 -4
  42. package/dist/index.d.ts.map +1 -1
  43. package/dist/index.js +11 -4
  44. package/dist/lib/__fixtures__/mezzanine.d.ts +8595 -8591
  45. package/dist/lib/__fixtures__/mezzanine.d.ts.map +1 -1
  46. package/dist/lib/absorb-wall-separators.d.ts +1664 -1663
  47. package/dist/lib/absorb-wall-separators.d.ts.map +1 -1
  48. package/dist/lib/build-mode.d.ts +11 -0
  49. package/dist/lib/build-mode.d.ts.map +1 -0
  50. package/dist/lib/build-mode.js +24 -0
  51. package/dist/lib/corner-pair.d.ts +2 -0
  52. package/dist/lib/corner-pair.d.ts.map +1 -1
  53. package/dist/lib/door-interaction.d.ts +14 -0
  54. package/dist/lib/door-interaction.d.ts.map +1 -0
  55. package/dist/lib/door-interaction.js +62 -0
  56. package/dist/lib/elevator-support.d.ts +15 -0
  57. package/dist/lib/elevator-support.d.ts.map +1 -0
  58. package/dist/lib/elevator-support.js +40 -0
  59. package/dist/lib/floor-intent-changes.d.ts.map +1 -1
  60. package/dist/lib/floor-intent-changes.js +6 -4
  61. package/dist/lib/hierarchy.d.ts +19 -0
  62. package/dist/lib/hierarchy.d.ts.map +1 -0
  63. package/dist/lib/hierarchy.js +53 -0
  64. package/dist/lib/opening-floor-datum.d.ts +1 -1
  65. package/dist/lib/opening-floor-datum.d.ts.map +1 -1
  66. package/dist/lib/opening-floor-datum.js +2 -2
  67. package/dist/lib/own-floor-intent.d.ts.map +1 -1
  68. package/dist/lib/own-floor-intent.js +2 -2
  69. package/dist/lib/polygon-boolean.d.ts.map +1 -1
  70. package/dist/lib/polygon-boolean.js +2 -1
  71. package/dist/lib/room-floor-elevation.d.ts +12 -0
  72. package/dist/lib/room-floor-elevation.d.ts.map +1 -0
  73. package/dist/lib/room-floor-elevation.js +41 -0
  74. package/dist/lib/room-floor-feasibility.d.ts.map +1 -1
  75. package/dist/lib/room-floor-feasibility.js +1 -1
  76. package/dist/lib/space-detection.d.ts.map +1 -1
  77. package/dist/lib/space-detection.js +1 -0
  78. package/dist/lib/wall-face-script.d.ts.map +1 -1
  79. package/dist/lib/wall-face-script.js +3 -3
  80. package/dist/lib/window-interaction.d.ts +16 -0
  81. package/dist/lib/window-interaction.d.ts.map +1 -0
  82. package/dist/lib/window-interaction.js +82 -0
  83. package/dist/lib/zone-quantities.js +1 -1
  84. package/dist/node-slots/column.d.ts +5 -0
  85. package/dist/node-slots/column.d.ts.map +1 -1
  86. package/dist/node-slots/column.js +10 -0
  87. package/dist/registry/index.d.ts +1 -1
  88. package/dist/registry/index.d.ts.map +1 -1
  89. package/dist/registry/index.js +1 -1
  90. package/dist/registry/registry.d.ts +5 -0
  91. package/dist/registry/registry.d.ts.map +1 -1
  92. package/dist/registry/registry.js +10 -0
  93. package/dist/registry/types.d.ts +24 -0
  94. package/dist/registry/types.d.ts.map +1 -1
  95. package/dist/schema/index.d.ts +1 -1
  96. package/dist/schema/index.d.ts.map +1 -1
  97. package/dist/schema/index.js +1 -1
  98. package/dist/schema/nodes/roof-segment-resize.d.ts.map +1 -1
  99. package/dist/schema/nodes/roof-segment-resize.js +2 -2
  100. package/dist/schema/nodes/roof-segment.d.ts +2 -0
  101. package/dist/schema/nodes/roof-segment.d.ts.map +1 -1
  102. package/dist/schema/nodes/roof-segment.js +40 -2
  103. package/dist/schema/nodes/wall.d.ts +1 -0
  104. package/dist/schema/nodes/wall.d.ts.map +1 -1
  105. package/dist/schema/nodes/wall.js +6 -0
  106. package/dist/schema/types.d.ts +1 -0
  107. package/dist/schema/types.d.ts.map +1 -1
  108. package/dist/services/index.d.ts +1 -1
  109. package/dist/services/index.d.ts.map +1 -1
  110. package/dist/services/index.js +1 -1
  111. package/dist/services/movement.d.ts +7 -0
  112. package/dist/services/movement.d.ts.map +1 -1
  113. package/dist/services/movement.js +13 -0
  114. package/dist/services/port-connectivity.d.ts +15 -6
  115. package/dist/services/port-connectivity.d.ts.map +1 -1
  116. package/dist/services/port-connectivity.js +83 -17
  117. package/dist/services/roof-bearing.js +2 -1
  118. package/dist/services/storey.d.ts +6 -1
  119. package/dist/services/storey.d.ts.map +1 -1
  120. package/dist/services/storey.js +11 -2
  121. package/dist/spatial/usage-field/swings.d.ts +1 -0
  122. package/dist/spatial/usage-field/swings.d.ts.map +1 -1
  123. package/dist/spatial/usage-field/walls.d.ts +2 -0
  124. package/dist/spatial/usage-field/walls.d.ts.map +1 -1
  125. package/dist/spatial/usage-field/walls.js +18 -4
  126. package/dist/store/actions/node-actions.d.ts +1614 -1613
  127. package/dist/store/actions/node-actions.d.ts.map +1 -1
  128. package/dist/store/actions/node-actions.js +23 -5
  129. package/dist/store/derived-node-guard.d.ts.map +1 -1
  130. package/dist/store/derived-node-guard.js +2 -1
  131. package/dist/store/scene-annotations.d.ts +5033 -5031
  132. package/dist/store/scene-annotations.d.ts.map +1 -1
  133. package/dist/systems/elevator/elevator-geometry.d.ts +25 -0
  134. package/dist/systems/elevator/elevator-geometry.d.ts.map +1 -1
  135. package/dist/systems/elevator/elevator-geometry.js +40 -8
  136. package/dist/systems/elevator/elevator-opening-sync.d.ts.map +1 -1
  137. package/dist/systems/elevator/elevator-opening-sync.js +4 -35
  138. package/dist/systems/elevator/elevator-runtime.d.ts.map +1 -1
  139. package/dist/systems/elevator/elevator-runtime.js +95 -18
  140. package/dist/systems/elevator/elevator-service.d.ts.map +1 -1
  141. package/dist/systems/elevator/elevator-service.js +24 -4
  142. package/dist/systems/roof/roof-elevation.d.ts.map +1 -1
  143. package/dist/systems/roof/roof-elevation.js +2 -1
  144. package/dist/systems/slab/__fixtures__/floor-step.d.ts +1614 -1610
  145. package/dist/systems/slab/__fixtures__/floor-step.d.ts.map +1 -1
  146. package/dist/systems/slab/__fixtures__/raised-room.d.ts +2924 -2920
  147. package/dist/systems/slab/__fixtures__/raised-room.d.ts.map +1 -1
  148. package/dist/systems/stair/stair-opening-preview.d.ts +1147 -1146
  149. package/dist/systems/stair/stair-opening-preview.d.ts.map +1 -1
  150. package/dist/systems/wall/wall-curve.d.ts +10 -0
  151. package/dist/systems/wall/wall-curve.d.ts.map +1 -1
  152. package/dist/systems/wall/wall-curve.js +38 -0
  153. package/dist/systems/wall/wall-frame.d.ts.map +1 -1
  154. package/dist/systems/wall/wall-frame.js +8 -0
  155. package/dist/systems/wall/wall-merge.d.ts +9 -1
  156. package/dist/systems/wall/wall-merge.d.ts.map +1 -1
  157. package/dist/systems/wall/wall-merge.js +38 -6
  158. package/dist/systems/wall/wall-top.d.ts +10 -3
  159. package/dist/systems/wall/wall-top.d.ts.map +1 -1
  160. package/dist/systems/wall/wall-top.js +24 -8
  161. package/dist/systems/wall/wall-topology.d.ts.map +1 -1
  162. package/dist/systems/wall/wall-topology.js +19 -1
  163. package/dist/utils/ensure-scene-openings.d.ts +4354 -4352
  164. package/dist/utils/ensure-scene-openings.d.ts.map +1 -1
  165. package/dist/utils/floor-plate-migration.d.ts +1664 -1663
  166. package/dist/utils/floor-plate-migration.d.ts.map +1 -1
  167. package/dist/utils/measurement-format.d.ts +27 -0
  168. package/dist/utils/measurement-format.d.ts.map +1 -0
  169. package/dist/utils/measurement-format.js +143 -0
  170. package/dist/utils/owned-floor-opening-migration.d.ts +1147 -1146
  171. package/dist/utils/owned-floor-opening-migration.d.ts.map +1 -1
  172. package/dist/utils/reconcile-structure-on-load.d.ts +439 -438
  173. package/dist/utils/reconcile-structure-on-load.d.ts.map +1 -1
  174. package/dist/validation/validate-build-json.d.ts.map +1 -1
  175. package/dist/validation/validate-build-json.js +3 -1
  176. package/package.json +1 -1
@@ -24,54 +24,276 @@ export declare const materializeLegacyAutoOpenings: (nodes: {
24
24
  fromIds: string[];
25
25
  } | undefined;
26
26
  } | undefined;
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";
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[];
38
61
  } | undefined;
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;
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[];
48
168
  } | undefined;
49
169
  } | undefined;
50
- materialPreset?: string | 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";
51
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[];
258
+ } | undefined;
259
+ } | undefined;
260
+ id: `lineset_${string}`;
261
+ path: [number, number, number][];
262
+ suctionDiameter: number;
263
+ liquidDiameter: number;
264
+ insulated: boolean;
265
+ type: "lineset";
266
+ } | {
267
+ object: "node";
268
+ name?: string | undefined;
269
+ parentId: string | null;
270
+ visible: boolean;
271
+ camera?: {
272
+ position: [number, number, number];
273
+ target: [number, number, number];
274
+ mode: "orthographic" | "perspective";
275
+ fov?: number | undefined;
276
+ zoom?: number | undefined;
277
+ } | undefined;
278
+ metadata: Record<string, unknown>;
279
+ provenance?: {
280
+ refs: {
281
+ ns?: string | undefined;
282
+ id: string;
283
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
284
+ }[];
285
+ lineage?: {
286
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
287
+ fromIds: string[];
288
+ } | undefined;
289
+ } | undefined;
290
+ id: `pipe-trap_${string}`;
52
291
  position: [number, number, number];
53
292
  rotation: number;
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";
293
+ diameter: number;
294
+ pipeMaterial: "abs" | "cast-iron" | "pvc";
295
+ armLengthM: number;
296
+ type: "pipe-trap";
75
297
  } | {
76
298
  object: "node";
77
299
  name?: string | undefined;
@@ -96,22 +318,120 @@ export declare const materializeLegacyAutoOpenings: (nodes: {
96
318
  fromIds: string[];
97
319
  } | undefined;
98
320
  } | undefined;
99
- type: "item";
100
- id: `item_${string}`;
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>;
101
330
  position: [number, number, number];
102
331
  rotation: [number, number, number];
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;
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;
113
383
  slots?: Record<string, string> | undefined;
114
- source?: {
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?: {
115
435
  kind: "script";
116
436
  meta?: {
117
437
  description?: string | undefined;
@@ -224,77 +544,69 @@ export declare const materializeLegacyAutoOpenings: (nodes: {
224
544
  thumbnail: string;
225
545
  floorPlan: string;
226
546
  } | undefined;
227
- } | undefined;
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;
247
- } | undefined;
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
- })[];
547
+ inputs: string;
548
+ } | undefined;
549
+ type: "slab";
550
+ } | {
551
+ object: "node";
552
+ name?: string | undefined;
553
+ parentId: string | null;
554
+ visible: boolean;
555
+ camera?: {
556
+ position: [number, number, number];
557
+ target: [number, number, number];
558
+ mode: "orthographic" | "perspective";
559
+ fov?: number | undefined;
560
+ zoom?: number | undefined;
561
+ } | undefined;
562
+ metadata: Record<string, unknown>;
563
+ provenance?: {
564
+ refs: {
565
+ ns?: string | undefined;
566
+ id: string;
567
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
568
+ }[];
569
+ lineage?: {
570
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
571
+ fromIds: string[];
296
572
  } | undefined;
297
- };
573
+ } | undefined;
574
+ id: `structural-grid_${string}`;
575
+ start: [number, number];
576
+ end: [number, number];
577
+ label: string;
578
+ showStartBubble: boolean;
579
+ showEndBubble: boolean;
580
+ type: "structural-grid";
581
+ } | {
582
+ object: "node";
583
+ parentId: string | null;
584
+ visible: boolean;
585
+ camera?: {
586
+ position: [number, number, number];
587
+ target: [number, number, number];
588
+ mode: "orthographic" | "perspective";
589
+ fov?: number | undefined;
590
+ zoom?: number | undefined;
591
+ } | undefined;
592
+ provenance?: {
593
+ refs: {
594
+ ns?: string | undefined;
595
+ id: string;
596
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
597
+ }[];
598
+ lineage?: {
599
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
600
+ fromIds: string[];
601
+ } | undefined;
602
+ } | undefined;
603
+ id: `unit_${string}`;
604
+ name: string;
605
+ kind: "apartment" | "commercial" | "common" | "hotel-room";
606
+ members: `zone_${string}`[];
607
+ color: string;
608
+ metadata: Record<string, unknown>;
609
+ type: "unit";
298
610
  } | {
299
611
  object: "node";
300
612
  name?: string | undefined;
@@ -319,8 +631,7 @@ export declare const materializeLegacyAutoOpenings: (nodes: {
319
631
  fromIds: string[];
320
632
  } | undefined;
321
633
  } | undefined;
322
- id: `ceiling_${string}`;
323
- children: (`item_${string}` | `procedural-item_${string}`)[];
634
+ id: `cupola_${string}`;
324
635
  material?: {
325
636
  id?: string | undefined;
326
637
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
@@ -343,50 +654,94 @@ export declare const materializeLegacyAutoOpenings: (nodes: {
343
654
  bumpScale?: number | undefined;
344
655
  } | undefined;
345
656
  } | undefined;
346
- materialPreset?: string | undefined;
347
657
  slots?: Record<string, string> | 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;
357
- height?: number | undefined;
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;
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[];
374
690
  } | undefined;
375
- insulation?: {
376
- kind: "batt" | "blown" | "rigid";
377
- thickness: number;
378
- name?: string | 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;
696
+ height?: number | undefined;
697
+ clearance?: number | undefined;
698
+ thickness?: number | undefined;
699
+ frameWidth?: number | undefined;
700
+ spacing?: number | undefined;
701
+ boardWidth?: number | undefined;
702
+ hinge?: "left" | "right" | undefined;
703
+ swing?: "inward" | "outward" | undefined;
704
+ openAngle?: number | undefined;
705
+ leafSplit?: number | undefined;
706
+ brace?: "cross" | "diagonal" | "none" | undefined;
707
+ showHardware?: boolean | undefined;
708
+ showPosts?: boolean | undefined;
709
+ id: `fence-gate_${string}`;
710
+ center: number;
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[];
379
735
  } | undefined;
380
736
  } | undefined;
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";
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";
390
745
  } | {
391
746
  object: "node";
392
747
  name?: string | undefined;
@@ -411,42 +766,77 @@ export declare const materializeLegacyAutoOpenings: (nodes: {
411
766
  fromIds: string[];
412
767
  } | undefined;
413
768
  } | undefined;
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";
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";
450
840
  } | {
451
841
  object: "node";
452
842
  name?: string | undefined;
@@ -663,6 +1053,229 @@ export declare const materializeLegacyAutoOpenings: (nodes: {
663
1053
  }[] | undefined;
664
1054
  children: string[];
665
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
+ };
666
1279
  } | {
667
1280
  object: "node";
668
1281
  name?: string | undefined;
@@ -1859,257 +2472,42 @@ export declare const materializeLegacyAutoOpenings: (nodes: {
1859
2472
  };
1860
2473
  assembly?: {
1861
2474
  layers: {
1862
- id: string;
1863
- role: "air" | "covering" | "deck" | "fill" | "finish" | "furring" | "glazing" | "insulation" | "lining" | "membrane" | "sheathing" | "shell" | "structure" | "substrate" | "underlay";
1864
- thickness: number;
1865
- core?: true | undefined;
1866
- spacing?: number | undefined;
1867
- material?: string | undefined;
1868
- slot?: string | undefined;
1869
- returns?: boolean | undefined;
1870
- display?: "construction" | "finished" | undefined;
1871
- inset?: number | undefined;
1872
- bottom?: number | undefined;
1873
- lift?: number | undefined;
1874
- src?: string | undefined;
1875
- }[];
1876
- backing?: {
1877
- id: string;
1878
- role: "air" | "covering" | "deck" | "fill" | "finish" | "furring" | "glazing" | "insulation" | "lining" | "membrane" | "sheathing" | "shell" | "structure" | "substrate" | "underlay";
1879
- thickness: number;
1880
- core?: true | undefined;
1881
- spacing?: number | undefined;
1882
- material?: string | undefined;
1883
- slot?: string | undefined;
1884
- returns?: boolean | undefined;
1885
- display?: "construction" | "finished" | undefined;
1886
- inset?: number | undefined;
1887
- bottom?: number | undefined;
1888
- lift?: number | undefined;
1889
- src?: string | undefined;
1890
- }[] | undefined;
1891
- face?: "exterior" | "front" | undefined;
1892
- presetId?: string | undefined;
1893
- cavityInsulation?: string | undefined;
1894
- } | undefined;
1895
- slots?: Record<string, string> | undefined;
1896
- children: `rseg_${string}`[];
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;
2475
+ id: string;
2476
+ role: "air" | "covering" | "deck" | "fill" | "finish" | "furring" | "glazing" | "insulation" | "lining" | "membrane" | "sheathing" | "shell" | "structure" | "substrate" | "underlay";
2477
+ thickness: number;
2478
+ core?: true | undefined;
2479
+ spacing?: number | undefined;
2480
+ material?: string | undefined;
2481
+ slot?: string | undefined;
2482
+ returns?: boolean | undefined;
2483
+ display?: "construction" | "finished" | undefined;
2484
+ inset?: number | undefined;
2485
+ bottom?: number | undefined;
2486
+ lift?: number | undefined;
2487
+ src?: string | undefined;
2488
+ }[];
2489
+ backing?: {
2490
+ id: string;
2491
+ role: "air" | "covering" | "deck" | "fill" | "finish" | "furring" | "glazing" | "insulation" | "lining" | "membrane" | "sheathing" | "shell" | "structure" | "substrate" | "underlay";
2492
+ thickness: number;
2493
+ core?: true | undefined;
2494
+ spacing?: number | undefined;
2495
+ material?: string | undefined;
2496
+ slot?: string | undefined;
2497
+ returns?: boolean | undefined;
2498
+ display?: "construction" | "finished" | undefined;
2499
+ inset?: number | undefined;
2500
+ bottom?: number | undefined;
2501
+ lift?: number | undefined;
2502
+ src?: string | undefined;
2503
+ }[] | undefined;
2504
+ face?: "exterior" | "front" | undefined;
2505
+ presetId?: string | undefined;
2506
+ cavityInsulation?: string | undefined;
2111
2507
  } | undefined;
2112
- type: "slab";
2508
+ slots?: Record<string, string> | undefined;
2509
+ children: `rseg_${string}`[];
2510
+ type: "roof";
2113
2511
  } | {
2114
2512
  object: "node";
2115
2513
  name?: string | undefined;
@@ -2448,6 +2846,7 @@ export declare const materializeLegacyAutoOpenings: (nodes: {
2448
2846
  } | undefined;
2449
2847
  justification?: "a" | "b" | undefined;
2450
2848
  height?: number | undefined;
2849
+ endHeightOffset?: number | undefined;
2451
2850
  curveOffset?: number | undefined;
2452
2851
  supportSlabId?: string | undefined;
2453
2852
  supportOffset?: number | undefined;
@@ -2754,42 +3153,6 @@ export declare const materializeLegacyAutoOpenings: (nodes: {
2754
3153
  start: [number, number];
2755
3154
  end: [number, number];
2756
3155
  type: "separator";
2757
- } | {
2758
- object: "node";
2759
- name?: string | undefined;
2760
- parentId: string | null;
2761
- visible: boolean;
2762
- camera?: {
2763
- position: [number, number, number];
2764
- target: [number, number, number];
2765
- mode: "orthographic" | "perspective";
2766
- fov?: number | undefined;
2767
- zoom?: number | undefined;
2768
- } | undefined;
2769
- metadata: Record<string, unknown>;
2770
- provenance?: {
2771
- refs: {
2772
- ns?: string | undefined;
2773
- id: string;
2774
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
2775
- }[];
2776
- lineage?: {
2777
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
2778
- fromIds: string[];
2779
- } | undefined;
2780
- } | undefined;
2781
- id: `floor-opening_${string}`;
2782
- polygon: [number, number][];
2783
- hostZoneId?: string | undefined;
2784
- legacyPlateCuts?: Record<string, [number, number][][]> | undefined;
2785
- legacyCeilingCuts?: Record<string, [number, number][][]> | undefined;
2786
- source: string;
2787
- ownerId?: string | undefined;
2788
- surfaceId?: string | undefined;
2789
- drawnOn: "ceiling" | "floor";
2790
- cutsPrimary: boolean;
2791
- cutsAdjacent: boolean;
2792
- type: "floor-opening";
2793
3156
  } | {
2794
3157
  object: "node";
2795
3158
  name?: string | undefined;
@@ -2908,18 +3271,42 @@ export declare const materializeLegacyAutoOpenings: (nodes: {
2908
3271
  fromIds: string[];
2909
3272
  } | undefined;
2910
3273
  } | undefined;
2911
- id: `beam_${string}`;
2912
- start: [number, number];
2913
- end: [number, number];
2914
- width: number;
2915
- depth: number;
2916
- size?: string | undefined;
2917
- plies: number;
2918
- material: "glulam" | "lvl" | "pressure-treated" | "sawn" | "steel";
2919
- placement: "dropped" | "flush";
2920
- topElevation?: number | undefined;
2921
- supportSlabId?: string | undefined;
2922
- type: "beam";
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";
2923
3310
  } | {
2924
3311
  object: "node";
2925
3312
  name?: string | undefined;
@@ -2967,37 +3354,6 @@ export declare const materializeLegacyAutoOpenings: (nodes: {
2967
3354
  slots: Record<string, string>;
2968
3355
  slotNames: Record<string, string>;
2969
3356
  type: "block";
2970
- } | {
2971
- object: "node";
2972
- name?: string | undefined;
2973
- parentId: string | null;
2974
- visible: boolean;
2975
- camera?: {
2976
- position: [number, number, number];
2977
- target: [number, number, number];
2978
- mode: "orthographic" | "perspective";
2979
- fov?: number | undefined;
2980
- zoom?: number | undefined;
2981
- } | undefined;
2982
- metadata: Record<string, unknown>;
2983
- provenance?: {
2984
- refs: {
2985
- ns?: string | undefined;
2986
- id: string;
2987
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
2988
- }[];
2989
- lineage?: {
2990
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
2991
- fromIds: string[];
2992
- } | undefined;
2993
- } | undefined;
2994
- id: `structural-grid_${string}`;
2995
- start: [number, number];
2996
- end: [number, number];
2997
- label: string;
2998
- showStartBubble: boolean;
2999
- showEndBubble: boolean;
3000
- type: "structural-grid";
3001
3357
  } | {
3002
3358
  object: "node";
3003
3359
  name?: string | undefined;
@@ -3417,33 +3773,125 @@ export declare const materializeLegacyAutoOpenings: (nodes: {
3417
3773
  finish: string | Record<string, unknown>;
3418
3774
  }[] | undefined;
3419
3775
  } | undefined;
3420
- floorStepFinish?: string | undefined;
3421
- floorStepOverrides?: {
3422
- key: string;
3423
- step?: number | undefined;
3424
- finish: string;
3425
- }[] | undefined;
3426
- floorEdgeFinish?: string | undefined;
3427
- wallMaterial?: string | undefined;
3428
- wallOverrides?: {
3429
- wallId: string;
3430
- face: "a" | "b";
3431
- finish: string;
3776
+ floorStepFinish?: string | undefined;
3777
+ floorStepOverrides?: {
3778
+ key: string;
3779
+ step?: number | undefined;
3780
+ finish: string;
3781
+ }[] | undefined;
3782
+ floorEdgeFinish?: string | undefined;
3783
+ wallMaterial?: string | undefined;
3784
+ wallOverrides?: {
3785
+ wallId: string;
3786
+ face: "a" | "b";
3787
+ finish: string;
3788
+ }[] | undefined;
3789
+ hasFloor?: false | undefined;
3790
+ hasCeiling?: false | undefined;
3791
+ spaceRole: "generic" | "room";
3792
+ roomNumber: string;
3793
+ enclosureStatus: "auto" | "enclosed" | "open";
3794
+ floorFinish: string;
3795
+ wallFinish: string;
3796
+ ceilingFinish: string;
3797
+ ceilingHeight: number;
3798
+ occupancy: string;
3799
+ clearDimensionPolicy: "finish-faces" | "inside-faces" | "none";
3800
+ color: string;
3801
+ metadata: Record<string, unknown>;
3802
+ 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>;
3432
3890
  }[] | undefined;
3433
- hasFloor?: false | undefined;
3434
- hasCeiling?: false | undefined;
3435
- spaceRole: "generic" | "room";
3436
- roomNumber: string;
3437
- enclosureStatus: "auto" | "enclosed" | "open";
3438
- floorFinish: string;
3439
- wallFinish: string;
3440
- ceilingFinish: string;
3441
- ceilingHeight: number;
3442
- occupancy: string;
3443
- clearDimensionPolicy: "finish-faces" | "inside-faces" | "none";
3444
- color: string;
3445
- metadata: Record<string, unknown>;
3446
- type: "zone";
3891
+ boundary?: "auto" | undefined;
3892
+ zoneId?: string | undefined;
3893
+ autoFromWalls: boolean;
3894
+ type: "ceiling";
3447
3895
  } | {
3448
3896
  object: "node";
3449
3897
  name?: string | undefined;
@@ -3684,223 +4132,78 @@ export declare const materializeLegacyAutoOpenings: (nodes: {
3684
4132
  treated?: boolean | undefined;
3685
4133
  nosing?: number | undefined;
3686
4134
  } | undefined;
3687
- innerRadius: number;
3688
- sweepAngle: number;
3689
- topLandingMode: "integrated" | "none";
3690
- topLandingDepth: number;
3691
- showCenterColumn: boolean;
3692
- showStepSupports: boolean;
3693
- railingMode: "both" | "left" | "none" | "right";
3694
- railingHeight: number;
3695
- railingStyle?: "balusters" | "boards" | "cable" | "glass" | "metal" | "post-and-rail" | undefined;
3696
- railingPath?: "continuous" | "original" | undefined;
3697
- handrail?: {
3698
- mode: "both" | "left" | "none" | "right";
3699
- height: number;
3700
- diameter: number;
3701
- offset: number;
3702
- bottom?: {
3703
- extension: number;
3704
- return: "floor" | "none" | "post" | "wall";
3705
- returnLength: number;
3706
- } | undefined;
3707
- top?: {
3708
- extension: number;
3709
- return: "floor" | "none" | "post" | "wall";
3710
- returnLength: number;
3711
- } | undefined;
3712
- } | undefined;
3713
- railingTopPost?: boolean | undefined;
3714
- railingTopReach?: number | undefined;
3715
- railingPostThrough?: boolean | undefined;
3716
- children: `sseg_${string}`[];
3717
- type: "stair";
3718
- } | {
3719
- object: "node";
3720
- name?: string | undefined;
3721
- parentId: string | null;
3722
- visible: boolean;
3723
- camera?: {
3724
- position: [number, number, number];
3725
- target: [number, number, number];
3726
- mode: "orthographic" | "perspective";
3727
- fov?: number | undefined;
3728
- zoom?: number | undefined;
3729
- } | undefined;
3730
- metadata: Record<string, unknown>;
3731
- provenance?: {
3732
- refs: {
3733
- ns?: string | undefined;
3734
- id: string;
3735
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
3736
- }[];
3737
- lineage?: {
3738
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
3739
- fromIds: string[];
3740
- } | undefined;
3741
- } | undefined;
3742
- id: `scan_${string}`;
3743
- url: string | null;
3744
- captureSession: {
3745
- sessionId: string;
3746
- schemaVersion?: number | undefined;
3747
- revisionId?: string | undefined;
3748
- manifestUrl?: string | undefined;
3749
- } | null;
3750
- layers: Record<string, boolean>;
3751
- position: [number, number, number];
3752
- rotation: [number, number, number];
3753
- scale: number;
3754
- opacity: number;
3755
- type: "scan";
3756
- } | {
3757
- object: "node";
3758
- name?: string | undefined;
3759
- parentId: string | null;
3760
- visible: boolean;
3761
- camera?: {
3762
- position: [number, number, number];
3763
- target: [number, number, number];
3764
- mode: "orthographic" | "perspective";
3765
- fov?: number | undefined;
3766
- zoom?: number | undefined;
3767
- } | undefined;
3768
- metadata: Record<string, unknown>;
3769
- provenance?: {
3770
- refs: {
3771
- ns?: string | undefined;
3772
- id: string;
3773
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
3774
- }[];
3775
- lineage?: {
3776
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
3777
- fromIds: string[];
3778
- } | undefined;
3779
- } | undefined;
3780
- id: `guide_${string}`;
3781
- url: string;
3782
- position: [number, number, number];
3783
- rotation: [number, number, number];
3784
- scale: number;
3785
- opacity: number;
3786
- scaleReference: {
3787
- start: [number, number];
3788
- end: [number, number];
3789
- realLengthMeters: number;
3790
- measuredLengthUnits: number;
3791
- metersPerUnit: number;
3792
- displayLength?: number | undefined;
3793
- displayUnit?: "centimeters" | "feet" | "inches" | "meters" | undefined;
3794
- label: string;
3795
- } | null;
3796
- type: "guide";
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";
4135
+ innerRadius: number;
4136
+ sweepAngle: number;
4137
+ topLandingMode: "integrated" | "none";
4138
+ topLandingDepth: number;
4139
+ showCenterColumn: boolean;
4140
+ showStepSupports: boolean;
4141
+ railingMode: "both" | "left" | "none" | "right";
4142
+ railingHeight: number;
4143
+ railingStyle?: "balusters" | "boards" | "cable" | "glass" | "metal" | "post-and-rail" | undefined;
4144
+ railingPath?: "continuous" | "original" | undefined;
4145
+ handrail?: {
4146
+ mode: "both" | "left" | "none" | "right";
4147
+ height: number;
4148
+ diameter: number;
4149
+ offset: number;
4150
+ bottom?: {
4151
+ extension: number;
4152
+ return: "floor" | "none" | "post" | "wall";
4153
+ returnLength: number;
4154
+ } | undefined;
4155
+ top?: {
4156
+ extension: number;
4157
+ return: "floor" | "none" | "post" | "wall";
4158
+ returnLength: number;
4159
+ } | undefined;
4160
+ } | undefined;
4161
+ railingTopPost?: boolean | undefined;
4162
+ railingTopReach?: number | undefined;
4163
+ railingPostThrough?: boolean | undefined;
4164
+ children: `sseg_${string}`[];
4165
+ type: "stair";
4166
+ } | {
4167
+ object: "node";
4168
+ name?: string | undefined;
4169
+ parentId: string | null;
4170
+ visible: boolean;
4171
+ camera?: {
4172
+ position: [number, number, number];
4173
+ target: [number, number, number];
4174
+ mode: "orthographic" | "perspective";
4175
+ fov?: number | undefined;
4176
+ zoom?: number | undefined;
4177
+ } | undefined;
4178
+ metadata: Record<string, unknown>;
4179
+ provenance?: {
4180
+ refs: {
4181
+ ns?: string | undefined;
4182
+ id: string;
4183
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
4184
+ }[];
4185
+ lineage?: {
4186
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
4187
+ fromIds: string[];
4188
+ } | undefined;
4189
+ } | undefined;
4190
+ id: `guide_${string}`;
4191
+ url: string;
4192
+ position: [number, number, number];
4193
+ rotation: [number, number, number];
4194
+ scale: number;
4195
+ opacity: number;
4196
+ scaleReference: {
4197
+ start: [number, number];
4198
+ end: [number, number];
4199
+ realLengthMeters: number;
4200
+ measuredLengthUnits: number;
4201
+ metersPerUnit: number;
4202
+ displayLength?: number | undefined;
4203
+ displayUnit?: "centimeters" | "feet" | "inches" | "meters" | undefined;
4204
+ label: string;
4205
+ } | null;
4206
+ type: "guide";
3904
4207
  } | {
3905
4208
  object: "node";
3906
4209
  name?: string | undefined;
@@ -3995,60 +4298,6 @@ export declare const materializeLegacyAutoOpenings: (nodes: {
3995
4298
  materialPreset?: string | undefined;
3996
4299
  slots?: Record<string, string> | undefined;
3997
4300
  type: "shelf";
3998
- } | {
3999
- object: "node";
4000
- name?: string | undefined;
4001
- parentId: string | null;
4002
- visible: boolean;
4003
- camera?: {
4004
- position: [number, number, number];
4005
- target: [number, number, number];
4006
- mode: "orthographic" | "perspective";
4007
- fov?: number | undefined;
4008
- zoom?: number | undefined;
4009
- } | undefined;
4010
- metadata: Record<string, unknown>;
4011
- provenance?: {
4012
- refs: {
4013
- ns?: string | undefined;
4014
- id: string;
4015
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
4016
- }[];
4017
- lineage?: {
4018
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
4019
- fromIds: string[];
4020
- } | undefined;
4021
- } | undefined;
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;
4040
- shape: "oval" | "rect" | "round";
4041
- diameter: number;
4042
- width: number;
4043
- height: number;
4044
- roll: number;
4045
- ductMaterial: "duct-board" | "flex" | "sheet-metal" | "spiral";
4046
- seamDetail: boolean;
4047
- insulated: boolean;
4048
- insulationR: number;
4049
- system: "return" | "supply";
4050
- slots?: Record<string, string> | undefined;
4051
- type: "duct-segment";
4052
4301
  } | {
4053
4302
  object: "node";
4054
4303
  name?: string | undefined;
@@ -4174,36 +4423,6 @@ export declare const materializeLegacyAutoOpenings: (nodes: {
4174
4423
  returnWidth: number;
4175
4424
  returnHeight: number;
4176
4425
  type: "hvac-equipment";
4177
- } | {
4178
- object: "node";
4179
- name?: string | undefined;
4180
- parentId: string | null;
4181
- visible: boolean;
4182
- camera?: {
4183
- position: [number, number, number];
4184
- target: [number, number, number];
4185
- mode: "orthographic" | "perspective";
4186
- fov?: number | undefined;
4187
- zoom?: number | undefined;
4188
- } | undefined;
4189
- metadata: Record<string, unknown>;
4190
- provenance?: {
4191
- refs: {
4192
- ns?: string | undefined;
4193
- id: string;
4194
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
4195
- }[];
4196
- lineage?: {
4197
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
4198
- fromIds: string[];
4199
- } | undefined;
4200
- } | undefined;
4201
- id: `lineset_${string}`;
4202
- path: [number, number, number][];
4203
- suctionDiameter: number;
4204
- liquidDiameter: number;
4205
- insulated: boolean;
4206
- type: "lineset";
4207
4426
  } | {
4208
4427
  object: "node";
4209
4428
  name?: string | undefined;
@@ -4303,106 +4522,16 @@ export declare const materializeLegacyAutoOpenings: (nodes: {
4303
4522
  } | undefined;
4304
4523
  } | undefined;
4305
4524
  id: `pipe-fitting_${string}`;
4306
- position: [number, number, number];
4307
- rotation: [number, number, number];
4308
- fittingType: "cleanout" | "coupling" | "cross" | "elbow" | "end-cap" | "reducer" | "sanitary-tee" | "wye";
4309
- angle: number;
4310
- diameter: number;
4311
- diameter2: number;
4312
- cleanoutStyle: "end" | "inline";
4313
- pipeMaterial: "abs" | "cast-iron" | "pvc";
4314
- system: "vent" | "waste";
4315
- type: "pipe-fitting";
4316
- } | {
4317
- object: "node";
4318
- name?: string | undefined;
4319
- parentId: string | null;
4320
- visible: boolean;
4321
- camera?: {
4322
- position: [number, number, number];
4323
- target: [number, number, number];
4324
- mode: "orthographic" | "perspective";
4325
- fov?: number | undefined;
4326
- zoom?: number | undefined;
4327
- } | undefined;
4328
- metadata: Record<string, unknown>;
4329
- provenance?: {
4330
- refs: {
4331
- ns?: string | undefined;
4332
- id: string;
4333
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
4334
- }[];
4335
- lineage?: {
4336
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
4337
- fromIds: string[];
4338
- } | undefined;
4339
- } | undefined;
4340
- id: `pipe-trap_${string}`;
4341
- position: [number, number, number];
4342
- rotation: number;
4343
- diameter: number;
4344
- pipeMaterial: "abs" | "cast-iron" | "pvc";
4345
- armLengthM: number;
4346
- type: "pipe-trap";
4347
- } | {
4348
- object: "node";
4349
- name?: string | undefined;
4350
- parentId: string | null;
4351
- visible: boolean;
4352
- camera?: {
4353
- position: [number, number, number];
4354
- target: [number, number, number];
4355
- mode: "orthographic" | "perspective";
4356
- fov?: number | undefined;
4357
- zoom?: number | undefined;
4358
- } | undefined;
4359
- metadata: Record<string, unknown>;
4360
- provenance?: {
4361
- refs: {
4362
- ns?: string | undefined;
4363
- id: string;
4364
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
4365
- }[];
4366
- lineage?: {
4367
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
4368
- fromIds: string[];
4369
- } | undefined;
4370
- } | undefined;
4371
- id: `level_${string}`;
4372
- 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}`)[];
4373
- level: number;
4374
- baseElevation: number;
4375
- height?: number | undefined;
4376
- type: "level";
4377
- } | {
4378
- object: "node";
4379
- parentId: string | null;
4380
- visible: boolean;
4381
- camera?: {
4382
- position: [number, number, number];
4383
- target: [number, number, number];
4384
- mode: "orthographic" | "perspective";
4385
- fov?: number | undefined;
4386
- zoom?: number | undefined;
4387
- } | undefined;
4388
- provenance?: {
4389
- refs: {
4390
- ns?: string | undefined;
4391
- id: string;
4392
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
4393
- }[];
4394
- lineage?: {
4395
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
4396
- fromIds: string[];
4397
- } | undefined;
4398
- } | undefined;
4399
- id: `unit_${string}`;
4400
- name: string;
4401
- kind: "apartment" | "commercial" | "common" | "hotel-room";
4402
- members: `zone_${string}`[];
4403
- color: string;
4404
- metadata: Record<string, unknown>;
4405
- type: "unit";
4525
+ position: [number, number, number];
4526
+ rotation: [number, number, number];
4527
+ fittingType: "cleanout" | "coupling" | "cross" | "elbow" | "end-cap" | "reducer" | "sanitary-tee" | "wye";
4528
+ angle: number;
4529
+ diameter: number;
4530
+ diameter2: number;
4531
+ cleanoutStyle: "end" | "inline";
4532
+ pipeMaterial: "abs" | "cast-iron" | "pvc";
4533
+ system: "vent" | "waste";
4534
+ type: "pipe-fitting";
4406
4535
  } | {
4407
4536
  object: "node";
4408
4537
  name?: string | undefined;
@@ -4427,12 +4556,12 @@ export declare const materializeLegacyAutoOpenings: (nodes: {
4427
4556
  fromIds: string[];
4428
4557
  } | undefined;
4429
4558
  } | undefined;
4430
- id: `building_${string}`;
4431
- children: (`elevator_${string}` | `level_${string}` | `unit_${string}`)[];
4432
- position: [number, number, number];
4433
- rotation: [number, number, number];
4434
- groundLevelId?: `level_${string}` | undefined;
4435
- type: "building";
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";
4436
4565
  } | {
4437
4566
  object: "node";
4438
4567
  name?: string | undefined;
@@ -4457,27 +4586,54 @@ export declare const materializeLegacyAutoOpenings: (nodes: {
4457
4586
  fromIds: string[];
4458
4587
  } | undefined;
4459
4588
  } | undefined;
4460
- matchFenceStyle?: boolean | undefined;
4461
- matchFenceHeight?: boolean | undefined;
4462
- leafType?: "double" | "single" | undefined;
4463
- style?: "guard" | "horizontal" | "match" | "picket" | "privacy" | "rail" | "slat" | undefined;
4464
- height?: number | undefined;
4465
- clearance?: number | undefined;
4466
- thickness?: number | undefined;
4467
- frameWidth?: number | undefined;
4468
- spacing?: number | undefined;
4469
- boardWidth?: number | undefined;
4470
- hinge?: "left" | "right" | undefined;
4471
- swing?: "inward" | "outward" | undefined;
4472
- openAngle?: number | undefined;
4473
- leafSplit?: number | undefined;
4474
- brace?: "cross" | "diagonal" | "none" | undefined;
4475
- showHardware?: boolean | undefined;
4476
- showPosts?: boolean | undefined;
4477
- id: `fence-gate_${string}`;
4478
- center: number;
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;
4479
4616
  width: number;
4480
- type: "fence-gate";
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
4637
  } | {
4482
4638
  object: "node";
4483
4639
  name?: string | undefined;
@@ -4502,14 +4658,12 @@ export declare const materializeLegacyAutoOpenings: (nodes: {
4502
4658
  fromIds: string[];
4503
4659
  } | undefined;
4504
4660
  } | undefined;
4505
- center: number;
4506
- width: number;
4507
- matchFenceStyle?: boolean | undefined;
4508
- matchFenceHeight?: boolean | undefined;
4509
- height?: number | undefined;
4510
- showPosts: boolean;
4511
- id: `fence-opening_${string}`;
4512
- type: "fence-opening";
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";
4513
4667
  } | {
4514
4668
  object: "node";
4515
4669
  name?: string | undefined;
@@ -5021,64 +5175,6 @@ export declare const materializeLegacyAutoOpenings: (nodes: {
5021
5175
  spinSpeed: number;
5022
5176
  style: "cylinder" | "globe";
5023
5177
  type: "turbine-vent";
5024
- } | {
5025
- object: "node";
5026
- name?: string | undefined;
5027
- parentId: string | null;
5028
- visible: boolean;
5029
- camera?: {
5030
- position: [number, number, number];
5031
- target: [number, number, number];
5032
- mode: "orthographic" | "perspective";
5033
- fov?: number | undefined;
5034
- zoom?: number | undefined;
5035
- } | undefined;
5036
- metadata: Record<string, unknown>;
5037
- provenance?: {
5038
- refs: {
5039
- ns?: string | undefined;
5040
- id: string;
5041
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
5042
- }[];
5043
- lineage?: {
5044
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
5045
- fromIds: string[];
5046
- } | undefined;
5047
- } | undefined;
5048
- id: `cupola_${string}`;
5049
- material?: {
5050
- id?: string | undefined;
5051
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
5052
- properties?: {
5053
- color: string;
5054
- roughness: number;
5055
- metalness: number;
5056
- opacity: number;
5057
- transparent: boolean;
5058
- side: "back" | "double" | "front";
5059
- } | undefined;
5060
- texture?: {
5061
- url: string;
5062
- repeat?: [number, number] | undefined;
5063
- scale?: number | undefined;
5064
- offset?: [number, number] | undefined;
5065
- normalMap?: string | undefined;
5066
- normalScale?: number | undefined;
5067
- bumpMap?: string | undefined;
5068
- bumpScale?: number | undefined;
5069
- } | undefined;
5070
- } | undefined;
5071
- slots?: Record<string, string> | undefined;
5072
- materialPreset: string;
5073
- roofSegmentId?: string | undefined;
5074
- position: [number, number, number];
5075
- rotation: number;
5076
- width: number;
5077
- depth: number;
5078
- height: number;
5079
- roofStyle: "dome" | "pyramid";
5080
- finial: boolean;
5081
- type: "cupola";
5082
5178
  } | {
5083
5179
  object: "node";
5084
5180
  name?: string | undefined;
@@ -5407,101 +5503,6 @@ export declare const materializeLegacyAutoOpenings: (nodes: {
5407
5503
  frameDepth: number;
5408
5504
  surfaceNormal?: [number, number, number] | undefined;
5409
5505
  type: "solar-panel";
5410
- } | {
5411
- object: "node";
5412
- name?: string | undefined;
5413
- parentId: string | null;
5414
- visible: boolean;
5415
- camera?: {
5416
- position: [number, number, number];
5417
- target: [number, number, number];
5418
- mode: "orthographic" | "perspective";
5419
- fov?: number | undefined;
5420
- zoom?: number | undefined;
5421
- } | undefined;
5422
- metadata: Record<string, unknown>;
5423
- provenance?: {
5424
- refs: {
5425
- ns?: string | undefined;
5426
- id: string;
5427
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
5428
- }[];
5429
- lineage?: {
5430
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
5431
- fromIds: string[];
5432
- } | undefined;
5433
- } | undefined;
5434
- id: `skylight_${string}`;
5435
- material?: {
5436
- id?: string | undefined;
5437
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
5438
- properties?: {
5439
- color: string;
5440
- roughness: number;
5441
- metalness: number;
5442
- opacity: number;
5443
- transparent: boolean;
5444
- side: "back" | "double" | "front";
5445
- } | undefined;
5446
- texture?: {
5447
- url: string;
5448
- repeat?: [number, number] | undefined;
5449
- scale?: number | undefined;
5450
- offset?: [number, number] | undefined;
5451
- normalMap?: string | undefined;
5452
- normalScale?: number | undefined;
5453
- bumpMap?: string | undefined;
5454
- bumpScale?: number | undefined;
5455
- } | undefined;
5456
- } | undefined;
5457
- materialPreset?: string | undefined;
5458
- glassMaterial?: {
5459
- id?: string | undefined;
5460
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
5461
- properties?: {
5462
- color: string;
5463
- roughness: number;
5464
- metalness: number;
5465
- opacity: number;
5466
- transparent: boolean;
5467
- side: "back" | "double" | "front";
5468
- } | undefined;
5469
- texture?: {
5470
- url: string;
5471
- repeat?: [number, number] | undefined;
5472
- scale?: number | undefined;
5473
- offset?: [number, number] | undefined;
5474
- normalMap?: string | undefined;
5475
- normalScale?: number | undefined;
5476
- bumpMap?: string | undefined;
5477
- bumpScale?: number | undefined;
5478
- } | undefined;
5479
- } | undefined;
5480
- glassMaterialPreset?: string | undefined;
5481
- roofSegmentId?: string | undefined;
5482
- position: [number, number, number];
5483
- rotation: number;
5484
- width: number;
5485
- height: number;
5486
- frameThickness: number;
5487
- frameDepth: number;
5488
- skylightType: "flat" | "lantern" | "opening" | "sliding" | "walk-on";
5489
- glassThickness: number;
5490
- lanternHeight: number;
5491
- lanternTopScale: number;
5492
- openingAngle: number;
5493
- openingSide: "bottom" | "left" | "right" | "top";
5494
- operationState: number;
5495
- motorHousing: boolean;
5496
- slideFraction: number;
5497
- slideDirection: "x" | "z";
5498
- trackWidth: number;
5499
- motorHousingSize: number;
5500
- curb: boolean;
5501
- curbHeight: number;
5502
- cutoutOffset: number;
5503
- surfaceNormal?: [number, number, number] | undefined;
5504
- type: "skylight";
5505
5506
  } | {
5506
5507
  object: "node";
5507
5508
  name?: string | undefined;