@pascal-app/core 1.1.0 → 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 (133) hide show
  1. package/dist/agent-operations/__fixtures__/cases.d.ts +3 -2
  2. package/dist/agent-operations/__fixtures__/cases.d.ts.map +1 -1
  3. package/dist/agent-operations/__fixtures__/place-items-cases.d.ts.map +1 -1
  4. package/dist/agent-operations/__fixtures__/place-items-cases.js +28 -0
  5. package/dist/agent-operations/__fixtures__/roof-bearing-cases.d.ts +2618 -2618
  6. package/dist/agent-operations/asset-catalog.d.ts +21 -11
  7. package/dist/agent-operations/asset-catalog.d.ts.map +1 -1
  8. package/dist/agent-operations/asset-catalog.js +28 -10
  9. package/dist/agent-operations/asset-views.d.ts +8 -3
  10. package/dist/agent-operations/asset-views.d.ts.map +1 -1
  11. package/dist/agent-operations/asset-views.js +19 -3
  12. package/dist/agent-operations/batch.d.ts +4 -2
  13. package/dist/agent-operations/batch.d.ts.map +1 -1
  14. package/dist/agent-operations/batch.js +9 -6
  15. package/dist/agent-operations/catalog-asset.d.ts +15 -0
  16. package/dist/agent-operations/catalog-asset.d.ts.map +1 -0
  17. package/dist/agent-operations/catalog-asset.js +4 -0
  18. package/dist/agent-operations/circulation-spaces.d.ts +585 -585
  19. package/dist/agent-operations/design-brief.d.ts.map +1 -1
  20. package/dist/agent-operations/design-brief.js +2 -0
  21. package/dist/agent-operations/furnish-room.d.ts.map +1 -1
  22. package/dist/agent-operations/furnish-room.js +2 -1
  23. package/dist/agent-operations/index.d.ts +5716 -7
  24. package/dist/agent-operations/index.d.ts.map +1 -1
  25. package/dist/agent-operations/index.js +17 -3
  26. package/dist/agent-operations/level-reads.d.ts.map +1 -1
  27. package/dist/agent-operations/level-reads.js +4 -1
  28. package/dist/agent-operations/place-in-room.d.ts.map +1 -1
  29. package/dist/agent-operations/place-in-room.js +2 -1
  30. package/dist/agent-operations/place-items.d.ts.map +1 -1
  31. package/dist/agent-operations/place-items.js +2 -1
  32. package/dist/agent-operations/scene-queries.d.ts +3818 -3818
  33. package/dist/agent-operations/scene-view.d.ts.map +1 -1
  34. package/dist/agent-operations/scene-view.js +38 -13
  35. package/dist/agent-operations/search-assets.d.ts.map +1 -1
  36. package/dist/agent-operations/search-assets.js +6 -0
  37. package/dist/agent-operations/types.d.ts +10 -2
  38. package/dist/agent-operations/types.d.ts.map +1 -1
  39. package/dist/agent-operations/usage-checks.js +18 -3
  40. package/dist/agent-operations/verify-scene.d.ts +7 -3
  41. package/dist/agent-operations/verify-scene.d.ts.map +1 -1
  42. package/dist/agent-operations/verify-scene.js +15 -7
  43. package/dist/agent-tools/assets.js +1 -1
  44. package/dist/building/__fixtures__/wall-opening-cases.d.ts +30 -30
  45. package/dist/building/level-duplication.d.ts +3409 -3409
  46. package/dist/building/level-duplication.d.ts.map +1 -1
  47. package/dist/building/level-duplication.js +3 -1
  48. package/dist/building/wall-openings.d.ts +75 -75
  49. package/dist/commands/structure/shared.d.ts +3407 -3407
  50. package/dist/commands/structure/zone-wall-merge.d.ts +652 -652
  51. package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts +3818 -3818
  52. package/dist/index.d.ts +2 -0
  53. package/dist/index.d.ts.map +1 -1
  54. package/dist/index.js +2 -0
  55. package/dist/lib/__fixtures__/mezzanine.d.ts +2003 -2003
  56. package/dist/lib/absorb-wall-separators.d.ts +1032 -1032
  57. package/dist/lib/asset-storage.d.ts.map +1 -1
  58. package/dist/lib/asset-storage.js +3 -0
  59. package/dist/lib/floor-foundation-datum.d.ts.map +1 -1
  60. package/dist/lib/floor-foundation-datum.js +5 -1
  61. package/dist/lib/floorplan/context.d.ts +95 -0
  62. package/dist/lib/floorplan/context.d.ts.map +1 -0
  63. package/dist/lib/floorplan/context.js +155 -0
  64. package/dist/lib/floorplan/index.d.ts +6 -0
  65. package/dist/lib/floorplan/index.d.ts.map +1 -0
  66. package/dist/lib/floorplan/index.js +5 -0
  67. package/dist/lib/floorplan/marks.d.ts +71 -0
  68. package/dist/lib/floorplan/marks.d.ts.map +1 -0
  69. package/dist/lib/floorplan/marks.js +157 -0
  70. package/dist/lib/floorplan/plan-math.d.ts +18 -0
  71. package/dist/lib/floorplan/plan-math.d.ts.map +1 -0
  72. package/dist/lib/floorplan/plan-math.js +82 -0
  73. package/dist/lib/floorplan/svg-paths.d.ts +17 -0
  74. package/dist/lib/floorplan/svg-paths.d.ts.map +1 -0
  75. package/dist/lib/floorplan/svg-paths.js +92 -0
  76. package/dist/lib/floorplan/wall-affordances.d.ts +31 -0
  77. package/dist/lib/floorplan/wall-affordances.d.ts.map +1 -0
  78. package/dist/lib/floorplan/wall-affordances.js +24 -0
  79. package/dist/lib/steps.d.ts +8 -0
  80. package/dist/lib/steps.d.ts.map +1 -0
  81. package/dist/lib/steps.js +7 -0
  82. package/dist/registry/__fixtures__/roof-planes.d.ts +69 -0
  83. package/dist/registry/__fixtures__/roof-planes.d.ts.map +1 -0
  84. package/dist/registry/__fixtures__/roof-planes.js +59 -0
  85. package/dist/registry/index.d.ts +2 -1
  86. package/dist/registry/index.d.ts.map +1 -1
  87. package/dist/registry/index.js +1 -0
  88. package/dist/registry/roofs.d.ts +34 -0
  89. package/dist/registry/roofs.d.ts.map +1 -0
  90. package/dist/registry/roofs.js +61 -0
  91. package/dist/registry/types.d.ts +30 -0
  92. package/dist/registry/types.d.ts.map +1 -1
  93. package/dist/registry/validate-relations.d.ts +5 -1
  94. package/dist/registry/validate-relations.d.ts.map +1 -1
  95. package/dist/registry/validate-relations.js +6 -2
  96. package/dist/schema/asset-url.d.ts +8 -0
  97. package/dist/schema/asset-url.d.ts.map +1 -1
  98. package/dist/schema/asset-url.js +17 -0
  99. package/dist/schema/nodes/roof.d.ts +1 -1
  100. package/dist/schema/nodes/roof.d.ts.map +1 -1
  101. package/dist/schema/nodes/roof.js +13 -8
  102. package/dist/schema/types.d.ts +1 -1
  103. package/dist/services/roof-level.d.ts.map +1 -1
  104. package/dist/services/roof-level.js +12 -2
  105. package/dist/services/roof-move.d.ts +4 -2
  106. package/dist/services/roof-move.d.ts.map +1 -1
  107. package/dist/services/roof-move.js +21 -9
  108. package/dist/spatial/usage-field/findings.d.ts +10 -1
  109. package/dist/spatial/usage-field/findings.d.ts.map +1 -1
  110. package/dist/spatial/usage-field/findings.js +56 -12
  111. package/dist/spatial/usage-field/measure.d.ts +3 -1
  112. package/dist/spatial/usage-field/measure.d.ts.map +1 -1
  113. package/dist/spatial/usage-field/measure.js +7 -2
  114. package/dist/spatial/usage-field/path.d.ts.map +1 -1
  115. package/dist/spatial/usage-field/path.js +28 -18
  116. package/dist/store/actions/node-actions.d.ts +2380 -2380
  117. package/dist/store/scene-annotations.d.ts +1279 -1279
  118. package/dist/systems/document-reconcile.d.ts.map +1 -1
  119. package/dist/systems/document-reconcile.js +1 -2
  120. package/dist/systems/roof/roof-elevation.d.ts +11 -6
  121. package/dist/systems/roof/roof-elevation.d.ts.map +1 -1
  122. package/dist/systems/roof/roof-elevation.js +24 -11
  123. package/dist/systems/slab/__fixtures__/floor-step.d.ts +2381 -2381
  124. package/dist/systems/slab/__fixtures__/raised-room.d.ts +3818 -3818
  125. package/dist/systems/stair/stair-opening-preview.d.ts +900 -900
  126. package/dist/utils/ensure-scene-openings.d.ts +4815 -4815
  127. package/dist/utils/floor-plate-migration.d.ts +1032 -1032
  128. package/dist/utils/owned-floor-opening-migration.d.ts +1032 -1032
  129. package/dist/utils/reconcile-structure-on-load.d.ts +2380 -2380
  130. package/dist/utils/scene-bounds.d.ts +32 -0
  131. package/dist/utils/scene-bounds.d.ts.map +1 -0
  132. package/dist/utils/scene-bounds.js +201 -0
  133. package/package.json +1 -1
@@ -26,47 +26,179 @@ export declare function mezzanineFixture(height?: number): {
26
26
  fromIds: string[];
27
27
  } | undefined;
28
28
  } | undefined;
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";
29
+ id: `beam_${string}`;
30
+ start: [number, number];
31
+ end: [number, number];
32
+ width: number;
33
+ depth: number;
34
+ size?: string | undefined;
35
+ plies: number;
36
+ material: "glulam" | "lvl" | "pressure-treated" | "sawn" | "steel";
37
+ placement: "dropped" | "flush";
38
+ topElevation?: number | undefined;
39
+ supportSlabId?: string | undefined;
40
+ type: "beam";
41
+ } | {
42
+ object: "node";
43
+ name?: string | undefined;
44
+ parentId: string | null;
45
+ visible: boolean;
46
+ camera?: {
47
+ position: [number, number, number];
48
+ target: [number, number, number];
49
+ mode: "orthographic" | "perspective";
50
+ fov?: number | undefined;
51
+ zoom?: number | undefined;
52
+ } | undefined;
53
+ metadata: Record<string, unknown>;
54
+ provenance?: {
55
+ refs: {
56
+ ns?: string | undefined;
57
+ id: string;
58
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
59
+ }[];
60
+ lineage?: {
61
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
62
+ fromIds: string[];
40
63
  } | 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;
64
+ } | undefined;
65
+ id: `measurement_${string}`;
66
+ measurement: {
67
+ kind: "volume";
68
+ base: ({
69
+ kind: "feature";
70
+ reference: {
71
+ nodeId: string;
72
+ featureId: string;
73
+ parameters?: Record<string, string | number | boolean> | undefined;
74
+ };
75
+ fallback: [number, number, number];
76
+ } | [number, number, number])[];
77
+ extrusion: [number, number, number];
78
+ } | {
79
+ kind: "distance";
80
+ points: [{
81
+ kind: "feature";
82
+ reference: {
83
+ nodeId: string;
84
+ featureId: string;
85
+ parameters?: Record<string, string | number | boolean> | undefined;
86
+ };
87
+ fallback: [number, number, number];
88
+ } | [number, number, number], {
89
+ kind: "feature";
90
+ reference: {
91
+ nodeId: string;
92
+ featureId: string;
93
+ parameters?: Record<string, string | number | boolean> | undefined;
94
+ };
95
+ fallback: [number, number, number];
96
+ } | [number, number, number]];
97
+ } | {
98
+ kind: "angle";
99
+ points: [{
100
+ kind: "feature";
101
+ reference: {
102
+ nodeId: string;
103
+ featureId: string;
104
+ parameters?: Record<string, string | number | boolean> | undefined;
105
+ };
106
+ fallback: [number, number, number];
107
+ } | [number, number, number], {
108
+ kind: "feature";
109
+ reference: {
110
+ nodeId: string;
111
+ featureId: string;
112
+ parameters?: Record<string, string | number | boolean> | undefined;
113
+ };
114
+ fallback: [number, number, number];
115
+ } | [number, number, number], {
116
+ kind: "feature";
117
+ reference: {
118
+ nodeId: string;
119
+ featureId: string;
120
+ parameters?: Record<string, string | number | boolean> | undefined;
121
+ };
122
+ fallback: [number, number, number];
123
+ } | [number, number, number]];
124
+ } | {
125
+ kind: "area";
126
+ base: ({
127
+ kind: "feature";
128
+ reference: {
129
+ nodeId: string;
130
+ featureId: string;
131
+ parameters?: Record<string, string | number | boolean> | undefined;
132
+ };
133
+ fallback: [number, number, number];
134
+ } | [number, number, number])[];
135
+ } | {
136
+ kind: "perimeter";
137
+ base: ({
138
+ kind: "feature";
139
+ reference: {
140
+ nodeId: string;
141
+ featureId: string;
142
+ parameters?: Record<string, string | number | boolean> | undefined;
143
+ };
144
+ fallback: [number, number, number];
145
+ } | [number, number, number])[];
146
+ };
147
+ type: "measurement";
148
+ } | {
149
+ object: "node";
150
+ name?: string | undefined;
151
+ parentId: string | null;
152
+ visible: boolean;
153
+ camera?: {
154
+ position: [number, number, number];
155
+ target: [number, number, number];
156
+ mode: "orthographic" | "perspective";
157
+ fov?: number | undefined;
158
+ zoom?: number | undefined;
159
+ } | undefined;
160
+ metadata: Record<string, unknown>;
161
+ provenance?: {
162
+ refs: {
163
+ ns?: string | undefined;
164
+ id: string;
165
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
166
+ }[];
167
+ lineage?: {
168
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
169
+ fromIds: string[];
50
170
  } | undefined;
51
171
  } | undefined;
52
- slots?: Record<string, string> | undefined;
53
- materialPreset: string;
54
- roofSegmentId?: string | undefined;
55
- position: [number, number, number];
56
- rotation: number;
172
+ id: `duct-segment_${string}`;
173
+ path: [number, number, number][];
174
+ autoHangers?: boolean | undefined;
175
+ hangerOverrides?: Record<string, {
176
+ fraction?: number | undefined;
177
+ skipped?: boolean | undefined;
178
+ hostId?: string | undefined;
179
+ }> | undefined;
180
+ hangerStyle?: "double" | "single" | undefined;
181
+ hangerSpacing?: number | undefined;
182
+ hangerMaxReach?: number | undefined;
183
+ wallAttachment?: {
184
+ wallId: `wall_${string}`;
185
+ side: "back" | "front";
186
+ startUV: [number, number];
187
+ endUV: [number, number];
188
+ offset: number;
189
+ } | undefined;
190
+ shape: "oval" | "rect" | "round";
191
+ diameter: number;
57
192
  width: number;
58
- depth: number;
59
193
  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";
194
+ roll: number;
195
+ ductMaterial: "duct-board" | "flex" | "sheet-metal" | "spiral";
196
+ seamDetail: boolean;
197
+ insulated: boolean;
198
+ insulationR: number;
199
+ system: "return" | "supply";
200
+ slots?: Record<string, string> | undefined;
201
+ type: "duct-segment";
70
202
  } | {
71
203
  object: "node";
72
204
  name?: string | undefined;
@@ -91,223 +223,48 @@ export declare function mezzanineFixture(height?: number): {
91
223
  fromIds: string[];
92
224
  } | undefined;
93
225
  } | 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;
206
- };
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;
226
+ id: `floor-opening_${string}`;
227
+ polygon: [number, number][];
228
+ hostZoneId?: string | undefined;
229
+ legacyPlateCuts?: Record<string, [number, number][][]> | undefined;
230
+ legacyCeilingCuts?: Record<string, [number, number][][]> | undefined;
231
+ source: string;
232
+ ownerId?: string | undefined;
233
+ surfaceId?: string | undefined;
234
+ drawnOn: "ceiling" | "floor";
235
+ cutsPrimary: boolean;
236
+ cutsAdjacent: boolean;
237
+ type: "floor-opening";
238
+ } | {
239
+ object: "node";
240
+ name?: string | undefined;
241
+ parentId: string | null;
242
+ visible: boolean;
243
+ camera?: {
244
+ position: [number, number, number];
245
+ target: [number, number, number];
246
+ mode: "orthographic" | "perspective";
247
+ fov?: number | undefined;
248
+ zoom?: number | undefined;
249
+ } | undefined;
250
+ metadata: Record<string, unknown>;
251
+ provenance?: {
252
+ refs: {
253
+ ns?: string | undefined;
254
+ id: string;
255
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
256
+ }[];
257
+ lineage?: {
258
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
259
+ fromIds: string[];
306
260
  } | undefined;
307
261
  } | undefined;
308
- materialPreset?: string | undefined;
309
- slots?: Record<string, string> | undefined;
310
- type: "column";
262
+ id: `lineset_${string}`;
263
+ path: [number, number, number][];
264
+ suctionDiameter: number;
265
+ liquidDiameter: number;
266
+ insulated: boolean;
267
+ type: "lineset";
311
268
  } | {
312
269
  object: "node";
313
270
  name?: string | undefined;
@@ -332,105 +289,13 @@ export declare function mezzanineFixture(height?: number): {
332
289
  fromIds: string[];
333
290
  } | undefined;
334
291
  } | undefined;
335
- id: `duct-fitting_${string}`;
292
+ id: `pipe-trap_${string}`;
336
293
  position: [number, number, number];
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;
342
- width: number;
343
- height: number;
344
- shape2: "oval" | "rect" | "round";
345
- width2: number;
346
- height2: number;
347
- angle: number;
348
- branchAngle: number;
294
+ rotation: number;
349
295
  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";
