@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
@@ -26,29 +26,47 @@ export declare function wallAttachments(nodes: StructureNodes, wall: WallNode):
26
26
  fromIds: string[];
27
27
  } | undefined;
28
28
  } | undefined;
29
- id: `block_${string}`;
30
- children: string[];
29
+ id: `bvent_${string}`;
30
+ material?: {
31
+ id?: string | undefined;
32
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
33
+ properties?: {
34
+ color: string;
35
+ roughness: number;
36
+ metalness: number;
37
+ opacity: number;
38
+ transparent: boolean;
39
+ side: "back" | "double" | "front";
40
+ } | undefined;
41
+ texture?: {
42
+ url: string;
43
+ repeat?: [number, number] | undefined;
44
+ scale?: number | undefined;
45
+ offset?: [number, number] | undefined;
46
+ normalMap?: string | undefined;
47
+ normalScale?: number | undefined;
48
+ bumpMap?: string | undefined;
49
+ bumpScale?: number | undefined;
50
+ } | undefined;
51
+ } | undefined;
52
+ slots?: Record<string, string> | undefined;
53
+ materialPreset: string;
54
+ roofSegmentId?: string | undefined;
31
55
  position: [number, number, number];
32
56
  rotation: number;
33
- supportSlabId?: string | undefined;
34
- topology: {
35
- vertices: {
36
- id: string;
37
- position: [number, number, number];
38
- }[];
39
- edges: {
40
- id: string;
41
- vertexIds: [string, string];
42
- }[];
43
- faces: {
44
- id: string;
45
- vertexIds: string[];
46
- materialSlot: string;
47
- }[];
48
- };
49
- slots: Record<string, string>;
50
- slotNames: Record<string, string>;
51
- type: "block";
57
+ width: number;
58
+ depth: number;
59
+ height: number;
60
+ hoodOverhang: number;
61
+ topTaper: number;
62
+ capHeight: number;
63
+ capGap: number;
64
+ domeCurvature: number;
65
+ baseInset: number;
66
+ baseHeight: number;
67
+ cornerBevel: number;
68
+ style: "box" | "cap" | "dome";
69
+ type: "box-vent";
52
70
  } | {
53
71
  object: "node";
54
72
  name?: string | undefined;
@@ -73,42 +91,223 @@ export declare function wallAttachments(nodes: StructureNodes, wall: WallNode):
73
91
  fromIds: string[];
74
92
  } | undefined;
75
93
  } | undefined;
