@pascal-app/core 1.1.1 → 1.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/dist/agent-operations/__fixtures__/roof-bearing-cases.d.ts +13453 -13453
  2. package/dist/agent-operations/batch.d.ts +4 -8
  3. package/dist/agent-operations/batch.d.ts.map +1 -1
  4. package/dist/agent-operations/batch.js +7 -19
  5. package/dist/agent-operations/circulation-spaces.d.ts +3431 -3431
  6. package/dist/agent-operations/index.d.ts +5715 -9
  7. package/dist/agent-operations/index.d.ts.map +1 -1
  8. package/dist/agent-operations/index.js +16 -5
  9. package/dist/agent-operations/scene-queries.d.ts +2610 -2610
  10. package/dist/agent-operations/types.d.ts +7 -0
  11. package/dist/agent-operations/types.d.ts.map +1 -1
  12. package/dist/agent-operations/usage-checks.js +2 -2
  13. package/dist/agent-operations/verify-scene.d.ts +7 -3
  14. package/dist/agent-operations/verify-scene.d.ts.map +1 -1
  15. package/dist/agent-operations/verify-scene.js +15 -7
  16. package/dist/building/__fixtures__/wall-opening-cases.d.ts +238 -238
  17. package/dist/building/level-duplication.d.ts +1274 -1274
  18. package/dist/commands/structure/zone-wall-merge.d.ts +568 -568
  19. package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts +2610 -2610
  20. package/dist/lib/__fixtures__/mezzanine.d.ts +10874 -10874
  21. package/dist/lib/absorb-wall-separators.d.ts +635 -635
  22. package/dist/lib/steps.d.ts +8 -0
  23. package/dist/lib/steps.d.ts.map +1 -0
  24. package/dist/lib/steps.js +7 -0
  25. package/dist/spatial/usage-field/findings.d.ts +3 -0
  26. package/dist/spatial/usage-field/findings.d.ts.map +1 -1
  27. package/dist/spatial/usage-field/findings.js +17 -5
  28. package/dist/spatial/usage-field/measure.d.ts +3 -1
  29. package/dist/spatial/usage-field/measure.d.ts.map +1 -1
  30. package/dist/spatial/usage-field/measure.js +7 -2
  31. package/dist/store/actions/node-actions.d.ts +3431 -3431
  32. package/dist/store/scene-annotations.d.ts +1193 -1193
  33. package/dist/systems/slab/__fixtures__/floor-step.d.ts +3431 -3431
  34. package/dist/systems/slab/__fixtures__/raised-room.d.ts +2610 -2610
  35. package/dist/systems/stair/stair-opening-preview.d.ts +2610 -2610
  36. package/dist/utils/ensure-scene-openings.d.ts +6215 -6215
  37. package/dist/utils/floor-plate-migration.d.ts +635 -635
  38. package/dist/utils/owned-floor-opening-migration.d.ts +635 -635
  39. package/dist/utils/reconcile-structure-on-load.d.ts +3431 -3431
  40. package/package.json +1 -1
@@ -32,29 +32,47 @@ export declare function withoutSceneAnnotations(nodes: Record<AnyNodeId, AnyNode
32
32
  fromIds: string[];
33
33
  } | undefined;
34
34
  } | undefined;