358
- } | {
359
- object: "node";
360
- name?: string | undefined;
361
- parentId: string | null;
362
- visible: boolean;
363
- camera?: {
364
- position: [number, number, number];
365
- target: [number, number, number];
366
- mode: "orthographic" | "perspective";
367
- fov?: number | undefined;
368
- zoom?: number | undefined;
369
- } | undefined;
370
- metadata: Record<string, unknown>;
371
- provenance?: {
372
- refs: {
373
- ns?: string | undefined;
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";
399
- } | {
400
- object: "node";
401
- name?: string | undefined;
402
- parentId: string | null;
403
- visible: boolean;
404
- camera?: {
405
- position: [number, number, number];
406
- target: [number, number, number];
407
- mode: "orthographic" | "perspective";
408
- fov?: number | undefined;
409
- zoom?: number | undefined;
410
- } | undefined;
411
- metadata: Record<string, unknown>;
412
- provenance?: {
413
- refs: {
414
- ns?: string | undefined;
415
- id: string;
416
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
417
- }[];
418
- lineage?: {
419
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
420
- fromIds: string[];
421
- } | undefined;
422
- } | undefined;
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;
428
- diameter: number;
429
- diameter2: number;
430
- cleanoutStyle: "end" | "inline";
431
- pipeMaterial: "abs" | "cast-iron" | "pvc";
432
- system: "vent" | "waste";
433
- type: "pipe-fitting";
296
+ pipeMaterial: "abs" | "cast-iron" | "pvc";
297
+ armLengthM: number;
298
+ type: "pipe-trap";
434
299
  } | {
435
300
  object: "node";
436
301
  name?: string | undefined;
@@ -963,7 +828,7 @@ export declare function mezzanineFixture(height?: number): {
963
828
  cavityInsulation?: string | undefined;
964
829
  } | undefined;
965
830
  slots?: Record<string, string> | undefined;
966
- children: `rseg_${string}`[];
831
+ children: string[];
967
832
  type: "roof";
968
833
  } | {
969
834
  object: "node";
@@ -1734,82 +1599,12 @@ export declare function mezzanineFixture(height?: number): {
1734
1599
  fromIds: string[];
1735
1600
  } | undefined;
1736
1601
  } | undefined;
1737
- id: `slab_${string}`;
1738
- material?: {
1739
- id?: string | undefined;
1740
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1741
- properties?: {
1742
- color: string;
1743
- roughness: number;
1744
- metalness: number;
1745
- opacity: number;
1746
- transparent: boolean;
1747
- side: "back" | "double" | "front";
1748
- } | undefined;
1749
- texture?: {
1750
- url: string;
1751
- repeat?: [number, number] | undefined;
1752
- scale?: number | undefined;
1753
- offset?: [number, number] | undefined;
1754
- normalMap?: string | undefined;
1755
- normalScale?: number | undefined;
1756
- bumpMap?: string | undefined;
1757
- bumpScale?: number | undefined;
1758
- } | undefined;
1759
- } | undefined;
1760
- materialPreset?: string | undefined;
1761
- slots?: Record<string, string> | undefined;
1762
- polygon: [number, number][];
1763
- holes: [number, number][][];
1764
- holeMetadata: {
1765
- source: "elevator" | "floor-opening" | "manual" | "room" | "stair";
1766
- openingId?: string | undefined;
1767
- stairId?: string | undefined;
1768
- elevatorId?: string | undefined;
1769
- }[];
1770
- elevation: number;
1771
- floorHeight?: number | undefined;
1772
- referenceFloorElevation?: number | undefined;
1773
- foundation?: {
1774
- type: "none" | "solid";
1775
- material?: string | {
1776
- id?: string | undefined;
1777
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1778
- properties?: {
1779
- color: string;
1780
- roughness: number;
1781
- metalness: number;
1782
- opacity: number;
1783
- transparent: boolean;
1784
- side: "back" | "double" | "front";
1785
- } | undefined;
1786
- texture?: {
1787
- url: string;
1788
- repeat?: [number, number] | undefined;
1789
- scale?: number | undefined;
1790
- offset?: [number, number] | undefined;
1791
- normalMap?: string | undefined;
1792
- normalScale?: number | undefined;
1793
- bumpMap?: string | undefined;
1794
- bumpScale?: number | undefined;
1795
- } | undefined;
1796
- } | undefined;
1797
- } | undefined;
1798
- thickness: number;
1799
- recessed: boolean;
1800
- recessedRimElevation?: number | undefined;
1801
- fillToTerrain?: boolean | undefined;
1802
- boundary?: "auto" | undefined;
1803
- support?: "open" | undefined;
1804
- plateRole?: "base" | "platform" | "sunken" | undefined;
1805
- railing?: {
1806
- start: [number, number];
1807
- end: [number, number];
1808
- }[] | undefined;
1809
- zoneIds?: string[] | undefined;
1810
- associatedZoneIds?: string[] | undefined;
1811
- autoFromWalls: boolean;
1812
- surfaceScript?: {
1602
+ id: `column_${string}`;
1603
+ children: string[];
1604
+ position: [number, number, number];
1605
+ rotation: number;
1606
+ supportSlabId?: string | undefined;
1607
+ source?: {
1813
1608
  kind: "script";
1814
1609
  meta?: {
1815
1610
  description?: string | undefined;
@@ -1922,9 +1717,105 @@ export declare function mezzanineFixture(height?: number): {
1922
1717
  thumbnail: string;
1923
1718
  floorPlan: string;
1924
1719
  } | undefined;
1925
- inputs: string;
1926
1720
  } | undefined;
1927
- type: "slab";
1721
+ style: "cluster" | "dravidian-carved" | "faceted" | "fluted" | "lathe-turned" | "plain";
1722
+ crossSection: "octagonal" | "rectangular" | "round" | "sixteen-sided" | "square";
1723
+ height: number;
1724
+ radius: number;
1725
+ width: number;
1726
+ depth: number;
1727
+ edgeSoftness: number;
1728
+ baseHeight: number;
1729
+ capitalHeight: number;
1730
+ shaftProfile: "baluster" | "bulged" | "hourglass" | "straight" | "tapered";
1731
+ shaftTaper: number;
1732
+ shaftBulge: number;
1733
+ shaftStartScale: number;
1734
+ shaftEndScale: number;
1735
+ shaftSegmentCount: number;
1736
+ shaftTwistStep: number;
1737
+ shaftCornerRadius: number;
1738
+ shaftDetail: "fluted" | "lathe-turned" | "none" | "panelled" | "spiral";
1739
+ baseStyle: "lotus" | "none" | "panelled-pedestal" | "ribbed-lotus" | "round-rings" | "simple-square" | "square-plinth" | "stepped-square";
1740
+ baseWidthScale: number;
1741
+ baseDepthScale: number;
1742
+ baseTierCount: number;
1743
+ baseStepSpread: number;
1744
+ basePlinthHeightRatio: number;
1745
+ baseRoundBandScale: number;
1746
+ baseNeckScale: number;
1747
+ baseRoundBandCount: number;
1748
+ baseRibCount: number;
1749
+ baseCarvingLevel: number;
1750
+ basePanelInset: number;
1751
+ capitalStyle: "corinthian-leaf" | "doric" | "ionic-volute" | "leaf-carved" | "none" | "rounded" | "simple" | "simple-slab" | "south-indian-bracket" | "stepped" | "volute" | "wood-bracket";
1752
+ capitalWidthScale: number;
1753
+ capitalDepthScale: number;
1754
+ capitalTierCount: number;
1755
+ capitalStepSpread: number;
1756
+ capitalBandCount: number;
1757
+ voluteSize: number;
1758
+ voluteCount: number;
1759
+ leafCount: number;
1760
+ leafRows: number;
1761
+ bracketDepth: number;
1762
+ bracketTierCount: number;
1763
+ pendantCount: number;
1764
+ capitalCarvingLevel: number;
1765
+ ringCount: number;
1766
+ ringPlacement: "bottom" | "ends" | "even" | "top";
1767
+ ringThickness: number;
1768
+ ringSpread: number;
1769
+ fluteCount: number;
1770
+ fluteDepth: number;
1771
+ fluteWidth: number;
1772
+ spiralTwist: number;
1773
+ spiralRibCount: number;
1774
+ panelCount: number;
1775
+ panelInsetDepth: number;
1776
+ panelShape: "arched" | "diamond" | "rectangle";
1777
+ latheRingCount: number;
1778
+ latheRingSpacing: "bottom" | "ends" | "even" | "top";
1779
+ carvingLevel: number;
1780
+ carvingPlacement: "all" | "base" | "capital" | "shaft";
1781
+ lowerBandEnabled: boolean;
1782
+ lowerBandHeight: number;
1783
+ lowerBandCarvingLevel: number;
1784
+ dentilCount: number;
1785
+ beadCount: number;
1786
+ supportStyle: "a-frame" | "box-frame" | "k-brace" | "portal-frame" | "single-strut" | "trestle" | "tripod" | "v-frame" | "vertical" | "x-brace" | "y-frame";
1787
+ braceWidth: number;
1788
+ braceDepth: number;
1789
+ braceBottomSpread: number;
1790
+ braceTopSpread: number;
1791
+ bracePlateEnabled: boolean;
1792
+ role?: "ornament" | "post" | undefined;
1793
+ postBase?: "none" | "pier" | "post-base" | undefined;
1794
+ material?: {
1795
+ id?: string | undefined;
1796
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1797
+ properties?: {
1798
+ color: string;
1799
+ roughness: number;
1800
+ metalness: number;
1801
+ opacity: number;
1802
+ transparent: boolean;
1803
+ side: "back" | "double" | "front";
1804
+ } | undefined;
1805
+ texture?: {
1806
+ url: string;
1807
+ repeat?: [number, number] | undefined;
1808
+ scale?: number | undefined;
1809
+ offset?: [number, number] | undefined;
1810
+ normalMap?: string | undefined;
1811
+ normalScale?: number | undefined;
1812
+ bumpMap?: string | undefined;
1813
+ bumpScale?: number | undefined;
1814
+ } | undefined;
1815
+ } | undefined;
1816
+ materialPreset?: string | undefined;
1817
+ slots?: Record<string, string> | undefined;
1818
+ type: "column";
1928
1819
  } | {
1929
1820
  object: "node";
1930
1821
  name?: string | undefined;
@@ -1949,30 +1840,245 @@ export declare function mezzanineFixture(height?: number): {
1949
1840
  fromIds: string[];
1950
1841
  } | undefined;
1951
1842
  } | undefined;
1952
- id: `leanto_${string}`;
1953
- position: [number, number, number];
1954
- rotation: [number, number, number];
1955
- children: (`column_${string}` | `roof_${string}`)[];
1956
- canopyForm: "butterfly" | "gable" | "mono";
1957
- hostKind: "conical-roof" | "freestanding" | "slab-edge" | "wall";
1958
- hostHeightOffset: number;
1959
- hostSlabId?: `slab_${string}` | undefined;
1960
- hostSlabEdgeIndex?: number | undefined;
1961
- hostSlabEdgeT?: number | undefined;
1962
- span: number;
1963
- autoSpan: boolean;
1964
- projection: number;
1965
- spanArcCenterZ?: number | undefined;
1966
- spanArcRadius?: number | undefined;
1967
- highEdgeHeight: number;
1968
- lowEdgeHeight: number;
1969
- pitch: number;
1970
- resizeLock: "preserve-high-edge" | "preserve-low-edge" | "preserve-pitch";
1971
- leftEndCondition: "joined" | "open" | "wall-abutment";
1972
- rightEndCondition: "joined" | "open" | "wall-abutment";
1973
- autoMiterCorners: boolean;
1974
- sideFlashing: boolean;
1975
- flashingProjection: number;
1843
+ id: `slab_${string}`;
1844
+ material?: {
1845
+ id?: string | undefined;
1846
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1847
+ properties?: {
1848
+ color: string;
1849
+ roughness: number;
1850
+ metalness: number;
1851
+ opacity: number;
1852
+ transparent: boolean;
1853
+ side: "back" | "double" | "front";
1854
+ } | undefined;
1855
+ texture?: {
1856
+ url: string;
1857
+ repeat?: [number, number] | undefined;
1858
+ scale?: number | undefined;
1859
+ offset?: [number, number] | undefined;
1860
+ normalMap?: string | undefined;
1861
+ normalScale?: number | undefined;
1862
+ bumpMap?: string | undefined;
1863
+ bumpScale?: number | undefined;
1864
+ } | undefined;
1865
+ } | undefined;
1866
+ materialPreset?: string | undefined;
1867
+ slots?: Record<string, string> | undefined;
1868
+ polygon: [number, number][];
1869
+ holes: [number, number][][];
1870
+ holeMetadata: {
1871
+ source: "elevator" | "floor-opening" | "manual" | "room" | "stair";
1872
+ openingId?: string | undefined;
1873
+ stairId?: string | undefined;
1874
+ elevatorId?: string | undefined;
1875
+ }[];
1876
+ elevation: number;
1877
+ floorHeight?: number | undefined;
1878
+ referenceFloorElevation?: number | undefined;
1879
+ foundation?: {
1880
+ type: "none" | "solid";
1881
+ material?: string | {
1882
+ id?: string | undefined;
1883
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1884
+ properties?: {
1885
+ color: string;
1886
+ roughness: number;
1887
+ metalness: number;
1888
+ opacity: number;
1889
+ transparent: boolean;
1890
+ side: "back" | "double" | "front";
1891
+ } | undefined;
1892
+ texture?: {
1893
+ url: string;
1894
+ repeat?: [number, number] | undefined;
1895
+ scale?: number | undefined;
1896
+ offset?: [number, number] | undefined;
1897
+ normalMap?: string | undefined;
1898
+ normalScale?: number | undefined;
1899
+ bumpMap?: string | undefined;
1900
+ bumpScale?: number | undefined;
1901
+ } | undefined;
1902
+ } | undefined;
1903
+ } | undefined;
1904
+ thickness: number;
1905
+ recessed: boolean;
1906
+ recessedRimElevation?: number | undefined;
1907
+ fillToTerrain?: boolean | undefined;
1908
+ boundary?: "auto" | undefined;
1909
+ support?: "open" | undefined;
1910
+ plateRole?: "base" | "platform" | "sunken" | undefined;
1911
+ railing?: {
1912
+ start: [number, number];
1913
+ end: [number, number];
1914
+ }[] | undefined;
1915
+ zoneIds?: string[] | undefined;
1916
+ associatedZoneIds?: string[] | undefined;
1917
+ autoFromWalls: boolean;
1918
+ surfaceScript?: {
1919
+ kind: "script";
1920
+ meta?: {
1921
+ description?: string | undefined;
1922
+ category?: string | undefined;
1923
+ tags?: string[] | undefined;
1924
+ parent?: string | undefined;
1925
+ } | undefined;
1926
+ language: "bpy" | "three";
1927
+ script: string;
1928
+ params: Record<string, string | number | boolean>;
1929
+ artifact: string;
1930
+ manifest: {
1931
+ bounds: {
1932
+ min: [number, number, number];
1933
+ max: [number, number, number];
1934
+ };
1935
+ params: {
1936
+ id: string;
1937
+ label?: string | undefined;
1938
+ kind: "boolean" | "number" | "string";
1939
+ default: string | number | boolean;
1940
+ min?: number | undefined;
1941
+ max?: number | undefined;
1942
+ step?: number | undefined;
1943
+ unit?: string | undefined;
1944
+ options?: string[] | undefined;
1945
+ }[];
1946
+ parts: {
1947
+ id: string;
1948
+ label?: string | undefined;
1949
+ type?: string | undefined;
1950
+ bounds?: {
1951
+ min: [number, number, number];
1952
+ max: [number, number, number];
1953
+ } | undefined;
1954
+ }[];
1955
+ surfaces: {
1956
+ part?: string | undefined;
1957
+ y: number;
1958
+ polygon: [number, number][];
1959
+ }[];
1960
+ slots: {
1961
+ id: string;
1962
+ label?: string | undefined;
1963
+ color?: string | undefined;
1964
+ roughness?: number | undefined;
1965
+ metalness?: number | undefined;
1966
+ transparent?: boolean | undefined;
1967
+ emissive?: boolean | undefined;
1968
+ }[];
1969
+ anchors: {
1970
+ id: string;
1971
+ position: [number, number, number];
1972
+ normal?: [number, number, number] | undefined;
1973
+ }[];
1974
+ lights: {
1975
+ id: string;
1976
+ position: [number, number, number];
1977
+ color: string;
1978
+ intensity: number;
1979
+ distance?: number | undefined;
1980
+ spot?: {
1981
+ direction: [number, number, number];
1982
+ angle: number;
1983
+ softness: number;
1984
+ } | undefined;
1985
+ shadows?: boolean | undefined;
1986
+ glow?: {
1987
+ size: number;
1988
+ strength: number;
1989
+ } | undefined;
1990
+ }[];
1991
+ undersides: {
1992
+ part?: string | undefined;
1993
+ polygon: [number, number][];
1994
+ plane: [number, number, number, number];
1995
+ }[];
1996
+ animations: {
1997
+ name: string;
1998
+ duration: number;
1999
+ }[];
2000
+ cutters?: {
2001
+ host: "ceiling" | "mounted" | "slab" | "wall";
2002
+ polygon: number[][];
2003
+ minY: number;
2004
+ maxY: number;
2005
+ }[] | undefined;
2006
+ cutout: boolean;
2007
+ collider: boolean;
2008
+ shape?: {
2009
+ tolerance: number;
2010
+ bands: {
2011
+ y0: number;
2012
+ y1: number;
2013
+ polygons: {
2014
+ outer: [number, number][];
2015
+ holes?: [number, number][][] | undefined;
2016
+ }[];
2017
+ }[];
2018
+ } | undefined;
2019
+ triangles: number;
2020
+ coverage?: number | undefined;
2021
+ uncovered?: {
2022
+ min: [number, number];
2023
+ max: [number, number];
2024
+ }[] | undefined;
2025
+ };
2026
+ images?: {
2027
+ artifact: string;
2028
+ thumbnail: string;
2029
+ floorPlan: string;
2030
+ } | undefined;
2031
+ inputs: string;
2032
+ } | undefined;
2033
+ type: "slab";
2034
+ } | {
2035
+ object: "node";
2036
+ name?: string | undefined;
2037
+ parentId: string | null;
2038
+ visible: boolean;
2039
+ camera?: {
2040
+ position: [number, number, number];
2041
+ target: [number, number, number];
2042
+ mode: "orthographic" | "perspective";
2043
+ fov?: number | undefined;
2044
+ zoom?: number | undefined;
2045
+ } | undefined;
2046
+ metadata: Record<string, unknown>;
2047
+ provenance?: {
2048
+ refs: {
2049
+ ns?: string | undefined;
2050
+ id: string;
2051
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
2052
+ }[];
2053
+ lineage?: {
2054
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
2055
+ fromIds: string[];
2056
+ } | undefined;
2057
+ } | undefined;
2058
+ id: `leanto_${string}`;
2059
+ position: [number, number, number];
2060
+ rotation: [number, number, number];
2061
+ children: (`column_${string}` | `roof_${string}`)[];
2062
+ canopyForm: "butterfly" | "gable" | "mono";
2063
+ hostKind: "conical-roof" | "freestanding" | "slab-edge" | "wall";
2064
+ hostHeightOffset: number;
2065
+ hostSlabId?: `slab_${string}` | undefined;
2066
+ hostSlabEdgeIndex?: number | undefined;
2067
+ hostSlabEdgeT?: number | undefined;
2068
+ span: number;
2069
+ autoSpan: boolean;
2070
+ projection: number;
2071
+ spanArcCenterZ?: number | undefined;
2072
+ spanArcRadius?: number | undefined;
2073
+ highEdgeHeight: number;
2074
+ lowEdgeHeight: number;
2075
+ pitch: number;
2076
+ resizeLock: "preserve-high-edge" | "preserve-low-edge" | "preserve-pitch";
2077
+ leftEndCondition: "joined" | "open" | "wall-abutment";
2078
+ rightEndCondition: "joined" | "open" | "wall-abutment";
2079
+ autoMiterCorners: boolean;
2080
+ sideFlashing: boolean;
2081
+ flashingProjection: number;
1976
2082
  flashingHeight: number;
1977
2083
  slots?: Record<string, string> | undefined;
1978
2084
  highSideMode: "independent-high-beam" | "wall-ledger";
@@ -3320,42 +3426,6 @@ export declare function mezzanineFixture(height?: number): {
3320
3426
  start: [number, number];
3321
3427
  end: [number, number];
3322
3428
  type: "separator";
3323
- } | {
3324
- object: "node";
3325
- name?: string | undefined;
3326
- parentId: string | null;
3327
- visible: boolean;
3328
- camera?: {
3329
- position: [number, number, number];
3330
- target: [number, number, number];
3331
- mode: "orthographic" | "perspective";
3332
- fov?: number | undefined;
3333
- zoom?: number | undefined;
3334
- } | undefined;
3335
- metadata: Record<string, unknown>;
3336
- provenance?: {
3337
- refs: {
3338
- ns?: string | undefined;
3339
- id: string;
3340
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
3341
- }[];
3342
- lineage?: {
3343
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
3344
- fromIds: string[];
3345
- } | undefined;
3346
- } | undefined;
3347
- id: `floor-opening_${string}`;
3348
- polygon: [number, number][];
3349
- hostZoneId?: string | undefined;
3350
- legacyPlateCuts?: Record<string, [number, number][][]> | undefined;
3351
- legacyCeilingCuts?: Record<string, [number, number][][]> | undefined;
3352
- source: string;
3353
- ownerId?: string | undefined;
3354
- surfaceId?: string | undefined;
3355
- drawnOn: "ceiling" | "floor";
3356
- cutsPrimary: boolean;
3357
- cutsAdjacent: boolean;
3358
- type: "floor-opening";
3359
3429
  } | {
3360
3430
  object: "node";
3361
3431
  name?: string | undefined;
@@ -3450,42 +3520,6 @@ export declare function mezzanineFixture(height?: number): {
3450
3520
  color: string;
3451
3521
  style: "guard" | "horizontal" | "picket" | "privacy" | "rail" | "slat";
3452
3522
  type: "fence";
3453
- } | {
3454
- object: "node";
3455
- name?: string | undefined;
3456
- parentId: string | null;
3457
- visible: boolean;
3458
- camera?: {
3459
- position: [number, number, number];
3460
- target: [number, number, number];
3461
- mode: "orthographic" | "perspective";
3462
- fov?: number | undefined;
3463
- zoom?: number | undefined;
3464
- } | undefined;
3465
- metadata: Record<string, unknown>;
3466
- provenance?: {
3467
- refs: {
3468
- ns?: string | undefined;
3469
- id: string;
3470
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
3471
- }[];
3472
- lineage?: {
3473
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
3474
- fromIds: string[];
3475
- } | undefined;
3476
- } | undefined;
3477
- id: `beam_${string}`;
3478
- start: [number, number];
3479
- end: [number, number];
3480
- width: number;
3481
- depth: number;
3482
- size?: string | undefined;
3483
- plies: number;
3484
- material: "glulam" | "lvl" | "pressure-treated" | "sawn" | "steel";
3485
- placement: "dropped" | "flush";
3486
- topElevation?: number | undefined;
3487
- supportSlabId?: string | undefined;
3488
- type: "beam";
3489
3523
  } | {
3490
3524
  object: "node";
3491
3525
  name?: string | undefined;
@@ -4512,113 +4546,6 @@ export declare function mezzanineFixture(height?: number): {
4512
4546
  label: string;
4513
4547
  } | null;
4514
4548
  type: "guide";
4515
- } | {
4516
- object: "node";
4517
- name?: string | undefined;
4518
- parentId: string | null;
4519
- visible: boolean;
4520
- camera?: {
4521
- position: [number, number, number];
4522
- target: [number, number, number];
4523
- mode: "orthographic" | "perspective";
4524
- fov?: number | undefined;
4525
- zoom?: number | undefined;
4526
- } | undefined;
4527
- metadata: Record<string, unknown>;
4528
- provenance?: {
4529
- refs: {
4530
- ns?: string | undefined;
4531
- id: string;
4532
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
4533
- }[];
4534
- lineage?: {
4535
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
4536
- fromIds: string[];
4537
- } | undefined;
4538
- } | undefined;
4539
- id: `measurement_${string}`;
4540
- measurement: {
4541
- kind: "distance";
4542
- points: [{
4543
- kind: "feature";
4544
- reference: {
4545
- nodeId: string;
4546
- featureId: string;
4547
- parameters?: Record<string, string | number | boolean> | undefined;
4548
- };
4549
- fallback: [number, number, number];
4550
- } | [number, number, number], {
4551
- kind: "feature";
4552
- reference: {
4553
- nodeId: string;
4554
- featureId: string;
4555
- parameters?: Record<string, string | number | boolean> | undefined;
4556
- };
4557
- fallback: [number, number, number];
4558
- } | [number, number, number]];
4559
- } | {
4560
- kind: "angle";
4561
- points: [{
4562
- kind: "feature";
4563
- reference: {
4564
- nodeId: string;
4565
- featureId: string;
4566
- parameters?: Record<string, string | number | boolean> | undefined;
4567
- };
4568
- fallback: [number, number, number];
4569
- } | [number, number, number], {
4570
- kind: "feature";
4571
- reference: {
4572
- nodeId: string;
4573
- featureId: string;
4574
- parameters?: Record<string, string | number | boolean> | undefined;
4575
- };
4576
- fallback: [number, number, number];
4577
- } | [number, number, number], {
4578
- kind: "feature";
4579
- reference: {
4580
- nodeId: string;
4581
- featureId: string;
4582
- parameters?: Record<string, string | number | boolean> | undefined;
4583
- };
4584
- fallback: [number, number, number];
4585
- } | [number, number, number]];
4586
- } | {
4587
- kind: "area";
4588
- base: ({
4589
- kind: "feature";
4590
- reference: {
4591
- nodeId: string;
4592
- featureId: string;
4593
- parameters?: Record<string, string | number | boolean> | undefined;
4594
- };
4595
- fallback: [number, number, number];
4596
- } | [number, number, number])[];
4597
- } | {
4598
- kind: "perimeter";
4599
- base: ({
4600
- kind: "feature";
4601
- reference: {
4602
- nodeId: string;
4603
- featureId: string;
4604
- parameters?: Record<string, string | number | boolean> | undefined;
4605
- };
4606
- fallback: [number, number, number];
4607
- } | [number, number, number])[];
4608
- } | {
4609
- kind: "volume";
4610
- base: ({
4611
- kind: "feature";
4612
- reference: {
4613
- nodeId: string;
4614
- featureId: string;
4615
- parameters?: Record<string, string | number | boolean> | undefined;
4616
- };
4617
- fallback: [number, number, number];
4618
- } | [number, number, number])[];
4619
- extrusion: [number, number, number];
4620
- };
4621
- type: "measurement";
4622
4549
  } | {
4623
4550
  object: "node";
4624
4551
  name?: string | undefined;
@@ -4672,36 +4599,29 @@ export declare function mezzanineFixture(height?: number): {
4672
4599
  fromIds: string[];
4673
4600
  } | undefined;
4674
4601
  } | undefined;
4675
- id: `duct-segment_${string}`;
4676
- path: [number, number, number][];
4677
- autoHangers?: boolean | undefined;
4678
- hangerOverrides?: Record<string, {
4679
- fraction?: number | undefined;
4680
- skipped?: boolean | undefined;
4681
- hostId?: string | undefined;
4682
- }> | undefined;
4683
- hangerStyle?: "double" | "single" | undefined;
4684
- hangerSpacing?: number | undefined;
4685
- hangerMaxReach?: number | undefined;
4686
- wallAttachment?: {
4687
- wallId: `wall_${string}`;
4688
- side: "back" | "front";
4689
- startUV: [number, number];
4690
- endUV: [number, number];
4691
- offset: number;
4692
- } | undefined;
4602
+ id: `duct-fitting_${string}`;
4603
+ position: [number, number, number];
4604
+ rotation: [number, number, number];
4605
+ fittingType: "access-panel" | "coupling" | "cross" | "damper" | "elbow" | "end-cap" | "reducer" | "tee" | "transition";
4693
4606
  shape: "oval" | "rect" | "round";
4694
- diameter: number;
4607
+ inletShape?: "oval" | "rect" | "round" | undefined;
4608
+ outletShape?: "oval" | "rect" | "round" | undefined;
4695
4609
  width: number;
4696
4610
  height: number;
4697
- roll: number;
4698
- ductMaterial: "duct-board" | "flex" | "sheet-metal" | "spiral";
4699
- seamDetail: boolean;
4700
- insulated: boolean;
4701
- insulationR: number;
4611
+ shape2: "oval" | "rect" | "round";
4612
+ width2: number;
4613
+ height2: number;
4614
+ angle: number;
4615
+ branchAngle: number;
4616
+ diameter: number;
4617
+ diameter2: number;
4618
+ ductMaterial: "duct-board" | "flex" | "sheet-metal";
4702
4619
  system: "return" | "supply";
4620
+ damperAngle: number;
4621
+ panelWidth: number;
4622
+ panelHeight: number;
4703
4623
  slots?: Record<string, string> | undefined;
4704
- type: "duct-segment";
4624
+ type: "duct-fitting";
4705
4625
  } | {
4706
4626
  object: "node";
4707
4627
  name?: string | undefined;
@@ -4763,12 +4683,23 @@ export declare function mezzanineFixture(height?: number): {
4763
4683
  fromIds: string[];
4764
4684
  } | undefined;
4765
4685
  } | undefined;
4766
- id: `lineset_${string}`;
4767
- path: [number, number, number][];
4768
- suctionDiameter: number;
4769
- liquidDiameter: number;
4770
- insulated: boolean;
4771
- type: "lineset";
4686
+ id: `hvac-equipment_${string}`;
4687
+ position: [number, number, number];
4688
+ rotation: number;
4689
+ supportSlabId?: string | undefined;
4690
+ equipmentType: "air-handler" | "condenser" | "furnace";
4691
+ width: number;
4692
+ depth: number;
4693
+ height: number;
4694
+ supplyShape: "oval" | "rect" | "round";
4695
+ returnShape: "oval" | "rect" | "round";
4696
+ supplyDiameter: number;
4697
+ returnDiameter: number;
4698
+ supplyWidth: number;
4699
+ supplyHeight: number;
4700
+ returnWidth: number;
4701
+ returnHeight: number;
4702
+ type: "hvac-equipment";
4772
4703
  } | {
4773
4704
  object: "node";
4774
4705
  name?: string | undefined;
@@ -4867,13 +4798,17 @@ export declare function mezzanineFixture(height?: number): {
4867
4798
  fromIds: string[];
4868
4799
  } | undefined;
4869
4800
  } | undefined;
4870
- id: `pipe-trap_${string}`;
4801
+ id: `pipe-fitting_${string}`;
4871
4802
  position: [number, number, number];
4872
- rotation: number;
4803
+ rotation: [number, number, number];
4804
+ fittingType: "cleanout" | "coupling" | "cross" | "elbow" | "end-cap" | "reducer" | "sanitary-tee" | "wye";
4805
+ angle: number;
4873
4806
  diameter: number;
4807
+ diameter2: number;
4808
+ cleanoutStyle: "end" | "inline";
4874
4809
  pipeMaterial: "abs" | "cast-iron" | "pvc";
4875
- armLengthM: number;
4876
- type: "pipe-trap";
4810
+ system: "vent" | "waste";
4811
+ type: "pipe-fitting";
4877
4812
  } | {
4878
4813
  object: "node";
4879
4814
  name?: string | undefined;
@@ -5136,7 +5071,7 @@ export declare function mezzanineFixture(height?: number): {
5136
5071
  fromIds: string[];
5137
5072
  } | undefined;
5138
5073
  } | undefined;
5139
- id: `tvent_${string}`;
5074
+ id: `bvent_${string}`;
5140
5075
  material?: {
5141
5076
  id?: string | undefined;
5142
5077
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
@@ -5164,19 +5099,84 @@ export declare function mezzanineFixture(height?: number): {
5164
5099
  roofSegmentId?: string | undefined;
5165
5100
  position: [number, number, number];
5166
5101
  rotation: number;
5167
- diameter: number;
5102
+ width: number;
5103
+ depth: number;
5168
5104
  height: number;
5169
- neckHeight: number;
5170
- baseOverhang: number;
5171
- vaneCount: number;
5172
- spinSpeed: number;
5173
- style: "cylinder" | "globe";
5174
- type: "turbine-vent";
5175
- } | {
5176
- object: "node";
5177
- name?: string | undefined;
5178
- parentId: string | null;
5179
- visible: boolean;
5105
+ hoodOverhang: number;
5106
+ topTaper: number;
5107
+ capHeight: number;
5108
+ capGap: number;
5109
+ domeCurvature: number;
5110
+ baseInset: number;
5111
+ baseHeight: number;
5112
+ cornerBevel: number;
5113
+ style: "box" | "cap" | "dome";
5114
+ type: "box-vent";
5115
+ } | {
5116
+ object: "node";
5117
+ name?: string | undefined;
5118
+ parentId: string | null;
5119
+ visible: boolean;
5120
+ camera?: {
5121
+ position: [number, number, number];
5122
+ target: [number, number, number];
5123
+ mode: "orthographic" | "perspective";
5124
+ fov?: number | undefined;
5125
+ zoom?: number | undefined;
5126
+ } | undefined;
5127
+ metadata: Record<string, unknown>;
5128
+ provenance?: {
5129
+ refs: {
5130
+ ns?: string | undefined;
5131
+ id: string;
5132
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
5133
+ }[];
5134
+ lineage?: {
5135
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
5136
+ fromIds: string[];
5137
+ } | undefined;
5138
+ } | undefined;
5139
+ id: `tvent_${string}`;
5140
+ material?: {
5141
+ id?: string | undefined;
5142
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
5143
+ properties?: {
5144
+ color: string;
5145
+ roughness: number;
5146
+ metalness: number;
5147
+ opacity: number;
5148
+ transparent: boolean;
5149
+ side: "back" | "double" | "front";
5150
+ } | undefined;
5151
+ texture?: {
5152
+ url: string;
5153
+ repeat?: [number, number] | undefined;
5154
+ scale?: number | undefined;
5155
+ offset?: [number, number] | undefined;
5156
+ normalMap?: string | undefined;
5157
+ normalScale?: number | undefined;
5158
+ bumpMap?: string | undefined;
5159
+ bumpScale?: number | undefined;
5160
+ } | undefined;
5161
+ } | undefined;
5162
+ slots?: Record<string, string> | undefined;
5163
+ materialPreset: string;
5164
+ roofSegmentId?: string | undefined;
5165
+ position: [number, number, number];
5166
+ rotation: number;
5167
+ diameter: number;
5168
+ height: number;
5169
+ neckHeight: number;
5170
+ baseOverhang: number;
5171
+ vaneCount: number;
5172
+ spinSpeed: number;
5173
+ style: "cylinder" | "globe";
5174
+ type: "turbine-vent";
5175
+ } | {
5176
+ object: "node";
5177
+ name?: string | undefined;
5178
+ parentId: string | null;
5179
+ visible: boolean;
5180
5180
  camera?: {
5181
5181
  position: [number, number, number];
5182
5182
  target: [number, number, number];
@@ -5648,350 +5648,18 @@ export declare function mezzanineFixture(height?: number): {
5648
5648
  side: "back" | "double" | "front";
5649
5649
  } | undefined;
5650
5650
  texture?: {
5651
- url: string;
5652
- repeat?: [number, number] | undefined;
5653
- scale?: number | undefined;
5654
- offset?: [number, number] | undefined;
5655
- normalMap?: string | undefined;
5656
- normalScale?: number | undefined;
5657
- bumpMap?: string | undefined;
5658
- bumpScale?: number | undefined;
5659
- } | undefined;
5660
- } | undefined;
5661
- sideMaterialPreset?: string | undefined;
5662
- wallMaterial?: {
5663
- id?: string | undefined;
5664
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
5665
- properties?: {
5666
- color: string;
5667
- roughness: number;
5668
- metalness: number;
5669
- opacity: number;
5670
- transparent: boolean;
5671
- side: "back" | "double" | "front";
5672
- } | undefined;
5673
- texture?: {
5674
- url: string;
5675
- repeat?: [number, number] | undefined;
5676
- scale?: number | undefined;
5677
- offset?: [number, number] | undefined;
5678
- normalMap?: string | undefined;
5679
- normalScale?: number | undefined;
5680
- bumpMap?: string | undefined;
5681
- bumpScale?: number | undefined;
5682
- } | undefined;
5683
- } | undefined;
5684
- wallMaterialPreset?: string | undefined;
5685
- roofSegmentId?: string | undefined;
5686
- position: [number, number, number];
5687
- rotation: number;
5688
- width: number;
5689
- depth: number;
5690
- height: number;
5691
- roofType: "barrel" | "conical" | "dutch" | "flat" | "gable" | "gambrel" | "hip" | "mansard" | "shed";
5692
- roofHeight: number;
5693
- shedHighSide: "back" | "front";
5694
- wallSkirtHeight: number;
5695
- windowWidth: number;
5696
- windowHeight: number;
5697
- windowOffsetX: number;
5698
- windowOffsetY: number;
5699
- windowFrameThickness: number;
5700
- windowFrameDepth: number;
5701
- windowColumns: number;
5702
- windowRows: number;
5703
- windowDividerThickness: number;
5704
- windowShape: "arch" | "rectangle" | "rounded";
5705
- windowArchHeight: number;
5706
- windowCornerRadii: [number, number, number, number];
5707
- windowSill: boolean;
5708
- windowSillDepth: number;
5709
- windowSillThickness: number;
5710
- children: `window_${string}`[];
5711
- type: "dormer";
5712
- }>>;
5713
- nodes: Readonly<Record<string, {
5714
- object: "node";
5715
- name?: string | undefined;
5716
- parentId: string | null;
5717
- visible: boolean;
5718
- camera?: {
5719
- position: [number, number, number];
5720
- target: [number, number, number];
5721
- mode: "orthographic" | "perspective";
5722
- fov?: number | undefined;
5723
- zoom?: number | undefined;
5724
- } | undefined;
5725
- metadata: Record<string, unknown>;
5726
- provenance?: {
5727
- refs: {
5728
- ns?: string | undefined;
5729
- id: string;
5730
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
5731
- }[];
5732
- lineage?: {
5733
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
5734
- fromIds: string[];
5735
- } | undefined;
5736
- } | undefined;
5737
- id: `bvent_${string}`;
5738
- material?: {
5739
- id?: string | undefined;
5740
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
5741
- properties?: {
5742
- color: string;
5743
- roughness: number;
5744
- metalness: number;
5745
- opacity: number;
5746
- transparent: boolean;
5747
- side: "back" | "double" | "front";
5748
- } | undefined;
5749
- texture?: {
5750
- url: string;
5751
- repeat?: [number, number] | undefined;
5752
- scale?: number | undefined;
5753
- offset?: [number, number] | undefined;
5754
- normalMap?: string | undefined;
5755
- normalScale?: number | undefined;
5756
- bumpMap?: string | undefined;
5757
- bumpScale?: number | undefined;
5758
- } | undefined;
5759
- } | undefined;
5760
- slots?: Record<string, string> | undefined;
5761
- materialPreset: string;
5762
- roofSegmentId?: string | undefined;
5763
- position: [number, number, number];
5764
- rotation: number;
5765
- width: number;
5766
- depth: number;
5767
- height: number;
5768
- hoodOverhang: number;
5769
- topTaper: number;
5770
- capHeight: number;
5771
- capGap: number;
5772
- domeCurvature: number;
5773
- baseInset: number;
5774
- baseHeight: number;
5775
- cornerBevel: number;
5776
- style: "box" | "cap" | "dome";
5777
- type: "box-vent";
5778
- } | {
5779
- object: "node";
5780
- name?: string | undefined;
5781
- parentId: string | null;
5782
- visible: boolean;
5783
- camera?: {
5784
- position: [number, number, number];
5785
- target: [number, number, number];
5786
- mode: "orthographic" | "perspective";
5787
- fov?: number | undefined;
5788
- zoom?: number | undefined;
5789
- } | undefined;
5790
- metadata: Record<string, unknown>;
5791
- provenance?: {
5792
- refs: {
5793
- ns?: string | undefined;
5794
- id: string;
5795
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
5796
- }[];
5797
- lineage?: {
5798
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
5799
- fromIds: string[];
5800
- } | undefined;
5801
- } | undefined;
5802
- id: `column_${string}`;
5803
- children: string[];
5804
- position: [number, number, number];
5805
- rotation: number;
5806
- supportSlabId?: string | undefined;
5807
- source?: {
5808
- kind: "script";
5809
- meta?: {
5810
- description?: string | undefined;
5811
- category?: string | undefined;
5812
- tags?: string[] | undefined;
5813
- parent?: string | undefined;
5814
- } | undefined;
5815
- language: "bpy" | "three";
5816
- script: string;
5817
- params: Record<string, string | number | boolean>;
5818
- artifact: string;
5819
- manifest: {
5820
- bounds: {
5821
- min: [number, number, number];
5822
- max: [number, number, number];
5823
- };
5824
- params: {
5825
- id: string;
5826
- label?: string | undefined;
5827
- kind: "boolean" | "number" | "string";
5828
- default: string | number | boolean;
5829
- min?: number | undefined;
5830
- max?: number | undefined;
5831
- step?: number | undefined;
5832
- unit?: string | undefined;
5833
- options?: string[] | undefined;
5834
- }[];
5835
- parts: {
5836
- id: string;
5837
- label?: string | undefined;
5838
- type?: string | undefined;
5839
- bounds?: {
5840
- min: [number, number, number];
5841
- max: [number, number, number];
5842
- } | undefined;
5843
- }[];
5844
- surfaces: {
5845
- part?: string | undefined;
5846
- y: number;
5847
- polygon: [number, number][];
5848
- }[];
5849
- slots: {
5850
- id: string;
5851
- label?: string | undefined;
5852
- color?: string | undefined;
5853
- roughness?: number | undefined;
5854
- metalness?: number | undefined;
5855
- transparent?: boolean | undefined;
5856
- emissive?: boolean | undefined;
5857
- }[];
5858
- anchors: {
5859
- id: string;
5860
- position: [number, number, number];
5861
- normal?: [number, number, number] | undefined;
5862
- }[];
5863
- lights: {
5864
- id: string;
5865
- position: [number, number, number];
5866
- color: string;
5867
- intensity: number;
5868
- distance?: number | undefined;
5869
- spot?: {
5870
- direction: [number, number, number];
5871
- angle: number;
5872
- softness: number;
5873
- } | undefined;
5874
- shadows?: boolean | undefined;
5875
- glow?: {
5876
- size: number;
5877
- strength: number;
5878
- } | undefined;
5879
- }[];
5880
- undersides: {
5881
- part?: string | undefined;
5882
- polygon: [number, number][];
5883
- plane: [number, number, number, number];
5884
- }[];
5885
- animations: {
5886
- name: string;
5887
- duration: number;
5888
- }[];
5889
- cutters?: {
5890
- host: "ceiling" | "mounted" | "slab" | "wall";
5891
- polygon: number[][];
5892
- minY: number;
5893
- maxY: number;
5894
- }[] | undefined;
5895
- cutout: boolean;
5896
- collider: boolean;
5897
- shape?: {
5898
- tolerance: number;
5899
- bands: {
5900
- y0: number;
5901
- y1: number;
5902
- polygons: {
5903
- outer: [number, number][];
5904
- holes?: [number, number][][] | undefined;
5905
- }[];
5906
- }[];
5907
- } | undefined;
5908
- triangles: number;
5909
- coverage?: number | undefined;
5910
- uncovered?: {
5911
- min: [number, number];
5912
- max: [number, number];
5913
- }[] | undefined;
5914
- };
5915
- images?: {
5916
- artifact: string;
5917
- thumbnail: string;
5918
- floorPlan: string;
5919
- } | undefined;
5920
- } | undefined;
5921
- style: "cluster" | "dravidian-carved" | "faceted" | "fluted" | "lathe-turned" | "plain";
5922
- crossSection: "octagonal" | "rectangular" | "round" | "sixteen-sided" | "square";
5923
- height: number;
5924
- radius: number;
5925
- width: number;
5926
- depth: number;
5927
- edgeSoftness: number;
5928
- baseHeight: number;
5929
- capitalHeight: number;
5930
- shaftProfile: "baluster" | "bulged" | "hourglass" | "straight" | "tapered";
5931
- shaftTaper: number;
5932
- shaftBulge: number;
5933
- shaftStartScale: number;
5934
- shaftEndScale: number;
5935
- shaftSegmentCount: number;
5936
- shaftTwistStep: number;
5937
- shaftCornerRadius: number;
5938
- shaftDetail: "fluted" | "lathe-turned" | "none" | "panelled" | "spiral";
5939
- baseStyle: "lotus" | "none" | "panelled-pedestal" | "ribbed-lotus" | "round-rings" | "simple-square" | "square-plinth" | "stepped-square";
5940
- baseWidthScale: number;
5941
- baseDepthScale: number;
5942
- baseTierCount: number;
5943
- baseStepSpread: number;
5944
- basePlinthHeightRatio: number;
5945
- baseRoundBandScale: number;
5946
- baseNeckScale: number;
5947
- baseRoundBandCount: number;
5948
- baseRibCount: number;
5949
- baseCarvingLevel: number;
5950
- basePanelInset: number;
5951
- capitalStyle: "corinthian-leaf" | "doric" | "ionic-volute" | "leaf-carved" | "none" | "rounded" | "simple" | "simple-slab" | "south-indian-bracket" | "stepped" | "volute" | "wood-bracket";
5952
- capitalWidthScale: number;
5953
- capitalDepthScale: number;
5954
- capitalTierCount: number;
5955
- capitalStepSpread: number;
5956
- capitalBandCount: number;
5957
- voluteSize: number;
5958
- voluteCount: number;
5959
- leafCount: number;
5960
- leafRows: number;
5961
- bracketDepth: number;
5962
- bracketTierCount: number;
5963
- pendantCount: number;
5964
- capitalCarvingLevel: number;
5965
- ringCount: number;
5966
- ringPlacement: "bottom" | "ends" | "even" | "top";
5967
- ringThickness: number;
5968
- ringSpread: number;
5969
- fluteCount: number;
5970
- fluteDepth: number;
5971
- fluteWidth: number;
5972
- spiralTwist: number;
5973
- spiralRibCount: number;
5974
- panelCount: number;
5975
- panelInsetDepth: number;
5976
- panelShape: "arched" | "diamond" | "rectangle";
5977
- latheRingCount: number;
5978
- latheRingSpacing: "bottom" | "ends" | "even" | "top";
5979
- carvingLevel: number;
5980
- carvingPlacement: "all" | "base" | "capital" | "shaft";
5981
- lowerBandEnabled: boolean;
5982
- lowerBandHeight: number;
5983
- lowerBandCarvingLevel: number;
5984
- dentilCount: number;
5985
- beadCount: number;
5986
- supportStyle: "a-frame" | "box-frame" | "k-brace" | "portal-frame" | "single-strut" | "trestle" | "tripod" | "v-frame" | "vertical" | "x-brace" | "y-frame";
5987
- braceWidth: number;
5988
- braceDepth: number;
5989
- braceBottomSpread: number;
5990
- braceTopSpread: number;
5991
- bracePlateEnabled: boolean;
5992
- role?: "ornament" | "post" | undefined;
5993
- postBase?: "none" | "pier" | "post-base" | undefined;
5994
- material?: {
5651
+ url: string;
5652
+ repeat?: [number, number] | undefined;
5653
+ scale?: number | undefined;
5654
+ offset?: [number, number] | undefined;
5655
+ normalMap?: string | undefined;
5656
+ normalScale?: number | undefined;
5657
+ bumpMap?: string | undefined;
5658
+ bumpScale?: number | undefined;
5659
+ } | undefined;
5660
+ } | undefined;
5661
+ sideMaterialPreset?: string | undefined;
5662
+ wallMaterial?: {
5995
5663
  id?: string | undefined;
5996
5664
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
5997
5665
  properties?: {
@@ -6013,9 +5681,71 @@ export declare function mezzanineFixture(height?: number): {
6013
5681
  bumpScale?: number | undefined;
6014
5682
  } | undefined;
6015
5683
  } | undefined;
6016
- materialPreset?: string | undefined;
6017
- slots?: Record<string, string> | undefined;
6018
- type: "column";
5684
+ wallMaterialPreset?: string | undefined;
5685
+ roofSegmentId?: string | undefined;
5686
+ position: [number, number, number];
5687
+ rotation: number;
5688
+ width: number;
5689
+ depth: number;
5690
+ height: number;
5691
+ roofType: "barrel" | "conical" | "dutch" | "flat" | "gable" | "gambrel" | "hip" | "mansard" | "shed";
5692
+ roofHeight: number;
5693
+ shedHighSide: "back" | "front";
5694
+ wallSkirtHeight: number;
5695
+ windowWidth: number;
5696
+ windowHeight: number;
5697
+ windowOffsetX: number;
5698
+ windowOffsetY: number;
5699
+ windowFrameThickness: number;
5700
+ windowFrameDepth: number;
5701
+ windowColumns: number;
5702
+ windowRows: number;
5703
+ windowDividerThickness: number;
5704
+ windowShape: "arch" | "rectangle" | "rounded";
5705
+ windowArchHeight: number;
5706
+ windowCornerRadii: [number, number, number, number];
5707
+ windowSill: boolean;
5708
+ windowSillDepth: number;
5709
+ windowSillThickness: number;
5710
+ children: `window_${string}`[];
5711
+ type: "dormer";
5712
+ }>>;
5713
+ nodes: Readonly<Record<string, {
5714
+ object: "node";
5715
+ name?: string | undefined;
5716
+ parentId: string | null;
5717
+ visible: boolean;
5718
+ camera?: {
5719
+ position: [number, number, number];
5720
+ target: [number, number, number];
5721
+ mode: "orthographic" | "perspective";
5722
+ fov?: number | undefined;
5723
+ zoom?: number | undefined;
5724
+ } | undefined;
5725
+ metadata: Record<string, unknown>;
5726
+ provenance?: {
5727
+ refs: {
5728
+ ns?: string | undefined;
5729
+ id: string;
5730
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
5731
+ }[];
5732
+ lineage?: {
5733
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
5734
+ fromIds: string[];
5735
+ } | undefined;
5736
+ } | undefined;
5737
+ id: `beam_${string}`;
5738
+ start: [number, number];
5739
+ end: [number, number];
5740
+ width: number;
5741
+ depth: number;
5742
+ size?: string | undefined;
5743
+ plies: number;
5744
+ material: "glulam" | "lvl" | "pressure-treated" | "sawn" | "steel";
5745
+ placement: "dropped" | "flush";
5746
+ topElevation?: number | undefined;
5747
+ supportSlabId?: string | undefined;
5748
+ type: "beam";
6019
5749
  } | {
6020
5750
  object: "node";
6021
5751
  name?: string | undefined;
@@ -6040,29 +5770,179 @@ export declare function mezzanineFixture(height?: number): {
6040
5770
  fromIds: string[];
6041
5771
  } | undefined;
6042
5772
  } | undefined;
6043
- id: `duct-fitting_${string}`;
6044
- position: [number, number, number];
6045
- rotation: [number, number, number];
6046
- fittingType: "access-panel" | "coupling" | "cross" | "damper" | "elbow" | "end-cap" | "reducer" | "tee" | "transition";
5773
+ id: `measurement_${string}`;
5774
+ measurement: {
5775
+ kind: "volume";
5776
+ base: ({
5777
+ kind: "feature";
5778
+ reference: {
5779
+ nodeId: string;
5780
+ featureId: string;
5781
+ parameters?: Record<string, string | number | boolean> | undefined;
5782
+ };
5783
+ fallback: [number, number, number];
5784
+ } | [number, number, number])[];
5785
+ extrusion: [number, number, number];
5786
+ } | {
5787
+ kind: "distance";
5788
+ points: [{
5789
+ kind: "feature";
5790
+ reference: {
5791
+ nodeId: string;
5792
+ featureId: string;
5793
+ parameters?: Record<string, string | number | boolean> | undefined;
5794
+ };
5795
+ fallback: [number, number, number];
5796
+ } | [number, number, number], {
5797
+ kind: "feature";
5798
+ reference: {
5799
+ nodeId: string;
5800
+ featureId: string;
5801
+ parameters?: Record<string, string | number | boolean> | undefined;
5802
+ };
5803
+ fallback: [number, number, number];
5804
+ } | [number, number, number]];
5805
+ } | {
5806
+ kind: "angle";
5807
+ points: [{
5808
+ kind: "feature";
5809
+ reference: {
5810
+ nodeId: string;
5811
+ featureId: string;
5812
+ parameters?: Record<string, string | number | boolean> | undefined;
5813
+ };
5814
+ fallback: [number, number, number];
5815
+ } | [number, number, number], {
5816
+ kind: "feature";
5817
+ reference: {
5818
+ nodeId: string;
5819
+ featureId: string;
5820
+ parameters?: Record<string, string | number | boolean> | undefined;
5821
+ };
5822
+ fallback: [number, number, number];
5823
+ } | [number, number, number], {
5824
+ kind: "feature";
5825
+ reference: {
5826
+ nodeId: string;
5827
+ featureId: string;
5828
+ parameters?: Record<string, string | number | boolean> | undefined;
5829
+ };
5830
+ fallback: [number, number, number];
5831
+ } | [number, number, number]];
5832
+ } | {
5833
+ kind: "area";
5834
+ base: ({
5835
+ kind: "feature";
5836
+ reference: {
5837
+ nodeId: string;
5838
+ featureId: string;
5839
+ parameters?: Record<string, string | number | boolean> | undefined;
5840
+ };
5841
+ fallback: [number, number, number];
5842
+ } | [number, number, number])[];
5843
+ } | {
5844
+ kind: "perimeter";
5845
+ base: ({
5846
+ kind: "feature";
5847
+ reference: {
5848
+ nodeId: string;
5849
+ featureId: string;
5850
+ parameters?: Record<string, string | number | boolean> | undefined;
5851
+ };
5852
+ fallback: [number, number, number];
5853
+ } | [number, number, number])[];
5854
+ };
5855
+ type: "measurement";
5856
+ } | {
5857
+ object: "node";
5858
+ name?: string | undefined;
5859
+ parentId: string | null;
5860
+ visible: boolean;
5861
+ camera?: {
5862
+ position: [number, number, number];
5863
+ target: [number, number, number];
5864
+ mode: "orthographic" | "perspective";
5865
+ fov?: number | undefined;
5866
+ zoom?: number | undefined;
5867
+ } | undefined;
5868
+ metadata: Record<string, unknown>;
5869
+ provenance?: {
5870
+ refs: {
5871
+ ns?: string | undefined;
5872
+ id: string;
5873
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
5874
+ }[];
5875
+ lineage?: {
5876
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
5877
+ fromIds: string[];
5878
+ } | undefined;
5879
+ } | undefined;
5880
+ id: `duct-segment_${string}`;
5881
+ path: [number, number, number][];
5882
+ autoHangers?: boolean | undefined;
5883
+ hangerOverrides?: Record<string, {
5884
+ fraction?: number | undefined;
5885
+ skipped?: boolean | undefined;
5886
+ hostId?: string | undefined;
5887
+ }> | undefined;
5888
+ hangerStyle?: "double" | "single" | undefined;
5889
+ hangerSpacing?: number | undefined;
5890
+ hangerMaxReach?: number | undefined;
5891
+ wallAttachment?: {
5892
+ wallId: `wall_${string}`;
5893
+ side: "back" | "front";
5894
+ startUV: [number, number];
5895
+ endUV: [number, number];
5896
+ offset: number;
5897
+ } | undefined;
6047
5898
  shape: "oval" | "rect" | "round";
6048
- inletShape?: "oval" | "rect" | "round" | undefined;
6049
- outletShape?: "oval" | "rect" | "round" | undefined;
5899
+ diameter: number;
6050
5900
  width: number;
6051
5901
  height: number;
6052
- shape2: "oval" | "rect" | "round";
6053
- width2: number;
6054
- height2: number;
6055
- angle: number;
6056
- branchAngle: number;
6057
- diameter: number;
6058
- diameter2: number;
6059
- ductMaterial: "duct-board" | "flex" | "sheet-metal";
5902
+ roll: number;
5903
+ ductMaterial: "duct-board" | "flex" | "sheet-metal" | "spiral";
5904
+ seamDetail: boolean;
5905
+ insulated: boolean;
5906
+ insulationR: number;
6060
5907
  system: "return" | "supply";
6061
- damperAngle: number;
6062
- panelWidth: number;
6063
- panelHeight: number;
6064
5908
  slots?: Record<string, string> | undefined;
6065
- type: "duct-fitting";
5909
+ type: "duct-segment";
5910
+ } | {
5911
+ object: "node";
5912
+ name?: string | undefined;
5913
+ parentId: string | null;
5914
+ visible: boolean;
5915
+ camera?: {
5916
+ position: [number, number, number];
5917
+ target: [number, number, number];
5918
+ mode: "orthographic" | "perspective";
5919
+ fov?: number | undefined;
5920
+ zoom?: number | undefined;
5921
+ } | undefined;
5922
+ metadata: Record<string, unknown>;
5923
+ provenance?: {
5924
+ refs: {
5925
+ ns?: string | undefined;
5926
+ id: string;
5927
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
5928
+ }[];
5929
+ lineage?: {
5930
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
5931
+ fromIds: string[];
5932
+ } | undefined;
5933
+ } | undefined;
5934
+ id: `floor-opening_${string}`;
5935
+ polygon: [number, number][];
5936
+ hostZoneId?: string | undefined;
5937
+ legacyPlateCuts?: Record<string, [number, number][][]> | undefined;
5938
+ legacyCeilingCuts?: Record<string, [number, number][][]> | undefined;
5939
+ source: string;
5940
+ ownerId?: string | undefined;
5941
+ surfaceId?: string | undefined;
5942
+ drawnOn: "ceiling" | "floor";
5943
+ cutsPrimary: boolean;
5944
+ cutsAdjacent: boolean;
5945
+ type: "floor-opening";
6066
5946
  } | {
6067
5947
  object: "node";
6068
5948
  name?: string | undefined;
@@ -6087,23 +5967,12 @@ export declare function mezzanineFixture(height?: number): {
6087
5967
  fromIds: string[];
6088
5968
  } | undefined;
6089
5969
  } | undefined;
6090
- id: `hvac-equipment_${string}`;
6091
- position: [number, number, number];
6092
- rotation: number;
6093
- supportSlabId?: string | undefined;
6094
- equipmentType: "air-handler" | "condenser" | "furnace";
6095
- width: number;
6096
- depth: number;
6097
- height: number;
6098
- supplyShape: "oval" | "rect" | "round";
6099
- returnShape: "oval" | "rect" | "round";
6100
- supplyDiameter: number;
6101
- returnDiameter: number;
6102
- supplyWidth: number;
6103
- supplyHeight: number;
6104
- returnWidth: number;
6105
- returnHeight: number;
6106
- type: "hvac-equipment";
5970
+ id: `lineset_${string}`;
5971
+ path: [number, number, number][];
5972
+ suctionDiameter: number;
5973
+ liquidDiameter: number;
5974
+ insulated: boolean;
5975
+ type: "lineset";
6107
5976
  } | {
6108
5977
  object: "node";
6109
5978
  name?: string | undefined;
@@ -6128,17 +5997,13 @@ export declare function mezzanineFixture(height?: number): {
6128
5997
  fromIds: string[];
6129
5998
  } | undefined;
6130
5999
  } | undefined;