76
- id: `construction-dimension_${string}`;
77
- anchors: ({
78
- kind: "feature";
79
- reference: {
80
- nodeId: string;
81
- featureId: string;
82
- parameters?: Record<string, string | number | boolean> | undefined;
94
+ id: `column_${string}`;
95
+ children: string[];
96
+ position: [number, number, number];
97
+ rotation: number;
98
+ supportSlabId?: string | undefined;
99
+ source?: {
100
+ kind: "script";
101
+ meta?: {
102
+ description?: string | undefined;
103
+ category?: string | undefined;
104
+ tags?: string[] | undefined;
105
+ parent?: string | undefined;
106
+ } | undefined;
107
+ language: "bpy" | "three";
108
+ script: string;
109
+ params: Record<string, string | number | boolean>;
110
+ artifact: string;
111
+ manifest: {
112
+ bounds: {
113
+ min: [number, number, number];
114
+ max: [number, number, number];
115
+ };
116
+ params: {
117
+ id: string;
118
+ label?: string | undefined;
119
+ kind: "boolean" | "number" | "string";
120
+ default: string | number | boolean;
121
+ min?: number | undefined;
122
+ max?: number | undefined;
123
+ step?: number | undefined;
124
+ unit?: string | undefined;
125
+ options?: string[] | undefined;
126
+ }[];
127
+ parts: {
128
+ id: string;
129
+ label?: string | undefined;
130
+ type?: string | undefined;
131
+ bounds?: {
132
+ min: [number, number, number];
133
+ max: [number, number, number];
134
+ } | undefined;
135
+ }[];
136
+ surfaces: {
137
+ part?: string | undefined;
138
+ y: number;
139
+ polygon: [number, number][];
140
+ }[];
141
+ slots: {
142
+ id: string;
143
+ label?: string | undefined;
144
+ color?: string | undefined;
145
+ roughness?: number | undefined;
146
+ metalness?: number | undefined;
147
+ transparent?: boolean | undefined;
148
+ emissive?: boolean | undefined;
149
+ }[];
150
+ anchors: {
151
+ id: string;
152
+ position: [number, number, number];
153
+ normal?: [number, number, number] | undefined;
154
+ }[];
155
+ lights: {
156
+ id: string;
157
+ position: [number, number, number];
158
+ color: string;
159
+ intensity: number;
160
+ distance?: number | undefined;
161
+ spot?: {
162
+ direction: [number, number, number];
163
+ angle: number;
164
+ softness: number;
165
+ } | undefined;
166
+ shadows?: boolean | undefined;
167
+ glow?: {
168
+ size: number;
169
+ strength: number;
170
+ } | undefined;
171
+ }[];
172
+ undersides: {
173
+ part?: string | undefined;
174
+ polygon: [number, number][];
175
+ plane: [number, number, number, number];
176
+ }[];
177
+ animations: {
178
+ name: string;
179
+ duration: number;
180
+ }[];
181
+ cutters?: {
182
+ host: "ceiling" | "mounted" | "slab" | "wall";
183
+ polygon: number[][];
184
+ minY: number;
185
+ maxY: number;
186
+ }[] | undefined;
187
+ cutout: boolean;
188
+ collider: boolean;
189
+ shape?: {
190
+ tolerance: number;
191
+ bands: {
192
+ y0: number;
193
+ y1: number;
194
+ polygons: {
195
+ outer: [number, number][];
196
+ holes?: [number, number][][] | undefined;
197
+ }[];
198
+ }[];
199
+ } | undefined;
200
+ triangles: number;
201
+ coverage?: number | undefined;
202
+ uncovered?: {
203
+ min: [number, number];
204
+ max: [number, number];
205
+ }[] | undefined;
83
206
  };
84
- fallback: [number, number, number];
85
- } | [number, number, number])[];
86
- baseline: {
87
- origin: [number, number];
88
- direction: [number, number];
89
- };
90
- chainMode: "continuous" | "point-to-point";
91
- mode: "angular" | "arc-length" | "center-mark" | "chord" | "coordinate" | "diameter" | "linear" | "radius";
92
- featureCount: number;
93
- showCenterMark: boolean;
94
- prefix: string;
95
- suffix: string;
96
- textOverride: string | null;
97
- datumPolicy: "centerline" | "finish-face" | "structural-face" | "wall-face";
98
- terminator: "architectural-tick" | "dot" | "filled-arrow" | "open-arrow";
99
- textPosition: "above" | "centered";
100
- imperialPrecision: "1" | "1/16" | "1/2" | "1/4" | "1/8";
101
- metricNotation: "meters" | "millimeters";
102
- extensionStartGap: number;
103
- extensionOvershoot: number;
104
- drawingType: "floor-plan" | "foundation-plan" | "reflected-ceiling-plan" | "roof-plan" | "site-plan";
105
- drawingOverrides: {
106
- drawingType: "floor-plan" | "foundation-plan" | "reflected-ceiling-plan" | "roof-plan" | "site-plan";
107
- presentation: "controlled" | "omit" | "shown";
108
- suppressedSegmentIndexes: number[];
109
- }[];
110
- controllingDimensionId: `construction-dimension_${string}` | null;
111
- type: "construction-dimension";
207
+ images?: {
208
+ artifact: string;
209
+ thumbnail: string;
210
+ floorPlan: string;
211
+ } | undefined;
212
+ } | undefined;
213
+ style: "cluster" | "dravidian-carved" | "faceted" | "fluted" | "lathe-turned" | "plain";
214
+ crossSection: "octagonal" | "rectangular" | "round" | "sixteen-sided" | "square";
215
+ height: number;
216
+ radius: number;
217
+ width: number;
218
+ depth: number;
219
+ edgeSoftness: number;
220
+ baseHeight: number;
221
+ capitalHeight: number;
222
+ shaftProfile: "baluster" | "bulged" | "hourglass" | "straight" | "tapered";
223
+ shaftTaper: number;
224
+ shaftBulge: number;
225
+ shaftStartScale: number;
226
+ shaftEndScale: number;
227
+ shaftSegmentCount: number;
228
+ shaftTwistStep: number;
229
+ shaftCornerRadius: number;
230
+ shaftDetail: "fluted" | "lathe-turned" | "none" | "panelled" | "spiral";
231
+ baseStyle: "lotus" | "none" | "panelled-pedestal" | "ribbed-lotus" | "round-rings" | "simple-square" | "square-plinth" | "stepped-square";
232
+ baseWidthScale: number;
233
+ baseDepthScale: number;
234
+ baseTierCount: number;
235
+ baseStepSpread: number;
236
+ basePlinthHeightRatio: number;
237
+ baseRoundBandScale: number;
238
+ baseNeckScale: number;
239
+ baseRoundBandCount: number;
240
+ baseRibCount: number;
241
+ baseCarvingLevel: number;
242
+ basePanelInset: number;
243
+ capitalStyle: "corinthian-leaf" | "doric" | "ionic-volute" | "leaf-carved" | "none" | "rounded" | "simple" | "simple-slab" | "south-indian-bracket" | "stepped" | "volute" | "wood-bracket";
244
+ capitalWidthScale: number;
245
+ capitalDepthScale: number;
246
+ capitalTierCount: number;
247
+ capitalStepSpread: number;
248
+ capitalBandCount: number;
249
+ voluteSize: number;
250
+ voluteCount: number;
251
+ leafCount: number;
252
+ leafRows: number;
253
+ bracketDepth: number;
254
+ bracketTierCount: number;
255
+ pendantCount: number;
256
+ capitalCarvingLevel: number;
257
+ ringCount: number;
258
+ ringPlacement: "bottom" | "ends" | "even" | "top";
259
+ ringThickness: number;
260
+ ringSpread: number;
261
+ fluteCount: number;
262
+ fluteDepth: number;
263
+ fluteWidth: number;
264
+ spiralTwist: number;
265
+ spiralRibCount: number;
266
+ panelCount: number;
267
+ panelInsetDepth: number;
268
+ panelShape: "arched" | "diamond" | "rectangle";
269
+ latheRingCount: number;
270
+ latheRingSpacing: "bottom" | "ends" | "even" | "top";
271
+ carvingLevel: number;
272
+ carvingPlacement: "all" | "base" | "capital" | "shaft";
273
+ lowerBandEnabled: boolean;
274
+ lowerBandHeight: number;
275
+ lowerBandCarvingLevel: number;
276
+ dentilCount: number;
277
+ beadCount: number;
278
+ supportStyle: "a-frame" | "box-frame" | "k-brace" | "portal-frame" | "single-strut" | "trestle" | "tripod" | "v-frame" | "vertical" | "x-brace" | "y-frame";
279
+ braceWidth: number;
280
+ braceDepth: number;
281
+ braceBottomSpread: number;
282
+ braceTopSpread: number;
283
+ bracePlateEnabled: boolean;
284
+ role?: "ornament" | "post" | undefined;
285
+ postBase?: "none" | "pier" | "post-base" | undefined;
286
+ material?: {
287
+ id?: string | undefined;
288
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
289
+ properties?: {
290
+ color: string;
291
+ roughness: number;
292
+ metalness: number;
293
+ opacity: number;
294
+ transparent: boolean;
295
+ side: "back" | "double" | "front";
296
+ } | undefined;
297
+ texture?: {
298
+ url: string;
299
+ repeat?: [number, number] | undefined;
300
+ scale?: number | undefined;
301
+ offset?: [number, number] | undefined;
302
+ normalMap?: string | undefined;
303
+ normalScale?: number | undefined;
304
+ bumpMap?: string | undefined;
305
+ bumpScale?: number | undefined;
306
+ } | undefined;
307
+ } | undefined;
308
+ materialPreset?: string | undefined;
309
+ slots?: Record<string, string> | undefined;
310
+ type: "column";
112
311
  } | {
113
312
  object: "node";
114
313
  name?: string | undefined;
@@ -133,19 +332,29 @@ export declare function wallAttachments(nodes: StructureNodes, wall: WallNode):
133
332
  fromIds: string[];
134
333
  } | undefined;
