@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
@@ -30,54 +30,276 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
30
30
  fromIds: string[];
31
31
  } | undefined;
32
32
  } | undefined;
33
- id: `elevator_${string}`;
34
- material?: {
35
- id?: string | undefined;
36
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
37
- properties?: {
38
- color: string;
39
- roughness: number;
40
- metalness: number;
41
- opacity: number;
42
- transparent: boolean;
43
- side: "back" | "double" | "front";
33
+ id: `beam_${string}`;
34
+ start: [number, number];
35
+ end: [number, number];
36
+ width: number;
37
+ depth: number;
38
+ size?: string | undefined;
39
+ plies: number;
40
+ material: "glulam" | "lvl" | "pressure-treated" | "sawn" | "steel";
41
+ placement: "dropped" | "flush";
42
+ topElevation?: number | undefined;
43
+ supportSlabId?: string | undefined;
44
+ type: "beam";
45
+ } | {
46
+ object: "node";
47
+ name?: string | undefined;
48
+ parentId: string | null;
49
+ visible: boolean;
50
+ camera?: {
51
+ position: [number, number, number];
52
+ target: [number, number, number];
53
+ mode: "orthographic" | "perspective";
54
+ fov?: number | undefined;
55
+ zoom?: number | undefined;
56
+ } | undefined;
57
+ metadata: Record<string, unknown>;
58
+ provenance?: {
59
+ refs: {
60
+ ns?: string | undefined;
61
+ id: string;
62
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
63
+ }[];
64
+ lineage?: {
65
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
66
+ fromIds: string[];
44
67
  } | undefined;
45
- texture?: {
46
- url: string;
47
- repeat?: [number, number] | undefined;
48
- scale?: number | undefined;
49
- offset?: [number, number] | undefined;
50
- normalMap?: string | undefined;
51
- normalScale?: number | undefined;
52
- bumpMap?: string | undefined;
53
- bumpScale?: number | undefined;
68
+ } | undefined;
69
+ id: `measurement_${string}`;
70
+ measurement: {
71
+ kind: "volume";
72
+ base: ({
73
+ kind: "feature";
74
+ reference: {
75
+ nodeId: string;
76
+ featureId: string;
77
+ parameters?: Record<string, string | number | boolean> | undefined;
78
+ };
79
+ fallback: [number, number, number];
80
+ } | [number, number, number])[];
81
+ extrusion: [number, number, number];
82
+ } | {
83
+ kind: "distance";
84
+ points: [{
85
+ kind: "feature";
86
+ reference: {
87
+ nodeId: string;
88
+ featureId: string;
89
+ parameters?: Record<string, string | number | boolean> | undefined;
90
+ };
91
+ fallback: [number, number, number];
92
+ } | [number, number, number], {
93
+ kind: "feature";
94
+ reference: {
95
+ nodeId: string;
96
+ featureId: string;
97
+ parameters?: Record<string, string | number | boolean> | undefined;
98
+ };
99
+ fallback: [number, number, number];
100
+ } | [number, number, number]];
101
+ } | {
102
+ kind: "angle";
103
+ points: [{
104
+ kind: "feature";
105
+ reference: {
106
+ nodeId: string;
107
+ featureId: string;
108
+ parameters?: Record<string, string | number | boolean> | undefined;
109
+ };
110
+ fallback: [number, number, number];
111
+ } | [number, number, number], {
112
+ kind: "feature";
113
+ reference: {
114
+ nodeId: string;
115
+ featureId: string;
116
+ parameters?: Record<string, string | number | boolean> | undefined;
117
+ };
118
+ fallback: [number, number, number];
119
+ } | [number, number, number], {
120
+ kind: "feature";
121
+ reference: {
122
+ nodeId: string;
123
+ featureId: string;
124
+ parameters?: Record<string, string | number | boolean> | undefined;
125
+ };
126
+ fallback: [number, number, number];
127
+ } | [number, number, number]];
128
+ } | {
129
+ kind: "area";
130
+ base: ({
131
+ kind: "feature";
132
+ reference: {
133
+ nodeId: string;
134
+ featureId: string;
135
+ parameters?: Record<string, string | number | boolean> | undefined;
136
+ };
137
+ fallback: [number, number, number];
138
+ } | [number, number, number])[];
139
+ } | {
140
+ kind: "perimeter";
141
+ base: ({
142
+ kind: "feature";
143
+ reference: {
144
+ nodeId: string;
145
+ featureId: string;
146
+ parameters?: Record<string, string | number | boolean> | undefined;
147
+ };
148
+ fallback: [number, number, number];
149
+ } | [number, number, number])[];
150
+ };
151
+ type: "measurement";
152
+ } | {
153
+ object: "node";
154
+ name?: string | undefined;
155
+ parentId: string | null;
156
+ visible: boolean;
157
+ camera?: {
158
+ position: [number, number, number];
159
+ target: [number, number, number];
160
+ mode: "orthographic" | "perspective";
161
+ fov?: number | undefined;
162
+ zoom?: number | undefined;
163
+ } | undefined;
164
+ metadata: Record<string, unknown>;
165
+ provenance?: {
166
+ refs: {
167
+ ns?: string | undefined;
168
+ id: string;
169
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
170
+ }[];
171
+ lineage?: {
172
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
173
+ fromIds: string[];
54
174
  } | undefined;
55
175
  } | undefined;
56
- materialPreset?: string | undefined;
176
+ id: `duct-segment_${string}`;
177
+ path: [number, number, number][];
178
+ autoHangers?: boolean | undefined;
179
+ hangerOverrides?: Record<string, {
180
+ fraction?: number | undefined;
181
+ skipped?: boolean | undefined;
182
+ hostId?: string | undefined;
183
+ }> | undefined;
184
+ hangerStyle?: "double" | "single" | undefined;
185
+ hangerSpacing?: number | undefined;
186
+ hangerMaxReach?: number | undefined;
187
+ wallAttachment?: {
188
+ wallId: `wall_${string}`;
189
+ side: "back" | "front";
190
+ startUV: [number, number];
191
+ endUV: [number, number];
192
+ offset: number;
193
+ } | undefined;
194
+ shape: "oval" | "rect" | "round";
195
+ diameter: number;
196
+ width: number;
197
+ height: number;
198
+ roll: number;
199
+ ductMaterial: "duct-board" | "flex" | "sheet-metal" | "spiral";
200
+ seamDetail: boolean;
201
+ insulated: boolean;
202
+ insulationR: number;
203
+ system: "return" | "supply";
57
204
  slots?: Record<string, string> | undefined;
205
+ type: "duct-segment";
206
+ } | {
207
+ object: "node";
208
+ name?: string | undefined;
209
+ parentId: string | null;
210
+ visible: boolean;
211
+ camera?: {
212
+ position: [number, number, number];
213
+ target: [number, number, number];
214
+ mode: "orthographic" | "perspective";
215
+ fov?: number | undefined;
216
+ zoom?: number | undefined;
217
+ } | undefined;
218
+ metadata: Record<string, unknown>;
219
+ provenance?: {
220
+ refs: {
221
+ ns?: string | undefined;
222
+ id: string;
223
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
224
+ }[];
225
+ lineage?: {
226
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
227
+ fromIds: string[];
228
+ } | undefined;
229
+ } | undefined;
230
+ id: `floor-opening_${string}`;
231
+ polygon: [number, number][];
232
+ hostZoneId?: string | undefined;
233
+ legacyPlateCuts?: Record<string, [number, number][][]> | undefined;
234
+ legacyCeilingCuts?: Record<string, [number, number][][]> | undefined;
235
+ source: string;
236
+ ownerId?: string | undefined;
237
+ surfaceId?: string | undefined;
238
+ drawnOn: "ceiling" | "floor";
239
+ cutsPrimary: boolean;
240
+ cutsAdjacent: boolean;
241
+ type: "floor-opening";
242
+ } | {
243
+ object: "node";
244
+ name?: string | undefined;
245
+ parentId: string | null;
246
+ visible: boolean;
247
+ camera?: {
248
+ position: [number, number, number];
249
+ target: [number, number, number];
250
+ mode: "orthographic" | "perspective";
251
+ fov?: number | undefined;
252
+ zoom?: number | undefined;
253
+ } | undefined;
254
+ metadata: Record<string, unknown>;
255
+ provenance?: {
256
+ refs: {
257
+ ns?: string | undefined;
258
+ id: string;
259
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
260
+ }[];
261
+ lineage?: {
262
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
263
+ fromIds: string[];
264
+ } | undefined;
265
+ } | undefined;
266
+ id: `lineset_${string}`;
267
+ path: [number, number, number][];
268
+ suctionDiameter: number;
269
+ liquidDiameter: number;
270
+ insulated: boolean;
271
+ type: "lineset";
272
+ } | {
273
+ object: "node";
274
+ name?: string | undefined;
275
+ parentId: string | null;
276
+ visible: boolean;
277
+ camera?: {
278
+ position: [number, number, number];
279
+ target: [number, number, number];
280
+ mode: "orthographic" | "perspective";
281
+ fov?: number | undefined;
282
+ zoom?: number | undefined;
283
+ } | undefined;
284
+ metadata: Record<string, unknown>;
285
+ provenance?: {
286
+ refs: {
287
+ ns?: string | undefined;
288
+ id: string;
289
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
290
+ }[];
291
+ lineage?: {
292
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
293
+ fromIds: string[];
294
+ } | undefined;
295
+ } | undefined;
296
+ id: `pipe-trap_${string}`;
58
297
  position: [number, number, number];
59
298
  rotation: number;
60
- width: number;
61
- depth: number;
62
- shaftWidth?: number | undefined;
63
- shaftDepth?: number | undefined;
64
- shaftWallThickness: number;
65
- shaftStyle: "glass" | "solid";
66
- cabHeight: number;
67
- doorWidth: number;
68
- doorHeight: number;
69
- doorStyle: "center-opening" | "single-left" | "single-right";
70
- doorPanelStyle: "glass-frame" | "segmented-panel" | "solid-panel";
71
- fromLevelId: string | null;
72
- toLevelId: string | null;
73
- servedLevelIds?: string[] | undefined;
74
- disabledLevelIds: string[];
75
- serviceOnlyLevelIds: string[];
76
- defaultLevelId: string | null;
77
- speed: number;
78
- doorDurationMs: number;
79
- dwellMs: number;
80
- type: "elevator";
299
+ diameter: number;
300
+ pipeMaterial: "abs" | "cast-iron" | "pvc";
301
+ armLengthM: number;
302
+ type: "pipe-trap";
81
303
  } | {
82
304
  object: "node";
83
305
  name?: string | undefined;
@@ -102,22 +324,120 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
102
324
  fromIds: string[];
103
325
  } | undefined;
104
326
  } | undefined;
105
- type: "item";
106
- id: `item_${string}`;
327
+ id: `scan_${string}`;
328
+ url: string | null;
329
+ captureSession: {
330
+ sessionId: string;
331
+ schemaVersion?: number | undefined;
332
+ revisionId?: string | undefined;
333
+ manifestUrl?: string | undefined;
334
+ } | null;
335
+ layers: Record<string, boolean>;
107
336
  position: [number, number, number];
108
337
  rotation: [number, number, number];
109
- scale: [number, number, number];
110
- side?: "back" | "front" | undefined;
111
- children: string[];
112
- wallId?: string | undefined;
113
- wallT?: number | undefined;
114
- roofSegmentId?: string | undefined;
115
- roofFace?: "back" | "front" | "left" | "right" | undefined;
116
- blockFaceId?: string | undefined;
117
- supportSlabId?: string | undefined;
118
- collectionIds?: `collection_${string}`[] | undefined;
338
+ scale: number;
339
+ opacity: number;
340
+ type: "scan";
341
+ } | {
342
+ object: "node";
343
+ name?: string | undefined;
344
+ parentId: string | null;
345
+ visible: boolean;
346
+ camera?: {
347
+ position: [number, number, number];
348
+ target: [number, number, number];
349
+ mode: "orthographic" | "perspective";
350
+ fov?: number | undefined;
351
+ zoom?: number | undefined;
352
+ } | undefined;
353
+ metadata: Record<string, unknown>;
354
+ provenance?: {
355
+ refs: {
356
+ ns?: string | undefined;
357
+ id: string;
358
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
359
+ }[];
360
+ lineage?: {
361
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
362
+ fromIds: string[];
363
+ } | undefined;
364
+ } | undefined;
365
+ id: `slab_${string}`;
366
+ material?: {
367
+ id?: string | undefined;
368
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
369
+ properties?: {
370
+ color: string;
371
+ roughness: number;
372
+ metalness: number;
373
+ opacity: number;
374
+ transparent: boolean;
375
+ side: "back" | "double" | "front";
376
+ } | undefined;
377
+ texture?: {
378
+ url: string;
379
+ repeat?: [number, number] | undefined;
380
+ scale?: number | undefined;
381
+ offset?: [number, number] | undefined;
382
+ normalMap?: string | undefined;
383
+ normalScale?: number | undefined;
384
+ bumpMap?: string | undefined;
385
+ bumpScale?: number | undefined;
386
+ } | undefined;
387
+ } | undefined;
388
+ materialPreset?: string | undefined;
119
389
  slots?: Record<string, string> | undefined;
120
- source?: {
390
+ polygon: [number, number][];
391
+ holes: [number, number][][];
392
+ holeMetadata: {
393
+ source: "elevator" | "floor-opening" | "manual" | "room" | "stair";
394
+ openingId?: string | undefined;
395
+ stairId?: string | undefined;
396
+ elevatorId?: string | undefined;
397
+ }[];
398
+ elevation: number;
399
+ floorHeight?: number | undefined;
400
+ referenceFloorElevation?: number | undefined;
401
+ foundation?: {
402
+ type: "none" | "solid";
403
+ material?: string | {
404
+ id?: string | undefined;
405
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
406
+ properties?: {
407
+ color: string;
408
+ roughness: number;
409
+ metalness: number;
410
+ opacity: number;
411
+ transparent: boolean;
412
+ side: "back" | "double" | "front";
413
+ } | undefined;
414
+ texture?: {
415
+ url: string;
416
+ repeat?: [number, number] | undefined;
417
+ scale?: number | undefined;
418
+ offset?: [number, number] | undefined;
419
+ normalMap?: string | undefined;
420
+ normalScale?: number | undefined;
421
+ bumpMap?: string | undefined;
422
+ bumpScale?: number | undefined;
423
+ } | undefined;
424
+ } | undefined;
425
+ } | undefined;
426
+ thickness: number;
427
+ recessed: boolean;
428
+ recessedRimElevation?: number | undefined;
429
+ fillToTerrain?: boolean | undefined;
430
+ boundary?: "auto" | undefined;
431
+ support?: "open" | undefined;
432
+ plateRole?: "base" | "platform" | "sunken" | undefined;
433
+ railing?: {
434
+ start: [number, number];
435
+ end: [number, number];
436
+ }[] | undefined;
437
+ zoneIds?: string[] | undefined;
438
+ associatedZoneIds?: string[] | undefined;
439
+ autoFromWalls: boolean;
440
+ surfaceScript?: {
121
441
  kind: "script";
122
442
  meta?: {
123
443
  description?: string | undefined;
@@ -230,77 +550,69 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
230
550
  thumbnail: string;
231
551
  floorPlan: string;
232
552
  } | undefined;
233
- } | undefined;
234
- asset: {
235
- id: string;
236
- category: string;
237
- name: string;
238
- thumbnail: string;
239
- floorPlanUrl?: string | undefined;
240
- source: "community" | "library" | "mine";
241
- isDraft?: boolean | undefined;
242
- src: string;
243
- dimensions: [number, number, number];
244
- attachTo?: "ceiling" | "wall" | "wall-side" | undefined;
245
- recessed?: boolean | undefined;
246
- tags?: string[] | undefined;
247
- functionTags?: string[] | undefined;
248
- offset: [number, number, number];
249
- rotation: [number, number, number];
250
- scale: [number, number, number];
251
- surface?: {
252
- height: number;
253
- } | undefined;
254
- interactive?: {
255
- controls: ({
256
- kind: "toggle";
257
- label?: string | undefined;
258
- default?: boolean | undefined;
259
- } | {
260
- kind: "slider";
261
- label: string;
262
- min: number;
263
- max: number;
264
- step: number;
265
- unit?: string | undefined;
266
- displayMode: "dial" | "slider" | "stepper";
267
- default?: number | undefined;
268
- } | {
269
- kind: "temperature";
270
- label: string;
271
- min: number;
272
- max: number;
273
- unit: "C" | "F";
274
- default?: number | undefined;
275
- })[];
276
- effects: ({
277
- kind: "animation";
278
- mode?: "ambient" | "open-close" | undefined;
279
- control?: number | undefined;
280
- clips: {
281
- on?: string | undefined;
282
- off?: string | undefined;
283
- loop?: string | undefined;
284
- };
285
- } | {
286
- kind: "light";
287
- color: string;
288
- intensityRange: [number, number];
289
- distance?: number | undefined;
290
- offset: [number, number, number];
291
- spot?: {
292
- direction: [number, number, number];
293
- angle: number;
294
- softness: number;
295
- } | undefined;
296
- shadows?: boolean | undefined;
297
- glow?: {
298
- size: number;
299
- strength: number;
300
- } | undefined;
301
- })[];
553
+ inputs: string;
554
+ } | undefined;
555
+ type: "slab";
556
+ } | {
557
+ object: "node";
558
+ name?: string | undefined;
559
+ parentId: string | null;
560
+ visible: boolean;
561
+ camera?: {
562
+ position: [number, number, number];
563
+ target: [number, number, number];
564
+ mode: "orthographic" | "perspective";
565
+ fov?: number | undefined;
566
+ zoom?: number | undefined;
567
+ } | undefined;
568
+ metadata: Record<string, unknown>;
569
+ provenance?: {
570
+ refs: {
571
+ ns?: string | undefined;
572
+ id: string;
573
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
574
+ }[];
575
+ lineage?: {
576
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
577
+ fromIds: string[];
302
578
  } | undefined;
303
- };
579
+ } | undefined;
580
+ id: `structural-grid_${string}`;
581
+ start: [number, number];
582
+ end: [number, number];
583
+ label: string;
584
+ showStartBubble: boolean;
585
+ showEndBubble: boolean;
586
+ type: "structural-grid";
587
+ } | {
588
+ object: "node";
589
+ parentId: string | null;
590
+ visible: boolean;
591
+ camera?: {
592
+ position: [number, number, number];
593
+ target: [number, number, number];
594
+ mode: "orthographic" | "perspective";
595
+ fov?: number | undefined;
596
+ zoom?: number | undefined;
597
+ } | undefined;
598
+ provenance?: {
599
+ refs: {
600
+ ns?: string | undefined;
601
+ id: string;
602
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
603
+ }[];
604
+ lineage?: {
605
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
606
+ fromIds: string[];
607
+ } | undefined;
608
+ } | undefined;
609
+ id: `unit_${string}`;
610
+ name: string;
611
+ kind: "apartment" | "commercial" | "common" | "hotel-room";
612
+ members: `zone_${string}`[];
613
+ color: string;
614
+ metadata: Record<string, unknown>;
615
+ type: "unit";
304
616
  } | {
305
617
  object: "node";
306
618
  name?: string | undefined;
@@ -325,8 +637,7 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
325
637
  fromIds: string[];
326
638
  } | undefined;
327
639
  } | undefined;
