@pascal-app/core 1.1.0 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. package/dist/agent-operations/__fixtures__/cases.d.ts +3 -2
  2. package/dist/agent-operations/__fixtures__/cases.d.ts.map +1 -1
  3. package/dist/agent-operations/__fixtures__/place-items-cases.d.ts.map +1 -1
  4. package/dist/agent-operations/__fixtures__/place-items-cases.js +28 -0
  5. package/dist/agent-operations/__fixtures__/roof-bearing-cases.d.ts +12209 -12209
  6. package/dist/agent-operations/asset-catalog.d.ts +21 -11
  7. package/dist/agent-operations/asset-catalog.d.ts.map +1 -1
  8. package/dist/agent-operations/asset-catalog.js +28 -10
  9. package/dist/agent-operations/asset-views.d.ts +8 -3
  10. package/dist/agent-operations/asset-views.d.ts.map +1 -1
  11. package/dist/agent-operations/asset-views.js +19 -3
  12. package/dist/agent-operations/batch.d.ts +7 -1
  13. package/dist/agent-operations/batch.d.ts.map +1 -1
  14. package/dist/agent-operations/batch.js +17 -2
  15. package/dist/agent-operations/catalog-asset.d.ts +15 -0
  16. package/dist/agent-operations/catalog-asset.d.ts.map +1 -0
  17. package/dist/agent-operations/catalog-asset.js +4 -0
  18. package/dist/agent-operations/circulation-spaces.d.ts +2963 -2963
  19. package/dist/agent-operations/design-brief.d.ts.map +1 -1
  20. package/dist/agent-operations/design-brief.js +2 -0
  21. package/dist/agent-operations/furnish-room.d.ts.map +1 -1
  22. package/dist/agent-operations/furnish-room.js +2 -1
  23. package/dist/agent-operations/index.d.ts +3 -0
  24. package/dist/agent-operations/index.d.ts.map +1 -1
  25. package/dist/agent-operations/index.js +4 -1
  26. package/dist/agent-operations/level-reads.d.ts.map +1 -1
  27. package/dist/agent-operations/level-reads.js +4 -1
  28. package/dist/agent-operations/place-in-room.d.ts.map +1 -1
  29. package/dist/agent-operations/place-in-room.js +2 -1
  30. package/dist/agent-operations/place-items.d.ts.map +1 -1
  31. package/dist/agent-operations/place-items.js +2 -1
  32. package/dist/agent-operations/scene-queries.d.ts +585 -585
  33. package/dist/agent-operations/scene-view.d.ts.map +1 -1
  34. package/dist/agent-operations/scene-view.js +38 -13
  35. package/dist/agent-operations/search-assets.d.ts.map +1 -1
  36. package/dist/agent-operations/search-assets.js +6 -0
  37. package/dist/agent-operations/types.d.ts +3 -2
  38. package/dist/agent-operations/types.d.ts.map +1 -1
  39. package/dist/agent-operations/usage-checks.js +18 -3
  40. package/dist/agent-tools/assets.js +1 -1
  41. package/dist/building/__fixtures__/wall-opening-cases.d.ts +234 -234
  42. package/dist/building/level-duplication.d.ts +3516 -3516
  43. package/dist/building/level-duplication.d.ts.map +1 -1
  44. package/dist/building/level-duplication.js +3 -1
  45. package/dist/building/wall-openings.d.ts +75 -75
  46. package/dist/commands/structure/shared.d.ts +3407 -3407
  47. package/dist/commands/structure/zone-wall-merge.d.ts +566 -566
  48. package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts +585 -585
  49. package/dist/index.d.ts +2 -0
  50. package/dist/index.d.ts.map +1 -1
  51. package/dist/index.js +2 -0
  52. package/dist/lib/__fixtures__/mezzanine.d.ts +9262 -9262
  53. package/dist/lib/absorb-wall-separators.d.ts +1344 -1344
  54. package/dist/lib/asset-storage.d.ts.map +1 -1
  55. package/dist/lib/asset-storage.js +3 -0
  56. package/dist/lib/floor-foundation-datum.d.ts.map +1 -1
  57. package/dist/lib/floor-foundation-datum.js +5 -1
  58. package/dist/lib/floorplan/context.d.ts +95 -0
  59. package/dist/lib/floorplan/context.d.ts.map +1 -0
  60. package/dist/lib/floorplan/context.js +155 -0
  61. package/dist/lib/floorplan/index.d.ts +6 -0
  62. package/dist/lib/floorplan/index.d.ts.map +1 -0
  63. package/dist/lib/floorplan/index.js +5 -0
  64. package/dist/lib/floorplan/marks.d.ts +71 -0
  65. package/dist/lib/floorplan/marks.d.ts.map +1 -0
  66. package/dist/lib/floorplan/marks.js +157 -0
  67. package/dist/lib/floorplan/plan-math.d.ts +18 -0
  68. package/dist/lib/floorplan/plan-math.d.ts.map +1 -0
  69. package/dist/lib/floorplan/plan-math.js +82 -0
  70. package/dist/lib/floorplan/svg-paths.d.ts +17 -0
  71. package/dist/lib/floorplan/svg-paths.d.ts.map +1 -0
  72. package/dist/lib/floorplan/svg-paths.js +92 -0
  73. package/dist/lib/floorplan/wall-affordances.d.ts +31 -0
  74. package/dist/lib/floorplan/wall-affordances.d.ts.map +1 -0
  75. package/dist/lib/floorplan/wall-affordances.js +24 -0
  76. package/dist/registry/__fixtures__/roof-planes.d.ts +69 -0
  77. package/dist/registry/__fixtures__/roof-planes.d.ts.map +1 -0
  78. package/dist/registry/__fixtures__/roof-planes.js +59 -0
  79. package/dist/registry/index.d.ts +2 -1
  80. package/dist/registry/index.d.ts.map +1 -1
  81. package/dist/registry/index.js +1 -0
  82. package/dist/registry/roofs.d.ts +34 -0
  83. package/dist/registry/roofs.d.ts.map +1 -0
  84. package/dist/registry/roofs.js +61 -0
  85. package/dist/registry/types.d.ts +30 -0
  86. package/dist/registry/types.d.ts.map +1 -1
  87. package/dist/registry/validate-relations.d.ts +5 -1
  88. package/dist/registry/validate-relations.d.ts.map +1 -1
  89. package/dist/registry/validate-relations.js +6 -2
  90. package/dist/schema/asset-url.d.ts +8 -0
  91. package/dist/schema/asset-url.d.ts.map +1 -1
  92. package/dist/schema/asset-url.js +17 -0
  93. package/dist/schema/nodes/roof.d.ts +1 -1
  94. package/dist/schema/nodes/roof.d.ts.map +1 -1
  95. package/dist/schema/nodes/roof.js +13 -8
  96. package/dist/schema/types.d.ts +1 -1
  97. package/dist/services/roof-level.d.ts.map +1 -1
  98. package/dist/services/roof-level.js +12 -2
  99. package/dist/services/roof-move.d.ts +4 -2
  100. package/dist/services/roof-move.d.ts.map +1 -1
  101. package/dist/services/roof-move.js +21 -9
  102. package/dist/spatial/usage-field/findings.d.ts +7 -1
  103. package/dist/spatial/usage-field/findings.d.ts.map +1 -1
  104. package/dist/spatial/usage-field/findings.js +42 -10
  105. package/dist/spatial/usage-field/path.d.ts.map +1 -1
  106. package/dist/spatial/usage-field/path.js +28 -18
  107. package/dist/store/actions/node-actions.d.ts +1641 -1641
  108. package/dist/store/scene-annotations.d.ts +1778 -1778
  109. package/dist/systems/document-reconcile.d.ts.map +1 -1
  110. package/dist/systems/document-reconcile.js +1 -2
  111. package/dist/systems/roof/roof-elevation.d.ts +11 -6
  112. package/dist/systems/roof/roof-elevation.d.ts.map +1 -1
  113. package/dist/systems/roof/roof-elevation.js +24 -11
  114. package/dist/systems/slab/__fixtures__/floor-step.d.ts +1622 -1622
  115. package/dist/systems/slab/__fixtures__/raised-room.d.ts +585 -585
  116. package/dist/systems/stair/stair-opening-preview.d.ts +1919 -1919
  117. package/dist/utils/ensure-scene-openings.d.ts +3409 -3409
  118. package/dist/utils/floor-plate-migration.d.ts +1344 -1344
  119. package/dist/utils/owned-floor-opening-migration.d.ts +1344 -1344
  120. package/dist/utils/reconcile-structure-on-load.d.ts +1641 -1641
  121. package/dist/utils/scene-bounds.d.ts +32 -0
  122. package/dist/utils/scene-bounds.d.ts.map +1 -0
  123. package/dist/utils/scene-bounds.js +201 -0
  124. package/package.json +1 -1
@@ -24,126 +24,54 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
24
24
  fromIds: string[];
25
25
  } | undefined;
26
26
  } | undefined;