135
334
  } | undefined;
136
- id: `duct-terminal_${string}`;
335
+ id: `duct-fitting_${string}`;
137
336
  position: [number, number, number];
138
- rotation: number;
139
- supportSlabId?: string | undefined;
140
- terminalType: "diffuser" | "return-grille" | "supply-register";
141
- mount: "ceiling" | "floor" | "wall";
337
+ rotation: [number, number, number];
338
+ fittingType: "access-panel" | "coupling" | "cross" | "damper" | "elbow" | "end-cap" | "reducer" | "tee" | "transition";
339
+ shape: "oval" | "rect" | "round";
340
+ inletShape?: "oval" | "rect" | "round" | undefined;
341
+ outletShape?: "oval" | "rect" | "round" | undefined;
142
342
  width: number;
143
- depth: number;
144
- collarShape: "oval" | "rect" | "round";
145
- collarDiameter: number;
146
- collarWidth: number;
147
- collarHeight: number;
148
- type: "duct-terminal";
343
+ height: number;
344
+ shape2: "oval" | "rect" | "round";
345
+ width2: number;
346
+ height2: number;
347
+ angle: number;
348
+ branchAngle: number;
349
+ diameter: number;
350
+ diameter2: number;
351
+ ductMaterial: "duct-board" | "flex" | "sheet-metal";
352
+ system: "return" | "supply";
353
+ damperAngle: number;
354
+ panelWidth: number;
355
+ panelHeight: number;
356
+ slots?: Record<string, string> | undefined;
357
+ type: "duct-fitting";
149
358
  } | {
150
359
  object: "node";
151
360
  name?: string | undefined;
@@ -162,31 +371,31 @@ export declare function wallAttachments(nodes: StructureNodes, wall: WallNode):
162
371
  provenance?: {
163
372
  refs: {
164
373
  ns?: string | undefined;
165
- id: string;
166
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
167
- }[];
168
- lineage?: {
169
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
170
- fromIds: string[];
171
- } | undefined;
172
- } | undefined;
173
- id: `guide_${string}`;
174
- url: string;
175
- position: [number, number, number];
176
- rotation: [number, number, number];
177
- scale: number;
178
- opacity: number;
179
- scaleReference: {
180
- start: [number, number];
181
- end: [number, number];
182
- realLengthMeters: number;
183
- measuredLengthUnits: number;
184
- metersPerUnit: number;
185
- displayLength?: number | undefined;
186
- displayUnit?: "centimeters" | "feet" | "inches" | "meters" | undefined;
187
- label: string;
188
- } | null;
189
- type: "guide";
374
+ id: string;
375
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
376
+ }[];
377
+ lineage?: {
378
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
379
+ fromIds: string[];
380
+ } | undefined;
381
+ } | undefined;
382
+ id: `hvac-equipment_${string}`;
383
+ position: [number, number, number];
384
+ rotation: number;
385
+ supportSlabId?: string | undefined;
386
+ equipmentType: "air-handler" | "condenser" | "furnace";
387
+ width: number;
388
+ depth: number;
389
+ height: number;
390
+ supplyShape: "oval" | "rect" | "round";
391
+ returnShape: "oval" | "rect" | "round";
392
+ supplyDiameter: number;
393
+ returnDiameter: number;
394
+ supplyWidth: number;
395
+ supplyHeight: number;
396
+ returnWidth: number;
397
+ returnHeight: number;
398
+ type: "hvac-equipment";
190
399
  } | {
191
400
  object: "node";
192
401
  name?: string | undefined;
@@ -211,10 +420,17 @@ export declare function wallAttachments(nodes: StructureNodes, wall: WallNode):
211
420
  fromIds: string[];
212
421
  } | undefined;
213
422
  } | undefined;
214
- id: `liquid-line_${string}`;
215
- path: [number, number, number][];
423
+ id: `pipe-fitting_${string}`;
424
+ position: [number, number, number];
425
+ rotation: [number, number, number];
426
+ fittingType: "cleanout" | "coupling" | "cross" | "elbow" | "end-cap" | "reducer" | "sanitary-tee" | "wye";
427
+ angle: number;
216
428
  diameter: number;