328
- id: `ceiling_${string}`;
329
- children: (`item_${string}` | `procedural-item_${string}`)[];
640
+ id: `cupola_${string}`;
330
641
  material?: {
331
642
  id?: string | undefined;
332
643
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
@@ -349,50 +660,94 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
349
660
  bumpScale?: number | undefined;
350
661
  } | undefined;
351
662
  } | undefined;
352
- materialPreset?: string | undefined;
353
663
  slots?: Record<string, string> | undefined;
354
- polygon: [number, number][];
355
- holes: [number, number][][];
356
- holeMetadata: {
357
- source: "elevator" | "floor-opening" | "manual" | "room" | "stair";
358
- openingId?: string | undefined;
359
- stairId?: string | undefined;
360
- elevatorId?: string | undefined;
361
- }[];
362
- openingIds?: string[] | undefined;
363
- height?: number | undefined;
364
- buildUp?: {
365
- presetId?: string | undefined;
366
- finish?: {
367
- kind: "drywall" | "plaster" | "wood-plank";
368
- thickness: number;
369
- name?: string | undefined;
370
- } | undefined;
371
- framing?: {
372
- system: "joists" | "truss-chords";
373
- size: "2x10" | "2x12" | "2x4" | "2x6" | "2x8";
374
- spacing: number;
375
- } | undefined;
376
- decking?: {
377
- kind: "osb" | "plywood";
378
- thickness: number;
379
- name?: string | undefined;
664
+ materialPreset: string;
665
+ roofSegmentId?: string | undefined;
666
+ position: [number, number, number];
667
+ rotation: number;
668
+ width: number;
669
+ depth: number;
670
+ height: number;
671
+ roofStyle: "dome" | "pyramid";
672
+ finial: boolean;
673
+ type: "cupola";
674
+ } | {
675
+ object: "node";
676
+ name?: string | undefined;
677
+ parentId: string | null;
678
+ visible: boolean;
679
+ camera?: {
680
+ position: [number, number, number];
681
+ target: [number, number, number];
682
+ mode: "orthographic" | "perspective";
683
+ fov?: number | undefined;
684
+ zoom?: number | undefined;
685
+ } | undefined;
686
+ metadata: Record<string, unknown>;
687
+ provenance?: {
688
+ refs: {
689
+ ns?: string | undefined;
690
+ id: string;
691
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
692
+ }[];
693
+ lineage?: {
694
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
695
+ fromIds: string[];
380
696
  } | undefined;
381
- insulation?: {
382
- kind: "batt" | "blown" | "rigid";
383
- thickness: number;
384
- name?: string | undefined;
697
+ } | undefined;
698
+ matchFenceStyle?: boolean | undefined;
699
+ matchFenceHeight?: boolean | undefined;
700
+ leafType?: "double" | "single" | undefined;
701
+ style?: "guard" | "horizontal" | "match" | "picket" | "privacy" | "rail" | "slat" | undefined;
702
+ height?: number | undefined;
703
+ clearance?: number | undefined;
704
+ thickness?: number | undefined;
705
+ frameWidth?: number | undefined;
706
+ spacing?: number | undefined;
707
+ boardWidth?: number | undefined;
708
+ hinge?: "left" | "right" | undefined;
709
+ swing?: "inward" | "outward" | undefined;
710
+ openAngle?: number | undefined;
711
+ leafSplit?: number | undefined;
712
+ brace?: "cross" | "diagonal" | "none" | undefined;
713
+ showHardware?: boolean | undefined;
714
+ showPosts?: boolean | undefined;
715
+ id: `fence-gate_${string}`;
716
+ center: number;
717
+ width: number;
718
+ type: "fence-gate";
719
+ } | {
720
+ object: "node";
721
+ name?: string | undefined;
722
+ parentId: string | null;
723
+ visible: boolean;
724
+ camera?: {
725
+ position: [number, number, number];
726
+ target: [number, number, number];
727
+ mode: "orthographic" | "perspective";
728
+ fov?: number | undefined;
729
+ zoom?: number | undefined;
730
+ } | undefined;
731
+ metadata: Record<string, unknown>;
732
+ provenance?: {
733
+ refs: {
734
+ ns?: string | undefined;
735
+ id: string;
736
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
737
+ }[];
738
+ lineage?: {
739
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
740
+ fromIds: string[];
385
741
  } | undefined;
386
742
  } | undefined;
387
- regions?: {
388
- id: string;
389
- polygon: [number, number][];
390
- finish: string | Record<string, unknown>;
391
- }[] | undefined;
392
- boundary?: "auto" | undefined;
393
- zoneId?: string | undefined;
394
- autoFromWalls: boolean;
395
- type: "ceiling";
743
+ center: number;
744
+ width: number;
745
+ matchFenceStyle?: boolean | undefined;
746
+ matchFenceHeight?: boolean | undefined;
747
+ height?: number | undefined;
748
+ showPosts: boolean;
749
+ id: `fence-opening_${string}`;
750
+ type: "fence-opening";
396
751
  } | {
397
752
  object: "node";
398
753
  name?: string | undefined;
@@ -417,42 +772,77 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
417
772
  fromIds: string[];
418
773
  } | undefined;
419
774
  } | undefined;
420
- id: `construction-dimension_${string}`;
421
- anchors: ({
422
- kind: "feature";
423
- reference: {
424
- nodeId: string;
425
- featureId: string;
426
- parameters?: Record<string, string | number | boolean> | undefined;
427
- };
428
- fallback: [number, number, number];
429
- } | [number, number, number])[];
430
- baseline: {
431
- origin: [number, number];
432
- direction: [number, number];
433
- };
434
- chainMode: "continuous" | "point-to-point";
435
- mode: "angular" | "arc-length" | "center-mark" | "chord" | "coordinate" | "diameter" | "linear" | "radius";
436
- featureCount: number;
437
- showCenterMark: boolean;
438
- prefix: string;
439
- suffix: string;
440
- textOverride: string | null;
441
- datumPolicy: "centerline" | "finish-face" | "structural-face" | "wall-face";
442
- terminator: "architectural-tick" | "dot" | "filled-arrow" | "open-arrow";
443
- textPosition: "above" | "centered";
444
- imperialPrecision: "1" | "1/16" | "1/2" | "1/4" | "1/8";
445
- metricNotation: "meters" | "millimeters";
446
- extensionStartGap: number;
447
- extensionOvershoot: number;
448
- drawingType: "floor-plan" | "foundation-plan" | "reflected-ceiling-plan" | "roof-plan" | "site-plan";
449
- drawingOverrides: {
450
- drawingType: "floor-plan" | "foundation-plan" | "reflected-ceiling-plan" | "roof-plan" | "site-plan";
451
- presentation: "controlled" | "omit" | "shown";
452
- suppressedSegmentIndexes: number[];
453
- }[];
454
- controllingDimensionId: `construction-dimension_${string}` | null;
455
- type: "construction-dimension";
775
+ id: `skylight_${string}`;
776
+ material?: {
777
+ id?: string | undefined;
778
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
779
+ properties?: {
780
+ color: string;
781
+ roughness: number;
782
+ metalness: number;
783
+ opacity: number;
784
+ transparent: boolean;
785
+ side: "back" | "double" | "front";
786
+ } | undefined;
787
+ texture?: {
788
+ url: string;
789
+ repeat?: [number, number] | undefined;
790
+ scale?: number | undefined;
791
+ offset?: [number, number] | undefined;
792
+ normalMap?: string | undefined;
793
+ normalScale?: number | undefined;
794
+ bumpMap?: string | undefined;
795
+ bumpScale?: number | undefined;
796
+ } | undefined;
797
+ } | undefined;
798
+ materialPreset?: string | undefined;
799
+ glassMaterial?: {
800
+ id?: string | undefined;
801
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
802
+ properties?: {
803
+ color: string;
804
+ roughness: number;
805
+ metalness: number;
806
+ opacity: number;
807
+ transparent: boolean;
808
+ side: "back" | "double" | "front";
809
+ } | undefined;
810
+ texture?: {
811
+ url: string;
812
+ repeat?: [number, number] | undefined;
813
+ scale?: number | undefined;
814
+ offset?: [number, number] | undefined;
815
+ normalMap?: string | undefined;
816
+ normalScale?: number | undefined;
817
+ bumpMap?: string | undefined;
818
+ bumpScale?: number | undefined;
819
+ } | undefined;
820
+ } | undefined;
821
+ glassMaterialPreset?: string | undefined;
822
+ roofSegmentId?: string | undefined;
823
+ position: [number, number, number];
824
+ rotation: number;
825
+ width: number;
826
+ height: number;
827
+ frameThickness: number;
828
+ frameDepth: number;
829
+ skylightType: "flat" | "lantern" | "opening" | "sliding" | "walk-on";
830
+ glassThickness: number;
831
+ lanternHeight: number;
832
+ lanternTopScale: number;
833
+ openingAngle: number;
834
+ openingSide: "bottom" | "left" | "right" | "top";
835
+ operationState: number;
836
+ motorHousing: boolean;
837
+ slideFraction: number;
838
+ slideDirection: "x" | "z";
839
+ trackWidth: number;
840
+ motorHousingSize: number;
841
+ curb: boolean;
842
+ curbHeight: number;
843
+ cutoutOffset: number;
844
+ surfaceNormal?: [number, number, number] | undefined;
845
+ type: "skylight";
456
846
  } | {
457
847
  object: "node";
458
848
  name?: string | undefined;
@@ -669,6 +1059,229 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
669
1059
  }[] | undefined;