27
- id: `block_${string}`;
28
- children: string[];
29
- position: [number, number, number];
30
- rotation: number;
31
- supportSlabId?: string | undefined;
32
- topology: {
33
- vertices: {
34
- id: string;
35
- position: [number, number, number];
36
- }[];
37
- edges: {
38
- id: string;
39
- vertexIds: [string, string];
40
- }[];
41
- faces: {
42
- id: string;
43
- vertexIds: string[];
44
- materialSlot: string;
45
- }[];
46
- };
47
- slots: Record<string, string>;
48
- slotNames: Record<string, string>;
49
- type: "block";
50
- } | {
51
- object: "node";
52
- name?: string | undefined;
53
- parentId: string | null;
54
- visible: boolean;
55
- camera?: {
56
- position: [number, number, number];
57
- target: [number, number, number];
58
- mode: "orthographic" | "perspective";
59
- fov?: number | undefined;
60
- zoom?: number | undefined;
61
- } | undefined;
62
- metadata: Record<string, unknown>;
63
- provenance?: {
64
- refs: {
65
- ns?: string | undefined;
66
- id: string;
67
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
68
- }[];
69
- lineage?: {
70
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
71
- fromIds: string[];
27
+ id: `elevator_${string}`;
28
+ material?: {
29
+ id?: string | undefined;
30
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
31
+ properties?: {
32
+ color: string;
33
+ roughness: number;
34
+ metalness: number;
35
+ opacity: number;
36
+ transparent: boolean;
37
+ side: "back" | "double" | "front";
72
38
  } | undefined;
73
- } | undefined;
74
- id: `construction-dimension_${string}`;
75
- anchors: ({
76
- kind: "feature";
77
- reference: {
78
- nodeId: string;
79
- featureId: string;
80
- parameters?: Record<string, string | number | boolean> | undefined;
81
- };
82
- fallback: [number, number, number];
83
- } | [number, number, number])[];
84
- baseline: {
85
- origin: [number, number];
86
- direction: [number, number];
87
- };
88
- chainMode: "continuous" | "point-to-point";
89
- mode: "angular" | "arc-length" | "center-mark" | "chord" | "coordinate" | "diameter" | "linear" | "radius";
90
- featureCount: number;
91
- showCenterMark: boolean;
92
- prefix: string;
93
- suffix: string;
94
- textOverride: string | null;
95
- datumPolicy: "centerline" | "finish-face" | "structural-face" | "wall-face";
96
- terminator: "architectural-tick" | "dot" | "filled-arrow" | "open-arrow";
97
- textPosition: "above" | "centered";
98
- imperialPrecision: "1" | "1/16" | "1/2" | "1/4" | "1/8";
99
- metricNotation: "meters" | "millimeters";
100
- extensionStartGap: number;
101
- extensionOvershoot: number;
102
- drawingType: "floor-plan" | "foundation-plan" | "reflected-ceiling-plan" | "roof-plan" | "site-plan";
103
- drawingOverrides: {
104
- drawingType: "floor-plan" | "foundation-plan" | "reflected-ceiling-plan" | "roof-plan" | "site-plan";
105
- presentation: "controlled" | "omit" | "shown";
106
- suppressedSegmentIndexes: number[];
107
- }[];
108
- controllingDimensionId: `construction-dimension_${string}` | null;
109
- type: "construction-dimension";
110
- } | {
111
- object: "node";
112
- name?: string | undefined;
113
- parentId: string | null;
114
- visible: boolean;
115
- camera?: {
116
- position: [number, number, number];
117
- target: [number, number, number];
118
- mode: "orthographic" | "perspective";
119
- fov?: number | undefined;
120
- zoom?: number | undefined;
121
- } | undefined;
122
- metadata: Record<string, unknown>;
123
- provenance?: {
124
- refs: {
125
- ns?: string | undefined;
126
- id: string;
127
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
128
- }[];
129
- lineage?: {
130
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
131
- fromIds: string[];
39
+ texture?: {
40
+ url: string;
41
+ repeat?: [number, number] | undefined;
42
+ scale?: number | undefined;
43
+ offset?: [number, number] | undefined;
44
+ normalMap?: string | undefined;
45
+ normalScale?: number | undefined;
46
+ bumpMap?: string | undefined;
47
+ bumpScale?: number | undefined;
132
48
  } | undefined;
133
49
  } | undefined;
134
- id: `duct-terminal_${string}`;
50
+ materialPreset?: string | undefined;
51
+ slots?: Record<string, string> | undefined;
135
52
  position: [number, number, number];
136
53
  rotation: number;
137
- supportSlabId?: string | undefined;
138
- terminalType: "diffuser" | "return-grille" | "supply-register";
139
- mount: "ceiling" | "floor" | "wall";
140
54
  width: number;
141
55
  depth: number;
142
- collarShape: "oval" | "rect" | "round";
143
- collarDiameter: number;
144
- collarWidth: number;
145
- collarHeight: number;
146
- type: "duct-terminal";
56
+ shaftWidth?: number | undefined;
57
+ shaftDepth?: number | undefined;
58
+ shaftWallThickness: number;
59
+ shaftStyle: "glass" | "solid";
60
+ cabHeight: number;
61
+ doorWidth: number;
62
+ doorHeight: number;
63
+ doorStyle: "center-opening" | "single-left" | "single-right";
64
+ doorPanelStyle: "glass-frame" | "segmented-panel" | "solid-panel";
65
+ fromLevelId: string | null;
66
+ toLevelId: string | null;
67
+ servedLevelIds?: string[] | undefined;
68
+ disabledLevelIds: string[];
69
+ serviceOnlyLevelIds: string[];
70
+ defaultLevelId: string | null;
71
+ speed: number;
72
+ doorDurationMs: number;
73
+ dwellMs: number;
74
+ type: "elevator";
147
75
  } | {
148
76
  object: "node";
149
77
  name?: string | undefined;
@@ -168,146 +96,232 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
168
96
  fromIds: string[];
169
97
  } | undefined;
170
98
  } | undefined;
171
- id: `guide_${string}`;
172
- url: string;
99
+ type: "item";
100
+ id: `item_${string}`;
173
101
  position: [number, number, number];
174
102
  rotation: [number, number, number];
175
- scale: number;
176
- opacity: number;
177
- scaleReference: {
178
- start: [number, number];
179
- end: [number, number];
180
- realLengthMeters: number;
181
- measuredLengthUnits: number;
182
- metersPerUnit: number;
183
- displayLength?: number | undefined;
184
- displayUnit?: "centimeters" | "feet" | "inches" | "meters" | undefined;
185
- label: string;
186
- } | null;
187
- type: "guide";
188
- } | {
189
- object: "node";
190
- name?: string | undefined;
191
- parentId: string | null;
192
- visible: boolean;
193
- camera?: {
194
- position: [number, number, number];
195
- target: [number, number, number];
196
- mode: "orthographic" | "perspective";
197
- fov?: number | undefined;
198
- zoom?: number | undefined;
199
- } | undefined;
200
- metadata: Record<string, unknown>;
201
- provenance?: {
202
- refs: {
203
- ns?: string | undefined;
204
- id: string;
205
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
206
- }[];
207
- lineage?: {
208
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
209
- fromIds: string[];
210
- } | undefined;
211
- } | undefined;
212
- id: `liquid-line_${string}`;
213
- path: [number, number, number][];
214
- diameter: number;
215
- type: "liquid-line";
216
- } | {
217
- object: "node";
218
- name?: string | undefined;
219
- parentId: string | null;
220
- visible: boolean;
221
- camera?: {
222
- position: [number, number, number];
223
- target: [number, number, number];
224
- mode: "orthographic" | "perspective";
225
- fov?: number | undefined;
226
- zoom?: number | undefined;
227
- } | undefined;
228
- metadata: Record<string, unknown>;
229
- provenance?: {
230
- refs: {
231
- ns?: string | undefined;
232
- id: string;
233
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
234
- }[];
235
- lineage?: {
236
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
237
- fromIds: string[];
238
- } | undefined;
239
- } | undefined;
240
- id: `rseg_${string}`;
241
- material?: {
242
- id?: string | undefined;
243
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
244
- properties?: {
245
- color: string;
246
- roughness: number;
247
- metalness: number;
248
- opacity: number;
249
- transparent: boolean;
250
- side: "back" | "double" | "front";
103
+ scale: [number, number, number];
104
+ side?: "back" | "front" | undefined;
105
+ children: string[];
106
+ wallId?: string | undefined;
107
+ wallT?: number | undefined;
108
+ roofSegmentId?: string | undefined;
109
+ roofFace?: "back" | "front" | "left" | "right" | undefined;
110
+ blockFaceId?: string | undefined;
111
+ supportSlabId?: string | undefined;
112
+ collectionIds?: `collection_${string}`[] | undefined;
113
+ slots?: Record<string, string> | undefined;
114
+ source?: {
115
+ kind: "script";
116
+ meta?: {
117
+ description?: string | undefined;
118
+ category?: string | undefined;
119
+ tags?: string[] | undefined;
120
+ parent?: string | undefined;
251
121
  } | undefined;
252
- texture?: {
253
- url: string;
254
- repeat?: [number, number] | undefined;
255
- scale?: number | undefined;
256
- offset?: [number, number] | undefined;
257
- normalMap?: string | undefined;
258
- normalScale?: number | undefined;
259
- bumpMap?: string | undefined;
260
- bumpScale?: number | undefined;
122
+ language: "bpy" | "three";
123
+ script: string;
124
+ params: Record<string, string | number | boolean>;
125
+ artifact: string;
126
+ manifest: {
127
+ bounds: {
128
+ min: [number, number, number];
129
+ max: [number, number, number];
130
+ };
131
+ params: {
132
+ id: string;
133
+ label?: string | undefined;
134
+ kind: "boolean" | "number" | "string";
135
+ default: string | number | boolean;
136
+ min?: number | undefined;
137
+ max?: number | undefined;
138
+ step?: number | undefined;
139
+ unit?: string | undefined;
140
+ options?: string[] | undefined;
141
+ }[];
142
+ parts: {
143
+ id: string;
144
+ label?: string | undefined;
145
+ type?: string | undefined;
146
+ bounds?: {
147
+ min: [number, number, number];
148
+ max: [number, number, number];
149
+ } | undefined;
150
+ }[];
151
+ surfaces: {
152
+ part?: string | undefined;
153
+ y: number;
154
+ polygon: [number, number][];
155
+ }[];
156
+ slots: {
157
+ id: string;
158
+ label?: string | undefined;
159
+ color?: string | undefined;
160
+ roughness?: number | undefined;
161
+ metalness?: number | undefined;
162
+ transparent?: boolean | undefined;
163
+ emissive?: boolean | undefined;
164
+ }[];
165
+ anchors: {
166
+ id: string;
167
+ position: [number, number, number];
168
+ normal?: [number, number, number] | undefined;
169
+ }[];
170
+ lights: {
171
+ id: string;
172
+ position: [number, number, number];
173
+ color: string;
174
+ intensity: number;
175
+ distance?: number | undefined;
176
+ spot?: {
177
+ direction: [number, number, number];
178
+ angle: number;
179
+ softness: number;
180
+ } | undefined;
181
+ shadows?: boolean | undefined;
182
+ glow?: {
183
+ size: number;
184
+ strength: number;
185
+ } | undefined;
186
+ }[];
187
+ undersides: {
188
+ part?: string | undefined;
189
+ polygon: [number, number][];
190
+ plane: [number, number, number, number];
191
+ }[];
192
+ animations: {
193
+ name: string;
194
+ duration: number;
195
+ }[];
196
+ cutters?: {
197
+ host: "ceiling" | "mounted" | "slab" | "wall";
198
+ polygon: number[][];
199
+ minY: number;
200
+ maxY: number;
201
+ }[] | undefined;
202
+ cutout: boolean;
203
+ collider: boolean;
204
+ shape?: {
205
+ tolerance: number;
206
+ bands: {
207
+ y0: number;
208
+ y1: number;
209
+ polygons: {
210
+ outer: [number, number][];
211
+ holes?: [number, number][][] | undefined;
212
+ }[];
213
+ }[];
214
+ } | undefined;
215
+ triangles: number;
216
+ coverage?: number | undefined;
217
+ uncovered?: {
218
+ min: [number, number];
219
+ max: [number, number];
220
+ }[] | undefined;
221
+ };
222
+ images?: {
223
+ artifact: string;
224
+ thumbnail: string;
225
+ floorPlan: string;
261
226
  } | undefined;
262
227
  } | undefined;
263
- materialPreset?: string | undefined;
264
- topMaterial?: {
265
- id?: string | undefined;
266
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
267
- properties?: {
268
- color: string;
269
- roughness: number;
270
- metalness: number;
271
- opacity: number;
272
- transparent: boolean;
273
- side: "back" | "double" | "front";
228
+ asset: {
229
+ id: string;
230
+ category: string;
231
+ name: string;
232
+ thumbnail: string;
233
+ floorPlanUrl?: string | undefined;
234
+ source: "community" | "library" | "mine";
235
+ isDraft?: boolean | undefined;
236
+ src: string;
237
+ dimensions: [number, number, number];
238
+ attachTo?: "ceiling" | "wall" | "wall-side" | undefined;
239
+ recessed?: boolean | undefined;
240
+ tags?: string[] | undefined;
241
+ functionTags?: string[] | undefined;
242
+ offset: [number, number, number];
243
+ rotation: [number, number, number];
244
+ scale: [number, number, number];
245
+ surface?: {
246
+ height: number;
274
247
  } | undefined;
275
- texture?: {
276
- url: string;
277
- repeat?: [number, number] | undefined;
278
- scale?: number | undefined;
279
- offset?: [number, number] | undefined;
280
- normalMap?: string | undefined;
281
- normalScale?: number | undefined;
282
- bumpMap?: string | undefined;
283
- bumpScale?: number | undefined;
248
+ interactive?: {
249
+ controls: ({
250
+ kind: "toggle";
251
+ label?: string | undefined;
252
+ default?: boolean | undefined;
253
+ } | {
254
+ kind: "slider";
255
+ label: string;
256
+ min: number;
257
+ max: number;
258
+ step: number;
259
+ unit?: string | undefined;
260
+ displayMode: "dial" | "slider" | "stepper";
261
+ default?: number | undefined;
262
+ } | {
263
+ kind: "temperature";
264
+ label: string;
265
+ min: number;
266
+ max: number;
267
+ unit: "C" | "F";
268
+ default?: number | undefined;
269
+ })[];
270
+ effects: ({
271
+ kind: "animation";
272
+ mode?: "ambient" | "open-close" | undefined;
273
+ control?: number | undefined;
274
+ clips: {
275
+ on?: string | undefined;
276
+ off?: string | undefined;
277
+ loop?: string | undefined;
278
+ };
279
+ } | {
280
+ kind: "light";
281
+ color: string;
282
+ intensityRange: [number, number];
283
+ distance?: number | undefined;
284
+ offset: [number, number, number];
285
+ spot?: {
286
+ direction: [number, number, number];
287
+ angle: number;
288
+ softness: number;
289
+ } | undefined;
290
+ shadows?: boolean | undefined;
291
+ glow?: {
292
+ size: number;
293
+ strength: number;
294
+ } | undefined;
295
+ })[];
284
296
  } | undefined;
297
+ };
298
+ } | {
299
+ object: "node";
300
+ name?: string | undefined;
301
+ parentId: string | null;
302
+ visible: boolean;
303
+ camera?: {
304
+ position: [number, number, number];
305
+ target: [number, number, number];
306
+ mode: "orthographic" | "perspective";
307
+ fov?: number | undefined;
308
+ zoom?: number | undefined;
285
309
  } | undefined;
286
- topMaterialPreset?: string | undefined;
287
- edgeMaterial?: {
288
- id?: string | undefined;
289
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
290
- properties?: {
291
- color: string;
292
- roughness: number;
293
- metalness: number;
294
- opacity: number;
295
- transparent: boolean;
296
- side: "back" | "double" | "front";
297
- } | undefined;
298
- texture?: {
299
- url: string;
300
- repeat?: [number, number] | undefined;
301
- scale?: number | undefined;
302
- offset?: [number, number] | undefined;
303
- normalMap?: string | undefined;
304
- normalScale?: number | undefined;
305
- bumpMap?: string | undefined;
306
- bumpScale?: number | undefined;
310
+ metadata: Record<string, unknown>;
311
+ provenance?: {
312
+ refs: {
313
+ ns?: string | undefined;
314
+ id: string;
315
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
316
+ }[];
317
+ lineage?: {
318
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
319
+ fromIds: string[];
307
320
  } | undefined;
308
321
  } | undefined;
309
- edgeMaterialPreset?: string | undefined;
310
- wallMaterial?: {
322
+ id: `ceiling_${string}`;
323
+ children: (`item_${string}` | `procedural-item_${string}`)[];
324
+ material?: {
311
325
  id?: string | undefined;
312
326
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
313
327
  properties?: {
@@ -329,234 +343,50 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
329
343
  bumpScale?: number | undefined;
330
344
  } | undefined;
331
345
  } | undefined;
332
- wallMaterialPreset?: string | undefined;
333
- position: [number, number, number];
334
- rotation: number;
335
- roofType: "barrel" | "conical" | "dutch" | "flat" | "gable" | "gambrel" | "hip" | "mansard" | "shed";
336
- barrelRise?: number | undefined;
337
- barrelSegments?: number | undefined;
338
- roofSystem?: "glazed" | "standard" | undefined;
339
- glazing?: {
340
- across: {
341
- layout: "count" | "fixed-spacing" | "maximum-spacing";
342
- count: number;
343
- spacing: number;
344
- alignment: "center" | "end" | "start";
345
- };
346
- along: {
347
- layout: "count" | "fixed-spacing" | "maximum-spacing";
348
- count: number;
349
- spacing: number;
350
- alignment: "center" | "end" | "start";
351
- };
352
- frameWidth: number;
353
- frameDepth: number;
354
- glassThickness: number;
355
- frameColor: string;
356
- glassColor: string;
357
- glassOpacity: number;
358
- glassRoughness: number;
359
- glazedEnds: boolean;
360
- panelType: "empty" | "glass" | "solid";
361
- panels: {
362
- face: string;
363
- column: number;
364
- row: number;
365
- type: "empty" | "glass" | "solid";
366
- }[];
367
- } | undefined;
346
+ materialPreset?: string | undefined;
368
347
  slots?: Record<string, string> | undefined;
369
- width: number;
370
- depth: number;
371
- conicalStartAngle?: number | undefined;
372
- conicalSweepAngle?: number | undefined;
373
- conicalFullCircle?: boolean | undefined;
374
- trim: {
375
- left: number;
376
- right: number;
377
- front: number;
378
- back: number;
379
- frontLeft: number;
380
- frontRight: number;
381
- backLeft: number;
382
- backRight: number;
383
- frontLeftX: number;
384
- frontLeftZ: number;
385
- frontRightX: number;
386
- frontRightZ: number;
387
- backLeftX: number;
388
- backLeftZ: number;
389
- backRightX: number;
390
- backRightZ: number;
391
- };
392
- wallHeight: number;
393
- pitch: number;
394
- wallThickness: number;
395
- deckThickness: number;
396
- overhang: number;
397
- gableOverhang?: number | undefined;
398
- shingleThickness: number;
348
+ polygon: [number, number][];
349
+ holes: [number, number][][];
350
+ holeMetadata: {
351
+ source: "elevator" | "floor-opening" | "manual" | "room" | "stair";
352
+ openingId?: string | undefined;
353
+ stairId?: string | undefined;
354
+ elevatorId?: string | undefined;
355
+ }[];
356
+ openingIds?: string[] | undefined;
357
+ height?: number | undefined;
399
358
  buildUp?: {
400
359
  presetId?: string | undefined;
401
- roofing: {
402
- kind: "architectural-shingle" | "asphalt-3-tab" | "clay-tile" | "concrete-tile" | "slate" | "standing-seam-metal" | "wood-shake";
403
- thickness: number;
404
- name?: string | undefined;
405
- };
406
- underlayment?: {
407
- kind: "felt-15" | "felt-30" | "ice-and-water" | "synthetic";
360
+ finish?: {
361
+ kind: "drywall" | "plaster" | "wood-plank";
408
362
  thickness: number;
409
363
  name?: string | undefined;
410
364
  } | undefined;
411
- sheathing: {
412
- kind: "osb" | "plywood";
413
- thickness: number;
414
- name?: string | undefined;
415
- };
416
- structure: {
417
- system: "rafters" | "trusses";
365
+ framing?: {
366
+ system: "joists" | "truss-chords";
418
367
  size: "2x10" | "2x12" | "2x4" | "2x6" | "2x8";
419
368
  spacing: number;
420
- };
421
- insulation?: {
422
- kind: "batt" | "blown" | "rigid";
369
+ } | undefined;
370
+ decking?: {
371
+ kind: "osb" | "plywood";
423
372
  thickness: number;
424
373
  name?: string | undefined;
425
374
  } | undefined;
426
- finish?: {
427
- kind: "drywall" | "plaster" | "wood-plank";
375
+ insulation?: {
376
+ kind: "batt" | "blown" | "rigid";
428
377
  thickness: number;
429
378
  name?: string | undefined;
430
379
  } | undefined;
431
380
  } | undefined;
432
- arc?: {
433
- centerX: number;
434
- centerZ: number;
435
- radius: number;
436
- } | undefined;
437
- shedSideInfillSpan?: number | undefined;
438
- shedSideInfillMinX?: number | undefined;
439
- shedSideInfillMaxX?: number | undefined;
440
- shedFootprintPieces?: [number, number][][] | undefined;
441
- shedOpenEndSides?: ("left" | "right")[] | undefined;
442
- shedJointFrame?: {
443
- position: [number, number, number];
444
- rotation: number;
445
- } | undefined;
446
- shedJointOwnerId?: string | undefined;
447
- shedJointNeighborIds?: string[] | undefined;
448
- shedJointScopeId?: string | undefined;
449
- managedByParent: boolean;
450
- wallShell: "auto" | "include" | "omit";
451
- shedInsetEndPanels: boolean;
452
- fascia?: boolean | undefined;
453
- eaveCut?: "plumb" | "plumb-level" | "square" | undefined;
454
- fasciaHighEdge?: boolean | undefined;
455
- fasciaHeight?: number | undefined;
456
- fasciaDepth?: number | undefined;
457
- fasciaMaterial?: {
458
- id?: string | undefined;
459
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
460
- properties?: {
461
- color: string;
462
- roughness: number;
463
- metalness: number;
464
- opacity: number;
465
- transparent: boolean;
466
- side: "back" | "double" | "front";
467
- } | undefined;
468
- texture?: {
469
- url: string;
470
- repeat?: [number, number] | undefined;
471
- scale?: number | undefined;
472
- offset?: [number, number] | undefined;
473
- normalMap?: string | undefined;
474
- normalScale?: number | undefined;
475
- bumpMap?: string | undefined;
476
- bumpScale?: number | undefined;
477
- } | undefined;
478
- } | undefined;
479
- fasciaMaterialPreset?: string | undefined;
480
- heelMaterial?: {
481
- id?: string | undefined;
482
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
483
- properties?: {
484
- color: string;
485
- roughness: number;
486
- metalness: number;
487
- opacity: number;
488
- transparent: boolean;
489
- side: "back" | "double" | "front";
490
- } | undefined;
491
- texture?: {
492
- url: string;
493
- repeat?: [number, number] | undefined;
494
- scale?: number | undefined;
495
- offset?: [number, number] | undefined;
496
- normalMap?: string | undefined;
497
- normalScale?: number | undefined;
498
- bumpMap?: string | undefined;
499
- bumpScale?: number | undefined;
500
- } | undefined;
501
- } | undefined;
502
- heelMaterialPreset?: string | undefined;
503
- gableLeftMaterial?: {
504
- id?: string | undefined;
505
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
506
- properties?: {
507
- color: string;
508
- roughness: number;
509
- metalness: number;
510
- opacity: number;
511
- transparent: boolean;
512
- side: "back" | "double" | "front";
513
- } | undefined;
514
- texture?: {
515
- url: string;
516
- repeat?: [number, number] | undefined;
517
- scale?: number | undefined;
518
- offset?: [number, number] | undefined;
519
- normalMap?: string | undefined;
520
- normalScale?: number | undefined;
521
- bumpMap?: string | undefined;
522
- bumpScale?: number | undefined;
523
- } | undefined;
524
- } | undefined;
525
- gableLeftMaterialPreset?: string | undefined;
526
- gableRightMaterial?: {
527
- id?: string | undefined;
528
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
529
- properties?: {
530
- color: string;
531
- roughness: number;
532
- metalness: number;
533
- opacity: number;
534
- transparent: boolean;
535
- side: "back" | "double" | "front";
536
- } | undefined;
537
- texture?: {
538
- url: string;
539
- repeat?: [number, number] | undefined;
540
- scale?: number | undefined;
541
- offset?: [number, number] | undefined;
542
- normalMap?: string | undefined;
543
- normalScale?: number | undefined;
544
- bumpMap?: string | undefined;
545
- bumpScale?: number | undefined;
546
- } | undefined;
547
- } | undefined;
548
- gableRightMaterialPreset?: string | undefined;
549
- gambrelLowerWidthRatio: number;
550
- gambrelLowerHeightRatio: number;
551
- mansardSteepWidthRatio: number;
552
- mansardSteepHeightRatio: number;
553
- dutchHipWidthRatio: number;
554
- dutchHipHeightRatio: number;
555
- dutchWaistLengthRatio: number;
556
- dutchGabletRake: number;
557
- dutchTopRakeThickness: number;
558
- children: string[];
559
- type: "roof-segment";
381
+ regions?: {
382
+ id: string;
383
+ polygon: [number, number][];
384
+ finish: string | Record<string, unknown>;
385
+ }[] | undefined;
386
+ boundary?: "auto" | undefined;
387
+ zoneId?: string | undefined;
388
+ autoFromWalls: boolean;
389
+ type: "ceiling";
560
390
  } | {
561
391
  object: "node";
562
392
  name?: string | undefined;
@@ -581,39 +411,42 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
581
411
  fromIds: string[];
582
412
  } | undefined;
583
413
  } | undefined;
584
- id: `separator_${string}`;
585
- start: [number, number];
586
- end: [number, number];
587
- type: "separator";
588
- } | {
589
- object: "node";
590
- name?: string | undefined;
591
- parentId: string | null;
592
- visible: boolean;
593
- camera?: {
594
- position: [number, number, number];
595
- target: [number, number, number];
596
- mode: "orthographic" | "perspective";
597
- fov?: number | undefined;
598
- zoom?: number | undefined;
599
- } | undefined;
600
- metadata: Record<string, unknown>;
601
- provenance?: {
602
- refs: {
603
- ns?: string | undefined;
604
- id: string;
605
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
606
- }[];
607
- lineage?: {
608
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
609
- fromIds: string[];
610
- } | undefined;
611
- } | undefined;
612
- id: `spawn_${string}`;
613
- position: [number, number, number];
614
- rotation: number;
615
- supportSlabId?: string | undefined;
616
- type: "spawn";
414
+ id: `construction-dimension_${string}`;
415
+ anchors: ({
416
+ kind: "feature";
417
+ reference: {
418
+ nodeId: string;
419
+ featureId: string;
420
+ parameters?: Record<string, string | number | boolean> | undefined;
421
+ };
422
+ fallback: [number, number, number];
423
+ } | [number, number, number])[];
424
+ baseline: {
425
+ origin: [number, number];
426
+ direction: [number, number];
427
+ };
428
+ chainMode: "continuous" | "point-to-point";
429
+ mode: "angular" | "arc-length" | "center-mark" | "chord" | "coordinate" | "diameter" | "linear" | "radius";
430
+ featureCount: number;
431
+ showCenterMark: boolean;
432
+ prefix: string;
433
+ suffix: string;
434
+ textOverride: string | null;
435
+ datumPolicy: "centerline" | "finish-face" | "structural-face" | "wall-face";
436
+ terminator: "architectural-tick" | "dot" | "filled-arrow" | "open-arrow";
437
+ textPosition: "above" | "centered";
438
+ imperialPrecision: "1" | "1/16" | "1/2" | "1/4" | "1/8";
439
+ metricNotation: "meters" | "millimeters";
440
+ extensionStartGap: number;
441
+ extensionOvershoot: number;
442
+ drawingType: "floor-plan" | "foundation-plan" | "reflected-ceiling-plan" | "roof-plan" | "site-plan";
443
+ drawingOverrides: {
444
+ drawingType: "floor-plan" | "foundation-plan" | "reflected-ceiling-plan" | "roof-plan" | "site-plan";
445
+ presentation: "controlled" | "omit" | "shown";
446
+ suppressedSegmentIndexes: number[];
447
+ }[];
448
+ controllingDimensionId: `construction-dimension_${string}` | null;
449
+ type: "construction-dimension";
617
450
  } | {
618
451
  object: "node";
619
452
  name?: string | undefined;
@@ -638,118 +471,257 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
638
471
  fromIds: string[];
639
472
  } | undefined;
640
473
  } | undefined;
641
- id: `sseg_${string}`;
642
- material?: {
643
- id?: string | undefined;
644
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
645
- properties?: {
646
- color: string;
647
- roughness: number;
648
- metalness: number;
649
- opacity: number;
650
- transparent: boolean;
651
- side: "back" | "double" | "front";
474
+ id: `site_${string}`;
475
+ polygon: {
476
+ type: "polygon";
477
+ points: [number, number][];
478
+ };
479
+ terrain?: {
480
+ type: "heightfield";
481
+ origin: [number, number];
482
+ spacing: number;
483
+ cols: number;
484
+ rows: number;
485
+ step: number;
486
+ heights: string;
487
+ } | undefined;
488
+ showGround?: boolean | undefined;
489
+ presentation?: {
490
+ theme?: string | undefined;
491
+ exposure?: number | undefined;
492
+ shading?: "rendered" | "solid" | undefined;
493
+ edges?: "off" | "soft" | "strong" | undefined;
494
+ shadows?: boolean | undefined;
495
+ lighting?: {
496
+ background?: string | undefined;
497
+ backgroundSky?: string | null | undefined;
498
+ ground?: string | undefined;
499
+ ambient?: {
500
+ color: string;
501
+ intensity: number;
502
+ } | undefined;
503
+ hemi?: {
504
+ sky: string;
505
+ ground: string;
506
+ intensity: number;
507
+ } | undefined;
508
+ lights?: {
509
+ color: string;
510
+ intensity: number;
511
+ position: [number, number, number];
512
+ target?: [number, number, number] | undefined;
513
+ castShadow?: boolean | undefined;
514
+ shadow?: {
515
+ intensity?: number | undefined;
516
+ bias?: number | undefined;
517
+ normalBias?: number | undefined;
518
+ radius?: number | undefined;
519
+ mapSize?: 512 | 1024 | 2048 | 4096 | undefined;
520
+ camera?: {
521
+ left: number;
522
+ right: number;
523
+ top: number;
524
+ bottom: number;
525
+ near: number;
526
+ far: number;
527
+ } | undefined;
528
+ } | undefined;
529
+ }[] | undefined;
530
+ environment?: {
531
+ source: "gradient" | "none" | "room";
532
+ intensity: number;
533
+ } | undefined;
652
534
  } | undefined;
653
- texture?: {
654
- url: string;
655
- repeat?: [number, number] | undefined;
656
- scale?: number | undefined;
657
- offset?: [number, number] | undefined;
658
- normalMap?: string | undefined;
659
- normalScale?: number | undefined;
660
- bumpMap?: string | undefined;
661
- bumpScale?: number | undefined;
535
+ postprocessing?: {
536
+ ambientOcclusion?: boolean | undefined;
537
+ colorGrading?: boolean | undefined;
538
+ } | undefined;
539
+ display?: {
540
+ mode?: "construction" | "finished" | "systems" | undefined;
541
+ families?: Partial<Record<"device" | "exposed-structure" | "fill" | "finish" | "foundation" | "framing" | "inspection" | "insulation" | "masonry" | "membrane" | "run" | "service-space" | "sheathing", boolean>> | undefined;
542
+ disciplines?: Partial<Record<"electrical" | "fire" | "low-voltage" | "mechanical" | "plumbing", boolean>> | undefined;
543
+ xray?: boolean | undefined;
544
+ colorBy?: "material" | "service" | undefined;
662
545
  } | undefined;
663
546
  } | undefined;
664
- materialPreset?: string | undefined;
665
- slots?: Record<string, string> | undefined;
666
- position: [number, number, number];
667
- rotation: number;
668
- segmentType: "landing" | "stair";
669
- width: number;
670
- length: number;
671
- height: number;
672
- stepCount: number;
673
- attachmentSide: "front" | "left" | "right";
674
- fillToFloor: boolean;
675
- construction?: {
676
- mode: "center-stringer" | "open" | "side-stringers" | "solid" | "waist";
677
- waistThickness: number;
678
- treadThickness: number;
679
- riserThickness: number;
680
- nosing: number;
681
- finishThickness: number;
682
- closedRisers: boolean;
683
- stringerWidth: number;
684
- stringerDepth: number;
685
- } | undefined;
686
- winder?: {
687
- turn: "left" | "right";
688
- innerGap: number;
689
- walkingLineOffset: number;
690
- division: "equal-angle" | "equal-going";
547
+ address?: {
548
+ street?: string | undefined;
549
+ city?: string | undefined;
550
+ state?: string | undefined;
551
+ zip?: string | undefined;
691
552
  } | undefined;
692
- thickness: number;
693
- type: "stair-segment";
694
- } | {
695
- object: "node";
696
- name?: string | undefined;
697
- parentId: string | null;
698
- visible: boolean;
699
- camera?: {
700
- position: [number, number, number];
701
- target: [number, number, number];
702
- mode: "orthographic" | "perspective";
703
- fov?: number | undefined;
704
- zoom?: number | undefined;
553
+ parcel?: {
554
+ apn?: string | undefined;
555
+ source?: string | undefined;
556
+ county?: string | undefined;
557
+ state?: string | undefined;
558
+ lotAreaSqFt?: number | undefined;
559
+ originLngLat?: [number, number] | undefined;
560
+ resolvedAt?: string | undefined;
561
+ layer?: string | undefined;
562
+ notes?: string[] | undefined;
705
563
  } | undefined;
706
- metadata: Record<string, unknown>;
707
- provenance?: {
708
- refs: {
709
- ns?: string | undefined;
710
- id: string;
711
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
712
- }[];
713
- lineage?: {
714
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
715
- fromIds: string[];
716
- } | undefined;
564
+ setbacks?: {
565
+ front: number;
566
+ side: number;
567
+ rear: number;
568
+ left?: number | undefined;
569
+ right?: number | undefined;
570
+ streetSide?: number | undefined;
717
571
  } | undefined;
718
- id: `window_${string}`;
719
- material?: {
720
- id?: string | undefined;
721
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
722
- properties?: {
723
- color: string;
724
- roughness: number;
725
- metalness: number;
726
- opacity: number;
727
- transparent: boolean;
728
- side: "back" | "double" | "front";
729
- } | undefined;
730
- texture?: {
731
- url: string;
732
- repeat?: [number, number] | undefined;
733
- scale?: number | undefined;
734
- offset?: [number, number] | undefined;
735
- normalMap?: string | undefined;
736
- normalScale?: number | undefined;
737
- bumpMap?: string | undefined;
738
- bumpScale?: number | undefined;
572
+ setbacksSource?: string | undefined;
573
+ zone?: string | undefined;
574
+ frontEdge?: number | undefined;
575
+ streetEdges?: number[] | undefined;
576
+ sightTriangleFt?: number | undefined;
577
+ northRotation?: number | undefined;
578
+ dossier?: {
579
+ [x: string]: unknown;
580
+ provider: string;
581
+ asOf: string;
582
+ point?: {
583
+ lat?: number | undefined;
584
+ lng?: number | undefined;
585
+ source?: string | undefined;
739
586
  } | undefined;
740
- } | undefined;
741
- slots?: Record<string, string> | undefined;
742
- source?: {
743
- kind: "script";
744
- meta?: {
745
- description?: string | undefined;
746
- category?: string | undefined;
747
- tags?: string[] | undefined;
748
- parent?: string | undefined;
587
+ address?: {
588
+ formatted?: string | undefined;
589
+ precision?: string | undefined;
749
590
  } | undefined;
750
- language: "bpy" | "three";
751
- script: string;
752
- params: Record<string, string | number | boolean>;
591
+ sections: Record<string, {
592
+ [x: string]: unknown;
593
+ status: string;
594
+ summary?: string | undefined;
595
+ reason?: string | undefined;
596
+ source?: {
597
+ name?: string | undefined;
598
+ kind?: string | undefined;
599
+ vintage?: string | undefined;
600
+ attribution?: string | undefined;
601
+ } | undefined;
602
+ }>;
603
+ parcel?: Record<string, unknown> | undefined;
604
+ flood?: Record<string, unknown> | undefined;
605
+ codeBasis?: Record<string, unknown> | undefined;
606
+ zoning?: Record<string, unknown> | undefined;
607
+ utilities?: Record<string, unknown> | undefined;
608
+ soils?: Record<string, unknown> | undefined;
609
+ wetlands?: Record<string, unknown> | undefined;
610
+ structures?: Record<string, unknown> | undefined;
611
+ elevation?: Record<string, unknown> | undefined;
612
+ boundaries?: Record<string, unknown> | undefined;
613
+ } | undefined;
614
+ contourIntervalIn?: number | undefined;
615
+ contours3d?: boolean | undefined;
616
+ terrainContours?: {
617
+ datum: string;
618
+ intervalFt: number;
619
+ source?: string | undefined;
620
+ lines: {
621
+ elevationFt: number;
622
+ points: [number, number][];
623
+ }[];
624
+ } | undefined;
625
+ wallTypes?: {
626
+ id: string;
627
+ label: string;
628
+ assembly: {
629
+ layers: {
630
+ id: string;
631
+ role: "air" | "covering" | "deck" | "fill" | "finish" | "furring" | "glazing" | "insulation" | "lining" | "membrane" | "sheathing" | "shell" | "structure" | "substrate" | "underlay";
632
+ thickness: number;
633
+ core?: true | undefined;
634
+ spacing?: number | undefined;
635
+ material?: string | undefined;
636
+ slot?: string | undefined;
637
+ returns?: boolean | undefined;
638
+ display?: "construction" | "finished" | undefined;
639
+ inset?: number | undefined;
640
+ bottom?: number | undefined;
641
+ lift?: number | undefined;
642
+ src?: string | undefined;
643
+ }[];
644
+ backing?: {
645
+ id: string;
646
+ role: "air" | "covering" | "deck" | "fill" | "finish" | "furring" | "glazing" | "insulation" | "lining" | "membrane" | "sheathing" | "shell" | "structure" | "substrate" | "underlay";
647
+ thickness: number;
648
+ core?: true | undefined;
649
+ spacing?: number | undefined;
650
+ material?: string | undefined;
651
+ slot?: string | undefined;
652
+ returns?: boolean | undefined;
653
+ display?: "construction" | "finished" | undefined;
654
+ inset?: number | undefined;
655
+ bottom?: number | undefined;
656
+ lift?: number | undefined;
657
+ src?: string | undefined;
658
+ }[] | undefined;
659
+ face?: "exterior" | "front" | undefined;
660
+ presetId?: string | undefined;
661
+ cavityInsulation?: string | undefined;
662
+ };
663
+ }[] | undefined;
664
+ children: string[];
665
+ type: "site";
666
+ } | {
667
+ object: "node";
668
+ name?: string | undefined;
669
+ parentId: string | null;
670
+ visible: boolean;
671
+ camera?: {
672
+ position: [number, number, number];
673
+ target: [number, number, number];
674
+ mode: "orthographic" | "perspective";
675
+ fov?: number | undefined;
676
+ zoom?: number | undefined;
677
+ } | undefined;
678
+ metadata: Record<string, unknown>;
679
+ provenance?: {
680
+ refs: {
681
+ ns?: string | undefined;
682
+ id: string;
683
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
684
+ }[];
685
+ lineage?: {
686
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
687
+ fromIds: string[];
688
+ } | undefined;
689
+ } | undefined;
690
+ id: `door_${string}`;
691
+ material?: {
692
+ id?: string | undefined;
693
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
694
+ properties?: {
695
+ color: string;
696
+ roughness: number;
697
+ metalness: number;
698
+ opacity: number;
699
+ transparent: boolean;
700
+ side: "back" | "double" | "front";
701
+ } | undefined;
702
+ texture?: {
703
+ url: string;
704
+ repeat?: [number, number] | undefined;
705
+ scale?: number | undefined;
706
+ offset?: [number, number] | undefined;
707
+ normalMap?: string | undefined;
708
+ normalScale?: number | undefined;
709
+ bumpMap?: string | undefined;
710
+ bumpScale?: number | undefined;
711
+ } | undefined;
712
+ } | undefined;
713
+ slots?: Record<string, string> | undefined;
714
+ source?: {
715
+ kind: "script";
716
+ meta?: {
717
+ description?: string | undefined;
718
+ category?: string | undefined;
719
+ tags?: string[] | undefined;
720
+ parent?: string | undefined;
721
+ } | undefined;
722
+ language: "bpy" | "three";
723
+ script: string;
724
+ params: Record<string, string | number | boolean>;
753
725
  artifact: string;
754
726
  manifest: {
755
727
  bounds: {
@@ -859,12 +831,14 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
859
831
  verticalAnchor?: "floor" | "wall" | undefined;
860
832
  floorThresholdVersion: 0 | 1;
861
833
  wallId?: string | undefined;
862
- dormerId?: string | undefined;
863
- dormerFace?: "back" | "front" | "left" | "right" | undefined;
864
834
  roofSegmentId?: string | undefined;
865
835
  roofFace?: "back" | "front" | "left" | "right" | undefined;
866
836
  width: number;
867
837
  height: number;
838
+ sidelightLeft?: number | undefined;
839
+ sidelightRight?: number | undefined;
840
+ transomHeight?: number | undefined;
841
+ slidingStyle?: "bypass" | "patio" | undefined;
868
842
  mark?: string | undefined;
869
843
  constructionType: "framed" | "masonry";
870
844
  dimensionReference: "finish-opening" | "masonry-opening" | "nominal" | "rough-opening";
@@ -874,52 +848,49 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
874
848
  masonryOpeningHeight?: number | undefined;
875
849
  finishOpeningWidth?: number | undefined;
876
850
  finishOpeningHeight?: number | undefined;
877
- openingKind: "opening" | "window";
878
- windowType: "awning" | "bay" | "bow" | "casement" | "double-hung" | "fixed" | "hopper" | "louvered" | "single-hung" | "sliding" | "tilt-turn";
851
+ doorCategory: "garage" | "interior";
852
+ doorType: "barn" | "double" | "folding" | "french" | "garage-rollup" | "garage-sectional" | "garage-tiltup" | "hinged" | "pocket" | "sliding";
853
+ leafCount: 1 | 2 | 3 | 4 | 6 | 8;
879
854
  operationState: number;
880
- openingDirection?: "inward" | "outward" | undefined;
881
- tiltTurnMode?: "tilt" | "turn" | undefined;
882
- awningDirection: "down" | "up";
883
- casementStyle: "french" | "single";
884
- hingesSide: "left" | "right";
855
+ slideDirection: "left" | "right";
856
+ trackStyle: "none" | "overhead" | "pocket" | "visible";
857
+ garagePanelCount: number;
858
+ openingKind: "door" | "opening";
885
859
  openingShape: "arch" | "rectangle" | "rounded";
886
860
  openingRadiusMode: "all" | "individual";
887
- openingCornerRadii: [number, number, number, number];
861
+ openingTopRadii: [number, number];
888
862
  cornerRadius: number;
889
863
  archHeight: number;
890
864
  openingRevealRadius: number;
891
865
  frameThickness: number;
892
866
  frameDepth?: number | undefined;
893
- windowHandle?: boolean | undefined;
894
- sashGrid?: boolean | undefined;
895
- columnRatios: number[];
896
- rowRatios: number[];
897
- columnDividerThickness: number;
898
- rowDividerThickness: number;
899
- corner?: {
900
- end: "end" | "start";
901
- partnerId: string;
902
- post: "none" | "post";
903
- } | undefined;
904
- sill: boolean;
905
- sillDepth: number;
906
- sillThickness: number;
907
- sillOverhang?: number | undefined;
908
- sillInterior?: boolean | undefined;
909
- sillInteriorDepth?: number | undefined;
910
- sillInteriorThickness?: number | undefined;
911
- sillInteriorOverhang?: number | undefined;
912
- shutters?: "board-batten" | "louvered" | "none" | "panel" | undefined;
913
- shutterWidth?: number | undefined;
914
- shutterOpen?: number | undefined;
915
- shutterSides?: "both" | "left" | "right" | undefined;
916
- rollerShutter?: "box" | "concealed" | "none" | undefined;
917
- rollerShutterBoxHeight?: number | undefined;
918
- rollerShutterOpen?: number | undefined;
867
+ threshold: boolean;
868
+ thresholdHeight: number;
919
869
  casingFaceA?: boolean | undefined;
920
870
  casingFaceB?: boolean | undefined;
921
871
  casingWidth?: number | undefined;
922
- type: "window";
872
+ hingesSide: "left" | "right";
873
+ swingDirection: "inward" | "outward";
874
+ swingAngle: number;
875
+ segments: {
876
+ type: "empty" | "glass" | "panel";
877
+ heightRatio: number;
878
+ columnRatios: number[];
879
+ dividerThickness: number;
880
+ panelDepth: number;
881
+ panelInset: number;
882
+ }[];
883
+ handle: boolean;
884
+ handleStyle?: "bar" | "knob" | "lever" | "lever-curved" | "plate" | undefined;
885
+ handleHeight: number;
886
+ handleSide: "left" | "right";
887
+ contentPadding: [number, number];
888
+ doorCloser: boolean;
889
+ panicBar: boolean;
890
+ panicBarStyle: "crossbar" | "touchbar";
891
+ panicBarRods: boolean;
892
+ panicBarHeight: number;
893
+ type: "door";
923
894
  } | {
924
895
  object: "node";
925
896
  name?: string | undefined;
@@ -944,20 +915,29 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
944
915
  fromIds: string[];
945
916
  } | undefined;
946
917
  } | undefined;
947
- type: "item";
948
- id: `item_${string}`;
949
- position: [number, number, number];
950
- rotation: [number, number, number];
951
- scale: [number, number, number];
952
- side?: "back" | "front" | undefined;
953
- children: string[];
954
- wallId?: string | undefined;
955
- wallT?: number | undefined;
956
- roofSegmentId?: string | undefined;
957
- roofFace?: "back" | "front" | "left" | "right" | undefined;
958
- blockFaceId?: string | undefined;
959
- supportSlabId?: string | undefined;
960
- collectionIds?: `collection_${string}`[] | undefined;
918
+ id: `window_${string}`;
919
+ material?: {
920
+ id?: string | undefined;
921
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
922
+ properties?: {
923
+ color: string;
924
+ roughness: number;
925
+ metalness: number;
926
+ opacity: number;
927
+ transparent: boolean;
928
+ side: "back" | "double" | "front";
929
+ } | undefined;
930
+ texture?: {
931
+ url: string;
932
+ repeat?: [number, number] | undefined;
933
+ scale?: number | undefined;
934
+ offset?: [number, number] | undefined;
935
+ normalMap?: string | undefined;
936
+ normalScale?: number | undefined;
937
+ bumpMap?: string | undefined;
938
+ bumpScale?: number | undefined;
939
+ } | undefined;
940
+ } | undefined;
961
941
  slots?: Record<string, string> | undefined;
962
942
  source?: {
963
943
  kind: "script";
@@ -1073,76 +1053,73 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
1073
1053
  floorPlan: string;
1074
1054
  } | undefined;
1075
1055
  } | undefined;
1076
- asset: {
1077
- id: string;
1078
- category: string;
1079
- name: string;
1080
- thumbnail: string;
1081
- floorPlanUrl?: string | undefined;
1082
- source: "community" | "library" | "mine";
1083
- isDraft?: boolean | undefined;
1084
- src: string;
1085
- dimensions: [number, number, number];
1086
- attachTo?: "ceiling" | "wall" | "wall-side" | undefined;
1087
- recessed?: boolean | undefined;
1088
- tags?: string[] | undefined;
1089
- functionTags?: string[] | undefined;
1090
- offset: [number, number, number];
1091
- rotation: [number, number, number];
1092
- scale: [number, number, number];
1093
- surface?: {
1094
- height: number;
1095
- } | undefined;
1096
- interactive?: {
1097
- controls: ({
1098
- kind: "toggle";
1099
- label?: string | undefined;
1100
- default?: boolean | undefined;
1101
- } | {
1102
- kind: "slider";
1103
- label: string;
1104
- min: number;
1105
- max: number;
1106
- step: number;
1107
- unit?: string | undefined;
1108
- displayMode: "dial" | "slider" | "stepper";
1109
- default?: number | undefined;
1110
- } | {
1111
- kind: "temperature";
1112
- label: string;
1113
- min: number;
1114
- max: number;
1115
- unit: "C" | "F";
1116
- default?: number | undefined;
1117
- })[];
1118
- effects: ({
1119
- kind: "animation";
1120
- mode?: "ambient" | "open-close" | undefined;
1121
- control?: number | undefined;
1122
- clips: {
1123
- on?: string | undefined;
1124
- off?: string | undefined;
1125
- loop?: string | undefined;
1126
- };
1127
- } | {
1128
- kind: "light";
1129
- color: string;
1130
- intensityRange: [number, number];
1131
- distance?: number | undefined;
1132
- offset: [number, number, number];
1133
- spot?: {
1134
- direction: [number, number, number];
1135
- angle: number;
1136
- softness: number;
1137
- } | undefined;
1138
- shadows?: boolean | undefined;
1139
- glow?: {
1140
- size: number;
1141
- strength: number;
1142
- } | undefined;
1143
- })[];
1144
- } | undefined;
1145
- };
1056
+ position: [number, number, number];
1057
+ rotation: [number, number, number];
1058
+ side?: "back" | "front" | undefined;
1059
+ verticalAnchor?: "floor" | "wall" | undefined;
1060
+ floorThresholdVersion: 0 | 1;
1061
+ wallId?: string | undefined;
1062
+ dormerId?: string | undefined;
1063
+ dormerFace?: "back" | "front" | "left" | "right" | undefined;
1064
+ roofSegmentId?: string | undefined;
1065
+ roofFace?: "back" | "front" | "left" | "right" | undefined;
1066
+ width: number;
1067
+ height: number;
1068
+ mark?: string | undefined;
1069
+ constructionType: "framed" | "masonry";
1070
+ dimensionReference: "finish-opening" | "masonry-opening" | "nominal" | "rough-opening";
1071
+ roughOpeningWidth?: number | undefined;
1072
+ roughOpeningHeight?: number | undefined;
1073
+ masonryOpeningWidth?: number | undefined;
1074
+ masonryOpeningHeight?: number | undefined;
1075
+ finishOpeningWidth?: number | undefined;
1076
+ finishOpeningHeight?: number | undefined;
1077
+ openingKind: "opening" | "window";
1078
+ windowType: "awning" | "bay" | "bow" | "casement" | "double-hung" | "fixed" | "hopper" | "louvered" | "single-hung" | "sliding" | "tilt-turn";
1079
+ operationState: number;
1080
+ openingDirection?: "inward" | "outward" | undefined;
1081
+ tiltTurnMode?: "tilt" | "turn" | undefined;
1082
+ awningDirection: "down" | "up";
1083
+ casementStyle: "french" | "single";
1084
+ hingesSide: "left" | "right";
1085
+ openingShape: "arch" | "rectangle" | "rounded";
1086
+ openingRadiusMode: "all" | "individual";
1087
+ openingCornerRadii: [number, number, number, number];
1088
+ cornerRadius: number;
1089
+ archHeight: number;
1090
+ openingRevealRadius: number;
1091
+ frameThickness: number;
1092
+ frameDepth?: number | undefined;
1093
+ windowHandle?: boolean | undefined;
1094
+ sashGrid?: boolean | undefined;
1095
+ columnRatios: number[];
1096
+ rowRatios: number[];
1097
+ columnDividerThickness: number;
1098
+ rowDividerThickness: number;
1099
+ corner?: {
1100
+ end: "end" | "start";
1101
+ partnerId: string;
1102
+ post: "none" | "post";
1103
+ } | undefined;
1104
+ sill: boolean;
1105
+ sillDepth: number;
1106
+ sillThickness: number;
1107
+ sillOverhang?: number | undefined;
1108
+ sillInterior?: boolean | undefined;
1109
+ sillInteriorDepth?: number | undefined;
1110
+ sillInteriorThickness?: number | undefined;
1111
+ sillInteriorOverhang?: number | undefined;
1112
+ shutters?: "board-batten" | "louvered" | "none" | "panel" | undefined;
1113
+ shutterWidth?: number | undefined;
1114
+ shutterOpen?: number | undefined;
1115
+ shutterSides?: "both" | "left" | "right" | undefined;
1116
+ rollerShutter?: "box" | "concealed" | "none" | undefined;
1117
+ rollerShutterBoxHeight?: number | undefined;
1118
+ rollerShutterOpen?: number | undefined;
1119
+ casingFaceA?: boolean | undefined;
1120
+ casingFaceB?: boolean | undefined;
1121
+ casingWidth?: number | undefined;
1122
+ type: "window";
1146
1123
  } | {
1147
1124
  object: "node";
1148
1125
  name?: string | undefined;
@@ -1167,30 +1144,11 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
1167
1144
  fromIds: string[];
1168
1145
  } | undefined;
1169
1146
  } | undefined;
1170
- id: `door_${string}`;
1171
- material?: {
1172
- id?: string | undefined;
1173
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1174
- properties?: {
1175
- color: string;
1176
- roughness: number;
1177
- metalness: number;
1178
- opacity: number;
1179
- transparent: boolean;
1180
- side: "back" | "double" | "front";
1181
- } | undefined;
1182
- texture?: {
1183
- url: string;
1184
- repeat?: [number, number] | undefined;
1185
- scale?: number | undefined;
1186
- offset?: [number, number] | undefined;
1187
- normalMap?: string | undefined;
1188
- normalScale?: number | undefined;
1189
- bumpMap?: string | undefined;
1190
- bumpScale?: number | undefined;
1191
- } | undefined;
1192
- } | undefined;
1193
- slots?: Record<string, string> | undefined;
1147
+ id: `column_${string}`;
1148
+ children: string[];
1149
+ position: [number, number, number];
1150
+ rotation: number;
1151
+ supportSlabId?: string | undefined;
1194
1152
  source?: {
1195
1153
  kind: "script";
1196
1154
  meta?: {
@@ -1305,289 +1263,392 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
1305
1263
  floorPlan: string;
1306
1264
  } | undefined;
1307
1265
  } | undefined;
1308
- position: [number, number, number];
1309
- rotation: [number, number, number];
1310
- side?: "back" | "front" | undefined;
1311
- verticalAnchor?: "floor" | "wall" | undefined;
1312
- floorThresholdVersion: 0 | 1;
1313
- wallId?: string | undefined;
1314
- roofSegmentId?: string | undefined;
1315
- roofFace?: "back" | "front" | "left" | "right" | undefined;
1316
- width: number;
1266
+ style: "cluster" | "dravidian-carved" | "faceted" | "fluted" | "lathe-turned" | "plain";
1267
+ crossSection: "octagonal" | "rectangular" | "round" | "sixteen-sided" | "square";
1317
1268
  height: number;
1318
- sidelightLeft?: number | undefined;
1319
- sidelightRight?: number | undefined;
1320
- transomHeight?: number | undefined;
1321
- slidingStyle?: "bypass" | "patio" | undefined;
1322
- mark?: string | undefined;
1323
- constructionType: "framed" | "masonry";
1324
- dimensionReference: "finish-opening" | "masonry-opening" | "nominal" | "rough-opening";
1325
- roughOpeningWidth?: number | undefined;
1326
- roughOpeningHeight?: number | undefined;
1327
- masonryOpeningWidth?: number | undefined;
1328
- masonryOpeningHeight?: number | undefined;
1329
- finishOpeningWidth?: number | undefined;
1330
- finishOpeningHeight?: number | undefined;
1331
- doorCategory: "garage" | "interior";
1332
- doorType: "barn" | "double" | "folding" | "french" | "garage-rollup" | "garage-sectional" | "garage-tiltup" | "hinged" | "pocket" | "sliding";
1333
- leafCount: 1 | 2 | 3 | 4 | 6 | 8;
1334
- operationState: number;
1335
- slideDirection: "left" | "right";
1336
- trackStyle: "none" | "overhead" | "pocket" | "visible";
1337
- garagePanelCount: number;
1338
- openingKind: "door" | "opening";
1339
- openingShape: "arch" | "rectangle" | "rounded";
1340
- openingRadiusMode: "all" | "individual";
1341
- openingTopRadii: [number, number];
1342
- cornerRadius: number;
1343
- archHeight: number;
1344
- openingRevealRadius: number;
1345
- frameThickness: number;
1346
- frameDepth?: number | undefined;
1347
- threshold: boolean;
1348
- thresholdHeight: number;
1349
- casingFaceA?: boolean | undefined;
1350
- casingFaceB?: boolean | undefined;
1351
- casingWidth?: number | undefined;
1352
- hingesSide: "left" | "right";
1353
- swingDirection: "inward" | "outward";
1354
- swingAngle: number;
1355
- segments: {
1356
- type: "empty" | "glass" | "panel";
1357
- heightRatio: number;
1358
- columnRatios: number[];
1359
- dividerThickness: number;
1360
- panelDepth: number;
1361
- panelInset: number;
1362
- }[];
1363
- handle: boolean;
1364
- handleStyle?: "bar" | "knob" | "lever" | "lever-curved" | "plate" | undefined;
1365
- handleHeight: number;
1366
- handleSide: "left" | "right";
1367
- contentPadding: [number, number];
1368
- doorCloser: boolean;
1369
- panicBar: boolean;
1370
- panicBarStyle: "crossbar" | "touchbar";
1371
- panicBarRods: boolean;
1372
- panicBarHeight: number;
1373
- type: "door";
1374
- } | {
1375
- object: "node";
1376
- name?: string | undefined;
1377
- parentId: string | null;
1378
- visible: boolean;
1379
- camera?: {
1380
- position: [number, number, number];
1381
- target: [number, number, number];
1382
- mode: "orthographic" | "perspective";
1383
- fov?: number | undefined;
1384
- zoom?: number | undefined;
1385
- } | undefined;
1386
- metadata: Record<string, unknown>;
1387
- provenance?: {
1388
- refs: {
1389
- ns?: string | undefined;
1390
- id: string;
1391
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
1392
- }[];
1393
- lineage?: {
1394
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
1395
- fromIds: string[];
1396
- } | undefined;
1397
- } | undefined;
1398
- id: `column_${string}`;
1399
- children: string[];
1400
- position: [number, number, number];
1401
- rotation: number;
1402
- supportSlabId?: string | undefined;
1403
- source?: {
1404
- kind: "script";
1405
- meta?: {
1406
- description?: string | undefined;
1407
- category?: string | undefined;
1408
- tags?: string[] | undefined;
1409
- parent?: string | undefined;
1269
+ radius: number;
1270
+ width: number;
1271
+ depth: number;
1272
+ edgeSoftness: number;
1273
+ baseHeight: number;
1274
+ capitalHeight: number;
1275
+ shaftProfile: "baluster" | "bulged" | "hourglass" | "straight" | "tapered";
1276
+ shaftTaper: number;
1277
+ shaftBulge: number;
1278
+ shaftStartScale: number;
1279
+ shaftEndScale: number;
1280
+ shaftSegmentCount: number;
1281
+ shaftTwistStep: number;
1282
+ shaftCornerRadius: number;
1283
+ shaftDetail: "fluted" | "lathe-turned" | "none" | "panelled" | "spiral";
1284
+ baseStyle: "lotus" | "none" | "panelled-pedestal" | "ribbed-lotus" | "round-rings" | "simple-square" | "square-plinth" | "stepped-square";
1285
+ baseWidthScale: number;
1286
+ baseDepthScale: number;
1287
+ baseTierCount: number;
1288
+ baseStepSpread: number;
1289
+ basePlinthHeightRatio: number;
1290
+ baseRoundBandScale: number;
1291
+ baseNeckScale: number;
1292
+ baseRoundBandCount: number;
1293
+ baseRibCount: number;
1294
+ baseCarvingLevel: number;
1295
+ basePanelInset: number;
1296
+ capitalStyle: "corinthian-leaf" | "doric" | "ionic-volute" | "leaf-carved" | "none" | "rounded" | "simple" | "simple-slab" | "south-indian-bracket" | "stepped" | "volute" | "wood-bracket";
1297
+ capitalWidthScale: number;
1298
+ capitalDepthScale: number;
1299
+ capitalTierCount: number;
1300
+ capitalStepSpread: number;
1301
+ capitalBandCount: number;
1302
+ voluteSize: number;
1303
+ voluteCount: number;
1304
+ leafCount: number;
1305
+ leafRows: number;
1306
+ bracketDepth: number;
1307
+ bracketTierCount: number;
1308
+ pendantCount: number;
1309
+ capitalCarvingLevel: number;
1310
+ ringCount: number;
1311
+ ringPlacement: "bottom" | "ends" | "even" | "top";
1312
+ ringThickness: number;
1313
+ ringSpread: number;
1314
+ fluteCount: number;
1315
+ fluteDepth: number;
1316
+ fluteWidth: number;
1317
+ spiralTwist: number;
1318
+ spiralRibCount: number;
1319
+ panelCount: number;
1320
+ panelInsetDepth: number;
1321
+ panelShape: "arched" | "diamond" | "rectangle";
1322
+ latheRingCount: number;
1323
+ latheRingSpacing: "bottom" | "ends" | "even" | "top";
1324
+ carvingLevel: number;
1325
+ carvingPlacement: "all" | "base" | "capital" | "shaft";
1326
+ lowerBandEnabled: boolean;
1327
+ lowerBandHeight: number;
1328
+ lowerBandCarvingLevel: number;
1329
+ dentilCount: number;
1330
+ beadCount: number;
1331
+ supportStyle: "a-frame" | "box-frame" | "k-brace" | "portal-frame" | "single-strut" | "trestle" | "tripod" | "v-frame" | "vertical" | "x-brace" | "y-frame";
1332
+ braceWidth: number;
1333
+ braceDepth: number;
1334
+ braceBottomSpread: number;
1335
+ braceTopSpread: number;
1336
+ bracePlateEnabled: boolean;
1337
+ role?: "ornament" | "post" | undefined;
1338
+ postBase?: "none" | "pier" | "post-base" | undefined;
1339
+ material?: {
1340
+ id?: string | undefined;
1341
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1342
+ properties?: {
1343
+ color: string;
1344
+ roughness: number;
1345
+ metalness: number;
1346
+ opacity: number;
1347
+ transparent: boolean;
1348
+ side: "back" | "double" | "front";
1410
1349
  } | undefined;
1411
- language: "bpy" | "three";
1412
- script: string;
1413
- params: Record<string, string | number | boolean>;
1414
- artifact: string;
1415
- manifest: {
1416
- bounds: {
1417
- min: [number, number, number];
1418
- max: [number, number, number];
1419
- };
1420
- params: {
1421
- id: string;
1422
- label?: string | undefined;
1423
- kind: "boolean" | "number" | "string";
1424
- default: string | number | boolean;
1425
- min?: number | undefined;
1426
- max?: number | undefined;
1427
- step?: number | undefined;
1428
- unit?: string | undefined;
1429
- options?: string[] | undefined;
1430
- }[];
1431
- parts: {
1432
- id: string;
1433
- label?: string | undefined;
1434
- type?: string | undefined;
1435
- bounds?: {
1436
- min: [number, number, number];
1437
- max: [number, number, number];
1438
- } | undefined;
1439
- }[];
1440
- surfaces: {
1441
- part?: string | undefined;
1442
- y: number;
1443
- polygon: [number, number][];
1444
- }[];
1445
- slots: {
1446
- id: string;
1447
- label?: string | undefined;
1448
- color?: string | undefined;
1449
- roughness?: number | undefined;
1450
- metalness?: number | undefined;
1451
- transparent?: boolean | undefined;
1452
- emissive?: boolean | undefined;
1453
- }[];
1454
- anchors: {
1455
- id: string;
1456
- position: [number, number, number];
1457
- normal?: [number, number, number] | undefined;
1458
- }[];
1459
- lights: {
1460
- id: string;
1461
- position: [number, number, number];
1462
- color: string;
1463
- intensity: number;
1464
- distance?: number | undefined;
1465
- spot?: {
1466
- direction: [number, number, number];
1467
- angle: number;
1468
- softness: number;
1469
- } | undefined;
1470
- shadows?: boolean | undefined;
1471
- glow?: {
1472
- size: number;
1473
- strength: number;
1474
- } | undefined;
1475
- }[];
1476
- undersides: {
1477
- part?: string | undefined;
1478
- polygon: [number, number][];
1479
- plane: [number, number, number, number];
1480
- }[];
1481
- animations: {
1482
- name: string;
1483
- duration: number;
1484
- }[];
1485
- cutters?: {
1486
- host: "ceiling" | "mounted" | "slab" | "wall";
1487
- polygon: number[][];
1488
- minY: number;
1489
- maxY: number;
1490
- }[] | undefined;
1491
- cutout: boolean;
1492
- collider: boolean;
1493
- shape?: {
1494
- tolerance: number;
1495
- bands: {
1496
- y0: number;
1497
- y1: number;
1498
- polygons: {
1499
- outer: [number, number][];
1500
- holes?: [number, number][][] | undefined;
1501
- }[];
1502
- }[];
1503
- } | undefined;
1504
- triangles: number;
1505
- coverage?: number | undefined;
1506
- uncovered?: {
1507
- min: [number, number];
1508
- max: [number, number];
1509
- }[] | undefined;
1350
+ texture?: {
1351
+ url: string;
1352
+ repeat?: [number, number] | undefined;
1353
+ scale?: number | undefined;
1354
+ offset?: [number, number] | undefined;
1355
+ normalMap?: string | undefined;
1356
+ normalScale?: number | undefined;
1357
+ bumpMap?: string | undefined;
1358
+ bumpScale?: number | undefined;
1359
+ } | undefined;
1360
+ } | undefined;
1361
+ materialPreset?: string | undefined;
1362
+ slots?: Record<string, string> | undefined;
1363
+ type: "column";
1364
+ } | {
1365
+ object: "node";
1366
+ name?: string | undefined;
1367
+ parentId: string | null;
1368
+ visible: boolean;
1369
+ camera?: {
1370
+ position: [number, number, number];
1371
+ target: [number, number, number];
1372
+ mode: "orthographic" | "perspective";
1373
+ fov?: number | undefined;
1374
+ zoom?: number | undefined;
1375
+ } | undefined;
1376
+ metadata: Record<string, unknown>;
1377
+ provenance?: {
1378
+ refs: {
1379
+ ns?: string | undefined;
1380
+ id: string;
1381
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
1382
+ }[];
1383
+ lineage?: {
1384
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
1385
+ fromIds: string[];
1386
+ } | undefined;
1387
+ } | undefined;
1388
+ id: `rseg_${string}`;
1389
+ material?: {
1390
+ id?: string | undefined;
1391
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1392
+ properties?: {
1393
+ color: string;
1394
+ roughness: number;
1395
+ metalness: number;
1396
+ opacity: number;
1397
+ transparent: boolean;
1398
+ side: "back" | "double" | "front";
1399
+ } | undefined;
1400
+ texture?: {
1401
+ url: string;
1402
+ repeat?: [number, number] | undefined;
1403
+ scale?: number | undefined;
1404
+ offset?: [number, number] | undefined;
1405
+ normalMap?: string | undefined;
1406
+ normalScale?: number | undefined;
1407
+ bumpMap?: string | undefined;
1408
+ bumpScale?: number | undefined;
1409
+ } | undefined;
1410
+ } | undefined;
1411
+ materialPreset?: string | undefined;
1412
+ topMaterial?: {
1413
+ id?: string | undefined;
1414
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1415
+ properties?: {
1416
+ color: string;
1417
+ roughness: number;
1418
+ metalness: number;
1419
+ opacity: number;
1420
+ transparent: boolean;
1421
+ side: "back" | "double" | "front";
1422
+ } | undefined;
1423
+ texture?: {
1424
+ url: string;
1425
+ repeat?: [number, number] | undefined;
1426
+ scale?: number | undefined;
1427
+ offset?: [number, number] | undefined;
1428
+ normalMap?: string | undefined;
1429
+ normalScale?: number | undefined;
1430
+ bumpMap?: string | undefined;
1431
+ bumpScale?: number | undefined;
1432
+ } | undefined;
1433
+ } | undefined;
1434
+ topMaterialPreset?: string | undefined;
1435
+ edgeMaterial?: {
1436
+ id?: string | undefined;
1437
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1438
+ properties?: {
1439
+ color: string;
1440
+ roughness: number;
1441
+ metalness: number;
1442
+ opacity: number;
1443
+ transparent: boolean;
1444
+ side: "back" | "double" | "front";
1445
+ } | undefined;
1446
+ texture?: {
1447
+ url: string;
1448
+ repeat?: [number, number] | undefined;
1449
+ scale?: number | undefined;
1450
+ offset?: [number, number] | undefined;
1451
+ normalMap?: string | undefined;
1452
+ normalScale?: number | undefined;
1453
+ bumpMap?: string | undefined;
1454
+ bumpScale?: number | undefined;
1455
+ } | undefined;
1456
+ } | undefined;
1457
+ edgeMaterialPreset?: string | undefined;
1458
+ wallMaterial?: {
1459
+ id?: string | undefined;
1460
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1461
+ properties?: {
1462
+ color: string;
1463
+ roughness: number;
1464
+ metalness: number;
1465
+ opacity: number;
1466
+ transparent: boolean;
1467
+ side: "back" | "double" | "front";
1468
+ } | undefined;
1469
+ texture?: {
1470
+ url: string;
1471
+ repeat?: [number, number] | undefined;
1472
+ scale?: number | undefined;
1473
+ offset?: [number, number] | undefined;
1474
+ normalMap?: string | undefined;
1475
+ normalScale?: number | undefined;
1476
+ bumpMap?: string | undefined;
1477
+ bumpScale?: number | undefined;
1478
+ } | undefined;
1479
+ } | undefined;
1480
+ wallMaterialPreset?: string | undefined;
1481
+ position: [number, number, number];
1482
+ rotation: number;
1483
+ roofType: "barrel" | "conical" | "dutch" | "flat" | "gable" | "gambrel" | "hip" | "mansard" | "shed";
1484
+ barrelRise?: number | undefined;
1485
+ barrelSegments?: number | undefined;
1486
+ roofSystem?: "glazed" | "standard" | undefined;
1487
+ glazing?: {
1488
+ across: {
1489
+ layout: "count" | "fixed-spacing" | "maximum-spacing";
1490
+ count: number;
1491
+ spacing: number;
1492
+ alignment: "center" | "end" | "start";
1510
1493
  };
1511
- images?: {
1512
- artifact: string;
1513
- thumbnail: string;
1514
- floorPlan: string;
1494
+ along: {
1495
+ layout: "count" | "fixed-spacing" | "maximum-spacing";
1496
+ count: number;
1497
+ spacing: number;
1498
+ alignment: "center" | "end" | "start";
1499
+ };
1500
+ frameWidth: number;
1501
+ frameDepth: number;
1502
+ glassThickness: number;
1503
+ frameColor: string;
1504
+ glassColor: string;
1505
+ glassOpacity: number;
1506
+ glassRoughness: number;
1507
+ glazedEnds: boolean;
1508
+ panelType: "empty" | "glass" | "solid";
1509
+ panels: {
1510
+ face: string;
1511
+ column: number;
1512
+ row: number;
1513
+ type: "empty" | "glass" | "solid";
1514
+ }[];
1515
+ } | undefined;
1516
+ slots?: Record<string, string> | undefined;
1517
+ width: number;
1518
+ depth: number;
1519
+ conicalStartAngle?: number | undefined;
1520
+ conicalSweepAngle?: number | undefined;
1521
+ conicalFullCircle?: boolean | undefined;
1522
+ trim: {
1523
+ left: number;
1524
+ right: number;
1525
+ front: number;
1526
+ back: number;
1527
+ frontLeft: number;
1528
+ frontRight: number;
1529
+ backLeft: number;
1530
+ backRight: number;
1531
+ frontLeftX: number;
1532
+ frontLeftZ: number;
1533
+ frontRightX: number;
1534
+ frontRightZ: number;
1535
+ backLeftX: number;
1536
+ backLeftZ: number;
1537
+ backRightX: number;
1538
+ backRightZ: number;
1539
+ };
1540
+ wallHeight: number;
1541
+ pitch: number;
1542
+ wallThickness: number;
1543
+ deckThickness: number;
1544
+ overhang: number;
1545
+ gableOverhang?: number | undefined;
1546
+ shingleThickness: number;
1547
+ buildUp?: {
1548
+ presetId?: string | undefined;
1549
+ roofing: {
1550
+ kind: "architectural-shingle" | "asphalt-3-tab" | "clay-tile" | "concrete-tile" | "slate" | "standing-seam-metal" | "wood-shake";
1551
+ thickness: number;
1552
+ name?: string | undefined;
1553
+ };
1554
+ underlayment?: {
1555
+ kind: "felt-15" | "felt-30" | "ice-and-water" | "synthetic";
1556
+ thickness: number;
1557
+ name?: string | undefined;
1558
+ } | undefined;
1559
+ sheathing: {
1560
+ kind: "osb" | "plywood";
1561
+ thickness: number;
1562
+ name?: string | undefined;
1563
+ };
1564
+ structure: {
1565
+ system: "rafters" | "trusses";
1566
+ size: "2x10" | "2x12" | "2x4" | "2x6" | "2x8";
1567
+ spacing: number;
1568
+ };
1569
+ insulation?: {
1570
+ kind: "batt" | "blown" | "rigid";
1571
+ thickness: number;
1572
+ name?: string | undefined;
1573
+ } | undefined;
1574
+ finish?: {
1575
+ kind: "drywall" | "plaster" | "wood-plank";
1576
+ thickness: number;
1577
+ name?: string | undefined;
1578
+ } | undefined;
1579
+ } | undefined;
1580
+ arc?: {
1581
+ centerX: number;
1582
+ centerZ: number;
1583
+ radius: number;
1584
+ } | undefined;
1585
+ shedSideInfillSpan?: number | undefined;
1586
+ shedSideInfillMinX?: number | undefined;
1587
+ shedSideInfillMaxX?: number | undefined;
1588
+ shedFootprintPieces?: [number, number][][] | undefined;
1589
+ shedOpenEndSides?: ("left" | "right")[] | undefined;
1590
+ shedJointFrame?: {
1591
+ position: [number, number, number];
1592
+ rotation: number;
1593
+ } | undefined;
1594
+ shedJointOwnerId?: string | undefined;
1595
+ shedJointNeighborIds?: string[] | undefined;
1596
+ shedJointScopeId?: string | undefined;
1597
+ managedByParent: boolean;
1598
+ wallShell: "auto" | "include" | "omit";
1599
+ shedInsetEndPanels: boolean;
1600
+ fascia?: boolean | undefined;
1601
+ eaveCut?: "plumb" | "plumb-level" | "square" | undefined;
1602
+ fasciaHighEdge?: boolean | undefined;
1603
+ fasciaHeight?: number | undefined;
1604
+ fasciaDepth?: number | undefined;
1605
+ fasciaMaterial?: {
1606
+ id?: string | undefined;
1607
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1608
+ properties?: {
1609
+ color: string;
1610
+ roughness: number;
1611
+ metalness: number;
1612
+ opacity: number;
1613
+ transparent: boolean;
1614
+ side: "back" | "double" | "front";
1615
+ } | undefined;
1616
+ texture?: {
1617
+ url: string;
1618
+ repeat?: [number, number] | undefined;
1619
+ scale?: number | undefined;
1620
+ offset?: [number, number] | undefined;
1621
+ normalMap?: string | undefined;
1622
+ normalScale?: number | undefined;
1623
+ bumpMap?: string | undefined;
1624
+ bumpScale?: number | undefined;
1625
+ } | undefined;
1626
+ } | undefined;
1627
+ fasciaMaterialPreset?: string | undefined;
1628
+ heelMaterial?: {
1629
+ id?: string | undefined;
1630
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1631
+ properties?: {
1632
+ color: string;
1633
+ roughness: number;
1634
+ metalness: number;
1635
+ opacity: number;
1636
+ transparent: boolean;
1637
+ side: "back" | "double" | "front";
1638
+ } | undefined;
1639
+ texture?: {
1640
+ url: string;
1641
+ repeat?: [number, number] | undefined;
1642
+ scale?: number | undefined;
1643
+ offset?: [number, number] | undefined;
1644
+ normalMap?: string | undefined;
1645
+ normalScale?: number | undefined;
1646
+ bumpMap?: string | undefined;
1647
+ bumpScale?: number | undefined;
1515
1648
  } | undefined;
1516
1649
  } | undefined;
1517
- style: "cluster" | "dravidian-carved" | "faceted" | "fluted" | "lathe-turned" | "plain";
1518
- crossSection: "octagonal" | "rectangular" | "round" | "sixteen-sided" | "square";
1519
- height: number;
1520
- radius: number;
1521
- width: number;
1522
- depth: number;
1523
- edgeSoftness: number;
1524
- baseHeight: number;
1525
- capitalHeight: number;
1526
- shaftProfile: "baluster" | "bulged" | "hourglass" | "straight" | "tapered";
1527
- shaftTaper: number;
1528
- shaftBulge: number;
1529
- shaftStartScale: number;
1530
- shaftEndScale: number;
1531
- shaftSegmentCount: number;
1532
- shaftTwistStep: number;
1533
- shaftCornerRadius: number;
1534
- shaftDetail: "fluted" | "lathe-turned" | "none" | "panelled" | "spiral";
1535
- baseStyle: "lotus" | "none" | "panelled-pedestal" | "ribbed-lotus" | "round-rings" | "simple-square" | "square-plinth" | "stepped-square";
1536
- baseWidthScale: number;
1537
- baseDepthScale: number;
1538
- baseTierCount: number;
1539
- baseStepSpread: number;
1540
- basePlinthHeightRatio: number;
1541
- baseRoundBandScale: number;
1542
- baseNeckScale: number;
1543
- baseRoundBandCount: number;
1544
- baseRibCount: number;
1545
- baseCarvingLevel: number;
1546
- basePanelInset: number;
1547
- capitalStyle: "corinthian-leaf" | "doric" | "ionic-volute" | "leaf-carved" | "none" | "rounded" | "simple" | "simple-slab" | "south-indian-bracket" | "stepped" | "volute" | "wood-bracket";
1548
- capitalWidthScale: number;
1549
- capitalDepthScale: number;
1550
- capitalTierCount: number;
1551
- capitalStepSpread: number;
1552
- capitalBandCount: number;
1553
- voluteSize: number;
1554
- voluteCount: number;
1555
- leafCount: number;
1556
- leafRows: number;
1557
- bracketDepth: number;
1558
- bracketTierCount: number;
1559
- pendantCount: number;
1560
- capitalCarvingLevel: number;
1561
- ringCount: number;
1562
- ringPlacement: "bottom" | "ends" | "even" | "top";
1563
- ringThickness: number;
1564
- ringSpread: number;
1565
- fluteCount: number;
1566
- fluteDepth: number;
1567
- fluteWidth: number;
1568
- spiralTwist: number;
1569
- spiralRibCount: number;
1570
- panelCount: number;
1571
- panelInsetDepth: number;
1572
- panelShape: "arched" | "diamond" | "rectangle";
1573
- latheRingCount: number;
1574
- latheRingSpacing: "bottom" | "ends" | "even" | "top";
1575
- carvingLevel: number;
1576
- carvingPlacement: "all" | "base" | "capital" | "shaft";
1577
- lowerBandEnabled: boolean;
1578
- lowerBandHeight: number;
1579
- lowerBandCarvingLevel: number;
1580
- dentilCount: number;
1581
- beadCount: number;
1582
- supportStyle: "a-frame" | "box-frame" | "k-brace" | "portal-frame" | "single-strut" | "trestle" | "tripod" | "v-frame" | "vertical" | "x-brace" | "y-frame";
1583
- braceWidth: number;
1584
- braceDepth: number;
1585
- braceBottomSpread: number;
1586
- braceTopSpread: number;
1587
- bracePlateEnabled: boolean;
1588
- role?: "ornament" | "post" | undefined;
1589
- postBase?: "none" | "pier" | "post-base" | undefined;
1590
- material?: {
1650
+ heelMaterialPreset?: string | undefined;
1651
+ gableLeftMaterial?: {
1591
1652
  id?: string | undefined;
1592
1653
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1593
1654
  properties?: {
@@ -1609,9 +1670,41 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
1609
1670
  bumpScale?: number | undefined;
1610
1671
  } | undefined;
1611
1672
  } | undefined;
1612
- materialPreset?: string | undefined;
1613
- slots?: Record<string, string> | undefined;
1614
- type: "column";
1673
+ gableLeftMaterialPreset?: string | undefined;
1674
+ gableRightMaterial?: {
1675
+ id?: string | undefined;
1676
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1677
+ properties?: {
1678
+ color: string;
1679
+ roughness: number;
1680
+ metalness: number;
1681
+ opacity: number;
1682
+ transparent: boolean;
1683
+ side: "back" | "double" | "front";
1684
+ } | undefined;
1685
+ texture?: {
1686
+ url: string;
1687
+ repeat?: [number, number] | undefined;
1688
+ scale?: number | undefined;
1689
+ offset?: [number, number] | undefined;
1690
+ normalMap?: string | undefined;
1691
+ normalScale?: number | undefined;
1692
+ bumpMap?: string | undefined;
1693
+ bumpScale?: number | undefined;
1694
+ } | undefined;
1695
+ } | undefined;
1696
+ gableRightMaterialPreset?: string | undefined;
1697
+ gambrelLowerWidthRatio: number;
1698
+ gambrelLowerHeightRatio: number;
1699
+ mansardSteepWidthRatio: number;
1700
+ mansardSteepHeightRatio: number;
1701
+ dutchHipWidthRatio: number;
1702
+ dutchHipHeightRatio: number;
1703
+ dutchWaistLengthRatio: number;
1704
+ dutchGabletRake: number;
1705
+ dutchTopRakeThickness: number;
1706
+ children: string[];
1707
+ type: "roof-segment";
1615
1708
  } | {
1616
1709
  object: "node";
1617
1710
  name?: string | undefined;
@@ -1800,7 +1893,7 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
1800
1893
  cavityInsulation?: string | undefined;
1801
1894
  } | undefined;
1802
1895
  slots?: Record<string, string> | undefined;
1803
- children: `rseg_${string}`[];
1896
+ children: string[];
1804
1897
  type: "roof";
1805
1898
  } | {
1806
1899
  object: "node";
@@ -2634,6 +2727,34 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
2634
2727
  frontSide: "exterior" | "interior" | "unknown";
2635
2728
  backSide: "exterior" | "interior" | "unknown";
2636
2729
  type: "wall";
2730
+ } | {
2731
+ object: "node";
2732
+ name?: string | undefined;
2733
+ parentId: string | null;
2734
+ visible: boolean;
2735
+ camera?: {
2736
+ position: [number, number, number];
2737
+ target: [number, number, number];
2738
+ mode: "orthographic" | "perspective";
2739
+ fov?: number | undefined;
2740
+ zoom?: number | undefined;
2741
+ } | undefined;
2742
+ metadata: Record<string, unknown>;
2743
+ provenance?: {
2744
+ refs: {
2745
+ ns?: string | undefined;
2746
+ id: string;
2747
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
2748
+ }[];
2749
+ lineage?: {
2750
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
2751
+ fromIds: string[];
2752
+ } | undefined;
2753
+ } | undefined;
2754
+ id: `separator_${string}`;
2755
+ start: [number, number];
2756
+ end: [number, number];
2757
+ type: "separator";
2637
2758
  } | {
2638
2759
  object: "node";
2639
2760
  name?: string | undefined;
@@ -2800,6 +2921,53 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
2800
2921
  topElevation?: number | undefined;
2801
2922
  supportSlabId?: string | undefined;
2802
2923
  type: "beam";
2924
+ } | {
2925
+ object: "node";
2926
+ name?: string | undefined;
2927
+ parentId: string | null;
2928
+ visible: boolean;
2929
+ camera?: {
2930
+ position: [number, number, number];
2931
+ target: [number, number, number];
2932
+ mode: "orthographic" | "perspective";
2933
+ fov?: number | undefined;
2934
+ zoom?: number | undefined;
2935
+ } | undefined;
2936
+ metadata: Record<string, unknown>;
2937
+ provenance?: {
2938
+ refs: {
2939
+ ns?: string | undefined;
2940
+ id: string;
2941
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
2942
+ }[];
2943
+ lineage?: {
2944
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
2945
+ fromIds: string[];
2946
+ } | undefined;
2947
+ } | undefined;
2948
+ id: `block_${string}`;
2949
+ children: string[];
2950
+ position: [number, number, number];
2951
+ rotation: number;
2952
+ supportSlabId?: string | undefined;
2953
+ topology: {
2954
+ vertices: {
2955
+ id: string;
2956
+ position: [number, number, number];
2957
+ }[];
2958
+ edges: {
2959
+ id: string;
2960
+ vertexIds: [string, string];
2961
+ }[];
2962
+ faces: {
2963
+ id: string;
2964
+ vertexIds: string[];
2965
+ materialSlot: string;
2966
+ }[];
2967
+ };
2968
+ slots: Record<string, string>;
2969
+ slotNames: Record<string, string>;
2970
+ type: "block";
2803
2971
  } | {
2804
2972
  object: "node";
2805
2973
  name?: string | undefined;
@@ -3301,74 +3469,59 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
3301
3469
  fromIds: string[];
3302
3470
  } | undefined;
3303
3471
  } | undefined;
3304
- id: `ceiling_${string}`;
3305
- children: (`item_${string}` | `procedural-item_${string}`)[];
3472
+ id: `sseg_${string}`;
3306
3473
  material?: {
3307
3474
  id?: string | undefined;
3308
3475
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
3309
- properties?: {
3310
- color: string;
3311
- roughness: number;
3312
- metalness: number;
3313
- opacity: number;
3314
- transparent: boolean;
3315
- side: "back" | "double" | "front";
3316
- } | undefined;
3317
- texture?: {
3318
- url: string;
3319
- repeat?: [number, number] | undefined;
3320
- scale?: number | undefined;
3321
- offset?: [number, number] | undefined;
3322
- normalMap?: string | undefined;
3323
- normalScale?: number | undefined;
3324
- bumpMap?: string | undefined;
3325
- bumpScale?: number | undefined;
3326
- } | undefined;
3327
- } | undefined;
3328
- materialPreset?: string | undefined;
3329
- slots?: Record<string, string> | undefined;
3330
- polygon: [number, number][];
3331
- holes: [number, number][][];
3332
- holeMetadata: {
3333
- source: "elevator" | "floor-opening" | "manual" | "room" | "stair";
3334
- openingId?: string | undefined;
3335
- stairId?: string | undefined;
3336
- elevatorId?: string | undefined;
3337
- }[];
3338
- openingIds?: string[] | undefined;
3339
- height?: number | undefined;
3340
- buildUp?: {
3341
- presetId?: string | undefined;
3342
- finish?: {
3343
- kind: "drywall" | "plaster" | "wood-plank";
3344
- thickness: number;
3345
- name?: string | undefined;
3346
- } | undefined;
3347
- framing?: {
3348
- system: "joists" | "truss-chords";
3349
- size: "2x10" | "2x12" | "2x4" | "2x6" | "2x8";
3350
- spacing: number;
3351
- } | undefined;
3352
- decking?: {
3353
- kind: "osb" | "plywood";
3354
- thickness: number;
3355
- name?: string | undefined;
3476
+ properties?: {
3477
+ color: string;
3478
+ roughness: number;
3479
+ metalness: number;
3480
+ opacity: number;
3481
+ transparent: boolean;
3482
+ side: "back" | "double" | "front";
3356
3483
  } | undefined;
3357
- insulation?: {
3358
- kind: "batt" | "blown" | "rigid";
3359
- thickness: number;
3360
- name?: string | undefined;
3484
+ texture?: {
3485
+ url: string;
3486
+ repeat?: [number, number] | undefined;
3487
+ scale?: number | undefined;
3488
+ offset?: [number, number] | undefined;
3489
+ normalMap?: string | undefined;
3490
+ normalScale?: number | undefined;
3491
+ bumpMap?: string | undefined;
3492
+ bumpScale?: number | undefined;
3361
3493
  } | undefined;
3362
3494
  } | undefined;
3363
- regions?: {
3364
- id: string;
3365
- polygon: [number, number][];
3366
- finish: string | Record<string, unknown>;
3367
- }[] | undefined;
3368
- boundary?: "auto" | undefined;
3369
- zoneId?: string | undefined;
3370
- autoFromWalls: boolean;
3371
- type: "ceiling";
3495
+ materialPreset?: string | undefined;
3496
+ slots?: Record<string, string> | undefined;
3497
+ position: [number, number, number];
3498
+ rotation: number;
3499
+ segmentType: "landing" | "stair";
3500
+ width: number;
3501
+ length: number;
3502
+ height: number;
3503
+ stepCount: number;
3504
+ attachmentSide: "front" | "left" | "right";
3505
+ fillToFloor: boolean;
3506
+ construction?: {
3507
+ mode: "center-stringer" | "open" | "side-stringers" | "solid" | "waist";
3508
+ waistThickness: number;
3509
+ treadThickness: number;
3510
+ riserThickness: number;
3511
+ nosing: number;
3512
+ finishThickness: number;
3513
+ closedRisers: boolean;
3514
+ stringerWidth: number;
3515
+ stringerDepth: number;
3516
+ } | undefined;
3517
+ winder?: {
3518
+ turn: "left" | "right";
3519
+ innerGap: number;
3520
+ walkingLineOffset: number;
3521
+ division: "equal-angle" | "equal-going";
3522
+ } | undefined;
3523
+ thickness: number;
3524
+ type: "stair-segment";
3372
3525
  } | {
3373
3526
  object: "node";
3374
3527
  name?: string | undefined;
@@ -3601,6 +3754,47 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
3601
3754
  scale: number;
3602
3755
  opacity: number;
3603
3756
  type: "scan";
3757
+ } | {
3758
+ object: "node";
3759
+ name?: string | undefined;
3760
+ parentId: string | null;
3761
+ visible: boolean;
3762
+ camera?: {
3763
+ position: [number, number, number];
3764
+ target: [number, number, number];
3765
+ mode: "orthographic" | "perspective";
3766
+ fov?: number | undefined;
3767
+ zoom?: number | undefined;
3768
+ } | undefined;
3769
+ metadata: Record<string, unknown>;
3770
+ provenance?: {
3771
+ refs: {
3772
+ ns?: string | undefined;
3773
+ id: string;
3774
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
3775
+ }[];
3776
+ lineage?: {
3777
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
3778
+ fromIds: string[];
3779
+ } | undefined;
3780
+ } | undefined;
3781
+ id: `guide_${string}`;
3782
+ url: string;
3783
+ position: [number, number, number];
3784
+ rotation: [number, number, number];
3785
+ scale: number;
3786
+ opacity: number;
3787
+ scaleReference: {
3788
+ start: [number, number];
3789
+ end: [number, number];
3790
+ realLengthMeters: number;
3791
+ measuredLengthUnits: number;
3792
+ metersPerUnit: number;
3793
+ displayLength?: number | undefined;
3794
+ displayUnit?: "centimeters" | "feet" | "inches" | "meters" | undefined;
3795
+ label: string;
3796
+ } | null;
3797
+ type: "guide";
3604
3798
  } | {
3605
3799
  object: "node";
3606
3800
  name?: string | undefined;
@@ -3708,6 +3902,35 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
3708
3902
  extrusion: [number, number, number];
3709
3903
  };
3710
3904
  type: "measurement";
3905
+ } | {
3906
+ object: "node";
3907
+ name?: string | undefined;
3908
+ parentId: string | null;
3909
+ visible: boolean;
3910
+ camera?: {
3911
+ position: [number, number, number];
3912
+ target: [number, number, number];
3913
+ mode: "orthographic" | "perspective";
3914
+ fov?: number | undefined;
3915
+ zoom?: number | undefined;
3916
+ } | undefined;
3917
+ metadata: Record<string, unknown>;
3918
+ provenance?: {
3919
+ refs: {
3920
+ ns?: string | undefined;
3921
+ id: string;
3922
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
3923
+ }[];
3924
+ lineage?: {
3925
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
3926
+ fromIds: string[];
3927
+ } | undefined;
3928
+ } | undefined;
3929
+ id: `spawn_${string}`;
3930
+ position: [number, number, number];
3931
+ rotation: number;
3932
+ supportSlabId?: string | undefined;
3933
+ type: "spawn";
3711
3934
  } | {
3712
3935
  object: "node";
3713
3936
  name?: string | undefined;
@@ -3898,134 +4121,19 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
3898
4121
  fromIds: string[];
3899
4122
  } | undefined;
3900
4123
  } | undefined;
3901
- id: `hvac-equipment_${string}`;
4124
+ id: `duct-terminal_${string}`;
3902
4125
  position: [number, number, number];
3903
4126
  rotation: number;
3904
4127
  supportSlabId?: string | undefined;
3905
- equipmentType: "air-handler" | "condenser" | "furnace";
3906
- width: number;
3907
- depth: number;
3908
- height: number;
3909
- supplyShape: "oval" | "rect" | "round";
3910
- returnShape: "oval" | "rect" | "round";
3911
- supplyDiameter: number;
3912
- returnDiameter: number;
3913
- supplyWidth: number;
3914
- supplyHeight: number;
3915
- returnWidth: number;
3916
- returnHeight: number;
3917
- type: "hvac-equipment";
3918
- } | {
3919
- object: "node";
3920
- name?: string | undefined;
3921
- parentId: string | null;
3922
- visible: boolean;
3923
- camera?: {
3924
- position: [number, number, number];
3925
- target: [number, number, number];
3926
- mode: "orthographic" | "perspective";
3927
- fov?: number | undefined;
3928
- zoom?: number | undefined;
3929
- } | undefined;
3930
- metadata: Record<string, unknown>;
3931
- provenance?: {
3932
- refs: {
3933
- ns?: string | undefined;
3934
- id: string;
3935
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
3936
- }[];
3937
- lineage?: {
3938
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
3939
- fromIds: string[];
3940
- } | undefined;
3941
- } | undefined;
3942
- id: `lineset_${string}`;
3943
- path: [number, number, number][];
3944
- suctionDiameter: number;
3945
- liquidDiameter: number;
3946
- insulated: boolean;
3947
- type: "lineset";
3948
- } | {
3949
- object: "node";
3950
- name?: string | undefined;
3951
- parentId: string | null;
3952
- visible: boolean;
3953
- camera?: {
3954
- position: [number, number, number];
3955
- target: [number, number, number];
3956
- mode: "orthographic" | "perspective";
3957
- fov?: number | undefined;
3958
- zoom?: number | undefined;
3959
- } | undefined;
3960
- metadata: Record<string, unknown>;
3961
- provenance?: {
3962
- refs: {
3963
- ns?: string | undefined;
3964
- id: string;
3965
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
3966
- }[];
3967
- lineage?: {
3968
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
3969
- fromIds: string[];
3970
- } | undefined;
3971
- } | undefined;
3972
- id: `pipe-segment_${string}`;
3973
- path: [number, number, number][];
3974
- autoHangers?: boolean | undefined;
3975
- hangerOverrides?: Record<string, {
3976
- fraction?: number | undefined;
3977
- skipped?: boolean | undefined;
3978
- hostId?: string | undefined;
3979
- }> | undefined;
3980
- hangerStyle?: "double" | "single" | undefined;
3981
- hangerSpacing?: number | undefined;
3982
- hangerMaxReach?: number | undefined;
3983
- wallAttachment?: {
3984
- wallId: `wall_${string}`;
3985
- side: "back" | "front";
3986
- startUV: [number, number];
3987
- endUV: [number, number];
3988
- offset: number;
3989
- } | undefined;
3990
- diameter: number;
3991
- pipeMaterial: "abs" | "cast-iron" | "pvc";
3992
- system: "vent" | "waste";
3993
- type: "pipe-segment";
3994
- } | {
3995
- object: "node";
3996
- name?: string | undefined;
3997
- parentId: string | null;
3998
- visible: boolean;
3999
- camera?: {
4000
- position: [number, number, number];
4001
- target: [number, number, number];
4002
- mode: "orthographic" | "perspective";
4003
- fov?: number | undefined;
4004
- zoom?: number | undefined;
4005
- } | undefined;
4006
- metadata: Record<string, unknown>;
4007
- provenance?: {
4008
- refs: {
4009
- ns?: string | undefined;
4010
- id: string;
4011
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
4012
- }[];
4013
- lineage?: {
4014
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
4015
- fromIds: string[];
4016
- } | undefined;
4017
- } | undefined;
4018
- id: `pipe-fitting_${string}`;
4019
- position: [number, number, number];
4020
- rotation: [number, number, number];
4021
- fittingType: "cleanout" | "coupling" | "cross" | "elbow" | "end-cap" | "reducer" | "sanitary-tee" | "wye";
4022
- angle: number;
4023
- diameter: number;
4024
- diameter2: number;
4025
- cleanoutStyle: "end" | "inline";
4026
- pipeMaterial: "abs" | "cast-iron" | "pvc";
4027
- system: "vent" | "waste";
4028
- type: "pipe-fitting";
4128
+ terminalType: "diffuser" | "return-grille" | "supply-register";
4129
+ mount: "ceiling" | "floor" | "wall";
4130
+ width: number;
4131
+ depth: number;
4132
+ collarShape: "oval" | "rect" | "round";
4133
+ collarDiameter: number;
4134
+ collarWidth: number;
4135
+ collarHeight: number;
4136
+ type: "duct-terminal";
4029
4137
  } | {
4030
4138
  object: "node";
4031
4139
  name?: string | undefined;
@@ -4050,13 +4158,23 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
4050
4158
  fromIds: string[];
4051
4159
  } | undefined;
4052
4160
  } | undefined;
4053
- id: `pipe-trap_${string}`;
4161
+ id: `hvac-equipment_${string}`;
4054
4162
  position: [number, number, number];
4055
4163
  rotation: number;
4056
- diameter: number;
4057
- pipeMaterial: "abs" | "cast-iron" | "pvc";
4058
- armLengthM: number;
4059
- type: "pipe-trap";
4164
+ supportSlabId?: string | undefined;
4165
+ equipmentType: "air-handler" | "condenser" | "furnace";
4166
+ width: number;
4167
+ depth: number;
4168
+ height: number;
4169
+ supplyShape: "oval" | "rect" | "round";
4170
+ returnShape: "oval" | "rect" | "round";
4171
+ supplyDiameter: number;
4172
+ returnDiameter: number;
4173
+ supplyWidth: number;
4174
+ supplyHeight: number;
4175
+ returnWidth: number;
4176
+ returnHeight: number;
4177
+ type: "hvac-equipment";
4060
4178
  } | {
4061
4179
  object: "node";
4062
4180
  name?: string | undefined;
@@ -4081,12 +4199,12 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
4081
4199
  fromIds: string[];
4082
4200
  } | undefined;
4083
4201
  } | undefined;
4084
- id: `level_${string}`;
4085
- children: (`beam_${string}` | `block_${string}` | `ceiling_${string}` | `column_${string}` | `construction-dimension_${string}` | `duct-fitting_${string}` | `duct-segment_${string}` | `duct-terminal_${string}` | `fence_${string}` | `floor-opening_${string}` | `guide_${string}` | `hvac-equipment_${string}` | `imesh_${string}` | `item_${string}` | `lineset_${string}` | `liquid-line_${string}` | `measurement_${string}` | `pipe-fitting_${string}` | `pipe-segment_${string}` | `pipe-trap_${string}` | `procedural-item_${string}` | `roof_${string}` | `scan_${string}` | `separator_${string}` | `shelf_${string}` | `slab_${string}` | `spawn_${string}` | `stair_${string}` | `structural-grid_${string}` | `wall_${string}` | `zone_${string}`)[];
4086
- level: number;
4087
- baseElevation: number;
4088
- height?: number | undefined;
4089
- type: "level";
4202
+ id: `lineset_${string}`;
4203
+ path: [number, number, number][];
4204
+ suctionDiameter: number;
4205
+ liquidDiameter: number;
4206
+ insulated: boolean;
4207
+ type: "lineset";
4090
4208
  } | {
4091
4209
  object: "node";
4092
4210
  name?: string | undefined;
@@ -4111,56 +4229,13 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
4111
4229
  fromIds: string[];
4112
4230
  } | undefined;
4113
4231
  } | undefined;
4114
- id: `elevator_${string}`;
4115
- material?: {
4116
- id?: string | undefined;
4117
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
4118
- properties?: {
4119
- color: string;
4120
- roughness: number;
4121
- metalness: number;
4122
- opacity: number;
4123
- transparent: boolean;
4124
- side: "back" | "double" | "front";
4125
- } | undefined;
4126
- texture?: {
4127
- url: string;
4128
- repeat?: [number, number] | undefined;
4129
- scale?: number | undefined;
4130
- offset?: [number, number] | undefined;
4131
- normalMap?: string | undefined;
4132
- normalScale?: number | undefined;
4133
- bumpMap?: string | undefined;
4134
- bumpScale?: number | undefined;
4135
- } | undefined;
4136
- } | undefined;
4137
- materialPreset?: string | undefined;
4138
- slots?: Record<string, string> | undefined;
4139
- position: [number, number, number];
4140
- rotation: number;
4141
- width: number;
4142
- depth: number;
4143
- shaftWidth?: number | undefined;
4144
- shaftDepth?: number | undefined;
4145
- shaftWallThickness: number;
4146
- shaftStyle: "glass" | "solid";
4147
- cabHeight: number;
4148
- doorWidth: number;
4149
- doorHeight: number;
4150
- doorStyle: "center-opening" | "single-left" | "single-right";
4151
- doorPanelStyle: "glass-frame" | "segmented-panel" | "solid-panel";
4152
- fromLevelId: string | null;
4153
- toLevelId: string | null;
4154
- servedLevelIds?: string[] | undefined;
4155
- disabledLevelIds: string[];
4156
- serviceOnlyLevelIds: string[];
4157
- defaultLevelId: string | null;
4158
- speed: number;
4159
- doorDurationMs: number;
4160
- dwellMs: number;
4161
- type: "elevator";
4232
+ id: `liquid-line_${string}`;
4233
+ path: [number, number, number][];
4234
+ diameter: number;
4235
+ type: "liquid-line";
4162
4236
  } | {
4163
4237
  object: "node";
4238
+ name?: string | undefined;
4164
4239
  parentId: string | null;
4165
4240
  visible: boolean;
4166
4241
  camera?: {
@@ -4170,6 +4245,7 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
4170
4245
  fov?: number | undefined;
4171
4246
  zoom?: number | undefined;
4172
4247
  } | undefined;
4248
+ metadata: Record<string, unknown>;
4173
4249
  provenance?: {
4174
4250
  refs: {
4175
4251
  ns?: string | undefined;
@@ -4181,13 +4257,28 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
4181
4257
  fromIds: string[];
4182
4258
  } | undefined;
4183
4259
  } | undefined;
4184
- id: `unit_${string}`;
4185
- name: string;
4186
- kind: "apartment" | "commercial" | "common" | "hotel-room";
4187
- members: `zone_${string}`[];
4188
- color: string;
4189
- metadata: Record<string, unknown>;
4190
- type: "unit";
4260
+ id: `pipe-segment_${string}`;
4261
+ path: [number, number, number][];
4262
+ autoHangers?: boolean | undefined;
4263
+ hangerOverrides?: Record<string, {
4264
+ fraction?: number | undefined;
4265
+ skipped?: boolean | undefined;
4266
+ hostId?: string | undefined;
4267
+ }> | undefined;
4268
+ hangerStyle?: "double" | "single" | undefined;
4269
+ hangerSpacing?: number | undefined;
4270
+ hangerMaxReach?: number | undefined;
4271
+ wallAttachment?: {
4272
+ wallId: `wall_${string}`;
4273
+ side: "back" | "front";
4274
+ startUV: [number, number];
4275
+ endUV: [number, number];
4276
+ offset: number;
4277
+ } | undefined;
4278
+ diameter: number;
4279
+ pipeMaterial: "abs" | "cast-iron" | "pvc";
4280
+ system: "vent" | "waste";
4281
+ type: "pipe-segment";
4191
4282
  } | {
4192
4283
  object: "node";
4193
4284
  name?: string | undefined;
@@ -4212,12 +4303,17 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
4212
4303
  fromIds: string[];
4213
4304
  } | undefined;
4214
4305
  } | undefined;
4215
- id: `building_${string}`;
4216
- children: (`elevator_${string}` | `level_${string}` | `unit_${string}`)[];
4306
+ id: `pipe-fitting_${string}`;
4217
4307
  position: [number, number, number];
4218
4308
  rotation: [number, number, number];
4219
- groundLevelId?: `level_${string}` | undefined;
4220
- type: "building";
4309
+ fittingType: "cleanout" | "coupling" | "cross" | "elbow" | "end-cap" | "reducer" | "sanitary-tee" | "wye";
4310
+ angle: number;
4311
+ diameter: number;
4312
+ diameter2: number;
4313
+ cleanoutStyle: "end" | "inline";
4314
+ pipeMaterial: "abs" | "cast-iron" | "pvc";
4315
+ system: "vent" | "waste";
4316
+ type: "pipe-fitting";
4221
4317
  } | {
4222
4318
  object: "node";
4223
4319
  name?: string | undefined;
@@ -4242,126 +4338,13 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
4242
4338
  fromIds: string[];
4243
4339
  } | undefined;
4244
4340
  } | undefined;
4245
- id: `dormer_${string}`;
4246
- material?: {
4247
- id?: string | undefined;
4248
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
4249
- properties?: {
4250
- color: string;
4251
- roughness: number;
4252
- metalness: number;
4253
- opacity: number;
4254
- transparent: boolean;
4255
- side: "back" | "double" | "front";
4256
- } | undefined;
4257
- texture?: {
4258
- url: string;
4259
- repeat?: [number, number] | undefined;
4260
- scale?: number | undefined;
4261
- offset?: [number, number] | undefined;
4262
- normalMap?: string | undefined;
4263
- normalScale?: number | undefined;
4264
- bumpMap?: string | undefined;
4265
- bumpScale?: number | undefined;
4266
- } | undefined;
4267
- } | undefined;
4268
- materialPreset?: string | undefined;
4269
- topMaterial?: {
4270
- id?: string | undefined;
4271
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
4272
- properties?: {
4273
- color: string;
4274
- roughness: number;
4275
- metalness: number;
4276
- opacity: number;
4277
- transparent: boolean;
4278
- side: "back" | "double" | "front";
4279
- } | undefined;
4280
- texture?: {
4281
- url: string;
4282
- repeat?: [number, number] | undefined;
4283
- scale?: number | undefined;
4284
- offset?: [number, number] | undefined;
4285
- normalMap?: string | undefined;
4286
- normalScale?: number | undefined;
4287
- bumpMap?: string | undefined;
4288
- bumpScale?: number | undefined;
4289
- } | undefined;
4290
- } | undefined;
4291
- topMaterialPreset?: string | undefined;
4292
- sideMaterial?: {
4293
- id?: string | undefined;
4294
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
4295
- properties?: {
4296
- color: string;
4297
- roughness: number;
4298
- metalness: number;
4299
- opacity: number;
4300
- transparent: boolean;
4301
- side: "back" | "double" | "front";
4302
- } | undefined;
4303
- texture?: {
4304
- url: string;
4305
- repeat?: [number, number] | undefined;
4306
- scale?: number | undefined;
4307
- offset?: [number, number] | undefined;
4308
- normalMap?: string | undefined;
4309
- normalScale?: number | undefined;
4310
- bumpMap?: string | undefined;
4311
- bumpScale?: number | undefined;
4312
- } | undefined;
4313
- } | undefined;
4314
- sideMaterialPreset?: string | undefined;
4315
- wallMaterial?: {
4316
- id?: string | undefined;
4317
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
4318
- properties?: {
4319
- color: string;
4320
- roughness: number;
4321
- metalness: number;
4322
- opacity: number;
4323
- transparent: boolean;
4324
- side: "back" | "double" | "front";
4325
- } | undefined;
4326
- texture?: {
4327
- url: string;
4328
- repeat?: [number, number] | undefined;
4329
- scale?: number | undefined;
4330
- offset?: [number, number] | undefined;
4331
- normalMap?: string | undefined;
4332
- normalScale?: number | undefined;
4333
- bumpMap?: string | undefined;
4334
- bumpScale?: number | undefined;
4335
- } | undefined;
4336
- } | undefined;
4337
- wallMaterialPreset?: string | undefined;
4338
- roofSegmentId?: string | undefined;
4341
+ id: `pipe-trap_${string}`;
4339
4342
  position: [number, number, number];
4340
- rotation: number;
4341
- width: number;
4342
- depth: number;
4343
- height: number;
4344
- roofType: "barrel" | "conical" | "dutch" | "flat" | "gable" | "gambrel" | "hip" | "mansard" | "shed";
4345
- roofHeight: number;
4346
- shedHighSide: "back" | "front";
4347
- wallSkirtHeight: number;
4348
- windowWidth: number;
4349
- windowHeight: number;
4350
- windowOffsetX: number;
4351
- windowOffsetY: number;
4352
- windowFrameThickness: number;
4353
- windowFrameDepth: number;
4354
- windowColumns: number;
4355
- windowRows: number;
4356
- windowDividerThickness: number;
4357
- windowShape: "arch" | "rectangle" | "rounded";
4358
- windowArchHeight: number;
4359
- windowCornerRadii: [number, number, number, number];
4360
- windowSill: boolean;
4361
- windowSillDepth: number;
4362
- windowSillThickness: number;
4363
- children: `window_${string}`[];
4364
- type: "dormer";
4343
+ rotation: number;
4344
+ diameter: number;
4345
+ pipeMaterial: "abs" | "cast-iron" | "pvc";
4346
+ armLengthM: number;
4347
+ type: "pipe-trap";
4365
4348
  } | {
4366
4349
  object: "node";
4367
4350
  name?: string | undefined;
@@ -4386,57 +4369,14 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
4386
4369
  fromIds: string[];
4387
4370
  } | undefined;
4388
4371
  } | undefined;
4389
- id: `gutter_${string}`;
4390
- material?: {
4391
- id?: string | undefined;
4392
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
4393
- properties?: {
4394
- color: string;
4395
- roughness: number;
4396
- metalness: number;
4397
- opacity: number;
4398
- transparent: boolean;
4399
- side: "back" | "double" | "front";
4400
- } | undefined;
4401
- texture?: {
4402
- url: string;
4403
- repeat?: [number, number] | undefined;
4404
- scale?: number | undefined;
4405
- offset?: [number, number] | undefined;
4406
- normalMap?: string | undefined;
4407
- normalScale?: number | undefined;
4408
- bumpMap?: string | undefined;
4409
- bumpScale?: number | undefined;
4410
- } | undefined;
4411
- } | undefined;
4412
- slots?: Record<string, string> | undefined;
4413
- materialPreset: string;
4414
- roofSegmentId?: string | undefined;
4415
- position: [number, number, number];
4416
- rotation: number;
4417
- length: number;
4418
- arc?: {
4419
- centerX: number;
4420
- centerZ: number;
4421
- radius: number;
4422
- } | undefined;
4423
- size: number;
4424
- thickness: number;
4425
- profile: "box" | "half-round" | "k-style";
4426
- endCapLeft: boolean;
4427
- endCapRight: boolean;
4428
- hangerStyle: "none" | "strap";
4429
- hangerSpacing: number;
4430
- outlets: {
4431
- id: string;
4432
- offset: number;
4433
- diameter: number;
4434
- generatedBy?: "default-downspout" | undefined;
4435
- }[];
4436
- type: "gutter";
4372
+ id: `level_${string}`;
4373
+ children: (`beam_${string}` | `block_${string}` | `ceiling_${string}` | `column_${string}` | `construction-dimension_${string}` | `duct-fitting_${string}` | `duct-segment_${string}` | `duct-terminal_${string}` | `fence_${string}` | `floor-opening_${string}` | `guide_${string}` | `hvac-equipment_${string}` | `imesh_${string}` | `item_${string}` | `lineset_${string}` | `liquid-line_${string}` | `measurement_${string}` | `pipe-fitting_${string}` | `pipe-segment_${string}` | `pipe-trap_${string}` | `procedural-item_${string}` | `roof_${string}` | `scan_${string}` | `separator_${string}` | `shelf_${string}` | `slab_${string}` | `spawn_${string}` | `stair_${string}` | `structural-grid_${string}` | `wall_${string}` | `zone_${string}`)[];
4374
+ level: number;
4375
+ baseElevation: number;
4376
+ height?: number | undefined;
4377
+ type: "level";
4437
4378
  } | {
4438
4379
  object: "node";
4439
- name?: string | undefined;
4440
4380
  parentId: string | null;
4441
4381
  visible: boolean;
4442
4382
  camera?: {
@@ -4446,7 +4386,6 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
4446
4386
  fov?: number | undefined;
4447
4387
  zoom?: number | undefined;
4448
4388
  } | undefined;
4449
- metadata: Record<string, unknown>;
4450
4389
  provenance?: {
4451
4390
  refs: {
4452
4391
  ns?: string | undefined;
@@ -4455,201 +4394,46 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
4455
4394
  }[];
4456
4395
  lineage?: {
4457
4396
  op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
4458
- fromIds: string[];
4459
- } | undefined;
4460
- } | undefined;
4461
- id: `site_${string}`;
4462
- polygon: {
4463
- type: "polygon";
4464
- points: [number, number][];
4465
- };
4466
- terrain?: {
4467
- type: "heightfield";
4468
- origin: [number, number];
4469
- spacing: number;
4470
- cols: number;
4471
- rows: number;
4472
- step: number;
4473
- heights: string;
4474
- } | undefined;
4475
- showGround?: boolean | undefined;
4476
- presentation?: {
4477
- theme?: string | undefined;
4478
- exposure?: number | undefined;
4479
- shading?: "rendered" | "solid" | undefined;
4480
- edges?: "off" | "soft" | "strong" | undefined;
4481
- shadows?: boolean | undefined;
4482
- lighting?: {
4483
- background?: string | undefined;
4484
- backgroundSky?: string | null | undefined;
4485
- ground?: string | undefined;
4486
- ambient?: {
4487
- color: string;
4488
- intensity: number;
4489
- } | undefined;
4490
- hemi?: {
4491
- sky: string;
4492
- ground: string;
4493
- intensity: number;
4494
- } | undefined;
4495
- lights?: {
4496
- color: string;
4497
- intensity: number;
4498
- position: [number, number, number];
4499
- target?: [number, number, number] | undefined;
4500
- castShadow?: boolean | undefined;
4501
- shadow?: {
4502
- intensity?: number | undefined;
4503
- bias?: number | undefined;
4504
- normalBias?: number | undefined;
4505
- radius?: number | undefined;
4506
- mapSize?: 512 | 1024 | 2048 | 4096 | undefined;
4507
- camera?: {
4508
- left: number;
4509
- right: number;
4510
- top: number;
4511
- bottom: number;
4512
- near: number;
4513
- far: number;
4514
- } | undefined;
4515
- } | undefined;
4516
- }[] | undefined;
4517
- environment?: {
4518
- source: "gradient" | "none" | "room";
4519
- intensity: number;
4520
- } | undefined;
4521
- } | undefined;
4522
- postprocessing?: {
4523
- ambientOcclusion?: boolean | undefined;
4524
- colorGrading?: boolean | undefined;
4525
- } | undefined;
4526
- display?: {
4527
- mode?: "construction" | "finished" | "systems" | undefined;
4528
- families?: Partial<Record<"device" | "exposed-structure" | "fill" | "finish" | "foundation" | "framing" | "inspection" | "insulation" | "masonry" | "membrane" | "run" | "service-space" | "sheathing", boolean>> | undefined;
4529
- disciplines?: Partial<Record<"electrical" | "fire" | "low-voltage" | "mechanical" | "plumbing", boolean>> | undefined;
4530
- xray?: boolean | undefined;
4531
- colorBy?: "material" | "service" | undefined;
4532
- } | undefined;
4533
- } | undefined;
4534
- address?: {
4535
- street?: string | undefined;
4536
- city?: string | undefined;
4537
- state?: string | undefined;
4538
- zip?: string | undefined;
4539
- } | undefined;
4540
- parcel?: {
4541
- apn?: string | undefined;
4542
- source?: string | undefined;
4543
- county?: string | undefined;
4544
- state?: string | undefined;
4545
- lotAreaSqFt?: number | undefined;
4546
- originLngLat?: [number, number] | undefined;
4547
- resolvedAt?: string | undefined;
4548
- layer?: string | undefined;
4549
- notes?: string[] | undefined;
4550
- } | undefined;
4551
- setbacks?: {
4552
- front: number;
4553
- side: number;
4554
- rear: number;
4555
- left?: number | undefined;
4556
- right?: number | undefined;
4557
- streetSide?: number | undefined;
4558
- } | undefined;
4559
- setbacksSource?: string | undefined;
4560
- zone?: string | undefined;
4561
- frontEdge?: number | undefined;
4562
- streetEdges?: number[] | undefined;
4563
- sightTriangleFt?: number | undefined;
4564
- northRotation?: number | undefined;
4565
- dossier?: {
4566
- [x: string]: unknown;
4567
- provider: string;
4568
- asOf: string;
4569
- point?: {
4570
- lat?: number | undefined;
4571
- lng?: number | undefined;
4572
- source?: string | undefined;
4573
- } | undefined;
4574
- address?: {
4575
- formatted?: string | undefined;
4576
- precision?: string | undefined;
4577
- } | undefined;
4578
- sections: Record<string, {
4579
- [x: string]: unknown;
4580
- status: string;
4581
- summary?: string | undefined;
4582
- reason?: string | undefined;
4583
- source?: {
4584
- name?: string | undefined;
4585
- kind?: string | undefined;
4586
- vintage?: string | undefined;
4587
- attribution?: string | undefined;
4588
- } | undefined;
4589
- }>;
4590
- parcel?: Record<string, unknown> | undefined;
4591
- flood?: Record<string, unknown> | undefined;
4592
- codeBasis?: Record<string, unknown> | undefined;
4593
- zoning?: Record<string, unknown> | undefined;
4594
- utilities?: Record<string, unknown> | undefined;
4595
- soils?: Record<string, unknown> | undefined;
4596
- wetlands?: Record<string, unknown> | undefined;
4597
- structures?: Record<string, unknown> | undefined;
4598
- elevation?: Record<string, unknown> | undefined;
4599
- boundaries?: Record<string, unknown> | undefined;
4600
- } | undefined;
4601
- contourIntervalIn?: number | undefined;
4602
- contours3d?: boolean | undefined;
4603
- terrainContours?: {
4604
- datum: string;
4605
- intervalFt: number;
4606
- source?: string | undefined;
4607
- lines: {
4608
- elevationFt: number;
4609
- points: [number, number][];
4610
- }[];
4611
- } | undefined;
4612
- wallTypes?: {
4613
- id: string;
4614
- label: string;
4615
- assembly: {
4616
- layers: {
4617
- id: string;
4618
- role: "air" | "covering" | "deck" | "fill" | "finish" | "furring" | "glazing" | "insulation" | "lining" | "membrane" | "sheathing" | "shell" | "structure" | "substrate" | "underlay";
4619
- thickness: number;
4620
- core?: true | undefined;
4621
- spacing?: number | undefined;
4622
- material?: string | undefined;
4623
- slot?: string | undefined;
4624
- returns?: boolean | undefined;
4625
- display?: "construction" | "finished" | undefined;
4626
- inset?: number | undefined;
4627
- bottom?: number | undefined;
4628
- lift?: number | undefined;
4629
- src?: string | undefined;
4630
- }[];
4631
- backing?: {
4632
- id: string;
4633
- role: "air" | "covering" | "deck" | "fill" | "finish" | "furring" | "glazing" | "insulation" | "lining" | "membrane" | "sheathing" | "shell" | "structure" | "substrate" | "underlay";
4634
- thickness: number;
4635
- core?: true | undefined;
4636
- spacing?: number | undefined;
4637
- material?: string | undefined;
4638
- slot?: string | undefined;
4639
- returns?: boolean | undefined;
4640
- display?: "construction" | "finished" | undefined;
4641
- inset?: number | undefined;
4642
- bottom?: number | undefined;
4643
- lift?: number | undefined;
4644
- src?: string | undefined;
4645
- }[] | undefined;
4646
- face?: "exterior" | "front" | undefined;
4647
- presetId?: string | undefined;
4648
- cavityInsulation?: string | undefined;
4649
- };
4650
- }[] | undefined;
4651
- children: string[];
4652
- type: "site";
4397
+ fromIds: string[];
4398
+ } | undefined;
4399
+ } | undefined;
4400
+ id: `unit_${string}`;
4401
+ name: string;
4402
+ kind: "apartment" | "commercial" | "common" | "hotel-room";
4403
+ members: `zone_${string}`[];
4404
+ color: string;
4405
+ metadata: Record<string, unknown>;
4406
+ type: "unit";
4407
+ } | {
4408
+ object: "node";
4409
+ name?: string | undefined;
4410
+ parentId: string | null;
4411
+ visible: boolean;
4412
+ camera?: {
4413
+ position: [number, number, number];
4414
+ target: [number, number, number];
4415
+ mode: "orthographic" | "perspective";
4416
+ fov?: number | undefined;
4417
+ zoom?: number | undefined;
4418
+ } | undefined;
4419
+ metadata: Record<string, unknown>;
4420
+ provenance?: {
4421
+ refs: {
4422
+ ns?: string | undefined;
4423
+ id: string;
4424
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
4425
+ }[];
4426
+ lineage?: {
4427
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
4428
+ fromIds: string[];
4429
+ } | undefined;
4430
+ } | undefined;
4431
+ id: `building_${string}`;
4432
+ children: (`elevator_${string}` | `level_${string}` | `unit_${string}`)[];
4433
+ position: [number, number, number];
4434
+ rotation: [number, number, number];
4435
+ groundLevelId?: `level_${string}` | undefined;
4436
+ type: "building";
4653
4437
  } | {
4654
4438
  object: "node";
4655
4439
  name?: string | undefined;
@@ -5355,6 +5139,78 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
5355
5139
  louverCount: number;
5356
5140
  backRatio: number;
5357
5141
  type: "eyebrow-vent";
5142
+ } | {
5143
+ object: "node";
5144
+ name?: string | undefined;
5145
+ parentId: string | null;
5146
+ visible: boolean;
5147
+ camera?: {
5148
+ position: [number, number, number];
5149
+ target: [number, number, number];
5150
+ mode: "orthographic" | "perspective";
5151
+ fov?: number | undefined;
5152
+ zoom?: number | undefined;
5153
+ } | undefined;
5154
+ metadata: Record<string, unknown>;
5155
+ provenance?: {
5156
+ refs: {
5157
+ ns?: string | undefined;
5158
+ id: string;
5159
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
5160
+ }[];
5161
+ lineage?: {
5162
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
5163
+ fromIds: string[];
5164
+ } | undefined;
5165
+ } | undefined;
5166
+ id: `gutter_${string}`;
5167
+ material?: {
5168
+ id?: string | undefined;
5169
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
5170
+ properties?: {
5171
+ color: string;
5172
+ roughness: number;
5173
+ metalness: number;
5174
+ opacity: number;
5175
+ transparent: boolean;
5176
+ side: "back" | "double" | "front";
5177
+ } | undefined;
5178
+ texture?: {
5179
+ url: string;
5180
+ repeat?: [number, number] | undefined;
5181
+ scale?: number | undefined;
5182
+ offset?: [number, number] | undefined;
5183
+ normalMap?: string | undefined;
5184
+ normalScale?: number | undefined;
5185
+ bumpMap?: string | undefined;
5186
+ bumpScale?: number | undefined;
5187
+ } | undefined;
5188
+ } | undefined;
5189
+ slots?: Record<string, string> | undefined;
5190
+ materialPreset: string;
5191
+ roofSegmentId?: string | undefined;
5192
+ position: [number, number, number];
5193
+ rotation: number;
5194
+ length: number;
5195
+ arc?: {
5196
+ centerX: number;
5197
+ centerZ: number;
5198
+ radius: number;
5199
+ } | undefined;
5200
+ size: number;
5201
+ thickness: number;
5202
+ profile: "box" | "half-round" | "k-style";
5203
+ endCapLeft: boolean;
5204
+ endCapRight: boolean;
5205
+ hangerStyle: "none" | "strap";
5206
+ hangerSpacing: number;
5207
+ outlets: {
5208
+ id: string;
5209
+ offset: number;
5210
+ diameter: number;
5211
+ generatedBy?: "default-downspout" | undefined;
5212
+ }[];
5213
+ type: "gutter";
5358
5214
  } | {
5359
5215
  object: "node";
5360
5216
  name?: string | undefined;
@@ -5647,6 +5503,150 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
5647
5503
  cutoutOffset: number;
5648
5504
  surfaceNormal?: [number, number, number] | undefined;
5649
5505
  type: "skylight";
5506
+ } | {
5507
+ object: "node";
5508
+ name?: string | undefined;
5509
+ parentId: string | null;
5510
+ visible: boolean;
5511
+ camera?: {
5512
+ position: [number, number, number];
5513
+ target: [number, number, number];
5514
+ mode: "orthographic" | "perspective";
5515
+ fov?: number | undefined;
5516
+ zoom?: number | undefined;
5517
+ } | undefined;
5518
+ metadata: Record<string, unknown>;
5519
+ provenance?: {
5520
+ refs: {
5521
+ ns?: string | undefined;
5522
+ id: string;
5523
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
5524
+ }[];
5525
+ lineage?: {
5526
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
5527
+ fromIds: string[];
5528
+ } | undefined;
5529
+ } | undefined;
5530
+ id: `dormer_${string}`;
5531
+ material?: {
5532
+ id?: string | undefined;
5533
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
5534
+ properties?: {
5535
+ color: string;
5536
+ roughness: number;
5537
+ metalness: number;
5538
+ opacity: number;
5539
+ transparent: boolean;
5540
+ side: "back" | "double" | "front";
5541
+ } | undefined;
5542
+ texture?: {
5543
+ url: string;
5544
+ repeat?: [number, number] | undefined;
5545
+ scale?: number | undefined;
5546
+ offset?: [number, number] | undefined;
5547
+ normalMap?: string | undefined;
5548
+ normalScale?: number | undefined;
5549
+ bumpMap?: string | undefined;
5550
+ bumpScale?: number | undefined;
5551
+ } | undefined;
5552
+ } | undefined;
5553
+ materialPreset?: string | undefined;
5554
+ topMaterial?: {
5555
+ id?: string | undefined;
5556
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
5557
+ properties?: {
5558
+ color: string;
5559
+ roughness: number;
5560
+ metalness: number;
5561
+ opacity: number;
5562
+ transparent: boolean;
5563
+ side: "back" | "double" | "front";
5564
+ } | undefined;
5565
+ texture?: {
5566
+ url: string;
5567
+ repeat?: [number, number] | undefined;
5568
+ scale?: number | undefined;
5569
+ offset?: [number, number] | undefined;
5570
+ normalMap?: string | undefined;
5571
+ normalScale?: number | undefined;
5572
+ bumpMap?: string | undefined;
5573
+ bumpScale?: number | undefined;
5574
+ } | undefined;
5575
+ } | undefined;
5576
+ topMaterialPreset?: string | undefined;
5577
+ sideMaterial?: {
5578
+ id?: string | undefined;
5579
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
5580
+ properties?: {
5581
+ color: string;
5582
+ roughness: number;
5583
+ metalness: number;
5584
+ opacity: number;
5585
+ transparent: boolean;
5586
+ side: "back" | "double" | "front";
5587
+ } | undefined;
5588
+ texture?: {
5589
+ url: string;
5590
+ repeat?: [number, number] | undefined;
5591
+ scale?: number | undefined;
5592
+ offset?: [number, number] | undefined;
5593
+ normalMap?: string | undefined;
5594
+ normalScale?: number | undefined;
5595
+ bumpMap?: string | undefined;
5596
+ bumpScale?: number | undefined;
5597
+ } | undefined;
5598
+ } | undefined;
5599
+ sideMaterialPreset?: string | undefined;
5600
+ wallMaterial?: {
5601
+ id?: string | undefined;
5602
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
5603
+ properties?: {
5604
+ color: string;
5605
+ roughness: number;
5606
+ metalness: number;
5607
+ opacity: number;
5608
+ transparent: boolean;
5609
+ side: "back" | "double" | "front";
5610
+ } | undefined;
5611
+ texture?: {
5612
+ url: string;
5613
+ repeat?: [number, number] | undefined;
5614
+ scale?: number | undefined;
5615
+ offset?: [number, number] | undefined;
5616
+ normalMap?: string | undefined;
5617
+ normalScale?: number | undefined;
5618
+ bumpMap?: string | undefined;
5619
+ bumpScale?: number | undefined;
5620
+ } | undefined;
5621
+ } | undefined;
5622
+ wallMaterialPreset?: string | undefined;
5623
+ roofSegmentId?: string | undefined;
5624
+ position: [number, number, number];
5625
+ rotation: number;
5626
+ width: number;
5627
+ depth: number;
5628
+ height: number;
5629
+ roofType: "barrel" | "conical" | "dutch" | "flat" | "gable" | "gambrel" | "hip" | "mansard" | "shed";
5630
+ roofHeight: number;
5631
+ shedHighSide: "back" | "front";
5632
+ wallSkirtHeight: number;
5633
+ windowWidth: number;
5634
+ windowHeight: number;
5635
+ windowOffsetX: number;
5636
+ windowOffsetY: number;
5637
+ windowFrameThickness: number;
5638
+ windowFrameDepth: number;
5639
+ windowColumns: number;
5640
+ windowRows: number;
5641
+ windowDividerThickness: number;
5642
+ windowShape: "arch" | "rectangle" | "rounded";
5643
+ windowArchHeight: number;
5644
+ windowCornerRadii: [number, number, number, number];
5645
+ windowSill: boolean;
5646
+ windowSillDepth: number;
5647
+ windowSillThickness: number;
5648
+ children: `window_${string}`[];
5649
+ type: "dormer";
5650
5650
  } | {
5651
5651
  object: "node";
5652
5652
  name?: string | undefined;