6131
- id: `pipe-fitting_${string}`;
6000
+ id: `pipe-trap_${string}`;
6132
6001
  position: [number, number, number];
6133
- rotation: [number, number, number];
6134
- fittingType: "cleanout" | "coupling" | "cross" | "elbow" | "end-cap" | "reducer" | "sanitary-tee" | "wye";
6135
- angle: number;
6002
+ rotation: number;
6136
6003
  diameter: number;
6137
- diameter2: number;
6138
- cleanoutStyle: "end" | "inline";
6139
6004
  pipeMaterial: "abs" | "cast-iron" | "pvc";
6140
- system: "vent" | "waste";
6141
- type: "pipe-fitting";
6005
+ armLengthM: number;
6006
+ type: "pipe-trap";
6142
6007
  } | {
6143
6008
  object: "node";
6144
6009
  name?: string | undefined;
@@ -6671,7 +6536,7 @@ export declare function mezzanineFixture(height?: number): {
6671
6536
  cavityInsulation?: string | undefined;
6672
6537
  } | undefined;
6673
6538
  slots?: Record<string, string> | undefined;
6674
- children: `rseg_${string}`[];
6539
+ children: string[];
6675
6540
  type: "roof";
6676
6541
  } | {
6677
6542
  object: "node";
@@ -7213,30 +7078,240 @@ export declare function mezzanineFixture(height?: number): {
7213
7078
  fromIds: string[];
7214
7079
  } | undefined;
7215
7080
  } | undefined;