670
1060
  children: string[];
671
1061
  type: "site";
1062
+ } | {
1063
+ object: "node";
1064
+ name?: string | undefined;
1065
+ parentId: string | null;
1066
+ visible: boolean;
1067
+ camera?: {
1068
+ position: [number, number, number];
1069
+ target: [number, number, number];
1070
+ mode: "orthographic" | "perspective";
1071
+ fov?: number | undefined;
1072
+ zoom?: number | undefined;
1073
+ } | undefined;
1074
+ metadata: Record<string, unknown>;
1075
+ provenance?: {
1076
+ refs: {
1077
+ ns?: string | undefined;
1078
+ id: string;
1079
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
1080
+ }[];
1081
+ lineage?: {
1082
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
1083
+ fromIds: string[];
1084
+ } | undefined;
1085
+ } | undefined;
1086
+ type: "item";
1087
+ id: `item_${string}`;
1088
+ position: [number, number, number];
1089
+ rotation: [number, number, number];
1090
+ scale: [number, number, number];
1091
+ side?: "back" | "front" | undefined;
1092
+ children: string[];
1093
+ wallId?: string | undefined;
1094
+ wallT?: number | undefined;
1095
+ roofSegmentId?: string | undefined;
1096
+ roofFace?: "back" | "front" | "left" | "right" | undefined;
1097
+ blockFaceId?: string | undefined;
1098
+ supportSlabId?: string | undefined;
1099
+ collectionIds?: `collection_${string}`[] | undefined;
1100
+ slots?: Record<string, string> | undefined;
1101
+ source?: {
1102
+ kind: "script";
1103
+ meta?: {
1104
+ description?: string | undefined;
1105
+ category?: string | undefined;
1106
+ tags?: string[] | undefined;
1107
+ parent?: string | undefined;
1108
+ } | undefined;
1109
+ language: "bpy" | "three";
1110
+ script: string;
1111
+ params: Record<string, string | number | boolean>;
1112
+ artifact: string;
1113
+ manifest: {
1114
+ bounds: {
1115
+ min: [number, number, number];
1116
+ max: [number, number, number];
1117
+ };
1118
+ params: {
1119
+ id: string;
1120
+ label?: string | undefined;
1121
+ kind: "boolean" | "number" | "string";
1122
+ default: string | number | boolean;
1123
+ min?: number | undefined;
1124
+ max?: number | undefined;
1125
+ step?: number | undefined;
1126
+ unit?: string | undefined;
1127
+ options?: string[] | undefined;
1128
+ }[];
1129
+ parts: {
1130
+ id: string;
1131
+ label?: string | undefined;
1132
+ type?: string | undefined;
1133
+ bounds?: {
1134
+ min: [number, number, number];
1135
+ max: [number, number, number];
1136
+ } | undefined;
1137
+ }[];
1138
+ surfaces: {
1139
+ part?: string | undefined;
1140
+ y: number;
1141
+ polygon: [number, number][];
1142
+ }[];
1143
+ slots: {
1144
+ id: string;
1145
+ label?: string | undefined;
1146
+ color?: string | undefined;
1147
+ roughness?: number | undefined;
1148
+ metalness?: number | undefined;
1149
+ transparent?: boolean | undefined;
1150
+ emissive?: boolean | undefined;
1151
+ }[];
1152
+ anchors: {
1153
+ id: string;
1154
+ position: [number, number, number];
1155
+ normal?: [number, number, number] | undefined;
1156
+ }[];
1157
+ lights: {
1158
+ id: string;
1159
+ position: [number, number, number];
1160
+ color: string;
1161
+ intensity: number;
1162
+ distance?: number | undefined;
1163
+ spot?: {
1164
+ direction: [number, number, number];
1165
+ angle: number;
1166
+ softness: number;
1167
+ } | undefined;
1168
+ shadows?: boolean | undefined;
1169
+ glow?: {
1170
+ size: number;
1171
+ strength: number;
1172
+ } | undefined;
1173
+ }[];
1174
+ undersides: {
1175
+ part?: string | undefined;
1176
+ polygon: [number, number][];
1177
+ plane: [number, number, number, number];
1178
+ }[];
1179
+ animations: {
1180
+ name: string;
1181
+ duration: number;
1182
+ }[];
1183
+ cutters?: {
1184
+ host: "ceiling" | "mounted" | "slab" | "wall";
1185
+ polygon: number[][];
1186
+ minY: number;
1187
+ maxY: number;
1188
+ }[] | undefined;
1189
+ cutout: boolean;
1190
+ collider: boolean;
1191
+ shape?: {
1192
+ tolerance: number;
1193
+ bands: {
1194
+ y0: number;
1195
+ y1: number;
1196
+ polygons: {
1197
+ outer: [number, number][];
1198
+ holes?: [number, number][][] | undefined;
1199
+ }[];
1200
+ }[];
1201
+ } | undefined;
1202
+ triangles: number;
1203
+ coverage?: number | undefined;
1204
+ uncovered?: {
1205
+ min: [number, number];
1206
+ max: [number, number];
1207
+ }[] | undefined;
1208
+ };
1209
+ images?: {
1210
+ artifact: string;
1211
+ thumbnail: string;
1212
+ floorPlan: string;
1213
+ } | undefined;
1214
+ } | undefined;
1215
+ asset: {
1216
+ id: string;
1217
+ category: string;
1218
+ name: string;
1219
+ thumbnail: string;
1220
+ floorPlanUrl?: string | undefined;
1221
+ source: "community" | "library" | "mine";
1222
+ isDraft?: boolean | undefined;
1223
+ src: string;
1224
+ dimensions: [number, number, number];
1225
+ attachTo?: "ceiling" | "wall" | "wall-side" | undefined;
1226
+ recessed?: boolean | undefined;
1227
+ tags?: string[] | undefined;
1228
+ functionTags?: string[] | undefined;
1229
+ offset: [number, number, number];
1230
+ rotation: [number, number, number];
1231
+ scale: [number, number, number];
1232
+ surface?: {
1233
+ height: number;
1234
+ } | undefined;
1235
+ interactive?: {
1236
+ controls: ({
1237
+ kind: "toggle";
1238
+ label?: string | undefined;
1239
+ default?: boolean | undefined;
1240
+ } | {
1241
+ kind: "slider";
1242
+ label: string;
1243
+ min: number;
1244
+ max: number;
1245
+ step: number;
1246
+ unit?: string | undefined;
1247
+ displayMode: "dial" | "slider" | "stepper";
1248
+ default?: number | undefined;
1249
+ } | {
1250
+ kind: "temperature";
1251
+ label: string;
1252
+ min: number;
1253
+ max: number;
1254
+ unit: "C" | "F";
1255
+ default?: number | undefined;
1256
+ })[];
1257
+ effects: ({
1258
+ kind: "animation";
1259
+ mode?: "ambient" | "open-close" | undefined;
1260
+ control?: number | undefined;
1261
+ clips: {
1262
+ on?: string | undefined;
1263
+ off?: string | undefined;
1264
+ loop?: string | undefined;
1265
+ };
1266
+ } | {
1267
+ kind: "light";
1268
+ color: string;
1269
+ intensityRange: [number, number];
1270
+ distance?: number | undefined;
1271
+ offset: [number, number, number];
1272
+ spot?: {
1273
+ direction: [number, number, number];
1274
+ angle: number;
1275
+ softness: number;
1276
+ } | undefined;
1277
+ shadows?: boolean | undefined;
1278
+ glow?: {
1279
+ size: number;
1280
+ strength: number;
1281
+ } | undefined;
1282
+ })[];
1283
+ } | undefined;
1284
+ };
672
1285
  } | {
673
1286
  object: "node";
674
1287
  name?: string | undefined;
@@ -1865,257 +2478,42 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1865
2478
  };