217
- type: "liquid-line";
429
+ diameter2: number;
430
+ cleanoutStyle: "end" | "inline";
431
+ pipeMaterial: "abs" | "cast-iron" | "pvc";
432
+ system: "vent" | "waste";
433
+ type: "pipe-fitting";
218
434
  } | {
219
435
  object: "node";
220
436
  name?: string | undefined;
@@ -915,231 +1131,21 @@ export declare function wallAttachments(nodes: StructureNodes, wall: WallNode):
915
1131
  roughness: number;
916
1132
  metalness: number;
917
1133
  opacity: number;
918
- transparent: boolean;
919
- side: "back" | "double" | "front";
920
- } | undefined;
921
- texture?: {
922
- url: string;
923
- repeat?: [number, number] | undefined;
924
- scale?: number | undefined;
925
- offset?: [number, number] | undefined;
926
- normalMap?: string | undefined;
927
- normalScale?: number | undefined;
928
- bumpMap?: string | undefined;
929
- bumpScale?: number | undefined;
930
- } | undefined;
931
- } | undefined;
932
- slots?: Record<string, string> | undefined;
933
- source?: {
934
- kind: "script";
935
- meta?: {
936
- description?: string | undefined;
937
- category?: string | undefined;
938
- tags?: string[] | undefined;
939
- parent?: string | undefined;
940
- } | undefined;
941
- language: "bpy" | "three";
942
- script: string;
943
- params: Record<string, string | number | boolean>;
944
- artifact: string;
945
- manifest: {
946
- bounds: {
947
- min: [number, number, number];
948
- max: [number, number, number];
949
- };
950
- params: {
951
- id: string;
952
- label?: string | undefined;
953
- kind: "boolean" | "number" | "string";
954
- default: string | number | boolean;
955
- min?: number | undefined;
956
- max?: number | undefined;
957
- step?: number | undefined;
958
- unit?: string | undefined;
959
- options?: string[] | undefined;
960
- }[];
961
- parts: {
962
- id: string;
963
- label?: string | undefined;
964
- type?: string | undefined;
965
- bounds?: {
966
- min: [number, number, number];
967
- max: [number, number, number];
968
- } | undefined;
969
- }[];
970
- surfaces: {
971
- part?: string | undefined;
972
- y: number;
973
- polygon: [number, number][];
974
- }[];
975
- slots: {
976
- id: string;
977
- label?: string | undefined;
978
- color?: string | undefined;
979
- roughness?: number | undefined;
980
- metalness?: number | undefined;
981
- transparent?: boolean | undefined;
982
- emissive?: boolean | undefined;
983
- }[];
984
- anchors: {
985
- id: string;
986
- position: [number, number, number];
987
- normal?: [number, number, number] | undefined;
988
- }[];
989
- lights: {
990
- id: string;
991
- position: [number, number, number];
992
- color: string;
993
- intensity: number;
994
- distance?: number | undefined;
995
- spot?: {
996
- direction: [number, number, number];
997
- angle: number;
998
- softness: number;
999
- } | undefined;
1000
- shadows?: boolean | undefined;
1001
- glow?: {
1002
- size: number;
1003
- strength: number;
1004
- } | undefined;
1005
- }[];
1006
- undersides: {
1007
- part?: string | undefined;
1008
- polygon: [number, number][];
1009
- plane: [number, number, number, number];
1010
- }[];
1011
- animations: {
1012
- name: string;
1013
- duration: number;
1014
- }[];
1015
- cutters?: {
1016
- host: "ceiling" | "mounted" | "slab" | "wall";
1017
- polygon: number[][];
1018
- minY: number;
1019
- maxY: number;
1020
- }[] | undefined;
1021
- cutout: boolean;
1022
- collider: boolean;
1023
- shape?: {
1024
- tolerance: number;
1025
- bands: {
1026
- y0: number;
1027
- y1: number;
1028
- polygons: {
1029
- outer: [number, number][];
1030
- holes?: [number, number][][] | undefined;
1031
- }[];
1032
- }[];
1033
- } | undefined;
1034
- triangles: number;
1035
- coverage?: number | undefined;
1036
- uncovered?: {
1037
- min: [number, number];
1038
- max: [number, number];
1039
- }[] | undefined;
1040
- };
1041
- images?: {
1042
- artifact: string;
1043
- thumbnail: string;
1044
- floorPlan: string;
1045
- } | undefined;
1046
- } | undefined;
1047
- position: [number, number, number];
1048
- rotation: [number, number, number];
1049
- side?: "back" | "front" | undefined;
1050
- verticalAnchor?: "floor" | "wall" | undefined;
1051
- floorThresholdVersion: 0 | 1;
1052
- wallId?: string | undefined;
1053
- dormerId?: string | undefined;
1054
- dormerFace?: "back" | "front" | "left" | "right" | undefined;
1055
- roofSegmentId?: string | undefined;
1056
- roofFace?: "back" | "front" | "left" | "right" | undefined;
1057
- width: number;
1058
- height: number;
1059
- mark?: string | undefined;
1060
- constructionType: "framed" | "masonry";
1061
- dimensionReference: "finish-opening" | "masonry-opening" | "nominal" | "rough-opening";
1062
- roughOpeningWidth?: number | undefined;
1063
- roughOpeningHeight?: number | undefined;
1064
- masonryOpeningWidth?: number | undefined;
1065
- masonryOpeningHeight?: number | undefined;
1066
- finishOpeningWidth?: number | undefined;
1067
- finishOpeningHeight?: number | undefined;
1068
- openingKind: "opening" | "window";
1069
- windowType: "awning" | "bay" | "bow" | "casement" | "double-hung" | "fixed" | "hopper" | "louvered" | "single-hung" | "sliding" | "tilt-turn";
1070
- operationState: number;
1071
- openingDirection?: "inward" | "outward" | undefined;
1072
- tiltTurnMode?: "tilt" | "turn" | undefined;
1073
- awningDirection: "down" | "up";
1074
- casementStyle: "french" | "single";
1075
- hingesSide: "left" | "right";
1076
- openingShape: "arch" | "rectangle" | "rounded";
1077
- openingRadiusMode: "all" | "individual";
1078
- openingCornerRadii: [number, number, number, number];
1079
- cornerRadius: number;
1080
- archHeight: number;
1081
- openingRevealRadius: number;
1082
- frameThickness: number;
1083
- frameDepth?: number | undefined;
1084
- windowHandle?: boolean | undefined;
1085
- sashGrid?: boolean | undefined;
1086
- columnRatios: number[];
1087
- rowRatios: number[];
1088
- columnDividerThickness: number;
1089
- rowDividerThickness: number;
1090
- corner?: {
1091
- end: "end" | "start";
1092
- partnerId: string;
1093
- post: "none" | "post";
1094
- } | undefined;
1095
- sill: boolean;
1096
- sillDepth: number;
1097
- sillThickness: number;
1098
- sillOverhang?: number | undefined;
1099
- sillInterior?: boolean | undefined;
1100
- sillInteriorDepth?: number | undefined;
1101
- sillInteriorThickness?: number | undefined;
1102
- sillInteriorOverhang?: number | undefined;
1103
- shutters?: "board-batten" | "louvered" | "none" | "panel" | undefined;
1104
- shutterWidth?: number | undefined;
1105
- shutterOpen?: number | undefined;
1106
- shutterSides?: "both" | "left" | "right" | undefined;
1107
- rollerShutter?: "box" | "concealed" | "none" | undefined;
1108
- rollerShutterBoxHeight?: number | undefined;
1109
- rollerShutterOpen?: number | undefined;
1110
- casingFaceA?: boolean | undefined;
1111
- casingFaceB?: boolean | undefined;
1112
- casingWidth?: number | undefined;
1113
- type: "window";
1114
- } | {
1115
- object: "node";
1116
- name?: string | undefined;
1117
- parentId: string | null;
1118
- visible: boolean;
1119
- camera?: {
1120
- position: [number, number, number];
1121
- target: [number, number, number];
1122
- mode: "orthographic" | "perspective";
1123
- fov?: number | undefined;
1124
- zoom?: number | undefined;
1125
- } | undefined;
1126
- metadata: Record<string, unknown>;
1127
- provenance?: {
1128
- refs: {
1129
- ns?: string | undefined;
1130
- id: string;
1131
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
1132
- }[];
1133
- lineage?: {
1134
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
1135
- fromIds: string[];
1134
+ transparent: boolean;
1135
+ side: "back" | "double" | "front";
1136
+ } | undefined;
1137
+ texture?: {
1138
+ url: string;
1139
+ repeat?: [number, number] | undefined;
1140
+ scale?: number | undefined;
1141
+ offset?: [number, number] | undefined;
1142
+ normalMap?: string | undefined;
1143
+ normalScale?: number | undefined;
1144
+ bumpMap?: string | undefined;
1145
+ bumpScale?: number | undefined;
1136
1146
  } | undefined;
1137
1147
  } | undefined;
1138
- id: `column_${string}`;
1139
- children: string[];
1140
- position: [number, number, number];
1141
- rotation: number;
1142
- supportSlabId?: string | undefined;
1148
+ slots?: Record<string, string> | undefined;
1143
1149
  source?: {
1144
1150
  kind: "script";
1145
1151
  meta?: {
@@ -1254,104 +1260,73 @@ export declare function wallAttachments(nodes: StructureNodes, wall: WallNode):
1254
1260
  floorPlan: string;
1255
1261
  } | undefined;
1256
1262
  } | undefined;
1257
- style: "cluster" | "dravidian-carved" | "faceted" | "fluted" | "lathe-turned" | "plain";
1258
- crossSection: "octagonal" | "rectangular" | "round" | "sixteen-sided" | "square";
1259
- height: number;
1260
- radius: number;
1263
+ position: [number, number, number];
1264
+ rotation: [number, number, number];
1265
+ side?: "back" | "front" | undefined;
1266
+ verticalAnchor?: "floor" | "wall" | undefined;
1267
+ floorThresholdVersion: 0 | 1;
1268
+ wallId?: string | undefined;
1269
+ dormerId?: string | undefined;
1270
+ dormerFace?: "back" | "front" | "left" | "right" | undefined;
1271
+ roofSegmentId?: string | undefined;
1272
+ roofFace?: "back" | "front" | "left" | "right" | undefined;
1261
1273
  width: number;
1262
- depth: number;
1263
- edgeSoftness: number;
1264
- baseHeight: number;
1265
- capitalHeight: number;
1266
- shaftProfile: "baluster" | "bulged" | "hourglass" | "straight" | "tapered";
1267
- shaftTaper: number;
1268
- shaftBulge: number;
1269
- shaftStartScale: number;
1270
- shaftEndScale: number;
1271
- shaftSegmentCount: number;
1272
- shaftTwistStep: number;
1273
- shaftCornerRadius: number;
1274
- shaftDetail: "fluted" | "lathe-turned" | "none" | "panelled" | "spiral";
1275
- baseStyle: "lotus" | "none" | "panelled-pedestal" | "ribbed-lotus" | "round-rings" | "simple-square" | "square-plinth" | "stepped-square";
1276
- baseWidthScale: number;
1277
- baseDepthScale: number;
1278
- baseTierCount: number;
1279
- baseStepSpread: number;
1280
- basePlinthHeightRatio: number;
1281
- baseRoundBandScale: number;
1282
- baseNeckScale: number;
1283
- baseRoundBandCount: number;
1284
- baseRibCount: number;
1285
- baseCarvingLevel: number;
1286
- basePanelInset: number;
1287
- capitalStyle: "corinthian-leaf" | "doric" | "ionic-volute" | "leaf-carved" | "none" | "rounded" | "simple" | "simple-slab" | "south-indian-bracket" | "stepped" | "volute" | "wood-bracket";
1288
- capitalWidthScale: number;
1289
- capitalDepthScale: number;
1290
- capitalTierCount: number;
1291
- capitalStepSpread: number;
1292
- capitalBandCount: number;
1293
- voluteSize: number;
1294
- voluteCount: number;
1295
- leafCount: number;
1296
- leafRows: number;
1297
- bracketDepth: number;
1298
- bracketTierCount: number;
1299
- pendantCount: number;
1300
- capitalCarvingLevel: number;
1301
- ringCount: number;
1302
- ringPlacement: "bottom" | "ends" | "even" | "top";
1303
- ringThickness: number;
1304
- ringSpread: number;
1305
- fluteCount: number;
1306
- fluteDepth: number;
1307
- fluteWidth: number;
1308
- spiralTwist: number;
1309
- spiralRibCount: number;
1310
- panelCount: number;
1311
- panelInsetDepth: number;
1312
- panelShape: "arched" | "diamond" | "rectangle";
1313
- latheRingCount: number;
1314
- latheRingSpacing: "bottom" | "ends" | "even" | "top";
1315
- carvingLevel: number;
1316
- carvingPlacement: "all" | "base" | "capital" | "shaft";
1317
- lowerBandEnabled: boolean;
1318
- lowerBandHeight: number;
1319
- lowerBandCarvingLevel: number;
1320
- dentilCount: number;
1321
- beadCount: number;
1322
- supportStyle: "a-frame" | "box-frame" | "k-brace" | "portal-frame" | "single-strut" | "trestle" | "tripod" | "v-frame" | "vertical" | "x-brace" | "y-frame";
1323
- braceWidth: number;
1324
- braceDepth: number;
1325
- braceBottomSpread: number;
1326
- braceTopSpread: number;
1327
- bracePlateEnabled: boolean;
1328
- role?: "ornament" | "post" | undefined;
1329
- postBase?: "none" | "pier" | "post-base" | undefined;
1330
- material?: {
1331
- id?: string | undefined;
1332
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1333
- properties?: {
1334
- color: string;
1335
- roughness: number;
1336
- metalness: number;
1337
- opacity: number;
1338
- transparent: boolean;
1339
- side: "back" | "double" | "front";
1340
- } | undefined;
1341
- texture?: {
1342
- url: string;
1343
- repeat?: [number, number] | undefined;
1344
- scale?: number | undefined;
1345
- offset?: [number, number] | undefined;
1346
- normalMap?: string | undefined;
1347
- normalScale?: number | undefined;
1348
- bumpMap?: string | undefined;
1349
- bumpScale?: number | undefined;
1350
- } | undefined;
1274
+ height: number;
1275
+ mark?: string | undefined;
1276
+ constructionType: "framed" | "masonry";
1277
+ dimensionReference: "finish-opening" | "masonry-opening" | "nominal" | "rough-opening";
1278
+ roughOpeningWidth?: number | undefined;
1279
+ roughOpeningHeight?: number | undefined;
1280
+ masonryOpeningWidth?: number | undefined;
1281
+ masonryOpeningHeight?: number | undefined;
1282
+ finishOpeningWidth?: number | undefined;
1283
+ finishOpeningHeight?: number | undefined;
1284
+ openingKind: "opening" | "window";
1285
+ windowType: "awning" | "bay" | "bow" | "casement" | "double-hung" | "fixed" | "hopper" | "louvered" | "single-hung" | "sliding" | "tilt-turn";
1286
+ operationState: number;
1287
+ openingDirection?: "inward" | "outward" | undefined;
1288
+ tiltTurnMode?: "tilt" | "turn" | undefined;
1289
+ awningDirection: "down" | "up";
1290
+ casementStyle: "french" | "single";
1291
+ hingesSide: "left" | "right";
1292
+ openingShape: "arch" | "rectangle" | "rounded";
1293
+ openingRadiusMode: "all" | "individual";
1294
+ openingCornerRadii: [number, number, number, number];
1295
+ cornerRadius: number;
1296
+ archHeight: number;
1297
+ openingRevealRadius: number;
1298
+ frameThickness: number;
1299
+ frameDepth?: number | undefined;
1300
+ windowHandle?: boolean | undefined;
1301
+ sashGrid?: boolean | undefined;
1302
+ columnRatios: number[];
1303
+ rowRatios: number[];
1304
+ columnDividerThickness: number;
1305
+ rowDividerThickness: number;
1306
+ corner?: {
1307
+ end: "end" | "start";
1308
+ partnerId: string;
1309
+ post: "none" | "post";
1351
1310
  } | undefined;
1352
- materialPreset?: string | undefined;
1353
- slots?: Record<string, string> | undefined;
1354
- type: "column";
1311
+ sill: boolean;
1312
+ sillDepth: number;
1313
+ sillThickness: number;
1314
+ sillOverhang?: number | undefined;
1315
+ sillInterior?: boolean | undefined;
1316
+ sillInteriorDepth?: number | undefined;
1317
+ sillInteriorThickness?: number | undefined;
1318
+ sillInteriorOverhang?: number | undefined;
1319
+ shutters?: "board-batten" | "louvered" | "none" | "panel" | undefined;
1320
+ shutterWidth?: number | undefined;
1321
+ shutterOpen?: number | undefined;
1322
+ shutterSides?: "both" | "left" | "right" | undefined;
1323
+ rollerShutter?: "box" | "concealed" | "none" | undefined;
1324
+ rollerShutterBoxHeight?: number | undefined;
1325
+ rollerShutterOpen?: number | undefined;
1326
+ casingFaceA?: boolean | undefined;
1327
+ casingFaceB?: boolean | undefined;
1328
+ casingWidth?: number | undefined;
1329
+ type: "window";
1355
1330
  } | {
1356
1331
  object: "node";
1357
1332
  name?: string | undefined;
@@ -2900,18 +2875,125 @@ export declare function wallAttachments(nodes: StructureNodes, wall: WallNode):
2900
2875
  fromIds: string[];
2901
2876
  } | undefined;
2902
2877
  } | undefined;