7216
- id: `window_${string}`;
7217
- material?: {
7218
- id?: string | undefined;
7219
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
7220
- properties?: {
7221
- color: string;
7222
- roughness: number;
7223
- metalness: number;
7224
- opacity: number;
7225
- transparent: boolean;
7226
- side: "back" | "double" | "front";
7227
- } | undefined;
7228
- texture?: {
7229
- url: string;
7230
- repeat?: [number, number] | undefined;
7231
- scale?: number | undefined;
7232
- offset?: [number, number] | undefined;
7233
- normalMap?: string | undefined;
7234
- normalScale?: number | undefined;
7235
- bumpMap?: string | undefined;
7236
- bumpScale?: number | undefined;
7237
- } | undefined;
7238
- } | undefined;
7239
- slots?: Record<string, string> | undefined;
7081
+ id: `window_${string}`;
7082
+ material?: {
7083
+ id?: string | undefined;
7084
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
7085
+ properties?: {
7086
+ color: string;
7087
+ roughness: number;
7088
+ metalness: number;
7089
+ opacity: number;
7090
+ transparent: boolean;
7091
+ side: "back" | "double" | "front";
7092
+ } | undefined;
7093
+ texture?: {
7094
+ url: string;
7095
+ repeat?: [number, number] | undefined;
7096
+ scale?: number | undefined;
7097
+ offset?: [number, number] | undefined;
7098
+ normalMap?: string | undefined;
7099
+ normalScale?: number | undefined;
7100
+ bumpMap?: string | undefined;
7101
+ bumpScale?: number | undefined;
7102
+ } | undefined;
7103
+ } | undefined;
7104
+ slots?: Record<string, string> | undefined;
7105
+ source?: {
7106
+ kind: "script";
7107
+ meta?: {
7108
+ description?: string | undefined;
7109
+ category?: string | undefined;
7110
+ tags?: string[] | undefined;
7111
+ parent?: string | undefined;
7112
+ } | undefined;
7113
+ language: "bpy" | "three";
7114
+ script: string;
7115
+ params: Record<string, string | number | boolean>;
7116
+ artifact: string;
7117
+ manifest: {
7118
+ bounds: {
7119
+ min: [number, number, number];
7120
+ max: [number, number, number];
7121
+ };
7122
+ params: {
7123
+ id: string;
7124
+ label?: string | undefined;
7125
+ kind: "boolean" | "number" | "string";
7126
+ default: string | number | boolean;
7127
+ min?: number | undefined;
7128
+ max?: number | undefined;
7129
+ step?: number | undefined;
7130
+ unit?: string | undefined;
7131
+ options?: string[] | undefined;
7132
+ }[];
7133
+ parts: {
7134
+ id: string;
7135
+ label?: string | undefined;
7136
+ type?: string | undefined;
7137
+ bounds?: {
7138
+ min: [number, number, number];
7139
+ max: [number, number, number];
7140
+ } | undefined;
7141
+ }[];
7142
+ surfaces: {
7143
+ part?: string | undefined;
7144
+ y: number;
7145
+ polygon: [number, number][];
7146
+ }[];
7147
+ slots: {
7148
+ id: string;
7149
+ label?: string | undefined;
7150
+ color?: string | undefined;
7151
+ roughness?: number | undefined;
7152
+ metalness?: number | undefined;
7153
+ transparent?: boolean | undefined;
7154
+ emissive?: boolean | undefined;
7155
+ }[];
7156
+ anchors: {
7157
+ id: string;
7158
+ position: [number, number, number];
7159
+ normal?: [number, number, number] | undefined;
7160
+ }[];
7161
+ lights: {
7162
+ id: string;
7163
+ position: [number, number, number];
7164
+ color: string;
7165
+ intensity: number;
7166
+ distance?: number | undefined;
7167
+ spot?: {
7168
+ direction: [number, number, number];
7169
+ angle: number;
7170
+ softness: number;
7171
+ } | undefined;
7172
+ shadows?: boolean | undefined;
7173
+ glow?: {
7174
+ size: number;
7175
+ strength: number;
7176
+ } | undefined;
7177
+ }[];
7178
+ undersides: {
7179
+ part?: string | undefined;
7180
+ polygon: [number, number][];
7181
+ plane: [number, number, number, number];
7182
+ }[];
7183
+ animations: {
7184
+ name: string;
7185
+ duration: number;
7186
+ }[];
7187
+ cutters?: {
7188
+ host: "ceiling" | "mounted" | "slab" | "wall";
7189
+ polygon: number[][];
7190
+ minY: number;
7191
+ maxY: number;
7192
+ }[] | undefined;
7193
+ cutout: boolean;
7194
+ collider: boolean;
7195
+ shape?: {
7196
+ tolerance: number;
7197
+ bands: {
7198
+ y0: number;
7199
+ y1: number;
7200
+ polygons: {
7201
+ outer: [number, number][];
7202
+ holes?: [number, number][][] | undefined;
7203
+ }[];
7204
+ }[];
7205
+ } | undefined;
7206
+ triangles: number;
7207
+ coverage?: number | undefined;
7208
+ uncovered?: {
7209
+ min: [number, number];
7210
+ max: [number, number];
7211
+ }[] | undefined;
7212
+ };
7213
+ images?: {
7214
+ artifact: string;
7215
+ thumbnail: string;
7216
+ floorPlan: string;
7217
+ } | undefined;
7218
+ } | undefined;
7219
+ position: [number, number, number];
7220
+ rotation: [number, number, number];
7221
+ side?: "back" | "front" | undefined;
7222
+ verticalAnchor?: "floor" | "wall" | undefined;
7223
+ floorThresholdVersion: 0 | 1;
7224
+ wallId?: string | undefined;
7225
+ dormerId?: string | undefined;
7226
+ dormerFace?: "back" | "front" | "left" | "right" | undefined;
7227
+ roofSegmentId?: string | undefined;
7228
+ roofFace?: "back" | "front" | "left" | "right" | undefined;
7229
+ width: number;
7230
+ height: number;
7231
+ mark?: string | undefined;
7232
+ constructionType: "framed" | "masonry";
7233
+ dimensionReference: "finish-opening" | "masonry-opening" | "nominal" | "rough-opening";
7234
+ roughOpeningWidth?: number | undefined;
7235
+ roughOpeningHeight?: number | undefined;
7236
+ masonryOpeningWidth?: number | undefined;
7237
+ masonryOpeningHeight?: number | undefined;
7238
+ finishOpeningWidth?: number | undefined;
7239
+ finishOpeningHeight?: number | undefined;
7240
+ openingKind: "opening" | "window";
7241
+ windowType: "awning" | "bay" | "bow" | "casement" | "double-hung" | "fixed" | "hopper" | "louvered" | "single-hung" | "sliding" | "tilt-turn";
7242
+ operationState: number;
7243
+ openingDirection?: "inward" | "outward" | undefined;
7244
+ tiltTurnMode?: "tilt" | "turn" | undefined;
7245
+ awningDirection: "down" | "up";
7246
+ casementStyle: "french" | "single";
7247
+ hingesSide: "left" | "right";
7248
+ openingShape: "arch" | "rectangle" | "rounded";
7249
+ openingRadiusMode: "all" | "individual";
7250
+ openingCornerRadii: [number, number, number, number];
7251
+ cornerRadius: number;
7252
+ archHeight: number;
7253
+ openingRevealRadius: number;
7254
+ frameThickness: number;
7255
+ frameDepth?: number | undefined;
7256
+ windowHandle?: boolean | undefined;
7257
+ sashGrid?: boolean | undefined;
7258
+ columnRatios: number[];
7259
+ rowRatios: number[];
7260
+ columnDividerThickness: number;
7261
+ rowDividerThickness: number;
7262
+ corner?: {
7263
+ end: "end" | "start";
7264
+ partnerId: string;
7265
+ post: "none" | "post";
7266
+ } | undefined;
7267
+ sill: boolean;
7268
+ sillDepth: number;
7269
+ sillThickness: number;
7270
+ sillOverhang?: number | undefined;
7271
+ sillInterior?: boolean | undefined;
7272
+ sillInteriorDepth?: number | undefined;
7273
+ sillInteriorThickness?: number | undefined;
7274
+ sillInteriorOverhang?: number | undefined;
7275
+ shutters?: "board-batten" | "louvered" | "none" | "panel" | undefined;
7276
+ shutterWidth?: number | undefined;
7277
+ shutterOpen?: number | undefined;
7278
+ shutterSides?: "both" | "left" | "right" | undefined;
7279
+ rollerShutter?: "box" | "concealed" | "none" | undefined;
7280
+ rollerShutterBoxHeight?: number | undefined;
7281
+ rollerShutterOpen?: number | undefined;
7282
+ casingFaceA?: boolean | undefined;
7283
+ casingFaceB?: boolean | undefined;
7284
+ casingWidth?: number | undefined;
7285
+ type: "window";
7286
+ } | {
7287
+ object: "node";
7288
+ name?: string | undefined;
7289
+ parentId: string | null;
7290
+ visible: boolean;
7291
+ camera?: {
7292
+ position: [number, number, number];
7293
+ target: [number, number, number];
7294
+ mode: "orthographic" | "perspective";
7295
+ fov?: number | undefined;
7296
+ zoom?: number | undefined;
7297
+ } | undefined;
7298
+ metadata: Record<string, unknown>;
7299
+ provenance?: {
7300
+ refs: {
7301
+ ns?: string | undefined;
7302
+ id: string;
7303
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
7304
+ }[];
7305
+ lineage?: {
7306
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
7307
+ fromIds: string[];
7308
+ } | undefined;
7309
+ } | undefined;
7310
+ id: `column_${string}`;
7311
+ children: string[];
7312
+ position: [number, number, number];
7313
+ rotation: number;
7314
+ supportSlabId?: string | undefined;
7240
7315
  source?: {
7241
7316
  kind: "script";
7242
7317
  meta?: {
@@ -7351,73 +7426,104 @@ export declare function mezzanineFixture(height?: number): {
7351
7426
  floorPlan: string;
7352
7427
  } | undefined;
7353
7428
  } | undefined;
7354
- position: [number, number, number];
7355
- rotation: [number, number, number];
7356
- side?: "back" | "front" | undefined;
7357
- verticalAnchor?: "floor" | "wall" | undefined;
7358
- floorThresholdVersion: 0 | 1;
7359
- wallId?: string | undefined;
7360
- dormerId?: string | undefined;
7361
- dormerFace?: "back" | "front" | "left" | "right" | undefined;
7362
- roofSegmentId?: string | undefined;
7363
- roofFace?: "back" | "front" | "left" | "right" | undefined;
7364
- width: number;
7429
+ style: "cluster" | "dravidian-carved" | "faceted" | "fluted" | "lathe-turned" | "plain";
7430
+ crossSection: "octagonal" | "rectangular" | "round" | "sixteen-sided" | "square";
7365
7431
  height: number;
7366
- mark?: string | undefined;
7367
- constructionType: "framed" | "masonry";
7368
- dimensionReference: "finish-opening" | "masonry-opening" | "nominal" | "rough-opening";
7369
- roughOpeningWidth?: number | undefined;
7370
- roughOpeningHeight?: number | undefined;
7371
- masonryOpeningWidth?: number | undefined;
7372
- masonryOpeningHeight?: number | undefined;
7373
- finishOpeningWidth?: number | undefined;
7374
- finishOpeningHeight?: number | undefined;
7375
- openingKind: "opening" | "window";
7376
- windowType: "awning" | "bay" | "bow" | "casement" | "double-hung" | "fixed" | "hopper" | "louvered" | "single-hung" | "sliding" | "tilt-turn";
7377
- operationState: number;
7378
- openingDirection?: "inward" | "outward" | undefined;
7379
- tiltTurnMode?: "tilt" | "turn" | undefined;
7380
- awningDirection: "down" | "up";
7381
- casementStyle: "french" | "single";
7382
- hingesSide: "left" | "right";
7383
- openingShape: "arch" | "rectangle" | "rounded";
7384
- openingRadiusMode: "all" | "individual";
7385
- openingCornerRadii: [number, number, number, number];
7386
- cornerRadius: number;
7387
- archHeight: number;
7388
- openingRevealRadius: number;
7389
- frameThickness: number;
7390
- frameDepth?: number | undefined;
7391
- windowHandle?: boolean | undefined;
7392
- sashGrid?: boolean | undefined;
7393
- columnRatios: number[];
7394
- rowRatios: number[];
7395
- columnDividerThickness: number;
7396
- rowDividerThickness: number;
7397
- corner?: {
7398
- end: "end" | "start";
7399
- partnerId: string;
7400
- post: "none" | "post";
7432
+ radius: number;
7433
+ width: number;
7434
+ depth: number;
7435
+ edgeSoftness: number;
7436
+ baseHeight: number;
7437
+ capitalHeight: number;
7438
+ shaftProfile: "baluster" | "bulged" | "hourglass" | "straight" | "tapered";
7439
+ shaftTaper: number;
7440
+ shaftBulge: number;
7441
+ shaftStartScale: number;
7442
+ shaftEndScale: number;
7443
+ shaftSegmentCount: number;
7444
+ shaftTwistStep: number;
7445
+ shaftCornerRadius: number;
7446
+ shaftDetail: "fluted" | "lathe-turned" | "none" | "panelled" | "spiral";
7447
+ baseStyle: "lotus" | "none" | "panelled-pedestal" | "ribbed-lotus" | "round-rings" | "simple-square" | "square-plinth" | "stepped-square";
7448
+ baseWidthScale: number;
7449
+ baseDepthScale: number;
7450
+ baseTierCount: number;
7451
+ baseStepSpread: number;
7452
+ basePlinthHeightRatio: number;
7453
+ baseRoundBandScale: number;
7454
+ baseNeckScale: number;
7455
+ baseRoundBandCount: number;
7456
+ baseRibCount: number;
7457
+ baseCarvingLevel: number;
7458
+ basePanelInset: number;
7459
+ capitalStyle: "corinthian-leaf" | "doric" | "ionic-volute" | "leaf-carved" | "none" | "rounded" | "simple" | "simple-slab" | "south-indian-bracket" | "stepped" | "volute" | "wood-bracket";
7460
+ capitalWidthScale: number;
7461
+ capitalDepthScale: number;
7462
+ capitalTierCount: number;
7463
+ capitalStepSpread: number;
7464
+ capitalBandCount: number;
7465
+ voluteSize: number;
7466
+ voluteCount: number;
7467
+ leafCount: number;
7468
+ leafRows: number;
7469
+ bracketDepth: number;
7470
+ bracketTierCount: number;
7471
+ pendantCount: number;
7472
+ capitalCarvingLevel: number;
7473
+ ringCount: number;
7474
+ ringPlacement: "bottom" | "ends" | "even" | "top";
7475
+ ringThickness: number;
7476
+ ringSpread: number;
7477
+ fluteCount: number;
7478
+ fluteDepth: number;
7479
+ fluteWidth: number;
7480
+ spiralTwist: number;
7481
+ spiralRibCount: number;
7482
+ panelCount: number;
7483
+ panelInsetDepth: number;
7484
+ panelShape: "arched" | "diamond" | "rectangle";
7485
+ latheRingCount: number;
7486
+ latheRingSpacing: "bottom" | "ends" | "even" | "top";
7487
+ carvingLevel: number;
7488
+ carvingPlacement: "all" | "base" | "capital" | "shaft";
7489
+ lowerBandEnabled: boolean;
7490
+ lowerBandHeight: number;
7491
+ lowerBandCarvingLevel: number;
7492
+ dentilCount: number;
7493
+ beadCount: number;
7494
+ supportStyle: "a-frame" | "box-frame" | "k-brace" | "portal-frame" | "single-strut" | "trestle" | "tripod" | "v-frame" | "vertical" | "x-brace" | "y-frame";
7495
+ braceWidth: number;
7496
+ braceDepth: number;
7497
+ braceBottomSpread: number;
7498
+ braceTopSpread: number;
7499
+ bracePlateEnabled: boolean;
7500
+ role?: "ornament" | "post" | undefined;
7501
+ postBase?: "none" | "pier" | "post-base" | undefined;
7502
+ material?: {
7503
+ id?: string | undefined;
7504
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
7505
+ properties?: {
7506
+ color: string;
7507
+ roughness: number;
7508
+ metalness: number;
7509
+ opacity: number;
7510
+ transparent: boolean;
7511
+ side: "back" | "double" | "front";
7512
+ } | undefined;
7513
+ texture?: {
7514
+ url: string;
7515
+ repeat?: [number, number] | undefined;
7516
+ scale?: number | undefined;
7517
+ offset?: [number, number] | undefined;
7518
+ normalMap?: string | undefined;
7519
+ normalScale?: number | undefined;
7520
+ bumpMap?: string | undefined;
7521
+ bumpScale?: number | undefined;
7522
+ } | undefined;
7401
7523
  } | undefined;
7402
- sill: boolean;
7403
- sillDepth: number;
7404
- sillThickness: number;
7405
- sillOverhang?: number | undefined;
7406
- sillInterior?: boolean | undefined;
7407
- sillInteriorDepth?: number | undefined;
7408
- sillInteriorThickness?: number | undefined;
7409
- sillInteriorOverhang?: number | undefined;
7410
- shutters?: "board-batten" | "louvered" | "none" | "panel" | undefined;
7411
- shutterWidth?: number | undefined;
7412
- shutterOpen?: number | undefined;
7413
- shutterSides?: "both" | "left" | "right" | undefined;
7414
- rollerShutter?: "box" | "concealed" | "none" | undefined;
7415
- rollerShutterBoxHeight?: number | undefined;
7416
- rollerShutterOpen?: number | undefined;
7417
- casingFaceA?: boolean | undefined;
7418
- casingFaceB?: boolean | undefined;
7419
- casingWidth?: number | undefined;
7420
- type: "window";
7524
+ materialPreset?: string | undefined;
7525
+ slots?: Record<string, string> | undefined;
7526
+ type: "column";
7421
7527
  } | {
7422
7528
  object: "node";
7423
7529
  name?: string | undefined;
@@ -8981,53 +9087,25 @@ export declare function mezzanineFixture(height?: number): {
8981
9087
  backing?: {
8982
9088
  id: string;
8983
9089
  role: "air" | "covering" | "deck" | "fill" | "finish" | "furring" | "glazing" | "insulation" | "lining" | "membrane" | "sheathing" | "shell" | "structure" | "substrate" | "underlay";
8984
- thickness: number;
8985
- core?: true | undefined;
8986
- spacing?: number | undefined;
8987
- material?: string | undefined;
8988
- slot?: string | undefined;
8989
- returns?: boolean | undefined;
8990
- display?: "construction" | "finished" | undefined;
8991
- inset?: number | undefined;
8992
- bottom?: number | undefined;
8993
- lift?: number | undefined;
8994
- src?: string | undefined;
8995
- }[] | undefined;
8996
- face?: "exterior" | "front" | undefined;
8997
- presetId?: string | undefined;
8998
- cavityInsulation?: string | undefined;
8999
- };
9000
- }[] | undefined;
9001
- children: string[];
9002
- type: "site";
9003
- } | {
9004
- object: "node";
9005
- name?: string | undefined;
9006
- parentId: string | null;
9007
- visible: boolean;
9008
- camera?: {
9009
- position: [number, number, number];
9010
- target: [number, number, number];
9011
- mode: "orthographic" | "perspective";
9012
- fov?: number | undefined;
9013
- zoom?: number | undefined;
9014
- } | undefined;
9015
- metadata: Record<string, unknown>;
9016
- provenance?: {
9017
- refs: {
9018
- ns?: string | undefined;
9019
- id: string;
9020
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
9021
- }[];
9022
- lineage?: {
9023
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
9024
- fromIds: string[];
9025
- } | undefined;
9026
- } | undefined;
9027
- id: `separator_${string}`;
9028
- start: [number, number];
9029
- end: [number, number];
9030
- type: "separator";
9090
+ thickness: number;
9091
+ core?: true | undefined;
9092
+ spacing?: number | undefined;
9093
+ material?: string | undefined;
9094
+ slot?: string | undefined;
9095
+ returns?: boolean | undefined;
9096
+ display?: "construction" | "finished" | undefined;
9097
+ inset?: number | undefined;
9098
+ bottom?: number | undefined;
9099
+ lift?: number | undefined;
9100
+ src?: string | undefined;
9101
+ }[] | undefined;
9102
+ face?: "exterior" | "front" | undefined;
9103
+ presetId?: string | undefined;
9104
+ cavityInsulation?: string | undefined;
9105
+ };
9106
+ }[] | undefined;
9107
+ children: string[];
9108
+ type: "site";
9031
9109
  } | {
9032
9110
  object: "node";
9033
9111
  name?: string | undefined;
@@ -9052,18 +9130,10 @@ export declare function mezzanineFixture(height?: number): {
9052
9130
  fromIds: string[];
9053
9131
  } | undefined;
9054
9132
  } | undefined;