1866
2479
  assembly?: {
1867
2480
  layers: {
1868
- id: string;
1869
- role: "air" | "covering" | "deck" | "fill" | "finish" | "furring" | "glazing" | "insulation" | "lining" | "membrane" | "sheathing" | "shell" | "structure" | "substrate" | "underlay";
1870
- thickness: number;
1871
- core?: true | undefined;
1872
- spacing?: number | undefined;
1873
- material?: string | undefined;
1874
- slot?: string | undefined;
1875
- returns?: boolean | undefined;
1876
- display?: "construction" | "finished" | undefined;
1877
- inset?: number | undefined;
1878
- bottom?: number | undefined;
1879
- lift?: number | undefined;
1880
- src?: string | undefined;
1881
- }[];
1882
- backing?: {
1883
- id: string;
1884
- role: "air" | "covering" | "deck" | "fill" | "finish" | "furring" | "glazing" | "insulation" | "lining" | "membrane" | "sheathing" | "shell" | "structure" | "substrate" | "underlay";
1885
- thickness: number;
1886
- core?: true | undefined;
1887
- spacing?: number | undefined;
1888
- material?: string | undefined;
1889
- slot?: string | undefined;
1890
- returns?: boolean | undefined;
1891
- display?: "construction" | "finished" | undefined;
1892
- inset?: number | undefined;
1893
- bottom?: number | undefined;
1894
- lift?: number | undefined;
1895
- src?: string | undefined;
1896
- }[] | undefined;
1897
- face?: "exterior" | "front" | undefined;
1898
- presetId?: string | undefined;
1899
- cavityInsulation?: string | undefined;
1900
- } | undefined;
1901
- slots?: Record<string, string> | undefined;
1902
- children: `rseg_${string}`[];
1903
- type: "roof";
1904
- } | {
1905
- object: "node";
1906
- name?: string | undefined;
1907
- parentId: string | null;
1908
- visible: boolean;
1909
- camera?: {
1910
- position: [number, number, number];
1911
- target: [number, number, number];
1912
- mode: "orthographic" | "perspective";
1913
- fov?: number | undefined;
1914
- zoom?: number | undefined;
1915
- } | undefined;
1916
- metadata: Record<string, unknown>;
1917
- provenance?: {
1918
- refs: {
1919
- ns?: string | undefined;
1920
- id: string;
1921
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
1922
- }[];
1923
- lineage?: {
1924
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
1925
- fromIds: string[];
1926
- } | undefined;
1927
- } | undefined;
1928
- id: `slab_${string}`;
1929
- material?: {
1930
- id?: string | undefined;
1931
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1932
- properties?: {
1933
- color: string;
1934
- roughness: number;
1935
- metalness: number;
1936
- opacity: number;
1937
- transparent: boolean;
1938
- side: "back" | "double" | "front";
1939
- } | undefined;
1940
- texture?: {
1941
- url: string;
1942
- repeat?: [number, number] | undefined;
1943
- scale?: number | undefined;
1944
- offset?: [number, number] | undefined;
1945
- normalMap?: string | undefined;
1946
- normalScale?: number | undefined;
1947
- bumpMap?: string | undefined;
1948
- bumpScale?: number | undefined;
1949
- } | undefined;
1950
- } | undefined;
1951
- materialPreset?: string | undefined;
1952
- slots?: Record<string, string> | undefined;
1953
- polygon: [number, number][];
1954
- holes: [number, number][][];
1955
- holeMetadata: {
1956
- source: "elevator" | "floor-opening" | "manual" | "room" | "stair";
1957
- openingId?: string | undefined;
1958
- stairId?: string | undefined;
1959
- elevatorId?: string | undefined;
1960
- }[];
1961
- elevation: number;
1962
- floorHeight?: number | undefined;
1963
- referenceFloorElevation?: number | undefined;
1964
- foundation?: {
1965
- type: "none" | "solid";
1966
- material?: string | {
1967
- id?: string | undefined;
1968
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1969
- properties?: {
1970
- color: string;
1971
- roughness: number;
1972
- metalness: number;
1973
- opacity: number;
1974
- transparent: boolean;
1975
- side: "back" | "double" | "front";
1976
- } | undefined;
1977
- texture?: {
1978
- url: string;
1979
- repeat?: [number, number] | undefined;
1980
- scale?: number | undefined;
1981
- offset?: [number, number] | undefined;
1982
- normalMap?: string | undefined;
1983
- normalScale?: number | undefined;
1984
- bumpMap?: string | undefined;
1985
- bumpScale?: number | undefined;
1986
- } | undefined;
1987
- } | undefined;
1988
- } | undefined;
1989
- thickness: number;
1990
- recessed: boolean;
1991
- recessedRimElevation?: number | undefined;
1992
- fillToTerrain?: boolean | undefined;
1993
- boundary?: "auto" | undefined;
1994
- support?: "open" | undefined;
1995
- plateRole?: "base" | "platform" | "sunken" | undefined;
1996
- railing?: {
1997
- start: [number, number];
1998
- end: [number, number];
1999
- }[] | undefined;
2000
- zoneIds?: string[] | undefined;
2001
- associatedZoneIds?: string[] | undefined;
2002
- autoFromWalls: boolean;
2003
- surfaceScript?: {
2004
- kind: "script";
2005
- meta?: {
2006
- description?: string | undefined;
2007
- category?: string | undefined;
2008
- tags?: string[] | undefined;
2009
- parent?: string | undefined;
2010
- } | undefined;
2011
- language: "bpy" | "three";
2012
- script: string;
2013
- params: Record<string, string | number | boolean>;
2014
- artifact: string;
2015
- manifest: {
2016
- bounds: {
2017
- min: [number, number, number];
2018
- max: [number, number, number];
2019
- };
2020
- params: {
2021
- id: string;
2022
- label?: string | undefined;
2023
- kind: "boolean" | "number" | "string";
2024
- default: string | number | boolean;
2025
- min?: number | undefined;
2026
- max?: number | undefined;
2027
- step?: number | undefined;
2028
- unit?: string | undefined;
2029
- options?: string[] | undefined;
2030
- }[];
2031
- parts: {
2032
- id: string;
2033
- label?: string | undefined;
2034
- type?: string | undefined;
2035
- bounds?: {
2036
- min: [number, number, number];
2037
- max: [number, number, number];
2038
- } | undefined;
2039
- }[];
2040
- surfaces: {
2041
- part?: string | undefined;
2042
- y: number;
2043
- polygon: [number, number][];
2044
- }[];
2045
- slots: {
2046
- id: string;
2047
- label?: string | undefined;
2048
- color?: string | undefined;
2049
- roughness?: number | undefined;
2050
- metalness?: number | undefined;
2051
- transparent?: boolean | undefined;
2052
- emissive?: boolean | undefined;
2053
- }[];
2054
- anchors: {
2055
- id: string;
2056
- position: [number, number, number];
2057
- normal?: [number, number, number] | undefined;
2058
- }[];
2059
- lights: {
2060
- id: string;
2061
- position: [number, number, number];
2062
- color: string;
2063
- intensity: number;
2064
- distance?: number | undefined;
2065
- spot?: {
2066
- direction: [number, number, number];
2067
- angle: number;
2068
- softness: number;
2069
- } | undefined;
2070
- shadows?: boolean | undefined;
2071
- glow?: {
2072
- size: number;
2073
- strength: number;
2074
- } | undefined;
2075
- }[];
2076
- undersides: {
2077
- part?: string | undefined;
2078
- polygon: [number, number][];
2079
- plane: [number, number, number, number];
2080
- }[];
2081
- animations: {
2082
- name: string;
2083
- duration: number;
2084
- }[];
2085
- cutters?: {
2086
- host: "ceiling" | "mounted" | "slab" | "wall";
2087
- polygon: number[][];
2088
- minY: number;
2089
- maxY: number;
2090
- }[] | undefined;
2091
- cutout: boolean;
2092
- collider: boolean;
2093
- shape?: {
2094
- tolerance: number;
2095
- bands: {
2096
- y0: number;
2097
- y1: number;
2098
- polygons: {
2099
- outer: [number, number][];
2100
- holes?: [number, number][][] | undefined;
2101
- }[];
2102
- }[];
2103
- } | undefined;
2104
- triangles: number;
2105
- coverage?: number | undefined;
2106
- uncovered?: {
2107
- min: [number, number];
2108
- max: [number, number];
2109
- }[] | undefined;
2110
- };
2111
- images?: {
2112
- artifact: string;
2113
- thumbnail: string;
2114
- floorPlan: string;
2115
- } | undefined;
2116
- inputs: string;
2481
+ id: string;
2482
+ role: "air" | "covering" | "deck" | "fill" | "finish" | "furring" | "glazing" | "insulation" | "lining" | "membrane" | "sheathing" | "shell" | "structure" | "substrate" | "underlay";
2483
+ thickness: number;
2484
+ core?: true | undefined;
2485
+ spacing?: number | undefined;
2486
+ material?: string | undefined;
2487
+ slot?: string | undefined;
2488
+ returns?: boolean | undefined;
2489
+ display?: "construction" | "finished" | undefined;
2490
+ inset?: number | undefined;
2491
+ bottom?: number | undefined;
2492
+ lift?: number | undefined;
2493
+ src?: string | undefined;
2494
+ }[];
2495
+ backing?: {
2496
+ id: string;
2497
+ role: "air" | "covering" | "deck" | "fill" | "finish" | "furring" | "glazing" | "insulation" | "lining" | "membrane" | "sheathing" | "shell" | "structure" | "substrate" | "underlay";
2498
+ thickness: number;
2499
+ core?: true | undefined;
2500
+ spacing?: number | undefined;
2501
+ material?: string | undefined;
2502
+ slot?: string | undefined;
2503
+ returns?: boolean | undefined;
2504
+ display?: "construction" | "finished" | undefined;
2505
+ inset?: number | undefined;
2506
+ bottom?: number | undefined;
2507
+ lift?: number | undefined;
2508
+ src?: string | undefined;
2509
+ }[] | undefined;
2510
+ face?: "exterior" | "front" | undefined;
2511
+ presetId?: string | undefined;
2512
+ cavityInsulation?: string | undefined;
2117
2513
  } | undefined;