2903
- id: `beam_${string}`;
2904
- start: [number, number];
2905
- end: [number, number];
2906
- width: number;
2907
- depth: number;
2908
- size?: string | undefined;
2909
- plies: number;
2910
- material: "glulam" | "lvl" | "pressure-treated" | "sawn" | "steel";
2911
- placement: "dropped" | "flush";
2912
- topElevation?: number | undefined;
2878
+ id: `beam_${string}`;
2879
+ start: [number, number];
2880
+ end: [number, number];
2881
+ width: number;
2882
+ depth: number;
2883
+ size?: string | undefined;
2884
+ plies: number;
2885
+ material: "glulam" | "lvl" | "pressure-treated" | "sawn" | "steel";
2886
+ placement: "dropped" | "flush";
2887
+ topElevation?: number | undefined;
2888
+ supportSlabId?: string | undefined;
2889
+ type: "beam";
2890
+ } | {
2891
+ object: "node";
2892
+ name?: string | undefined;
2893
+ parentId: string | null;
2894
+ visible: boolean;
2895
+ camera?: {
2896
+ position: [number, number, number];
2897
+ target: [number, number, number];
2898
+ mode: "orthographic" | "perspective";
2899
+ fov?: number | undefined;
2900
+ zoom?: number | undefined;
2901
+ } | undefined;
2902
+ metadata: Record<string, unknown>;
2903
+ provenance?: {
2904
+ refs: {
2905
+ ns?: string | undefined;
2906
+ id: string;
2907
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
2908
+ }[];
2909
+ lineage?: {
2910
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
2911
+ fromIds: string[];
2912
+ } | undefined;
2913
+ } | undefined;
2914
+ id: `construction-dimension_${string}`;
2915
+ anchors: ({
2916
+ kind: "feature";
2917
+ reference: {
2918
+ nodeId: string;
2919
+ featureId: string;
2920
+ parameters?: Record<string, string | number | boolean> | undefined;
2921
+ };
2922
+ fallback: [number, number, number];
2923
+ } | [number, number, number])[];
2924
+ baseline: {
2925
+ origin: [number, number];
2926
+ direction: [number, number];
2927
+ };
2928
+ chainMode: "continuous" | "point-to-point";
2929
+ mode: "angular" | "arc-length" | "center-mark" | "chord" | "coordinate" | "diameter" | "linear" | "radius";
2930
+ featureCount: number;
2931
+ showCenterMark: boolean;
2932
+ prefix: string;
2933
+ suffix: string;
2934
+ textOverride: string | null;
2935
+ datumPolicy: "centerline" | "finish-face" | "structural-face" | "wall-face";
2936
+ terminator: "architectural-tick" | "dot" | "filled-arrow" | "open-arrow";
2937
+ textPosition: "above" | "centered";
2938
+ imperialPrecision: "1" | "1/16" | "1/2" | "1/4" | "1/8";
2939
+ metricNotation: "meters" | "millimeters";
2940
+ extensionStartGap: number;
2941
+ extensionOvershoot: number;
2942
+ drawingType: "floor-plan" | "foundation-plan" | "reflected-ceiling-plan" | "roof-plan" | "site-plan";
2943
+ drawingOverrides: {
2944
+ drawingType: "floor-plan" | "foundation-plan" | "reflected-ceiling-plan" | "roof-plan" | "site-plan";
2945
+ presentation: "controlled" | "omit" | "shown";
2946
+ suppressedSegmentIndexes: number[];
2947
+ }[];
2948
+ controllingDimensionId: `construction-dimension_${string}` | null;
2949
+ type: "construction-dimension";
2950
+ } | {
2951
+ object: "node";
2952
+ name?: string | undefined;
2953
+ parentId: string | null;
2954
+ visible: boolean;
2955
+ camera?: {
2956
+ position: [number, number, number];
2957
+ target: [number, number, number];
2958
+ mode: "orthographic" | "perspective";
2959
+ fov?: number | undefined;
2960
+ zoom?: number | undefined;
2961
+ } | undefined;
2962
+ metadata: Record<string, unknown>;
2963
+ provenance?: {
2964
+ refs: {
2965
+ ns?: string | undefined;
2966
+ id: string;
2967
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
2968
+ }[];
2969
+ lineage?: {
2970
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
2971
+ fromIds: string[];
2972
+ } | undefined;
2973
+ } | undefined;
2974
+ id: `block_${string}`;
2975
+ children: string[];
2976
+ position: [number, number, number];
2977
+ rotation: number;
2913
2978
  supportSlabId?: string | undefined;
2914
- type: "beam";
2979
+ topology: {
2980
+ vertices: {
2981
+ id: string;
2982
+ position: [number, number, number];
2983
+ }[];
2984
+ edges: {
2985
+ id: string;
2986
+ vertexIds: [string, string];
2987
+ }[];
2988
+ faces: {
2989
+ id: string;
2990
+ vertexIds: string[];
2991
+ materialSlot: string;
2992
+ }[];
2993
+ };
2994
+ slots: Record<string, string>;
2995
+ slotNames: Record<string, string>;
2996
+ type: "block";
2915
2997
  } | {
2916
2998
  object: "node";
2917
2999
  name?: string | undefined;
@@ -3790,6 +3872,47 @@ export declare function wallAttachments(nodes: StructureNodes, wall: WallNode):
3790
3872
  scale: number;
3791
3873
  opacity: number;
3792
3874
  type: "scan";
3875
+ } | {
3876
+ object: "node";
3877
+ name?: string | undefined;
3878
+ parentId: string | null;
3879
+ visible: boolean;
3880
+ camera?: {
3881
+ position: [number, number, number];
3882
+ target: [number, number, number];
3883
+ mode: "orthographic" | "perspective";
3884
+ fov?: number | undefined;
3885
+ zoom?: number | undefined;
3886
+ } | undefined;
3887
+ metadata: Record<string, unknown>;
3888
+ provenance?: {
3889
+ refs: {
3890
+ ns?: string | undefined;
3891
+ id: string;
3892
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
3893
+ }[];
3894
+ lineage?: {
3895
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
3896
+ fromIds: string[];
3897
+ } | undefined;
3898
+ } | undefined;
3899
+ id: `guide_${string}`;
3900
+ url: string;
3901
+ position: [number, number, number];
3902
+ rotation: [number, number, number];
3903
+ scale: number;
3904
+ opacity: number;
3905
+ scaleReference: {
3906
+ start: [number, number];
3907
+ end: [number, number];
3908
+ realLengthMeters: number;
3909
+ measuredLengthUnits: number;
3910
+ metersPerUnit: number;
3911
+ displayLength?: number | undefined;
3912
+ displayUnit?: "centimeters" | "feet" | "inches" | "meters" | undefined;
3913
+ label: string;
3914
+ } | null;
3915
+ type: "guide";
3793
3916
  } | {
3794
3917
  object: "node";
3795
3918
  name?: string | undefined;
@@ -4069,29 +4192,19 @@ export declare function wallAttachments(nodes: StructureNodes, wall: WallNode):
4069
4192
  fromIds: string[];
4070
4193
  } | undefined;