9055
- id: `floor-opening_${string}`;
9056
- polygon: [number, number][];
9057
- hostZoneId?: string | undefined;
9058
- legacyPlateCuts?: Record<string, [number, number][][]> | undefined;
9059
- legacyCeilingCuts?: Record<string, [number, number][][]> | undefined;
9060
- source: string;
9061
- ownerId?: string | undefined;
9062
- surfaceId?: string | undefined;
9063
- drawnOn: "ceiling" | "floor";
9064
- cutsPrimary: boolean;
9065
- cutsAdjacent: boolean;
9066
- type: "floor-opening";
9133
+ id: `separator_${string}`;
9134
+ start: [number, number];
9135
+ end: [number, number];
9136
+ type: "separator";
9067
9137
  } | {
9068
9138
  object: "node";
9069
9139
  name?: string | undefined;
@@ -9158,42 +9228,6 @@ export declare function mezzanineFixture(height?: number): {
9158
9228
  color: string;
9159
9229
  style: "guard" | "horizontal" | "picket" | "privacy" | "rail" | "slat";
9160
9230
  type: "fence";
9161
- } | {
9162
- object: "node";
9163
- name?: string | undefined;
9164
- parentId: string | null;
9165
- visible: boolean;
9166
- camera?: {
9167
- position: [number, number, number];
9168
- target: [number, number, number];
9169
- mode: "orthographic" | "perspective";
9170
- fov?: number | undefined;
9171
- zoom?: number | undefined;
9172
- } | undefined;
9173
- metadata: Record<string, unknown>;
9174
- provenance?: {
9175
- refs: {
9176
- ns?: string | undefined;
9177
- id: string;
9178
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
9179
- }[];
9180
- lineage?: {
9181
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
9182
- fromIds: string[];
9183
- } | undefined;
9184
- } | undefined;
9185
- id: `beam_${string}`;
9186
- start: [number, number];
9187
- end: [number, number];
9188
- width: number;
9189
- depth: number;
9190
- size?: string | undefined;
9191
- plies: number;
9192
- material: "glulam" | "lvl" | "pressure-treated" | "sawn" | "steel";
9193
- placement: "dropped" | "flush";
9194
- topElevation?: number | undefined;
9195
- supportSlabId?: string | undefined;
9196
- type: "beam";
9197
9231
  } | {
9198
9232
  object: "node";
9199
9233
  name?: string | undefined;
@@ -10220,113 +10254,6 @@ export declare function mezzanineFixture(height?: number): {
10220
10254
  label: string;
10221
10255
  } | null;
10222
10256
  type: "guide";
10223
- } | {
10224
- object: "node";
10225
- name?: string | undefined;
10226
- parentId: string | null;
10227
- visible: boolean;
10228
- camera?: {
10229
- position: [number, number, number];
10230
- target: [number, number, number];
10231
- mode: "orthographic" | "perspective";
10232
- fov?: number | undefined;
10233
- zoom?: number | undefined;
10234
- } | undefined;
10235
- metadata: Record<string, unknown>;
10236
- provenance?: {
10237
- refs: {
10238
- ns?: string | undefined;
10239
- id: string;
10240
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
10241
- }[];
10242
- lineage?: {
10243
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
10244
- fromIds: string[];
10245
- } | undefined;
10246
- } | undefined;
10247
- id: `measurement_${string}`;
10248
- measurement: {
10249
- kind: "distance";
10250
- points: [{
10251
- kind: "feature";
10252
- reference: {
10253
- nodeId: string;
10254
- featureId: string;
10255
- parameters?: Record<string, string | number | boolean> | undefined;
10256
- };
10257
- fallback: [number, number, number];
10258
- } | [number, number, number], {
10259
- kind: "feature";
10260
- reference: {
10261
- nodeId: string;
10262
- featureId: string;
10263
- parameters?: Record<string, string | number | boolean> | undefined;
10264
- };
10265
- fallback: [number, number, number];
10266
- } | [number, number, number]];
10267
- } | {
10268
- kind: "angle";
10269
- points: [{
10270
- kind: "feature";
10271
- reference: {
10272
- nodeId: string;
10273
- featureId: string;
10274
- parameters?: Record<string, string | number | boolean> | undefined;
10275
- };
10276
- fallback: [number, number, number];
10277
- } | [number, number, number], {
10278
- kind: "feature";
10279
- reference: {
10280
- nodeId: string;
10281
- featureId: string;
10282
- parameters?: Record<string, string | number | boolean> | undefined;
10283
- };
10284
- fallback: [number, number, number];
10285
- } | [number, number, number], {
10286
- kind: "feature";
10287
- reference: {
10288
- nodeId: string;
10289
- featureId: string;
10290
- parameters?: Record<string, string | number | boolean> | undefined;
10291
- };
10292
- fallback: [number, number, number];
10293
- } | [number, number, number]];
10294
- } | {
10295
- kind: "area";
10296
- base: ({
10297
- kind: "feature";
10298
- reference: {
10299
- nodeId: string;
10300
- featureId: string;
10301
- parameters?: Record<string, string | number | boolean> | undefined;
10302
- };
10303
- fallback: [number, number, number];
10304
- } | [number, number, number])[];
10305
- } | {
10306
- kind: "perimeter";
10307
- base: ({
10308
- kind: "feature";
10309
- reference: {
10310
- nodeId: string;
10311
- featureId: string;
10312
- parameters?: Record<string, string | number | boolean> | undefined;
10313
- };
10314
- fallback: [number, number, number];
10315
- } | [number, number, number])[];
10316
- } | {
10317
- kind: "volume";
10318
- base: ({
10319
- kind: "feature";
10320
- reference: {
10321
- nodeId: string;
10322
- featureId: string;
10323
- parameters?: Record<string, string | number | boolean> | undefined;
10324
- };
10325
- fallback: [number, number, number];
10326
- } | [number, number, number])[];
10327
- extrusion: [number, number, number];
10328
- };
10329
- type: "measurement";
10330
10257
  } | {
10331
10258
  object: "node";
10332
10259
  name?: string | undefined;
@@ -10380,36 +10307,29 @@ export declare function mezzanineFixture(height?: number): {
10380
10307
  fromIds: string[];
10381
10308
  } | undefined;
10382
10309
  } | undefined;
10383
- id: `duct-segment_${string}`;
10384
- path: [number, number, number][];
10385
- autoHangers?: boolean | undefined;
10386
- hangerOverrides?: Record<string, {
10387
- fraction?: number | undefined;
10388
- skipped?: boolean | undefined;
10389
- hostId?: string | undefined;
10390
- }> | undefined;
10391
- hangerStyle?: "double" | "single" | undefined;
10392
- hangerSpacing?: number | undefined;
10393
- hangerMaxReach?: number | undefined;
10394
- wallAttachment?: {
10395
- wallId: `wall_${string}`;
10396
- side: "back" | "front";
10397
- startUV: [number, number];
10398
- endUV: [number, number];
10399
- offset: number;
10400
- } | undefined;
10310
+ id: `duct-fitting_${string}`;
10311
+ position: [number, number, number];
10312
+ rotation: [number, number, number];
10313
+ fittingType: "access-panel" | "coupling" | "cross" | "damper" | "elbow" | "end-cap" | "reducer" | "tee" | "transition";
10401
10314
  shape: "oval" | "rect" | "round";
10402
- diameter: number;
10315
+ inletShape?: "oval" | "rect" | "round" | undefined;
10316
+ outletShape?: "oval" | "rect" | "round" | undefined;
10403
10317
  width: number;
10404
10318
  height: number;
10405
- roll: number;
10406
- ductMaterial: "duct-board" | "flex" | "sheet-metal" | "spiral";
10407
- seamDetail: boolean;
10408
- insulated: boolean;
10409
- insulationR: number;
10319
+ shape2: "oval" | "rect" | "round";
10320
+ width2: number;
10321
+ height2: number;
10322
+ angle: number;
10323
+ branchAngle: number;
10324
+ diameter: number;
10325
+ diameter2: number;
10326
+ ductMaterial: "duct-board" | "flex" | "sheet-metal";
10410
10327
  system: "return" | "supply";
10328
+ damperAngle: number;
10329
+ panelWidth: number;
10330
+ panelHeight: number;
10411
10331
  slots?: Record<string, string> | undefined;
10412
- type: "duct-segment";
10332
+ type: "duct-fitting";
10413
10333
  } | {
10414
10334
  object: "node";
10415
10335
  name?: string | undefined;
@@ -10471,12 +10391,23 @@ export declare function mezzanineFixture(height?: number): {
10471
10391
  fromIds: string[];
10472
10392
  } | undefined;
10473
10393
  } | undefined;
