@pascal-app/core 1.1.0 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. package/dist/agent-operations/__fixtures__/cases.d.ts +3 -2
  2. package/dist/agent-operations/__fixtures__/cases.d.ts.map +1 -1
  3. package/dist/agent-operations/__fixtures__/place-items-cases.d.ts.map +1 -1
  4. package/dist/agent-operations/__fixtures__/place-items-cases.js +28 -0
  5. package/dist/agent-operations/__fixtures__/roof-bearing-cases.d.ts +12209 -12209
  6. package/dist/agent-operations/asset-catalog.d.ts +21 -11
  7. package/dist/agent-operations/asset-catalog.d.ts.map +1 -1
  8. package/dist/agent-operations/asset-catalog.js +28 -10
  9. package/dist/agent-operations/asset-views.d.ts +8 -3
  10. package/dist/agent-operations/asset-views.d.ts.map +1 -1
  11. package/dist/agent-operations/asset-views.js +19 -3
  12. package/dist/agent-operations/batch.d.ts +7 -1
  13. package/dist/agent-operations/batch.d.ts.map +1 -1
  14. package/dist/agent-operations/batch.js +17 -2
  15. package/dist/agent-operations/catalog-asset.d.ts +15 -0
  16. package/dist/agent-operations/catalog-asset.d.ts.map +1 -0
  17. package/dist/agent-operations/catalog-asset.js +4 -0
  18. package/dist/agent-operations/circulation-spaces.d.ts +2963 -2963
  19. package/dist/agent-operations/design-brief.d.ts.map +1 -1
  20. package/dist/agent-operations/design-brief.js +2 -0
  21. package/dist/agent-operations/furnish-room.d.ts.map +1 -1
  22. package/dist/agent-operations/furnish-room.js +2 -1
  23. package/dist/agent-operations/index.d.ts +3 -0
  24. package/dist/agent-operations/index.d.ts.map +1 -1
  25. package/dist/agent-operations/index.js +4 -1
  26. package/dist/agent-operations/level-reads.d.ts.map +1 -1
  27. package/dist/agent-operations/level-reads.js +4 -1
  28. package/dist/agent-operations/place-in-room.d.ts.map +1 -1
  29. package/dist/agent-operations/place-in-room.js +2 -1
  30. package/dist/agent-operations/place-items.d.ts.map +1 -1
  31. package/dist/agent-operations/place-items.js +2 -1
  32. package/dist/agent-operations/scene-queries.d.ts +585 -585
  33. package/dist/agent-operations/scene-view.d.ts.map +1 -1
  34. package/dist/agent-operations/scene-view.js +38 -13
  35. package/dist/agent-operations/search-assets.d.ts.map +1 -1
  36. package/dist/agent-operations/search-assets.js +6 -0
  37. package/dist/agent-operations/types.d.ts +3 -2
  38. package/dist/agent-operations/types.d.ts.map +1 -1
  39. package/dist/agent-operations/usage-checks.js +18 -3
  40. package/dist/agent-tools/assets.js +1 -1
  41. package/dist/building/__fixtures__/wall-opening-cases.d.ts +234 -234
  42. package/dist/building/level-duplication.d.ts +3516 -3516
  43. package/dist/building/level-duplication.d.ts.map +1 -1
  44. package/dist/building/level-duplication.js +3 -1
  45. package/dist/building/wall-openings.d.ts +75 -75
  46. package/dist/commands/structure/shared.d.ts +3407 -3407
  47. package/dist/commands/structure/zone-wall-merge.d.ts +566 -566
  48. package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts +585 -585
  49. package/dist/index.d.ts +2 -0
  50. package/dist/index.d.ts.map +1 -1
  51. package/dist/index.js +2 -0
  52. package/dist/lib/__fixtures__/mezzanine.d.ts +9262 -9262
  53. package/dist/lib/absorb-wall-separators.d.ts +1344 -1344
  54. package/dist/lib/asset-storage.d.ts.map +1 -1
  55. package/dist/lib/asset-storage.js +3 -0
  56. package/dist/lib/floor-foundation-datum.d.ts.map +1 -1
  57. package/dist/lib/floor-foundation-datum.js +5 -1
  58. package/dist/lib/floorplan/context.d.ts +95 -0
  59. package/dist/lib/floorplan/context.d.ts.map +1 -0
  60. package/dist/lib/floorplan/context.js +155 -0
  61. package/dist/lib/floorplan/index.d.ts +6 -0
  62. package/dist/lib/floorplan/index.d.ts.map +1 -0
  63. package/dist/lib/floorplan/index.js +5 -0
  64. package/dist/lib/floorplan/marks.d.ts +71 -0
  65. package/dist/lib/floorplan/marks.d.ts.map +1 -0
  66. package/dist/lib/floorplan/marks.js +157 -0
  67. package/dist/lib/floorplan/plan-math.d.ts +18 -0
  68. package/dist/lib/floorplan/plan-math.d.ts.map +1 -0
  69. package/dist/lib/floorplan/plan-math.js +82 -0
  70. package/dist/lib/floorplan/svg-paths.d.ts +17 -0
  71. package/dist/lib/floorplan/svg-paths.d.ts.map +1 -0
  72. package/dist/lib/floorplan/svg-paths.js +92 -0
  73. package/dist/lib/floorplan/wall-affordances.d.ts +31 -0
  74. package/dist/lib/floorplan/wall-affordances.d.ts.map +1 -0
  75. package/dist/lib/floorplan/wall-affordances.js +24 -0
  76. package/dist/registry/__fixtures__/roof-planes.d.ts +69 -0
  77. package/dist/registry/__fixtures__/roof-planes.d.ts.map +1 -0
  78. package/dist/registry/__fixtures__/roof-planes.js +59 -0
  79. package/dist/registry/index.d.ts +2 -1
  80. package/dist/registry/index.d.ts.map +1 -1
  81. package/dist/registry/index.js +1 -0
  82. package/dist/registry/roofs.d.ts +34 -0
  83. package/dist/registry/roofs.d.ts.map +1 -0
  84. package/dist/registry/roofs.js +61 -0
  85. package/dist/registry/types.d.ts +30 -0
  86. package/dist/registry/types.d.ts.map +1 -1
  87. package/dist/registry/validate-relations.d.ts +5 -1
  88. package/dist/registry/validate-relations.d.ts.map +1 -1
  89. package/dist/registry/validate-relations.js +6 -2
  90. package/dist/schema/asset-url.d.ts +8 -0
  91. package/dist/schema/asset-url.d.ts.map +1 -1
  92. package/dist/schema/asset-url.js +17 -0
  93. package/dist/schema/nodes/roof.d.ts +1 -1
  94. package/dist/schema/nodes/roof.d.ts.map +1 -1
  95. package/dist/schema/nodes/roof.js +13 -8
  96. package/dist/schema/types.d.ts +1 -1
  97. package/dist/services/roof-level.d.ts.map +1 -1
  98. package/dist/services/roof-level.js +12 -2
  99. package/dist/services/roof-move.d.ts +4 -2
  100. package/dist/services/roof-move.d.ts.map +1 -1
  101. package/dist/services/roof-move.js +21 -9
  102. package/dist/spatial/usage-field/findings.d.ts +7 -1
  103. package/dist/spatial/usage-field/findings.d.ts.map +1 -1
  104. package/dist/spatial/usage-field/findings.js +42 -10
  105. package/dist/spatial/usage-field/path.d.ts.map +1 -1
  106. package/dist/spatial/usage-field/path.js +28 -18
  107. package/dist/store/actions/node-actions.d.ts +1641 -1641
  108. package/dist/store/scene-annotations.d.ts +1778 -1778
  109. package/dist/systems/document-reconcile.d.ts.map +1 -1
  110. package/dist/systems/document-reconcile.js +1 -2
  111. package/dist/systems/roof/roof-elevation.d.ts +11 -6
  112. package/dist/systems/roof/roof-elevation.d.ts.map +1 -1
  113. package/dist/systems/roof/roof-elevation.js +24 -11
  114. package/dist/systems/slab/__fixtures__/floor-step.d.ts +1622 -1622
  115. package/dist/systems/slab/__fixtures__/raised-room.d.ts +585 -585
  116. package/dist/systems/stair/stair-opening-preview.d.ts +1919 -1919
  117. package/dist/utils/ensure-scene-openings.d.ts +3409 -3409
  118. package/dist/utils/floor-plate-migration.d.ts +1344 -1344
  119. package/dist/utils/owned-floor-opening-migration.d.ts +1344 -1344
  120. package/dist/utils/reconcile-structure-on-load.d.ts +1641 -1641
  121. package/dist/utils/scene-bounds.d.ts +32 -0
  122. package/dist/utils/scene-bounds.d.ts.map +1 -0
  123. package/dist/utils/scene-bounds.js +201 -0
  124. package/package.json +1 -1
@@ -32,54 +32,126 @@ export declare function withoutSceneAnnotations(nodes: Record<AnyNodeId, AnyNode
32
32
  fromIds: string[];
33
33
  } | undefined;
34
34
  } | undefined;