4071
4194
  } | undefined;
4072
- id: `duct-fitting_${string}`;
4195
+ id: `duct-terminal_${string}`;
4073
4196
  position: [number, number, number];
4074
- rotation: [number, number, number];
4075
- fittingType: "access-panel" | "coupling" | "cross" | "damper" | "elbow" | "end-cap" | "reducer" | "tee" | "transition";
4076
- shape: "oval" | "rect" | "round";
4077
- inletShape?: "oval" | "rect" | "round" | undefined;
4078
- outletShape?: "oval" | "rect" | "round" | undefined;
4197
+ rotation: number;
4198
+ supportSlabId?: string | undefined;
4199
+ terminalType: "diffuser" | "return-grille" | "supply-register";
4200
+ mount: "ceiling" | "floor" | "wall";
4079
4201
  width: number;
4080
- height: number;
4081
- shape2: "oval" | "rect" | "round";
4082
- width2: number;
4083
- height2: number;
4084
- angle: number;
4085
- branchAngle: number;
4086
- diameter: number;
4087
- diameter2: number;
4088
- ductMaterial: "duct-board" | "flex" | "sheet-metal";
4089
- system: "return" | "supply";
4090
- damperAngle: number;
4091
- panelWidth: number;
4092
- panelHeight: number;
4093
- slots?: Record<string, string> | undefined;
4094
- type: "duct-fitting";
4202
+ depth: number;
4203
+ collarShape: "oval" | "rect" | "round";
4204
+ collarDiameter: number;
4205
+ collarWidth: number;
4206
+ collarHeight: number;
4207
+ type: "duct-terminal";
4095
4208
  } | {
4096
4209
  object: "node";
4097
4210
  name?: string | undefined;
@@ -4116,23 +4229,12 @@ export declare function wallAttachments(nodes: StructureNodes, wall: WallNode):
4116
4229
  fromIds: string[];
4117
4230
  } | undefined;