10474
- id: `lineset_${string}`;
10475
- path: [number, number, number][];
10476
- suctionDiameter: number;
10477
- liquidDiameter: number;
10478
- insulated: boolean;
10479
- type: "lineset";
10394
+ id: `hvac-equipment_${string}`;
10395
+ position: [number, number, number];
10396
+ rotation: number;
10397
+ supportSlabId?: string | undefined;
10398
+ equipmentType: "air-handler" | "condenser" | "furnace";
10399
+ width: number;
10400
+ depth: number;
10401
+ height: number;
10402
+ supplyShape: "oval" | "rect" | "round";
10403
+ returnShape: "oval" | "rect" | "round";
10404
+ supplyDiameter: number;
10405
+ returnDiameter: number;
10406
+ supplyWidth: number;
10407
+ supplyHeight: number;
10408
+ returnWidth: number;
10409
+ returnHeight: number;
10410
+ type: "hvac-equipment";
10480
10411
  } | {
10481
10412
  object: "node";
10482
10413
  name?: string | undefined;
@@ -10575,13 +10506,17 @@ export declare function mezzanineFixture(height?: number): {
10575
10506
  fromIds: string[];
10576
10507
  } | undefined;
10577
10508
  } | undefined;
10578
- id: `pipe-trap_${string}`;
10509
+ id: `pipe-fitting_${string}`;
10579
10510
  position: [number, number, number];
10580
- rotation: number;
10511
+ rotation: [number, number, number];
10512
+ fittingType: "cleanout" | "coupling" | "cross" | "elbow" | "end-cap" | "reducer" | "sanitary-tee" | "wye";
10513
+ angle: number;
10581
10514
  diameter: number;
10515
+ diameter2: number;
10516
+ cleanoutStyle: "end" | "inline";
10582
10517
  pipeMaterial: "abs" | "cast-iron" | "pvc";
10583
- armLengthM: number;
10584
- type: "pipe-trap";
10518
+ system: "vent" | "waste";
10519
+ type: "pipe-fitting";
10585
10520
  } | {
10586
10521
  object: "node";
10587
10522
  name?: string | undefined;
@@ -10820,6 +10755,71 @@ export declare function mezzanineFixture(height?: number): {
10820
10755
  showPosts: boolean;
10821
10756
  id: `fence-opening_${string}`;
10822
10757
  type: "fence-opening";
10758
+ } | {
10759
+ object: "node";
10760
+ name?: string | undefined;
10761
+ parentId: string | null;
10762
+ visible: boolean;
10763
+ camera?: {
10764
+ position: [number, number, number];
10765
+ target: [number, number, number];
10766
+ mode: "orthographic" | "perspective";
10767
+ fov?: number | undefined;
10768
+ zoom?: number | undefined;
10769
+ } | undefined;
10770
+ metadata: Record<string, unknown>;
10771
+ provenance?: {
10772
+ refs: {
10773
+ ns?: string | undefined;
10774
+ id: string;
10775
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
10776
+ }[];
10777
+ lineage?: {
10778
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
10779
+ fromIds: string[];
10780
+ } | undefined;
10781
+ } | undefined;
10782
+ id: `bvent_${string}`;
10783
+ material?: {
10784
+ id?: string | undefined;
10785
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
10786
+ properties?: {
10787
+ color: string;
10788
+ roughness: number;
10789
+ metalness: number;
10790
+ opacity: number;
10791
+ transparent: boolean;
10792
+ side: "back" | "double" | "front";
10793
+ } | undefined;
10794
+ texture?: {
10795
+ url: string;
10796
+ repeat?: [number, number] | undefined;
10797
+ scale?: number | undefined;
10798
+ offset?: [number, number] | undefined;
10799
+ normalMap?: string | undefined;
10800
+ normalScale?: number | undefined;
10801
+ bumpMap?: string | undefined;
10802
+ bumpScale?: number | undefined;
10803
+ } | undefined;
10804
+ } | undefined;
10805
+ slots?: Record<string, string> | undefined;
10806
+ materialPreset: string;
10807
+ roofSegmentId?: string | undefined;
10808
+ position: [number, number, number];
10809
+ rotation: number;
10810
+ width: number;
10811
+ depth: number;
10812
+ height: number;
10813
+ hoodOverhang: number;
10814
+ topTaper: number;
10815
+ capHeight: number;
10816
+ capGap: number;
10817
+ domeCurvature: number;
10818
+ baseInset: number;
10819
+ baseHeight: number;
10820
+ cornerBevel: number;
10821
+ style: "box" | "cap" | "dome";
10822
+ type: "box-vent";
10823
10823
  } | {
10824
10824
  object: "node";
10825
10825
  name?: string | undefined;
@@ -12621,288 +12621,125 @@ export declare function mezzanineFixture(height?: number): {
12621
12621
  fromIds: string[];
12622
12622
  } | undefined;
12623
12623
  } | undefined;
12624
- id: `bvent_${string}`;
12625
- material?: {
12626
- id?: string | undefined;
12627
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
12628
- properties?: {
12629
- color: string;
12630
- roughness: number;
12631
- metalness: number;
12632
- opacity: number;
12633
- transparent: boolean;
12634
- side: "back" | "double" | "front";
12635
- } | undefined;
12636
- texture?: {
12637
- url: string;
12638
- repeat?: [number, number] | undefined;
12639
- scale?: number | undefined;
12640
- offset?: [number, number] | undefined;
12641
- normalMap?: string | undefined;
12642
- normalScale?: number | undefined;
12643
- bumpMap?: string | undefined;
12644
- bumpScale?: number | undefined;
12645
- } | undefined;
12646
- } | undefined;
12647
- slots?: Record<string, string> | undefined;
12648
- materialPreset: string;
12649
- roofSegmentId?: string | undefined;
12650
- position: [number, number, number];
12651
- rotation: number;
12652
- width: number;
12653
- depth: number;
12654
- height: number;
12655
- hoodOverhang: number;
12656
- topTaper: number;
12657
- capHeight: number;
12658
- capGap: number;
12659
- domeCurvature: number;
12660
- baseInset: number;
12661
- baseHeight: number;
12662
- cornerBevel: number;
12663
- style: "box" | "cap" | "dome";
12664
- type: "box-vent";
12665
- } | {
12666
- object: "node";
12667
- name?: string | undefined;
12668
- parentId: string | null;
12669
- visible: boolean;
12670
- camera?: {
12671
- position: [number, number, number];
12672
- target: [number, number, number];
12673
- mode: "orthographic" | "perspective";
12674
- fov?: number | undefined;
12675
- zoom?: number | undefined;
12676
- } | undefined;
12677
- metadata: Record<string, unknown>;
12678
- provenance?: {
12679
- refs: {
12680
- ns?: string | undefined;
12681
- id: string;
12682
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
12683
- }[];
12684
- lineage?: {
12685
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
12686
- fromIds: string[];
12687
- } | undefined;
12688
- } | undefined;
12689
- id: `column_${string}`;
12690
- children: string[];
12691
- position: [number, number, number];
12692
- rotation: number;
12693
- supportSlabId?: string | undefined;
12694
- source?: {
12695
- kind: "script";
12696
- meta?: {
12697
- description?: string | undefined;
12698
- category?: string | undefined;
12699
- tags?: string[] | undefined;
12700
- parent?: string | undefined;
12701
- } | undefined;
12702
- language: "bpy" | "three";
12703
- script: string;
12704
- params: Record<string, string | number | boolean>;
12705
- artifact: string;
12706
- manifest: {
12707
- bounds: {
12708
- min: [number, number, number];
12709
- max: [number, number, number];
12710
- };
12711
- params: {
12712
- id: string;
12713
- label?: string | undefined;
12714
- kind: "boolean" | "number" | "string";
12715
- default: string | number | boolean;
12716
- min?: number | undefined;
12717
- max?: number | undefined;
12718
- step?: number | undefined;
12719
- unit?: string | undefined;
12720
- options?: string[] | undefined;
12721
- }[];
12722
- parts: {
12723
- id: string;
12724
- label?: string | undefined;
12725
- type?: string | undefined;
12726
- bounds?: {
12727
- min: [number, number, number];
12728
- max: [number, number, number];
12729
- } | undefined;
12730
- }[];
12731
- surfaces: {
12732
- part?: string | undefined;
12733
- y: number;
12734
- polygon: [number, number][];
12735
- }[];
12736
- slots: {
12737
- id: string;
12738
- label?: string | undefined;
12739
- color?: string | undefined;
12740
- roughness?: number | undefined;
12741
- metalness?: number | undefined;
12742
- transparent?: boolean | undefined;
12743
- emissive?: boolean | undefined;
12744
- }[];
12745
- anchors: {
12746
- id: string;
12747
- position: [number, number, number];
12748
- normal?: [number, number, number] | undefined;
12749
- }[];
12750
- lights: {
12751
- id: string;
12752
- position: [number, number, number];
12753
- color: string;
12754
- intensity: number;
12755
- distance?: number | undefined;
12756
- spot?: {
12757
- direction: [number, number, number];
12758
- angle: number;
12759
- softness: number;
12760
- } | undefined;
12761
- shadows?: boolean | undefined;
12762
- glow?: {
12763
- size: number;
12764
- strength: number;
12765
- } | undefined;
12766
- }[];
12767
- undersides: {
12768
- part?: string | undefined;
12769
- polygon: [number, number][];
12770
- plane: [number, number, number, number];
12771
- }[];
12772
- animations: {
12773
- name: string;
12774
- duration: number;
12775
- }[];
12776
- cutters?: {
12777
- host: "ceiling" | "mounted" | "slab" | "wall";
12778
- polygon: number[][];
12779
- minY: number;
12780
- maxY: number;
12781
- }[] | undefined;
12782
- cutout: boolean;
12783
- collider: boolean;
12784
- shape?: {
12785
- tolerance: number;
12786
- bands: {
12787
- y0: number;
12788
- y1: number;
12789
- polygons: {
12790
- outer: [number, number][];
12791
- holes?: [number, number][][] | undefined;
12792
- }[];
12793
- }[];
12794
- } | undefined;
12795
- triangles: number;
12796
- coverage?: number | undefined;
12797
- uncovered?: {
12798
- min: [number, number];
12799
- max: [number, number];
12800
- }[] | undefined;
12801
- };
12802
- images?: {
12803
- artifact: string;
12804
- thumbnail: string;
12805
- floorPlan: string;
12806
- } | undefined;
12807
- } | undefined;
12808
- style: "cluster" | "dravidian-carved" | "faceted" | "fluted" | "lathe-turned" | "plain";
12809
- crossSection: "octagonal" | "rectangular" | "round" | "sixteen-sided" | "square";
12810
- height: number;
12811
- radius: number;
12624
+ id: `beam_${string}`;
12625
+ start: [number, number];
12626
+ end: [number, number];
12812
12627
  width: number;
12813
12628
  depth: number;
12814
- edgeSoftness: number;
12815
- baseHeight: number;
12816
- capitalHeight: number;
12817
- shaftProfile: "baluster" | "bulged" | "hourglass" | "straight" | "tapered";
12818
- shaftTaper: number;
12819
- shaftBulge: number;
12820
- shaftStartScale: number;
12821
- shaftEndScale: number;
12822
- shaftSegmentCount: number;
12823
- shaftTwistStep: number;
12824
- shaftCornerRadius: number;
12825
- shaftDetail: "fluted" | "lathe-turned" | "none" | "panelled" | "spiral";
12826
- baseStyle: "lotus" | "none" | "panelled-pedestal" | "ribbed-lotus" | "round-rings" | "simple-square" | "square-plinth" | "stepped-square";
12827
- baseWidthScale: number;
12828
- baseDepthScale: number;
12829
- baseTierCount: number;
12830
- baseStepSpread: number;
12831
- basePlinthHeightRatio: number;
12832
- baseRoundBandScale: number;
12833
- baseNeckScale: number;
12834
- baseRoundBandCount: number;
12835
- baseRibCount: number;
12836
- baseCarvingLevel: number;
12837
- basePanelInset: number;
12838
- capitalStyle: "corinthian-leaf" | "doric" | "ionic-volute" | "leaf-carved" | "none" | "rounded" | "simple" | "simple-slab" | "south-indian-bracket" | "stepped" | "volute" | "wood-bracket";
12839
- capitalWidthScale: number;
12840
- capitalDepthScale: number;
12841
- capitalTierCount: number;
12842
- capitalStepSpread: number;
12843
- capitalBandCount: number;
12844
- voluteSize: number;
12845
- voluteCount: number;
12846
- leafCount: number;
12847
- leafRows: number;
12848
- bracketDepth: number;
12849
- bracketTierCount: number;
12850
- pendantCount: number;
12851
- capitalCarvingLevel: number;
12852
- ringCount: number;
12853
- ringPlacement: "bottom" | "ends" | "even" | "top";
12854
- ringThickness: number;
12855
- ringSpread: number;
12856
- fluteCount: number;
12857
- fluteDepth: number;
12858
- fluteWidth: number;
12859
- spiralTwist: number;
12860
- spiralRibCount: number;
12861
- panelCount: number;
12862
- panelInsetDepth: number;
12863
- panelShape: "arched" | "diamond" | "rectangle";
12864
- latheRingCount: number;
12865
- latheRingSpacing: "bottom" | "ends" | "even" | "top";
12866
- carvingLevel: number;
12867
- carvingPlacement: "all" | "base" | "capital" | "shaft";
12868
- lowerBandEnabled: boolean;
12869
- lowerBandHeight: number;
12870
- lowerBandCarvingLevel: number;
12871
- dentilCount: number;
12872
- beadCount: number;
12873
- supportStyle: "a-frame" | "box-frame" | "k-brace" | "portal-frame" | "single-strut" | "trestle" | "tripod" | "v-frame" | "vertical" | "x-brace" | "y-frame";
12874
- braceWidth: number;
12875
- braceDepth: number;
12876
- braceBottomSpread: number;
12877
- braceTopSpread: number;
12878
- bracePlateEnabled: boolean;
12879
- role?: "ornament" | "post" | undefined;
12880
- postBase?: "none" | "pier" | "post-base" | undefined;
12881
- material?: {
12882
- id?: string | undefined;
12883
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
12884
- properties?: {
12885
- color: string;
12886
- roughness: number;
12887
- metalness: number;
12888
- opacity: number;
12889
- transparent: boolean;
12890
- side: "back" | "double" | "front";
12891
- } | undefined;
12892
- texture?: {
12893
- url: string;
12894
- repeat?: [number, number] | undefined;
12895
- scale?: number | undefined;
12896
- offset?: [number, number] | undefined;
12897
- normalMap?: string | undefined;
12898
- normalScale?: number | undefined;
12899
- bumpMap?: string | undefined;
12900
- bumpScale?: number | undefined;
12629
+ size?: string | undefined;
12630
+ plies: number;
12631
+ material: "glulam" | "lvl" | "pressure-treated" | "sawn" | "steel";
12632
+ placement: "dropped" | "flush";
12633
+ topElevation?: number | undefined;
12634
+ supportSlabId?: string | undefined;
12635
+ type: "beam";
12636
+ } | {
12637
+ object: "node";
12638
+ name?: string | undefined;
12639
+ parentId: string | null;
12640
+ visible: boolean;
12641
+ camera?: {
12642
+ position: [number, number, number];
12643
+ target: [number, number, number];
12644
+ mode: "orthographic" | "perspective";
12645
+ fov?: number | undefined;
12646
+ zoom?: number | undefined;
12647
+ } | undefined;
12648
+ metadata: Record<string, unknown>;
12649
+ provenance?: {
12650
+ refs: {
12651
+ ns?: string | undefined;
12652
+ id: string;
12653
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
12654
+ }[];
12655
+ lineage?: {
12656
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
12657
+ fromIds: string[];
12901
12658
  } | undefined;
12902
12659
  } | undefined;
12903
- materialPreset?: string | undefined;
12904
- slots?: Record<string, string> | undefined;
12905
- type: "column";
12660
+ id: `measurement_${string}`;
12661
+ measurement: {
12662
+ kind: "volume";
12663
+ base: ({
12664
+ kind: "feature";
12665
+ reference: {
12666
+ nodeId: string;
12667
+ featureId: string;
12668
+ parameters?: Record<string, string | number | boolean> | undefined;
12669
+ };
12670
+ fallback: [number, number, number];
12671
+ } | [number, number, number])[];
12672
+ extrusion: [number, number, number];
12673
+ } | {
12674
+ kind: "distance";
12675
+ points: [{
12676
+ kind: "feature";
12677
+ reference: {
12678
+ nodeId: string;
12679
+ featureId: string;
12680
+ parameters?: Record<string, string | number | boolean> | undefined;
12681
+ };
12682
+ fallback: [number, number, number];
12683
+ } | [number, number, number], {
12684
+ kind: "feature";
12685
+ reference: {
12686
+ nodeId: string;
12687
+ featureId: string;
12688
+ parameters?: Record<string, string | number | boolean> | undefined;
12689
+ };
12690
+ fallback: [number, number, number];
12691
+ } | [number, number, number]];
12692
+ } | {
12693
+ kind: "angle";
12694
+ points: [{
12695
+ kind: "feature";
12696
+ reference: {
12697
+ nodeId: string;
12698
+ featureId: string;
12699
+ parameters?: Record<string, string | number | boolean> | undefined;
12700
+ };
12701
+ fallback: [number, number, number];
12702
+ } | [number, number, number], {
12703
+ kind: "feature";
12704
+ reference: {
12705
+ nodeId: string;
12706
+ featureId: string;
12707
+ parameters?: Record<string, string | number | boolean> | undefined;
12708
+ };
12709
+ fallback: [number, number, number];
12710
+ } | [number, number, number], {
12711
+ kind: "feature";
12712
+ reference: {
12713
+ nodeId: string;
12714
+ featureId: string;
12715
+ parameters?: Record<string, string | number | boolean> | undefined;
12716
+ };
12717
+ fallback: [number, number, number];
12718
+ } | [number, number, number]];
12719
+ } | {
12720
+ kind: "area";
12721
+ base: ({
12722
+ kind: "feature";
12723
+ reference: {
12724
+ nodeId: string;
12725
+ featureId: string;
12726
+ parameters?: Record<string, string | number | boolean> | undefined;
12727
+ };
12728
+ fallback: [number, number, number];
12729
+ } | [number, number, number])[];
12730
+ } | {
12731
+ kind: "perimeter";
12732
+ base: ({
12733
+ kind: "feature";
12734
+ reference: {
12735
+ nodeId: string;
12736
+ featureId: string;
12737
+ parameters?: Record<string, string | number | boolean> | undefined;
12738
+ };
12739
+ fallback: [number, number, number];
12740
+ } | [number, number, number])[];
12741
+ };
12742
+ type: "measurement";
12906
12743
  } | {
12907
12744
  object: "node";
12908
12745
  name?: string | undefined;
@@ -12927,29 +12764,72 @@ export declare function mezzanineFixture(height?: number): {
12927
12764
  fromIds: string[];
12928
12765
  } | undefined;
12929
12766
  } | undefined;
12930
- id: `duct-fitting_${string}`;
12931
- position: [number, number, number];
12932
- rotation: [number, number, number];
12933
- fittingType: "access-panel" | "coupling" | "cross" | "damper" | "elbow" | "end-cap" | "reducer" | "tee" | "transition";
12767
+ id: `duct-segment_${string}`;
12768
+ path: [number, number, number][];
12769
+ autoHangers?: boolean | undefined;
12770
+ hangerOverrides?: Record<string, {
12771
+ fraction?: number | undefined;
12772
+ skipped?: boolean | undefined;
12773
+ hostId?: string | undefined;
12774
+ }> | undefined;
12775
+ hangerStyle?: "double" | "single" | undefined;
12776
+ hangerSpacing?: number | undefined;
12777
+ hangerMaxReach?: number | undefined;
12778
+ wallAttachment?: {
12779
+ wallId: `wall_${string}`;
12780
+ side: "back" | "front";
12781
+ startUV: [number, number];
12782
+ endUV: [number, number];
12783
+ offset: number;
12784
+ } | undefined;
12934
12785
  shape: "oval" | "rect" | "round";
12935
- inletShape?: "oval" | "rect" | "round" | undefined;
12936
- outletShape?: "oval" | "rect" | "round" | undefined;
12786
+ diameter: number;
12937
12787
  width: number;
12938
12788
  height: number;
12939
- shape2: "oval" | "rect" | "round";
12940
- width2: number;
12941
- height2: number;
12942
- angle: number;
12943
- branchAngle: number;
12944
- diameter: number;
12945
- diameter2: number;
12946
- ductMaterial: "duct-board" | "flex" | "sheet-metal";
12789
+ roll: number;
12790
+ ductMaterial: "duct-board" | "flex" | "sheet-metal" | "spiral";
12791
+ seamDetail: boolean;
12792
+ insulated: boolean;
12793
+ insulationR: number;
12947
12794
  system: "return" | "supply";
12948
- damperAngle: number;
12949
- panelWidth: number;
12950
- panelHeight: number;
12951
12795
  slots?: Record<string, string> | undefined;
12952
- type: "duct-fitting";
12796
+ type: "duct-segment";
12797
+ } | {
12798
+ object: "node";
12799
+ name?: string | undefined;
12800
+ parentId: string | null;
12801
+ visible: boolean;
12802
+ camera?: {
12803
+ position: [number, number, number];
12804
+ target: [number, number, number];
12805
+ mode: "orthographic" | "perspective";
12806
+ fov?: number | undefined;
12807
+ zoom?: number | undefined;
12808
+ } | undefined;
12809
+ metadata: Record<string, unknown>;
12810
+ provenance?: {
12811
+ refs: {
12812
+ ns?: string | undefined;
12813
+ id: string;
12814
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
12815
+ }[];
12816
+ lineage?: {
12817
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
12818
+ fromIds: string[];
12819
+ } | undefined;
12820
+ } | undefined;
12821
+ id: `floor-opening_${string}`;
12822
+ polygon: [number, number][];
12823
+ hostZoneId?: string | undefined;
12824
+ legacyPlateCuts?: Record<string, [number, number][][]> | undefined;
12825
+ legacyCeilingCuts?: Record<string, [number, number][][]> | undefined;
12826
+ source: string;
12827
+ ownerId?: string | undefined;
12828
+ surfaceId?: string | undefined;
12829
+ drawnOn: "ceiling" | "floor";
12830
+ cutsPrimary: boolean;
12831
+ cutsAdjacent: boolean;
12832
+ type: "floor-opening";
12953
12833
  } | {
12954
12834
  object: "node";
12955
12835
  name?: string | undefined;
@@ -12974,23 +12854,12 @@ export declare function mezzanineFixture(height?: number): {
12974
12854
  fromIds: string[];
12975
12855
  } | undefined;
12976
12856
  } | undefined;
12977
- id: `hvac-equipment_${string}`;
12978
- position: [number, number, number];
12979
- rotation: number;
12980
- supportSlabId?: string | undefined;
12981
- equipmentType: "air-handler" | "condenser" | "furnace";
12982
- width: number;
12983
- depth: number;
12984
- height: number;
12985
- supplyShape: "oval" | "rect" | "round";
12986
- returnShape: "oval" | "rect" | "round";
12987
- supplyDiameter: number;
12988
- returnDiameter: number;
12989
- supplyWidth: number;
12990
- supplyHeight: number;
12991
- returnWidth: number;
12992
- returnHeight: number;
12993
- type: "hvac-equipment";
12857
+ id: `lineset_${string}`;
12858
+ path: [number, number, number][];
12859
+ suctionDiameter: number;
12860
+ liquidDiameter: number;
12861
+ insulated: boolean;
12862
+ type: "lineset";
12994
12863
  } | {
12995
12864
  object: "node";
12996
12865
  name?: string | undefined;
@@ -13015,17 +12884,13 @@ export declare function mezzanineFixture(height?: number): {
13015
12884
  fromIds: string[];
13016
12885
  } | undefined;
13017
12886
  } | undefined;