2118
- type: "slab";
2514
+ slots?: Record<string, string> | undefined;
2515
+ children: `rseg_${string}`[];
2516
+ type: "roof";
2119
2517
  } | {
2120
2518
  object: "node";
2121
2519
  name?: string | undefined;
@@ -2454,6 +2852,7 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
2454
2852
  } | undefined;
2455
2853
  justification?: "a" | "b" | undefined;
2456
2854
  height?: number | undefined;
2855
+ endHeightOffset?: number | undefined;
2457
2856
  curveOffset?: number | undefined;
2458
2857
  supportSlabId?: string | undefined;
2459
2858
  supportOffset?: number | undefined;
@@ -2760,42 +3159,6 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
2760
3159
  start: [number, number];
2761
3160
  end: [number, number];
2762
3161
  type: "separator";
2763
- } | {
2764
- object: "node";
2765
- name?: string | undefined;
2766
- parentId: string | null;
2767
- visible: boolean;
2768
- camera?: {
2769
- position: [number, number, number];
2770
- target: [number, number, number];
2771
- mode: "orthographic" | "perspective";
2772
- fov?: number | undefined;
2773
- zoom?: number | undefined;
2774
- } | undefined;
2775
- metadata: Record<string, unknown>;
2776
- provenance?: {
2777
- refs: {
2778
- ns?: string | undefined;
2779
- id: string;
2780
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
2781
- }[];
2782
- lineage?: {
2783
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
2784
- fromIds: string[];
2785
- } | undefined;
2786
- } | undefined;
2787
- id: `floor-opening_${string}`;
2788
- polygon: [number, number][];
2789
- hostZoneId?: string | undefined;
2790
- legacyPlateCuts?: Record<string, [number, number][][]> | undefined;
2791
- legacyCeilingCuts?: Record<string, [number, number][][]> | undefined;
2792
- source: string;
2793
- ownerId?: string | undefined;
2794
- surfaceId?: string | undefined;
2795
- drawnOn: "ceiling" | "floor";
2796
- cutsPrimary: boolean;
2797
- cutsAdjacent: boolean;
2798
- type: "floor-opening";
2799
3162
  } | {
2800
3163
  object: "node";
2801
3164
  name?: string | undefined;
@@ -2914,18 +3277,42 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
2914
3277
  fromIds: string[];
2915
3278
  } | undefined;
2916
3279
  } | undefined;
2917
- id: `beam_${string}`;
2918
- start: [number, number];
2919
- end: [number, number];
2920
- width: number;
2921
- depth: number;
2922
- size?: string | undefined;
2923
- plies: number;
2924
- material: "glulam" | "lvl" | "pressure-treated" | "sawn" | "steel";
2925
- placement: "dropped" | "flush";
2926
- topElevation?: number | undefined;
2927
- supportSlabId?: string | undefined;
2928
- type: "beam";
3280
+ id: `construction-dimension_${string}`;
3281
+ anchors: ({
3282
+ kind: "feature";
3283
+ reference: {
3284
+ nodeId: string;
3285
+ featureId: string;
3286
+ parameters?: Record<string, string | number | boolean> | undefined;
3287
+ };
3288
+ fallback: [number, number, number];
3289
+ } | [number, number, number])[];
3290
+ baseline: {
3291
+ origin: [number, number];
3292
+ direction: [number, number];
3293
+ };
3294
+ chainMode: "continuous" | "point-to-point";
3295
+ mode: "angular" | "arc-length" | "center-mark" | "chord" | "coordinate" | "diameter" | "linear" | "radius";
3296
+ featureCount: number;
3297
+ showCenterMark: boolean;
3298
+ prefix: string;
3299
+ suffix: string;
3300
+ textOverride: string | null;
3301
+ datumPolicy: "centerline" | "finish-face" | "structural-face" | "wall-face";
3302
+ terminator: "architectural-tick" | "dot" | "filled-arrow" | "open-arrow";
3303
+ textPosition: "above" | "centered";
3304
+ imperialPrecision: "1" | "1/16" | "1/2" | "1/4" | "1/8";
3305
+ metricNotation: "meters" | "millimeters";
3306
+ extensionStartGap: number;
3307
+ extensionOvershoot: number;
3308
+ drawingType: "floor-plan" | "foundation-plan" | "reflected-ceiling-plan" | "roof-plan" | "site-plan";
3309
+ drawingOverrides: {
3310
+ drawingType: "floor-plan" | "foundation-plan" | "reflected-ceiling-plan" | "roof-plan" | "site-plan";
3311
+ presentation: "controlled" | "omit" | "shown";
3312
+ suppressedSegmentIndexes: number[];
3313
+ }[];
3314
+ controllingDimensionId: `construction-dimension_${string}` | null;
3315
+ type: "construction-dimension";
2929
3316
  } | {
2930
3317
  object: "node";
2931
3318
  name?: string | undefined;
@@ -2973,37 +3360,6 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
2973
3360
  slots: Record<string, string>;
2974
3361
  slotNames: Record<string, string>;
2975
3362
  type: "block";
2976
- } | {
2977
- object: "node";
2978
- name?: string | undefined;
2979
- parentId: string | null;
2980
- visible: boolean;
2981
- camera?: {
2982
- position: [number, number, number];
2983
- target: [number, number, number];
2984
- mode: "orthographic" | "perspective";
2985
- fov?: number | undefined;
2986
- zoom?: number | undefined;
2987
- } | undefined;
2988
- metadata: Record<string, unknown>;
2989
- provenance?: {
2990
- refs: {
2991
- ns?: string | undefined;
2992
- id: string;
2993
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
2994
- }[];
2995
- lineage?: {
2996
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
2997
- fromIds: string[];
2998
- } | undefined;
2999
- } | undefined;
3000
- id: `structural-grid_${string}`;
3001
- start: [number, number];
3002
- end: [number, number];
3003
- label: string;
3004
- showStartBubble: boolean;
3005
- showEndBubble: boolean;
3006
- type: "structural-grid";
3007
3363
  } | {
3008
3364
  object: "node";
3009
3365
  name?: string | undefined;
@@ -3423,33 +3779,125 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
3423
3779
  finish: string | Record<string, unknown>;
3424
3780
  }[] | undefined;
3425
3781
  } | undefined;