4118
4231
  } | undefined;
4119
- id: `hvac-equipment_${string}`;
4120
- position: [number, number, number];
4121
- rotation: number;
4122
- supportSlabId?: string | undefined;
4123
- equipmentType: "air-handler" | "condenser" | "furnace";
4124
- width: number;
4125
- depth: number;
4126
- height: number;
4127
- supplyShape: "oval" | "rect" | "round";
4128
- returnShape: "oval" | "rect" | "round";
4129
- supplyDiameter: number;
4130
- returnDiameter: number;
4131
- supplyWidth: number;
4132
- supplyHeight: number;
4133
- returnWidth: number;
4134
- returnHeight: number;
4135
- type: "hvac-equipment";
4232
+ id: `lineset_${string}`;
4233
+ path: [number, number, number][];
4234
+ suctionDiameter: number;
4235
+ liquidDiameter: number;
4236
+ insulated: boolean;
4237
+ type: "lineset";
4136
4238
  } | {
4137
4239
  object: "node";
4138
4240
  name?: string | undefined;
@@ -4157,12 +4259,10 @@ export declare function wallAttachments(nodes: StructureNodes, wall: WallNode):
4157
4259
  fromIds: string[];
4158
4260
  } | undefined;
4159
4261
  } | undefined;
4160
- id: `lineset_${string}`;
4262
+ id: `liquid-line_${string}`;
4161
4263
  path: [number, number, number][];