13018
- id: `pipe-fitting_${string}`;
12887
+ id: `pipe-trap_${string}`;
13019
12888
  position: [number, number, number];
13020
- rotation: [number, number, number];
13021
- fittingType: "cleanout" | "coupling" | "cross" | "elbow" | "end-cap" | "reducer" | "sanitary-tee" | "wye";
13022
- angle: number;
12889
+ rotation: number;
13023
12890
  diameter: number;
13024
- diameter2: number;
13025
- cleanoutStyle: "end" | "inline";
13026
12891
  pipeMaterial: "abs" | "cast-iron" | "pvc";
13027
- system: "vent" | "waste";
13028
- type: "pipe-fitting";
12892
+ armLengthM: number;
12893
+ type: "pipe-trap";
13029
12894
  } | {
13030
12895
  object: "node";
13031
12896
  name?: string | undefined;
@@ -13558,7 +13423,7 @@ export declare function mezzanineFixture(height?: number): {
13558
13423
  cavityInsulation?: string | undefined;
13559
13424
  } | undefined;
13560
13425
  slots?: Record<string, string> | undefined;
13561
- children: `rseg_${string}`[];
13426
+ children: string[];
13562
13427
  type: "roof";
13563
13428
  } | {
13564
13429
  object: "node";
@@ -14123,7 +13988,217 @@ export declare function mezzanineFixture(height?: number): {
14123
13988
  bumpScale?: number | undefined;
14124
13989
  } | undefined;
14125
13990
  } | undefined;