3426
- floorStepFinish?: string | undefined;
3427
- floorStepOverrides?: {
3428
- key: string;
3429
- step?: number | undefined;
3430
- finish: string;
3431
- }[] | undefined;
3432
- floorEdgeFinish?: string | undefined;
3433
- wallMaterial?: string | undefined;
3434
- wallOverrides?: {
3435
- wallId: string;
3436
- face: "a" | "b";
3437
- finish: string;
3782
+ floorStepFinish?: string | undefined;
3783
+ floorStepOverrides?: {
3784
+ key: string;
3785
+ step?: number | undefined;
3786
+ finish: string;
3787
+ }[] | undefined;
3788
+ floorEdgeFinish?: string | undefined;
3789
+ wallMaterial?: string | undefined;
3790
+ wallOverrides?: {
3791
+ wallId: string;
3792
+ face: "a" | "b";
3793
+ finish: string;
3794
+ }[] | undefined;
3795
+ hasFloor?: false | undefined;
3796
+ hasCeiling?: false | undefined;
3797
+ spaceRole: "generic" | "room";
3798
+ roomNumber: string;
3799
+ enclosureStatus: "auto" | "enclosed" | "open";
3800
+ floorFinish: string;
3801
+ wallFinish: string;
3802
+ ceilingFinish: string;
3803
+ ceilingHeight: number;
3804
+ occupancy: string;
3805
+ clearDimensionPolicy: "finish-faces" | "inside-faces" | "none";
3806
+ color: string;
3807
+ metadata: Record<string, unknown>;
3808
+ type: "zone";
3809
+ } | {
3810
+ object: "node";
3811
+ name?: string | undefined;
3812
+ parentId: string | null;
3813
+ visible: boolean;
3814
+ camera?: {
3815
+ position: [number, number, number];
3816
+ target: [number, number, number];
3817
+ mode: "orthographic" | "perspective";
3818
+ fov?: number | undefined;
3819
+ zoom?: number | undefined;
3820
+ } | undefined;
3821
+ metadata: Record<string, unknown>;
3822
+ provenance?: {
3823
+ refs: {
3824
+ ns?: string | undefined;
3825
+ id: string;
3826
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
3827
+ }[];
3828
+ lineage?: {
3829
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
3830
+ fromIds: string[];
3831
+ } | undefined;
3832
+ } | undefined;
3833
+ id: `ceiling_${string}`;
3834
+ children: (`item_${string}` | `procedural-item_${string}`)[];
3835
+ material?: {
3836
+ id?: string | undefined;
3837
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
3838
+ properties?: {
3839
+ color: string;
3840
+ roughness: number;
3841
+ metalness: number;
3842
+ opacity: number;
3843
+ transparent: boolean;
3844
+ side: "back" | "double" | "front";
3845
+ } | undefined;
3846
+ texture?: {
3847
+ url: string;
3848
+ repeat?: [number, number] | undefined;
3849
+ scale?: number | undefined;
3850
+ offset?: [number, number] | undefined;
3851
+ normalMap?: string | undefined;
3852
+ normalScale?: number | undefined;
3853
+ bumpMap?: string | undefined;
3854
+ bumpScale?: number | undefined;
3855
+ } | undefined;
3856
+ } | undefined;
3857
+ materialPreset?: string | undefined;
3858
+ slots?: Record<string, string> | undefined;
3859
+ polygon: [number, number][];
3860
+ holes: [number, number][][];
3861
+ holeMetadata: {
3862
+ source: "elevator" | "floor-opening" | "manual" | "room" | "stair";
3863
+ openingId?: string | undefined;
3864
+ stairId?: string | undefined;
3865
+ elevatorId?: string | undefined;
3866
+ }[];
3867
+ openingIds?: string[] | undefined;
3868
+ height?: number | undefined;
3869
+ buildUp?: {
3870
+ presetId?: string | undefined;
3871
+ finish?: {
3872
+ kind: "drywall" | "plaster" | "wood-plank";
3873
+ thickness: number;
3874
+ name?: string | undefined;
3875
+ } | undefined;
3876
+ framing?: {
3877
+ system: "joists" | "truss-chords";
3878
+ size: "2x10" | "2x12" | "2x4" | "2x6" | "2x8";
3879
+ spacing: number;
3880
+ } | undefined;
3881
+ decking?: {
3882
+ kind: "osb" | "plywood";
3883
+ thickness: number;
3884
+ name?: string | undefined;
3885
+ } | undefined;
3886
+ insulation?: {
3887
+ kind: "batt" | "blown" | "rigid";
3888
+ thickness: number;
3889
+ name?: string | undefined;
3890
+ } | undefined;
3891
+ } | undefined;
3892
+ regions?: {
3893
+ id: string;
3894
+ polygon: [number, number][];
3895
+ finish: string | Record<string, unknown>;
3438
3896
  }[] | undefined;
3439
- hasFloor?: false | undefined;
3440
- hasCeiling?: false | undefined;
3441
- spaceRole: "generic" | "room";
3442
- roomNumber: string;
3443
- enclosureStatus: "auto" | "enclosed" | "open";
3444
- floorFinish: string;
3445
- wallFinish: string;
3446
- ceilingFinish: string;
3447
- ceilingHeight: number;
3448
- occupancy: string;
3449
- clearDimensionPolicy: "finish-faces" | "inside-faces" | "none";
3450
- color: string;
3451
- metadata: Record<string, unknown>;
3452
- type: "zone";
3897
+ boundary?: "auto" | undefined;
3898
+ zoneId?: string | undefined;
3899
+ autoFromWalls: boolean;
3900
+ type: "ceiling";
3453
3901
  } | {
3454
3902
  object: "node";
3455
3903
  name?: string | undefined;
@@ -3690,223 +4138,78 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
3690
4138
  treated?: boolean | undefined;
3691
4139
  nosing?: number | undefined;
3692
4140
  } | undefined;