4162
- suctionDiameter: number;
4163
- liquidDiameter: number;
4164
- insulated: boolean;
4165
- type: "lineset";
4264
+ diameter: number;
4265
+ type: "liquid-line";
4166
4266
  } | {
4167
4267
  object: "node";
4168
4268
  name?: string | undefined;
@@ -4209,41 +4309,6 @@ export declare function wallAttachments(nodes: StructureNodes, wall: WallNode):
4209
4309
  pipeMaterial: "abs" | "cast-iron" | "pvc";
4210
4310
  system: "vent" | "waste";
4211
4311
  type: "pipe-segment";
4212
- } | {
4213
- object: "node";
4214
- name?: string | undefined;
4215
- parentId: string | null;
4216
- visible: boolean;
4217
- camera?: {
4218
- position: [number, number, number];
4219
- target: [number, number, number];
4220
- mode: "orthographic" | "perspective";
4221
- fov?: number | undefined;
4222
- zoom?: number | undefined;
4223
- } | undefined;
4224
- metadata: Record<string, unknown>;
4225
- provenance?: {
4226
- refs: {
4227
- ns?: string | undefined;
4228
- id: string;
4229
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
4230
- }[];
4231
- lineage?: {
4232
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
4233
- fromIds: string[];
4234
- } | undefined;
4235
- } | undefined;
4236
- id: `pipe-fitting_${string}`;
4237
- position: [number, number, number];
4238
- rotation: [number, number, number];
4239
- fittingType: "cleanout" | "coupling" | "cross" | "elbow" | "end-cap" | "reducer" | "sanitary-tee" | "wye";
4240
- angle: number;
4241
- diameter: number;
4242
- diameter2: number;
4243
- cleanoutStyle: "end" | "inline";
4244
- pipeMaterial: "abs" | "cast-iron" | "pvc";
4245
- system: "vent" | "waste";
4246
- type: "pipe-fitting";
4247
4312
  } | {
4248
4313
  object: "node";
4249
4314
  name?: string | undefined;
@@ -4842,71 +4907,6 @@ export declare function wallAttachments(nodes: StructureNodes, wall: WallNode):
4842
4907
  topFinishHeight: number;
4843
4908
  topFinishDepth: number;
4844
4909
  type: "cabinet-module";
4845
- } | {
4846
- object: "node";
4847
- name?: string | undefined;
4848
- parentId: string | null;
4849
- visible: boolean;
4850
- camera?: {
4851
- position: [number, number, number];
4852
- target: [number, number, number];
4853
- mode: "orthographic" | "perspective";
4854
- fov?: number | undefined;
4855
- zoom?: number | undefined;
4856
- } | undefined;
4857
- metadata: Record<string, unknown>;
4858
- provenance?: {
4859
- refs: {
4860
- ns?: string | undefined;
4861
- id: string;
4862
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
4863
- }[];
4864
- lineage?: {
4865
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
4866
- fromIds: string[];
4867
- } | undefined;
4868
- } | undefined;
4869
- id: `bvent_${string}`;
4870
- material?: {
4871
- id?: string | undefined;
4872
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
4873
- properties?: {
4874
- color: string;
4875
- roughness: number;
4876
- metalness: number;
4877
- opacity: number;
4878
- transparent: boolean;
4879
- side: "back" | "double" | "front";
4880
- } | undefined;
4881
- texture?: {
4882
- url: string;
4883
- repeat?: [number, number] | undefined;
4884
- scale?: number | undefined;
4885
- offset?: [number, number] | undefined;
4886
- normalMap?: string | undefined;
4887
- normalScale?: number | undefined;
4888
- bumpMap?: string | undefined;
4889
- bumpScale?: number | undefined;
4890
- } | undefined;
4891
- } | undefined;
4892
- slots?: Record<string, string> | undefined;
4893
- materialPreset: string;
4894
- roofSegmentId?: string | undefined;
4895
- position: [number, number, number];
4896
- rotation: number;
4897
- width: number;
4898
- depth: number;
4899
- height: number;
4900
- hoodOverhang: number;
4901
- topTaper: number;
4902
- capHeight: number;
4903
- capGap: number;
4904
- domeCurvature: number;
4905
- baseInset: number;
4906
- baseHeight: number;
4907
- cornerBevel: number;
4908
- style: "box" | "cap" | "dome";
4909
- type: "box-vent";
4910
4910
  } | {
4911
4911
  object: "node";
4912
4912
  name?: string | undefined;