14126
- slots?: Record<string, string> | undefined;
13991
+ slots?: Record<string, string> | undefined;
13992
+ source?: {
13993
+ kind: "script";
13994
+ meta?: {
13995
+ description?: string | undefined;
13996
+ category?: string | undefined;
13997
+ tags?: string[] | undefined;
13998
+ parent?: string | undefined;
13999
+ } | undefined;
14000
+ language: "bpy" | "three";
14001
+ script: string;
14002
+ params: Record<string, string | number | boolean>;
14003
+ artifact: string;
14004
+ manifest: {
14005
+ bounds: {
14006
+ min: [number, number, number];
14007
+ max: [number, number, number];
14008
+ };
14009
+ params: {
14010
+ id: string;
14011
+ label?: string | undefined;
14012
+ kind: "boolean" | "number" | "string";
14013
+ default: string | number | boolean;
14014
+ min?: number | undefined;
14015
+ max?: number | undefined;
14016
+ step?: number | undefined;
14017
+ unit?: string | undefined;
14018
+ options?: string[] | undefined;
14019
+ }[];
14020
+ parts: {
14021
+ id: string;
14022
+ label?: string | undefined;
14023
+ type?: string | undefined;
14024
+ bounds?: {
14025
+ min: [number, number, number];
14026
+ max: [number, number, number];
14027
+ } | undefined;
14028
+ }[];
14029
+ surfaces: {
14030
+ part?: string | undefined;
14031
+ y: number;
14032
+ polygon: [number, number][];
14033
+ }[];
14034
+ slots: {
14035
+ id: string;
14036
+ label?: string | undefined;
14037
+ color?: string | undefined;
14038
+ roughness?: number | undefined;
14039
+ metalness?: number | undefined;
14040
+ transparent?: boolean | undefined;
14041
+ emissive?: boolean | undefined;
14042
+ }[];
14043
+ anchors: {
14044
+ id: string;
14045
+ position: [number, number, number];
14046
+ normal?: [number, number, number] | undefined;
14047
+ }[];
14048
+ lights: {
14049
+ id: string;
14050
+ position: [number, number, number];
14051
+ color: string;
14052
+ intensity: number;
14053
+ distance?: number | undefined;
14054
+ spot?: {
14055
+ direction: [number, number, number];
14056
+ angle: number;
14057
+ softness: number;
14058
+ } | undefined;
14059
+ shadows?: boolean | undefined;
14060
+ glow?: {
14061
+ size: number;
14062
+ strength: number;
14063
+ } | undefined;
14064
+ }[];
14065
+ undersides: {
14066
+ part?: string | undefined;
14067
+ polygon: [number, number][];
14068
+ plane: [number, number, number, number];
14069
+ }[];
14070
+ animations: {
14071
+ name: string;
14072
+ duration: number;
14073
+ }[];
14074
+ cutters?: {
14075
+ host: "ceiling" | "mounted" | "slab" | "wall";
14076
+ polygon: number[][];
14077
+ minY: number;
14078
+ maxY: number;
14079
+ }[] | undefined;
14080
+ cutout: boolean;
14081
+ collider: boolean;
14082
+ shape?: {
14083
+ tolerance: number;
14084
+ bands: {
14085
+ y0: number;
14086
+ y1: number;
14087
+ polygons: {
14088
+ outer: [number, number][];
14089
+ holes?: [number, number][][] | undefined;
14090
+ }[];
14091
+ }[];
14092
+ } | undefined;
14093
+ triangles: number;
14094
+ coverage?: number | undefined;
14095
+ uncovered?: {
14096
+ min: [number, number];
14097
+ max: [number, number];
14098
+ }[] | undefined;
14099
+ };
14100
+ images?: {
14101
+ artifact: string;
14102
+ thumbnail: string;
14103
+ floorPlan: string;
14104
+ } | undefined;
14105
+ } | undefined;
14106
+ position: [number, number, number];
14107
+ rotation: [number, number, number];
14108
+ side?: "back" | "front" | undefined;
14109
+ verticalAnchor?: "floor" | "wall" | undefined;
14110
+ floorThresholdVersion: 0 | 1;
14111
+ wallId?: string | undefined;
14112
+ dormerId?: string | undefined;
14113
+ dormerFace?: "back" | "front" | "left" | "right" | undefined;
14114
+ roofSegmentId?: string | undefined;
14115
+ roofFace?: "back" | "front" | "left" | "right" | undefined;
14116
+ width: number;
14117
+ height: number;
14118
+ mark?: string | undefined;
14119
+ constructionType: "framed" | "masonry";
14120
+ dimensionReference: "finish-opening" | "masonry-opening" | "nominal" | "rough-opening";
14121
+ roughOpeningWidth?: number | undefined;
14122
+ roughOpeningHeight?: number | undefined;
14123
+ masonryOpeningWidth?: number | undefined;
14124
+ masonryOpeningHeight?: number | undefined;
14125
+ finishOpeningWidth?: number | undefined;
14126
+ finishOpeningHeight?: number | undefined;
14127
+ openingKind: "opening" | "window";
14128
+ windowType: "awning" | "bay" | "bow" | "casement" | "double-hung" | "fixed" | "hopper" | "louvered" | "single-hung" | "sliding" | "tilt-turn";
14129
+ operationState: number;
14130
+ openingDirection?: "inward" | "outward" | undefined;
14131
+ tiltTurnMode?: "tilt" | "turn" | undefined;
14132
+ awningDirection: "down" | "up";
14133
+ casementStyle: "french" | "single";
14134
+ hingesSide: "left" | "right";
14135
+ openingShape: "arch" | "rectangle" | "rounded";
14136
+ openingRadiusMode: "all" | "individual";
14137
+ openingCornerRadii: [number, number, number, number];
14138
+ cornerRadius: number;
14139
+ archHeight: number;
14140
+ openingRevealRadius: number;
14141
+ frameThickness: number;
14142
+ frameDepth?: number | undefined;
14143
+ windowHandle?: boolean | undefined;
14144
+ sashGrid?: boolean | undefined;
14145
+ columnRatios: number[];
14146
+ rowRatios: number[];
14147
+ columnDividerThickness: number;
14148
+ rowDividerThickness: number;
14149
+ corner?: {
14150
+ end: "end" | "start";
14151
+ partnerId: string;
14152
+ post: "none" | "post";
14153
+ } | undefined;
14154
+ sill: boolean;
14155
+ sillDepth: number;
14156
+ sillThickness: number;
14157
+ sillOverhang?: number | undefined;
14158
+ sillInterior?: boolean | undefined;
14159
+ sillInteriorDepth?: number | undefined;
14160
+ sillInteriorThickness?: number | undefined;
14161
+ sillInteriorOverhang?: number | undefined;
14162
+ shutters?: "board-batten" | "louvered" | "none" | "panel" | undefined;
14163
+ shutterWidth?: number | undefined;
14164
+ shutterOpen?: number | undefined;
14165
+ shutterSides?: "both" | "left" | "right" | undefined;
14166
+ rollerShutter?: "box" | "concealed" | "none" | undefined;
14167
+ rollerShutterBoxHeight?: number | undefined;
14168
+ rollerShutterOpen?: number | undefined;
14169
+ casingFaceA?: boolean | undefined;
14170
+ casingFaceB?: boolean | undefined;
14171
+ casingWidth?: number | undefined;
14172
+ type: "window";
14173
+ } | {
14174
+ object: "node";
14175
+ name?: string | undefined;
14176
+ parentId: string | null;
14177
+ visible: boolean;
14178
+ camera?: {
14179
+ position: [number, number, number];
14180
+ target: [number, number, number];
14181
+ mode: "orthographic" | "perspective";
14182
+ fov?: number | undefined;
14183
+ zoom?: number | undefined;
14184
+ } | undefined;
14185
+ metadata: Record<string, unknown>;
14186
+ provenance?: {
14187
+ refs: {
14188
+ ns?: string | undefined;
14189
+ id: string;
14190
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
14191
+ }[];
14192
+ lineage?: {
14193
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
14194
+ fromIds: string[];
14195
+ } | undefined;
14196
+ } | undefined;
14197
+ id: `column_${string}`;
14198
+ children: string[];
14199
+ position: [number, number, number];
14200
+ rotation: number;
14201
+ supportSlabId?: string | undefined;
14127
14202
  source?: {
14128
14203
  kind: "script";
14129
14204
  meta?: {
@@ -14238,73 +14313,104 @@ export declare function mezzanineFixture(height?: number): {
14238
14313
  floorPlan: string;
14239
14314
  } | undefined;
14240
14315
  } | undefined;
14241
- position: [number, number, number];
14242
- rotation: [number, number, number];
14243
- side?: "back" | "front" | undefined;
14244
- verticalAnchor?: "floor" | "wall" | undefined;
14245
- floorThresholdVersion: 0 | 1;
14246
- wallId?: string | undefined;
14247
- dormerId?: string | undefined;
14248
- dormerFace?: "back" | "front" | "left" | "right" | undefined;
14249
- roofSegmentId?: string | undefined;
14250
- roofFace?: "back" | "front" | "left" | "right" | undefined;
14251
- width: number;
14316
+ style: "cluster" | "dravidian-carved" | "faceted" | "fluted" | "lathe-turned" | "plain";
14317
+ crossSection: "octagonal" | "rectangular" | "round" | "sixteen-sided" | "square";
14252
14318
  height: number;
14253
- mark?: string | undefined;
14254
- constructionType: "framed" | "masonry";
14255
- dimensionReference: "finish-opening" | "masonry-opening" | "nominal" | "rough-opening";
14256
- roughOpeningWidth?: number | undefined;
14257
- roughOpeningHeight?: number | undefined;
14258
- masonryOpeningWidth?: number | undefined;
14259
- masonryOpeningHeight?: number | undefined;
14260
- finishOpeningWidth?: number | undefined;
14261
- finishOpeningHeight?: number | undefined;
14262
- openingKind: "opening" | "window";
14263
- windowType: "awning" | "bay" | "bow" | "casement" | "double-hung" | "fixed" | "hopper" | "louvered" | "single-hung" | "sliding" | "tilt-turn";
14264
- operationState: number;
14265
- openingDirection?: "inward" | "outward" | undefined;
14266
- tiltTurnMode?: "tilt" | "turn" | undefined;
14267
- awningDirection: "down" | "up";
14268
- casementStyle: "french" | "single";
14269
- hingesSide: "left" | "right";
14270
- openingShape: "arch" | "rectangle" | "rounded";
14271
- openingRadiusMode: "all" | "individual";
14272
- openingCornerRadii: [number, number, number, number];
14273
- cornerRadius: number;
14274
- archHeight: number;
14275
- openingRevealRadius: number;
14276
- frameThickness: number;
14277
- frameDepth?: number | undefined;
14278
- windowHandle?: boolean | undefined;
14279
- sashGrid?: boolean | undefined;
14280
- columnRatios: number[];
14281
- rowRatios: number[];
14282
- columnDividerThickness: number;
14283
- rowDividerThickness: number;
14284
- corner?: {
14285
- end: "end" | "start";
14286
- partnerId: string;
14287
- post: "none" | "post";
14319
+ radius: number;
14320
+ width: number;
14321
+ depth: number;
14322
+ edgeSoftness: number;
14323
+ baseHeight: number;
14324
+ capitalHeight: number;
14325
+ shaftProfile: "baluster" | "bulged" | "hourglass" | "straight" | "tapered";
14326
+ shaftTaper: number;
14327
+ shaftBulge: number;
14328
+ shaftStartScale: number;
14329
+ shaftEndScale: number;
14330
+ shaftSegmentCount: number;
14331
+ shaftTwistStep: number;
14332
+ shaftCornerRadius: number;
14333
+ shaftDetail: "fluted" | "lathe-turned" | "none" | "panelled" | "spiral";
14334
+ baseStyle: "lotus" | "none" | "panelled-pedestal" | "ribbed-lotus" | "round-rings" | "simple-square" | "square-plinth" | "stepped-square";
14335
+ baseWidthScale: number;
14336
+ baseDepthScale: number;
14337
+ baseTierCount: number;
14338
+ baseStepSpread: number;
14339
+ basePlinthHeightRatio: number;
14340
+ baseRoundBandScale: number;
14341
+ baseNeckScale: number;
14342
+ baseRoundBandCount: number;
14343
+ baseRibCount: number;
14344
+ baseCarvingLevel: number;
14345
+ basePanelInset: number;
14346
+ capitalStyle: "corinthian-leaf" | "doric" | "ionic-volute" | "leaf-carved" | "none" | "rounded" | "simple" | "simple-slab" | "south-indian-bracket" | "stepped" | "volute" | "wood-bracket";
14347
+ capitalWidthScale: number;
14348
+ capitalDepthScale: number;
14349
+ capitalTierCount: number;
14350
+ capitalStepSpread: number;
14351
+ capitalBandCount: number;
14352
+ voluteSize: number;
14353
+ voluteCount: number;
14354
+ leafCount: number;
14355
+ leafRows: number;
14356
+ bracketDepth: number;
14357
+ bracketTierCount: number;
14358
+ pendantCount: number;
14359
+ capitalCarvingLevel: number;
14360
+ ringCount: number;
14361
+ ringPlacement: "bottom" | "ends" | "even" | "top";
14362
+ ringThickness: number;
14363
+ ringSpread: number;
14364
+ fluteCount: number;
14365
+ fluteDepth: number;
14366
+ fluteWidth: number;
14367
+ spiralTwist: number;
14368
+ spiralRibCount: number;
14369
+ panelCount: number;
14370
+ panelInsetDepth: number;
14371
+ panelShape: "arched" | "diamond" | "rectangle";
14372
+ latheRingCount: number;
14373
+ latheRingSpacing: "bottom" | "ends" | "even" | "top";
14374
+ carvingLevel: number;
14375
+ carvingPlacement: "all" | "base" | "capital" | "shaft";
14376
+ lowerBandEnabled: boolean;
14377
+ lowerBandHeight: number;
14378
+ lowerBandCarvingLevel: number;
14379
+ dentilCount: number;
14380
+ beadCount: number;
14381
+ supportStyle: "a-frame" | "box-frame" | "k-brace" | "portal-frame" | "single-strut" | "trestle" | "tripod" | "v-frame" | "vertical" | "x-brace" | "y-frame";
14382
+ braceWidth: number;
14383
+ braceDepth: number;
14384
+ braceBottomSpread: number;
14385
+ braceTopSpread: number;
14386
+ bracePlateEnabled: boolean;
14387
+ role?: "ornament" | "post" | undefined;
14388
+ postBase?: "none" | "pier" | "post-base" | undefined;
14389
+ material?: {
14390
+ id?: string | undefined;
14391
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
14392
+ properties?: {
14393
+ color: string;
14394
+ roughness: number;
14395
+ metalness: number;
14396
+ opacity: number;
14397
+ transparent: boolean;
14398
+ side: "back" | "double" | "front";
14399
+ } | undefined;
14400
+ texture?: {
14401
+ url: string;
14402
+ repeat?: [number, number] | undefined;
14403
+ scale?: number | undefined;
14404
+ offset?: [number, number] | undefined;
14405
+ normalMap?: string | undefined;
14406
+ normalScale?: number | undefined;
14407
+ bumpMap?: string | undefined;
14408
+ bumpScale?: number | undefined;
14409
+ } | undefined;
14288
14410
  } | undefined;
14289
- sill: boolean;
14290
- sillDepth: number;
14291
- sillThickness: number;
14292
- sillOverhang?: number | undefined;
14293
- sillInterior?: boolean | undefined;
14294
- sillInteriorDepth?: number | undefined;
14295
- sillInteriorThickness?: number | undefined;
14296
- sillInteriorOverhang?: number | undefined;
14297
- shutters?: "board-batten" | "louvered" | "none" | "panel" | undefined;
14298
- shutterWidth?: number | undefined;
14299
- shutterOpen?: number | undefined;
14300
- shutterSides?: "both" | "left" | "right" | undefined;
14301
- rollerShutter?: "box" | "concealed" | "none" | undefined;
14302
- rollerShutterBoxHeight?: number | undefined;
14303
- rollerShutterOpen?: number | undefined;
14304
- casingFaceA?: boolean | undefined;
14305
- casingFaceB?: boolean | undefined;
14306
- casingWidth?: number | undefined;
14307
- type: "window";
14411
+ materialPreset?: string | undefined;
14412
+ slots?: Record<string, string> | undefined;
14413
+ type: "column";
14308
14414
  } | {
14309
14415
  object: "node";
14310
14416
  name?: string | undefined;
@@ -15915,42 +16021,6 @@ export declare function mezzanineFixture(height?: number): {
15915
16021
  start: [number, number];
15916
16022
  end: [number, number];
15917
16023
  type: "separator";
15918
- } | {
15919
- object: "node";
15920
- name?: string | undefined;
15921
- parentId: string | null;
15922
- visible: boolean;
15923
- camera?: {
15924
- position: [number, number, number];
15925
- target: [number, number, number];
15926
- mode: "orthographic" | "perspective";
15927
- fov?: number | undefined;
15928
- zoom?: number | undefined;
15929
- } | undefined;
15930
- metadata: Record<string, unknown>;
15931
- provenance?: {
15932
- refs: {
15933
- ns?: string | undefined;
15934
- id: string;
15935
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
15936
- }[];
15937
- lineage?: {
15938
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
15939
- fromIds: string[];
15940
- } | undefined;
15941
- } | undefined;
15942
- id: `floor-opening_${string}`;
15943
- polygon: [number, number][];
15944
- hostZoneId?: string | undefined;
15945
- legacyPlateCuts?: Record<string, [number, number][][]> | undefined;
15946
- legacyCeilingCuts?: Record<string, [number, number][][]> | undefined;
15947
- source: string;
15948
- ownerId?: string | undefined;
15949
- surfaceId?: string | undefined;
15950
- drawnOn: "ceiling" | "floor";
15951
- cutsPrimary: boolean;
15952
- cutsAdjacent: boolean;
15953
- type: "floor-opening";
15954
16024
  } | {
15955
16025
  object: "node";
15956
16026
  name?: string | undefined;
@@ -16039,48 +16109,12 @@ export declare function mezzanineFixture(height?: number): {
16039
16109
  showInfill: boolean;
16040
16110
  guardInfill?: "balusters" | "boards" | "cable" | undefined;
16041
16111
  startPost?: boolean | undefined;
16042
- endPost?: boolean | undefined;
16043
- postThrough?: boolean | undefined;
16044
- infillPlacement: "back" | "center" | "front";
16045
- color: string;
16046
- style: "guard" | "horizontal" | "picket" | "privacy" | "rail" | "slat";
16047
- type: "fence";
16048
- } | {
16049
- object: "node";
16050
- name?: string | undefined;
16051
- parentId: string | null;
16052
- visible: boolean;
16053
- camera?: {
16054
- position: [number, number, number];
16055
- target: [number, number, number];
16056
- mode: "orthographic" | "perspective";
16057
- fov?: number | undefined;
16058
- zoom?: number | undefined;
16059
- } | undefined;
16060
- metadata: Record<string, unknown>;
16061
- provenance?: {
16062
- refs: {
16063
- ns?: string | undefined;
16064
- id: string;
16065
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
16066
- }[];
16067
- lineage?: {
16068
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
16069
- fromIds: string[];
16070
- } | undefined;
16071
- } | undefined;
16072
- id: `beam_${string}`;
16073
- start: [number, number];
16074
- end: [number, number];
16075
- width: number;
16076
- depth: number;
16077
- size?: string | undefined;
16078
- plies: number;
16079
- material: "glulam" | "lvl" | "pressure-treated" | "sawn" | "steel";
16080
- placement: "dropped" | "flush";
16081
- topElevation?: number | undefined;
16082
- supportSlabId?: string | undefined;
16083
- type: "beam";
16112
+ endPost?: boolean | undefined;
16113
+ postThrough?: boolean | undefined;
16114
+ infillPlacement: "back" | "center" | "front";
16115
+ color: string;
16116
+ style: "guard" | "horizontal" | "picket" | "privacy" | "rail" | "slat";
16117
+ type: "fence";
16084
16118
  } | {
16085
16119
  object: "node";
16086
16120
  name?: string | undefined;
@@ -17107,113 +17141,6 @@ export declare function mezzanineFixture(height?: number): {
17107
17141
  label: string;
17108
17142
  } | null;
17109
17143
  type: "guide";
17110
- } | {
17111
- object: "node";
17112
- name?: string | undefined;
17113
- parentId: string | null;
17114
- visible: boolean;
17115
- camera?: {
17116
- position: [number, number, number];
17117
- target: [number, number, number];
17118
- mode: "orthographic" | "perspective";
17119
- fov?: number | undefined;
17120
- zoom?: number | undefined;
17121
- } | undefined;
17122
- metadata: Record<string, unknown>;
17123
- provenance?: {
17124
- refs: {
17125
- ns?: string | undefined;
17126
- id: string;
17127
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
17128
- }[];
17129
- lineage?: {
17130
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
17131
- fromIds: string[];
17132
- } | undefined;
17133
- } | undefined;
17134
- id: `measurement_${string}`;
17135
- measurement: {
17136
- kind: "distance";
17137
- points: [{
17138
- kind: "feature";
17139
- reference: {
17140
- nodeId: string;
17141
- featureId: string;
17142
- parameters?: Record<string, string | number | boolean> | undefined;
17143
- };
17144
- fallback: [number, number, number];
17145
- } | [number, number, number], {
17146
- kind: "feature";
17147
- reference: {
17148
- nodeId: string;
17149
- featureId: string;
17150
- parameters?: Record<string, string | number | boolean> | undefined;
17151
- };
17152
- fallback: [number, number, number];
17153
- } | [number, number, number]];
17154
- } | {
17155
- kind: "angle";
17156
- points: [{
17157
- kind: "feature";
17158
- reference: {
17159
- nodeId: string;
17160
- featureId: string;
17161
- parameters?: Record<string, string | number | boolean> | undefined;
17162
- };
17163
- fallback: [number, number, number];
17164
- } | [number, number, number], {
17165
- kind: "feature";
17166
- reference: {
17167
- nodeId: string;
17168
- featureId: string;
17169
- parameters?: Record<string, string | number | boolean> | undefined;
17170
- };
17171
- fallback: [number, number, number];
17172
- } | [number, number, number], {
17173
- kind: "feature";
17174
- reference: {
17175
- nodeId: string;
17176
- featureId: string;
17177
- parameters?: Record<string, string | number | boolean> | undefined;
17178
- };
17179
- fallback: [number, number, number];
17180
- } | [number, number, number]];
17181
- } | {
17182
- kind: "area";
17183
- base: ({
17184
- kind: "feature";
17185
- reference: {
17186
- nodeId: string;
17187
- featureId: string;
17188
- parameters?: Record<string, string | number | boolean> | undefined;
17189
- };
17190
- fallback: [number, number, number];
17191
- } | [number, number, number])[];
17192
- } | {
17193
- kind: "perimeter";
17194
- base: ({
17195
- kind: "feature";
17196
- reference: {
17197
- nodeId: string;
17198
- featureId: string;
17199
- parameters?: Record<string, string | number | boolean> | undefined;
17200
- };
17201
- fallback: [number, number, number];
17202
- } | [number, number, number])[];
17203
- } | {
17204
- kind: "volume";
17205
- base: ({
17206
- kind: "feature";
17207
- reference: {
17208
- nodeId: string;
17209
- featureId: string;
17210
- parameters?: Record<string, string | number | boolean> | undefined;
17211
- };
17212
- fallback: [number, number, number];
17213
- } | [number, number, number])[];
17214
- extrusion: [number, number, number];
17215
- };
17216
- type: "measurement";
17217
17144
  } | {
17218
17145
  object: "node";
17219
17146
  name?: string | undefined;
@@ -17267,36 +17194,29 @@ export declare function mezzanineFixture(height?: number): {
17267
17194
  fromIds: string[];
17268
17195
  } | undefined;
17269
17196
  } | undefined;
17270
- id: `duct-segment_${string}`;
17271
- path: [number, number, number][];
17272
- autoHangers?: boolean | undefined;
17273
- hangerOverrides?: Record<string, {
17274
- fraction?: number | undefined;
17275
- skipped?: boolean | undefined;
17276
- hostId?: string | undefined;
17277
- }> | undefined;
17278
- hangerStyle?: "double" | "single" | undefined;
17279
- hangerSpacing?: number | undefined;
17280
- hangerMaxReach?: number | undefined;
17281
- wallAttachment?: {
17282
- wallId: `wall_${string}`;
17283
- side: "back" | "front";
17284
- startUV: [number, number];
17285
- endUV: [number, number];
17286
- offset: number;
17287
- } | undefined;
17197
+ id: `duct-fitting_${string}`;
17198
+ position: [number, number, number];
17199
+ rotation: [number, number, number];
17200
+ fittingType: "access-panel" | "coupling" | "cross" | "damper" | "elbow" | "end-cap" | "reducer" | "tee" | "transition";
17288
17201
  shape: "oval" | "rect" | "round";
17289
- diameter: number;
17202
+ inletShape?: "oval" | "rect" | "round" | undefined;
17203
+ outletShape?: "oval" | "rect" | "round" | undefined;
17290
17204
  width: number;
17291
17205
  height: number;
17292
- roll: number;
17293
- ductMaterial: "duct-board" | "flex" | "sheet-metal" | "spiral";
17294
- seamDetail: boolean;
17295
- insulated: boolean;
17296
- insulationR: number;
17206
+ shape2: "oval" | "rect" | "round";
17207
+ width2: number;
17208
+ height2: number;
17209
+ angle: number;
17210
+ branchAngle: number;
17211
+ diameter: number;
17212
+ diameter2: number;
17213
+ ductMaterial: "duct-board" | "flex" | "sheet-metal";
17297
17214
  system: "return" | "supply";
17215
+ damperAngle: number;
17216
+ panelWidth: number;
17217
+ panelHeight: number;
17298
17218
  slots?: Record<string, string> | undefined;
17299
- type: "duct-segment";
17219
+ type: "duct-fitting";
17300
17220
  } | {
17301
17221
  object: "node";
17302
17222
  name?: string | undefined;
@@ -17358,12 +17278,23 @@ export declare function mezzanineFixture(height?: number): {
17358
17278
  fromIds: string[];
17359
17279
  } | undefined;
17360
17280
  } | undefined;
17361
- id: `lineset_${string}`;
17362
- path: [number, number, number][];
17363
- suctionDiameter: number;
17364
- liquidDiameter: number;
17365
- insulated: boolean;
17366
- type: "lineset";
17281
+ id: `hvac-equipment_${string}`;
17282
+ position: [number, number, number];
17283
+ rotation: number;
17284
+ supportSlabId?: string | undefined;
17285
+ equipmentType: "air-handler" | "condenser" | "furnace";
17286
+ width: number;
17287
+ depth: number;
17288
+ height: number;
17289
+ supplyShape: "oval" | "rect" | "round";
17290
+ returnShape: "oval" | "rect" | "round";
17291
+ supplyDiameter: number;
17292
+ returnDiameter: number;
17293
+ supplyWidth: number;
17294
+ supplyHeight: number;
17295
+ returnWidth: number;
17296
+ returnHeight: number;
17297
+ type: "hvac-equipment";
17367
17298
  } | {
17368
17299
  object: "node";
17369
17300
  name?: string | undefined;
@@ -17462,13 +17393,17 @@ export declare function mezzanineFixture(height?: number): {
17462
17393
  fromIds: string[];
17463
17394
  } | undefined;
17464
17395
  } | undefined;
17465
- id: `pipe-trap_${string}`;
17396
+ id: `pipe-fitting_${string}`;
17466
17397
  position: [number, number, number];
17467
- rotation: number;
17398
+ rotation: [number, number, number];
17399
+ fittingType: "cleanout" | "coupling" | "cross" | "elbow" | "end-cap" | "reducer" | "sanitary-tee" | "wye";
17400
+ angle: number;
17468
17401
  diameter: number;
17402
+ diameter2: number;
17403
+ cleanoutStyle: "end" | "inline";
17469
17404
  pipeMaterial: "abs" | "cast-iron" | "pvc";
17470
- armLengthM: number;
17471
- type: "pipe-trap";
17405
+ system: "vent" | "waste";
17406
+ type: "pipe-fitting";
17472
17407
  } | {
17473
17408
  object: "node";
17474
17409
  name?: string | undefined;
@@ -17707,6 +17642,71 @@ export declare function mezzanineFixture(height?: number): {
17707
17642
  showPosts: boolean;
17708
17643
  id: `fence-opening_${string}`;
17709
17644
  type: "fence-opening";
17645
+ } | {
17646
+ object: "node";
17647
+ name?: string | undefined;
17648
+ parentId: string | null;
17649
+ visible: boolean;
17650
+ camera?: {
17651
+ position: [number, number, number];
17652
+ target: [number, number, number];
17653
+ mode: "orthographic" | "perspective";
17654
+ fov?: number | undefined;
17655
+ zoom?: number | undefined;
17656
+ } | undefined;
17657
+ metadata: Record<string, unknown>;
17658
+ provenance?: {
17659
+ refs: {
17660
+ ns?: string | undefined;
17661
+ id: string;
17662
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
17663
+ }[];
17664
+ lineage?: {
17665
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
17666
+ fromIds: string[];
17667
+ } | undefined;
17668
+ } | undefined;
17669
+ id: `bvent_${string}`;
17670
+ material?: {
17671
+ id?: string | undefined;
17672
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
17673
+ properties?: {
17674
+ color: string;
17675
+ roughness: number;
17676
+ metalness: number;
17677
+ opacity: number;
17678
+ transparent: boolean;
17679
+ side: "back" | "double" | "front";
17680
+ } | undefined;
17681
+ texture?: {
17682
+ url: string;
17683
+ repeat?: [number, number] | undefined;
17684
+ scale?: number | undefined;
17685
+ offset?: [number, number] | undefined;
17686
+ normalMap?: string | undefined;
17687
+ normalScale?: number | undefined;
17688
+ bumpMap?: string | undefined;
17689
+ bumpScale?: number | undefined;
17690
+ } | undefined;
17691
+ } | undefined;
17692
+ slots?: Record<string, string> | undefined;
17693
+ materialPreset: string;
17694
+ roofSegmentId?: string | undefined;
17695
+ position: [number, number, number];
17696
+ rotation: number;
17697
+ width: number;
17698
+ depth: number;
17699
+ height: number;
17700
+ hoodOverhang: number;
17701
+ topTaper: number;
17702
+ capHeight: number;
17703
+ capGap: number;
17704
+ domeCurvature: number;
17705
+ baseInset: number;
17706
+ baseHeight: number;
17707
+ cornerBevel: number;
17708
+ style: "box" | "cap" | "dome";
17709
+ type: "box-vent";
17710
17710
  } | {
17711
17711
  object: "node";
17712
17712
  name?: string | undefined;