3693
- innerRadius: number;
3694
- sweepAngle: number;
3695
- topLandingMode: "integrated" | "none";
3696
- topLandingDepth: number;
3697
- showCenterColumn: boolean;
3698
- showStepSupports: boolean;
3699
- railingMode: "both" | "left" | "none" | "right";
3700
- railingHeight: number;
3701
- railingStyle?: "balusters" | "boards" | "cable" | "glass" | "metal" | "post-and-rail" | undefined;
3702
- railingPath?: "continuous" | "original" | undefined;
3703
- handrail?: {
3704
- mode: "both" | "left" | "none" | "right";
3705
- height: number;
3706
- diameter: number;
3707
- offset: number;
3708
- bottom?: {
3709
- extension: number;
3710
- return: "floor" | "none" | "post" | "wall";
3711
- returnLength: number;
3712
- } | undefined;
3713
- top?: {
3714
- extension: number;
3715
- return: "floor" | "none" | "post" | "wall";
3716
- returnLength: number;
3717
- } | undefined;
3718
- } | undefined;
3719
- railingTopPost?: boolean | undefined;
3720
- railingTopReach?: number | undefined;
3721
- railingPostThrough?: boolean | undefined;
3722
- children: `sseg_${string}`[];
3723
- type: "stair";
3724
- } | {
3725
- object: "node";
3726
- name?: string | undefined;
3727
- parentId: string | null;
3728
- visible: boolean;
3729
- camera?: {
3730
- position: [number, number, number];
3731
- target: [number, number, number];
3732
- mode: "orthographic" | "perspective";
3733
- fov?: number | undefined;
3734
- zoom?: number | undefined;
3735
- } | undefined;
3736
- metadata: Record<string, unknown>;
3737
- provenance?: {
3738
- refs: {
3739
- ns?: string | undefined;
3740
- id: string;
3741
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
3742
- }[];
3743
- lineage?: {
3744
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
3745
- fromIds: string[];
3746
- } | undefined;
3747
- } | undefined;
3748
- id: `scan_${string}`;
3749
- url: string | null;
3750
- captureSession: {
3751
- sessionId: string;
3752
- schemaVersion?: number | undefined;
3753
- revisionId?: string | undefined;
3754
- manifestUrl?: string | undefined;
3755
- } | null;
3756
- layers: Record<string, boolean>;
3757
- position: [number, number, number];
3758
- rotation: [number, number, number];
3759
- scale: number;
3760
- opacity: number;
3761
- type: "scan";
3762
- } | {
3763
- object: "node";
3764
- name?: string | undefined;
3765
- parentId: string | null;
3766
- visible: boolean;
3767
- camera?: {
3768
- position: [number, number, number];
3769
- target: [number, number, number];
3770
- mode: "orthographic" | "perspective";
3771
- fov?: number | undefined;
3772
- zoom?: number | undefined;
3773
- } | undefined;
3774
- metadata: Record<string, unknown>;
3775
- provenance?: {
3776
- refs: {
3777
- ns?: string | undefined;
3778
- id: string;
3779
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
3780
- }[];
3781
- lineage?: {
3782
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
3783
- fromIds: string[];
3784
- } | undefined;
3785
- } | undefined;
3786
- id: `guide_${string}`;
3787
- url: string;
3788
- position: [number, number, number];
3789
- rotation: [number, number, number];
3790
- scale: number;
3791
- opacity: number;
3792
- scaleReference: {
3793
- start: [number, number];
3794
- end: [number, number];
3795
- realLengthMeters: number;
3796
- measuredLengthUnits: number;
3797
- metersPerUnit: number;
3798
- displayLength?: number | undefined;
3799
- displayUnit?: "centimeters" | "feet" | "inches" | "meters" | undefined;
3800
- label: string;
3801
- } | null;
3802
- type: "guide";
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: `measurement_${string}`;
3828
- measurement: {
3829
- kind: "distance";
3830
- points: [{
3831
- kind: "feature";
3832
- reference: {
3833
- nodeId: string;
3834
- featureId: string;
3835
- parameters?: Record<string, string | number | boolean> | undefined;
3836
- };
3837
- fallback: [number, number, number];
3838
- } | [number, number, number], {
3839
- kind: "feature";
3840
- reference: {
3841
- nodeId: string;
3842
- featureId: string;
3843
- parameters?: Record<string, string | number | boolean> | undefined;
3844
- };
3845
- fallback: [number, number, number];
3846
- } | [number, number, number]];
3847
- } | {
3848
- kind: "angle";
3849
- points: [{
3850
- kind: "feature";
3851
- reference: {
3852
- nodeId: string;
3853
- featureId: string;
3854
- parameters?: Record<string, string | number | boolean> | undefined;
3855
- };
3856
- fallback: [number, number, number];
3857
- } | [number, number, number], {
3858
- kind: "feature";
3859
- reference: {
3860
- nodeId: string;
3861
- featureId: string;
3862
- parameters?: Record<string, string | number | boolean> | undefined;
3863
- };
3864
- fallback: [number, number, number];
3865
- } | [number, number, number], {
3866
- kind: "feature";
3867
- reference: {
3868
- nodeId: string;
3869
- featureId: string;
3870
- parameters?: Record<string, string | number | boolean> | undefined;
3871
- };
3872
- fallback: [number, number, number];
3873
- } | [number, number, number]];
3874
- } | {
3875
- kind: "area";
3876
- base: ({
3877
- kind: "feature";
3878
- reference: {
3879
- nodeId: string;
3880
- featureId: string;
3881
- parameters?: Record<string, string | number | boolean> | undefined;
3882
- };
3883
- fallback: [number, number, number];
3884
- } | [number, number, number])[];
3885
- } | {
3886
- kind: "perimeter";
3887
- base: ({
3888
- kind: "feature";
3889
- reference: {
3890
- nodeId: string;
3891
- featureId: string;
3892
- parameters?: Record<string, string | number | boolean> | undefined;
3893
- };
3894
- fallback: [number, number, number];
3895
- } | [number, number, number])[];
3896
- } | {
3897
- kind: "volume";
3898
- base: ({
3899
- kind: "feature";
3900
- reference: {
3901
- nodeId: string;
3902
- featureId: string;
3903
- parameters?: Record<string, string | number | boolean> | undefined;
3904
- };
3905
- fallback: [number, number, number];
3906
- } | [number, number, number])[];
3907
- extrusion: [number, number, number];
3908
- };
3909
- type: "measurement";
4141
+ innerRadius: number;
4142
+ sweepAngle: number;
4143
+ topLandingMode: "integrated" | "none";
4144
+ topLandingDepth: number;
4145
+ showCenterColumn: boolean;
4146
+ showStepSupports: boolean;
4147
+ railingMode: "both" | "left" | "none" | "right";
4148
+ railingHeight: number;
4149
+ railingStyle?: "balusters" | "boards" | "cable" | "glass" | "metal" | "post-and-rail" | undefined;
4150
+ railingPath?: "continuous" | "original" | undefined;
4151
+ handrail?: {
4152
+ mode: "both" | "left" | "none" | "right";
4153
+ height: number;
4154
+ diameter: number;
4155
+ offset: number;
4156
+ bottom?: {
4157
+ extension: number;
4158
+ return: "floor" | "none" | "post" | "wall";
4159
+ returnLength: number;
4160
+ } | undefined;
4161
+ top?: {
4162
+ extension: number;
4163
+ return: "floor" | "none" | "post" | "wall";
4164
+ returnLength: number;
4165
+ } | undefined;
4166
+ } | undefined;
4167
+ railingTopPost?: boolean | undefined;
4168
+ railingTopReach?: number | undefined;
4169
+ railingPostThrough?: boolean | undefined;
4170
+ children: `sseg_${string}`[];
4171
+ type: "stair";
4172
+ } | {
4173
+ object: "node";
4174
+ name?: string | undefined;
4175
+ parentId: string | null;
4176
+ visible: boolean;
4177
+ camera?: {
4178
+ position: [number, number, number];
4179
+ target: [number, number, number];
4180
+ mode: "orthographic" | "perspective";
4181
+ fov?: number | undefined;
4182
+ zoom?: number | undefined;
4183
+ } | undefined;
4184
+ metadata: Record<string, unknown>;
4185
+ provenance?: {
4186
+ refs: {
4187
+ ns?: string | undefined;
4188
+ id: string;
4189
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
4190
+ }[];
4191
+ lineage?: {
4192
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
4193
+ fromIds: string[];
4194
+ } | undefined;
4195
+ } | undefined;
4196
+ id: `guide_${string}`;
4197
+ url: string;
4198
+ position: [number, number, number];
4199
+ rotation: [number, number, number];
4200
+ scale: number;
4201
+ opacity: number;
4202
+ scaleReference: {
4203
+ start: [number, number];
4204
+ end: [number, number];
4205
+ realLengthMeters: number;
4206
+ measuredLengthUnits: number;
4207
+ metersPerUnit: number;
4208
+ displayLength?: number | undefined;
4209
+ displayUnit?: "centimeters" | "feet" | "inches" | "meters" | undefined;
4210
+ label: string;
4211
+ } | null;
4212
+ type: "guide";
3910
4213
  } | {
3911
4214
  object: "node";
3912
4215
  name?: string | undefined;
@@ -4001,60 +4304,6 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
4001
4304
  materialPreset?: string | undefined;
4002
4305
  slots?: Record<string, string> | undefined;
4003
4306
  type: "shelf";
4004
- } | {
4005
- object: "node";
4006
- name?: string | undefined;
4007
- parentId: string | null;
4008
- visible: boolean;
4009
- camera?: {
4010
- position: [number, number, number];
4011
- target: [number, number, number];
4012
- mode: "orthographic" | "perspective";
4013
- fov?: number | undefined;
4014
- zoom?: number | undefined;
4015
- } | undefined;
4016
- metadata: Record<string, unknown>;
4017
- provenance?: {
4018
- refs: {
4019
- ns?: string | undefined;
4020
- id: string;
4021
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
4022
- }[];
4023
- lineage?: {
4024
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
4025
- fromIds: string[];
4026
- } | undefined;
4027
- } | undefined;
4028
- id: `duct-segment_${string}`;
4029
- path: [number, number, number][];
4030
- autoHangers?: boolean | undefined;
4031
- hangerOverrides?: Record<string, {
4032
- fraction?: number | undefined;
4033
- skipped?: boolean | undefined;
4034
- hostId?: string | undefined;
4035
- }> | undefined;
4036
- hangerStyle?: "double" | "single" | undefined;
4037
- hangerSpacing?: number | undefined;
4038
- hangerMaxReach?: number | undefined;
4039
- wallAttachment?: {
4040
- wallId: `wall_${string}`;
4041
- side: "back" | "front";
4042
- startUV: [number, number];
4043
- endUV: [number, number];
4044
- offset: number;
4045
- } | undefined;
4046
- shape: "oval" | "rect" | "round";
4047
- diameter: number;
4048
- width: number;
4049
- height: number;
4050
- roll: number;
4051
- ductMaterial: "duct-board" | "flex" | "sheet-metal" | "spiral";
4052
- seamDetail: boolean;
4053
- insulated: boolean;
4054
- insulationR: number;
4055
- system: "return" | "supply";
4056
- slots?: Record<string, string> | undefined;
4057
- type: "duct-segment";
4058
4307
  } | {
4059
4308
  object: "node";
4060
4309
  name?: string | undefined;
@@ -4180,36 +4429,6 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
4180
4429
  returnWidth: number;
4181
4430
  returnHeight: number;
4182
4431
  type: "hvac-equipment";
4183
- } | {
4184
- object: "node";
4185
- name?: string | undefined;
4186
- parentId: string | null;
4187
- visible: boolean;
4188
- camera?: {
4189
- position: [number, number, number];
4190
- target: [number, number, number];
4191
- mode: "orthographic" | "perspective";
4192
- fov?: number | undefined;
4193
- zoom?: number | undefined;
4194
- } | undefined;
4195
- metadata: Record<string, unknown>;
4196
- provenance?: {
4197
- refs: {
4198
- ns?: string | undefined;
4199
- id: string;
4200
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
4201
- }[];
4202
- lineage?: {
4203
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
4204
- fromIds: string[];
4205
- } | undefined;
4206
- } | undefined;
4207
- id: `lineset_${string}`;
4208
- path: [number, number, number][];
4209
- suctionDiameter: number;
4210
- liquidDiameter: number;
4211
- insulated: boolean;
4212
- type: "lineset";
4213
4432
  } | {
4214
4433
  object: "node";
4215
4434
  name?: string | undefined;
@@ -4309,106 +4528,16 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
4309
4528
  } | undefined;
4310
4529
  } | undefined;
4311
4530
  id: `pipe-fitting_${string}`;