35
- id: `elevator_${string}`;
36
- material?: {
37
- id?: string | undefined;
38
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
39
- properties?: {
40
- color: string;
41
- roughness: number;
42
- metalness: number;
43
- opacity: number;
44
- transparent: boolean;
45
- side: "back" | "double" | "front";
35
+ id: `block_${string}`;
36
+ children: string[];
37
+ position: [number, number, number];
38
+ rotation: number;
39
+ supportSlabId?: string | undefined;
40
+ topology: {
41
+ vertices: {
42
+ id: string;
43
+ position: [number, number, number];
44
+ }[];
45
+ edges: {
46
+ id: string;
47
+ vertexIds: [string, string];
48
+ }[];
49
+ faces: {
50
+ id: string;
51
+ vertexIds: string[];
52
+ materialSlot: string;
53
+ }[];
54
+ };
55
+ slots: Record<string, string>;
56
+ slotNames: Record<string, string>;
57
+ type: "block";
58
+ } | {
59
+ object: "node";
60
+ name?: string | undefined;
61
+ parentId: string | null;
62
+ visible: boolean;
63
+ camera?: {
64
+ position: [number, number, number];
65
+ target: [number, number, number];
66
+ mode: "orthographic" | "perspective";
67
+ fov?: number | undefined;
68
+ zoom?: number | undefined;
69
+ } | undefined;
70
+ metadata: Record<string, unknown>;
71
+ provenance?: {
72
+ refs: {
73
+ ns?: string | undefined;
74
+ id: string;
75
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
76
+ }[];
77
+ lineage?: {
78
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
79
+ fromIds: string[];
46
80
  } | undefined;
47
- texture?: {
48
- url: string;
49
- repeat?: [number, number] | undefined;
50
- scale?: number | undefined;
51
- offset?: [number, number] | undefined;
52
- normalMap?: string | undefined;
53
- normalScale?: number | undefined;
54
- bumpMap?: string | undefined;
55
- bumpScale?: number | undefined;
81
+ } | undefined;
82
+ id: `construction-dimension_${string}`;
83
+ anchors: ({
84
+ kind: "feature";
85
+ reference: {
86
+ nodeId: string;
87
+ featureId: string;
88
+ parameters?: Record<string, string | number | boolean> | undefined;
89
+ };
90
+ fallback: [number, number, number];
91
+ } | [number, number, number])[];
92
+ baseline: {
93
+ origin: [number, number];
94
+ direction: [number, number];
95
+ };
96
+ chainMode: "continuous" | "point-to-point";
97
+ mode: "angular" | "arc-length" | "center-mark" | "chord" | "coordinate" | "diameter" | "linear" | "radius";
98
+ featureCount: number;
99
+ showCenterMark: boolean;
100
+ prefix: string;
101
+ suffix: string;
102
+ textOverride: string | null;
103
+ datumPolicy: "centerline" | "finish-face" | "structural-face" | "wall-face";
104
+ terminator: "architectural-tick" | "dot" | "filled-arrow" | "open-arrow";
105
+ textPosition: "above" | "centered";
106
+ imperialPrecision: "1" | "1/16" | "1/2" | "1/4" | "1/8";
107
+ metricNotation: "meters" | "millimeters";
108
+ extensionStartGap: number;
109
+ extensionOvershoot: number;
110
+ drawingType: "floor-plan" | "foundation-plan" | "reflected-ceiling-plan" | "roof-plan" | "site-plan";
111
+ drawingOverrides: {
112
+ drawingType: "floor-plan" | "foundation-plan" | "reflected-ceiling-plan" | "roof-plan" | "site-plan";
113
+ presentation: "controlled" | "omit" | "shown";
114
+ suppressedSegmentIndexes: number[];
115
+ }[];
116
+ controllingDimensionId: `construction-dimension_${string}` | null;
117
+ type: "construction-dimension";
118
+ } | {
119
+ object: "node";
120
+ name?: string | undefined;
121
+ parentId: string | null;
122
+ visible: boolean;
123
+ camera?: {
124
+ position: [number, number, number];
125
+ target: [number, number, number];
126
+ mode: "orthographic" | "perspective";
127
+ fov?: number | undefined;
128
+ zoom?: number | undefined;
129
+ } | undefined;
130
+ metadata: Record<string, unknown>;
131
+ provenance?: {
132
+ refs: {
133
+ ns?: string | undefined;
134
+ id: string;
135
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
136
+ }[];
137
+ lineage?: {
138
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
139
+ fromIds: string[];
56
140
  } | undefined;
57
141
  } | undefined;
58
- materialPreset?: string | undefined;
59
- slots?: Record<string, string> | undefined;
142
+ id: `duct-terminal_${string}`;
60
143
  position: [number, number, number];
61
144
  rotation: number;
145
+ supportSlabId?: string | undefined;
146
+ terminalType: "diffuser" | "return-grille" | "supply-register";
147
+ mount: "ceiling" | "floor" | "wall";
62
148
  width: number;
63
149
  depth: number;
64
- shaftWidth?: number | undefined;
65
- shaftDepth?: number | undefined;
66
- shaftWallThickness: number;
67
- shaftStyle: "glass" | "solid";
68
- cabHeight: number;
69
- doorWidth: number;
70
- doorHeight: number;
71
- doorStyle: "center-opening" | "single-left" | "single-right";
72
- doorPanelStyle: "glass-frame" | "segmented-panel" | "solid-panel";
73
- fromLevelId: string | null;
74
- toLevelId: string | null;
75
- servedLevelIds?: string[] | undefined;
76
- disabledLevelIds: string[];
77
- serviceOnlyLevelIds: string[];
78
- defaultLevelId: string | null;
79
- speed: number;
80
- doorDurationMs: number;
81
- dwellMs: number;
82
- type: "elevator";
150
+ collarShape: "oval" | "rect" | "round";
151
+ collarDiameter: number;
152
+ collarWidth: number;
153
+ collarHeight: number;
154
+ type: "duct-terminal";
83
155
  } | {
84
156
  object: "node";
85
157
  name?: string | undefined;
@@ -104,205 +176,51 @@ export declare function withoutSceneAnnotations(nodes: Record<AnyNodeId, AnyNode
104
176
  fromIds: string[];
105
177
  } | undefined;
106
178
  } | undefined;
107
- type: "item";
108
- id: `item_${string}`;
179
+ id: `guide_${string}`;
180
+ url: string;
109
181
  position: [number, number, number];
110
182
  rotation: [number, number, number];
111
- scale: [number, number, number];
112
- side?: "back" | "front" | undefined;
113
- children: string[];
114
- wallId?: string | undefined;
115
- wallT?: number | undefined;
116
- roofSegmentId?: string | undefined;
117
- roofFace?: "back" | "front" | "left" | "right" | undefined;
118
- blockFaceId?: string | undefined;
119
- supportSlabId?: string | undefined;
120
- collectionIds?: `collection_${string}`[] | undefined;
121
- slots?: Record<string, string> | undefined;
122
- source?: {
123
- kind: "script";
124
- meta?: {
125
- description?: string | undefined;
126
- category?: string | undefined;
127
- tags?: string[] | undefined;
128
- parent?: string | undefined;
129
- } | undefined;
130
- language: "bpy" | "three";
131
- script: string;
132
- params: Record<string, string | number | boolean>;
133
- artifact: string;
134
- manifest: {
135
- bounds: {
136
- min: [number, number, number];
137
- max: [number, number, number];
138
- };
139
- params: {
140
- id: string;
141
- label?: string | undefined;
142
- kind: "boolean" | "number" | "string";
143
- default: string | number | boolean;
144
- min?: number | undefined;
145
- max?: number | undefined;
146
- step?: number | undefined;
147
- unit?: string | undefined;
148
- options?: string[] | undefined;
149
- }[];
150
- parts: {
151
- id: string;
152
- label?: string | undefined;
153
- type?: string | undefined;
154
- bounds?: {
155
- min: [number, number, number];
156
- max: [number, number, number];
157
- } | undefined;
158
- }[];
159
- surfaces: {
160
- part?: string | undefined;
161
- y: number;
162
- polygon: [number, number][];
163
- }[];
164
- slots: {
165
- id: string;
166
- label?: string | undefined;
167
- color?: string | undefined;
168
- roughness?: number | undefined;
169
- metalness?: number | undefined;
170
- transparent?: boolean | undefined;
171
- emissive?: boolean | undefined;
172
- }[];
173
- anchors: {
174
- id: string;
175
- position: [number, number, number];
176
- normal?: [number, number, number] | undefined;
177
- }[];
178
- lights: {
179
- id: string;
180
- position: [number, number, number];
181
- color: string;
182
- intensity: number;
183
- distance?: number | undefined;
184
- spot?: {
185
- direction: [number, number, number];
186
- angle: number;
187
- softness: number;
188
- } | undefined;
189
- shadows?: boolean | undefined;
190
- glow?: {
191
- size: number;
192
- strength: number;
193
- } | undefined;
194
- }[];
195
- undersides: {
196
- part?: string | undefined;
197
- polygon: [number, number][];
198
- plane: [number, number, number, number];
199
- }[];
200
- animations: {
201
- name: string;
202
- duration: number;
203
- }[];
204
- cutters?: {
205
- host: "ceiling" | "mounted" | "slab" | "wall";
206
- polygon: number[][];
207
- minY: number;
208
- maxY: number;
209
- }[] | undefined;
210
- cutout: boolean;
211
- collider: boolean;
212
- shape?: {
213
- tolerance: number;
214
- bands: {
215
- y0: number;
216
- y1: number;
217
- polygons: {
218
- outer: [number, number][];
219
- holes?: [number, number][][] | undefined;
220
- }[];
221
- }[];
222
- } | undefined;
223
- triangles: number;
224
- coverage?: number | undefined;
225
- uncovered?: {
226
- min: [number, number];
227
- max: [number, number];
228
- }[] | undefined;
229
- };
230
- images?: {
231
- artifact: string;
232
- thumbnail: string;
233
- floorPlan: string;
183
+ scale: number;
184
+ opacity: number;
185
+ scaleReference: {
186
+ start: [number, number];
187
+ end: [number, number];
188
+ realLengthMeters: number;
189
+ measuredLengthUnits: number;
190
+ metersPerUnit: number;
191
+ displayLength?: number | undefined;
192
+ displayUnit?: "centimeters" | "feet" | "inches" | "meters" | undefined;
193
+ label: string;
194
+ } | null;
195
+ type: "guide";
196
+ } | {
197
+ object: "node";
198
+ name?: string | undefined;
199
+ parentId: string | null;
200
+ visible: boolean;
201
+ camera?: {
202
+ position: [number, number, number];
203
+ target: [number, number, number];
204
+ mode: "orthographic" | "perspective";
205
+ fov?: number | undefined;
206
+ zoom?: number | undefined;
207
+ } | undefined;
208
+ metadata: Record<string, unknown>;
209
+ provenance?: {
210
+ refs: {
211
+ ns?: string | undefined;
212
+ id: string;
213
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
214
+ }[];
215
+ lineage?: {
216
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
217
+ fromIds: string[];
234
218
  } | undefined;
235
219
  } | undefined;
236
- asset: {
237
- id: string;
238
- category: string;
239
- name: string;
240
- thumbnail: string;
241
- floorPlanUrl?: string | undefined;
242
- source: "community" | "library" | "mine";
243
- isDraft?: boolean | undefined;
244
- src: string;
245
- dimensions: [number, number, number];
246
- attachTo?: "ceiling" | "wall" | "wall-side" | undefined;
247
- recessed?: boolean | undefined;
248
- tags?: string[] | undefined;
249
- functionTags?: string[] | undefined;
250
- offset: [number, number, number];
251
- rotation: [number, number, number];
252
- scale: [number, number, number];
253
- surface?: {
254
- height: number;
255
- } | undefined;
256
- interactive?: {
257
- controls: ({
258
- kind: "toggle";
259
- label?: string | undefined;
260
- default?: boolean | undefined;
261
- } | {
262
- kind: "slider";
263
- label: string;
264
- min: number;
265
- max: number;
266
- step: number;
267
- unit?: string | undefined;
268
- displayMode: "dial" | "slider" | "stepper";
269
- default?: number | undefined;
270
- } | {
271
- kind: "temperature";
272
- label: string;
273
- min: number;
274
- max: number;
275
- unit: "C" | "F";
276
- default?: number | undefined;
277
- })[];
278
- effects: ({
279
- kind: "animation";
280
- mode?: "ambient" | "open-close" | undefined;
281
- control?: number | undefined;
282
- clips: {
283
- on?: string | undefined;
284
- off?: string | undefined;
285
- loop?: string | undefined;
286
- };
287
- } | {
288
- kind: "light";
289
- color: string;
290
- intensityRange: [number, number];
291
- distance?: number | undefined;
292
- offset: [number, number, number];
293
- spot?: {
294
- direction: [number, number, number];
295
- angle: number;
296
- softness: number;
297
- } | undefined;
298
- shadows?: boolean | undefined;
299
- glow?: {
300
- size: number;
301
- strength: number;
302
- } | undefined;
303
- })[];
304
- } | undefined;
305
- };
220
+ id: `liquid-line_${string}`;
221
+ path: [number, number, number][];
222
+ diameter: number;
223
+ type: "liquid-line";
306
224
  } | {
307
225
  object: "node";
308
226
  name?: string | undefined;
@@ -327,229 +245,77 @@ export declare function withoutSceneAnnotations(nodes: Record<AnyNodeId, AnyNode
327
245
  fromIds: string[];
328
246
  } | undefined;
329
247
  } | undefined;
330
- id: `ceiling_${string}`;
331
- children: (`item_${string}` | `procedural-item_${string}`)[];
332
- material?: {
333
- id?: string | undefined;
334
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
335
- properties?: {
336
- color: string;
337
- roughness: number;
338
- metalness: number;
339
- opacity: number;
340
- transparent: boolean;
341
- side: "back" | "double" | "front";
342
- } | undefined;
343
- texture?: {
344
- url: string;
345
- repeat?: [number, number] | undefined;
346
- scale?: number | undefined;
347
- offset?: [number, number] | undefined;
348
- normalMap?: string | undefined;
349
- normalScale?: number | undefined;
350
- bumpMap?: string | undefined;
351
- bumpScale?: number | undefined;
352
- } | undefined;
248
+ id: `site_${string}`;
249
+ polygon: {
250
+ type: "polygon";
251
+ points: [number, number][];
252
+ };
253
+ terrain?: {
254
+ type: "heightfield";
255
+ origin: [number, number];
256
+ spacing: number;
257
+ cols: number;
258
+ rows: number;
259
+ step: number;
260
+ heights: string;
353
261
  } | undefined;
354
- materialPreset?: string | undefined;
355
- slots?: Record<string, string> | undefined;
356
- polygon: [number, number][];
357
- holes: [number, number][][];
358
- holeMetadata: {
359
- source: "elevator" | "floor-opening" | "manual" | "room" | "stair";
360
- openingId?: string | undefined;
361
- stairId?: string | undefined;
362
- elevatorId?: string | undefined;
363
- }[];
364
- openingIds?: string[] | undefined;
365
- height?: number | undefined;
366
- buildUp?: {
367
- presetId?: string | undefined;
368
- finish?: {
369
- kind: "drywall" | "plaster" | "wood-plank";
370
- thickness: number;
371
- name?: string | undefined;
372
- } | undefined;
373
- framing?: {
374
- system: "joists" | "truss-chords";
375
- size: "2x10" | "2x12" | "2x4" | "2x6" | "2x8";
376
- spacing: number;
262
+ showGround?: boolean | undefined;
263
+ presentation?: {
264
+ theme?: string | undefined;
265
+ exposure?: number | undefined;
266
+ shading?: "rendered" | "solid" | undefined;
267
+ edges?: "off" | "soft" | "strong" | undefined;
268
+ shadows?: boolean | undefined;
269
+ lighting?: {
270
+ background?: string | undefined;
271
+ backgroundSky?: string | null | undefined;
272
+ ground?: string | undefined;
273
+ ambient?: {
274
+ color: string;
275
+ intensity: number;
276
+ } | undefined;
277
+ hemi?: {
278
+ sky: string;
279
+ ground: string;
280
+ intensity: number;
281
+ } | undefined;
282
+ lights?: {
283
+ color: string;
284
+ intensity: number;
285
+ position: [number, number, number];
286
+ target?: [number, number, number] | undefined;
287
+ castShadow?: boolean | undefined;
288
+ shadow?: {
289
+ intensity?: number | undefined;
290
+ bias?: number | undefined;
291
+ normalBias?: number | undefined;
292
+ radius?: number | undefined;
293
+ mapSize?: 512 | 1024 | 2048 | 4096 | undefined;
294
+ camera?: {
295
+ left: number;
296
+ right: number;
297
+ top: number;
298
+ bottom: number;
299
+ near: number;
300
+ far: number;
301
+ } | undefined;
302
+ } | undefined;
303
+ }[] | undefined;
304
+ environment?: {
305
+ source: "gradient" | "none" | "room";
306
+ intensity: number;
307
+ } | undefined;
377
308
  } | undefined;
378
- decking?: {
379
- kind: "osb" | "plywood";
380
- thickness: number;
381
- name?: string | undefined;
309
+ postprocessing?: {
310
+ ambientOcclusion?: boolean | undefined;
311
+ colorGrading?: boolean | undefined;
382
312
  } | undefined;
383
- insulation?: {
384
- kind: "batt" | "blown" | "rigid";
385
- thickness: number;
386
- name?: string | undefined;
387
- } | undefined;
388
- } | undefined;
389
- regions?: {
390
- id: string;
391
- polygon: [number, number][];
392
- finish: string | Record<string, unknown>;
393
- }[] | undefined;
394
- boundary?: "auto" | undefined;
395
- zoneId?: string | undefined;
396
- autoFromWalls: boolean;
397
- type: "ceiling";
398
- } | {
399
- object: "node";
400
- name?: string | undefined;
401
- parentId: string | null;
402
- visible: boolean;
403
- camera?: {
404
- position: [number, number, number];
405
- target: [number, number, number];
406
- mode: "orthographic" | "perspective";
407
- fov?: number | undefined;
408
- zoom?: number | undefined;
409
- } | undefined;
410
- metadata: Record<string, unknown>;
411
- provenance?: {
412
- refs: {
413
- ns?: string | undefined;
414
- id: string;
415
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
416
- }[];
417
- lineage?: {
418
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
419
- fromIds: string[];
420
- } | undefined;
421
- } | undefined;
422
- id: `construction-dimension_${string}`;
423
- anchors: ({
424
- kind: "feature";
425
- reference: {
426
- nodeId: string;
427
- featureId: string;
428
- parameters?: Record<string, string | number | boolean> | undefined;
429
- };
430
- fallback: [number, number, number];
431
- } | [number, number, number])[];
432
- baseline: {
433
- origin: [number, number];
434
- direction: [number, number];
435
- };
436
- chainMode: "continuous" | "point-to-point";
437
- mode: "angular" | "arc-length" | "center-mark" | "chord" | "coordinate" | "diameter" | "linear" | "radius";
438
- featureCount: number;
439
- showCenterMark: boolean;
440
- prefix: string;
441
- suffix: string;
442
- textOverride: string | null;
443
- datumPolicy: "centerline" | "finish-face" | "structural-face" | "wall-face";
444
- terminator: "architectural-tick" | "dot" | "filled-arrow" | "open-arrow";
445
- textPosition: "above" | "centered";
446
- imperialPrecision: "1" | "1/16" | "1/2" | "1/4" | "1/8";
447
- metricNotation: "meters" | "millimeters";
448
- extensionStartGap: number;
449
- extensionOvershoot: number;
450
- drawingType: "floor-plan" | "foundation-plan" | "reflected-ceiling-plan" | "roof-plan" | "site-plan";
451
- drawingOverrides: {
452
- drawingType: "floor-plan" | "foundation-plan" | "reflected-ceiling-plan" | "roof-plan" | "site-plan";
453
- presentation: "controlled" | "omit" | "shown";
454
- suppressedSegmentIndexes: number[];
455
- }[];
456
- controllingDimensionId: `construction-dimension_${string}` | null;
457
- type: "construction-dimension";
458
- } | {
459
- object: "node";
460
- name?: string | undefined;
461
- parentId: string | null;
462
- visible: boolean;
463
- camera?: {
464
- position: [number, number, number];
465
- target: [number, number, number];
466
- mode: "orthographic" | "perspective";
467
- fov?: number | undefined;
468
- zoom?: number | undefined;
469
- } | undefined;
470
- metadata: Record<string, unknown>;
471
- provenance?: {
472
- refs: {
473
- ns?: string | undefined;
474
- id: string;
475
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
476
- }[];
477
- lineage?: {
478
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
479
- fromIds: string[];
480
- } | undefined;
481
- } | undefined;
482
- id: `site_${string}`;
483
- polygon: {
484
- type: "polygon";
485
- points: [number, number][];
486
- };
487
- terrain?: {
488
- type: "heightfield";
489
- origin: [number, number];
490
- spacing: number;
491
- cols: number;
492
- rows: number;
493
- step: number;
494
- heights: string;
495
- } | undefined;
496
- showGround?: boolean | undefined;
497
- presentation?: {
498
- theme?: string | undefined;
499
- exposure?: number | undefined;
500
- shading?: "rendered" | "solid" | undefined;
501
- edges?: "off" | "soft" | "strong" | undefined;
502
- shadows?: boolean | undefined;
503
- lighting?: {
504
- background?: string | undefined;
505
- backgroundSky?: string | null | undefined;
506
- ground?: string | undefined;
507
- ambient?: {
508
- color: string;
509
- intensity: number;
510
- } | undefined;
511
- hemi?: {
512
- sky: string;
513
- ground: string;
514
- intensity: number;
515
- } | undefined;
516
- lights?: {
517
- color: string;
518
- intensity: number;
519
- position: [number, number, number];
520
- target?: [number, number, number] | undefined;
521
- castShadow?: boolean | undefined;
522
- shadow?: {
523
- intensity?: number | undefined;
524
- bias?: number | undefined;
525
- normalBias?: number | undefined;
526
- radius?: number | undefined;
527
- mapSize?: 512 | 1024 | 2048 | 4096 | undefined;
528
- camera?: {
529
- left: number;
530
- right: number;
531
- top: number;
532
- bottom: number;
533
- near: number;
534
- far: number;
535
- } | undefined;
536
- } | undefined;
537
- }[] | undefined;
538
- environment?: {
539
- source: "gradient" | "none" | "room";
540
- intensity: number;
541
- } | undefined;
542
- } | undefined;
543
- postprocessing?: {
544
- ambientOcclusion?: boolean | undefined;
545
- colorGrading?: boolean | undefined;
546
- } | undefined;
547
- display?: {
548
- mode?: "construction" | "finished" | "systems" | undefined;
549
- families?: Partial<Record<"device" | "exposed-structure" | "fill" | "finish" | "foundation" | "framing" | "inspection" | "insulation" | "masonry" | "membrane" | "run" | "service-space" | "sheathing", boolean>> | undefined;
550
- disciplines?: Partial<Record<"electrical" | "fire" | "low-voltage" | "mechanical" | "plumbing", boolean>> | undefined;
551
- xray?: boolean | undefined;
552
- colorBy?: "material" | "service" | undefined;
313
+ display?: {
314
+ mode?: "construction" | "finished" | "systems" | undefined;
315
+ families?: Partial<Record<"device" | "exposed-structure" | "fill" | "finish" | "foundation" | "framing" | "inspection" | "insulation" | "masonry" | "membrane" | "run" | "service-space" | "sheathing", boolean>> | undefined;
316
+ disciplines?: Partial<Record<"electrical" | "fire" | "low-voltage" | "mechanical" | "plumbing", boolean>> | undefined;
317
+ xray?: boolean | undefined;
318
+ colorBy?: "material" | "service" | undefined;
553
319
  } | undefined;
554
320
  } | undefined;
555
321
  address?: {
@@ -695,29 +461,20 @@ export declare function withoutSceneAnnotations(nodes: Record<AnyNodeId, AnyNode
695
461
  fromIds: string[];
696
462
  } | undefined;
697
463
  } | undefined;
698
- id: `door_${string}`;
699
- material?: {
700
- id?: string | undefined;
701
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
702
- properties?: {
703
- color: string;
704
- roughness: number;
705
- metalness: number;
706
- opacity: number;
707
- transparent: boolean;
708
- side: "back" | "double" | "front";
709
- } | undefined;
710
- texture?: {
711
- url: string;
712
- repeat?: [number, number] | undefined;
713
- scale?: number | undefined;
714
- offset?: [number, number] | undefined;
715
- normalMap?: string | undefined;
716
- normalScale?: number | undefined;
717
- bumpMap?: string | undefined;
718
- bumpScale?: number | undefined;
719
- } | undefined;
720
- } | undefined;
464
+ type: "item";
465
+ id: `item_${string}`;
466
+ position: [number, number, number];
467
+ rotation: [number, number, number];
468
+ scale: [number, number, number];
469
+ side?: "back" | "front" | undefined;
470
+ children: string[];
471
+ wallId?: string | undefined;
472
+ wallT?: number | undefined;
473
+ roofSegmentId?: string | undefined;
474
+ roofFace?: "back" | "front" | "left" | "right" | undefined;
475
+ blockFaceId?: string | undefined;
476
+ supportSlabId?: string | undefined;
477
+ collectionIds?: `collection_${string}`[] | undefined;
721
478
  slots?: Record<string, string> | undefined;
722
479
  source?: {
723
480
  kind: "script";
@@ -833,72 +590,76 @@ export declare function withoutSceneAnnotations(nodes: Record<AnyNodeId, AnyNode
833
590
  floorPlan: string;
834
591
  } | undefined;
835
592
  } | undefined;
836
- position: [number, number, number];
837
- rotation: [number, number, number];
838
- side?: "back" | "front" | undefined;
839
- verticalAnchor?: "floor" | "wall" | undefined;
840
- floorThresholdVersion: 0 | 1;
841
- wallId?: string | undefined;
842
- roofSegmentId?: string | undefined;
843
- roofFace?: "back" | "front" | "left" | "right" | undefined;
844
- width: number;
845
- height: number;
846
- sidelightLeft?: number | undefined;
847
- sidelightRight?: number | undefined;
848
- transomHeight?: number | undefined;
849
- slidingStyle?: "bypass" | "patio" | undefined;
850
- mark?: string | undefined;
851
- constructionType: "framed" | "masonry";
852
- dimensionReference: "finish-opening" | "masonry-opening" | "nominal" | "rough-opening";
853
- roughOpeningWidth?: number | undefined;
854
- roughOpeningHeight?: number | undefined;
855
- masonryOpeningWidth?: number | undefined;
856
- masonryOpeningHeight?: number | undefined;
857
- finishOpeningWidth?: number | undefined;
858
- finishOpeningHeight?: number | undefined;
859
- doorCategory: "garage" | "interior";
860
- doorType: "barn" | "double" | "folding" | "french" | "garage-rollup" | "garage-sectional" | "garage-tiltup" | "hinged" | "pocket" | "sliding";
861
- leafCount: 1 | 2 | 3 | 4 | 6 | 8;
862
- operationState: number;
863
- slideDirection: "left" | "right";
864
- trackStyle: "none" | "overhead" | "pocket" | "visible";
865
- garagePanelCount: number;
866
- openingKind: "door" | "opening";
867
- openingShape: "arch" | "rectangle" | "rounded";
868
- openingRadiusMode: "all" | "individual";
869
- openingTopRadii: [number, number];
870
- cornerRadius: number;
871
- archHeight: number;
872
- openingRevealRadius: number;
873
- frameThickness: number;
874
- frameDepth?: number | undefined;
875
- threshold: boolean;
876
- thresholdHeight: number;
877
- casingFaceA?: boolean | undefined;
878
- casingFaceB?: boolean | undefined;
879
- casingWidth?: number | undefined;
880
- hingesSide: "left" | "right";
881
- swingDirection: "inward" | "outward";
882
- swingAngle: number;
883
- segments: {
884
- type: "empty" | "glass" | "panel";
885
- heightRatio: number;
886
- columnRatios: number[];
887
- dividerThickness: number;
888
- panelDepth: number;
889
- panelInset: number;
890
- }[];
891
- handle: boolean;
892
- handleStyle?: "bar" | "knob" | "lever" | "lever-curved" | "plate" | undefined;
893
- handleHeight: number;
894
- handleSide: "left" | "right";
895
- contentPadding: [number, number];
896
- doorCloser: boolean;
897
- panicBar: boolean;
898
- panicBarStyle: "crossbar" | "touchbar";
899
- panicBarRods: boolean;
900
- panicBarHeight: number;
901
- type: "door";
593
+ asset: {
594
+ id: string;
595
+ category: string;
596
+ name: string;
597
+ thumbnail: string;
598
+ floorPlanUrl?: string | undefined;
599
+ source: "community" | "library" | "mine";
600
+ isDraft?: boolean | undefined;
601
+ src: string;
602
+ dimensions: [number, number, number];
603
+ attachTo?: "ceiling" | "wall" | "wall-side" | undefined;
604
+ recessed?: boolean | undefined;
605
+ tags?: string[] | undefined;
606
+ functionTags?: string[] | undefined;
607
+ offset: [number, number, number];
608
+ rotation: [number, number, number];
609
+ scale: [number, number, number];
610
+ surface?: {
611
+ height: number;
612
+ } | undefined;
613
+ interactive?: {
614
+ controls: ({
615
+ kind: "toggle";
616
+ label?: string | undefined;
617
+ default?: boolean | undefined;
618
+ } | {
619
+ kind: "slider";
620
+ label: string;
621
+ min: number;
622
+ max: number;
623
+ step: number;
624
+ unit?: string | undefined;
625
+ displayMode: "dial" | "slider" | "stepper";
626
+ default?: number | undefined;
627
+ } | {
628
+ kind: "temperature";
629
+ label: string;
630
+ min: number;
631
+ max: number;
632
+ unit: "C" | "F";
633
+ default?: number | undefined;
634
+ })[];
635
+ effects: ({
636
+ kind: "animation";
637
+ mode?: "ambient" | "open-close" | undefined;
638
+ control?: number | undefined;
639
+ clips: {
640
+ on?: string | undefined;
641
+ off?: string | undefined;
642
+ loop?: string | undefined;
643
+ };
644
+ } | {
645
+ kind: "light";
646
+ color: string;
647
+ intensityRange: [number, number];
648
+ distance?: number | undefined;
649
+ offset: [number, number, number];
650
+ spot?: {
651
+ direction: [number, number, number];
652
+ angle: number;
653
+ softness: number;
654
+ } | undefined;
655
+ shadows?: boolean | undefined;
656
+ glow?: {
657
+ size: number;
658
+ strength: number;
659
+ } | undefined;
660
+ })[];
661
+ } | undefined;
662
+ };
902
663
  } | {
903
664
  object: "node";
904
665
  name?: string | undefined;
@@ -923,7 +684,7 @@ export declare function withoutSceneAnnotations(nodes: Record<AnyNodeId, AnyNode
923
684
  fromIds: string[];
924
685
  } | undefined;
925
686
  } | undefined;
926
- id: `window_${string}`;
687
+ id: `door_${string}`;
927
688
  material?: {
928
689
  id?: string | undefined;
929
690
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
@@ -1067,12 +828,14 @@ export declare function withoutSceneAnnotations(nodes: Record<AnyNodeId, AnyNode
1067
828
  verticalAnchor?: "floor" | "wall" | undefined;
1068
829
  floorThresholdVersion: 0 | 1;
1069
830
  wallId?: string | undefined;
1070
- dormerId?: string | undefined;
1071
- dormerFace?: "back" | "front" | "left" | "right" | undefined;
1072
831
  roofSegmentId?: string | undefined;
1073
832
  roofFace?: "back" | "front" | "left" | "right" | undefined;
1074
833
  width: number;
1075
834
  height: number;
835
+ sidelightLeft?: number | undefined;
836
+ sidelightRight?: number | undefined;
837
+ transomHeight?: number | undefined;
838
+ slidingStyle?: "bypass" | "patio" | undefined;
1076
839
  mark?: string | undefined;
1077
840
  constructionType: "framed" | "masonry";
1078
841
  dimensionReference: "finish-opening" | "masonry-opening" | "nominal" | "rough-opening";
@@ -1082,52 +845,49 @@ export declare function withoutSceneAnnotations(nodes: Record<AnyNodeId, AnyNode
1082
845
  masonryOpeningHeight?: number | undefined;
1083
846
  finishOpeningWidth?: number | undefined;
1084
847
  finishOpeningHeight?: number | undefined;
1085
- openingKind: "opening" | "window";
1086
- windowType: "awning" | "bay" | "bow" | "casement" | "double-hung" | "fixed" | "hopper" | "louvered" | "single-hung" | "sliding" | "tilt-turn";
848
+ doorCategory: "garage" | "interior";
849
+ doorType: "barn" | "double" | "folding" | "french" | "garage-rollup" | "garage-sectional" | "garage-tiltup" | "hinged" | "pocket" | "sliding";
850
+ leafCount: 1 | 2 | 3 | 4 | 6 | 8;
1087
851
  operationState: number;
1088
- openingDirection?: "inward" | "outward" | undefined;
1089
- tiltTurnMode?: "tilt" | "turn" | undefined;
1090
- awningDirection: "down" | "up";
1091
- casementStyle: "french" | "single";
1092
- hingesSide: "left" | "right";
852
+ slideDirection: "left" | "right";
853
+ trackStyle: "none" | "overhead" | "pocket" | "visible";
854
+ garagePanelCount: number;
855
+ openingKind: "door" | "opening";
1093
856
  openingShape: "arch" | "rectangle" | "rounded";
1094
857
  openingRadiusMode: "all" | "individual";
1095
- openingCornerRadii: [number, number, number, number];
858
+ openingTopRadii: [number, number];
1096
859
  cornerRadius: number;
1097
860
  archHeight: number;
1098
861
  openingRevealRadius: number;
1099
862
  frameThickness: number;
1100
863
  frameDepth?: number | undefined;
1101
- windowHandle?: boolean | undefined;
1102
- sashGrid?: boolean | undefined;
1103
- columnRatios: number[];
1104
- rowRatios: number[];
1105
- columnDividerThickness: number;
1106
- rowDividerThickness: number;
1107
- corner?: {
1108
- end: "end" | "start";
1109
- partnerId: string;
1110
- post: "none" | "post";
1111
- } | undefined;
1112
- sill: boolean;
1113
- sillDepth: number;
1114
- sillThickness: number;
1115
- sillOverhang?: number | undefined;
1116
- sillInterior?: boolean | undefined;
1117
- sillInteriorDepth?: number | undefined;
1118
- sillInteriorThickness?: number | undefined;
1119
- sillInteriorOverhang?: number | undefined;
1120
- shutters?: "board-batten" | "louvered" | "none" | "panel" | undefined;
1121
- shutterWidth?: number | undefined;
1122
- shutterOpen?: number | undefined;
1123
- shutterSides?: "both" | "left" | "right" | undefined;
1124
- rollerShutter?: "box" | "concealed" | "none" | undefined;
1125
- rollerShutterBoxHeight?: number | undefined;
1126
- rollerShutterOpen?: number | undefined;
864
+ threshold: boolean;
865
+ thresholdHeight: number;
1127
866
  casingFaceA?: boolean | undefined;
1128
867
  casingFaceB?: boolean | undefined;
1129
868
  casingWidth?: number | undefined;
1130
- type: "window";
869
+ hingesSide: "left" | "right";
870
+ swingDirection: "inward" | "outward";
871
+ swingAngle: number;
872
+ segments: {
873
+ type: "empty" | "glass" | "panel";
874
+ heightRatio: number;
875
+ columnRatios: number[];
876
+ dividerThickness: number;
877
+ panelDepth: number;
878
+ panelInset: number;
879
+ }[];
880
+ handle: boolean;
881
+ handleStyle?: "bar" | "knob" | "lever" | "lever-curved" | "plate" | undefined;
882
+ handleHeight: number;
883
+ handleSide: "left" | "right";
884
+ contentPadding: [number, number];
885
+ doorCloser: boolean;
886
+ panicBar: boolean;
887
+ panicBarStyle: "crossbar" | "touchbar";
888
+ panicBarRods: boolean;
889
+ panicBarHeight: number;
890
+ type: "door";
1131
891
  } | {
1132
892
  object: "node";
1133
893
  name?: string | undefined;
@@ -1152,11 +912,30 @@ export declare function withoutSceneAnnotations(nodes: Record<AnyNodeId, AnyNode
1152
912
  fromIds: string[];
1153
913
  } | undefined;
1154
914
  } | undefined;
1155
- id: `column_${string}`;
1156
- children: string[];
1157
- position: [number, number, number];
1158
- rotation: number;
1159
- supportSlabId?: string | undefined;
915
+ id: `window_${string}`;
916
+ material?: {
917
+ id?: string | undefined;
918
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
919
+ properties?: {
920
+ color: string;
921
+ roughness: number;
922
+ metalness: number;
923
+ opacity: number;
924
+ transparent: boolean;
925
+ side: "back" | "double" | "front";
926
+ } | undefined;
927
+ texture?: {
928
+ url: string;
929
+ repeat?: [number, number] | undefined;
930
+ scale?: number | undefined;
931
+ offset?: [number, number] | undefined;
932
+ normalMap?: string | undefined;
933
+ normalScale?: number | undefined;
934
+ bumpMap?: string | undefined;
935
+ bumpScale?: number | undefined;
936
+ } | undefined;
937
+ } | undefined;
938
+ slots?: Record<string, string> | undefined;
1160
939
  source?: {
1161
940
  kind: "script";
1162
941
  meta?: {
@@ -1271,66 +1050,276 @@ export declare function withoutSceneAnnotations(nodes: Record<AnyNodeId, AnyNode
1271
1050
  floorPlan: string;
1272
1051
  } | undefined;
1273
1052
  } | undefined;
1274
- style: "cluster" | "dravidian-carved" | "faceted" | "fluted" | "lathe-turned" | "plain";
1275
- crossSection: "octagonal" | "rectangular" | "round" | "sixteen-sided" | "square";
1276
- height: number;
1277
- radius: number;
1053
+ position: [number, number, number];
1054
+ rotation: [number, number, number];
1055
+ side?: "back" | "front" | undefined;
1056
+ verticalAnchor?: "floor" | "wall" | undefined;
1057
+ floorThresholdVersion: 0 | 1;
1058
+ wallId?: string | undefined;
1059
+ dormerId?: string | undefined;
1060
+ dormerFace?: "back" | "front" | "left" | "right" | undefined;
1061
+ roofSegmentId?: string | undefined;
1062
+ roofFace?: "back" | "front" | "left" | "right" | undefined;
1278
1063
  width: number;
1279
- depth: number;
1280
- edgeSoftness: number;
1281
- baseHeight: number;
1282
- capitalHeight: number;
1283
- shaftProfile: "baluster" | "bulged" | "hourglass" | "straight" | "tapered";
1284
- shaftTaper: number;
1285
- shaftBulge: number;
1286
- shaftStartScale: number;
1287
- shaftEndScale: number;
1288
- shaftSegmentCount: number;
1289
- shaftTwistStep: number;
1290
- shaftCornerRadius: number;
1291
- shaftDetail: "fluted" | "lathe-turned" | "none" | "panelled" | "spiral";
1292
- baseStyle: "lotus" | "none" | "panelled-pedestal" | "ribbed-lotus" | "round-rings" | "simple-square" | "square-plinth" | "stepped-square";
1293
- baseWidthScale: number;
1294
- baseDepthScale: number;
1295
- baseTierCount: number;
1296
- baseStepSpread: number;
1297
- basePlinthHeightRatio: number;
1298
- baseRoundBandScale: number;
1299
- baseNeckScale: number;
1300
- baseRoundBandCount: number;
1301
- baseRibCount: number;
1302
- baseCarvingLevel: number;
1303
- basePanelInset: number;
1304
- capitalStyle: "corinthian-leaf" | "doric" | "ionic-volute" | "leaf-carved" | "none" | "rounded" | "simple" | "simple-slab" | "south-indian-bracket" | "stepped" | "volute" | "wood-bracket";
1305
- capitalWidthScale: number;
1306
- capitalDepthScale: number;
1307
- capitalTierCount: number;
1308
- capitalStepSpread: number;
1309
- capitalBandCount: number;
1310
- voluteSize: number;
1311
- voluteCount: number;
1312
- leafCount: number;
1313
- leafRows: number;
1314
- bracketDepth: number;
1315
- bracketTierCount: number;
1316
- pendantCount: number;
1317
- capitalCarvingLevel: number;
1318
- ringCount: number;
1319
- ringPlacement: "bottom" | "ends" | "even" | "top";
1320
- ringThickness: number;
1321
- ringSpread: number;
1322
- fluteCount: number;
1323
- fluteDepth: number;
1324
- fluteWidth: number;
1325
- spiralTwist: number;
1326
- spiralRibCount: number;
1327
- panelCount: number;
1328
- panelInsetDepth: number;
1329
- panelShape: "arched" | "diamond" | "rectangle";
1330
- latheRingCount: number;
1331
- latheRingSpacing: "bottom" | "ends" | "even" | "top";
1332
- carvingLevel: number;
1333
- carvingPlacement: "all" | "base" | "capital" | "shaft";
1064
+ height: number;
1065
+ mark?: string | undefined;
1066
+ constructionType: "framed" | "masonry";
1067
+ dimensionReference: "finish-opening" | "masonry-opening" | "nominal" | "rough-opening";
1068
+ roughOpeningWidth?: number | undefined;
1069
+ roughOpeningHeight?: number | undefined;
1070
+ masonryOpeningWidth?: number | undefined;
1071
+ masonryOpeningHeight?: number | undefined;
1072
+ finishOpeningWidth?: number | undefined;
1073
+ finishOpeningHeight?: number | undefined;
1074
+ openingKind: "opening" | "window";
1075
+ windowType: "awning" | "bay" | "bow" | "casement" | "double-hung" | "fixed" | "hopper" | "louvered" | "single-hung" | "sliding" | "tilt-turn";
1076
+ operationState: number;
1077
+ openingDirection?: "inward" | "outward" | undefined;
1078
+ tiltTurnMode?: "tilt" | "turn" | undefined;
1079
+ awningDirection: "down" | "up";
1080
+ casementStyle: "french" | "single";
1081
+ hingesSide: "left" | "right";
1082
+ openingShape: "arch" | "rectangle" | "rounded";
1083
+ openingRadiusMode: "all" | "individual";
1084
+ openingCornerRadii: [number, number, number, number];
1085
+ cornerRadius: number;
1086
+ archHeight: number;
1087
+ openingRevealRadius: number;
1088
+ frameThickness: number;
1089
+ frameDepth?: number | undefined;
1090
+ windowHandle?: boolean | undefined;
1091
+ sashGrid?: boolean | undefined;
1092
+ columnRatios: number[];
1093
+ rowRatios: number[];
1094
+ columnDividerThickness: number;
1095
+ rowDividerThickness: number;
1096
+ corner?: {
1097
+ end: "end" | "start";
1098
+ partnerId: string;
1099
+ post: "none" | "post";
1100
+ } | undefined;
1101
+ sill: boolean;
1102
+ sillDepth: number;
1103
+ sillThickness: number;
1104
+ sillOverhang?: number | undefined;
1105
+ sillInterior?: boolean | undefined;
1106
+ sillInteriorDepth?: number | undefined;
1107
+ sillInteriorThickness?: number | undefined;
1108
+ sillInteriorOverhang?: number | undefined;
1109
+ shutters?: "board-batten" | "louvered" | "none" | "panel" | undefined;
1110
+ shutterWidth?: number | undefined;
1111
+ shutterOpen?: number | undefined;
1112
+ shutterSides?: "both" | "left" | "right" | undefined;
1113
+ rollerShutter?: "box" | "concealed" | "none" | undefined;
1114
+ rollerShutterBoxHeight?: number | undefined;
1115
+ rollerShutterOpen?: number | undefined;
1116
+ casingFaceA?: boolean | undefined;
1117
+ casingFaceB?: boolean | undefined;
1118
+ casingWidth?: number | undefined;
1119
+ type: "window";
1120
+ } | {
1121
+ object: "node";
1122
+ name?: string | undefined;
1123
+ parentId: string | null;
1124
+ visible: boolean;
1125
+ camera?: {
1126
+ position: [number, number, number];
1127
+ target: [number, number, number];
1128
+ mode: "orthographic" | "perspective";
1129
+ fov?: number | undefined;
1130
+ zoom?: number | undefined;
1131
+ } | undefined;
1132
+ metadata: Record<string, unknown>;
1133
+ provenance?: {
1134
+ refs: {
1135
+ ns?: string | undefined;
1136
+ id: string;
1137
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
1138
+ }[];
1139
+ lineage?: {
1140
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
1141
+ fromIds: string[];
1142
+ } | undefined;
1143
+ } | undefined;
1144
+ id: `column_${string}`;
1145
+ children: string[];
1146
+ position: [number, number, number];
1147
+ rotation: number;
1148
+ supportSlabId?: string | undefined;
1149
+ source?: {
1150
+ kind: "script";
1151
+ meta?: {
1152
+ description?: string | undefined;
1153
+ category?: string | undefined;
1154
+ tags?: string[] | undefined;
1155
+ parent?: string | undefined;
1156
+ } | undefined;
1157
+ language: "bpy" | "three";
1158
+ script: string;
1159
+ params: Record<string, string | number | boolean>;
1160
+ artifact: string;
1161
+ manifest: {
1162
+ bounds: {
1163
+ min: [number, number, number];
1164
+ max: [number, number, number];
1165
+ };
1166
+ params: {
1167
+ id: string;
1168
+ label?: string | undefined;
1169
+ kind: "boolean" | "number" | "string";
1170
+ default: string | number | boolean;
1171
+ min?: number | undefined;
1172
+ max?: number | undefined;
1173
+ step?: number | undefined;
1174
+ unit?: string | undefined;
1175
+ options?: string[] | undefined;
1176
+ }[];
1177
+ parts: {
1178
+ id: string;
1179
+ label?: string | undefined;
1180
+ type?: string | undefined;
1181
+ bounds?: {
1182
+ min: [number, number, number];
1183
+ max: [number, number, number];
1184
+ } | undefined;
1185
+ }[];
1186
+ surfaces: {
1187
+ part?: string | undefined;
1188
+ y: number;
1189
+ polygon: [number, number][];
1190
+ }[];
1191
+ slots: {
1192
+ id: string;
1193
+ label?: string | undefined;
1194
+ color?: string | undefined;
1195
+ roughness?: number | undefined;
1196
+ metalness?: number | undefined;
1197
+ transparent?: boolean | undefined;
1198
+ emissive?: boolean | undefined;
1199
+ }[];
1200
+ anchors: {
1201
+ id: string;
1202
+ position: [number, number, number];
1203
+ normal?: [number, number, number] | undefined;
1204
+ }[];
1205
+ lights: {
1206
+ id: string;
1207
+ position: [number, number, number];
1208
+ color: string;
1209
+ intensity: number;
1210
+ distance?: number | undefined;
1211
+ spot?: {
1212
+ direction: [number, number, number];
1213
+ angle: number;
1214
+ softness: number;
1215
+ } | undefined;
1216
+ shadows?: boolean | undefined;
1217
+ glow?: {
1218
+ size: number;
1219
+ strength: number;
1220
+ } | undefined;
1221
+ }[];
1222
+ undersides: {
1223
+ part?: string | undefined;
1224
+ polygon: [number, number][];
1225
+ plane: [number, number, number, number];
1226
+ }[];
1227
+ animations: {
1228
+ name: string;
1229
+ duration: number;
1230
+ }[];
1231
+ cutters?: {
1232
+ host: "ceiling" | "mounted" | "slab" | "wall";
1233
+ polygon: number[][];
1234
+ minY: number;
1235
+ maxY: number;
1236
+ }[] | undefined;
1237
+ cutout: boolean;
1238
+ collider: boolean;
1239
+ shape?: {
1240
+ tolerance: number;
1241
+ bands: {
1242
+ y0: number;
1243
+ y1: number;
1244
+ polygons: {
1245
+ outer: [number, number][];
1246
+ holes?: [number, number][][] | undefined;
1247
+ }[];
1248
+ }[];
1249
+ } | undefined;
1250
+ triangles: number;
1251
+ coverage?: number | undefined;
1252
+ uncovered?: {
1253
+ min: [number, number];
1254
+ max: [number, number];
1255
+ }[] | undefined;
1256
+ };
1257
+ images?: {
1258
+ artifact: string;
1259
+ thumbnail: string;
1260
+ floorPlan: string;
1261
+ } | undefined;
1262
+ } | undefined;
1263
+ style: "cluster" | "dravidian-carved" | "faceted" | "fluted" | "lathe-turned" | "plain";
1264
+ crossSection: "octagonal" | "rectangular" | "round" | "sixteen-sided" | "square";
1265
+ height: number;
1266
+ radius: number;
1267
+ width: number;
1268
+ depth: number;
1269
+ edgeSoftness: number;
1270
+ baseHeight: number;
1271
+ capitalHeight: number;
1272
+ shaftProfile: "baluster" | "bulged" | "hourglass" | "straight" | "tapered";
1273
+ shaftTaper: number;
1274
+ shaftBulge: number;
1275
+ shaftStartScale: number;
1276
+ shaftEndScale: number;
1277
+ shaftSegmentCount: number;
1278
+ shaftTwistStep: number;
1279
+ shaftCornerRadius: number;
1280
+ shaftDetail: "fluted" | "lathe-turned" | "none" | "panelled" | "spiral";
1281
+ baseStyle: "lotus" | "none" | "panelled-pedestal" | "ribbed-lotus" | "round-rings" | "simple-square" | "square-plinth" | "stepped-square";
1282
+ baseWidthScale: number;
1283
+ baseDepthScale: number;
1284
+ baseTierCount: number;
1285
+ baseStepSpread: number;
1286
+ basePlinthHeightRatio: number;
1287
+ baseRoundBandScale: number;
1288
+ baseNeckScale: number;
1289
+ baseRoundBandCount: number;
1290
+ baseRibCount: number;
1291
+ baseCarvingLevel: number;
1292
+ basePanelInset: number;
1293
+ capitalStyle: "corinthian-leaf" | "doric" | "ionic-volute" | "leaf-carved" | "none" | "rounded" | "simple" | "simple-slab" | "south-indian-bracket" | "stepped" | "volute" | "wood-bracket";
1294
+ capitalWidthScale: number;
1295
+ capitalDepthScale: number;
1296
+ capitalTierCount: number;
1297
+ capitalStepSpread: number;
1298
+ capitalBandCount: number;
1299
+ voluteSize: number;
1300
+ voluteCount: number;
1301
+ leafCount: number;
1302
+ leafRows: number;
1303
+ bracketDepth: number;
1304
+ bracketTierCount: number;
1305
+ pendantCount: number;
1306
+ capitalCarvingLevel: number;
1307
+ ringCount: number;
1308
+ ringPlacement: "bottom" | "ends" | "even" | "top";
1309
+ ringThickness: number;
1310
+ ringSpread: number;
1311
+ fluteCount: number;
1312
+ fluteDepth: number;
1313
+ fluteWidth: number;
1314
+ spiralTwist: number;
1315
+ spiralRibCount: number;
1316
+ panelCount: number;
1317
+ panelInsetDepth: number;
1318
+ panelShape: "arched" | "diamond" | "rectangle";
1319
+ latheRingCount: number;
1320
+ latheRingSpacing: "bottom" | "ends" | "even" | "top";
1321
+ carvingLevel: number;
1322
+ carvingPlacement: "all" | "base" | "capital" | "shaft";
1334
1323
  lowerBandEnabled: boolean;
1335
1324
  lowerBandHeight: number;
1336
1325
  lowerBandCarvingLevel: number;
@@ -1901,7 +1890,7 @@ export declare function withoutSceneAnnotations(nodes: Record<AnyNodeId, AnyNode
1901
1890
  cavityInsulation?: string | undefined;
1902
1891
  } | undefined;
1903
1892
  slots?: Record<string, string> | undefined;
1904
- children: `rseg_${string}`[];
1893
+ children: string[];
1905
1894
  type: "roof";
1906
1895
  } | {
1907
1896
  object: "node";
@@ -2929,53 +2918,6 @@ export declare function withoutSceneAnnotations(nodes: Record<AnyNodeId, AnyNode
2929
2918
  topElevation?: number | undefined;
2930
2919
  supportSlabId?: string | undefined;
2931
2920
  type: "beam";
2932
- } | {
2933
- object: "node";
2934
- name?: string | undefined;
2935
- parentId: string | null;
2936
- visible: boolean;
2937
- camera?: {
2938
- position: [number, number, number];
2939
- target: [number, number, number];
2940
- mode: "orthographic" | "perspective";
2941
- fov?: number | undefined;
2942
- zoom?: number | undefined;
2943
- } | undefined;
2944
- metadata: Record<string, unknown>;
2945
- provenance?: {
2946
- refs: {
2947
- ns?: string | undefined;
2948
- id: string;
2949
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
2950
- }[];
2951
- lineage?: {
2952
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
2953
- fromIds: string[];
2954
- } | undefined;
2955
- } | undefined;
2956
- id: `block_${string}`;
2957
- children: string[];
2958
- position: [number, number, number];
2959
- rotation: number;
2960
- supportSlabId?: string | undefined;
2961
- topology: {
2962
- vertices: {
2963
- id: string;
2964
- position: [number, number, number];
2965
- }[];
2966
- edges: {
2967
- id: string;
2968
- vertexIds: [string, string];
2969
- }[];
2970
- faces: {
2971
- id: string;
2972
- vertexIds: string[];
2973
- materialSlot: string;
2974
- }[];
2975
- };
2976
- slots: Record<string, string>;
2977
- slotNames: Record<string, string>;
2978
- type: "block";
2979
2921
  } | {
2980
2922
  object: "node";
2981
2923
  name?: string | undefined;
@@ -3453,6 +3395,98 @@ export declare function withoutSceneAnnotations(nodes: Record<AnyNodeId, AnyNode
3453
3395
  color: string;
3454
3396
  metadata: Record<string, unknown>;
3455
3397
  type: "zone";
3398
+ } | {
3399
+ object: "node";
3400
+ name?: string | undefined;
3401
+ parentId: string | null;
3402
+ visible: boolean;
3403
+ camera?: {
3404
+ position: [number, number, number];
3405
+ target: [number, number, number];
3406
+ mode: "orthographic" | "perspective";
3407
+ fov?: number | undefined;
3408
+ zoom?: number | undefined;
3409
+ } | undefined;
3410
+ metadata: Record<string, unknown>;
3411
+ provenance?: {
3412
+ refs: {
3413
+ ns?: string | undefined;
3414
+ id: string;
3415
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
3416
+ }[];
3417
+ lineage?: {
3418
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
3419
+ fromIds: string[];
3420
+ } | undefined;
3421
+ } | undefined;
3422
+ id: `ceiling_${string}`;
3423
+ children: (`item_${string}` | `procedural-item_${string}`)[];
3424
+ material?: {
3425
+ id?: string | undefined;
3426
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
3427
+ properties?: {
3428
+ color: string;
3429
+ roughness: number;
3430
+ metalness: number;
3431
+ opacity: number;
3432
+ transparent: boolean;
3433
+ side: "back" | "double" | "front";
3434
+ } | undefined;
3435
+ texture?: {
3436
+ url: string;
3437
+ repeat?: [number, number] | undefined;
3438
+ scale?: number | undefined;
3439
+ offset?: [number, number] | undefined;
3440
+ normalMap?: string | undefined;
3441
+ normalScale?: number | undefined;
3442
+ bumpMap?: string | undefined;
3443
+ bumpScale?: number | undefined;
3444
+ } | undefined;
3445
+ } | undefined;
3446
+ materialPreset?: string | undefined;
3447
+ slots?: Record<string, string> | undefined;
3448
+ polygon: [number, number][];
3449
+ holes: [number, number][][];
3450
+ holeMetadata: {
3451
+ source: "elevator" | "floor-opening" | "manual" | "room" | "stair";
3452
+ openingId?: string | undefined;
3453
+ stairId?: string | undefined;
3454
+ elevatorId?: string | undefined;
3455
+ }[];
3456
+ openingIds?: string[] | undefined;
3457
+ height?: number | undefined;
3458
+ buildUp?: {
3459
+ presetId?: string | undefined;
3460
+ finish?: {
3461
+ kind: "drywall" | "plaster" | "wood-plank";
3462
+ thickness: number;
3463
+ name?: string | undefined;
3464
+ } | undefined;
3465
+ framing?: {
3466
+ system: "joists" | "truss-chords";
3467
+ size: "2x10" | "2x12" | "2x4" | "2x6" | "2x8";
3468
+ spacing: number;
3469
+ } | undefined;
3470
+ decking?: {
3471
+ kind: "osb" | "plywood";
3472
+ thickness: number;
3473
+ name?: string | undefined;
3474
+ } | undefined;
3475
+ insulation?: {
3476
+ kind: "batt" | "blown" | "rigid";
3477
+ thickness: number;
3478
+ name?: string | undefined;
3479
+ } | undefined;
3480
+ } | undefined;
3481
+ regions?: {
3482
+ id: string;
3483
+ polygon: [number, number][];
3484
+ finish: string | Record<string, unknown>;
3485
+ }[] | undefined;
3486
+ boundary?: "auto" | undefined;
3487
+ zoneId?: string | undefined;
3488
+ autoFromWalls: boolean;
3489
+ type: "ceiling";
3456
3490
  } | {
3457
3491
  object: "node";
3458
3492
  name?: string | undefined;
@@ -3762,47 +3796,6 @@ export declare function withoutSceneAnnotations(nodes: Record<AnyNodeId, AnyNode
3762
3796
  scale: number;
3763
3797
  opacity: number;
3764
3798
  type: "scan";
3765
- } | {
3766
- object: "node";
3767
- name?: string | undefined;
3768
- parentId: string | null;
3769
- visible: boolean;
3770
- camera?: {
3771
- position: [number, number, number];
3772
- target: [number, number, number];
3773
- mode: "orthographic" | "perspective";
3774
- fov?: number | undefined;
3775
- zoom?: number | undefined;
3776
- } | undefined;
3777
- metadata: Record<string, unknown>;
3778
- provenance?: {
3779
- refs: {
3780
- ns?: string | undefined;
3781
- id: string;
3782
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
3783
- }[];
3784
- lineage?: {
3785
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
3786
- fromIds: string[];
3787
- } | undefined;
3788
- } | undefined;
3789
- id: `guide_${string}`;
3790
- url: string;
3791
- position: [number, number, number];
3792
- rotation: [number, number, number];
3793
- scale: number;
3794
- opacity: number;
3795
- scaleReference: {
3796
- start: [number, number];
3797
- end: [number, number];
3798
- realLengthMeters: number;
3799
- measuredLengthUnits: number;
3800
- metersPerUnit: number;
3801
- displayLength?: number | undefined;
3802
- displayUnit?: "centimeters" | "feet" | "inches" | "meters" | undefined;
3803
- label: string;
3804
- } | null;
3805
- type: "guide";
3806
3799
  } | {
3807
3800
  object: "node";
3808
3801
  name?: string | undefined;
@@ -4100,48 +4093,11 @@ export declare function withoutSceneAnnotations(nodes: Record<AnyNodeId, AnyNode
4100
4093
  diameter2: number;
4101
4094
  ductMaterial: "duct-board" | "flex" | "sheet-metal";
4102
4095
  system: "return" | "supply";
4103
- damperAngle: number;
4104
- panelWidth: number;
4105
- panelHeight: number;
4106
- slots?: Record<string, string> | undefined;
4107
- type: "duct-fitting";
4108
- } | {
4109
- object: "node";
4110
- name?: string | undefined;
4111
- parentId: string | null;
4112
- visible: boolean;
4113
- camera?: {
4114
- position: [number, number, number];
4115
- target: [number, number, number];
4116
- mode: "orthographic" | "perspective";
4117
- fov?: number | undefined;
4118
- zoom?: number | undefined;
4119
- } | undefined;
4120
- metadata: Record<string, unknown>;
4121
- provenance?: {
4122
- refs: {
4123
- ns?: string | undefined;
4124
- id: string;
4125
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
4126
- }[];
4127
- lineage?: {
4128
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
4129
- fromIds: string[];
4130
- } | undefined;
4131
- } | undefined;
4132
- id: `duct-terminal_${string}`;
4133
- position: [number, number, number];
4134
- rotation: number;
4135
- supportSlabId?: string | undefined;
4136
- terminalType: "diffuser" | "return-grille" | "supply-register";
4137
- mount: "ceiling" | "floor" | "wall";
4138
- width: number;
4139
- depth: number;
4140
- collarShape: "oval" | "rect" | "round";
4141
- collarDiameter: number;
4142
- collarWidth: number;
4143
- collarHeight: number;
4144
- type: "duct-terminal";
4096
+ damperAngle: number;
4097
+ panelWidth: number;
4098
+ panelHeight: number;
4099
+ slots?: Record<string, string> | undefined;
4100
+ type: "duct-fitting";
4145
4101
  } | {
4146
4102
  object: "node";
4147
4103
  name?: string | undefined;
@@ -4213,34 +4169,6 @@ export declare function withoutSceneAnnotations(nodes: Record<AnyNodeId, AnyNode
4213
4169
  liquidDiameter: number;
4214
4170
  insulated: boolean;
4215
4171
  type: "lineset";
4216
- } | {
4217
- object: "node";
4218
- name?: string | undefined;
4219
- parentId: string | null;
4220
- visible: boolean;
4221
- camera?: {
4222
- position: [number, number, number];
4223
- target: [number, number, number];
4224
- mode: "orthographic" | "perspective";
4225
- fov?: number | undefined;
4226
- zoom?: number | undefined;
4227
- } | undefined;
4228
- metadata: Record<string, unknown>;
4229
- provenance?: {
4230
- refs: {
4231
- ns?: string | undefined;
4232
- id: string;
4233
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
4234
- }[];
4235
- lineage?: {
4236
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
4237
- fromIds: string[];
4238
- } | undefined;
4239
- } | undefined;
4240
- id: `liquid-line_${string}`;
4241
- path: [number, number, number][];
4242
- diameter: number;
4243
- type: "liquid-line";
4244
4172
  } | {
4245
4173
  object: "node";
4246
4174
  name?: string | undefined;
@@ -4383,6 +4311,78 @@ export declare function withoutSceneAnnotations(nodes: Record<AnyNodeId, AnyNode
4383
4311
  baseElevation: number;
4384
4312
  height?: number | undefined;
4385
4313
  type: "level";
4314
+ } | {
4315
+ object: "node";
4316
+ name?: string | undefined;
4317
+ parentId: string | null;
4318
+ visible: boolean;
4319
+ camera?: {
4320
+ position: [number, number, number];
4321
+ target: [number, number, number];
4322
+ mode: "orthographic" | "perspective";
4323
+ fov?: number | undefined;
4324
+ zoom?: number | undefined;
4325
+ } | undefined;
4326
+ metadata: Record<string, unknown>;
4327
+ provenance?: {
4328
+ refs: {
4329
+ ns?: string | undefined;
4330
+ id: string;
4331
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
4332
+ }[];
4333
+ lineage?: {
4334
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
4335
+ fromIds: string[];
4336
+ } | undefined;
4337
+ } | undefined;
4338
+ id: `elevator_${string}`;
4339
+ material?: {
4340
+ id?: string | undefined;
4341
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
4342
+ properties?: {
4343
+ color: string;
4344
+ roughness: number;
4345
+ metalness: number;
4346
+ opacity: number;
4347
+ transparent: boolean;
4348
+ side: "back" | "double" | "front";
4349
+ } | undefined;
4350
+ texture?: {
4351
+ url: string;
4352
+ repeat?: [number, number] | undefined;
4353
+ scale?: number | undefined;
4354
+ offset?: [number, number] | undefined;
4355
+ normalMap?: string | undefined;
4356
+ normalScale?: number | undefined;
4357
+ bumpMap?: string | undefined;
4358
+ bumpScale?: number | undefined;
4359
+ } | undefined;
4360
+ } | undefined;
4361
+ materialPreset?: string | undefined;
4362
+ slots?: Record<string, string> | undefined;
4363
+ position: [number, number, number];
4364
+ rotation: number;
4365
+ width: number;
4366
+ depth: number;
4367
+ shaftWidth?: number | undefined;
4368
+ shaftDepth?: number | undefined;
4369
+ shaftWallThickness: number;
4370
+ shaftStyle: "glass" | "solid";
4371
+ cabHeight: number;
4372
+ doorWidth: number;
4373
+ doorHeight: number;
4374
+ doorStyle: "center-opening" | "single-left" | "single-right";
4375
+ doorPanelStyle: "glass-frame" | "segmented-panel" | "solid-panel";
4376
+ fromLevelId: string | null;
4377
+ toLevelId: string | null;
4378
+ servedLevelIds?: string[] | undefined;
4379
+ disabledLevelIds: string[];
4380
+ serviceOnlyLevelIds: string[];
4381
+ defaultLevelId: string | null;
4382
+ speed: number;
4383
+ doorDurationMs: number;
4384
+ dwellMs: number;
4385
+ type: "elevator";
4386
4386
  } | {
4387
4387
  object: "node";
4388
4388
  parentId: string | null;
@@ -4819,157 +4819,35 @@ export declare function withoutSceneAnnotations(nodes: Record<AnyNodeId, AnyNode
4819
4819
  type: "fridge-single";
4820
4820
  } | {
4821
4821
  id: string;
4822
- height?: number | undefined;
4823
- type: "fridge-double";
4824
- } | {
4825
- id: string;
4826
- height?: number | undefined;
4827
- type: "fridge-top-freezer";
4828
- } | {
4829
- id: string;
4830
- height?: number | undefined;
4831
- type: "fridge-bottom-freezer";
4832
- } | {
4833
- id: string;
4834
- height?: number | undefined;
4835
- type: "hood-pyramid";
4836
- } | {
4837
- id: string;
4838
- height?: number | undefined;
4839
- type: "hood-curved-glass";
4840
- })[] | undefined;
4841
- id: `cabinet-module_${string}`;
4842
- children: string[];
4843
- cabinetType: "base" | "tall";
4844
- moduleKind: "corner-filler" | "standard" | "wall-filler";
4845
- openSide?: "left" | "right" | undefined;
4846
- cornerShelf?: boolean | undefined;
4847
- topFinish: "none" | "top-cabinet" | "trim";
4848
- topFinishHeight: number;
4849
- topFinishDepth: number;
4850
- type: "cabinet-module";
4851
- } | {
4852
- object: "node";
4853
- name?: string | undefined;
4854
- parentId: string | null;
4855
- visible: boolean;
4856
- camera?: {
4857
- position: [number, number, number];
4858
- target: [number, number, number];
4859
- mode: "orthographic" | "perspective";
4860
- fov?: number | undefined;
4861
- zoom?: number | undefined;
4862
- } | undefined;
4863
- metadata: Record<string, unknown>;
4864
- provenance?: {
4865
- refs: {
4866
- ns?: string | undefined;
4867
- id: string;
4868
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
4869
- }[];
4870
- lineage?: {
4871
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
4872
- fromIds: string[];
4873
- } | undefined;
4874
- } | undefined;
4875
- id: `bvent_${string}`;
4876
- material?: {
4877
- id?: string | undefined;
4878
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
4879
- properties?: {
4880
- color: string;
4881
- roughness: number;
4882
- metalness: number;
4883
- opacity: number;
4884
- transparent: boolean;
4885
- side: "back" | "double" | "front";
4886
- } | undefined;
4887
- texture?: {
4888
- url: string;
4889
- repeat?: [number, number] | undefined;
4890
- scale?: number | undefined;
4891
- offset?: [number, number] | undefined;
4892
- normalMap?: string | undefined;
4893
- normalScale?: number | undefined;
4894
- bumpMap?: string | undefined;
4895
- bumpScale?: number | undefined;
4896
- } | undefined;
4897
- } | undefined;
4898
- slots?: Record<string, string> | undefined;
4899
- materialPreset: string;
4900
- roofSegmentId?: string | undefined;
4901
- position: [number, number, number];
4902
- rotation: number;
4903
- width: number;
4904
- depth: number;
4905
- height: number;
4906
- hoodOverhang: number;
4907
- topTaper: number;
4908
- capHeight: number;
4909
- capGap: number;
4910
- domeCurvature: number;
4911
- baseInset: number;
4912
- baseHeight: number;
4913
- cornerBevel: number;
4914
- style: "box" | "cap" | "dome";
4915
- type: "box-vent";
4916
- } | {
4917
- object: "node";
4918
- name?: string | undefined;
4919
- parentId: string | null;
4920
- visible: boolean;
4921
- camera?: {
4922
- position: [number, number, number];
4923
- target: [number, number, number];
4924
- mode: "orthographic" | "perspective";
4925
- fov?: number | undefined;
4926
- zoom?: number | undefined;
4927
- } | undefined;
4928
- metadata: Record<string, unknown>;
4929
- provenance?: {
4930
- refs: {
4931
- ns?: string | undefined;
4932
- id: string;
4933
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
4934
- }[];
4935
- lineage?: {
4936
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
4937
- fromIds: string[];
4938
- } | undefined;
4939
- } | undefined;
4940
- id: `rvent_${string}`;
4941
- material?: {
4942
- id?: string | undefined;
4943
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
4944
- properties?: {
4945
- color: string;
4946
- roughness: number;
4947
- metalness: number;
4948
- opacity: number;
4949
- transparent: boolean;
4950
- side: "back" | "double" | "front";
4951
- } | undefined;
4952
- texture?: {
4953
- url: string;
4954
- repeat?: [number, number] | undefined;
4955
- scale?: number | undefined;
4956
- offset?: [number, number] | undefined;
4957
- normalMap?: string | undefined;
4958
- normalScale?: number | undefined;
4959
- bumpMap?: string | undefined;
4960
- bumpScale?: number | undefined;
4961
- } | undefined;
4962
- } | undefined;
4963
- materialPreset?: string | undefined;
4964
- roofSegmentId?: string | undefined;
4965
- position: [number, number, number];
4966
- rotation: number;
4967
- length: number;
4968
- width: number;
4969
- height: number;
4970
- style: "metal" | "shingled" | "standard";
4971
- endCaps: boolean;
4972
- type: "ridge-vent";
4822
+ height?: number | undefined;
4823
+ type: "fridge-double";
4824
+ } | {
4825
+ id: string;
4826
+ height?: number | undefined;
4827
+ type: "fridge-top-freezer";
4828
+ } | {
4829
+ id: string;
4830
+ height?: number | undefined;
4831
+ type: "fridge-bottom-freezer";
4832
+ } | {
4833
+ id: string;
4834
+ height?: number | undefined;
4835
+ type: "hood-pyramid";
4836
+ } | {
4837
+ id: string;
4838
+ height?: number | undefined;
4839
+ type: "hood-curved-glass";
4840
+ })[] | undefined;
4841
+ id: `cabinet-module_${string}`;
4842
+ children: string[];
4843
+ cabinetType: "base" | "tall";
4844
+ moduleKind: "corner-filler" | "standard" | "wall-filler";
4845
+ openSide?: "left" | "right" | undefined;
4846
+ cornerShelf?: boolean | undefined;
4847
+ topFinish: "none" | "top-cabinet" | "trim";
4848
+ topFinishHeight: number;
4849
+ topFinishDepth: number;
4850
+ type: "cabinet-module";
4973
4851
  } | {
4974
4852
  object: "node";
4975
4853
  name?: string | undefined;
@@ -4994,7 +4872,7 @@ export declare function withoutSceneAnnotations(nodes: Record<AnyNodeId, AnyNode
4994
4872
  fromIds: string[];
4995
4873
  } | undefined;
4996
4874
  } | undefined;
4997
- id: `tvent_${string}`;
4875
+ id: `bvent_${string}`;
4998
4876
  material?: {
4999
4877
  id?: string | undefined;
5000
4878
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
@@ -5022,14 +4900,19 @@ export declare function withoutSceneAnnotations(nodes: Record<AnyNodeId, AnyNode
5022
4900
  roofSegmentId?: string | undefined;
5023
4901
  position: [number, number, number];
5024
4902
  rotation: number;
5025
- diameter: number;
4903
+ width: number;
4904
+ depth: number;
5026
4905
  height: number;
5027
- neckHeight: number;
5028
- baseOverhang: number;
5029
- vaneCount: number;
5030
- spinSpeed: number;
5031
- style: "cylinder" | "globe";
5032
- type: "turbine-vent";
4906
+ hoodOverhang: number;
4907
+ topTaper: number;
4908
+ capHeight: number;
4909
+ capGap: number;
4910
+ domeCurvature: number;
4911
+ baseInset: number;
4912
+ baseHeight: number;
4913
+ cornerBevel: number;
4914
+ style: "box" | "cap" | "dome";
4915
+ type: "box-vent";
5033
4916
  } | {
5034
4917
  object: "node";
5035
4918
  name?: string | undefined;
@@ -5054,7 +4937,7 @@ export declare function withoutSceneAnnotations(nodes: Record<AnyNodeId, AnyNode
5054
4937
  fromIds: string[];
5055
4938
  } | undefined;
5056
4939
  } | undefined;
5057
- id: `cupola_${string}`;
4940
+ id: `rvent_${string}`;
5058
4941
  material?: {
5059
4942
  id?: string | undefined;
5060
4943
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
@@ -5077,17 +4960,16 @@ export declare function withoutSceneAnnotations(nodes: Record<AnyNodeId, AnyNode
5077
4960
  bumpScale?: number | undefined;
5078
4961
  } | undefined;
5079
4962
  } | undefined;
5080
- slots?: Record<string, string> | undefined;
5081
- materialPreset: string;
4963
+ materialPreset?: string | undefined;
5082
4964
  roofSegmentId?: string | undefined;
5083
4965
  position: [number, number, number];
5084
4966
  rotation: number;
4967
+ length: number;
5085
4968
  width: number;
5086
- depth: number;
5087
4969
  height: number;
5088
- roofStyle: "dome" | "pyramid";
5089
- finial: boolean;
5090
- type: "cupola";
4970
+ style: "metal" | "shingled" | "standard";
4971
+ endCaps: boolean;
4972
+ type: "ridge-vent";
5091
4973
  } | {
5092
4974
  object: "node";
5093
4975
  name?: string | undefined;
@@ -5112,7 +4994,7 @@ export declare function withoutSceneAnnotations(nodes: Record<AnyNodeId, AnyNode
5112
4994
  fromIds: string[];
5113
4995
  } | undefined;
5114
4996
  } | undefined;
5115
- id: `eyebrow-vent_${string}`;
4997
+ id: `tvent_${string}`;
5116
4998
  material?: {
5117
4999
  id?: string | undefined;
5118
5000
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
@@ -5140,13 +5022,14 @@ export declare function withoutSceneAnnotations(nodes: Record<AnyNodeId, AnyNode
5140
5022
  roofSegmentId?: string | undefined;
5141
5023
  position: [number, number, number];
5142
5024
  rotation: number;
5143
- width: number;
5144
- depth: number;
5025
+ diameter: number;
5145
5026
  height: number;
5146
- style: "half-round" | "scoop" | "slant-box";
5147
- louverCount: number;
5148
- backRatio: number;
5149
- type: "eyebrow-vent";
5027
+ neckHeight: number;
5028
+ baseOverhang: number;
5029
+ vaneCount: number;
5030
+ spinSpeed: number;
5031
+ style: "cylinder" | "globe";
5032
+ type: "turbine-vent";
5150
5033
  } | {
5151
5034
  object: "node";
5152
5035
  name?: string | undefined;
@@ -5171,7 +5054,7 @@ export declare function withoutSceneAnnotations(nodes: Record<AnyNodeId, AnyNode
5171
5054
  fromIds: string[];
5172
5055
  } | undefined;
5173
5056
  } | undefined;
5174
- id: `gutter_${string}`;
5057
+ id: `cupola_${string}`;
5175
5058
  material?: {
5176
5059
  id?: string | undefined;
5177
5060
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
@@ -5199,135 +5082,12 @@ export declare function withoutSceneAnnotations(nodes: Record<AnyNodeId, AnyNode
5199
5082
  roofSegmentId?: string | undefined;
5200
5083
  position: [number, number, number];
5201
5084
  rotation: number;
5202
- length: number;
5203
- arc?: {
5204
- centerX: number;
5205
- centerZ: number;
5206
- radius: number;
5207
- } | undefined;
5208
- size: number;
5209
- thickness: number;
5210
- profile: "box" | "half-round" | "k-style";
5211
- endCapLeft: boolean;
5212
- endCapRight: boolean;
5213
- hangerStyle: "none" | "strap";
5214
- hangerSpacing: number;
5215
- outlets: {
5216
- id: string;
5217
- offset: number;
5218
- diameter: number;
5219
- generatedBy?: "default-downspout" | undefined;
5220
- }[];
5221
- type: "gutter";
5222
- } | {
5223
- object: "node";
5224
- name?: string | undefined;
5225
- parentId: string | null;
5226
- visible: boolean;
5227
- camera?: {
5228
- position: [number, number, number];
5229
- target: [number, number, number];
5230
- mode: "orthographic" | "perspective";
5231
- fov?: number | undefined;
5232
- zoom?: number | undefined;
5233
- } | undefined;
5234
- metadata: Record<string, unknown>;
5235
- provenance?: {
5236
- refs: {
5237
- ns?: string | undefined;
5238
- id: string;
5239
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
5240
- }[];
5241
- lineage?: {
5242
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
5243
- fromIds: string[];
5244
- } | undefined;
5245
- } | undefined;
5246
- id: `chimney_${string}`;
5247
- material?: {
5248
- id?: string | undefined;
5249
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
5250
- properties?: {
5251
- color: string;
5252
- roughness: number;
5253
- metalness: number;
5254
- opacity: number;
5255
- transparent: boolean;
5256
- side: "back" | "double" | "front";
5257
- } | undefined;
5258
- texture?: {
5259
- url: string;
5260
- repeat?: [number, number] | undefined;
5261
- scale?: number | undefined;
5262
- offset?: [number, number] | undefined;
5263
- normalMap?: string | undefined;
5264
- normalScale?: number | undefined;
5265
- bumpMap?: string | undefined;
5266
- bumpScale?: number | undefined;
5267
- } | undefined;
5268
- } | undefined;
5269
- materialPreset?: string | undefined;
5270
- topMaterial?: {
5271
- id?: string | undefined;
5272
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
5273
- properties?: {
5274
- color: string;
5275
- roughness: number;
5276
- metalness: number;
5277
- opacity: number;
5278
- transparent: boolean;
5279
- side: "back" | "double" | "front";
5280
- } | undefined;
5281
- texture?: {
5282
- url: string;
5283
- repeat?: [number, number] | undefined;
5284
- scale?: number | undefined;
5285
- offset?: [number, number] | undefined;
5286
- normalMap?: string | undefined;
5287
- normalScale?: number | undefined;
5288
- bumpMap?: string | undefined;
5289
- bumpScale?: number | undefined;
5290
- } | undefined;
5291
- } | undefined;
5292
- topMaterialPreset?: string | undefined;
5293
- roofSegmentId?: string | undefined;
5294
- position: [number, number, number];
5295
- rotation: number;
5296
- bodyShape: "round" | "square";
5297
- bodyHollowDepth: number;
5298
- bodyHollowMargin: number;
5299
5085
  width: number;
5300
5086
  depth: number;
5301
- heightAboveRidge: number;
5302
- cutoutOffset: number;
5303
- cornerBevel: number;
5304
- cap: boolean;
5305
- capShape: "flat" | "none" | "sloped" | "stepped";
5306
- capOverhang: number;
5307
- capThickness: number;
5308
- flueCount: number;
5309
- flueShape: "round" | "square";
5310
- flueHeight: number;
5311
- flueDiameter: number;
5312
- flueSpacing: number;
5313
- flueWallThickness: number;
5314
- shoulderStyle: "corbeled" | "none" | "tapered";
5315
- shoulderHeight: number;
5316
- shoulderExtent: number;
5317
- bandStyle: "double" | "none" | "single";
5318
- bandHeight: number;
5319
- bandExtent: number;
5320
- bandOffset: number;
5321
- cricketStyle: "none" | "simple";
5322
- cricketLength: number;
5323
- cricketHeight: number;
5324
- cricketSide: "back" | "front";
5325
- panelStyle: "none" | "rectangular";
5326
- panelDepth: number;
5327
- panelHeight: number;
5328
- panelOffsetTop: number;
5329
- panelMargin: number;
5330
- type: "chimney";
5087
+ height: number;
5088
+ roofStyle: "dome" | "pyramid";
5089
+ finial: boolean;
5090
+ type: "cupola";
5331
5091
  } | {
5332
5092
  object: "node";
5333
5093
  name?: string | undefined;
@@ -5352,7 +5112,7 @@ export declare function withoutSceneAnnotations(nodes: Record<AnyNodeId, AnyNode
5352
5112
  fromIds: string[];
5353
5113
  } | undefined;
5354
5114
  } | undefined;
5355
- id: `solarpanel_${string}`;
5115
+ id: `eyebrow-vent_${string}`;
5356
5116
  material?: {
5357
5117
  id?: string | undefined;
5358
5118
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
@@ -5375,47 +5135,18 @@ export declare function withoutSceneAnnotations(nodes: Record<AnyNodeId, AnyNode
5375
5135
  bumpScale?: number | undefined;
5376
5136
  } | undefined;
5377
5137
  } | undefined;
5378
- materialPreset?: string | undefined;
5379
- panelMaterial?: {
5380
- id?: string | undefined;
5381
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
5382
- properties?: {
5383
- color: string;
5384
- roughness: number;
5385
- metalness: number;
5386
- opacity: number;
5387
- transparent: boolean;
5388
- side: "back" | "double" | "front";
5389
- } | undefined;
5390
- texture?: {
5391
- url: string;
5392
- repeat?: [number, number] | undefined;
5393
- scale?: number | undefined;
5394
- offset?: [number, number] | undefined;
5395
- normalMap?: string | undefined;
5396
- normalScale?: number | undefined;
5397
- bumpMap?: string | undefined;
5398
- bumpScale?: number | undefined;
5399
- } | undefined;
5400
- } | undefined;
5401
- panelMaterialPreset?: string | undefined;
5402
- panelTypePreset?: "compact" | "frameless" | "residential" | "residential-large" | undefined;
5138
+ slots?: Record<string, string> | undefined;
5139
+ materialPreset: string;
5403
5140
  roofSegmentId?: string | undefined;
5404
5141
  position: [number, number, number];
5405
5142
  rotation: number;
5406
- rows: number;
5407
- columns: number;
5408
- panelWidth: number;
5409
- panelHeight: number;
5410
- gapX: number;
5411
- gapY: number;
5412
- mountingType: "flush" | "tilted";
5413
- tiltAngle: number;
5414
- standoffHeight: number;
5415
- frameThickness: number;
5416
- frameDepth: number;
5417
- surfaceNormal?: [number, number, number] | undefined;
5418
- type: "solar-panel";
5143
+ width: number;
5144
+ depth: number;
5145
+ height: number;
5146
+ style: "half-round" | "scoop" | "slant-box";
5147
+ louverCount: number;
5148
+ backRatio: number;
5149
+ type: "eyebrow-vent";
5419
5150
  } | {
5420
5151
  object: "node";
5421
5152
  name?: string | undefined;
@@ -5440,7 +5171,7 @@ export declare function withoutSceneAnnotations(nodes: Record<AnyNodeId, AnyNode
5440
5171
  fromIds: string[];
5441
5172
  } | undefined;
5442
5173
  } | undefined;
5443
- id: `skylight_${string}`;
5174
+ id: `gutter_${string}`;
5444
5175
  material?: {
5445
5176
  id?: string | undefined;
5446
5177
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
@@ -5463,54 +5194,31 @@ export declare function withoutSceneAnnotations(nodes: Record<AnyNodeId, AnyNode
5463
5194
  bumpScale?: number | undefined;
5464
5195
  } | undefined;
5465
5196
  } | undefined;
5466
- materialPreset?: string | undefined;
5467
- glassMaterial?: {
5468
- id?: string | undefined;
5469
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
5470
- properties?: {
5471
- color: string;
5472
- roughness: number;
5473
- metalness: number;
5474
- opacity: number;
5475
- transparent: boolean;
5476
- side: "back" | "double" | "front";
5477
- } | undefined;
5478
- texture?: {
5479
- url: string;
5480
- repeat?: [number, number] | undefined;
5481
- scale?: number | undefined;
5482
- offset?: [number, number] | undefined;
5483
- normalMap?: string | undefined;
5484
- normalScale?: number | undefined;
5485
- bumpMap?: string | undefined;
5486
- bumpScale?: number | undefined;
5487
- } | undefined;
5488
- } | undefined;
5489
- glassMaterialPreset?: string | undefined;
5197
+ slots?: Record<string, string> | undefined;
5198
+ materialPreset: string;
5490
5199
  roofSegmentId?: string | undefined;
5491
5200
  position: [number, number, number];
5492
5201
  rotation: number;
5493
- width: number;
5494
- height: number;
5495
- frameThickness: number;
5496
- frameDepth: number;
5497
- skylightType: "flat" | "lantern" | "opening" | "sliding" | "walk-on";
5498
- glassThickness: number;
5499
- lanternHeight: number;
5500
- lanternTopScale: number;
5501
- openingAngle: number;
5502
- openingSide: "bottom" | "left" | "right" | "top";
5503
- operationState: number;
5504
- motorHousing: boolean;
5505
- slideFraction: number;
5506
- slideDirection: "x" | "z";
5507
- trackWidth: number;
5508
- motorHousingSize: number;
5509
- curb: boolean;
5510
- curbHeight: number;
5511
- cutoutOffset: number;
5512
- surfaceNormal?: [number, number, number] | undefined;
5513
- type: "skylight";
5202
+ length: number;
5203
+ arc?: {
5204
+ centerX: number;
5205
+ centerZ: number;
5206
+ radius: number;
5207
+ } | undefined;
5208
+ size: number;
5209
+ thickness: number;
5210
+ profile: "box" | "half-round" | "k-style";
5211
+ endCapLeft: boolean;
5212
+ endCapRight: boolean;
5213
+ hangerStyle: "none" | "strap";
5214
+ hangerSpacing: number;
5215
+ outlets: {
5216
+ id: string;
5217
+ offset: number;
5218
+ diameter: number;
5219
+ generatedBy?: "default-downspout" | undefined;
5220
+ }[];
5221
+ type: "gutter";
5514
5222
  } | {
5515
5223
  object: "node";
5516
5224
  name?: string | undefined;
@@ -5535,7 +5243,7 @@ export declare function withoutSceneAnnotations(nodes: Record<AnyNodeId, AnyNode
5535
5243
  fromIds: string[];
5536
5244
  } | undefined;
5537
5245
  } | undefined;
5538
- id: `dormer_${string}`;
5246
+ id: `chimney_${string}`;
5539
5247
  material?: {
5540
5248
  id?: string | undefined;
5541
5249
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
@@ -5582,79 +5290,44 @@ export declare function withoutSceneAnnotations(nodes: Record<AnyNodeId, AnyNode
5582
5290
  } | undefined;
5583
5291
  } | undefined;
5584
5292
  topMaterialPreset?: string | undefined;
5585
- sideMaterial?: {
5586
- id?: string | undefined;
5587
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
5588
- properties?: {
5589
- color: string;
5590
- roughness: number;
5591
- metalness: number;
5592
- opacity: number;
5593
- transparent: boolean;
5594
- side: "back" | "double" | "front";
5595
- } | undefined;
5596
- texture?: {
5597
- url: string;
5598
- repeat?: [number, number] | undefined;
5599
- scale?: number | undefined;
5600
- offset?: [number, number] | undefined;
5601
- normalMap?: string | undefined;
5602
- normalScale?: number | undefined;
5603
- bumpMap?: string | undefined;
5604
- bumpScale?: number | undefined;
5605
- } | undefined;
5606
- } | undefined;
5607
- sideMaterialPreset?: string | undefined;
5608
- wallMaterial?: {
5609
- id?: string | undefined;
5610
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
5611
- properties?: {
5612
- color: string;
5613
- roughness: number;
5614
- metalness: number;
5615
- opacity: number;
5616
- transparent: boolean;
5617
- side: "back" | "double" | "front";
5618
- } | undefined;
5619
- texture?: {
5620
- url: string;
5621
- repeat?: [number, number] | undefined;
5622
- scale?: number | undefined;
5623
- offset?: [number, number] | undefined;
5624
- normalMap?: string | undefined;
5625
- normalScale?: number | undefined;
5626
- bumpMap?: string | undefined;
5627
- bumpScale?: number | undefined;
5628
- } | undefined;
5629
- } | undefined;
5630
- wallMaterialPreset?: string | undefined;
5631
5293
  roofSegmentId?: string | undefined;
5632
5294
  position: [number, number, number];
5633
5295
  rotation: number;
5296
+ bodyShape: "round" | "square";
5297
+ bodyHollowDepth: number;
5298
+ bodyHollowMargin: number;
5634
5299
  width: number;
5635
5300
  depth: number;
5636
- height: number;
5637
- roofType: "barrel" | "conical" | "dutch" | "flat" | "gable" | "gambrel" | "hip" | "mansard" | "shed";
5638
- roofHeight: number;
5639
- shedHighSide: "back" | "front";
5640
- wallSkirtHeight: number;
5641
- windowWidth: number;
5642
- windowHeight: number;
5643
- windowOffsetX: number;
5644
- windowOffsetY: number;
5645
- windowFrameThickness: number;
5646
- windowFrameDepth: number;
5647
- windowColumns: number;
5648
- windowRows: number;
5649
- windowDividerThickness: number;
5650
- windowShape: "arch" | "rectangle" | "rounded";
5651
- windowArchHeight: number;
5652
- windowCornerRadii: [number, number, number, number];
5653
- windowSill: boolean;
5654
- windowSillDepth: number;
5655
- windowSillThickness: number;
5656
- children: `window_${string}`[];
5657
- type: "dormer";
5301
+ heightAboveRidge: number;
5302
+ cutoutOffset: number;
5303
+ cornerBevel: number;
5304
+ cap: boolean;
5305
+ capShape: "flat" | "none" | "sloped" | "stepped";
5306
+ capOverhang: number;
5307
+ capThickness: number;
5308
+ flueCount: number;
5309
+ flueShape: "round" | "square";
5310
+ flueHeight: number;
5311
+ flueDiameter: number;
5312
+ flueSpacing: number;
5313
+ flueWallThickness: number;
5314
+ shoulderStyle: "corbeled" | "none" | "tapered";
5315
+ shoulderHeight: number;
5316
+ shoulderExtent: number;
5317
+ bandStyle: "double" | "none" | "single";
5318
+ bandHeight: number;
5319
+ bandExtent: number;
5320
+ bandOffset: number;
5321
+ cricketStyle: "none" | "simple";
5322
+ cricketLength: number;
5323
+ cricketHeight: number;
5324
+ cricketSide: "back" | "front";
5325
+ panelStyle: "none" | "rectangular";
5326
+ panelDepth: number;
5327
+ panelHeight: number;
5328
+ panelOffsetTop: number;
5329
+ panelMargin: number;
5330
+ type: "chimney";
5658
5331
  } | {
5659
5332
  object: "node";
5660
5333
  name?: string | undefined;
@@ -5679,7 +5352,7 @@ export declare function withoutSceneAnnotations(nodes: Record<AnyNodeId, AnyNode
5679
5352
  fromIds: string[];
5680
5353
  } | undefined;
5681
5354
  } | undefined;
5682
- id: `downspout_${string}`;
5355
+ id: `solarpanel_${string}`;
5683
5356
  material?: {
5684
5357
  id?: string | undefined;
5685
5358
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
@@ -5702,47 +5375,8 @@ export declare function withoutSceneAnnotations(nodes: Record<AnyNodeId, AnyNode
5702
5375
  bumpScale?: number | undefined;
5703
5376
  } | undefined;
5704
5377
  } | undefined;
5705
- slots?: Record<string, string> | undefined;
5706
- materialPreset: string;
5707
- gutterId?: string | undefined;
5708
- outletId?: string | undefined;
5709
- length: number;
5710
- lengthMode?: "manual" | "to-ground" | undefined;
5711
- diameter: number;
5712
- standoff: number;
5713
- shape: "auto" | "rect" | "round";
5714
- strapStyle: "band" | "none";
5715
- strapSpacing: number;
5716
- terminal: "kickout" | "splash" | "straight";
5717
- type: "downspout";
5718
- }>;
5719
- /** Undo and redo land each node with `imagesForBuild` of its live and snapshot images. */
5720
- export declare function retainSceneAnnotations(before: Record<AnyNodeId, AnyNode>, after: Record<AnyNodeId, AnyNode>): Record<`beam_${string}` | `block_${string}` | `building_${string}` | `bvent_${string}` | `cabinet-module_${string}` | `cabinet_${string}` | `ceiling_${string}` | `chimney_${string}` | `column_${string}` | `construction-dimension_${string}` | `cupola_${string}` | `door_${string}` | `dormer_${string}` | `downspout_${string}` | `duct-fitting_${string}` | `duct-segment_${string}` | `duct-terminal_${string}` | `elevator_${string}` | `eyebrow-vent_${string}` | `fence-gate_${string}` | `fence-opening_${string}` | `fence_${string}` | `floor-opening_${string}` | `guide_${string}` | `gutter_${string}` | `hvac-equipment_${string}` | `imesh_${string}` | `item_${string}` | `leanto_${string}` | `level_${string}` | `lineset_${string}` | `liquid-line_${string}` | `measurement_${string}` | `pipe-fitting_${string}` | `pipe-segment_${string}` | `pipe-trap_${string}` | `procedural-item_${string}` | `roof_${string}` | `rseg_${string}` | `rvent_${string}` | `scan_${string}` | `separator_${string}` | `shelf_${string}` | `site_${string}` | `skylight_${string}` | `slab_${string}` | `solarpanel_${string}` | `spawn_${string}` | `sseg_${string}` | `stair_${string}` | `structural-grid_${string}` | `tvent_${string}` | `unit_${string}` | `wall_${string}` | `window_${string}` | `zone_${string}`, {
5721
- object: "node";
5722
- name?: string | undefined;
5723
- parentId: string | null;
5724
- visible: boolean;
5725
- camera?: {
5726
- position: [number, number, number];
5727
- target: [number, number, number];
5728
- mode: "orthographic" | "perspective";
5729
- fov?: number | undefined;
5730
- zoom?: number | undefined;
5731
- } | undefined;
5732
- metadata: Record<string, unknown>;
5733
- provenance?: {
5734
- refs: {
5735
- ns?: string | undefined;
5736
- id: string;
5737
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
5738
- }[];
5739
- lineage?: {
5740
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
5741
- fromIds: string[];
5742
- } | undefined;
5743
- } | undefined;
5744
- id: `elevator_${string}`;
5745
- material?: {
5378
+ materialPreset?: string | undefined;
5379
+ panelMaterial?: {
5746
5380
  id?: string | undefined;
5747
5381
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
5748
5382
  properties?: {
@@ -5754,41 +5388,34 @@ export declare function retainSceneAnnotations(before: Record<AnyNodeId, AnyNode
5754
5388
  side: "back" | "double" | "front";
5755
5389
  } | undefined;
5756
5390
  texture?: {
5757
- url: string;
5758
- repeat?: [number, number] | undefined;
5759
- scale?: number | undefined;
5760
- offset?: [number, number] | undefined;
5761
- normalMap?: string | undefined;
5762
- normalScale?: number | undefined;
5763
- bumpMap?: string | undefined;
5764
- bumpScale?: number | undefined;
5765
- } | undefined;
5766
- } | undefined;
5767
- materialPreset?: string | undefined;
5768
- slots?: Record<string, string> | undefined;
5769
- position: [number, number, number];
5770
- rotation: number;
5771
- width: number;
5772
- depth: number;
5773
- shaftWidth?: number | undefined;
5774
- shaftDepth?: number | undefined;
5775
- shaftWallThickness: number;
5776
- shaftStyle: "glass" | "solid";
5777
- cabHeight: number;
5778
- doorWidth: number;
5779
- doorHeight: number;
5780
- doorStyle: "center-opening" | "single-left" | "single-right";
5781
- doorPanelStyle: "glass-frame" | "segmented-panel" | "solid-panel";
5782
- fromLevelId: string | null;
5783
- toLevelId: string | null;
5784
- servedLevelIds?: string[] | undefined;
5785
- disabledLevelIds: string[];
5786
- serviceOnlyLevelIds: string[];
5787
- defaultLevelId: string | null;
5788
- speed: number;
5789
- doorDurationMs: number;
5790
- dwellMs: number;
5791
- type: "elevator";
5391
+ url: string;
5392
+ repeat?: [number, number] | undefined;
5393
+ scale?: number | undefined;
5394
+ offset?: [number, number] | undefined;
5395
+ normalMap?: string | undefined;
5396
+ normalScale?: number | undefined;
5397
+ bumpMap?: string | undefined;
5398
+ bumpScale?: number | undefined;
5399
+ } | undefined;
5400
+ } | undefined;
5401
+ panelMaterialPreset?: string | undefined;
5402
+ panelTypePreset?: "compact" | "frameless" | "residential" | "residential-large" | undefined;
5403
+ roofSegmentId?: string | undefined;
5404
+ position: [number, number, number];
5405
+ rotation: number;
5406
+ rows: number;
5407
+ columns: number;
5408
+ panelWidth: number;
5409
+ panelHeight: number;
5410
+ gapX: number;
5411
+ gapY: number;
5412
+ mountingType: "flush" | "tilted";
5413
+ tiltAngle: number;
5414
+ standoffHeight: number;
5415
+ frameThickness: number;
5416
+ frameDepth: number;
5417
+ surfaceNormal?: [number, number, number] | undefined;
5418
+ type: "solar-panel";
5792
5419
  } | {
5793
5420
  object: "node";
5794
5421
  name?: string | undefined;
@@ -5813,205 +5440,77 @@ export declare function retainSceneAnnotations(before: Record<AnyNodeId, AnyNode
5813
5440
  fromIds: string[];
5814
5441
  } | undefined;
5815
5442
  } | undefined;
5816
- type: "item";
5817
- id: `item_${string}`;
5818
- position: [number, number, number];
5819
- rotation: [number, number, number];
5820
- scale: [number, number, number];
5821
- side?: "back" | "front" | undefined;
5822
- children: string[];
5823
- wallId?: string | undefined;
5824
- wallT?: number | undefined;
5825
- roofSegmentId?: string | undefined;
5826
- roofFace?: "back" | "front" | "left" | "right" | undefined;
5827
- blockFaceId?: string | undefined;
5828
- supportSlabId?: string | undefined;
5829
- collectionIds?: `collection_${string}`[] | undefined;
5830
- slots?: Record<string, string> | undefined;
5831
- source?: {
5832
- kind: "script";
5833
- meta?: {
5834
- description?: string | undefined;
5835
- category?: string | undefined;
5836
- tags?: string[] | undefined;
5837
- parent?: string | undefined;
5443
+ id: `skylight_${string}`;
5444
+ material?: {
5445
+ id?: string | undefined;
5446
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
5447
+ properties?: {
5448
+ color: string;
5449
+ roughness: number;
5450
+ metalness: number;
5451
+ opacity: number;
5452
+ transparent: boolean;
5453
+ side: "back" | "double" | "front";
5838
5454
  } | undefined;
5839
- language: "bpy" | "three";
5840
- script: string;
5841
- params: Record<string, string | number | boolean>;
5842
- artifact: string;
5843
- manifest: {
5844
- bounds: {
5845
- min: [number, number, number];
5846
- max: [number, number, number];
5847
- };
5848
- params: {
5849
- id: string;
5850
- label?: string | undefined;
5851
- kind: "boolean" | "number" | "string";
5852
- default: string | number | boolean;
5853
- min?: number | undefined;
5854
- max?: number | undefined;
5855
- step?: number | undefined;
5856
- unit?: string | undefined;
5857
- options?: string[] | undefined;
5858
- }[];
5859
- parts: {
5860
- id: string;
5861
- label?: string | undefined;
5862
- type?: string | undefined;
5863
- bounds?: {
5864
- min: [number, number, number];
5865
- max: [number, number, number];
5866
- } | undefined;
5867
- }[];
5868
- surfaces: {
5869
- part?: string | undefined;
5870
- y: number;
5871
- polygon: [number, number][];
5872
- }[];
5873
- slots: {
5874
- id: string;
5875
- label?: string | undefined;
5876
- color?: string | undefined;
5877
- roughness?: number | undefined;
5878
- metalness?: number | undefined;
5879
- transparent?: boolean | undefined;
5880
- emissive?: boolean | undefined;
5881
- }[];
5882
- anchors: {
5883
- id: string;
5884
- position: [number, number, number];
5885
- normal?: [number, number, number] | undefined;
5886
- }[];
5887
- lights: {
5888
- id: string;
5889
- position: [number, number, number];
5890
- color: string;
5891
- intensity: number;
5892
- distance?: number | undefined;
5893
- spot?: {
5894
- direction: [number, number, number];
5895
- angle: number;
5896
- softness: number;
5897
- } | undefined;
5898
- shadows?: boolean | undefined;
5899
- glow?: {
5900
- size: number;
5901
- strength: number;
5902
- } | undefined;
5903
- }[];
5904
- undersides: {
5905
- part?: string | undefined;
5906
- polygon: [number, number][];
5907
- plane: [number, number, number, number];
5908
- }[];
5909
- animations: {
5910
- name: string;
5911
- duration: number;
5912
- }[];
5913
- cutters?: {
5914
- host: "ceiling" | "mounted" | "slab" | "wall";
5915
- polygon: number[][];
5916
- minY: number;
5917
- maxY: number;
5918
- }[] | undefined;
5919
- cutout: boolean;
5920
- collider: boolean;
5921
- shape?: {
5922
- tolerance: number;
5923
- bands: {
5924
- y0: number;
5925
- y1: number;
5926
- polygons: {
5927
- outer: [number, number][];
5928
- holes?: [number, number][][] | undefined;
5929
- }[];
5930
- }[];
5931
- } | undefined;
5932
- triangles: number;
5933
- coverage?: number | undefined;
5934
- uncovered?: {
5935
- min: [number, number];
5936
- max: [number, number];
5937
- }[] | undefined;
5938
- };
5939
- images?: {
5940
- artifact: string;
5941
- thumbnail: string;
5942
- floorPlan: string;
5455
+ texture?: {
5456
+ url: string;
5457
+ repeat?: [number, number] | undefined;
5458
+ scale?: number | undefined;
5459
+ offset?: [number, number] | undefined;
5460
+ normalMap?: string | undefined;
5461
+ normalScale?: number | undefined;
5462
+ bumpMap?: string | undefined;
5463
+ bumpScale?: number | undefined;
5943
5464
  } | undefined;
5944
5465
  } | undefined;
5945
- asset: {
5946
- id: string;
5947
- category: string;
5948
- name: string;
5949
- thumbnail: string;
5950
- floorPlanUrl?: string | undefined;
5951
- source: "community" | "library" | "mine";
5952
- isDraft?: boolean | undefined;
5953
- src: string;
5954
- dimensions: [number, number, number];
5955
- attachTo?: "ceiling" | "wall" | "wall-side" | undefined;
5956
- recessed?: boolean | undefined;
5957
- tags?: string[] | undefined;
5958
- functionTags?: string[] | undefined;
5959
- offset: [number, number, number];
5960
- rotation: [number, number, number];
5961
- scale: [number, number, number];
5962
- surface?: {
5963
- height: number;
5466
+ materialPreset?: string | undefined;
5467
+ glassMaterial?: {
5468
+ id?: string | undefined;
5469
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
5470
+ properties?: {
5471
+ color: string;
5472
+ roughness: number;
5473
+ metalness: number;
5474
+ opacity: number;
5475
+ transparent: boolean;
5476
+ side: "back" | "double" | "front";
5964
5477
  } | undefined;
5965
- interactive?: {
5966
- controls: ({
5967
- kind: "toggle";
5968
- label?: string | undefined;
5969
- default?: boolean | undefined;
5970
- } | {
5971
- kind: "slider";
5972
- label: string;
5973
- min: number;
5974
- max: number;
5975
- step: number;
5976
- unit?: string | undefined;
5977
- displayMode: "dial" | "slider" | "stepper";
5978
- default?: number | undefined;
5979
- } | {
5980
- kind: "temperature";
5981
- label: string;
5982
- min: number;
5983
- max: number;
5984
- unit: "C" | "F";
5985
- default?: number | undefined;
5986
- })[];
5987
- effects: ({
5988
- kind: "animation";
5989
- mode?: "ambient" | "open-close" | undefined;
5990
- control?: number | undefined;
5991
- clips: {
5992
- on?: string | undefined;
5993
- off?: string | undefined;
5994
- loop?: string | undefined;
5995
- };
5996
- } | {
5997
- kind: "light";
5998
- color: string;
5999
- intensityRange: [number, number];
6000
- distance?: number | undefined;
6001
- offset: [number, number, number];
6002
- spot?: {
6003
- direction: [number, number, number];
6004
- angle: number;
6005
- softness: number;
6006
- } | undefined;
6007
- shadows?: boolean | undefined;
6008
- glow?: {
6009
- size: number;
6010
- strength: number;
6011
- } | undefined;
6012
- })[];
5478
+ texture?: {
5479
+ url: string;
5480
+ repeat?: [number, number] | undefined;
5481
+ scale?: number | undefined;
5482
+ offset?: [number, number] | undefined;
5483
+ normalMap?: string | undefined;
5484
+ normalScale?: number | undefined;
5485
+ bumpMap?: string | undefined;
5486
+ bumpScale?: number | undefined;
6013
5487
  } | undefined;
6014
- };
5488
+ } | undefined;
5489
+ glassMaterialPreset?: string | undefined;
5490
+ roofSegmentId?: string | undefined;
5491
+ position: [number, number, number];
5492
+ rotation: number;
5493
+ width: number;
5494
+ height: number;
5495
+ frameThickness: number;
5496
+ frameDepth: number;
5497
+ skylightType: "flat" | "lantern" | "opening" | "sliding" | "walk-on";
5498
+ glassThickness: number;
5499
+ lanternHeight: number;
5500
+ lanternTopScale: number;
5501
+ openingAngle: number;
5502
+ openingSide: "bottom" | "left" | "right" | "top";
5503
+ operationState: number;
5504
+ motorHousing: boolean;
5505
+ slideFraction: number;
5506
+ slideDirection: "x" | "z";
5507
+ trackWidth: number;
5508
+ motorHousingSize: number;
5509
+ curb: boolean;
5510
+ curbHeight: number;
5511
+ cutoutOffset: number;
5512
+ surfaceNormal?: [number, number, number] | undefined;
5513
+ type: "skylight";
6015
5514
  } | {
6016
5515
  object: "node";
6017
5516
  name?: string | undefined;
@@ -6036,8 +5535,7 @@ export declare function retainSceneAnnotations(before: Record<AnyNodeId, AnyNode
6036
5535
  fromIds: string[];
6037
5536
  } | undefined;
6038
5537
  } | undefined;
6039
- id: `ceiling_${string}`;
6040
- children: (`item_${string}` | `procedural-item_${string}`)[];
5538
+ id: `dormer_${string}`;
6041
5539
  material?: {
6042
5540
  id?: string | undefined;
6043
5541
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
@@ -6061,49 +5559,211 @@ export declare function retainSceneAnnotations(before: Record<AnyNodeId, AnyNode
6061
5559
  } | undefined;
6062
5560
  } | undefined;
6063
5561
  materialPreset?: string | undefined;
6064
- slots?: Record<string, string> | undefined;
6065
- polygon: [number, number][];
6066
- holes: [number, number][][];
6067
- holeMetadata: {
6068
- source: "elevator" | "floor-opening" | "manual" | "room" | "stair";
6069
- openingId?: string | undefined;
6070
- stairId?: string | undefined;
6071
- elevatorId?: string | undefined;
6072
- }[];
6073
- openingIds?: string[] | undefined;
6074
- height?: number | undefined;
6075
- buildUp?: {
6076
- presetId?: string | undefined;
6077
- finish?: {
6078
- kind: "drywall" | "plaster" | "wood-plank";
6079
- thickness: number;
6080
- name?: string | undefined;
5562
+ topMaterial?: {
5563
+ id?: string | undefined;
5564
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
5565
+ properties?: {
5566
+ color: string;
5567
+ roughness: number;
5568
+ metalness: number;
5569
+ opacity: number;
5570
+ transparent: boolean;
5571
+ side: "back" | "double" | "front";
6081
5572
  } | undefined;
6082
- framing?: {
6083
- system: "joists" | "truss-chords";
6084
- size: "2x10" | "2x12" | "2x4" | "2x6" | "2x8";
6085
- spacing: number;
5573
+ texture?: {
5574
+ url: string;
5575
+ repeat?: [number, number] | undefined;
5576
+ scale?: number | undefined;
5577
+ offset?: [number, number] | undefined;
5578
+ normalMap?: string | undefined;
5579
+ normalScale?: number | undefined;
5580
+ bumpMap?: string | undefined;
5581
+ bumpScale?: number | undefined;
6086
5582
  } | undefined;
6087
- decking?: {
6088
- kind: "osb" | "plywood";
6089
- thickness: number;
6090
- name?: string | undefined;
5583
+ } | undefined;
5584
+ topMaterialPreset?: string | undefined;
5585
+ sideMaterial?: {
5586
+ id?: string | undefined;
5587
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
5588
+ properties?: {
5589
+ color: string;
5590
+ roughness: number;
5591
+ metalness: number;
5592
+ opacity: number;
5593
+ transparent: boolean;
5594
+ side: "back" | "double" | "front";
6091
5595
  } | undefined;
6092
- insulation?: {
6093
- kind: "batt" | "blown" | "rigid";
6094
- thickness: number;
6095
- name?: string | undefined;
5596
+ texture?: {
5597
+ url: string;
5598
+ repeat?: [number, number] | undefined;
5599
+ scale?: number | undefined;
5600
+ offset?: [number, number] | undefined;
5601
+ normalMap?: string | undefined;
5602
+ normalScale?: number | undefined;
5603
+ bumpMap?: string | undefined;
5604
+ bumpScale?: number | undefined;
6096
5605
  } | undefined;
6097
5606
  } | undefined;
6098
- regions?: {
6099
- id: string;
6100
- polygon: [number, number][];
6101
- finish: string | Record<string, unknown>;
6102
- }[] | undefined;
6103
- boundary?: "auto" | undefined;
6104
- zoneId?: string | undefined;
6105
- autoFromWalls: boolean;
6106
- type: "ceiling";
5607
+ sideMaterialPreset?: string | undefined;
5608
+ wallMaterial?: {
5609
+ id?: string | undefined;
5610
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
5611
+ properties?: {
5612
+ color: string;
5613
+ roughness: number;
5614
+ metalness: number;
5615
+ opacity: number;
5616
+ transparent: boolean;
5617
+ side: "back" | "double" | "front";
5618
+ } | undefined;
5619
+ texture?: {
5620
+ url: string;
5621
+ repeat?: [number, number] | undefined;
5622
+ scale?: number | undefined;
5623
+ offset?: [number, number] | undefined;
5624
+ normalMap?: string | undefined;
5625
+ normalScale?: number | undefined;
5626
+ bumpMap?: string | undefined;
5627
+ bumpScale?: number | undefined;
5628
+ } | undefined;
5629
+ } | undefined;
5630
+ wallMaterialPreset?: string | undefined;
5631
+ roofSegmentId?: string | undefined;
5632
+ position: [number, number, number];
5633
+ rotation: number;
5634
+ width: number;
5635
+ depth: number;
5636
+ height: number;
5637
+ roofType: "barrel" | "conical" | "dutch" | "flat" | "gable" | "gambrel" | "hip" | "mansard" | "shed";
5638
+ roofHeight: number;
5639
+ shedHighSide: "back" | "front";
5640
+ wallSkirtHeight: number;
5641
+ windowWidth: number;
5642
+ windowHeight: number;
5643
+ windowOffsetX: number;
5644
+ windowOffsetY: number;
5645
+ windowFrameThickness: number;
5646
+ windowFrameDepth: number;
5647
+ windowColumns: number;
5648
+ windowRows: number;
5649
+ windowDividerThickness: number;
5650
+ windowShape: "arch" | "rectangle" | "rounded";
5651
+ windowArchHeight: number;
5652
+ windowCornerRadii: [number, number, number, number];
5653
+ windowSill: boolean;
5654
+ windowSillDepth: number;
5655
+ windowSillThickness: number;
5656
+ children: `window_${string}`[];
5657
+ type: "dormer";
5658
+ } | {
5659
+ object: "node";
5660
+ name?: string | undefined;
5661
+ parentId: string | null;
5662
+ visible: boolean;
5663
+ camera?: {
5664
+ position: [number, number, number];
5665
+ target: [number, number, number];
5666
+ mode: "orthographic" | "perspective";
5667
+ fov?: number | undefined;
5668
+ zoom?: number | undefined;
5669
+ } | undefined;
5670
+ metadata: Record<string, unknown>;
5671
+ provenance?: {
5672
+ refs: {
5673
+ ns?: string | undefined;
5674
+ id: string;
5675
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
5676
+ }[];
5677
+ lineage?: {
5678
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
5679
+ fromIds: string[];
5680
+ } | undefined;
5681
+ } | undefined;
5682
+ id: `downspout_${string}`;
5683
+ material?: {
5684
+ id?: string | undefined;
5685
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
5686
+ properties?: {
5687
+ color: string;
5688
+ roughness: number;
5689
+ metalness: number;
5690
+ opacity: number;
5691
+ transparent: boolean;
5692
+ side: "back" | "double" | "front";
5693
+ } | undefined;
5694
+ texture?: {
5695
+ url: string;
5696
+ repeat?: [number, number] | undefined;
5697
+ scale?: number | undefined;
5698
+ offset?: [number, number] | undefined;
5699
+ normalMap?: string | undefined;
5700
+ normalScale?: number | undefined;
5701
+ bumpMap?: string | undefined;
5702
+ bumpScale?: number | undefined;
5703
+ } | undefined;
5704
+ } | undefined;
5705
+ slots?: Record<string, string> | undefined;
5706
+ materialPreset: string;
5707
+ gutterId?: string | undefined;
5708
+ outletId?: string | undefined;
5709
+ length: number;
5710
+ lengthMode?: "manual" | "to-ground" | undefined;
5711
+ diameter: number;
5712
+ standoff: number;
5713
+ shape: "auto" | "rect" | "round";
5714
+ strapStyle: "band" | "none";
5715
+ strapSpacing: number;
5716
+ terminal: "kickout" | "splash" | "straight";
5717
+ type: "downspout";
5718
+ }>;
5719
+ /** Undo and redo land each node with `imagesForBuild` of its live and snapshot images. */
5720
+ export declare function retainSceneAnnotations(before: Record<AnyNodeId, AnyNode>, after: Record<AnyNodeId, AnyNode>): Record<`beam_${string}` | `block_${string}` | `building_${string}` | `bvent_${string}` | `cabinet-module_${string}` | `cabinet_${string}` | `ceiling_${string}` | `chimney_${string}` | `column_${string}` | `construction-dimension_${string}` | `cupola_${string}` | `door_${string}` | `dormer_${string}` | `downspout_${string}` | `duct-fitting_${string}` | `duct-segment_${string}` | `duct-terminal_${string}` | `elevator_${string}` | `eyebrow-vent_${string}` | `fence-gate_${string}` | `fence-opening_${string}` | `fence_${string}` | `floor-opening_${string}` | `guide_${string}` | `gutter_${string}` | `hvac-equipment_${string}` | `imesh_${string}` | `item_${string}` | `leanto_${string}` | `level_${string}` | `lineset_${string}` | `liquid-line_${string}` | `measurement_${string}` | `pipe-fitting_${string}` | `pipe-segment_${string}` | `pipe-trap_${string}` | `procedural-item_${string}` | `roof_${string}` | `rseg_${string}` | `rvent_${string}` | `scan_${string}` | `separator_${string}` | `shelf_${string}` | `site_${string}` | `skylight_${string}` | `slab_${string}` | `solarpanel_${string}` | `spawn_${string}` | `sseg_${string}` | `stair_${string}` | `structural-grid_${string}` | `tvent_${string}` | `unit_${string}` | `wall_${string}` | `window_${string}` | `zone_${string}`, {
5721
+ object: "node";
5722
+ name?: string | undefined;
5723
+ parentId: string | null;
5724
+ visible: boolean;
5725
+ camera?: {
5726
+ position: [number, number, number];
5727
+ target: [number, number, number];
5728
+ mode: "orthographic" | "perspective";
5729
+ fov?: number | undefined;
5730
+ zoom?: number | undefined;
5731
+ } | undefined;
5732
+ metadata: Record<string, unknown>;
5733
+ provenance?: {
5734
+ refs: {
5735
+ ns?: string | undefined;
5736
+ id: string;
5737
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
5738
+ }[];
5739
+ lineage?: {
5740
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
5741
+ fromIds: string[];
5742
+ } | undefined;
5743
+ } | undefined;
5744
+ id: `block_${string}`;
5745
+ children: string[];
5746
+ position: [number, number, number];
5747
+ rotation: number;
5748
+ supportSlabId?: string | undefined;
5749
+ topology: {
5750
+ vertices: {
5751
+ id: string;
5752
+ position: [number, number, number];
5753
+ }[];
5754
+ edges: {
5755
+ id: string;
5756
+ vertexIds: [string, string];
5757
+ }[];
5758
+ faces: {
5759
+ id: string;
5760
+ vertexIds: string[];
5761
+ materialSlot: string;
5762
+ }[];
5763
+ };
5764
+ slots: Record<string, string>;
5765
+ slotNames: Record<string, string>;
5766
+ type: "block";
6107
5767
  } | {
6108
5768
  object: "node";
6109
5769
  name?: string | undefined;
@@ -6164,6 +5824,112 @@ export declare function retainSceneAnnotations(before: Record<AnyNodeId, AnyNode
6164
5824
  }[];
6165
5825
  controllingDimensionId: `construction-dimension_${string}` | null;
6166
5826
  type: "construction-dimension";
5827
+ } | {
5828
+ object: "node";
5829
+ name?: string | undefined;
5830
+ parentId: string | null;
5831
+ visible: boolean;
5832
+ camera?: {
5833
+ position: [number, number, number];
5834
+ target: [number, number, number];
5835
+ mode: "orthographic" | "perspective";
5836
+ fov?: number | undefined;
5837
+ zoom?: number | undefined;
5838
+ } | undefined;
5839
+ metadata: Record<string, unknown>;
5840
+ provenance?: {
5841
+ refs: {
5842
+ ns?: string | undefined;
5843
+ id: string;
5844
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
5845
+ }[];
5846
+ lineage?: {
5847
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
5848
+ fromIds: string[];
5849
+ } | undefined;
5850
+ } | undefined;
5851
+ id: `duct-terminal_${string}`;
5852
+ position: [number, number, number];
5853
+ rotation: number;
5854
+ supportSlabId?: string | undefined;
5855
+ terminalType: "diffuser" | "return-grille" | "supply-register";
5856
+ mount: "ceiling" | "floor" | "wall";
5857
+ width: number;
5858
+ depth: number;
5859
+ collarShape: "oval" | "rect" | "round";
5860
+ collarDiameter: number;
5861
+ collarWidth: number;
5862
+ collarHeight: number;
5863
+ type: "duct-terminal";
5864
+ } | {
5865
+ object: "node";
5866
+ name?: string | undefined;
5867
+ parentId: string | null;
5868
+ visible: boolean;
5869
+ camera?: {
5870
+ position: [number, number, number];
5871
+ target: [number, number, number];
5872
+ mode: "orthographic" | "perspective";
5873
+ fov?: number | undefined;
5874
+ zoom?: number | undefined;
5875
+ } | undefined;
5876
+ metadata: Record<string, unknown>;
5877
+ provenance?: {
5878
+ refs: {
5879
+ ns?: string | undefined;
5880
+ id: string;
5881
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
5882
+ }[];
5883
+ lineage?: {
5884
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
5885
+ fromIds: string[];
5886
+ } | undefined;
5887
+ } | undefined;
5888
+ id: `guide_${string}`;
5889
+ url: string;
5890
+ position: [number, number, number];
5891
+ rotation: [number, number, number];
5892
+ scale: number;
5893
+ opacity: number;
5894
+ scaleReference: {
5895
+ start: [number, number];
5896
+ end: [number, number];
5897
+ realLengthMeters: number;
5898
+ measuredLengthUnits: number;
5899
+ metersPerUnit: number;
5900
+ displayLength?: number | undefined;
5901
+ displayUnit?: "centimeters" | "feet" | "inches" | "meters" | undefined;
5902
+ label: string;
5903
+ } | null;
5904
+ type: "guide";
5905
+ } | {
5906
+ object: "node";
5907
+ name?: string | undefined;
5908
+ parentId: string | null;
5909
+ visible: boolean;
5910
+ camera?: {
5911
+ position: [number, number, number];
5912
+ target: [number, number, number];
5913
+ mode: "orthographic" | "perspective";
5914
+ fov?: number | undefined;
5915
+ zoom?: number | undefined;
5916
+ } | undefined;
5917
+ metadata: Record<string, unknown>;
5918
+ provenance?: {
5919
+ refs: {
5920
+ ns?: string | undefined;
5921
+ id: string;
5922
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
5923
+ }[];
5924
+ lineage?: {
5925
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
5926
+ fromIds: string[];
5927
+ } | undefined;
5928
+ } | undefined;
5929
+ id: `liquid-line_${string}`;
5930
+ path: [number, number, number][];
5931
+ diameter: number;
5932
+ type: "liquid-line";
6167
5933
  } | {
6168
5934
  object: "node";
6169
5935
  name?: string | undefined;
@@ -6358,28 +6124,251 @@ export declare function retainSceneAnnotations(before: Record<AnyNodeId, AnyNode
6358
6124
  lift?: number | undefined;
6359
6125
  src?: string | undefined;
6360
6126
  }[];
6361
- backing?: {
6362
- id: string;
6363
- role: "air" | "covering" | "deck" | "fill" | "finish" | "furring" | "glazing" | "insulation" | "lining" | "membrane" | "sheathing" | "shell" | "structure" | "substrate" | "underlay";
6364
- thickness: number;
6365
- core?: true | undefined;
6366
- spacing?: number | undefined;
6367
- material?: string | undefined;
6368
- slot?: string | undefined;
6369
- returns?: boolean | undefined;
6370
- display?: "construction" | "finished" | undefined;
6371
- inset?: number | undefined;
6372
- bottom?: number | undefined;
6373
- lift?: number | undefined;
6374
- src?: string | undefined;
6127
+ backing?: {
6128
+ id: string;
6129
+ role: "air" | "covering" | "deck" | "fill" | "finish" | "furring" | "glazing" | "insulation" | "lining" | "membrane" | "sheathing" | "shell" | "structure" | "substrate" | "underlay";
6130
+ thickness: number;
6131
+ core?: true | undefined;
6132
+ spacing?: number | undefined;
6133
+ material?: string | undefined;
6134
+ slot?: string | undefined;
6135
+ returns?: boolean | undefined;
6136
+ display?: "construction" | "finished" | undefined;
6137
+ inset?: number | undefined;
6138
+ bottom?: number | undefined;
6139
+ lift?: number | undefined;
6140
+ src?: string | undefined;
6141
+ }[] | undefined;
6142
+ face?: "exterior" | "front" | undefined;
6143
+ presetId?: string | undefined;
6144
+ cavityInsulation?: string | undefined;
6145
+ };
6146
+ }[] | undefined;
6147
+ children: string[];
6148
+ type: "site";
6149
+ } | {
6150
+ object: "node";
6151
+ name?: string | undefined;
6152
+ parentId: string | null;
6153
+ visible: boolean;
6154
+ camera?: {
6155
+ position: [number, number, number];
6156
+ target: [number, number, number];
6157
+ mode: "orthographic" | "perspective";
6158
+ fov?: number | undefined;
6159
+ zoom?: number | undefined;
6160
+ } | undefined;
6161
+ metadata: Record<string, unknown>;
6162
+ provenance?: {
6163
+ refs: {
6164
+ ns?: string | undefined;
6165
+ id: string;
6166
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
6167
+ }[];
6168
+ lineage?: {
6169
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
6170
+ fromIds: string[];
6171
+ } | undefined;
6172
+ } | undefined;
6173
+ type: "item";
6174
+ id: `item_${string}`;
6175
+ position: [number, number, number];
6176
+ rotation: [number, number, number];
6177
+ scale: [number, number, number];
6178
+ side?: "back" | "front" | undefined;
6179
+ children: string[];
6180
+ wallId?: string | undefined;
6181
+ wallT?: number | undefined;
6182
+ roofSegmentId?: string | undefined;
6183
+ roofFace?: "back" | "front" | "left" | "right" | undefined;
6184
+ blockFaceId?: string | undefined;
6185
+ supportSlabId?: string | undefined;
6186
+ collectionIds?: `collection_${string}`[] | undefined;
6187
+ slots?: Record<string, string> | undefined;
6188
+ source?: {
6189
+ kind: "script";
6190
+ meta?: {
6191
+ description?: string | undefined;
6192
+ category?: string | undefined;
6193
+ tags?: string[] | undefined;
6194
+ parent?: string | undefined;
6195
+ } | undefined;
6196
+ language: "bpy" | "three";
6197
+ script: string;
6198
+ params: Record<string, string | number | boolean>;
6199
+ artifact: string;
6200
+ manifest: {
6201
+ bounds: {
6202
+ min: [number, number, number];
6203
+ max: [number, number, number];
6204
+ };
6205
+ params: {
6206
+ id: string;
6207
+ label?: string | undefined;
6208
+ kind: "boolean" | "number" | "string";
6209
+ default: string | number | boolean;
6210
+ min?: number | undefined;
6211
+ max?: number | undefined;
6212
+ step?: number | undefined;
6213
+ unit?: string | undefined;
6214
+ options?: string[] | undefined;
6215
+ }[];
6216
+ parts: {
6217
+ id: string;
6218
+ label?: string | undefined;
6219
+ type?: string | undefined;
6220
+ bounds?: {
6221
+ min: [number, number, number];
6222
+ max: [number, number, number];
6223
+ } | undefined;
6224
+ }[];
6225
+ surfaces: {
6226
+ part?: string | undefined;
6227
+ y: number;
6228
+ polygon: [number, number][];
6229
+ }[];
6230
+ slots: {
6231
+ id: string;
6232
+ label?: string | undefined;
6233
+ color?: string | undefined;
6234
+ roughness?: number | undefined;
6235
+ metalness?: number | undefined;
6236
+ transparent?: boolean | undefined;
6237
+ emissive?: boolean | undefined;
6238
+ }[];
6239
+ anchors: {
6240
+ id: string;
6241
+ position: [number, number, number];
6242
+ normal?: [number, number, number] | undefined;
6243
+ }[];
6244
+ lights: {
6245
+ id: string;
6246
+ position: [number, number, number];
6247
+ color: string;
6248
+ intensity: number;
6249
+ distance?: number | undefined;
6250
+ spot?: {
6251
+ direction: [number, number, number];
6252
+ angle: number;
6253
+ softness: number;
6254
+ } | undefined;
6255
+ shadows?: boolean | undefined;
6256
+ glow?: {
6257
+ size: number;
6258
+ strength: number;
6259
+ } | undefined;
6260
+ }[];
6261
+ undersides: {
6262
+ part?: string | undefined;
6263
+ polygon: [number, number][];
6264
+ plane: [number, number, number, number];
6265
+ }[];
6266
+ animations: {
6267
+ name: string;
6268
+ duration: number;
6269
+ }[];
6270
+ cutters?: {
6271
+ host: "ceiling" | "mounted" | "slab" | "wall";
6272
+ polygon: number[][];
6273
+ minY: number;
6274
+ maxY: number;
6275
+ }[] | undefined;
6276
+ cutout: boolean;
6277
+ collider: boolean;
6278
+ shape?: {
6279
+ tolerance: number;
6280
+ bands: {
6281
+ y0: number;
6282
+ y1: number;
6283
+ polygons: {
6284
+ outer: [number, number][];
6285
+ holes?: [number, number][][] | undefined;
6286
+ }[];
6287
+ }[];
6288
+ } | undefined;
6289
+ triangles: number;
6290
+ coverage?: number | undefined;
6291
+ uncovered?: {
6292
+ min: [number, number];
6293
+ max: [number, number];
6375
6294
  }[] | undefined;
6376
- face?: "exterior" | "front" | undefined;
6377
- presetId?: string | undefined;
6378
- cavityInsulation?: string | undefined;
6379
6295
  };
6380
- }[] | undefined;
6381
- children: string[];
6382
- type: "site";
6296
+ images?: {
6297
+ artifact: string;
6298
+ thumbnail: string;
6299
+ floorPlan: string;
6300
+ } | undefined;
6301
+ } | undefined;
6302
+ asset: {
6303
+ id: string;
6304
+ category: string;
6305
+ name: string;
6306
+ thumbnail: string;
6307
+ floorPlanUrl?: string | undefined;
6308
+ source: "community" | "library" | "mine";
6309
+ isDraft?: boolean | undefined;
6310
+ src: string;
6311
+ dimensions: [number, number, number];
6312
+ attachTo?: "ceiling" | "wall" | "wall-side" | undefined;
6313
+ recessed?: boolean | undefined;
6314
+ tags?: string[] | undefined;
6315
+ functionTags?: string[] | undefined;
6316
+ offset: [number, number, number];
6317
+ rotation: [number, number, number];
6318
+ scale: [number, number, number];
6319
+ surface?: {
6320
+ height: number;
6321
+ } | undefined;
6322
+ interactive?: {
6323
+ controls: ({
6324
+ kind: "toggle";
6325
+ label?: string | undefined;
6326
+ default?: boolean | undefined;
6327
+ } | {
6328
+ kind: "slider";
6329
+ label: string;
6330
+ min: number;
6331
+ max: number;
6332
+ step: number;
6333
+ unit?: string | undefined;
6334
+ displayMode: "dial" | "slider" | "stepper";
6335
+ default?: number | undefined;
6336
+ } | {
6337
+ kind: "temperature";
6338
+ label: string;
6339
+ min: number;
6340
+ max: number;
6341
+ unit: "C" | "F";
6342
+ default?: number | undefined;
6343
+ })[];
6344
+ effects: ({
6345
+ kind: "animation";
6346
+ mode?: "ambient" | "open-close" | undefined;
6347
+ control?: number | undefined;
6348
+ clips: {
6349
+ on?: string | undefined;
6350
+ off?: string | undefined;
6351
+ loop?: string | undefined;
6352
+ };
6353
+ } | {
6354
+ kind: "light";
6355
+ color: string;
6356
+ intensityRange: [number, number];
6357
+ distance?: number | undefined;
6358
+ offset: [number, number, number];
6359
+ spot?: {
6360
+ direction: [number, number, number];
6361
+ angle: number;
6362
+ softness: number;
6363
+ } | undefined;
6364
+ shadows?: boolean | undefined;
6365
+ glow?: {
6366
+ size: number;
6367
+ strength: number;
6368
+ } | undefined;
6369
+ })[];
6370
+ } | undefined;
6371
+ };
6383
6372
  } | {
6384
6373
  object: "node";
6385
6374
  name?: string | undefined;
@@ -7610,7 +7599,7 @@ export declare function retainSceneAnnotations(before: Record<AnyNodeId, AnyNode
7610
7599
  cavityInsulation?: string | undefined;
7611
7600
  } | undefined;
7612
7601
  slots?: Record<string, string> | undefined;
7613
- children: `rseg_${string}`[];
7602
+ children: string[];
7614
7603
  type: "roof";
7615
7604
  } | {
7616
7605
  object: "node";
@@ -8638,53 +8627,6 @@ export declare function retainSceneAnnotations(before: Record<AnyNodeId, AnyNode
8638
8627
  topElevation?: number | undefined;
8639
8628
  supportSlabId?: string | undefined;
8640
8629
  type: "beam";
8641
- } | {
8642
- object: "node";
8643
- name?: string | undefined;
8644
- parentId: string | null;
8645
- visible: boolean;
8646
- camera?: {
8647
- position: [number, number, number];
8648
- target: [number, number, number];
8649
- mode: "orthographic" | "perspective";
8650
- fov?: number | undefined;
8651
- zoom?: number | undefined;
8652
- } | undefined;
8653
- metadata: Record<string, unknown>;
8654
- provenance?: {
8655
- refs: {
8656
- ns?: string | undefined;
8657
- id: string;
8658
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
8659
- }[];
8660
- lineage?: {
8661
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
8662
- fromIds: string[];
8663
- } | undefined;
8664
- } | undefined;
8665
- id: `block_${string}`;
8666
- children: string[];
8667
- position: [number, number, number];
8668
- rotation: number;
8669
- supportSlabId?: string | undefined;
8670
- topology: {
8671
- vertices: {
8672
- id: string;
8673
- position: [number, number, number];
8674
- }[];
8675
- edges: {
8676
- id: string;
8677
- vertexIds: [string, string];
8678
- }[];
8679
- faces: {
8680
- id: string;
8681
- vertexIds: string[];
8682
- materialSlot: string;
8683
- }[];
8684
- };
8685
- slots: Record<string, string>;
8686
- slotNames: Record<string, string>;
8687
- type: "block";
8688
8630
  } | {
8689
8631
  object: "node";
8690
8632
  name?: string | undefined;
@@ -9128,40 +9070,132 @@ export declare function retainSceneAnnotations(before: Record<AnyNodeId, AnyNode
9128
9070
  gap?: number | undefined;
9129
9071
  direction?: "diagonal" | "parallel" | "perpendicular" | undefined;
9130
9072
  } | undefined;
9131
- ceiling?: {
9132
- regions?: {
9133
- id: string;
9134
- polygon: [number, number][];
9135
- finish: string | Record<string, unknown>;
9136
- }[] | undefined;
9073
+ ceiling?: {
9074
+ regions?: {
9075
+ id: string;
9076
+ polygon: [number, number][];
9077
+ finish: string | Record<string, unknown>;
9078
+ }[] | undefined;
9079
+ } | undefined;
9080
+ floorStepFinish?: string | undefined;
9081
+ floorStepOverrides?: {
9082
+ key: string;
9083
+ step?: number | undefined;
9084
+ finish: string;
9085
+ }[] | undefined;
9086
+ floorEdgeFinish?: string | undefined;
9087
+ wallMaterial?: string | undefined;
9088
+ wallOverrides?: {
9089
+ wallId: string;
9090
+ face: "a" | "b";
9091
+ finish: string;
9092
+ }[] | undefined;
9093
+ hasFloor?: false | undefined;
9094
+ hasCeiling?: false | undefined;
9095
+ spaceRole: "generic" | "room";
9096
+ roomNumber: string;
9097
+ enclosureStatus: "auto" | "enclosed" | "open";
9098
+ floorFinish: string;
9099
+ wallFinish: string;
9100
+ ceilingFinish: string;
9101
+ ceilingHeight: number;
9102
+ occupancy: string;
9103
+ clearDimensionPolicy: "finish-faces" | "inside-faces" | "none";
9104
+ color: string;
9105
+ metadata: Record<string, unknown>;
9106
+ type: "zone";
9107
+ } | {
9108
+ object: "node";
9109
+ name?: string | undefined;
9110
+ parentId: string | null;
9111
+ visible: boolean;
9112
+ camera?: {
9113
+ position: [number, number, number];
9114
+ target: [number, number, number];
9115
+ mode: "orthographic" | "perspective";
9116
+ fov?: number | undefined;
9117
+ zoom?: number | undefined;
9118
+ } | undefined;
9119
+ metadata: Record<string, unknown>;
9120
+ provenance?: {
9121
+ refs: {
9122
+ ns?: string | undefined;
9123
+ id: string;
9124
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
9125
+ }[];
9126
+ lineage?: {
9127
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
9128
+ fromIds: string[];
9129
+ } | undefined;
9130
+ } | undefined;
9131
+ id: `ceiling_${string}`;
9132
+ children: (`item_${string}` | `procedural-item_${string}`)[];
9133
+ material?: {
9134
+ id?: string | undefined;
9135
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
9136
+ properties?: {
9137
+ color: string;
9138
+ roughness: number;
9139
+ metalness: number;
9140
+ opacity: number;
9141
+ transparent: boolean;
9142
+ side: "back" | "double" | "front";
9143
+ } | undefined;
9144
+ texture?: {
9145
+ url: string;
9146
+ repeat?: [number, number] | undefined;
9147
+ scale?: number | undefined;
9148
+ offset?: [number, number] | undefined;
9149
+ normalMap?: string | undefined;
9150
+ normalScale?: number | undefined;
9151
+ bumpMap?: string | undefined;
9152
+ bumpScale?: number | undefined;
9153
+ } | undefined;
9154
+ } | undefined;
9155
+ materialPreset?: string | undefined;
9156
+ slots?: Record<string, string> | undefined;
9157
+ polygon: [number, number][];
9158
+ holes: [number, number][][];
9159
+ holeMetadata: {
9160
+ source: "elevator" | "floor-opening" | "manual" | "room" | "stair";
9161
+ openingId?: string | undefined;
9162
+ stairId?: string | undefined;
9163
+ elevatorId?: string | undefined;
9164
+ }[];
9165
+ openingIds?: string[] | undefined;
9166
+ height?: number | undefined;
9167
+ buildUp?: {
9168
+ presetId?: string | undefined;
9169
+ finish?: {
9170
+ kind: "drywall" | "plaster" | "wood-plank";
9171
+ thickness: number;
9172
+ name?: string | undefined;
9173
+ } | undefined;
9174
+ framing?: {
9175
+ system: "joists" | "truss-chords";
9176
+ size: "2x10" | "2x12" | "2x4" | "2x6" | "2x8";
9177
+ spacing: number;
9178
+ } | undefined;
9179
+ decking?: {
9180
+ kind: "osb" | "plywood";
9181
+ thickness: number;
9182
+ name?: string | undefined;
9183
+ } | undefined;
9184
+ insulation?: {
9185
+ kind: "batt" | "blown" | "rigid";
9186
+ thickness: number;
9187
+ name?: string | undefined;
9188
+ } | undefined;
9137
9189
  } | undefined;
9138
- floorStepFinish?: string | undefined;
9139
- floorStepOverrides?: {
9140
- key: string;
9141
- step?: number | undefined;
9142
- finish: string;
9143
- }[] | undefined;
9144
- floorEdgeFinish?: string | undefined;
9145
- wallMaterial?: string | undefined;
9146
- wallOverrides?: {
9147
- wallId: string;
9148
- face: "a" | "b";
9149
- finish: string;
9190
+ regions?: {
9191
+ id: string;
9192
+ polygon: [number, number][];
9193
+ finish: string | Record<string, unknown>;
9150
9194
  }[] | undefined;
9151
- hasFloor?: false | undefined;
9152
- hasCeiling?: false | undefined;
9153
- spaceRole: "generic" | "room";
9154
- roomNumber: string;
9155
- enclosureStatus: "auto" | "enclosed" | "open";
9156
- floorFinish: string;
9157
- wallFinish: string;
9158
- ceilingFinish: string;
9159
- ceilingHeight: number;
9160
- occupancy: string;
9161
- clearDimensionPolicy: "finish-faces" | "inside-faces" | "none";
9162
- color: string;
9163
- metadata: Record<string, unknown>;
9164
- type: "zone";
9195
+ boundary?: "auto" | undefined;
9196
+ zoneId?: string | undefined;
9197
+ autoFromWalls: boolean;
9198
+ type: "ceiling";
9165
9199
  } | {
9166
9200
  object: "node";
9167
9201
  name?: string | undefined;
@@ -9471,47 +9505,6 @@ export declare function retainSceneAnnotations(before: Record<AnyNodeId, AnyNode
9471
9505
  scale: number;
9472
9506
  opacity: number;
9473
9507
  type: "scan";
9474
- } | {
9475
- object: "node";
9476
- name?: string | undefined;
9477
- parentId: string | null;
9478
- visible: boolean;
9479
- camera?: {
9480
- position: [number, number, number];
9481
- target: [number, number, number];
9482
- mode: "orthographic" | "perspective";
9483
- fov?: number | undefined;
9484
- zoom?: number | undefined;
9485
- } | undefined;
9486
- metadata: Record<string, unknown>;
9487
- provenance?: {
9488
- refs: {
9489
- ns?: string | undefined;
9490
- id: string;
9491
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
9492
- }[];
9493
- lineage?: {
9494
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
9495
- fromIds: string[];
9496
- } | undefined;
9497
- } | undefined;
9498
- id: `guide_${string}`;
9499
- url: string;
9500
- position: [number, number, number];
9501
- rotation: [number, number, number];
9502
- scale: number;
9503
- opacity: number;
9504
- scaleReference: {
9505
- start: [number, number];
9506
- end: [number, number];
9507
- realLengthMeters: number;
9508
- measuredLengthUnits: number;
9509
- metersPerUnit: number;
9510
- displayLength?: number | undefined;
9511
- displayUnit?: "centimeters" | "feet" | "inches" | "meters" | undefined;
9512
- label: string;
9513
- } | null;
9514
- type: "guide";
9515
9508
  } | {
9516
9509
  object: "node";
9517
9510
  name?: string | undefined;
@@ -9814,43 +9807,6 @@ export declare function retainSceneAnnotations(before: Record<AnyNodeId, AnyNode
9814
9807
  panelHeight: number;
9815
9808
  slots?: Record<string, string> | undefined;
9816
9809
  type: "duct-fitting";
9817
- } | {
9818
- object: "node";
9819
- name?: string | undefined;
9820
- parentId: string | null;
9821
- visible: boolean;
9822
- camera?: {
9823
- position: [number, number, number];
9824
- target: [number, number, number];
9825
- mode: "orthographic" | "perspective";
9826
- fov?: number | undefined;
9827
- zoom?: number | undefined;
9828
- } | undefined;
9829
- metadata: Record<string, unknown>;
9830
- provenance?: {
9831
- refs: {
9832
- ns?: string | undefined;
9833
- id: string;
9834
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
9835
- }[];
9836
- lineage?: {
9837
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
9838
- fromIds: string[];
9839
- } | undefined;
9840
- } | undefined;
9841
- id: `duct-terminal_${string}`;
9842
- position: [number, number, number];
9843
- rotation: number;
9844
- supportSlabId?: string | undefined;
9845
- terminalType: "diffuser" | "return-grille" | "supply-register";
9846
- mount: "ceiling" | "floor" | "wall";
9847
- width: number;
9848
- depth: number;
9849
- collarShape: "oval" | "rect" | "round";
9850
- collarDiameter: number;
9851
- collarWidth: number;
9852
- collarHeight: number;
9853
- type: "duct-terminal";
9854
9810
  } | {
9855
9811
  object: "node";
9856
9812
  name?: string | undefined;
@@ -9922,34 +9878,6 @@ export declare function retainSceneAnnotations(before: Record<AnyNodeId, AnyNode
9922
9878
  liquidDiameter: number;
9923
9879
  insulated: boolean;
9924
9880
  type: "lineset";
9925
- } | {
9926
- object: "node";
9927
- name?: string | undefined;
9928
- parentId: string | null;
9929
- visible: boolean;
9930
- camera?: {
9931
- position: [number, number, number];
9932
- target: [number, number, number];
9933
- mode: "orthographic" | "perspective";
9934
- fov?: number | undefined;
9935
- zoom?: number | undefined;
9936
- } | undefined;
9937
- metadata: Record<string, unknown>;
9938
- provenance?: {
9939
- refs: {
9940
- ns?: string | undefined;
9941
- id: string;
9942
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
9943
- }[];
9944
- lineage?: {
9945
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
9946
- fromIds: string[];
9947
- } | undefined;
9948
- } | undefined;
9949
- id: `liquid-line_${string}`;
9950
- path: [number, number, number][];
9951
- diameter: number;
9952
- type: "liquid-line";
9953
9881
  } | {
9954
9882
  object: "node";
9955
9883
  name?: string | undefined;
@@ -10092,6 +10020,78 @@ export declare function retainSceneAnnotations(before: Record<AnyNodeId, AnyNode
10092
10020
  baseElevation: number;
10093
10021
  height?: number | undefined;
10094
10022
  type: "level";
10023
+ } | {
10024
+ object: "node";
10025
+ name?: string | undefined;
10026
+ parentId: string | null;
10027
+ visible: boolean;
10028
+ camera?: {
10029
+ position: [number, number, number];
10030
+ target: [number, number, number];
10031
+ mode: "orthographic" | "perspective";
10032
+ fov?: number | undefined;
10033
+ zoom?: number | undefined;
10034
+ } | undefined;
10035
+ metadata: Record<string, unknown>;
10036
+ provenance?: {
10037
+ refs: {
10038
+ ns?: string | undefined;
10039
+ id: string;
10040
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
10041
+ }[];
10042
+ lineage?: {
10043
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
10044
+ fromIds: string[];
10045
+ } | undefined;
10046
+ } | undefined;
10047
+ id: `elevator_${string}`;
10048
+ material?: {
10049
+ id?: string | undefined;
10050
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
10051
+ properties?: {
10052
+ color: string;
10053
+ roughness: number;
10054
+ metalness: number;
10055
+ opacity: number;
10056
+ transparent: boolean;
10057
+ side: "back" | "double" | "front";
10058
+ } | undefined;
10059
+ texture?: {
10060
+ url: string;
10061
+ repeat?: [number, number] | undefined;
10062
+ scale?: number | undefined;
10063
+ offset?: [number, number] | undefined;
10064
+ normalMap?: string | undefined;
10065
+ normalScale?: number | undefined;
10066
+ bumpMap?: string | undefined;
10067
+ bumpScale?: number | undefined;
10068
+ } | undefined;
10069
+ } | undefined;
10070
+ materialPreset?: string | undefined;
10071
+ slots?: Record<string, string> | undefined;
10072
+ position: [number, number, number];
10073
+ rotation: number;
10074
+ width: number;
10075
+ depth: number;
10076
+ shaftWidth?: number | undefined;
10077
+ shaftDepth?: number | undefined;
10078
+ shaftWallThickness: number;
10079
+ shaftStyle: "glass" | "solid";
10080
+ cabHeight: number;
10081
+ doorWidth: number;
10082
+ doorHeight: number;
10083
+ doorStyle: "center-opening" | "single-left" | "single-right";
10084
+ doorPanelStyle: "glass-frame" | "segmented-panel" | "solid-panel";
10085
+ fromLevelId: string | null;
10086
+ toLevelId: string | null;
10087
+ servedLevelIds?: string[] | undefined;
10088
+ disabledLevelIds: string[];
10089
+ serviceOnlyLevelIds: string[];
10090
+ defaultLevelId: string | null;
10091
+ speed: number;
10092
+ doorDurationMs: number;
10093
+ dwellMs: number;
10094
+ type: "elevator";
10095
10095
  } | {
10096
10096
  object: "node";
10097
10097
  parentId: string | null;