35
- id: `block_${string}`;
36
- children: string[];
35
+ id: `bvent_${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";
46
+ } | 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;
56
+ } | undefined;
57
+ } | undefined;
58
+ slots?: Record<string, string> | undefined;
59
+ materialPreset: string;
60
+ roofSegmentId?: string | undefined;
37
61
  position: [number, number, number];
38
62
  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";
63
+ width: number;
64
+ depth: number;
65
+ height: number;
66
+ hoodOverhang: number;
67
+ topTaper: number;
68
+ capHeight: number;
69
+ capGap: number;
70
+ domeCurvature: number;
71
+ baseInset: number;
72
+ baseHeight: number;
73
+ cornerBevel: number;
74
+ style: "box" | "cap" | "dome";
75
+ type: "box-vent";
58
76
  } | {
59
77
  object: "node";
60
78
  name?: string | undefined;
@@ -79,42 +97,223 @@ export declare function withoutSceneAnnotations(nodes: Record<AnyNodeId, AnyNode
79
97
  fromIds: string[];
80
98
  } | undefined;
81
99
  } | 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;
100
+ id: `column_${string}`;
101
+ children: string[];
102
+ position: [number, number, number];
103
+ rotation: number;
104
+ supportSlabId?: string | undefined;
105
+ source?: {
106
+ kind: "script";
107
+ meta?: {
108
+ description?: string | undefined;
109
+ category?: string | undefined;
110
+ tags?: string[] | undefined;
111
+ parent?: string | undefined;
112
+ } | undefined;
113
+ language: "bpy" | "three";
114
+ script: string;
115
+ params: Record<string, string | number | boolean>;
116
+ artifact: string;
117
+ manifest: {
118
+ bounds: {
119
+ min: [number, number, number];
120
+ max: [number, number, number];
121
+ };
122
+ params: {
123
+ id: string;
124
+ label?: string | undefined;
125
+ kind: "boolean" | "number" | "string";
126
+ default: string | number | boolean;
127
+ min?: number | undefined;
128
+ max?: number | undefined;
129
+ step?: number | undefined;
130
+ unit?: string | undefined;
131
+ options?: string[] | undefined;
132
+ }[];
133
+ parts: {
134
+ id: string;
135
+ label?: string | undefined;
136
+ type?: string | undefined;
137
+ bounds?: {
138
+ min: [number, number, number];
139
+ max: [number, number, number];
140
+ } | undefined;
141
+ }[];
142
+ surfaces: {
143
+ part?: string | undefined;
144
+ y: number;
145
+ polygon: [number, number][];
146
+ }[];
147
+ slots: {
148
+ id: string;
149
+ label?: string | undefined;
150
+ color?: string | undefined;
151
+ roughness?: number | undefined;
152
+ metalness?: number | undefined;
153
+ transparent?: boolean | undefined;
154
+ emissive?: boolean | undefined;
155
+ }[];
156
+ anchors: {
157
+ id: string;
158
+ position: [number, number, number];
159
+ normal?: [number, number, number] | undefined;
160
+ }[];
161
+ lights: {
162
+ id: string;
163
+ position: [number, number, number];
164
+ color: string;
165
+ intensity: number;
166
+ distance?: number | undefined;
167
+ spot?: {
168
+ direction: [number, number, number];
169
+ angle: number;
170
+ softness: number;
171
+ } | undefined;
172
+ shadows?: boolean | undefined;
173
+ glow?: {
174
+ size: number;
175
+ strength: number;
176
+ } | undefined;
177
+ }[];
178
+ undersides: {
179
+ part?: string | undefined;
180
+ polygon: [number, number][];
181
+ plane: [number, number, number, number];
182
+ }[];
183
+ animations: {
184
+ name: string;
185
+ duration: number;
186
+ }[];
187
+ cutters?: {
188
+ host: "ceiling" | "mounted" | "slab" | "wall";
189
+ polygon: number[][];
190
+ minY: number;
191
+ maxY: number;
192
+ }[] | undefined;
193
+ cutout: boolean;
194
+ collider: boolean;
195
+ shape?: {
196
+ tolerance: number;
197
+ bands: {
198
+ y0: number;
199
+ y1: number;
200
+ polygons: {
201
+ outer: [number, number][];
202
+ holes?: [number, number][][] | undefined;
203
+ }[];
204
+ }[];
205
+ } | undefined;
206
+ triangles: number;
207
+ coverage?: number | undefined;
208
+ uncovered?: {
209
+ min: [number, number];
210
+ max: [number, number];
211
+ }[] | undefined;
89
212
  };
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";
213
+ images?: {
214
+ artifact: string;
215
+ thumbnail: string;
216
+ floorPlan: string;
217
+ } | undefined;
218
+ } | undefined;
219
+ style: "cluster" | "dravidian-carved" | "faceted" | "fluted" | "lathe-turned" | "plain";
220
+ crossSection: "octagonal" | "rectangular" | "round" | "sixteen-sided" | "square";
221
+ height: number;
222
+ radius: number;
223
+ width: number;
224
+ depth: number;
225
+ edgeSoftness: number;
226
+ baseHeight: number;
227
+ capitalHeight: number;
228
+ shaftProfile: "baluster" | "bulged" | "hourglass" | "straight" | "tapered";
229
+ shaftTaper: number;
230
+ shaftBulge: number;
231
+ shaftStartScale: number;
232
+ shaftEndScale: number;
233
+ shaftSegmentCount: number;
234
+ shaftTwistStep: number;
235
+ shaftCornerRadius: number;
236
+ shaftDetail: "fluted" | "lathe-turned" | "none" | "panelled" | "spiral";
237
+ baseStyle: "lotus" | "none" | "panelled-pedestal" | "ribbed-lotus" | "round-rings" | "simple-square" | "square-plinth" | "stepped-square";
238
+ baseWidthScale: number;
239
+ baseDepthScale: number;
240
+ baseTierCount: number;
241
+ baseStepSpread: number;
242
+ basePlinthHeightRatio: number;
243
+ baseRoundBandScale: number;
244
+ baseNeckScale: number;
245
+ baseRoundBandCount: number;
246
+ baseRibCount: number;
247
+ baseCarvingLevel: number;
248
+ basePanelInset: number;
249
+ capitalStyle: "corinthian-leaf" | "doric" | "ionic-volute" | "leaf-carved" | "none" | "rounded" | "simple" | "simple-slab" | "south-indian-bracket" | "stepped" | "volute" | "wood-bracket";
250
+ capitalWidthScale: number;
251
+ capitalDepthScale: number;
252
+ capitalTierCount: number;
253
+ capitalStepSpread: number;
254
+ capitalBandCount: number;
255
+ voluteSize: number;
256
+ voluteCount: number;
257
+ leafCount: number;
258
+ leafRows: number;
259
+ bracketDepth: number;
260
+ bracketTierCount: number;
261
+ pendantCount: number;
262
+ capitalCarvingLevel: number;
263
+ ringCount: number;
264
+ ringPlacement: "bottom" | "ends" | "even" | "top";
265
+ ringThickness: number;
266
+ ringSpread: number;
267
+ fluteCount: number;
268
+ fluteDepth: number;
269
+ fluteWidth: number;
270
+ spiralTwist: number;
271
+ spiralRibCount: number;
272
+ panelCount: number;
273
+ panelInsetDepth: number;
274
+ panelShape: "arched" | "diamond" | "rectangle";
275
+ latheRingCount: number;
276
+ latheRingSpacing: "bottom" | "ends" | "even" | "top";
277
+ carvingLevel: number;
278
+ carvingPlacement: "all" | "base" | "capital" | "shaft";
279
+ lowerBandEnabled: boolean;
280
+ lowerBandHeight: number;
281
+ lowerBandCarvingLevel: number;
282
+ dentilCount: number;
283
+ beadCount: number;
284
+ supportStyle: "a-frame" | "box-frame" | "k-brace" | "portal-frame" | "single-strut" | "trestle" | "tripod" | "v-frame" | "vertical" | "x-brace" | "y-frame";
285
+ braceWidth: number;
286
+ braceDepth: number;
287
+ braceBottomSpread: number;
288
+ braceTopSpread: number;
289
+ bracePlateEnabled: boolean;
290
+ role?: "ornament" | "post" | undefined;
291
+ postBase?: "none" | "pier" | "post-base" | undefined;
292
+ material?: {
293
+ id?: string | undefined;
294
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
295
+ properties?: {
296
+ color: string;
297
+ roughness: number;
298
+ metalness: number;
299
+ opacity: number;
300
+ transparent: boolean;
301
+ side: "back" | "double" | "front";
302
+ } | undefined;
303
+ texture?: {
304
+ url: string;
305
+ repeat?: [number, number] | undefined;
306
+ scale?: number | undefined;
307
+ offset?: [number, number] | undefined;
308
+ normalMap?: string | undefined;
309
+ normalScale?: number | undefined;
310
+ bumpMap?: string | undefined;
311
+ bumpScale?: number | undefined;
312
+ } | undefined;
313
+ } | undefined;
314
+ materialPreset?: string | undefined;
315
+ slots?: Record<string, string> | undefined;
316
+ type: "column";
118
317
  } | {
119
318
  object: "node";
120
319
  name?: string | undefined;
@@ -139,19 +338,29 @@ export declare function withoutSceneAnnotations(nodes: Record<AnyNodeId, AnyNode
139
338
  fromIds: string[];
140
339
  } | undefined;
141
340
  } | undefined;
142
- id: `duct-terminal_${string}`;
341
+ id: `duct-fitting_${string}`;
143
342
  position: [number, number, number];
144
- rotation: number;
145
- supportSlabId?: string | undefined;
146
- terminalType: "diffuser" | "return-grille" | "supply-register";
147
- mount: "ceiling" | "floor" | "wall";
343
+ rotation: [number, number, number];
344
+ fittingType: "access-panel" | "coupling" | "cross" | "damper" | "elbow" | "end-cap" | "reducer" | "tee" | "transition";
345
+ shape: "oval" | "rect" | "round";
346
+ inletShape?: "oval" | "rect" | "round" | undefined;
347
+ outletShape?: "oval" | "rect" | "round" | undefined;
148
348
  width: number;
149
- depth: number;
150
- collarShape: "oval" | "rect" | "round";
151
- collarDiameter: number;
152
- collarWidth: number;
153
- collarHeight: number;
154
- type: "duct-terminal";
349
+ height: number;
350
+ shape2: "oval" | "rect" | "round";
351
+ width2: number;
352
+ height2: number;
353
+ angle: number;
354
+ branchAngle: number;
355
+ diameter: number;
356
+ diameter2: number;
357
+ ductMaterial: "duct-board" | "flex" | "sheet-metal";
358
+ system: "return" | "supply";
359
+ damperAngle: number;
360
+ panelWidth: number;
361
+ panelHeight: number;
362
+ slots?: Record<string, string> | undefined;
363
+ type: "duct-fitting";
155
364
  } | {
156
365
  object: "node";
157
366
  name?: string | undefined;
@@ -176,23 +385,23 @@ export declare function withoutSceneAnnotations(nodes: Record<AnyNodeId, AnyNode
176
385
  fromIds: string[];
177
386
  } | undefined;
178
387
  } | undefined;
179
- id: `guide_${string}`;
180
- url: string;
388
+ id: `hvac-equipment_${string}`;
181
389
  position: [number, number, number];
182
- rotation: [number, number, number];
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";
390
+ rotation: number;
391
+ supportSlabId?: string | undefined;
392
+ equipmentType: "air-handler" | "condenser" | "furnace";
393
+ width: number;
394
+ depth: number;
395
+ height: number;
396
+ supplyShape: "oval" | "rect" | "round";
397
+ returnShape: "oval" | "rect" | "round";
398
+ supplyDiameter: number;
399
+ returnDiameter: number;
400
+ supplyWidth: number;
401
+ supplyHeight: number;
402
+ returnWidth: number;
403
+ returnHeight: number;
404
+ type: "hvac-equipment";
196
405
  } | {
197
406
  object: "node";
198
407
  name?: string | undefined;
@@ -217,10 +426,17 @@ export declare function withoutSceneAnnotations(nodes: Record<AnyNodeId, AnyNode
217
426
  fromIds: string[];
218
427
  } | undefined;
219
428
  } | undefined;
220
- id: `liquid-line_${string}`;
221
- path: [number, number, number][];
429
+ id: `pipe-fitting_${string}`;
430
+ position: [number, number, number];
431
+ rotation: [number, number, number];
432
+ fittingType: "cleanout" | "coupling" | "cross" | "elbow" | "end-cap" | "reducer" | "sanitary-tee" | "wye";
433
+ angle: number;
222
434
  diameter: number;
223
- type: "liquid-line";
435
+ diameter2: number;
436
+ cleanoutStyle: "end" | "inline";
437
+ pipeMaterial: "abs" | "cast-iron" | "pvc";
438
+ system: "vent" | "waste";
439
+ type: "pipe-fitting";
224
440
  } | {
225
441
  object: "node";
226
442
  name?: string | undefined;
@@ -935,217 +1151,7 @@ export declare function withoutSceneAnnotations(nodes: Record<AnyNodeId, AnyNode
935
1151
  bumpScale?: number | undefined;
936
1152
  } | undefined;
937
1153
  } | undefined;
938
- slots?: Record<string, string> | undefined;
939
- source?: {
940
- kind: "script";
941
- meta?: {
942
- description?: string | undefined;
943
- category?: string | undefined;
944
- tags?: string[] | undefined;
945
- parent?: string | undefined;
946
- } | undefined;
947
- language: "bpy" | "three";
948
- script: string;
949
- params: Record<string, string | number | boolean>;
950
- artifact: string;
951
- manifest: {
952
- bounds: {
953
- min: [number, number, number];
954
- max: [number, number, number];
955
- };
956
- params: {
957
- id: string;
958
- label?: string | undefined;
959
- kind: "boolean" | "number" | "string";
960
- default: string | number | boolean;
961
- min?: number | undefined;
962
- max?: number | undefined;
963
- step?: number | undefined;
964
- unit?: string | undefined;
965
- options?: string[] | undefined;
966
- }[];
967
- parts: {
968
- id: string;
969
- label?: string | undefined;
970
- type?: string | undefined;
971
- bounds?: {
972
- min: [number, number, number];
973
- max: [number, number, number];
974
- } | undefined;
975
- }[];
976
- surfaces: {
977
- part?: string | undefined;
978
- y: number;
979
- polygon: [number, number][];
980
- }[];
981
- slots: {
982
- id: string;
983
- label?: string | undefined;
984
- color?: string | undefined;
985
- roughness?: number | undefined;
986
- metalness?: number | undefined;
987
- transparent?: boolean | undefined;
988
- emissive?: boolean | undefined;
989
- }[];
990
- anchors: {
991
- id: string;
992
- position: [number, number, number];
993
- normal?: [number, number, number] | undefined;
994
- }[];
995
- lights: {
996
- id: string;
997
- position: [number, number, number];
998
- color: string;
999
- intensity: number;
1000
- distance?: number | undefined;
1001
- spot?: {
1002
- direction: [number, number, number];
1003
- angle: number;
1004
- softness: number;
1005
- } | undefined;
1006
- shadows?: boolean | undefined;
1007
- glow?: {
1008
- size: number;
1009
- strength: number;
1010
- } | undefined;
1011
- }[];
1012
- undersides: {
1013
- part?: string | undefined;
1014
- polygon: [number, number][];
1015
- plane: [number, number, number, number];
1016
- }[];
1017
- animations: {
1018
- name: string;
1019
- duration: number;
1020
- }[];
1021
- cutters?: {
1022
- host: "ceiling" | "mounted" | "slab" | "wall";
1023
- polygon: number[][];
1024
- minY: number;
1025
- maxY: number;
1026
- }[] | undefined;
1027
- cutout: boolean;
1028
- collider: boolean;
1029
- shape?: {
1030
- tolerance: number;
1031
- bands: {
1032
- y0: number;
1033
- y1: number;
1034
- polygons: {
1035
- outer: [number, number][];
1036
- holes?: [number, number][][] | undefined;
1037
- }[];
1038
- }[];
1039
- } | undefined;
1040
- triangles: number;
1041
- coverage?: number | undefined;
1042
- uncovered?: {
1043
- min: [number, number];
1044
- max: [number, number];
1045
- }[] | undefined;
1046
- };
1047
- images?: {
1048
- artifact: string;
1049
- thumbnail: string;
1050
- floorPlan: string;
1051
- } | undefined;
1052
- } | undefined;
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;
1063
- width: number;
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;
1154
+ slots?: Record<string, string> | undefined;
1149
1155
  source?: {
1150
1156
  kind: "script";
1151
1157
  meta?: {
@@ -1260,104 +1266,73 @@ export declare function withoutSceneAnnotations(nodes: Record<AnyNodeId, AnyNode
1260
1266
  floorPlan: string;
1261
1267
  } | undefined;
1262
1268
  } | 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;
1269
+ position: [number, number, number];
1270
+ rotation: [number, number, number];
1271
+ side?: "back" | "front" | undefined;
1272
+ verticalAnchor?: "floor" | "wall" | undefined;
1273
+ floorThresholdVersion: 0 | 1;
1274
+ wallId?: string | undefined;
1275
+ dormerId?: string | undefined;
1276
+ dormerFace?: "back" | "front" | "left" | "right" | undefined;
1277
+ roofSegmentId?: string | undefined;
1278
+ roofFace?: "back" | "front" | "left" | "right" | undefined;
1267
1279
  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";
1323
- lowerBandEnabled: boolean;
1324
- lowerBandHeight: number;
1325
- lowerBandCarvingLevel: number;
1326
- dentilCount: number;
1327
- beadCount: number;
1328
- supportStyle: "a-frame" | "box-frame" | "k-brace" | "portal-frame" | "single-strut" | "trestle" | "tripod" | "v-frame" | "vertical" | "x-brace" | "y-frame";
1329
- braceWidth: number;
1330
- braceDepth: number;
1331
- braceBottomSpread: number;
1332
- braceTopSpread: number;
1333
- bracePlateEnabled: boolean;
1334
- role?: "ornament" | "post" | undefined;
1335
- postBase?: "none" | "pier" | "post-base" | undefined;
1336
- material?: {
1337
- id?: string | undefined;
1338
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1339
- properties?: {
1340
- color: string;
1341
- roughness: number;
1342
- metalness: number;
1343
- opacity: number;
1344
- transparent: boolean;
1345
- side: "back" | "double" | "front";
1346
- } | undefined;
1347
- texture?: {
1348
- url: string;
1349
- repeat?: [number, number] | undefined;
1350
- scale?: number | undefined;
1351
- offset?: [number, number] | undefined;
1352
- normalMap?: string | undefined;
1353
- normalScale?: number | undefined;
1354
- bumpMap?: string | undefined;
1355
- bumpScale?: number | undefined;
1356
- } | undefined;
1280
+ height: number;
1281
+ mark?: string | undefined;
1282
+ constructionType: "framed" | "masonry";
1283
+ dimensionReference: "finish-opening" | "masonry-opening" | "nominal" | "rough-opening";
1284
+ roughOpeningWidth?: number | undefined;
1285
+ roughOpeningHeight?: number | undefined;
1286
+ masonryOpeningWidth?: number | undefined;
1287
+ masonryOpeningHeight?: number | undefined;
1288
+ finishOpeningWidth?: number | undefined;
1289
+ finishOpeningHeight?: number | undefined;
1290
+ openingKind: "opening" | "window";
1291
+ windowType: "awning" | "bay" | "bow" | "casement" | "double-hung" | "fixed" | "hopper" | "louvered" | "single-hung" | "sliding" | "tilt-turn";
1292
+ operationState: number;
1293
+ openingDirection?: "inward" | "outward" | undefined;
1294
+ tiltTurnMode?: "tilt" | "turn" | undefined;
1295
+ awningDirection: "down" | "up";
1296
+ casementStyle: "french" | "single";
1297
+ hingesSide: "left" | "right";
1298
+ openingShape: "arch" | "rectangle" | "rounded";
1299
+ openingRadiusMode: "all" | "individual";
1300
+ openingCornerRadii: [number, number, number, number];
1301
+ cornerRadius: number;
1302
+ archHeight: number;
1303
+ openingRevealRadius: number;
1304
+ frameThickness: number;
1305
+ frameDepth?: number | undefined;
1306
+ windowHandle?: boolean | undefined;
1307
+ sashGrid?: boolean | undefined;
1308
+ columnRatios: number[];
1309
+ rowRatios: number[];
1310
+ columnDividerThickness: number;
1311
+ rowDividerThickness: number;
1312
+ corner?: {
1313
+ end: "end" | "start";
1314
+ partnerId: string;
1315
+ post: "none" | "post";
1357
1316
  } | undefined;
1358
- materialPreset?: string | undefined;
1359
- slots?: Record<string, string> | undefined;
1360
- type: "column";
1317
+ sill: boolean;
1318
+ sillDepth: number;
1319
+ sillThickness: number;
1320
+ sillOverhang?: number | undefined;
1321
+ sillInterior?: boolean | undefined;
1322
+ sillInteriorDepth?: number | undefined;
1323
+ sillInteriorThickness?: number | undefined;
1324
+ sillInteriorOverhang?: number | undefined;
1325
+ shutters?: "board-batten" | "louvered" | "none" | "panel" | undefined;
1326
+ shutterWidth?: number | undefined;
1327
+ shutterOpen?: number | undefined;
1328
+ shutterSides?: "both" | "left" | "right" | undefined;
1329
+ rollerShutter?: "box" | "concealed" | "none" | undefined;
1330
+ rollerShutterBoxHeight?: number | undefined;
1331
+ rollerShutterOpen?: number | undefined;
1332
+ casingFaceA?: boolean | undefined;
1333
+ casingFaceB?: boolean | undefined;
1334
+ casingWidth?: number | undefined;
1335
+ type: "window";
1361
1336
  } | {
1362
1337
  object: "node";
1363
1338
  name?: string | undefined;
@@ -2906,18 +2881,125 @@ export declare function withoutSceneAnnotations(nodes: Record<AnyNodeId, AnyNode
2906
2881
  fromIds: string[];
2907
2882
  } | undefined;
2908
2883
  } | undefined;
2909
- id: `beam_${string}`;
2910
- start: [number, number];
2911
- end: [number, number];
2912
- width: number;
2913
- depth: number;
2914
- size?: string | undefined;
2915
- plies: number;
2916
- material: "glulam" | "lvl" | "pressure-treated" | "sawn" | "steel";
2917
- placement: "dropped" | "flush";
2918
- topElevation?: number | undefined;
2884
+ id: `beam_${string}`;
2885
+ start: [number, number];
2886
+ end: [number, number];
2887
+ width: number;
2888
+ depth: number;
2889
+ size?: string | undefined;
2890
+ plies: number;
2891
+ material: "glulam" | "lvl" | "pressure-treated" | "sawn" | "steel";
2892
+ placement: "dropped" | "flush";
2893
+ topElevation?: number | undefined;
2894
+ supportSlabId?: string | undefined;
2895
+ type: "beam";
2896
+ } | {
2897
+ object: "node";
2898
+ name?: string | undefined;
2899
+ parentId: string | null;
2900
+ visible: boolean;
2901
+ camera?: {
2902
+ position: [number, number, number];
2903
+ target: [number, number, number];
2904
+ mode: "orthographic" | "perspective";
2905
+ fov?: number | undefined;
2906
+ zoom?: number | undefined;
2907
+ } | undefined;
2908
+ metadata: Record<string, unknown>;
2909
+ provenance?: {
2910
+ refs: {
2911
+ ns?: string | undefined;
2912
+ id: string;
2913
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
2914
+ }[];
2915
+ lineage?: {
2916
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
2917
+ fromIds: string[];
2918
+ } | undefined;
2919
+ } | undefined;
2920
+ id: `construction-dimension_${string}`;
2921
+ anchors: ({
2922
+ kind: "feature";
2923
+ reference: {
2924
+ nodeId: string;
2925
+ featureId: string;
2926
+ parameters?: Record<string, string | number | boolean> | undefined;
2927
+ };
2928
+ fallback: [number, number, number];
2929
+ } | [number, number, number])[];
2930
+ baseline: {
2931
+ origin: [number, number];
2932
+ direction: [number, number];
2933
+ };
2934
+ chainMode: "continuous" | "point-to-point";
2935
+ mode: "angular" | "arc-length" | "center-mark" | "chord" | "coordinate" | "diameter" | "linear" | "radius";
2936
+ featureCount: number;
2937
+ showCenterMark: boolean;
2938
+ prefix: string;
2939
+ suffix: string;
2940
+ textOverride: string | null;
2941
+ datumPolicy: "centerline" | "finish-face" | "structural-face" | "wall-face";
2942
+ terminator: "architectural-tick" | "dot" | "filled-arrow" | "open-arrow";
2943
+ textPosition: "above" | "centered";
2944
+ imperialPrecision: "1" | "1/16" | "1/2" | "1/4" | "1/8";
2945
+ metricNotation: "meters" | "millimeters";
2946
+ extensionStartGap: number;
2947
+ extensionOvershoot: number;
2948
+ drawingType: "floor-plan" | "foundation-plan" | "reflected-ceiling-plan" | "roof-plan" | "site-plan";
2949
+ drawingOverrides: {
2950
+ drawingType: "floor-plan" | "foundation-plan" | "reflected-ceiling-plan" | "roof-plan" | "site-plan";
2951
+ presentation: "controlled" | "omit" | "shown";
2952
+ suppressedSegmentIndexes: number[];
2953
+ }[];
2954
+ controllingDimensionId: `construction-dimension_${string}` | null;
2955
+ type: "construction-dimension";
2956
+ } | {
2957
+ object: "node";
2958
+ name?: string | undefined;
2959
+ parentId: string | null;
2960
+ visible: boolean;
2961
+ camera?: {
2962
+ position: [number, number, number];
2963
+ target: [number, number, number];
2964
+ mode: "orthographic" | "perspective";
2965
+ fov?: number | undefined;
2966
+ zoom?: number | undefined;
2967
+ } | undefined;
2968
+ metadata: Record<string, unknown>;
2969
+ provenance?: {
2970
+ refs: {
2971
+ ns?: string | undefined;
2972
+ id: string;
2973
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
2974
+ }[];
2975
+ lineage?: {
2976
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
2977
+ fromIds: string[];
2978
+ } | undefined;
2979
+ } | undefined;
2980
+ id: `block_${string}`;
2981
+ children: string[];
2982
+ position: [number, number, number];
2983
+ rotation: number;
2919
2984
  supportSlabId?: string | undefined;
2920
- type: "beam";
2985
+ topology: {
2986
+ vertices: {
2987
+ id: string;
2988
+ position: [number, number, number];
2989
+ }[];
2990
+ edges: {
2991
+ id: string;
2992
+ vertexIds: [string, string];
2993
+ }[];
2994
+ faces: {
2995
+ id: string;
2996
+ vertexIds: string[];
2997
+ materialSlot: string;
2998
+ }[];
2999
+ };
3000
+ slots: Record<string, string>;
3001
+ slotNames: Record<string, string>;
3002
+ type: "block";
2921
3003
  } | {
2922
3004
  object: "node";
2923
3005
  name?: string | undefined;
@@ -3796,6 +3878,47 @@ export declare function withoutSceneAnnotations(nodes: Record<AnyNodeId, AnyNode
3796
3878
  scale: number;
3797
3879
  opacity: number;
3798
3880
  type: "scan";
3881
+ } | {
3882
+ object: "node";
3883
+ name?: string | undefined;
3884
+ parentId: string | null;
3885
+ visible: boolean;
3886
+ camera?: {
3887
+ position: [number, number, number];
3888
+ target: [number, number, number];
3889
+ mode: "orthographic" | "perspective";
3890
+ fov?: number | undefined;
3891
+ zoom?: number | undefined;
3892
+ } | undefined;
3893
+ metadata: Record<string, unknown>;
3894
+ provenance?: {
3895
+ refs: {
3896
+ ns?: string | undefined;
3897
+ id: string;
3898
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
3899
+ }[];
3900
+ lineage?: {
3901
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
3902
+ fromIds: string[];
3903
+ } | undefined;
3904
+ } | undefined;
3905
+ id: `guide_${string}`;
3906
+ url: string;
3907
+ position: [number, number, number];
3908
+ rotation: [number, number, number];
3909
+ scale: number;
3910
+ opacity: number;
3911
+ scaleReference: {
3912
+ start: [number, number];
3913
+ end: [number, number];
3914
+ realLengthMeters: number;
3915
+ measuredLengthUnits: number;
3916
+ metersPerUnit: number;
3917
+ displayLength?: number | undefined;
3918
+ displayUnit?: "centimeters" | "feet" | "inches" | "meters" | undefined;
3919
+ label: string;
3920
+ } | null;
3921
+ type: "guide";
3799
3922
  } | {
3800
3923
  object: "node";
3801
3924
  name?: string | undefined;
@@ -4075,29 +4198,19 @@ export declare function withoutSceneAnnotations(nodes: Record<AnyNodeId, AnyNode
4075
4198
  fromIds: string[];
4076
4199
  } | undefined;
4077
4200
  } | undefined;
4078
- id: `duct-fitting_${string}`;
4201
+ id: `duct-terminal_${string}`;
4079
4202
  position: [number, number, number];
4080
- rotation: [number, number, number];
4081
- fittingType: "access-panel" | "coupling" | "cross" | "damper" | "elbow" | "end-cap" | "reducer" | "tee" | "transition";
4082
- shape: "oval" | "rect" | "round";
4083
- inletShape?: "oval" | "rect" | "round" | undefined;
4084
- outletShape?: "oval" | "rect" | "round" | undefined;
4203
+ rotation: number;
4204
+ supportSlabId?: string | undefined;
4205
+ terminalType: "diffuser" | "return-grille" | "supply-register";
4206
+ mount: "ceiling" | "floor" | "wall";
4085
4207
  width: number;
4086
- height: number;
4087
- shape2: "oval" | "rect" | "round";
4088
- width2: number;
4089
- height2: number;
4090
- angle: number;
4091
- branchAngle: number;
4092
- diameter: number;
4093
- diameter2: number;
4094
- ductMaterial: "duct-board" | "flex" | "sheet-metal";
4095
- system: "return" | "supply";
4096
- damperAngle: number;
4097
- panelWidth: number;
4098
- panelHeight: number;
4099
- slots?: Record<string, string> | undefined;
4100
- type: "duct-fitting";
4208
+ depth: number;
4209
+ collarShape: "oval" | "rect" | "round";
4210
+ collarDiameter: number;
4211
+ collarWidth: number;
4212
+ collarHeight: number;
4213
+ type: "duct-terminal";
4101
4214
  } | {
4102
4215
  object: "node";
4103
4216
  name?: string | undefined;
@@ -4122,23 +4235,12 @@ export declare function withoutSceneAnnotations(nodes: Record<AnyNodeId, AnyNode
4122
4235
  fromIds: string[];
4123
4236
  } | undefined;
4124
4237
  } | undefined;
4125
- id: `hvac-equipment_${string}`;
4126
- position: [number, number, number];
4127
- rotation: number;
4128
- supportSlabId?: string | undefined;
4129
- equipmentType: "air-handler" | "condenser" | "furnace";
4130
- width: number;
4131
- depth: number;
4132
- height: number;
4133
- supplyShape: "oval" | "rect" | "round";
4134
- returnShape: "oval" | "rect" | "round";
4135
- supplyDiameter: number;
4136
- returnDiameter: number;
4137
- supplyWidth: number;
4138
- supplyHeight: number;
4139
- returnWidth: number;
4140
- returnHeight: number;
4141
- type: "hvac-equipment";
4238
+ id: `lineset_${string}`;
4239
+ path: [number, number, number][];
4240
+ suctionDiameter: number;
4241
+ liquidDiameter: number;
4242
+ insulated: boolean;
4243
+ type: "lineset";
4142
4244
  } | {
4143
4245
  object: "node";
4144
4246
  name?: string | undefined;
@@ -4163,12 +4265,10 @@ export declare function withoutSceneAnnotations(nodes: Record<AnyNodeId, AnyNode
4163
4265
  fromIds: string[];
4164
4266
  } | undefined;
4165
4267
  } | undefined;
4166
- id: `lineset_${string}`;
4268
+ id: `liquid-line_${string}`;
4167
4269
  path: [number, number, number][];
4168
- suctionDiameter: number;
4169
- liquidDiameter: number;
4170
- insulated: boolean;
4171
- type: "lineset";
4270
+ diameter: number;
4271
+ type: "liquid-line";
4172
4272
  } | {
4173
4273
  object: "node";
4174
4274
  name?: string | undefined;
@@ -4215,41 +4315,6 @@ export declare function withoutSceneAnnotations(nodes: Record<AnyNodeId, AnyNode
4215
4315
  pipeMaterial: "abs" | "cast-iron" | "pvc";
4216
4316
  system: "vent" | "waste";
4217
4317
  type: "pipe-segment";
4218
- } | {
4219
- object: "node";
4220
- name?: string | undefined;
4221
- parentId: string | null;
4222
- visible: boolean;
4223
- camera?: {
4224
- position: [number, number, number];
4225
- target: [number, number, number];
4226
- mode: "orthographic" | "perspective";
4227
- fov?: number | undefined;
4228
- zoom?: number | undefined;
4229
- } | undefined;
4230
- metadata: Record<string, unknown>;
4231
- provenance?: {
4232
- refs: {
4233
- ns?: string | undefined;
4234
- id: string;
4235
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
4236
- }[];
4237
- lineage?: {
4238
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
4239
- fromIds: string[];
4240
- } | undefined;
4241
- } | undefined;
4242
- id: `pipe-fitting_${string}`;
4243
- position: [number, number, number];
4244
- rotation: [number, number, number];
4245
- fittingType: "cleanout" | "coupling" | "cross" | "elbow" | "end-cap" | "reducer" | "sanitary-tee" | "wye";
4246
- angle: number;
4247
- diameter: number;
4248
- diameter2: number;
4249
- cleanoutStyle: "end" | "inline";
4250
- pipeMaterial: "abs" | "cast-iron" | "pvc";
4251
- system: "vent" | "waste";
4252
- type: "pipe-fitting";
4253
4318
  } | {
4254
4319
  object: "node";
4255
4320
  name?: string | undefined;
@@ -4836,83 +4901,18 @@ export declare function withoutSceneAnnotations(nodes: Record<AnyNodeId, AnyNode
4836
4901
  } | {
4837
4902
  id: string;
4838
4903
  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";
4904
+ type: "hood-curved-glass";
4905
+ })[] | undefined;
4906
+ id: `cabinet-module_${string}`;
4907
+ children: string[];
4908
+ cabinetType: "base" | "tall";
4909
+ moduleKind: "corner-filler" | "standard" | "wall-filler";
4910
+ openSide?: "left" | "right" | undefined;
4911
+ cornerShelf?: boolean | undefined;
4912
+ topFinish: "none" | "top-cabinet" | "trim";
4913
+ topFinishHeight: number;
4914
+ topFinishDepth: number;
4915
+ type: "cabinet-module";
4916
4916
  } | {
4917
4917
  object: "node";
4918
4918
  name?: string | undefined;
@@ -5679,7 +5679,325 @@ export declare function withoutSceneAnnotations(nodes: Record<AnyNodeId, AnyNode
5679
5679
  fromIds: string[];
5680
5680
  } | undefined;
5681
5681
  } | undefined;
5682
- id: `downspout_${string}`;
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: `bvent_${string}`;
5745
+ material?: {
5746
+ id?: string | undefined;
5747
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
5748
+ properties?: {
5749
+ color: string;
5750
+ roughness: number;
5751
+ metalness: number;
5752
+ opacity: number;
5753
+ transparent: boolean;
5754
+ side: "back" | "double" | "front";
5755
+ } | undefined;
5756
+ 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
+ slots?: Record<string, string> | undefined;
5768
+ materialPreset: string;
5769
+ roofSegmentId?: string | undefined;
5770
+ position: [number, number, number];
5771
+ rotation: number;
5772
+ width: number;
5773
+ depth: number;
5774
+ height: number;
5775
+ hoodOverhang: number;
5776
+ topTaper: number;
5777
+ capHeight: number;
5778
+ capGap: number;
5779
+ domeCurvature: number;
5780
+ baseInset: number;
5781
+ baseHeight: number;
5782
+ cornerBevel: number;
5783
+ style: "box" | "cap" | "dome";
5784
+ type: "box-vent";
5785
+ } | {
5786
+ object: "node";
5787
+ name?: string | undefined;
5788
+ parentId: string | null;
5789
+ visible: boolean;
5790
+ camera?: {
5791
+ position: [number, number, number];
5792
+ target: [number, number, number];
5793
+ mode: "orthographic" | "perspective";
5794
+ fov?: number | undefined;
5795
+ zoom?: number | undefined;
5796
+ } | undefined;
5797
+ metadata: Record<string, unknown>;
5798
+ provenance?: {
5799
+ refs: {
5800
+ ns?: string | undefined;
5801
+ id: string;
5802
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
5803
+ }[];
5804
+ lineage?: {
5805
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
5806
+ fromIds: string[];
5807
+ } | undefined;
5808
+ } | undefined;
5809
+ id: `column_${string}`;
5810
+ children: string[];
5811
+ position: [number, number, number];
5812
+ rotation: number;
5813
+ supportSlabId?: string | undefined;
5814
+ source?: {
5815
+ kind: "script";
5816
+ meta?: {
5817
+ description?: string | undefined;
5818
+ category?: string | undefined;
5819
+ tags?: string[] | undefined;
5820
+ parent?: string | undefined;
5821
+ } | undefined;
5822
+ language: "bpy" | "three";
5823
+ script: string;
5824
+ params: Record<string, string | number | boolean>;
5825
+ artifact: string;
5826
+ manifest: {
5827
+ bounds: {
5828
+ min: [number, number, number];
5829
+ max: [number, number, number];
5830
+ };
5831
+ params: {
5832
+ id: string;
5833
+ label?: string | undefined;
5834
+ kind: "boolean" | "number" | "string";
5835
+ default: string | number | boolean;
5836
+ min?: number | undefined;
5837
+ max?: number | undefined;
5838
+ step?: number | undefined;
5839
+ unit?: string | undefined;
5840
+ options?: string[] | undefined;
5841
+ }[];
5842
+ parts: {
5843
+ id: string;
5844
+ label?: string | undefined;
5845
+ type?: string | undefined;
5846
+ bounds?: {
5847
+ min: [number, number, number];
5848
+ max: [number, number, number];
5849
+ } | undefined;
5850
+ }[];
5851
+ surfaces: {
5852
+ part?: string | undefined;
5853
+ y: number;
5854
+ polygon: [number, number][];
5855
+ }[];
5856
+ slots: {
5857
+ id: string;
5858
+ label?: string | undefined;
5859
+ color?: string | undefined;
5860
+ roughness?: number | undefined;
5861
+ metalness?: number | undefined;
5862
+ transparent?: boolean | undefined;
5863
+ emissive?: boolean | undefined;
5864
+ }[];
5865
+ anchors: {
5866
+ id: string;
5867
+ position: [number, number, number];
5868
+ normal?: [number, number, number] | undefined;
5869
+ }[];
5870
+ lights: {
5871
+ id: string;
5872
+ position: [number, number, number];
5873
+ color: string;
5874
+ intensity: number;
5875
+ distance?: number | undefined;
5876
+ spot?: {
5877
+ direction: [number, number, number];
5878
+ angle: number;
5879
+ softness: number;
5880
+ } | undefined;
5881
+ shadows?: boolean | undefined;
5882
+ glow?: {
5883
+ size: number;
5884
+ strength: number;
5885
+ } | undefined;
5886
+ }[];
5887
+ undersides: {
5888
+ part?: string | undefined;
5889
+ polygon: [number, number][];
5890
+ plane: [number, number, number, number];
5891
+ }[];
5892
+ animations: {
5893
+ name: string;
5894
+ duration: number;
5895
+ }[];
5896
+ cutters?: {
5897
+ host: "ceiling" | "mounted" | "slab" | "wall";
5898
+ polygon: number[][];
5899
+ minY: number;
5900
+ maxY: number;
5901
+ }[] | undefined;
5902
+ cutout: boolean;
5903
+ collider: boolean;
5904
+ shape?: {
5905
+ tolerance: number;
5906
+ bands: {
5907
+ y0: number;
5908
+ y1: number;
5909
+ polygons: {
5910
+ outer: [number, number][];
5911
+ holes?: [number, number][][] | undefined;
5912
+ }[];
5913
+ }[];
5914
+ } | undefined;
5915
+ triangles: number;
5916
+ coverage?: number | undefined;
5917
+ uncovered?: {
5918
+ min: [number, number];
5919
+ max: [number, number];
5920
+ }[] | undefined;
5921
+ };
5922
+ images?: {
5923
+ artifact: string;
5924
+ thumbnail: string;
5925
+ floorPlan: string;
5926
+ } | undefined;
5927
+ } | undefined;
5928
+ style: "cluster" | "dravidian-carved" | "faceted" | "fluted" | "lathe-turned" | "plain";
5929
+ crossSection: "octagonal" | "rectangular" | "round" | "sixteen-sided" | "square";
5930
+ height: number;
5931
+ radius: number;
5932
+ width: number;
5933
+ depth: number;
5934
+ edgeSoftness: number;
5935
+ baseHeight: number;
5936
+ capitalHeight: number;
5937
+ shaftProfile: "baluster" | "bulged" | "hourglass" | "straight" | "tapered";
5938
+ shaftTaper: number;
5939
+ shaftBulge: number;
5940
+ shaftStartScale: number;
5941
+ shaftEndScale: number;
5942
+ shaftSegmentCount: number;
5943
+ shaftTwistStep: number;
5944
+ shaftCornerRadius: number;
5945
+ shaftDetail: "fluted" | "lathe-turned" | "none" | "panelled" | "spiral";
5946
+ baseStyle: "lotus" | "none" | "panelled-pedestal" | "ribbed-lotus" | "round-rings" | "simple-square" | "square-plinth" | "stepped-square";
5947
+ baseWidthScale: number;
5948
+ baseDepthScale: number;
5949
+ baseTierCount: number;
5950
+ baseStepSpread: number;
5951
+ basePlinthHeightRatio: number;
5952
+ baseRoundBandScale: number;
5953
+ baseNeckScale: number;
5954
+ baseRoundBandCount: number;
5955
+ baseRibCount: number;
5956
+ baseCarvingLevel: number;
5957
+ basePanelInset: number;
5958
+ capitalStyle: "corinthian-leaf" | "doric" | "ionic-volute" | "leaf-carved" | "none" | "rounded" | "simple" | "simple-slab" | "south-indian-bracket" | "stepped" | "volute" | "wood-bracket";
5959
+ capitalWidthScale: number;
5960
+ capitalDepthScale: number;
5961
+ capitalTierCount: number;
5962
+ capitalStepSpread: number;
5963
+ capitalBandCount: number;
5964
+ voluteSize: number;
5965
+ voluteCount: number;
5966
+ leafCount: number;
5967
+ leafRows: number;
5968
+ bracketDepth: number;
5969
+ bracketTierCount: number;
5970
+ pendantCount: number;
5971
+ capitalCarvingLevel: number;
5972
+ ringCount: number;
5973
+ ringPlacement: "bottom" | "ends" | "even" | "top";
5974
+ ringThickness: number;
5975
+ ringSpread: number;
5976
+ fluteCount: number;
5977
+ fluteDepth: number;
5978
+ fluteWidth: number;
5979
+ spiralTwist: number;
5980
+ spiralRibCount: number;
5981
+ panelCount: number;
5982
+ panelInsetDepth: number;
5983
+ panelShape: "arched" | "diamond" | "rectangle";
5984
+ latheRingCount: number;
5985
+ latheRingSpacing: "bottom" | "ends" | "even" | "top";
5986
+ carvingLevel: number;
5987
+ carvingPlacement: "all" | "base" | "capital" | "shaft";
5988
+ lowerBandEnabled: boolean;
5989
+ lowerBandHeight: number;
5990
+ lowerBandCarvingLevel: number;
5991
+ dentilCount: number;
5992
+ beadCount: number;
5993
+ supportStyle: "a-frame" | "box-frame" | "k-brace" | "portal-frame" | "single-strut" | "trestle" | "tripod" | "v-frame" | "vertical" | "x-brace" | "y-frame";
5994
+ braceWidth: number;
5995
+ braceDepth: number;
5996
+ braceBottomSpread: number;
5997
+ braceTopSpread: number;
5998
+ bracePlateEnabled: boolean;
5999
+ role?: "ornament" | "post" | undefined;
6000
+ postBase?: "none" | "pier" | "post-base" | undefined;
5683
6001
  material?: {
5684
6002
  id?: string | undefined;
5685
6003
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
@@ -5702,128 +6020,9 @@ export declare function withoutSceneAnnotations(nodes: Record<AnyNodeId, AnyNode
5702
6020
  bumpScale?: number | undefined;
5703
6021
  } | undefined;
5704
6022
  } | undefined;
6023
+ materialPreset?: string | undefined;
5705
6024
  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";
5767
- } | {
5768
- object: "node";
5769
- name?: string | undefined;
5770
- parentId: string | null;
5771
- visible: boolean;
5772
- camera?: {
5773
- position: [number, number, number];
5774
- target: [number, number, number];
5775
- mode: "orthographic" | "perspective";
5776
- fov?: number | undefined;
5777
- zoom?: number | undefined;
5778
- } | undefined;
5779
- metadata: Record<string, unknown>;
5780
- provenance?: {
5781
- refs: {
5782
- ns?: string | undefined;
5783
- id: string;
5784
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
5785
- }[];
5786
- lineage?: {
5787
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
5788
- fromIds: string[];
5789
- } | undefined;
5790
- } | undefined;
5791
- id: `construction-dimension_${string}`;
5792
- anchors: ({
5793
- kind: "feature";
5794
- reference: {
5795
- nodeId: string;
5796
- featureId: string;
5797
- parameters?: Record<string, string | number | boolean> | undefined;
5798
- };
5799
- fallback: [number, number, number];
5800
- } | [number, number, number])[];
5801
- baseline: {
5802
- origin: [number, number];
5803
- direction: [number, number];
5804
- };
5805
- chainMode: "continuous" | "point-to-point";
5806
- mode: "angular" | "arc-length" | "center-mark" | "chord" | "coordinate" | "diameter" | "linear" | "radius";
5807
- featureCount: number;
5808
- showCenterMark: boolean;
5809
- prefix: string;
5810
- suffix: string;
5811
- textOverride: string | null;
5812
- datumPolicy: "centerline" | "finish-face" | "structural-face" | "wall-face";
5813
- terminator: "architectural-tick" | "dot" | "filled-arrow" | "open-arrow";
5814
- textPosition: "above" | "centered";
5815
- imperialPrecision: "1" | "1/16" | "1/2" | "1/4" | "1/8";
5816
- metricNotation: "meters" | "millimeters";
5817
- extensionStartGap: number;
5818
- extensionOvershoot: number;
5819
- drawingType: "floor-plan" | "foundation-plan" | "reflected-ceiling-plan" | "roof-plan" | "site-plan";
5820
- drawingOverrides: {
5821
- drawingType: "floor-plan" | "foundation-plan" | "reflected-ceiling-plan" | "roof-plan" | "site-plan";
5822
- presentation: "controlled" | "omit" | "shown";
5823
- suppressedSegmentIndexes: number[];
5824
- }[];
5825
- controllingDimensionId: `construction-dimension_${string}` | null;
5826
- type: "construction-dimension";
6025
+ type: "column";
5827
6026
  } | {
5828
6027
  object: "node";
5829
6028
  name?: string | undefined;
@@ -5848,19 +6047,29 @@ export declare function retainSceneAnnotations(before: Record<AnyNodeId, AnyNode
5848
6047
  fromIds: string[];
5849
6048
  } | undefined;
5850
6049
  } | undefined;
5851
- id: `duct-terminal_${string}`;
6050
+ id: `duct-fitting_${string}`;
5852
6051
  position: [number, number, number];
5853
- rotation: number;
5854
- supportSlabId?: string | undefined;
5855
- terminalType: "diffuser" | "return-grille" | "supply-register";
5856
- mount: "ceiling" | "floor" | "wall";
6052
+ rotation: [number, number, number];
6053
+ fittingType: "access-panel" | "coupling" | "cross" | "damper" | "elbow" | "end-cap" | "reducer" | "tee" | "transition";
6054
+ shape: "oval" | "rect" | "round";
6055
+ inletShape?: "oval" | "rect" | "round" | undefined;
6056
+ outletShape?: "oval" | "rect" | "round" | undefined;
5857
6057
  width: number;
5858
- depth: number;
5859
- collarShape: "oval" | "rect" | "round";
5860
- collarDiameter: number;
5861
- collarWidth: number;
5862
- collarHeight: number;
5863
- type: "duct-terminal";
6058
+ height: number;
6059
+ shape2: "oval" | "rect" | "round";
6060
+ width2: number;
6061
+ height2: number;
6062
+ angle: number;
6063
+ branchAngle: number;
6064
+ diameter: number;
6065
+ diameter2: number;
6066
+ ductMaterial: "duct-board" | "flex" | "sheet-metal";
6067
+ system: "return" | "supply";
6068
+ damperAngle: number;
6069
+ panelWidth: number;
6070
+ panelHeight: number;
6071
+ slots?: Record<string, string> | undefined;
6072
+ type: "duct-fitting";
5864
6073
  } | {
5865
6074
  object: "node";
5866
6075
  name?: string | undefined;
@@ -5877,31 +6086,31 @@ export declare function retainSceneAnnotations(before: Record<AnyNodeId, AnyNode
5877
6086
  provenance?: {
5878
6087
  refs: {
5879
6088
  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";
6089
+ id: string;
6090
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
6091
+ }[];
6092
+ lineage?: {
6093
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
6094
+ fromIds: string[];
6095
+ } | undefined;
6096
+ } | undefined;
6097
+ id: `hvac-equipment_${string}`;
6098
+ position: [number, number, number];
6099
+ rotation: number;
6100
+ supportSlabId?: string | undefined;
6101
+ equipmentType: "air-handler" | "condenser" | "furnace";
6102
+ width: number;
6103
+ depth: number;
6104
+ height: number;
6105
+ supplyShape: "oval" | "rect" | "round";
6106
+ returnShape: "oval" | "rect" | "round";
6107
+ supplyDiameter: number;
6108
+ returnDiameter: number;
6109
+ supplyWidth: number;
6110
+ supplyHeight: number;
6111
+ returnWidth: number;
6112
+ returnHeight: number;
6113
+ type: "hvac-equipment";
5905
6114
  } | {
5906
6115
  object: "node";
5907
6116
  name?: string | undefined;
@@ -5926,10 +6135,17 @@ export declare function retainSceneAnnotations(before: Record<AnyNodeId, AnyNode
5926
6135
  fromIds: string[];
5927
6136
  } | undefined;
5928
6137
  } | undefined;
5929
- id: `liquid-line_${string}`;
5930
- path: [number, number, number][];
6138
+ id: `pipe-fitting_${string}`;
6139
+ position: [number, number, number];
6140
+ rotation: [number, number, number];
6141
+ fittingType: "cleanout" | "coupling" | "cross" | "elbow" | "end-cap" | "reducer" | "sanitary-tee" | "wye";
6142
+ angle: number;
5931
6143
  diameter: number;
5932
- type: "liquid-line";
6144
+ diameter2: number;
6145
+ cleanoutStyle: "end" | "inline";
6146
+ pipeMaterial: "abs" | "cast-iron" | "pvc";
6147
+ system: "vent" | "waste";
6148
+ type: "pipe-fitting";
5933
6149
  } | {
5934
6150
  object: "node";
5935
6151
  name?: string | undefined;
@@ -6630,231 +6846,21 @@ export declare function retainSceneAnnotations(before: Record<AnyNodeId, AnyNode
6630
6846
  roughness: number;
6631
6847
  metalness: number;
6632
6848
  opacity: number;
6633
- transparent: boolean;
6634
- side: "back" | "double" | "front";
6635
- } | undefined;
6636
- texture?: {
6637
- url: string;
6638
- repeat?: [number, number] | undefined;
6639
- scale?: number | undefined;
6640
- offset?: [number, number] | undefined;
6641
- normalMap?: string | undefined;
6642
- normalScale?: number | undefined;
6643
- bumpMap?: string | undefined;
6644
- bumpScale?: number | undefined;
6645
- } | undefined;
6646
- } | undefined;
6647
- slots?: Record<string, string> | undefined;
6648
- source?: {
6649
- kind: "script";
6650
- meta?: {
6651
- description?: string | undefined;
6652
- category?: string | undefined;
6653
- tags?: string[] | undefined;
6654
- parent?: string | undefined;
6655
- } | undefined;
6656
- language: "bpy" | "three";
6657
- script: string;
6658
- params: Record<string, string | number | boolean>;
6659
- artifact: string;
6660
- manifest: {
6661
- bounds: {
6662
- min: [number, number, number];
6663
- max: [number, number, number];
6664
- };
6665
- params: {
6666
- id: string;
6667
- label?: string | undefined;
6668
- kind: "boolean" | "number" | "string";
6669
- default: string | number | boolean;
6670
- min?: number | undefined;
6671
- max?: number | undefined;
6672
- step?: number | undefined;
6673
- unit?: string | undefined;
6674
- options?: string[] | undefined;
6675
- }[];
6676
- parts: {
6677
- id: string;
6678
- label?: string | undefined;
6679
- type?: string | undefined;
6680
- bounds?: {
6681
- min: [number, number, number];
6682
- max: [number, number, number];
6683
- } | undefined;
6684
- }[];
6685
- surfaces: {
6686
- part?: string | undefined;
6687
- y: number;
6688
- polygon: [number, number][];
6689
- }[];
6690
- slots: {
6691
- id: string;
6692
- label?: string | undefined;
6693
- color?: string | undefined;
6694
- roughness?: number | undefined;
6695
- metalness?: number | undefined;
6696
- transparent?: boolean | undefined;
6697
- emissive?: boolean | undefined;
6698
- }[];
6699
- anchors: {
6700
- id: string;
6701
- position: [number, number, number];
6702
- normal?: [number, number, number] | undefined;
6703
- }[];
6704
- lights: {
6705
- id: string;
6706
- position: [number, number, number];
6707
- color: string;
6708
- intensity: number;
6709
- distance?: number | undefined;
6710
- spot?: {
6711
- direction: [number, number, number];
6712
- angle: number;
6713
- softness: number;
6714
- } | undefined;
6715
- shadows?: boolean | undefined;
6716
- glow?: {
6717
- size: number;
6718
- strength: number;
6719
- } | undefined;
6720
- }[];
6721
- undersides: {
6722
- part?: string | undefined;
6723
- polygon: [number, number][];
6724
- plane: [number, number, number, number];
6725
- }[];
6726
- animations: {
6727
- name: string;
6728
- duration: number;
6729
- }[];
6730
- cutters?: {
6731
- host: "ceiling" | "mounted" | "slab" | "wall";
6732
- polygon: number[][];
6733
- minY: number;
6734
- maxY: number;
6735
- }[] | undefined;
6736
- cutout: boolean;
6737
- collider: boolean;
6738
- shape?: {
6739
- tolerance: number;
6740
- bands: {
6741
- y0: number;
6742
- y1: number;
6743
- polygons: {
6744
- outer: [number, number][];
6745
- holes?: [number, number][][] | undefined;
6746
- }[];
6747
- }[];
6748
- } | undefined;
6749
- triangles: number;
6750
- coverage?: number | undefined;
6751
- uncovered?: {
6752
- min: [number, number];
6753
- max: [number, number];
6754
- }[] | undefined;
6755
- };
6756
- images?: {
6757
- artifact: string;
6758
- thumbnail: string;
6759
- floorPlan: string;
6760
- } | undefined;
6761
- } | undefined;
6762
- position: [number, number, number];
6763
- rotation: [number, number, number];
6764
- side?: "back" | "front" | undefined;
6765
- verticalAnchor?: "floor" | "wall" | undefined;
6766
- floorThresholdVersion: 0 | 1;
6767
- wallId?: string | undefined;
6768
- dormerId?: string | undefined;
6769
- dormerFace?: "back" | "front" | "left" | "right" | undefined;
6770
- roofSegmentId?: string | undefined;
6771
- roofFace?: "back" | "front" | "left" | "right" | undefined;
6772
- width: number;
6773
- height: number;
6774
- mark?: string | undefined;
6775
- constructionType: "framed" | "masonry";
6776
- dimensionReference: "finish-opening" | "masonry-opening" | "nominal" | "rough-opening";
6777
- roughOpeningWidth?: number | undefined;
6778
- roughOpeningHeight?: number | undefined;
6779
- masonryOpeningWidth?: number | undefined;
6780
- masonryOpeningHeight?: number | undefined;
6781
- finishOpeningWidth?: number | undefined;
6782
- finishOpeningHeight?: number | undefined;
6783
- openingKind: "opening" | "window";
6784
- windowType: "awning" | "bay" | "bow" | "casement" | "double-hung" | "fixed" | "hopper" | "louvered" | "single-hung" | "sliding" | "tilt-turn";
6785
- operationState: number;
6786
- openingDirection?: "inward" | "outward" | undefined;
6787
- tiltTurnMode?: "tilt" | "turn" | undefined;
6788
- awningDirection: "down" | "up";
6789
- casementStyle: "french" | "single";
6790
- hingesSide: "left" | "right";
6791
- openingShape: "arch" | "rectangle" | "rounded";
6792
- openingRadiusMode: "all" | "individual";
6793
- openingCornerRadii: [number, number, number, number];
6794
- cornerRadius: number;
6795
- archHeight: number;
6796
- openingRevealRadius: number;
6797
- frameThickness: number;
6798
- frameDepth?: number | undefined;
6799
- windowHandle?: boolean | undefined;
6800
- sashGrid?: boolean | undefined;
6801
- columnRatios: number[];
6802
- rowRatios: number[];
6803
- columnDividerThickness: number;
6804
- rowDividerThickness: number;
6805
- corner?: {
6806
- end: "end" | "start";
6807
- partnerId: string;
6808
- post: "none" | "post";
6809
- } | undefined;
6810
- sill: boolean;
6811
- sillDepth: number;
6812
- sillThickness: number;
6813
- sillOverhang?: number | undefined;
6814
- sillInterior?: boolean | undefined;
6815
- sillInteriorDepth?: number | undefined;
6816
- sillInteriorThickness?: number | undefined;
6817
- sillInteriorOverhang?: number | undefined;
6818
- shutters?: "board-batten" | "louvered" | "none" | "panel" | undefined;
6819
- shutterWidth?: number | undefined;
6820
- shutterOpen?: number | undefined;
6821
- shutterSides?: "both" | "left" | "right" | undefined;
6822
- rollerShutter?: "box" | "concealed" | "none" | undefined;
6823
- rollerShutterBoxHeight?: number | undefined;
6824
- rollerShutterOpen?: number | undefined;
6825
- casingFaceA?: boolean | undefined;
6826
- casingFaceB?: boolean | undefined;
6827
- casingWidth?: number | undefined;
6828
- type: "window";
6829
- } | {
6830
- object: "node";
6831
- name?: string | undefined;
6832
- parentId: string | null;
6833
- visible: boolean;
6834
- camera?: {
6835
- position: [number, number, number];
6836
- target: [number, number, number];
6837
- mode: "orthographic" | "perspective";
6838
- fov?: number | undefined;
6839
- zoom?: number | undefined;
6840
- } | undefined;
6841
- metadata: Record<string, unknown>;
6842
- provenance?: {
6843
- refs: {
6844
- ns?: string | undefined;
6845
- id: string;
6846
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
6847
- }[];
6848
- lineage?: {
6849
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
6850
- fromIds: string[];
6849
+ transparent: boolean;
6850
+ side: "back" | "double" | "front";
6851
+ } | undefined;
6852
+ texture?: {
6853
+ url: string;
6854
+ repeat?: [number, number] | undefined;
6855
+ scale?: number | undefined;
6856
+ offset?: [number, number] | undefined;
6857
+ normalMap?: string | undefined;
6858
+ normalScale?: number | undefined;
6859
+ bumpMap?: string | undefined;
6860
+ bumpScale?: number | undefined;
6851
6861
  } | undefined;
6852
6862
  } | undefined;
6853
- id: `column_${string}`;
6854
- children: string[];
6855
- position: [number, number, number];
6856
- rotation: number;
6857
- supportSlabId?: string | undefined;
6863
+ slots?: Record<string, string> | undefined;
6858
6864
  source?: {
6859
6865
  kind: "script";
6860
6866
  meta?: {
@@ -6969,104 +6975,73 @@ export declare function retainSceneAnnotations(before: Record<AnyNodeId, AnyNode
6969
6975
  floorPlan: string;
6970
6976
  } | undefined;
6971
6977
  } | undefined;
6972
- style: "cluster" | "dravidian-carved" | "faceted" | "fluted" | "lathe-turned" | "plain";
6973
- crossSection: "octagonal" | "rectangular" | "round" | "sixteen-sided" | "square";
6974
- height: number;
6975
- radius: number;
6978
+ position: [number, number, number];
6979
+ rotation: [number, number, number];
6980
+ side?: "back" | "front" | undefined;
6981
+ verticalAnchor?: "floor" | "wall" | undefined;
6982
+ floorThresholdVersion: 0 | 1;
6983
+ wallId?: string | undefined;
6984
+ dormerId?: string | undefined;
6985
+ dormerFace?: "back" | "front" | "left" | "right" | undefined;
6986
+ roofSegmentId?: string | undefined;
6987
+ roofFace?: "back" | "front" | "left" | "right" | undefined;
6976
6988
  width: number;
6977
- depth: number;
6978
- edgeSoftness: number;
6979
- baseHeight: number;
6980
- capitalHeight: number;
6981
- shaftProfile: "baluster" | "bulged" | "hourglass" | "straight" | "tapered";
6982
- shaftTaper: number;
6983
- shaftBulge: number;
6984
- shaftStartScale: number;
6985
- shaftEndScale: number;
6986
- shaftSegmentCount: number;
6987
- shaftTwistStep: number;
6988
- shaftCornerRadius: number;
6989
- shaftDetail: "fluted" | "lathe-turned" | "none" | "panelled" | "spiral";
6990
- baseStyle: "lotus" | "none" | "panelled-pedestal" | "ribbed-lotus" | "round-rings" | "simple-square" | "square-plinth" | "stepped-square";
6991
- baseWidthScale: number;
6992
- baseDepthScale: number;
6993
- baseTierCount: number;
6994
- baseStepSpread: number;
6995
- basePlinthHeightRatio: number;
6996
- baseRoundBandScale: number;
6997
- baseNeckScale: number;
6998
- baseRoundBandCount: number;
6999
- baseRibCount: number;
7000
- baseCarvingLevel: number;
7001
- basePanelInset: number;
7002
- capitalStyle: "corinthian-leaf" | "doric" | "ionic-volute" | "leaf-carved" | "none" | "rounded" | "simple" | "simple-slab" | "south-indian-bracket" | "stepped" | "volute" | "wood-bracket";
7003
- capitalWidthScale: number;
7004
- capitalDepthScale: number;
7005
- capitalTierCount: number;
7006
- capitalStepSpread: number;
7007
- capitalBandCount: number;
7008
- voluteSize: number;
7009
- voluteCount: number;
7010
- leafCount: number;
7011
- leafRows: number;
7012
- bracketDepth: number;
7013
- bracketTierCount: number;
7014
- pendantCount: number;
7015
- capitalCarvingLevel: number;
7016
- ringCount: number;
7017
- ringPlacement: "bottom" | "ends" | "even" | "top";
7018
- ringThickness: number;
7019
- ringSpread: number;
7020
- fluteCount: number;
7021
- fluteDepth: number;
7022
- fluteWidth: number;
7023
- spiralTwist: number;
7024
- spiralRibCount: number;
7025
- panelCount: number;
7026
- panelInsetDepth: number;
7027
- panelShape: "arched" | "diamond" | "rectangle";
7028
- latheRingCount: number;
7029
- latheRingSpacing: "bottom" | "ends" | "even" | "top";
7030
- carvingLevel: number;
7031
- carvingPlacement: "all" | "base" | "capital" | "shaft";
7032
- lowerBandEnabled: boolean;
7033
- lowerBandHeight: number;
7034
- lowerBandCarvingLevel: number;
7035
- dentilCount: number;
7036
- beadCount: number;
7037
- supportStyle: "a-frame" | "box-frame" | "k-brace" | "portal-frame" | "single-strut" | "trestle" | "tripod" | "v-frame" | "vertical" | "x-brace" | "y-frame";
7038
- braceWidth: number;
7039
- braceDepth: number;
7040
- braceBottomSpread: number;
7041
- braceTopSpread: number;
7042
- bracePlateEnabled: boolean;
7043
- role?: "ornament" | "post" | undefined;
7044
- postBase?: "none" | "pier" | "post-base" | undefined;
7045
- material?: {
7046
- id?: string | undefined;
7047
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
7048
- properties?: {
7049
- color: string;
7050
- roughness: number;
7051
- metalness: number;
7052
- opacity: number;
7053
- transparent: boolean;
7054
- side: "back" | "double" | "front";
7055
- } | undefined;
7056
- texture?: {
7057
- url: string;
7058
- repeat?: [number, number] | undefined;
7059
- scale?: number | undefined;
7060
- offset?: [number, number] | undefined;
7061
- normalMap?: string | undefined;
7062
- normalScale?: number | undefined;
7063
- bumpMap?: string | undefined;
7064
- bumpScale?: number | undefined;
7065
- } | undefined;
6989
+ height: number;
6990
+ mark?: string | undefined;
6991
+ constructionType: "framed" | "masonry";
6992
+ dimensionReference: "finish-opening" | "masonry-opening" | "nominal" | "rough-opening";
6993
+ roughOpeningWidth?: number | undefined;
6994
+ roughOpeningHeight?: number | undefined;
6995
+ masonryOpeningWidth?: number | undefined;
6996
+ masonryOpeningHeight?: number | undefined;
6997
+ finishOpeningWidth?: number | undefined;
6998
+ finishOpeningHeight?: number | undefined;
6999
+ openingKind: "opening" | "window";
7000
+ windowType: "awning" | "bay" | "bow" | "casement" | "double-hung" | "fixed" | "hopper" | "louvered" | "single-hung" | "sliding" | "tilt-turn";
7001
+ operationState: number;
7002
+ openingDirection?: "inward" | "outward" | undefined;
7003
+ tiltTurnMode?: "tilt" | "turn" | undefined;
7004
+ awningDirection: "down" | "up";
7005
+ casementStyle: "french" | "single";
7006
+ hingesSide: "left" | "right";
7007
+ openingShape: "arch" | "rectangle" | "rounded";
7008
+ openingRadiusMode: "all" | "individual";
7009
+ openingCornerRadii: [number, number, number, number];
7010
+ cornerRadius: number;
7011
+ archHeight: number;
7012
+ openingRevealRadius: number;
7013
+ frameThickness: number;
7014
+ frameDepth?: number | undefined;
7015
+ windowHandle?: boolean | undefined;
7016
+ sashGrid?: boolean | undefined;
7017
+ columnRatios: number[];
7018
+ rowRatios: number[];
7019
+ columnDividerThickness: number;
7020
+ rowDividerThickness: number;
7021
+ corner?: {
7022
+ end: "end" | "start";
7023
+ partnerId: string;
7024
+ post: "none" | "post";
7066
7025
  } | undefined;
7067
- materialPreset?: string | undefined;
7068
- slots?: Record<string, string> | undefined;
7069
- type: "column";
7026
+ sill: boolean;
7027
+ sillDepth: number;
7028
+ sillThickness: number;
7029
+ sillOverhang?: number | undefined;
7030
+ sillInterior?: boolean | undefined;
7031
+ sillInteriorDepth?: number | undefined;
7032
+ sillInteriorThickness?: number | undefined;
7033
+ sillInteriorOverhang?: number | undefined;
7034
+ shutters?: "board-batten" | "louvered" | "none" | "panel" | undefined;
7035
+ shutterWidth?: number | undefined;
7036
+ shutterOpen?: number | undefined;
7037
+ shutterSides?: "both" | "left" | "right" | undefined;
7038
+ rollerShutter?: "box" | "concealed" | "none" | undefined;
7039
+ rollerShutterBoxHeight?: number | undefined;
7040
+ rollerShutterOpen?: number | undefined;
7041
+ casingFaceA?: boolean | undefined;
7042
+ casingFaceB?: boolean | undefined;
7043
+ casingWidth?: number | undefined;
7044
+ type: "window";
7070
7045
  } | {
7071
7046
  object: "node";
7072
7047
  name?: string | undefined;
@@ -8615,18 +8590,125 @@ export declare function retainSceneAnnotations(before: Record<AnyNodeId, AnyNode
8615
8590
  fromIds: string[];
8616
8591
  } | undefined;
8617
8592
  } | undefined;
8618
- id: `beam_${string}`;
8619
- start: [number, number];
8620
- end: [number, number];
8621
- width: number;
8622
- depth: number;
8623
- size?: string | undefined;
8624
- plies: number;
8625
- material: "glulam" | "lvl" | "pressure-treated" | "sawn" | "steel";
8626
- placement: "dropped" | "flush";
8627
- topElevation?: number | undefined;
8593
+ id: `beam_${string}`;
8594
+ start: [number, number];
8595
+ end: [number, number];
8596
+ width: number;
8597
+ depth: number;
8598
+ size?: string | undefined;
8599
+ plies: number;
8600
+ material: "glulam" | "lvl" | "pressure-treated" | "sawn" | "steel";
8601
+ placement: "dropped" | "flush";
8602
+ topElevation?: number | undefined;
8603
+ supportSlabId?: string | undefined;
8604
+ type: "beam";
8605
+ } | {
8606
+ object: "node";
8607
+ name?: string | undefined;
8608
+ parentId: string | null;
8609
+ visible: boolean;
8610
+ camera?: {
8611
+ position: [number, number, number];
8612
+ target: [number, number, number];
8613
+ mode: "orthographic" | "perspective";
8614
+ fov?: number | undefined;
8615
+ zoom?: number | undefined;
8616
+ } | undefined;
8617
+ metadata: Record<string, unknown>;
8618
+ provenance?: {
8619
+ refs: {
8620
+ ns?: string | undefined;
8621
+ id: string;
8622
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
8623
+ }[];
8624
+ lineage?: {
8625
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
8626
+ fromIds: string[];
8627
+ } | undefined;
8628
+ } | undefined;
8629
+ id: `construction-dimension_${string}`;
8630
+ anchors: ({
8631
+ kind: "feature";
8632
+ reference: {
8633
+ nodeId: string;
8634
+ featureId: string;
8635
+ parameters?: Record<string, string | number | boolean> | undefined;
8636
+ };
8637
+ fallback: [number, number, number];
8638
+ } | [number, number, number])[];
8639
+ baseline: {
8640
+ origin: [number, number];
8641
+ direction: [number, number];
8642
+ };
8643
+ chainMode: "continuous" | "point-to-point";
8644
+ mode: "angular" | "arc-length" | "center-mark" | "chord" | "coordinate" | "diameter" | "linear" | "radius";
8645
+ featureCount: number;
8646
+ showCenterMark: boolean;
8647
+ prefix: string;
8648
+ suffix: string;
8649
+ textOverride: string | null;
8650
+ datumPolicy: "centerline" | "finish-face" | "structural-face" | "wall-face";
8651
+ terminator: "architectural-tick" | "dot" | "filled-arrow" | "open-arrow";
8652
+ textPosition: "above" | "centered";
8653
+ imperialPrecision: "1" | "1/16" | "1/2" | "1/4" | "1/8";
8654
+ metricNotation: "meters" | "millimeters";
8655
+ extensionStartGap: number;
8656
+ extensionOvershoot: number;
8657
+ drawingType: "floor-plan" | "foundation-plan" | "reflected-ceiling-plan" | "roof-plan" | "site-plan";
8658
+ drawingOverrides: {
8659
+ drawingType: "floor-plan" | "foundation-plan" | "reflected-ceiling-plan" | "roof-plan" | "site-plan";
8660
+ presentation: "controlled" | "omit" | "shown";
8661
+ suppressedSegmentIndexes: number[];
8662
+ }[];
8663
+ controllingDimensionId: `construction-dimension_${string}` | null;
8664
+ type: "construction-dimension";
8665
+ } | {
8666
+ object: "node";
8667
+ name?: string | undefined;
8668
+ parentId: string | null;
8669
+ visible: boolean;
8670
+ camera?: {
8671
+ position: [number, number, number];
8672
+ target: [number, number, number];
8673
+ mode: "orthographic" | "perspective";
8674
+ fov?: number | undefined;
8675
+ zoom?: number | undefined;
8676
+ } | undefined;
8677
+ metadata: Record<string, unknown>;
8678
+ provenance?: {
8679
+ refs: {
8680
+ ns?: string | undefined;
8681
+ id: string;
8682
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
8683
+ }[];
8684
+ lineage?: {
8685
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
8686
+ fromIds: string[];
8687
+ } | undefined;
8688
+ } | undefined;
8689
+ id: `block_${string}`;
8690
+ children: string[];
8691
+ position: [number, number, number];
8692
+ rotation: number;
8628
8693
  supportSlabId?: string | undefined;
8629
- type: "beam";
8694
+ topology: {
8695
+ vertices: {
8696
+ id: string;
8697
+ position: [number, number, number];
8698
+ }[];
8699
+ edges: {
8700
+ id: string;
8701
+ vertexIds: [string, string];
8702
+ }[];
8703
+ faces: {
8704
+ id: string;
8705
+ vertexIds: string[];
8706
+ materialSlot: string;
8707
+ }[];
8708
+ };
8709
+ slots: Record<string, string>;
8710
+ slotNames: Record<string, string>;
8711
+ type: "block";
8630
8712
  } | {
8631
8713
  object: "node";
8632
8714
  name?: string | undefined;
@@ -9505,6 +9587,47 @@ export declare function retainSceneAnnotations(before: Record<AnyNodeId, AnyNode
9505
9587
  scale: number;
9506
9588
  opacity: number;
9507
9589
  type: "scan";
9590
+ } | {
9591
+ object: "node";
9592
+ name?: string | undefined;
9593
+ parentId: string | null;
9594
+ visible: boolean;
9595
+ camera?: {
9596
+ position: [number, number, number];
9597
+ target: [number, number, number];
9598
+ mode: "orthographic" | "perspective";
9599
+ fov?: number | undefined;
9600
+ zoom?: number | undefined;
9601
+ } | undefined;
9602
+ metadata: Record<string, unknown>;
9603
+ provenance?: {
9604
+ refs: {
9605
+ ns?: string | undefined;
9606
+ id: string;
9607
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
9608
+ }[];
9609
+ lineage?: {
9610
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
9611
+ fromIds: string[];
9612
+ } | undefined;
9613
+ } | undefined;
9614
+ id: `guide_${string}`;
9615
+ url: string;
9616
+ position: [number, number, number];
9617
+ rotation: [number, number, number];
9618
+ scale: number;
9619
+ opacity: number;
9620
+ scaleReference: {
9621
+ start: [number, number];
9622
+ end: [number, number];
9623
+ realLengthMeters: number;
9624
+ measuredLengthUnits: number;
9625
+ metersPerUnit: number;
9626
+ displayLength?: number | undefined;
9627
+ displayUnit?: "centimeters" | "feet" | "inches" | "meters" | undefined;
9628
+ label: string;
9629
+ } | null;
9630
+ type: "guide";
9508
9631
  } | {
9509
9632
  object: "node";
9510
9633
  name?: string | undefined;
@@ -9784,29 +9907,19 @@ export declare function retainSceneAnnotations(before: Record<AnyNodeId, AnyNode
9784
9907
  fromIds: string[];
9785
9908
  } | undefined;
9786
9909
  } | undefined;
9787
- id: `duct-fitting_${string}`;
9910
+ id: `duct-terminal_${string}`;
9788
9911
  position: [number, number, number];
9789
- rotation: [number, number, number];
9790
- fittingType: "access-panel" | "coupling" | "cross" | "damper" | "elbow" | "end-cap" | "reducer" | "tee" | "transition";
9791
- shape: "oval" | "rect" | "round";
9792
- inletShape?: "oval" | "rect" | "round" | undefined;
9793
- outletShape?: "oval" | "rect" | "round" | undefined;
9912
+ rotation: number;
9913
+ supportSlabId?: string | undefined;
9914
+ terminalType: "diffuser" | "return-grille" | "supply-register";
9915
+ mount: "ceiling" | "floor" | "wall";
9794
9916
  width: number;
9795
- height: number;
9796
- shape2: "oval" | "rect" | "round";
9797
- width2: number;
9798
- height2: number;
9799
- angle: number;
9800
- branchAngle: number;
9801
- diameter: number;
9802
- diameter2: number;
9803
- ductMaterial: "duct-board" | "flex" | "sheet-metal";
9804
- system: "return" | "supply";
9805
- damperAngle: number;
9806
- panelWidth: number;
9807
- panelHeight: number;
9808
- slots?: Record<string, string> | undefined;
9809
- type: "duct-fitting";
9917
+ depth: number;
9918
+ collarShape: "oval" | "rect" | "round";
9919
+ collarDiameter: number;
9920
+ collarWidth: number;
9921
+ collarHeight: number;
9922
+ type: "duct-terminal";
9810
9923
  } | {
9811
9924
  object: "node";
9812
9925
  name?: string | undefined;
@@ -9831,23 +9944,12 @@ export declare function retainSceneAnnotations(before: Record<AnyNodeId, AnyNode
9831
9944
  fromIds: string[];
9832
9945
  } | undefined;
9833
9946
  } | undefined;
9834
- id: `hvac-equipment_${string}`;
9835
- position: [number, number, number];
9836
- rotation: number;
9837
- supportSlabId?: string | undefined;
9838
- equipmentType: "air-handler" | "condenser" | "furnace";
9839
- width: number;
9840
- depth: number;
9841
- height: number;
9842
- supplyShape: "oval" | "rect" | "round";
9843
- returnShape: "oval" | "rect" | "round";
9844
- supplyDiameter: number;
9845
- returnDiameter: number;
9846
- supplyWidth: number;
9847
- supplyHeight: number;
9848
- returnWidth: number;
9849
- returnHeight: number;
9850
- type: "hvac-equipment";
9947
+ id: `lineset_${string}`;
9948
+ path: [number, number, number][];
9949
+ suctionDiameter: number;
9950
+ liquidDiameter: number;
9951
+ insulated: boolean;
9952
+ type: "lineset";
9851
9953
  } | {
9852
9954
  object: "node";
9853
9955
  name?: string | undefined;
@@ -9872,12 +9974,10 @@ export declare function retainSceneAnnotations(before: Record<AnyNodeId, AnyNode
9872
9974
  fromIds: string[];
9873
9975
  } | undefined;
9874
9976
  } | undefined;
9875
- id: `lineset_${string}`;
9977
+ id: `liquid-line_${string}`;
9876
9978
  path: [number, number, number][];
9877
- suctionDiameter: number;
9878
- liquidDiameter: number;
9879
- insulated: boolean;
9880
- type: "lineset";
9979
+ diameter: number;
9980
+ type: "liquid-line";
9881
9981
  } | {
9882
9982
  object: "node";
9883
9983
  name?: string | undefined;
@@ -9924,41 +10024,6 @@ export declare function retainSceneAnnotations(before: Record<AnyNodeId, AnyNode
9924
10024
  pipeMaterial: "abs" | "cast-iron" | "pvc";
9925
10025
  system: "vent" | "waste";
9926
10026
  type: "pipe-segment";
9927
- } | {
9928
- object: "node";
9929
- name?: string | undefined;
9930
- parentId: string | null;
9931
- visible: boolean;
9932
- camera?: {
9933
- position: [number, number, number];
9934
- target: [number, number, number];
9935
- mode: "orthographic" | "perspective";
9936
- fov?: number | undefined;
9937
- zoom?: number | undefined;
9938
- } | undefined;
9939
- metadata: Record<string, unknown>;
9940
- provenance?: {
9941
- refs: {
9942
- ns?: string | undefined;
9943
- id: string;
9944
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
9945
- }[];
9946
- lineage?: {
9947
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
9948
- fromIds: string[];
9949
- } | undefined;
9950
- } | undefined;
9951
- id: `pipe-fitting_${string}`;
9952
- position: [number, number, number];
9953
- rotation: [number, number, number];
9954
- fittingType: "cleanout" | "coupling" | "cross" | "elbow" | "end-cap" | "reducer" | "sanitary-tee" | "wye";
9955
- angle: number;
9956
- diameter: number;
9957
- diameter2: number;
9958
- cleanoutStyle: "end" | "inline";
9959
- pipeMaterial: "abs" | "cast-iron" | "pvc";
9960
- system: "vent" | "waste";
9961
- type: "pipe-fitting";
9962
10027
  } | {
9963
10028
  object: "node";
9964
10029
  name?: string | undefined;
@@ -10557,71 +10622,6 @@ export declare function retainSceneAnnotations(before: Record<AnyNodeId, AnyNode
10557
10622
  topFinishHeight: number;
10558
10623
  topFinishDepth: number;
10559
10624
  type: "cabinet-module";
10560
- } | {
10561
- object: "node";
10562
- name?: string | undefined;
10563
- parentId: string | null;
10564
- visible: boolean;
10565
- camera?: {
10566
- position: [number, number, number];
10567
- target: [number, number, number];
10568
- mode: "orthographic" | "perspective";
10569
- fov?: number | undefined;
10570
- zoom?: number | undefined;
10571
- } | undefined;
10572
- metadata: Record<string, unknown>;
10573
- provenance?: {
10574
- refs: {
10575
- ns?: string | undefined;
10576
- id: string;
10577
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
10578
- }[];
10579
- lineage?: {
10580
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
10581
- fromIds: string[];
10582
- } | undefined;
10583
- } | undefined;
10584
- id: `bvent_${string}`;
10585
- material?: {
10586
- id?: string | undefined;
10587
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
10588
- properties?: {
10589
- color: string;
10590
- roughness: number;
10591
- metalness: number;
10592
- opacity: number;
10593
- transparent: boolean;
10594
- side: "back" | "double" | "front";
10595
- } | undefined;
10596
- texture?: {
10597
- url: string;
10598
- repeat?: [number, number] | undefined;
10599
- scale?: number | undefined;
10600
- offset?: [number, number] | undefined;
10601
- normalMap?: string | undefined;
10602
- normalScale?: number | undefined;
10603
- bumpMap?: string | undefined;
10604
- bumpScale?: number | undefined;
10605
- } | undefined;
10606
- } | undefined;
10607
- slots?: Record<string, string> | undefined;
10608
- materialPreset: string;
10609
- roofSegmentId?: string | undefined;
10610
- position: [number, number, number];
10611
- rotation: number;
10612
- width: number;
10613
- depth: number;
10614
- height: number;
10615
- hoodOverhang: number;
10616
- topTaper: number;
10617
- capHeight: number;
10618
- capGap: number;
10619
- domeCurvature: number;
10620
- baseInset: number;
10621
- baseHeight: number;
10622
- cornerBevel: number;
10623
- style: "box" | "cap" | "dome";
10624
- type: "box-vent";
10625
10625
  } | {
10626
10626
  object: "node";
10627
10627
  name?: string | undefined;