4312
- position: [number, number, number];
4313
- rotation: [number, number, number];
4314
- fittingType: "cleanout" | "coupling" | "cross" | "elbow" | "end-cap" | "reducer" | "sanitary-tee" | "wye";
4315
- angle: number;
4316
- diameter: number;
4317
- diameter2: number;
4318
- cleanoutStyle: "end" | "inline";
4319
- pipeMaterial: "abs" | "cast-iron" | "pvc";
4320
- system: "vent" | "waste";
4321
- type: "pipe-fitting";
4322
- } | {
4323
- object: "node";
4324
- name?: string | undefined;
4325
- parentId: string | null;
4326
- visible: boolean;
4327
- camera?: {
4328
- position: [number, number, number];
4329
- target: [number, number, number];
4330
- mode: "orthographic" | "perspective";
4331
- fov?: number | undefined;
4332
- zoom?: number | undefined;
4333
- } | undefined;
4334
- metadata: Record<string, unknown>;
4335
- provenance?: {
4336
- refs: {
4337
- ns?: string | undefined;
4338
- id: string;
4339
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
4340
- }[];
4341
- lineage?: {
4342
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
4343
- fromIds: string[];
4344
- } | undefined;
4345
- } | undefined;
4346
- id: `pipe-trap_${string}`;
4347
- position: [number, number, number];
4348
- rotation: number;
4349
- diameter: number;
4350
- pipeMaterial: "abs" | "cast-iron" | "pvc";
4351
- armLengthM: number;
4352
- type: "pipe-trap";
4353
- } | {
4354
- object: "node";
4355
- name?: string | undefined;
4356
- parentId: string | null;
4357
- visible: boolean;
4358
- camera?: {
4359
- position: [number, number, number];
4360
- target: [number, number, number];
4361
- mode: "orthographic" | "perspective";
4362
- fov?: number | undefined;
4363
- zoom?: number | undefined;
4364
- } | undefined;
4365
- metadata: Record<string, unknown>;
4366
- provenance?: {
4367
- refs: {
4368
- ns?: string | undefined;
4369
- id: string;
4370
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
4371
- }[];
4372
- lineage?: {
4373
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
4374
- fromIds: string[];
4375
- } | undefined;
4376
- } | undefined;
4377
- id: `level_${string}`;
4378
- 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}`)[];
4379
- level: number;
4380
- baseElevation: number;
4381
- height?: number | undefined;
4382
- type: "level";
4383
- } | {
4384
- object: "node";
4385
- parentId: string | null;
4386
- visible: boolean;
4387
- camera?: {
4388
- position: [number, number, number];
4389
- target: [number, number, number];
4390
- mode: "orthographic" | "perspective";
4391
- fov?: number | undefined;
4392
- zoom?: number | undefined;
4393
- } | undefined;
4394
- provenance?: {
4395
- refs: {
4396
- ns?: string | undefined;
4397
- id: string;
4398
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
4399
- }[];
4400
- lineage?: {
4401
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
4402
- fromIds: string[];
4403
- } | undefined;
4404
- } | undefined;
4405
- id: `unit_${string}`;
4406
- name: string;
4407
- kind: "apartment" | "commercial" | "common" | "hotel-room";
4408
- members: `zone_${string}`[];
4409
- color: string;
4410
- metadata: Record<string, unknown>;
4411
- type: "unit";
4531
+ position: [number, number, number];
4532
+ rotation: [number, number, number];
4533
+ fittingType: "cleanout" | "coupling" | "cross" | "elbow" | "end-cap" | "reducer" | "sanitary-tee" | "wye";
4534
+ angle: number;
4535
+ diameter: number;
4536
+ diameter2: number;
4537
+ cleanoutStyle: "end" | "inline";
4538
+ pipeMaterial: "abs" | "cast-iron" | "pvc";
4539
+ system: "vent" | "waste";
4540
+ type: "pipe-fitting";
4412
4541
  } | {
4413
4542
  object: "node";
4414
4543
  name?: string | undefined;
@@ -4433,12 +4562,12 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
4433
4562
  fromIds: string[];
4434
4563
  } | undefined;
4435
4564
  } | undefined;
4436
- id: `building_${string}`;
4437
- children: (`elevator_${string}` | `level_${string}` | `unit_${string}`)[];
4438
- position: [number, number, number];
4439
- rotation: [number, number, number];
4440
- groundLevelId?: `level_${string}` | undefined;
4441
- type: "building";
4565
+ id: `level_${string}`;
4566
+ children: (`beam_${string}` | `block_${string}` | `ceiling_${string}` | `column_${string}` | `construction-dimension_${string}` | `duct-fitting_${string}` | `duct-segment_${string}` | `duct-terminal_${string}` | `fence_${string}` | `floor-opening_${string}` | `guide_${string}` | `hvac-equipment_${string}` | `imesh_${string}` | `item_${string}` | `lineset_${string}` | `liquid-line_${string}` | `measurement_${string}` | `pipe-fitting_${string}` | `pipe-segment_${string}` | `pipe-trap_${string}` | `procedural-item_${string}` | `roof_${string}` | `scan_${string}` | `separator_${string}` | `shelf_${string}` | `slab_${string}` | `spawn_${string}` | `stair_${string}` | `structural-grid_${string}` | `wall_${string}` | `zone_${string}`)[];
4567
+ level: number;
4568
+ baseElevation: number;
4569
+ height?: number | undefined;
4570
+ type: "level";
4442
4571
  } | {
4443
4572
  object: "node";
4444
4573
  name?: string | undefined;
@@ -4463,27 +4592,54 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
4463
4592
  fromIds: string[];
4464
4593
  } | undefined;
4465
4594
  } | undefined;
4466
- matchFenceStyle?: boolean | undefined;
4467
- matchFenceHeight?: boolean | undefined;
4468
- leafType?: "double" | "single" | undefined;
4469
- style?: "guard" | "horizontal" | "match" | "picket" | "privacy" | "rail" | "slat" | undefined;
4470
- height?: number | undefined;
4471
- clearance?: number | undefined;
4472
- thickness?: number | undefined;
4473
- frameWidth?: number | undefined;
4474
- spacing?: number | undefined;
4475
- boardWidth?: number | undefined;
4476
- hinge?: "left" | "right" | undefined;
4477
- swing?: "inward" | "outward" | undefined;
4478
- openAngle?: number | undefined;
4479
- leafSplit?: number | undefined;
4480
- brace?: "cross" | "diagonal" | "none" | undefined;
4481
- showHardware?: boolean | undefined;
4482
- showPosts?: boolean | undefined;
4483
- id: `fence-gate_${string}`;
4484
- center: number;
4595
+ id: `elevator_${string}`;
4596
+ material?: {
4597
+ id?: string | undefined;
4598
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
4599
+ properties?: {
4600
+ color: string;
4601
+ roughness: number;
4602
+ metalness: number;
4603
+ opacity: number;
4604
+ transparent: boolean;
4605
+ side: "back" | "double" | "front";
4606
+ } | undefined;
4607
+ texture?: {
4608
+ url: string;
4609
+ repeat?: [number, number] | undefined;
4610
+ scale?: number | undefined;
4611
+ offset?: [number, number] | undefined;
4612
+ normalMap?: string | undefined;
4613
+ normalScale?: number | undefined;
4614
+ bumpMap?: string | undefined;
4615
+ bumpScale?: number | undefined;
4616
+ } | undefined;
4617
+ } | undefined;
4618
+ materialPreset?: string | undefined;
4619
+ slots?: Record<string, string> | undefined;
4620
+ position: [number, number, number];
4621
+ rotation: number;
4485
4622
  width: number;
4486
- type: "fence-gate";
4623
+ depth: number;
4624
+ shaftWidth?: number | undefined;
4625
+ shaftDepth?: number | undefined;
4626
+ shaftWallThickness: number;
4627
+ shaftStyle: "glass" | "solid";
4628
+ cabHeight: number;
4629
+ doorWidth: number;
4630
+ doorHeight: number;
4631
+ doorStyle: "center-opening" | "single-left" | "single-right";
4632
+ doorPanelStyle: "glass-frame" | "segmented-panel" | "solid-panel";
4633
+ fromLevelId: string | null;
4634
+ toLevelId: string | null;
4635
+ servedLevelIds?: string[] | undefined;
4636
+ disabledLevelIds: string[];
4637
+ serviceOnlyLevelIds: string[];
4638
+ defaultLevelId: string | null;
4639
+ speed: number;
4640
+ doorDurationMs: number;
4641
+ dwellMs: number;
4642
+ type: "elevator";
4487
4643
  } | {
4488
4644
  object: "node";
4489
4645
  name?: string | undefined;
@@ -4508,14 +4664,12 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
4508
4664
  fromIds: string[];
4509
4665
  } | undefined;
4510
4666
  } | undefined;
4511
- center: number;
4512
- width: number;
4513
- matchFenceStyle?: boolean | undefined;
4514
- matchFenceHeight?: boolean | undefined;
4515
- height?: number | undefined;
4516
- showPosts: boolean;
4517
- id: `fence-opening_${string}`;
4518
- type: "fence-opening";
4667
+ id: `building_${string}`;
4668
+ children: (`elevator_${string}` | `level_${string}` | `unit_${string}`)[];
4669
+ position: [number, number, number];
4670
+ rotation: [number, number, number];
4671
+ groundLevelId?: `level_${string}` | undefined;
4672
+ type: "building";
4519
4673
  } | {
4520
4674
  object: "node";
4521
4675
  name?: string | undefined;
@@ -5027,64 +5181,6 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
5027
5181
  spinSpeed: number;
5028
5182
  style: "cylinder" | "globe";
5029
5183
  type: "turbine-vent";
5030
- } | {
5031
- object: "node";
5032
- name?: string | undefined;
5033
- parentId: string | null;
5034
- visible: boolean;
5035
- camera?: {
5036
- position: [number, number, number];
5037
- target: [number, number, number];
5038
- mode: "orthographic" | "perspective";
5039
- fov?: number | undefined;
5040
- zoom?: number | undefined;
5041
- } | undefined;
5042
- metadata: Record<string, unknown>;
5043
- provenance?: {
5044
- refs: {
5045
- ns?: string | undefined;
5046
- id: string;
5047
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
5048
- }[];
5049
- lineage?: {
5050
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
5051
- fromIds: string[];
5052
- } | undefined;
5053
- } | undefined;
5054
- id: `cupola_${string}`;
5055
- material?: {
5056
- id?: string | undefined;
5057
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
5058
- properties?: {
5059
- color: string;
5060
- roughness: number;
5061
- metalness: number;
5062
- opacity: number;
5063
- transparent: boolean;
5064
- side: "back" | "double" | "front";
5065
- } | undefined;
5066
- texture?: {
5067
- url: string;
5068
- repeat?: [number, number] | undefined;
5069
- scale?: number | undefined;
5070
- offset?: [number, number] | undefined;
5071
- normalMap?: string | undefined;
5072
- normalScale?: number | undefined;
5073
- bumpMap?: string | undefined;
5074
- bumpScale?: number | undefined;
5075
- } | undefined;
5076
- } | undefined;
5077
- slots?: Record<string, string> | undefined;
5078
- materialPreset: string;
5079
- roofSegmentId?: string | undefined;
5080
- position: [number, number, number];
5081
- rotation: number;
5082
- width: number;
5083
- depth: number;
5084
- height: number;
5085
- roofStyle: "dome" | "pyramid";
5086
- finial: boolean;
5087
- type: "cupola";
5088
5184
  } | {
5089
5185
  object: "node";
5090
5186
  name?: string | undefined;
@@ -5413,101 +5509,6 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
5413
5509
  frameDepth: number;
5414
5510
  surfaceNormal?: [number, number, number] | undefined;
5415
5511
  type: "solar-panel";
5416
- } | {
5417
- object: "node";
5418
- name?: string | undefined;
5419
- parentId: string | null;
5420
- visible: boolean;
5421
- camera?: {
5422
- position: [number, number, number];
5423
- target: [number, number, number];
5424
- mode: "orthographic" | "perspective";
5425
- fov?: number | undefined;
5426
- zoom?: number | undefined;
5427
- } | undefined;
5428
- metadata: Record<string, unknown>;
5429
- provenance?: {
5430
- refs: {
5431
- ns?: string | undefined;
5432
- id: string;
5433
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
5434
- }[];
5435
- lineage?: {
5436
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
5437
- fromIds: string[];
5438
- } | undefined;
5439
- } | undefined;
5440
- id: `skylight_${string}`;
5441
- material?: {
5442
- id?: string | undefined;
5443
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
5444
- properties?: {
5445
- color: string;
5446
- roughness: number;
5447
- metalness: number;
5448
- opacity: number;
5449
- transparent: boolean;
5450
- side: "back" | "double" | "front";
5451
- } | undefined;
5452
- texture?: {
5453
- url: string;
5454
- repeat?: [number, number] | undefined;
5455
- scale?: number | undefined;
5456
- offset?: [number, number] | undefined;
5457
- normalMap?: string | undefined;
5458
- normalScale?: number | undefined;
5459
- bumpMap?: string | undefined;
5460
- bumpScale?: number | undefined;
5461
- } | undefined;
5462
- } | undefined;
5463
- materialPreset?: string | undefined;
5464
- glassMaterial?: {
5465
- id?: string | undefined;
5466
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
5467
- properties?: {
5468
- color: string;
5469
- roughness: number;
5470
- metalness: number;
5471
- opacity: number;
5472
- transparent: boolean;
5473
- side: "back" | "double" | "front";
5474
- } | undefined;
5475
- texture?: {
5476
- url: string;
5477
- repeat?: [number, number] | undefined;
5478
- scale?: number | undefined;
5479
- offset?: [number, number] | undefined;
5480
- normalMap?: string | undefined;
5481
- normalScale?: number | undefined;
5482
- bumpMap?: string | undefined;
5483
- bumpScale?: number | undefined;
5484
- } | undefined;
5485
- } | undefined;
5486
- glassMaterialPreset?: string | undefined;
5487
- roofSegmentId?: string | undefined;
5488
- position: [number, number, number];
5489
- rotation: number;
5490
- width: number;
5491
- height: number;
5492
- frameThickness: number;
5493
- frameDepth: number;
5494
- skylightType: "flat" | "lantern" | "opening" | "sliding" | "walk-on";
5495
- glassThickness: number;
5496
- lanternHeight: number;
5497
- lanternTopScale: number;
5498
- openingAngle: number;
5499
- openingSide: "bottom" | "left" | "right" | "top";
5500
- operationState: number;
5501
- motorHousing: boolean;
5502
- slideFraction: number;
5503
- slideDirection: "x" | "z";
5504
- trackWidth: number;
5505
- motorHousingSize: number;
5506
- curb: boolean;
5507
- curbHeight: number;
5508
- cutoutOffset: number;
5509
- surfaceNormal?: [number, number, number] | undefined;
5510
- type: "skylight";
5511
5512
  } | {
5512
5513
  object: "node";
5513
5514
  name?: string | undefined;