@pascal-app/core 1.0.7 → 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 (266) 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__/native-materials.d.ts +4 -0
  4. package/dist/agent-operations/__fixtures__/native-materials.d.ts.map +1 -1
  5. package/dist/agent-operations/__fixtures__/place-items-cases.d.ts.map +1 -1
  6. package/dist/agent-operations/__fixtures__/place-items-cases.js +28 -0
  7. package/dist/agent-operations/__fixtures__/roof-bearing-cases.d.ts +9567 -9563
  8. package/dist/agent-operations/__fixtures__/roof-bearing-cases.d.ts.map +1 -1
  9. package/dist/agent-operations/__fixtures__/verify-scene-cases.d.ts +77 -77
  10. package/dist/agent-operations/asset-catalog.d.ts +21 -11
  11. package/dist/agent-operations/asset-catalog.d.ts.map +1 -1
  12. package/dist/agent-operations/asset-catalog.js +28 -10
  13. package/dist/agent-operations/asset-views.d.ts +8 -3
  14. package/dist/agent-operations/asset-views.d.ts.map +1 -1
  15. package/dist/agent-operations/asset-views.js +19 -3
  16. package/dist/agent-operations/author-scene.d.ts.map +1 -1
  17. package/dist/agent-operations/author-scene.js +2 -3
  18. package/dist/agent-operations/batch.d.ts +7 -1
  19. package/dist/agent-operations/batch.d.ts.map +1 -1
  20. package/dist/agent-operations/batch.js +17 -2
  21. package/dist/agent-operations/catalog-asset.d.ts +15 -0
  22. package/dist/agent-operations/catalog-asset.d.ts.map +1 -0
  23. package/dist/agent-operations/catalog-asset.js +4 -0
  24. package/dist/agent-operations/circulation-spaces.d.ts +1724 -1723
  25. package/dist/agent-operations/circulation-spaces.d.ts.map +1 -1
  26. package/dist/agent-operations/design-brief.d.ts.map +1 -1
  27. package/dist/agent-operations/design-brief.js +2 -0
  28. package/dist/agent-operations/furnish-room.d.ts.map +1 -1
  29. package/dist/agent-operations/furnish-room.js +2 -1
  30. package/dist/agent-operations/index.d.ts +3 -0
  31. package/dist/agent-operations/index.d.ts.map +1 -1
  32. package/dist/agent-operations/index.js +4 -1
  33. package/dist/agent-operations/level-reads.d.ts.map +1 -1
  34. package/dist/agent-operations/level-reads.js +5 -2
  35. package/dist/agent-operations/move-plan.d.ts.map +1 -1
  36. package/dist/agent-operations/move-plan.js +11 -9
  37. package/dist/agent-operations/place-in-room.d.ts.map +1 -1
  38. package/dist/agent-operations/place-in-room.js +2 -1
  39. package/dist/agent-operations/place-items.d.ts.map +1 -1
  40. package/dist/agent-operations/place-items.js +2 -1
  41. package/dist/agent-operations/scene-queries.d.ts +2944 -2943
  42. package/dist/agent-operations/scene-queries.d.ts.map +1 -1
  43. package/dist/agent-operations/scene-view.d.ts.map +1 -1
  44. package/dist/agent-operations/scene-view.js +38 -13
  45. package/dist/agent-operations/search-assets.d.ts.map +1 -1
  46. package/dist/agent-operations/search-assets.js +6 -0
  47. package/dist/agent-operations/types.d.ts +3 -2
  48. package/dist/agent-operations/types.d.ts.map +1 -1
  49. package/dist/agent-operations/usage-checks.js +18 -3
  50. package/dist/agent-operations/verify-scene.d.ts.map +1 -1
  51. package/dist/agent-operations/verify-scene.js +4 -2
  52. package/dist/agent-operations/wall-object-observations.d.ts.map +1 -1
  53. package/dist/agent-operations/wall-object-observations.js +1 -1
  54. package/dist/agent-tools/assets.js +1 -1
  55. package/dist/agent-tools/wall-openings.js +2 -2
  56. package/dist/building/__fixtures__/wall-opening-cases.d.ts +13 -12
  57. package/dist/building/__fixtures__/wall-opening-cases.d.ts.map +1 -1
  58. package/dist/building/level-duplication.d.ts +1281 -1279
  59. package/dist/building/level-duplication.d.ts.map +1 -1
  60. package/dist/building/level-duplication.js +3 -1
  61. package/dist/building/merge-windows.d.ts.map +1 -1
  62. package/dist/building/merge-windows.js +4 -3
  63. package/dist/building/wall-openings.d.ts +95 -81
  64. package/dist/building/wall-openings.d.ts.map +1 -1
  65. package/dist/building/wall-openings.js +74 -25
  66. package/dist/commands/structure/shared.d.ts +3203 -3202
  67. package/dist/commands/structure/shared.d.ts.map +1 -1
  68. package/dist/commands/structure/zone-wall-merge.d.ts +2028 -2025
  69. package/dist/commands/structure/zone-wall-merge.d.ts.map +1 -1
  70. package/dist/contracts/reference-inventory.d.ts.map +1 -1
  71. package/dist/contracts/reference-inventory.js +0 -1
  72. package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts +6 -1
  73. package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts.map +1 -1
  74. package/dist/hooks/spatial-grid/spatial-grid-manager.js +30 -9
  75. package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts +2101 -2100
  76. package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts.map +1 -1
  77. package/dist/hooks/spatial-grid/spatial-grid-sync.js +8 -4
  78. package/dist/index.d.ts +13 -4
  79. package/dist/index.d.ts.map +1 -1
  80. package/dist/index.js +13 -4
  81. package/dist/lib/__fixtures__/mezzanine.d.ts +6428 -6424
  82. package/dist/lib/__fixtures__/mezzanine.d.ts.map +1 -1
  83. package/dist/lib/absorb-wall-separators.d.ts +2267 -2266
  84. package/dist/lib/absorb-wall-separators.d.ts.map +1 -1
  85. package/dist/lib/asset-storage.d.ts.map +1 -1
  86. package/dist/lib/asset-storage.js +3 -0
  87. package/dist/lib/build-mode.d.ts +11 -0
  88. package/dist/lib/build-mode.d.ts.map +1 -0
  89. package/dist/lib/build-mode.js +24 -0
  90. package/dist/lib/corner-pair.d.ts +2 -0
  91. package/dist/lib/corner-pair.d.ts.map +1 -1
  92. package/dist/lib/door-interaction.d.ts +14 -0
  93. package/dist/lib/door-interaction.d.ts.map +1 -0
  94. package/dist/lib/door-interaction.js +62 -0
  95. package/dist/lib/elevator-support.d.ts +15 -0
  96. package/dist/lib/elevator-support.d.ts.map +1 -0
  97. package/dist/lib/elevator-support.js +40 -0
  98. package/dist/lib/floor-foundation-datum.d.ts.map +1 -1
  99. package/dist/lib/floor-foundation-datum.js +5 -1
  100. package/dist/lib/floor-intent-changes.d.ts.map +1 -1
  101. package/dist/lib/floor-intent-changes.js +6 -4
  102. package/dist/lib/floorplan/context.d.ts +95 -0
  103. package/dist/lib/floorplan/context.d.ts.map +1 -0
  104. package/dist/lib/floorplan/context.js +155 -0
  105. package/dist/lib/floorplan/index.d.ts +6 -0
  106. package/dist/lib/floorplan/index.d.ts.map +1 -0
  107. package/dist/lib/floorplan/index.js +5 -0
  108. package/dist/lib/floorplan/marks.d.ts +71 -0
  109. package/dist/lib/floorplan/marks.d.ts.map +1 -0
  110. package/dist/lib/floorplan/marks.js +157 -0
  111. package/dist/lib/floorplan/plan-math.d.ts +18 -0
  112. package/dist/lib/floorplan/plan-math.d.ts.map +1 -0
  113. package/dist/lib/floorplan/plan-math.js +82 -0
  114. package/dist/lib/floorplan/svg-paths.d.ts +17 -0
  115. package/dist/lib/floorplan/svg-paths.d.ts.map +1 -0
  116. package/dist/lib/floorplan/svg-paths.js +92 -0
  117. package/dist/lib/floorplan/wall-affordances.d.ts +31 -0
  118. package/dist/lib/floorplan/wall-affordances.d.ts.map +1 -0
  119. package/dist/lib/floorplan/wall-affordances.js +24 -0
  120. package/dist/lib/hierarchy.d.ts +19 -0
  121. package/dist/lib/hierarchy.d.ts.map +1 -0
  122. package/dist/lib/hierarchy.js +53 -0
  123. package/dist/lib/opening-floor-datum.d.ts +1 -1
  124. package/dist/lib/opening-floor-datum.d.ts.map +1 -1
  125. package/dist/lib/opening-floor-datum.js +2 -2
  126. package/dist/lib/own-floor-intent.d.ts.map +1 -1
  127. package/dist/lib/own-floor-intent.js +2 -2
  128. package/dist/lib/polygon-boolean.d.ts.map +1 -1
  129. package/dist/lib/polygon-boolean.js +2 -1
  130. package/dist/lib/room-floor-elevation.d.ts +12 -0
  131. package/dist/lib/room-floor-elevation.d.ts.map +1 -0
  132. package/dist/lib/room-floor-elevation.js +41 -0
  133. package/dist/lib/room-floor-feasibility.d.ts.map +1 -1
  134. package/dist/lib/room-floor-feasibility.js +1 -1
  135. package/dist/lib/space-detection.d.ts.map +1 -1
  136. package/dist/lib/space-detection.js +1 -0
  137. package/dist/lib/wall-face-script.d.ts.map +1 -1
  138. package/dist/lib/wall-face-script.js +3 -3
  139. package/dist/lib/window-interaction.d.ts +16 -0
  140. package/dist/lib/window-interaction.d.ts.map +1 -0
  141. package/dist/lib/window-interaction.js +82 -0
  142. package/dist/lib/zone-quantities.js +1 -1
  143. package/dist/node-slots/column.d.ts +5 -0
  144. package/dist/node-slots/column.d.ts.map +1 -1
  145. package/dist/node-slots/column.js +10 -0
  146. package/dist/registry/__fixtures__/roof-planes.d.ts +69 -0
  147. package/dist/registry/__fixtures__/roof-planes.d.ts.map +1 -0
  148. package/dist/registry/__fixtures__/roof-planes.js +59 -0
  149. package/dist/registry/index.d.ts +3 -2
  150. package/dist/registry/index.d.ts.map +1 -1
  151. package/dist/registry/index.js +2 -1
  152. package/dist/registry/registry.d.ts +5 -0
  153. package/dist/registry/registry.d.ts.map +1 -1
  154. package/dist/registry/registry.js +10 -0
  155. package/dist/registry/roofs.d.ts +34 -0
  156. package/dist/registry/roofs.d.ts.map +1 -0
  157. package/dist/registry/roofs.js +61 -0
  158. package/dist/registry/types.d.ts +54 -0
  159. package/dist/registry/types.d.ts.map +1 -1
  160. package/dist/registry/validate-relations.d.ts +5 -1
  161. package/dist/registry/validate-relations.d.ts.map +1 -1
  162. package/dist/registry/validate-relations.js +6 -2
  163. package/dist/schema/asset-url.d.ts +8 -0
  164. package/dist/schema/asset-url.d.ts.map +1 -1
  165. package/dist/schema/asset-url.js +17 -0
  166. package/dist/schema/index.d.ts +1 -1
  167. package/dist/schema/index.d.ts.map +1 -1
  168. package/dist/schema/index.js +1 -1
  169. package/dist/schema/nodes/roof-segment-resize.d.ts.map +1 -1
  170. package/dist/schema/nodes/roof-segment-resize.js +2 -2
  171. package/dist/schema/nodes/roof-segment.d.ts +2 -0
  172. package/dist/schema/nodes/roof-segment.d.ts.map +1 -1
  173. package/dist/schema/nodes/roof-segment.js +40 -2
  174. package/dist/schema/nodes/roof.d.ts +1 -1
  175. package/dist/schema/nodes/roof.d.ts.map +1 -1
  176. package/dist/schema/nodes/roof.js +13 -8
  177. package/dist/schema/nodes/wall.d.ts +1 -0
  178. package/dist/schema/nodes/wall.d.ts.map +1 -1
  179. package/dist/schema/nodes/wall.js +6 -0
  180. package/dist/schema/types.d.ts +2 -1
  181. package/dist/schema/types.d.ts.map +1 -1
  182. package/dist/services/index.d.ts +1 -1
  183. package/dist/services/index.d.ts.map +1 -1
  184. package/dist/services/index.js +1 -1
  185. package/dist/services/movement.d.ts +7 -0
  186. package/dist/services/movement.d.ts.map +1 -1
  187. package/dist/services/movement.js +13 -0
  188. package/dist/services/port-connectivity.d.ts +15 -6
  189. package/dist/services/port-connectivity.d.ts.map +1 -1
  190. package/dist/services/port-connectivity.js +83 -17
  191. package/dist/services/roof-bearing.js +2 -1
  192. package/dist/services/roof-level.d.ts.map +1 -1
  193. package/dist/services/roof-level.js +12 -2
  194. package/dist/services/roof-move.d.ts +4 -2
  195. package/dist/services/roof-move.d.ts.map +1 -1
  196. package/dist/services/roof-move.js +21 -9
  197. package/dist/services/storey.d.ts +6 -1
  198. package/dist/services/storey.d.ts.map +1 -1
  199. package/dist/services/storey.js +11 -2
  200. package/dist/spatial/usage-field/findings.d.ts +7 -1
  201. package/dist/spatial/usage-field/findings.d.ts.map +1 -1
  202. package/dist/spatial/usage-field/findings.js +42 -10
  203. package/dist/spatial/usage-field/path.d.ts.map +1 -1
  204. package/dist/spatial/usage-field/path.js +28 -18
  205. package/dist/spatial/usage-field/swings.d.ts +1 -0
  206. package/dist/spatial/usage-field/swings.d.ts.map +1 -1
  207. package/dist/spatial/usage-field/walls.d.ts +2 -0
  208. package/dist/spatial/usage-field/walls.d.ts.map +1 -1
  209. package/dist/spatial/usage-field/walls.js +18 -4
  210. package/dist/store/actions/node-actions.d.ts +2 -1
  211. package/dist/store/actions/node-actions.d.ts.map +1 -1
  212. package/dist/store/actions/node-actions.js +23 -5
  213. package/dist/store/derived-node-guard.d.ts.map +1 -1
  214. package/dist/store/derived-node-guard.js +2 -1
  215. package/dist/store/scene-annotations.d.ts +4634 -4632
  216. package/dist/store/scene-annotations.d.ts.map +1 -1
  217. package/dist/systems/document-reconcile.d.ts.map +1 -1
  218. package/dist/systems/document-reconcile.js +1 -2
  219. package/dist/systems/elevator/elevator-geometry.d.ts +25 -0
  220. package/dist/systems/elevator/elevator-geometry.d.ts.map +1 -1
  221. package/dist/systems/elevator/elevator-geometry.js +40 -8
  222. package/dist/systems/elevator/elevator-opening-sync.d.ts.map +1 -1
  223. package/dist/systems/elevator/elevator-opening-sync.js +4 -35
  224. package/dist/systems/elevator/elevator-runtime.d.ts.map +1 -1
  225. package/dist/systems/elevator/elevator-runtime.js +95 -18
  226. package/dist/systems/elevator/elevator-service.d.ts.map +1 -1
  227. package/dist/systems/elevator/elevator-service.js +24 -4
  228. package/dist/systems/roof/roof-elevation.d.ts +11 -6
  229. package/dist/systems/roof/roof-elevation.d.ts.map +1 -1
  230. package/dist/systems/roof/roof-elevation.js +26 -12
  231. package/dist/systems/slab/__fixtures__/floor-step.d.ts +5 -1
  232. package/dist/systems/slab/__fixtures__/floor-step.d.ts.map +1 -1
  233. package/dist/systems/slab/__fixtures__/raised-room.d.ts +2218 -2214
  234. package/dist/systems/slab/__fixtures__/raised-room.d.ts.map +1 -1
  235. package/dist/systems/stair/stair-opening-preview.d.ts +3203 -3202
  236. package/dist/systems/stair/stair-opening-preview.d.ts.map +1 -1
  237. package/dist/systems/wall/wall-curve.d.ts +10 -0
  238. package/dist/systems/wall/wall-curve.d.ts.map +1 -1
  239. package/dist/systems/wall/wall-curve.js +38 -0
  240. package/dist/systems/wall/wall-frame.d.ts.map +1 -1
  241. package/dist/systems/wall/wall-frame.js +8 -0
  242. package/dist/systems/wall/wall-merge.d.ts +9 -1
  243. package/dist/systems/wall/wall-merge.d.ts.map +1 -1
  244. package/dist/systems/wall/wall-merge.js +38 -6
  245. package/dist/systems/wall/wall-top.d.ts +10 -3
  246. package/dist/systems/wall/wall-top.d.ts.map +1 -1
  247. package/dist/systems/wall/wall-top.js +24 -8
  248. package/dist/systems/wall/wall-topology.d.ts.map +1 -1
  249. package/dist/systems/wall/wall-topology.js +19 -1
  250. package/dist/utils/ensure-scene-openings.d.ts +5595 -5593
  251. package/dist/utils/ensure-scene-openings.d.ts.map +1 -1
  252. package/dist/utils/floor-plate-migration.d.ts +2267 -2266
  253. package/dist/utils/floor-plate-migration.d.ts.map +1 -1
  254. package/dist/utils/measurement-format.d.ts +27 -0
  255. package/dist/utils/measurement-format.d.ts.map +1 -0
  256. package/dist/utils/measurement-format.js +143 -0
  257. package/dist/utils/owned-floor-opening-migration.d.ts +653 -652
  258. package/dist/utils/owned-floor-opening-migration.d.ts.map +1 -1
  259. package/dist/utils/reconcile-structure-on-load.d.ts +1724 -1723
  260. package/dist/utils/reconcile-structure-on-load.d.ts.map +1 -1
  261. package/dist/utils/scene-bounds.d.ts +32 -0
  262. package/dist/utils/scene-bounds.d.ts.map +1 -0
  263. package/dist/utils/scene-bounds.js +201 -0
  264. package/dist/validation/validate-build-json.d.ts.map +1 -1
  265. package/dist/validation/validate-build-json.js +3 -1
  266. package/package.json +1 -1
@@ -239,326 +239,198 @@ export declare function wallAttachments(nodes: StructureNodes, wall: WallNode):
239
239
  fromIds: string[];
240
240
  } | undefined;
241
241
  } | undefined;
242
- id: `rseg_${string}`;
243
- material?: {
244
- id?: string | undefined;
245
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
246
- properties?: {
247
- color: string;
248
- roughness: number;
249
- metalness: number;
250
- opacity: number;
251
- transparent: boolean;
252
- side: "back" | "double" | "front";
253
- } | undefined;
254
- texture?: {
255
- url: string;
256
- repeat?: [number, number] | undefined;
257
- scale?: number | undefined;
258
- offset?: [number, number] | undefined;
259
- normalMap?: string | undefined;
260
- normalScale?: number | undefined;
261
- bumpMap?: string | undefined;
262
- bumpScale?: number | undefined;
263
- } | undefined;
242
+ id: `site_${string}`;
243
+ polygon: {
244
+ type: "polygon";
245
+ points: [number, number][];
246
+ };
247
+ terrain?: {
248
+ type: "heightfield";
249
+ origin: [number, number];
250
+ spacing: number;
251
+ cols: number;
252
+ rows: number;
253
+ step: number;
254
+ heights: string;
264
255
  } | undefined;
265
- materialPreset?: string | undefined;
266
- topMaterial?: {
267
- id?: string | undefined;
268
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
269
- properties?: {
270
- color: string;
271
- roughness: number;
272
- metalness: number;
273
- opacity: number;
274
- transparent: boolean;
275
- side: "back" | "double" | "front";
276
- } | undefined;
277
- texture?: {
278
- url: string;
279
- repeat?: [number, number] | undefined;
280
- scale?: number | undefined;
281
- offset?: [number, number] | undefined;
282
- normalMap?: string | undefined;
283
- normalScale?: number | undefined;
284
- bumpMap?: string | undefined;
285
- bumpScale?: number | undefined;
256
+ showGround?: boolean | undefined;
257
+ presentation?: {
258
+ theme?: string | undefined;
259
+ exposure?: number | undefined;
260
+ shading?: "rendered" | "solid" | undefined;
261
+ edges?: "off" | "soft" | "strong" | undefined;
262
+ shadows?: boolean | undefined;
263
+ lighting?: {
264
+ background?: string | undefined;
265
+ backgroundSky?: string | null | undefined;
266
+ ground?: string | undefined;
267
+ ambient?: {
268
+ color: string;
269
+ intensity: number;
270
+ } | undefined;
271
+ hemi?: {
272
+ sky: string;
273
+ ground: string;
274
+ intensity: number;
275
+ } | undefined;
276
+ lights?: {
277
+ color: string;
278
+ intensity: number;
279
+ position: [number, number, number];
280
+ target?: [number, number, number] | undefined;
281
+ castShadow?: boolean | undefined;
282
+ shadow?: {
283
+ intensity?: number | undefined;
284
+ bias?: number | undefined;
285
+ normalBias?: number | undefined;
286
+ radius?: number | undefined;
287
+ mapSize?: 512 | 1024 | 2048 | 4096 | undefined;
288
+ camera?: {
289
+ left: number;
290
+ right: number;
291
+ top: number;
292
+ bottom: number;
293
+ near: number;
294
+ far: number;
295
+ } | undefined;
296
+ } | undefined;
297
+ }[] | undefined;
298
+ environment?: {
299
+ source: "gradient" | "none" | "room";
300
+ intensity: number;
301
+ } | undefined;
286
302
  } | undefined;
287
- } | undefined;
288
- topMaterialPreset?: string | undefined;
289
- edgeMaterial?: {
290
- id?: string | undefined;
291
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
292
- properties?: {
293
- color: string;
294
- roughness: number;
295
- metalness: number;
296
- opacity: number;
297
- transparent: boolean;
298
- side: "back" | "double" | "front";
303
+ postprocessing?: {
304
+ ambientOcclusion?: boolean | undefined;
305
+ colorGrading?: boolean | undefined;
299
306
  } | undefined;
300
- texture?: {
301
- url: string;
302
- repeat?: [number, number] | undefined;
303
- scale?: number | undefined;
304
- offset?: [number, number] | undefined;
305
- normalMap?: string | undefined;
306
- normalScale?: number | undefined;
307
- bumpMap?: string | undefined;
308
- bumpScale?: number | undefined;
307
+ display?: {
308
+ mode?: "construction" | "finished" | "systems" | undefined;
309
+ families?: Partial<Record<"device" | "exposed-structure" | "fill" | "finish" | "foundation" | "framing" | "inspection" | "insulation" | "masonry" | "membrane" | "run" | "service-space" | "sheathing", boolean>> | undefined;
310
+ disciplines?: Partial<Record<"electrical" | "fire" | "low-voltage" | "mechanical" | "plumbing", boolean>> | undefined;
311
+ xray?: boolean | undefined;
312
+ colorBy?: "material" | "service" | undefined;
309
313
  } | undefined;
310
314
  } | undefined;
311
- edgeMaterialPreset?: string | undefined;
312
- wallMaterial?: {
313
- id?: string | undefined;
314
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
315
- properties?: {
316
- color: string;
317
- roughness: number;
318
- metalness: number;
319
- opacity: number;
320
- transparent: boolean;
321
- side: "back" | "double" | "front";
322
- } | undefined;
323
- texture?: {
324
- url: string;
325
- repeat?: [number, number] | undefined;
326
- scale?: number | undefined;
327
- offset?: [number, number] | undefined;
328
- normalMap?: string | undefined;
329
- normalScale?: number | undefined;
330
- bumpMap?: string | undefined;
331
- bumpScale?: number | undefined;
332
- } | undefined;
315
+ address?: {
316
+ street?: string | undefined;
317
+ city?: string | undefined;
318
+ state?: string | undefined;
319
+ zip?: string | undefined;
333
320
  } | undefined;
334
- wallMaterialPreset?: string | undefined;
335
- position: [number, number, number];
336
- rotation: number;
337
- roofType: "barrel" | "conical" | "dutch" | "flat" | "gable" | "gambrel" | "hip" | "mansard" | "shed";
338
- barrelRise?: number | undefined;
339
- barrelSegments?: number | undefined;
340
- roofSystem?: "glazed" | "standard" | undefined;
341
- glazing?: {
342
- across: {
343
- layout: "count" | "fixed-spacing" | "maximum-spacing";
344
- count: number;
345
- spacing: number;
346
- alignment: "center" | "end" | "start";
347
- };
348
- along: {
349
- layout: "count" | "fixed-spacing" | "maximum-spacing";
350
- count: number;
351
- spacing: number;
352
- alignment: "center" | "end" | "start";
353
- };
354
- frameWidth: number;
355
- frameDepth: number;
356
- glassThickness: number;
357
- frameColor: string;
358
- glassColor: string;
359
- glassOpacity: number;
360
- glassRoughness: number;
361
- glazedEnds: boolean;
362
- panelType: "empty" | "glass" | "solid";
363
- panels: {
364
- face: string;
365
- column: number;
366
- row: number;
367
- type: "empty" | "glass" | "solid";
368
- }[];
321
+ parcel?: {
322
+ apn?: string | undefined;
323
+ source?: string | undefined;
324
+ county?: string | undefined;
325
+ state?: string | undefined;
326
+ lotAreaSqFt?: number | undefined;
327
+ originLngLat?: [number, number] | undefined;
328
+ resolvedAt?: string | undefined;
329
+ layer?: string | undefined;
330
+ notes?: string[] | undefined;
369
331
  } | undefined;
370
- slots?: Record<string, string> | undefined;
371
- width: number;
372
- depth: number;
373
- conicalStartAngle?: number | undefined;
374
- conicalSweepAngle?: number | undefined;
375
- conicalFullCircle?: boolean | undefined;
376
- trim: {
377
- left: number;
378
- right: number;
332
+ setbacks?: {
379
333
  front: number;
380
- back: number;
381
- frontLeft: number;
382
- frontRight: number;
383
- backLeft: number;
384
- backRight: number;
385
- frontLeftX: number;
386
- frontLeftZ: number;
387
- frontRightX: number;
388
- frontRightZ: number;
389
- backLeftX: number;
390
- backLeftZ: number;
391
- backRightX: number;
392
- backRightZ: number;
393
- };
394
- wallHeight: number;
395
- pitch: number;
396
- wallThickness: number;
397
- deckThickness: number;
398
- overhang: number;
399
- gableOverhang?: number | undefined;
400
- shingleThickness: number;
401
- buildUp?: {
402
- presetId?: string | undefined;
403
- roofing: {
404
- kind: "architectural-shingle" | "asphalt-3-tab" | "clay-tile" | "concrete-tile" | "slate" | "standing-seam-metal" | "wood-shake";
405
- thickness: number;
406
- name?: string | undefined;
407
- };
408
- underlayment?: {
409
- kind: "felt-15" | "felt-30" | "ice-and-water" | "synthetic";
410
- thickness: number;
411
- name?: string | undefined;
412
- } | undefined;
413
- sheathing: {
414
- kind: "osb" | "plywood";
415
- thickness: number;
416
- name?: string | undefined;
417
- };
418
- structure: {
419
- system: "rafters" | "trusses";
420
- size: "2x10" | "2x12" | "2x4" | "2x6" | "2x8";
421
- spacing: number;
422
- };
423
- insulation?: {
424
- kind: "batt" | "blown" | "rigid";
425
- thickness: number;
426
- name?: string | undefined;
427
- } | undefined;
428
- finish?: {
429
- kind: "drywall" | "plaster" | "wood-plank";
430
- thickness: number;
431
- name?: string | undefined;
432
- } | undefined;
433
- } | undefined;
434
- arc?: {
435
- centerX: number;
436
- centerZ: number;
437
- radius: number;
438
- } | undefined;
439
- shedSideInfillSpan?: number | undefined;
440
- shedSideInfillMinX?: number | undefined;
441
- shedSideInfillMaxX?: number | undefined;
442
- shedFootprintPieces?: [number, number][][] | undefined;
443
- shedOpenEndSides?: ("left" | "right")[] | undefined;
444
- shedJointFrame?: {
445
- position: [number, number, number];
446
- rotation: number;
447
- } | undefined;
448
- shedJointOwnerId?: string | undefined;
449
- shedJointNeighborIds?: string[] | undefined;
450
- shedJointScopeId?: string | undefined;
451
- managedByParent: boolean;
452
- wallShell: "auto" | "include" | "omit";
453
- shedInsetEndPanels: boolean;
454
- fascia?: boolean | undefined;
455
- eaveCut?: "plumb" | "plumb-level" | "square" | undefined;
456
- fasciaHighEdge?: boolean | undefined;
457
- fasciaHeight?: number | undefined;
458
- fasciaDepth?: number | undefined;
459
- fasciaMaterial?: {
460
- id?: string | undefined;
461
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
462
- properties?: {
463
- color: string;
464
- roughness: number;
465
- metalness: number;
466
- opacity: number;
467
- transparent: boolean;
468
- side: "back" | "double" | "front";
469
- } | undefined;
470
- texture?: {
471
- url: string;
472
- repeat?: [number, number] | undefined;
473
- scale?: number | undefined;
474
- offset?: [number, number] | undefined;
475
- normalMap?: string | undefined;
476
- normalScale?: number | undefined;
477
- bumpMap?: string | undefined;
478
- bumpScale?: number | undefined;
479
- } | undefined;
480
- } | undefined;
481
- fasciaMaterialPreset?: string | undefined;
482
- heelMaterial?: {
483
- id?: string | undefined;
484
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
485
- properties?: {
486
- color: string;
487
- roughness: number;
488
- metalness: number;
489
- opacity: number;
490
- transparent: boolean;
491
- side: "back" | "double" | "front";
492
- } | undefined;
493
- texture?: {
494
- url: string;
495
- repeat?: [number, number] | undefined;
496
- scale?: number | undefined;
497
- offset?: [number, number] | undefined;
498
- normalMap?: string | undefined;
499
- normalScale?: number | undefined;
500
- bumpMap?: string | undefined;
501
- bumpScale?: number | undefined;
502
- } | undefined;
334
+ side: number;
335
+ rear: number;
336
+ left?: number | undefined;
337
+ right?: number | undefined;
338
+ streetSide?: number | undefined;
503
339
  } | undefined;
504
- heelMaterialPreset?: string | undefined;
505
- gableLeftMaterial?: {
506
- id?: string | undefined;
507
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
508
- properties?: {
509
- color: string;
510
- roughness: number;
511
- metalness: number;
512
- opacity: number;
513
- transparent: boolean;
514
- side: "back" | "double" | "front";
340
+ setbacksSource?: string | undefined;
341
+ zone?: string | undefined;
342
+ frontEdge?: number | undefined;
343
+ streetEdges?: number[] | undefined;
344
+ sightTriangleFt?: number | undefined;
345
+ northRotation?: number | undefined;
346
+ dossier?: {
347
+ [x: string]: unknown;
348
+ provider: string;
349
+ asOf: string;
350
+ point?: {
351
+ lat?: number | undefined;
352
+ lng?: number | undefined;
353
+ source?: string | undefined;
515
354
  } | undefined;
516
- texture?: {
517
- url: string;
518
- repeat?: [number, number] | undefined;
519
- scale?: number | undefined;
520
- offset?: [number, number] | undefined;
521
- normalMap?: string | undefined;
522
- normalScale?: number | undefined;
523
- bumpMap?: string | undefined;
524
- bumpScale?: number | undefined;
355
+ address?: {
356
+ formatted?: string | undefined;
357
+ precision?: string | undefined;
525
358
  } | undefined;
359
+ sections: Record<string, {
360
+ [x: string]: unknown;
361
+ status: string;
362
+ summary?: string | undefined;
363
+ reason?: string | undefined;
364
+ source?: {
365
+ name?: string | undefined;
366
+ kind?: string | undefined;
367
+ vintage?: string | undefined;
368
+ attribution?: string | undefined;
369
+ } | undefined;
370
+ }>;
371
+ parcel?: Record<string, unknown> | undefined;
372
+ flood?: Record<string, unknown> | undefined;
373
+ codeBasis?: Record<string, unknown> | undefined;
374
+ zoning?: Record<string, unknown> | undefined;
375
+ utilities?: Record<string, unknown> | undefined;
376
+ soils?: Record<string, unknown> | undefined;
377
+ wetlands?: Record<string, unknown> | undefined;
378
+ structures?: Record<string, unknown> | undefined;
379
+ elevation?: Record<string, unknown> | undefined;
380
+ boundaries?: Record<string, unknown> | undefined;
526
381
  } | undefined;
527
- gableLeftMaterialPreset?: string | undefined;
528
- gableRightMaterial?: {
529
- id?: string | undefined;
530
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
531
- properties?: {
532
- color: string;
533
- roughness: number;
534
- metalness: number;
535
- opacity: number;
536
- transparent: boolean;
537
- side: "back" | "double" | "front";
538
- } | undefined;
539
- texture?: {
540
- url: string;
541
- repeat?: [number, number] | undefined;
542
- scale?: number | undefined;
543
- offset?: [number, number] | undefined;
544
- normalMap?: string | undefined;
545
- normalScale?: number | undefined;
546
- bumpMap?: string | undefined;
547
- bumpScale?: number | undefined;
548
- } | undefined;
382
+ contourIntervalIn?: number | undefined;
383
+ contours3d?: boolean | undefined;
384
+ terrainContours?: {
385
+ datum: string;
386
+ intervalFt: number;
387
+ source?: string | undefined;
388
+ lines: {
389
+ elevationFt: number;
390
+ points: [number, number][];
391
+ }[];
549
392
  } | undefined;
550
- gableRightMaterialPreset?: string | undefined;
551
- gambrelLowerWidthRatio: number;
552
- gambrelLowerHeightRatio: number;
553
- mansardSteepWidthRatio: number;
554
- mansardSteepHeightRatio: number;
555
- dutchHipWidthRatio: number;
556
- dutchHipHeightRatio: number;
557
- dutchWaistLengthRatio: number;
558
- dutchGabletRake: number;
559
- dutchTopRakeThickness: number;
393
+ wallTypes?: {
394
+ id: string;
395
+ label: string;
396
+ assembly: {
397
+ layers: {
398
+ id: string;
399
+ role: "air" | "covering" | "deck" | "fill" | "finish" | "furring" | "glazing" | "insulation" | "lining" | "membrane" | "sheathing" | "shell" | "structure" | "substrate" | "underlay";
400
+ thickness: number;
401
+ core?: true | undefined;
402
+ spacing?: number | undefined;
403
+ material?: string | undefined;
404
+ slot?: string | undefined;
405
+ returns?: boolean | undefined;
406
+ display?: "construction" | "finished" | undefined;
407
+ inset?: number | undefined;
408
+ bottom?: number | undefined;
409
+ lift?: number | undefined;
410
+ src?: string | undefined;
411
+ }[];
412
+ backing?: {
413
+ id: string;
414
+ role: "air" | "covering" | "deck" | "fill" | "finish" | "furring" | "glazing" | "insulation" | "lining" | "membrane" | "sheathing" | "shell" | "structure" | "substrate" | "underlay";
415
+ thickness: number;
416
+ core?: true | undefined;
417
+ spacing?: number | undefined;
418
+ material?: string | undefined;
419
+ slot?: string | undefined;
420
+ returns?: boolean | undefined;
421
+ display?: "construction" | "finished" | undefined;
422
+ inset?: number | undefined;
423
+ bottom?: number | undefined;
424
+ lift?: number | undefined;
425
+ src?: string | undefined;
426
+ }[] | undefined;
427
+ face?: "exterior" | "front" | undefined;
428
+ presetId?: string | undefined;
429
+ cavityInsulation?: string | undefined;
430
+ };
431
+ }[] | undefined;
560
432
  children: string[];
561
- type: "roof-segment";
433
+ type: "site";
562
434
  } | {
563
435
  object: "node";
564
436
  name?: string | undefined;
@@ -583,263 +455,231 @@ export declare function wallAttachments(nodes: StructureNodes, wall: WallNode):
583
455
  fromIds: string[];
584
456
  } | undefined;
585
457
  } | undefined;
586
- id: `roof_${string}`;
587
- material?: {
588
- id?: string | undefined;
589
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
590
- properties?: {
591
- color: string;
592
- roughness: number;
593
- metalness: number;
594
- opacity: number;
595
- transparent: boolean;
596
- side: "back" | "double" | "front";
597
- } | undefined;
598
- texture?: {
599
- url: string;
600
- repeat?: [number, number] | undefined;
601
- scale?: number | undefined;
602
- offset?: [number, number] | undefined;
603
- normalMap?: string | undefined;
604
- normalScale?: number | undefined;
605
- bumpMap?: string | undefined;
606
- bumpScale?: number | undefined;
607
- } | undefined;
608
- } | undefined;
609
- materialPreset?: string | undefined;
610
- topMaterial?: {
611
- id?: string | undefined;
612
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
613
- properties?: {
614
- color: string;
615
- roughness: number;
616
- metalness: number;
617
- opacity: number;
618
- transparent: boolean;
619
- side: "back" | "double" | "front";
458
+ type: "item";
459
+ id: `item_${string}`;
460
+ position: [number, number, number];
461
+ rotation: [number, number, number];
462
+ scale: [number, number, number];
463
+ side?: "back" | "front" | undefined;
464
+ children: string[];
465
+ wallId?: string | undefined;
466
+ wallT?: number | undefined;
467
+ roofSegmentId?: string | undefined;
468
+ roofFace?: "back" | "front" | "left" | "right" | undefined;
469
+ blockFaceId?: string | undefined;
470
+ supportSlabId?: string | undefined;
471
+ collectionIds?: `collection_${string}`[] | undefined;
472
+ slots?: Record<string, string> | undefined;
473
+ source?: {
474
+ kind: "script";
475
+ meta?: {
476
+ description?: string | undefined;
477
+ category?: string | undefined;
478
+ tags?: string[] | undefined;
479
+ parent?: string | undefined;
620
480
  } | undefined;
621
- texture?: {
622
- url: string;
623
- repeat?: [number, number] | undefined;
624
- scale?: number | undefined;
625
- offset?: [number, number] | undefined;
626
- normalMap?: string | undefined;
627
- normalScale?: number | undefined;
628
- bumpMap?: string | undefined;
629
- bumpScale?: number | undefined;
481
+ language: "bpy" | "three";
482
+ script: string;
483
+ params: Record<string, string | number | boolean>;
484
+ artifact: string;
485
+ manifest: {
486
+ bounds: {
487
+ min: [number, number, number];
488
+ max: [number, number, number];
489
+ };
490
+ params: {
491
+ id: string;
492
+ label?: string | undefined;
493
+ kind: "boolean" | "number" | "string";
494
+ default: string | number | boolean;
495
+ min?: number | undefined;
496
+ max?: number | undefined;
497
+ step?: number | undefined;
498
+ unit?: string | undefined;
499
+ options?: string[] | undefined;
500
+ }[];
501
+ parts: {
502
+ id: string;
503
+ label?: string | undefined;
504
+ type?: string | undefined;
505
+ bounds?: {
506
+ min: [number, number, number];
507
+ max: [number, number, number];
508
+ } | undefined;
509
+ }[];
510
+ surfaces: {
511
+ part?: string | undefined;
512
+ y: number;
513
+ polygon: [number, number][];
514
+ }[];
515
+ slots: {
516
+ id: string;
517
+ label?: string | undefined;
518
+ color?: string | undefined;
519
+ roughness?: number | undefined;
520
+ metalness?: number | undefined;
521
+ transparent?: boolean | undefined;
522
+ emissive?: boolean | undefined;
523
+ }[];
524
+ anchors: {
525
+ id: string;
526
+ position: [number, number, number];
527
+ normal?: [number, number, number] | undefined;
528
+ }[];
529
+ lights: {
530
+ id: string;
531
+ position: [number, number, number];
532
+ color: string;
533
+ intensity: number;
534
+ distance?: number | undefined;
535
+ spot?: {
536
+ direction: [number, number, number];
537
+ angle: number;
538
+ softness: number;
539
+ } | undefined;
540
+ shadows?: boolean | undefined;
541
+ glow?: {
542
+ size: number;
543
+ strength: number;
544
+ } | undefined;
545
+ }[];
546
+ undersides: {
547
+ part?: string | undefined;
548
+ polygon: [number, number][];
549
+ plane: [number, number, number, number];
550
+ }[];
551
+ animations: {
552
+ name: string;
553
+ duration: number;
554
+ }[];
555
+ cutters?: {
556
+ host: "ceiling" | "mounted" | "slab" | "wall";
557
+ polygon: number[][];
558
+ minY: number;
559
+ maxY: number;
560
+ }[] | undefined;
561
+ cutout: boolean;
562
+ collider: boolean;
563
+ shape?: {
564
+ tolerance: number;
565
+ bands: {
566
+ y0: number;
567
+ y1: number;
568
+ polygons: {
569
+ outer: [number, number][];
570
+ holes?: [number, number][][] | undefined;
571
+ }[];
572
+ }[];
573
+ } | undefined;
574
+ triangles: number;
575
+ coverage?: number | undefined;
576
+ uncovered?: {
577
+ min: [number, number];
578
+ max: [number, number];
579
+ }[] | undefined;
580
+ };
581
+ images?: {
582
+ artifact: string;
583
+ thumbnail: string;
584
+ floorPlan: string;
630
585
  } | undefined;
631
586
  } | undefined;
632
- topMaterialPreset?: string | undefined;
633
- edgeMaterial?: {
634
- id?: string | undefined;
635
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
636
- properties?: {
637
- color: string;
638
- roughness: number;
639
- metalness: number;
640
- opacity: number;
641
- transparent: boolean;
642
- side: "back" | "double" | "front";
587
+ asset: {
588
+ id: string;
589
+ category: string;
590
+ name: string;
591
+ thumbnail: string;
592
+ floorPlanUrl?: string | undefined;
593
+ source: "community" | "library" | "mine";
594
+ isDraft?: boolean | undefined;
595
+ src: string;
596
+ dimensions: [number, number, number];
597
+ attachTo?: "ceiling" | "wall" | "wall-side" | undefined;
598
+ recessed?: boolean | undefined;
599
+ tags?: string[] | undefined;
600
+ functionTags?: string[] | undefined;
601
+ offset: [number, number, number];
602
+ rotation: [number, number, number];
603
+ scale: [number, number, number];
604
+ surface?: {
605
+ height: number;
643
606
  } | undefined;
644
- texture?: {
645
- url: string;
646
- repeat?: [number, number] | undefined;
647
- scale?: number | undefined;
648
- offset?: [number, number] | undefined;
649
- normalMap?: string | undefined;
650
- normalScale?: number | undefined;
651
- bumpMap?: string | undefined;
652
- bumpScale?: number | undefined;
607
+ interactive?: {
608
+ controls: ({
609
+ kind: "toggle";
610
+ label?: string | undefined;
611
+ default?: boolean | undefined;
612
+ } | {
613
+ kind: "slider";
614
+ label: string;
615
+ min: number;
616
+ max: number;
617
+ step: number;
618
+ unit?: string | undefined;
619
+ displayMode: "dial" | "slider" | "stepper";
620
+ default?: number | undefined;
621
+ } | {
622
+ kind: "temperature";
623
+ label: string;
624
+ min: number;
625
+ max: number;
626
+ unit: "C" | "F";
627
+ default?: number | undefined;
628
+ })[];
629
+ effects: ({
630
+ kind: "animation";
631
+ mode?: "ambient" | "open-close" | undefined;
632
+ control?: number | undefined;
633
+ clips: {
634
+ on?: string | undefined;
635
+ off?: string | undefined;
636
+ loop?: string | undefined;
637
+ };
638
+ } | {
639
+ kind: "light";
640
+ color: string;
641
+ intensityRange: [number, number];
642
+ distance?: number | undefined;
643
+ offset: [number, number, number];
644
+ spot?: {
645
+ direction: [number, number, number];
646
+ angle: number;
647
+ softness: number;
648
+ } | undefined;
649
+ shadows?: boolean | undefined;
650
+ glow?: {
651
+ size: number;
652
+ strength: number;
653
+ } | undefined;
654
+ })[];
655
+ } | undefined;
656
+ };
657
+ } | {
658
+ object: "node";
659
+ name?: string | undefined;
660
+ parentId: string | null;
661
+ visible: boolean;
662
+ camera?: {
663
+ position: [number, number, number];
664
+ target: [number, number, number];
665
+ mode: "orthographic" | "perspective";
666
+ fov?: number | undefined;
667
+ zoom?: number | undefined;
668
+ } | undefined;
669
+ metadata: Record<string, unknown>;
670
+ provenance?: {
671
+ refs: {
672
+ ns?: string | undefined;
673
+ id: string;
674
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
675
+ }[];
676
+ lineage?: {
677
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
678
+ fromIds: string[];
653
679
  } | undefined;
654
680
  } | undefined;
655
- edgeMaterialPreset?: string | undefined;
656
- wallMaterial?: {
657
- id?: string | undefined;
658
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
659
- properties?: {
660
- color: string;
661
- roughness: number;
662
- metalness: number;
663
- opacity: number;
664
- transparent: boolean;
665
- side: "back" | "double" | "front";
666
- } | undefined;
667
- texture?: {
668
- url: string;
669
- repeat?: [number, number] | undefined;
670
- scale?: number | undefined;
671
- offset?: [number, number] | undefined;
672
- normalMap?: string | undefined;
673
- normalScale?: number | undefined;
674
- bumpMap?: string | undefined;
675
- bumpScale?: number | undefined;
676
- } | undefined;
677
- } | undefined;
678
- wallMaterialPreset?: string | undefined;
679
- heelMaterial?: {
680
- id?: string | undefined;
681
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
682
- properties?: {
683
- color: string;
684
- roughness: number;
685
- metalness: number;
686
- opacity: number;
687
- transparent: boolean;
688
- side: "back" | "double" | "front";
689
- } | undefined;
690
- texture?: {
691
- url: string;
692
- repeat?: [number, number] | undefined;
693
- scale?: number | undefined;
694
- offset?: [number, number] | undefined;
695
- normalMap?: string | undefined;
696
- normalScale?: number | undefined;
697
- bumpMap?: string | undefined;
698
- bumpScale?: number | undefined;
699
- } | undefined;
700
- } | undefined;
701
- heelMaterialPreset?: string | undefined;
702
- position: [number, number, number];
703
- rotation: number;
704
- support: {
705
- kind: "level";
706
- } | {
707
- kind: "walls";
708
- } | {
709
- kind: "roof";
710
- roofSegmentId: `rseg_${string}`;
711
- localPosition: [number, number];
712
- curbHeight: number;
713
- };
714
- assembly?: {
715
- layers: {
716
- id: string;
717
- role: "air" | "covering" | "deck" | "fill" | "finish" | "furring" | "glazing" | "insulation" | "lining" | "membrane" | "sheathing" | "shell" | "structure" | "substrate" | "underlay";
718
- thickness: number;
719
- core?: true | undefined;
720
- spacing?: number | undefined;
721
- material?: string | undefined;
722
- slot?: string | undefined;
723
- returns?: boolean | undefined;
724
- display?: "construction" | "finished" | undefined;
725
- inset?: number | undefined;
726
- bottom?: number | undefined;
727
- lift?: number | undefined;
728
- src?: string | undefined;
729
- }[];
730
- backing?: {
731
- id: string;
732
- role: "air" | "covering" | "deck" | "fill" | "finish" | "furring" | "glazing" | "insulation" | "lining" | "membrane" | "sheathing" | "shell" | "structure" | "substrate" | "underlay";
733
- thickness: number;
734
- core?: true | undefined;
735
- spacing?: number | undefined;
736
- material?: string | undefined;
737
- slot?: string | undefined;
738
- returns?: boolean | undefined;
739
- display?: "construction" | "finished" | undefined;
740
- inset?: number | undefined;
741
- bottom?: number | undefined;
742
- lift?: number | undefined;
743
- src?: string | undefined;
744
- }[] | undefined;
745
- face?: "exterior" | "front" | undefined;
746
- presetId?: string | undefined;
747
- cavityInsulation?: string | undefined;
748
- } | undefined;
749
- slots?: Record<string, string> | undefined;
750
- children: `rseg_${string}`[];
751
- type: "roof";
752
- } | {
753
- object: "node";
754
- name?: string | undefined;
755
- parentId: string | null;
756
- visible: boolean;
757
- camera?: {
758
- position: [number, number, number];
759
- target: [number, number, number];
760
- mode: "orthographic" | "perspective";
761
- fov?: number | undefined;
762
- zoom?: number | undefined;
763
- } | undefined;
764
- metadata: Record<string, unknown>;
765
- provenance?: {
766
- refs: {
767
- ns?: string | undefined;
768
- id: string;
769
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
770
- }[];
771
- lineage?: {
772
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
773
- fromIds: string[];
774
- } | undefined;
775
- } | undefined;
776
- id: `shelf_${string}`;
777
- children: string[];
778
- position: [number, number, number];
779
- rotation: [number, number, number];
780
- supportSlabId?: string | undefined;
781
- width: number;
782
- depth: number;
783
- thickness: number;
784
- height: number;
785
- style: "bookshelf" | "cubby" | "open-rack" | "wall-shelf";
786
- rows: number;
787
- columns: number;
788
- withBack: boolean;
789
- withSides: boolean;
790
- withBottom: boolean;
791
- bracketStyle: "hidden" | "industrial" | "minimal";
792
- material?: {
793
- id?: string | undefined;
794
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
795
- properties?: {
796
- color: string;
797
- roughness: number;
798
- metalness: number;
799
- opacity: number;
800
- transparent: boolean;
801
- side: "back" | "double" | "front";
802
- } | undefined;
803
- texture?: {
804
- url: string;
805
- repeat?: [number, number] | undefined;
806
- scale?: number | undefined;
807
- offset?: [number, number] | undefined;
808
- normalMap?: string | undefined;
809
- normalScale?: number | undefined;
810
- bumpMap?: string | undefined;
811
- bumpScale?: number | undefined;
812
- } | undefined;
813
- } | undefined;
814
- materialPreset?: string | undefined;
815
- slots?: Record<string, string> | undefined;
816
- type: "shelf";
817
- } | {
818
- object: "node";
819
- name?: string | undefined;
820
- parentId: string | null;
821
- visible: boolean;
822
- camera?: {
823
- position: [number, number, number];
824
- target: [number, number, number];
825
- mode: "orthographic" | "perspective";
826
- fov?: number | undefined;
827
- zoom?: number | undefined;
828
- } | undefined;
829
- metadata: Record<string, unknown>;
830
- provenance?: {
831
- refs: {
832
- ns?: string | undefined;
833
- id: string;
834
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
835
- }[];
836
- lineage?: {
837
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
838
- fromIds: string[];
839
- } | undefined;
840
- } | undefined;
841
- id: `door_${string}`;
842
- material?: {
681
+ id: `door_${string}`;
682
+ material?: {
843
683
  id?: string | undefined;
844
684
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
845
685
  properties?: {
@@ -1066,252 +906,29 @@ export declare function wallAttachments(nodes: StructureNodes, wall: WallNode):
1066
906
  fromIds: string[];
1067
907
  } | undefined;
1068
908
  } | undefined;
1069
- type: "item";
1070
- id: `item_${string}`;
1071
- position: [number, number, number];
1072
- rotation: [number, number, number];
1073
- scale: [number, number, number];
1074
- side?: "back" | "front" | undefined;
1075
- children: string[];
1076
- wallId?: string | undefined;
1077
- wallT?: number | undefined;
1078
- roofSegmentId?: string | undefined;
1079
- roofFace?: "back" | "front" | "left" | "right" | undefined;
1080
- blockFaceId?: string | undefined;
1081
- supportSlabId?: string | undefined;
1082
- collectionIds?: `collection_${string}`[] | undefined;
1083
- slots?: Record<string, string> | undefined;
1084
- source?: {
1085
- kind: "script";
1086
- meta?: {
1087
- description?: string | undefined;
1088
- category?: string | undefined;
1089
- tags?: string[] | undefined;
1090
- parent?: string | undefined;
1091
- } | undefined;
1092
- language: "bpy" | "three";
1093
- script: string;
1094
- params: Record<string, string | number | boolean>;
1095
- artifact: string;
1096
- manifest: {
1097
- bounds: {
1098
- min: [number, number, number];
1099
- max: [number, number, number];
1100
- };
1101
- params: {
1102
- id: string;
1103
- label?: string | undefined;
1104
- kind: "boolean" | "number" | "string";
1105
- default: string | number | boolean;
1106
- min?: number | undefined;
1107
- max?: number | undefined;
1108
- step?: number | undefined;
1109
- unit?: string | undefined;
1110
- options?: string[] | undefined;
1111
- }[];
1112
- parts: {
1113
- id: string;
1114
- label?: string | undefined;
1115
- type?: string | undefined;
1116
- bounds?: {
1117
- min: [number, number, number];
1118
- max: [number, number, number];
1119
- } | undefined;
1120
- }[];
1121
- surfaces: {
1122
- part?: string | undefined;
1123
- y: number;
1124
- polygon: [number, number][];
1125
- }[];
1126
- slots: {
1127
- id: string;
1128
- label?: string | undefined;
1129
- color?: string | undefined;
1130
- roughness?: number | undefined;
1131
- metalness?: number | undefined;
1132
- transparent?: boolean | undefined;
1133
- emissive?: boolean | undefined;
1134
- }[];
1135
- anchors: {
1136
- id: string;
1137
- position: [number, number, number];
1138
- normal?: [number, number, number] | undefined;
1139
- }[];
1140
- lights: {
1141
- id: string;
1142
- position: [number, number, number];
1143
- color: string;
1144
- intensity: number;
1145
- distance?: number | undefined;
1146
- spot?: {
1147
- direction: [number, number, number];
1148
- angle: number;
1149
- softness: number;
1150
- } | undefined;
1151
- shadows?: boolean | undefined;
1152
- glow?: {
1153
- size: number;
1154
- strength: number;
1155
- } | undefined;
1156
- }[];
1157
- undersides: {
1158
- part?: string | undefined;
1159
- polygon: [number, number][];
1160
- plane: [number, number, number, number];
1161
- }[];
1162
- animations: {
1163
- name: string;
1164
- duration: number;
1165
- }[];
1166
- cutters?: {
1167
- host: "ceiling" | "mounted" | "slab" | "wall";
1168
- polygon: number[][];
1169
- minY: number;
1170
- maxY: number;
1171
- }[] | undefined;
1172
- cutout: boolean;
1173
- collider: boolean;
1174
- shape?: {
1175
- tolerance: number;
1176
- bands: {
1177
- y0: number;
1178
- y1: number;
1179
- polygons: {
1180
- outer: [number, number][];
1181
- holes?: [number, number][][] | undefined;
1182
- }[];
1183
- }[];
1184
- } | undefined;
1185
- triangles: number;
1186
- coverage?: number | undefined;
1187
- uncovered?: {
1188
- min: [number, number];
1189
- max: [number, number];
1190
- }[] | undefined;
1191
- };
1192
- images?: {
1193
- artifact: string;
1194
- thumbnail: string;
1195
- floorPlan: string;
1196
- } | undefined;
1197
- } | undefined;
1198
- asset: {
1199
- id: string;
1200
- category: string;
1201
- name: string;
1202
- thumbnail: string;
1203
- floorPlanUrl?: string | undefined;
1204
- source: "community" | "library" | "mine";
1205
- isDraft?: boolean | undefined;
1206
- src: string;
1207
- dimensions: [number, number, number];
1208
- attachTo?: "ceiling" | "wall" | "wall-side" | undefined;
1209
- recessed?: boolean | undefined;
1210
- tags?: string[] | undefined;
1211
- functionTags?: string[] | undefined;
1212
- offset: [number, number, number];
1213
- rotation: [number, number, number];
1214
- scale: [number, number, number];
1215
- surface?: {
1216
- height: number;
1217
- } | undefined;
1218
- interactive?: {
1219
- controls: ({
1220
- kind: "toggle";
1221
- label?: string | undefined;
1222
- default?: boolean | undefined;
1223
- } | {
1224
- kind: "slider";
1225
- label: string;
1226
- min: number;
1227
- max: number;
1228
- step: number;
1229
- unit?: string | undefined;
1230
- displayMode: "dial" | "slider" | "stepper";
1231
- default?: number | undefined;
1232
- } | {
1233
- kind: "temperature";
1234
- label: string;
1235
- min: number;
1236
- max: number;
1237
- unit: "C" | "F";
1238
- default?: number | undefined;
1239
- })[];
1240
- effects: ({
1241
- kind: "animation";
1242
- mode?: "ambient" | "open-close" | undefined;
1243
- control?: number | undefined;
1244
- clips: {
1245
- on?: string | undefined;
1246
- off?: string | undefined;
1247
- loop?: string | undefined;
1248
- };
1249
- } | {
1250
- kind: "light";
1251
- color: string;
1252
- intensityRange: [number, number];
1253
- distance?: number | undefined;
1254
- offset: [number, number, number];
1255
- spot?: {
1256
- direction: [number, number, number];
1257
- angle: number;
1258
- softness: number;
1259
- } | undefined;
1260
- shadows?: boolean | undefined;
1261
- glow?: {
1262
- size: number;
1263
- strength: number;
1264
- } | undefined;
1265
- })[];
1266
- } | undefined;
1267
- };
1268
- } | {
1269
- object: "node";
1270
- name?: string | undefined;
1271
- parentId: string | null;
1272
- visible: boolean;
1273
- camera?: {
1274
- position: [number, number, number];
1275
- target: [number, number, number];
1276
- mode: "orthographic" | "perspective";
1277
- fov?: number | undefined;
1278
- zoom?: number | undefined;
1279
- } | undefined;
1280
- metadata: Record<string, unknown>;
1281
- provenance?: {
1282
- refs: {
1283
- ns?: string | undefined;
1284
- id: string;
1285
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
1286
- }[];
1287
- lineage?: {
1288
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
1289
- fromIds: string[];
1290
- } | undefined;
1291
- } | undefined;
1292
- id: `window_${string}`;
1293
- material?: {
1294
- id?: string | undefined;
1295
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1296
- properties?: {
1297
- color: string;
1298
- roughness: number;
1299
- metalness: number;
1300
- opacity: number;
1301
- transparent: boolean;
1302
- side: "back" | "double" | "front";
1303
- } | undefined;
1304
- texture?: {
1305
- url: string;
1306
- repeat?: [number, number] | undefined;
1307
- scale?: number | undefined;
1308
- offset?: [number, number] | undefined;
1309
- normalMap?: string | undefined;
1310
- normalScale?: number | undefined;
1311
- bumpMap?: string | undefined;
1312
- bumpScale?: number | undefined;
1313
- } | undefined;
1314
- } | undefined;
909
+ id: `window_${string}`;
910
+ material?: {
911
+ id?: string | undefined;
912
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
913
+ properties?: {
914
+ color: string;
915
+ roughness: number;
916
+ metalness: number;
917
+ opacity: number;
918
+ transparent: boolean;
919
+ side: "back" | "double" | "front";
920
+ } | undefined;
921
+ texture?: {
922
+ url: string;
923
+ repeat?: [number, number] | undefined;
924
+ scale?: number | undefined;
925
+ offset?: [number, number] | undefined;
926
+ normalMap?: string | undefined;
927
+ normalScale?: number | undefined;
928
+ bumpMap?: string | undefined;
929
+ bumpScale?: number | undefined;
930
+ } | undefined;
931
+ } | undefined;
1315
932
  slots?: Record<string, string> | undefined;
1316
933
  source?: {
1317
934
  kind: "script";
@@ -1759,7 +1376,7 @@ export declare function wallAttachments(nodes: StructureNodes, wall: WallNode):
1759
1376
  fromIds: string[];
1760
1377
  } | undefined;
1761
1378
  } | undefined;
1762
- id: `slab_${string}`;
1379
+ id: `rseg_${string}`;
1763
1380
  material?: {
1764
1381
  id?: string | undefined;
1765
1382
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
@@ -1783,343 +1400,200 @@ export declare function wallAttachments(nodes: StructureNodes, wall: WallNode):
1783
1400
  } | undefined;
1784
1401
  } | undefined;
1785
1402
  materialPreset?: string | undefined;
1786
- slots?: Record<string, string> | undefined;
1787
- polygon: [number, number][];
1788
- holes: [number, number][][];
1789
- holeMetadata: {
1790
- source: "elevator" | "floor-opening" | "manual" | "room" | "stair";
1791
- openingId?: string | undefined;
1792
- stairId?: string | undefined;
1793
- elevatorId?: string | undefined;
1794
- }[];
1795
- elevation: number;
1796
- floorHeight?: number | undefined;
1797
- referenceFloorElevation?: number | undefined;
1798
- foundation?: {
1799
- type: "none" | "solid";
1800
- material?: string | {
1801
- id?: string | undefined;
1802
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1803
- properties?: {
1804
- color: string;
1805
- roughness: number;
1806
- metalness: number;
1807
- opacity: number;
1808
- transparent: boolean;
1809
- side: "back" | "double" | "front";
1810
- } | undefined;
1811
- texture?: {
1812
- url: string;
1813
- repeat?: [number, number] | undefined;
1814
- scale?: number | undefined;
1815
- offset?: [number, number] | undefined;
1816
- normalMap?: string | undefined;
1817
- normalScale?: number | undefined;
1818
- bumpMap?: string | undefined;
1819
- bumpScale?: number | undefined;
1820
- } | undefined;
1403
+ topMaterial?: {
1404
+ id?: string | undefined;
1405
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1406
+ properties?: {
1407
+ color: string;
1408
+ roughness: number;
1409
+ metalness: number;
1410
+ opacity: number;
1411
+ transparent: boolean;
1412
+ side: "back" | "double" | "front";
1413
+ } | undefined;
1414
+ texture?: {
1415
+ url: string;
1416
+ repeat?: [number, number] | undefined;
1417
+ scale?: number | undefined;
1418
+ offset?: [number, number] | undefined;
1419
+ normalMap?: string | undefined;
1420
+ normalScale?: number | undefined;
1421
+ bumpMap?: string | undefined;
1422
+ bumpScale?: number | undefined;
1821
1423
  } | undefined;
1822
1424
  } | undefined;
1823
- thickness: number;
1824
- recessed: boolean;
1825
- recessedRimElevation?: number | undefined;
1826
- fillToTerrain?: boolean | undefined;
1827
- boundary?: "auto" | undefined;
1828
- support?: "open" | undefined;
1829
- plateRole?: "base" | "platform" | "sunken" | undefined;
1830
- railing?: {
1831
- start: [number, number];
1832
- end: [number, number];
1833
- }[] | undefined;
1834
- zoneIds?: string[] | undefined;
1835
- associatedZoneIds?: string[] | undefined;
1836
- autoFromWalls: boolean;
1837
- surfaceScript?: {
1838
- kind: "script";
1839
- meta?: {
1840
- description?: string | undefined;
1841
- category?: string | undefined;
1842
- tags?: string[] | undefined;
1843
- parent?: string | undefined;
1425
+ topMaterialPreset?: string | undefined;
1426
+ edgeMaterial?: {
1427
+ id?: string | undefined;
1428
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1429
+ properties?: {
1430
+ color: string;
1431
+ roughness: number;
1432
+ metalness: number;
1433
+ opacity: number;
1434
+ transparent: boolean;
1435
+ side: "back" | "double" | "front";
1844
1436
  } | undefined;
1845
- language: "bpy" | "three";
1846
- script: string;
1847
- params: Record<string, string | number | boolean>;
1848
- artifact: string;
1849
- manifest: {
1850
- bounds: {
1851
- min: [number, number, number];
1852
- max: [number, number, number];
1853
- };
1854
- params: {
1855
- id: string;
1856
- label?: string | undefined;
1857
- kind: "boolean" | "number" | "string";
1858
- default: string | number | boolean;
1859
- min?: number | undefined;
1860
- max?: number | undefined;
1861
- step?: number | undefined;
1862
- unit?: string | undefined;
1863
- options?: string[] | undefined;
1864
- }[];
1865
- parts: {
1866
- id: string;
1867
- label?: string | undefined;
1868
- type?: string | undefined;
1869
- bounds?: {
1870
- min: [number, number, number];
1871
- max: [number, number, number];
1872
- } | undefined;
1873
- }[];
1874
- surfaces: {
1875
- part?: string | undefined;
1876
- y: number;
1877
- polygon: [number, number][];
1878
- }[];
1879
- slots: {
1880
- id: string;
1881
- label?: string | undefined;
1882
- color?: string | undefined;
1883
- roughness?: number | undefined;
1884
- metalness?: number | undefined;
1885
- transparent?: boolean | undefined;
1886
- emissive?: boolean | undefined;
1887
- }[];
1888
- anchors: {
1889
- id: string;
1890
- position: [number, number, number];
1891
- normal?: [number, number, number] | undefined;
1892
- }[];
1893
- lights: {
1894
- id: string;
1895
- position: [number, number, number];
1896
- color: string;
1897
- intensity: number;
1898
- distance?: number | undefined;
1899
- spot?: {
1900
- direction: [number, number, number];
1901
- angle: number;
1902
- softness: number;
1903
- } | undefined;
1904
- shadows?: boolean | undefined;
1905
- glow?: {
1906
- size: number;
1907
- strength: number;
1908
- } | undefined;
1909
- }[];
1910
- undersides: {
1911
- part?: string | undefined;
1912
- polygon: [number, number][];
1913
- plane: [number, number, number, number];
1914
- }[];
1915
- animations: {
1916
- name: string;
1917
- duration: number;
1918
- }[];
1919
- cutters?: {
1920
- host: "ceiling" | "mounted" | "slab" | "wall";
1921
- polygon: number[][];
1922
- minY: number;
1923
- maxY: number;
1924
- }[] | undefined;
1925
- cutout: boolean;
1926
- collider: boolean;
1927
- shape?: {
1928
- tolerance: number;
1929
- bands: {
1930
- y0: number;
1931
- y1: number;
1932
- polygons: {
1933
- outer: [number, number][];
1934
- holes?: [number, number][][] | undefined;
1935
- }[];
1936
- }[];
1937
- } | undefined;
1938
- triangles: number;
1939
- coverage?: number | undefined;
1940
- uncovered?: {
1941
- min: [number, number];
1942
- max: [number, number];
1943
- }[] | undefined;
1944
- };
1945
- images?: {
1946
- artifact: string;
1947
- thumbnail: string;
1948
- floorPlan: string;
1437
+ texture?: {
1438
+ url: string;
1439
+ repeat?: [number, number] | undefined;
1440
+ scale?: number | undefined;
1441
+ offset?: [number, number] | undefined;
1442
+ normalMap?: string | undefined;
1443
+ normalScale?: number | undefined;
1444
+ bumpMap?: string | undefined;
1445
+ bumpScale?: number | undefined;
1949
1446
  } | undefined;
1950
- inputs: string;
1951
- } | undefined;
1952
- type: "slab";
1953
- } | {
1954
- object: "node";
1955
- name?: string | undefined;
1956
- parentId: string | null;
1957
- visible: boolean;
1958
- camera?: {
1959
- position: [number, number, number];
1960
- target: [number, number, number];
1961
- mode: "orthographic" | "perspective";
1962
- fov?: number | undefined;
1963
- zoom?: number | undefined;
1964
1447
  } | undefined;
1965
- metadata: Record<string, unknown>;
1966
- provenance?: {
1967
- refs: {
1968
- ns?: string | undefined;
1969
- id: string;
1970
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
1971
- }[];
1972
- lineage?: {
1973
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
1974
- fromIds: string[];
1448
+ edgeMaterialPreset?: string | undefined;
1449
+ wallMaterial?: {
1450
+ id?: string | undefined;
1451
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1452
+ properties?: {
1453
+ color: string;
1454
+ roughness: number;
1455
+ metalness: number;
1456
+ opacity: number;
1457
+ transparent: boolean;
1458
+ side: "back" | "double" | "front";
1459
+ } | undefined;
1460
+ texture?: {
1461
+ url: string;
1462
+ repeat?: [number, number] | undefined;
1463
+ scale?: number | undefined;
1464
+ offset?: [number, number] | undefined;
1465
+ normalMap?: string | undefined;
1466
+ normalScale?: number | undefined;
1467
+ bumpMap?: string | undefined;
1468
+ bumpScale?: number | undefined;
1975
1469
  } | undefined;
1976
1470
  } | undefined;
1977
- id: `leanto_${string}`;
1471
+ wallMaterialPreset?: string | undefined;
1978
1472
  position: [number, number, number];
1979
- rotation: [number, number, number];
1980
- children: (`column_${string}` | `roof_${string}`)[];
1981
- canopyForm: "butterfly" | "gable" | "mono";
1982
- hostKind: "conical-roof" | "freestanding" | "slab-edge" | "wall";
1983
- hostHeightOffset: number;
1984
- hostSlabId?: `slab_${string}` | undefined;
1985
- hostSlabEdgeIndex?: number | undefined;
1986
- hostSlabEdgeT?: number | undefined;
1987
- span: number;
1988
- autoSpan: boolean;
1989
- projection: number;
1990
- spanArcCenterZ?: number | undefined;
1991
- spanArcRadius?: number | undefined;
1992
- highEdgeHeight: number;
1993
- lowEdgeHeight: number;
1994
- pitch: number;
1995
- resizeLock: "preserve-high-edge" | "preserve-low-edge" | "preserve-pitch";
1996
- leftEndCondition: "joined" | "open" | "wall-abutment";
1997
- rightEndCondition: "joined" | "open" | "wall-abutment";
1998
- autoMiterCorners: boolean;
1999
- sideFlashing: boolean;
2000
- flashingProjection: number;
2001
- flashingHeight: number;
1473
+ rotation: number;
1474
+ roofType: "barrel" | "conical" | "dutch" | "flat" | "gable" | "gambrel" | "hip" | "mansard" | "shed";
1475
+ barrelRise?: number | undefined;
1476
+ barrelSegments?: number | undefined;
1477
+ roofSystem?: "glazed" | "standard" | undefined;
1478
+ glazing?: {
1479
+ across: {
1480
+ layout: "count" | "fixed-spacing" | "maximum-spacing";
1481
+ count: number;
1482
+ spacing: number;
1483
+ alignment: "center" | "end" | "start";
1484
+ };
1485
+ along: {
1486
+ layout: "count" | "fixed-spacing" | "maximum-spacing";
1487
+ count: number;
1488
+ spacing: number;
1489
+ alignment: "center" | "end" | "start";
1490
+ };
1491
+ frameWidth: number;
1492
+ frameDepth: number;
1493
+ glassThickness: number;
1494
+ frameColor: string;
1495
+ glassColor: string;
1496
+ glassOpacity: number;
1497
+ glassRoughness: number;
1498
+ glazedEnds: boolean;
1499
+ panelType: "empty" | "glass" | "solid";
1500
+ panels: {
1501
+ face: string;
1502
+ column: number;
1503
+ row: number;
1504
+ type: "empty" | "glass" | "solid";
1505
+ }[];
1506
+ } | undefined;
2002
1507
  slots?: Record<string, string> | undefined;
2003
- highSideMode: "independent-high-beam" | "wall-ledger";
2004
- ledgerVerticalOffset: number;
2005
- lowBeamInset: number;
2006
- gutterEnabled: boolean;
2007
- gutterProfile: "box" | "half-round" | "k-style";
2008
- gutterSize: number;
2009
- downspoutEnabled: boolean;
2010
- downspoutPosition: number;
2011
- connectionMode: "auto" | "manual";
2012
- hostRoofId?: `roof_${string}` | undefined;
2013
- hostRoofSegmentId?: string | undefined;
2014
- hostRoofEdge?: "+X" | "+Z" | "-X" | "-Z" | undefined;
2015
- hostRoofEdgeRange?: [number, number] | undefined;
2016
- connectionOffset: number;
2017
- connectionInset: number;
2018
- matchHostRoofMaterial: boolean;
2019
- matchHostRoofStructure: boolean;
2020
- roofThickness: number;
1508
+ width: number;
1509
+ depth: number;
1510
+ conicalStartAngle?: number | undefined;
1511
+ conicalSweepAngle?: number | undefined;
1512
+ conicalFullCircle?: boolean | undefined;
1513
+ trim: {
1514
+ left: number;
1515
+ right: number;
1516
+ front: number;
1517
+ back: number;
1518
+ frontLeft: number;
1519
+ frontRight: number;
1520
+ backLeft: number;
1521
+ backRight: number;
1522
+ frontLeftX: number;
1523
+ frontLeftZ: number;
1524
+ frontRightX: number;
1525
+ frontRightZ: number;
1526
+ backLeftX: number;
1527
+ backLeftZ: number;
1528
+ backRightX: number;
1529
+ backRightZ: number;
1530
+ };
1531
+ wallHeight: number;
1532
+ pitch: number;
1533
+ wallThickness: number;
1534
+ deckThickness: number;
1535
+ overhang: number;
1536
+ gableOverhang?: number | undefined;
2021
1537
  shingleThickness: number;
2022
- highOverhang: number;
2023
- lowOverhang: number;
2024
- leftOverhang: number;
2025
- rightOverhang: number;
2026
- coveringType: "generic" | "metal-panel" | "shingle";
2027
- beamWidth: number;
2028
- beamHeight: number;
2029
- ledgerDepth: number;
2030
- ledgerHeight: number;
2031
- rafterWidth: number;
2032
- rafterHeight: number;
2033
- rafterSpacing: number;
2034
- rafterEndInset: number;
2035
- framingStrategy: "covering-specific" | "hidden" | "purlins" | "rafters";
2036
- purlinWidth: number;
2037
- purlinHeight: number;
2038
- purlinSpacing: number;
2039
- postWidth: number;
2040
- postDepth: number;
2041
- postCount: number;
2042
- postLayoutMode: "count" | "target-spacing";
2043
- postSpacing: number;
2044
- postInset: number;
2045
- omittedPostSlots: {
2046
- side: "high" | "low";
2047
- index: number;
2048
- layoutCount: number;
2049
- }[];
2050
- postBracing: "knee" | "none";
2051
- footingStyle: "base-plate" | "concrete-pad" | "none";
2052
- type: "lean-to-extension";
2053
- } | {
2054
- object: "node";
2055
- name?: string | undefined;
2056
- parentId: string | null;
2057
- visible: boolean;
2058
- camera?: {
2059
- position: [number, number, number];
2060
- target: [number, number, number];
2061
- mode: "orthographic" | "perspective";
2062
- fov?: number | undefined;
2063
- zoom?: number | undefined;
2064
- } | undefined;
2065
- metadata: Record<string, unknown>;
2066
- provenance?: {
2067
- refs: {
2068
- ns?: string | undefined;
2069
- id: string;
2070
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
2071
- }[];
2072
- lineage?: {
2073
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
2074
- fromIds: string[];
1538
+ buildUp?: {
1539
+ presetId?: string | undefined;
1540
+ roofing: {
1541
+ kind: "architectural-shingle" | "asphalt-3-tab" | "clay-tile" | "concrete-tile" | "slate" | "standing-seam-metal" | "wood-shake";
1542
+ thickness: number;
1543
+ name?: string | undefined;
1544
+ };
1545
+ underlayment?: {
1546
+ kind: "felt-15" | "felt-30" | "ice-and-water" | "synthetic";
1547
+ thickness: number;
1548
+ name?: string | undefined;
2075
1549
  } | undefined;
2076
- } | undefined;
2077
- id: `wall_${string}`;
2078
- wallType?: "curtain" | "railing" | "standard" | undefined;
2079
- curtainWall?: {
2080
- construction: "stick" | "unitized";
2081
- framing: "capped" | "horizontal-caps" | "structural-glazing" | "vertical-caps";
2082
- columns: {
2083
- layout: "count" | "fixed-spacing" | "maximum-spacing";
2084
- count: number;
2085
- spacing: number;
2086
- alignment: "center" | "end" | "start";
1550
+ sheathing: {
1551
+ kind: "osb" | "plywood";
1552
+ thickness: number;
1553
+ name?: string | undefined;
2087
1554
  };
2088
- rows: {
2089
- layout: "count" | "fixed-spacing" | "maximum-spacing";
2090
- count: number;
1555
+ structure: {
1556
+ system: "rafters" | "trusses";
1557
+ size: "2x10" | "2x12" | "2x4" | "2x6" | "2x8";
2091
1558
  spacing: number;
2092
- alignment: "center" | "end" | "start";
2093
1559
  };
2094
- mullionWidth: number;
2095
- transomWidth: number;
2096
- perimeterWidth: number;
2097
- jointWidth: number;
2098
- glassThickness: number;
2099
- panelType: "empty" | "glass" | "solid";
2100
- spandrel: "bottom" | "none" | "top";
2101
- frameColor: string;
2102
- glassColor: string;
2103
- solidColor: string;
2104
- glassOpacity: number;
2105
- glassRoughness: number;
2106
- panels: {
2107
- column: number;
2108
- row: number;
2109
- type: "empty" | "glass" | "solid";
2110
- }[];
1560
+ insulation?: {
1561
+ kind: "batt" | "blown" | "rigid";
1562
+ thickness: number;
1563
+ name?: string | undefined;
1564
+ } | undefined;
1565
+ finish?: {
1566
+ kind: "drywall" | "plaster" | "wood-plank";
1567
+ thickness: number;
1568
+ name?: string | undefined;
1569
+ } | undefined;
2111
1570
  } | undefined;
2112
- railing?: {
2113
- style: "balusters" | "boards" | "cable" | "glass" | "metal" | "post-and-rail";
2114
- postSpacing: number;
2115
- postSize: number;
2116
- infillSize: number;
2117
- infillGap: number;
2118
- bottomClearance: number;
2119
- cap: boolean;
1571
+ arc?: {
1572
+ centerX: number;
1573
+ centerZ: number;
1574
+ radius: number;
2120
1575
  } | undefined;
2121
- children: (`door_${string}` | `item_${string}` | `leanto_${string}` | `procedural-item_${string}` | `window_${string}`)[];
2122
- material?: {
1576
+ shedSideInfillSpan?: number | undefined;
1577
+ shedSideInfillMinX?: number | undefined;
1578
+ shedSideInfillMaxX?: number | undefined;
1579
+ shedFootprintPieces?: [number, number][][] | undefined;
1580
+ shedOpenEndSides?: ("left" | "right")[] | undefined;
1581
+ shedJointFrame?: {
1582
+ position: [number, number, number];
1583
+ rotation: number;
1584
+ } | undefined;
1585
+ shedJointOwnerId?: string | undefined;
1586
+ shedJointNeighborIds?: string[] | undefined;
1587
+ shedJointScopeId?: string | undefined;
1588
+ managedByParent: boolean;
1589
+ wallShell: "auto" | "include" | "omit";
1590
+ shedInsetEndPanels: boolean;
1591
+ fascia?: boolean | undefined;
1592
+ eaveCut?: "plumb" | "plumb-level" | "square" | undefined;
1593
+ fasciaHighEdge?: boolean | undefined;
1594
+ fasciaHeight?: number | undefined;
1595
+ fasciaDepth?: number | undefined;
1596
+ fasciaMaterial?: {
2123
1597
  id?: string | undefined;
2124
1598
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
2125
1599
  properties?: {
@@ -2141,8 +1615,8 @@ export declare function wallAttachments(nodes: StructureNodes, wall: WallNode):
2141
1615
  bumpScale?: number | undefined;
2142
1616
  } | undefined;
2143
1617
  } | undefined;
2144
- materialPreset?: string | undefined;
2145
- interiorMaterial?: {
1618
+ fasciaMaterialPreset?: string | undefined;
1619
+ heelMaterial?: {
2146
1620
  id?: string | undefined;
2147
1621
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
2148
1622
  properties?: {
@@ -2164,8 +1638,8 @@ export declare function wallAttachments(nodes: StructureNodes, wall: WallNode):
2164
1638
  bumpScale?: number | undefined;
2165
1639
  } | undefined;
2166
1640
  } | undefined;
2167
- interiorMaterialPreset?: string | undefined;
2168
- exteriorMaterial?: {
1641
+ heelMaterialPreset?: string | undefined;
1642
+ gableLeftMaterial?: {
2169
1643
  id?: string | undefined;
2170
1644
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
2171
1645
  properties?: {
@@ -2187,70 +1661,193 @@ export declare function wallAttachments(nodes: StructureNodes, wall: WallNode):
2187
1661
  bumpScale?: number | undefined;
2188
1662
  } | undefined;
2189
1663
  } | undefined;
2190
- exteriorMaterialPreset?: string | undefined;
2191
- slots?: Record<string, string> | undefined;
2192
- legacyFaceMaterials?: {
2193
- a?: {
2194
- material?: {
2195
- id?: string | undefined;
2196
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
2197
- properties?: {
2198
- color: string;
2199
- roughness: number;
2200
- metalness: number;
2201
- opacity: number;
2202
- transparent: boolean;
2203
- side: "back" | "double" | "front";
2204
- } | undefined;
2205
- texture?: {
2206
- url: string;
2207
- repeat?: [number, number] | undefined;
2208
- scale?: number | undefined;
2209
- offset?: [number, number] | undefined;
2210
- normalMap?: string | undefined;
2211
- normalScale?: number | undefined;
2212
- bumpMap?: string | undefined;
2213
- bumpScale?: number | undefined;
2214
- } | undefined;
2215
- } | undefined;
2216
- materialPreset?: string | undefined;
1664
+ gableLeftMaterialPreset?: string | undefined;
1665
+ gableRightMaterial?: {
1666
+ id?: string | undefined;
1667
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1668
+ properties?: {
1669
+ color: string;
1670
+ roughness: number;
1671
+ metalness: number;
1672
+ opacity: number;
1673
+ transparent: boolean;
1674
+ side: "back" | "double" | "front";
2217
1675
  } | undefined;
2218
- b?: {
2219
- material?: {
2220
- id?: string | undefined;
2221
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
2222
- properties?: {
2223
- color: string;
2224
- roughness: number;
2225
- metalness: number;
2226
- opacity: number;
2227
- transparent: boolean;
2228
- side: "back" | "double" | "front";
2229
- } | undefined;
2230
- texture?: {
2231
- url: string;
2232
- repeat?: [number, number] | undefined;
2233
- scale?: number | undefined;
2234
- offset?: [number, number] | undefined;
2235
- normalMap?: string | undefined;
2236
- normalScale?: number | undefined;
2237
- bumpMap?: string | undefined;
2238
- bumpScale?: number | undefined;
2239
- } | undefined;
2240
- } | undefined;
2241
- materialPreset?: string | undefined;
1676
+ texture?: {
1677
+ url: string;
1678
+ repeat?: [number, number] | undefined;
1679
+ scale?: number | undefined;
1680
+ offset?: [number, number] | undefined;
1681
+ normalMap?: string | undefined;
1682
+ normalScale?: number | undefined;
1683
+ bumpMap?: string | undefined;
1684
+ bumpScale?: number | undefined;
2242
1685
  } | undefined;
2243
1686
  } | undefined;
2244
- faceRegions?: {
2245
- id: string;
2246
- face: "a" | "b";
2247
- u0?: number | undefined;
2248
- u1?: number | undefined;
2249
- v0?: number | undefined;
2250
- v1?: number | undefined;
2251
- finish: string;
2252
- }[] | undefined;
2253
- thickness?: number | undefined;
1687
+ gableRightMaterialPreset?: string | undefined;
1688
+ gambrelLowerWidthRatio: number;
1689
+ gambrelLowerHeightRatio: number;
1690
+ mansardSteepWidthRatio: number;
1691
+ mansardSteepHeightRatio: number;
1692
+ dutchHipWidthRatio: number;
1693
+ dutchHipHeightRatio: number;
1694
+ dutchWaistLengthRatio: number;
1695
+ dutchGabletRake: number;
1696
+ dutchTopRakeThickness: number;
1697
+ children: string[];
1698
+ type: "roof-segment";
1699
+ } | {
1700
+ object: "node";
1701
+ name?: string | undefined;
1702
+ parentId: string | null;
1703
+ visible: boolean;
1704
+ camera?: {
1705
+ position: [number, number, number];
1706
+ target: [number, number, number];
1707
+ mode: "orthographic" | "perspective";
1708
+ fov?: number | undefined;
1709
+ zoom?: number | undefined;
1710
+ } | undefined;
1711
+ metadata: Record<string, unknown>;
1712
+ provenance?: {
1713
+ refs: {
1714
+ ns?: string | undefined;
1715
+ id: string;
1716
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
1717
+ }[];
1718
+ lineage?: {
1719
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
1720
+ fromIds: string[];
1721
+ } | undefined;
1722
+ } | undefined;
1723
+ id: `roof_${string}`;
1724
+ material?: {
1725
+ id?: string | undefined;
1726
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1727
+ properties?: {
1728
+ color: string;
1729
+ roughness: number;
1730
+ metalness: number;
1731
+ opacity: number;
1732
+ transparent: boolean;
1733
+ side: "back" | "double" | "front";
1734
+ } | undefined;
1735
+ texture?: {
1736
+ url: string;
1737
+ repeat?: [number, number] | undefined;
1738
+ scale?: number | undefined;
1739
+ offset?: [number, number] | undefined;
1740
+ normalMap?: string | undefined;
1741
+ normalScale?: number | undefined;
1742
+ bumpMap?: string | undefined;
1743
+ bumpScale?: number | undefined;
1744
+ } | undefined;
1745
+ } | undefined;
1746
+ materialPreset?: string | undefined;
1747
+ topMaterial?: {
1748
+ id?: string | undefined;
1749
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1750
+ properties?: {
1751
+ color: string;
1752
+ roughness: number;
1753
+ metalness: number;
1754
+ opacity: number;
1755
+ transparent: boolean;
1756
+ side: "back" | "double" | "front";
1757
+ } | undefined;
1758
+ texture?: {
1759
+ url: string;
1760
+ repeat?: [number, number] | undefined;
1761
+ scale?: number | undefined;
1762
+ offset?: [number, number] | undefined;
1763
+ normalMap?: string | undefined;
1764
+ normalScale?: number | undefined;
1765
+ bumpMap?: string | undefined;
1766
+ bumpScale?: number | undefined;
1767
+ } | undefined;
1768
+ } | undefined;
1769
+ topMaterialPreset?: string | undefined;
1770
+ edgeMaterial?: {
1771
+ id?: string | undefined;
1772
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1773
+ properties?: {
1774
+ color: string;
1775
+ roughness: number;
1776
+ metalness: number;
1777
+ opacity: number;
1778
+ transparent: boolean;
1779
+ side: "back" | "double" | "front";
1780
+ } | undefined;
1781
+ texture?: {
1782
+ url: string;
1783
+ repeat?: [number, number] | undefined;
1784
+ scale?: number | undefined;
1785
+ offset?: [number, number] | undefined;
1786
+ normalMap?: string | undefined;
1787
+ normalScale?: number | undefined;
1788
+ bumpMap?: string | undefined;
1789
+ bumpScale?: number | undefined;
1790
+ } | undefined;
1791
+ } | undefined;
1792
+ edgeMaterialPreset?: string | undefined;
1793
+ wallMaterial?: {
1794
+ id?: string | undefined;
1795
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1796
+ properties?: {
1797
+ color: string;
1798
+ roughness: number;
1799
+ metalness: number;
1800
+ opacity: number;
1801
+ transparent: boolean;
1802
+ side: "back" | "double" | "front";
1803
+ } | undefined;
1804
+ texture?: {
1805
+ url: string;
1806
+ repeat?: [number, number] | undefined;
1807
+ scale?: number | undefined;
1808
+ offset?: [number, number] | undefined;
1809
+ normalMap?: string | undefined;
1810
+ normalScale?: number | undefined;
1811
+ bumpMap?: string | undefined;
1812
+ bumpScale?: number | undefined;
1813
+ } | undefined;
1814
+ } | undefined;
1815
+ wallMaterialPreset?: string | undefined;
1816
+ heelMaterial?: {
1817
+ id?: string | undefined;
1818
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1819
+ properties?: {
1820
+ color: string;
1821
+ roughness: number;
1822
+ metalness: number;
1823
+ opacity: number;
1824
+ transparent: boolean;
1825
+ side: "back" | "double" | "front";
1826
+ } | undefined;
1827
+ texture?: {
1828
+ url: string;
1829
+ repeat?: [number, number] | undefined;
1830
+ scale?: number | undefined;
1831
+ offset?: [number, number] | undefined;
1832
+ normalMap?: string | undefined;
1833
+ normalScale?: number | undefined;
1834
+ bumpMap?: string | undefined;
1835
+ bumpScale?: number | undefined;
1836
+ } | undefined;
1837
+ } | undefined;
1838
+ heelMaterialPreset?: string | undefined;
1839
+ position: [number, number, number];
1840
+ rotation: number;
1841
+ support: {
1842
+ kind: "level";
1843
+ } | {
1844
+ kind: "walls";
1845
+ } | {
1846
+ kind: "roof";
1847
+ roofSegmentId: `rseg_${string}`;
1848
+ localPosition: [number, number];
1849
+ curbHeight: number;
1850
+ };
2254
1851
  assembly?: {
2255
1852
  layers: {
2256
1853
  id: string;
@@ -2286,334 +1883,34 @@ export declare function wallAttachments(nodes: StructureNodes, wall: WallNode):
2286
1883
  presetId?: string | undefined;
2287
1884
  cavityInsulation?: string | undefined;
2288
1885
  } | undefined;
2289
- justification?: "a" | "b" | undefined;
2290
- height?: number | undefined;
2291
- curveOffset?: number | undefined;
2292
- supportSlabId?: string | undefined;
2293
- supportOffset?: number | undefined;
2294
- fillToTerrain?: boolean | undefined;
2295
- cap?: boolean | undefined;
2296
- underpinning?: {
2297
- rim: number;
2298
- stem: number;
2299
- openings?: {
2300
- u: number;
2301
- width: number;
2302
- top: number;
2303
- bottom: number;
2304
- }[] | undefined;
2305
- } | undefined;
2306
- skirting?: {
2307
- enabled: boolean;
2308
- sides: "a" | "b" | "both" | "exterior" | "interior";
2309
- height: number;
2310
- proud: number;
2311
- profile: "base-colonial" | "base-modern" | "base-ogee" | "base-shoe" | "bevel" | "bullnose" | "cove" | "crown-cove" | "crown-craftsman" | "crown-layered" | "crown-ogee" | "flat" | "rail-ogee" | "rail-picture" | "rail-rounded" | "rail-stepped" | "triangle";
2312
- offsetY?: number | undefined;
2313
- } | undefined;
2314
- crown?: {
2315
- enabled: boolean;
2316
- sides: "a" | "b" | "both" | "exterior" | "interior";
2317
- height: number;
2318
- proud: number;
2319
- profile: "base-colonial" | "base-modern" | "base-ogee" | "base-shoe" | "bevel" | "bullnose" | "cove" | "crown-cove" | "crown-craftsman" | "crown-layered" | "crown-ogee" | "flat" | "rail-ogee" | "rail-picture" | "rail-rounded" | "rail-stepped" | "triangle";
2320
- offsetY?: number | undefined;
1886
+ slots?: Record<string, string> | undefined;
1887
+ children: string[];
1888
+ type: "roof";
1889
+ } | {
1890
+ object: "node";
1891
+ name?: string | undefined;
1892
+ parentId: string | null;
1893
+ visible: boolean;
1894
+ camera?: {
1895
+ position: [number, number, number];
1896
+ target: [number, number, number];
1897
+ mode: "orthographic" | "perspective";
1898
+ fov?: number | undefined;
1899
+ zoom?: number | undefined;
2321
1900
  } | undefined;
2322
- chairRail?: {
2323
- enabled: boolean;
2324
- sides: "a" | "b" | "both" | "exterior" | "interior";
2325
- height: number;
2326
- proud: number;
2327
- profile: "base-colonial" | "base-modern" | "base-ogee" | "base-shoe" | "bevel" | "bullnose" | "cove" | "crown-cove" | "crown-craftsman" | "crown-layered" | "crown-ogee" | "flat" | "rail-ogee" | "rail-picture" | "rail-rounded" | "rail-stepped" | "triangle";
2328
- offsetY?: number | undefined;
1901
+ metadata: Record<string, unknown>;
1902
+ provenance?: {
1903
+ refs: {
1904
+ ns?: string | undefined;
1905
+ id: string;
1906
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
1907
+ }[];
1908
+ lineage?: {
1909
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
1910
+ fromIds: string[];
1911
+ } | undefined;
2329
1912
  } | undefined;
2330
- finishScripts?: {
2331
- a?: {
2332
- kind: "script";
2333
- meta?: {
2334
- description?: string | undefined;
2335
- category?: string | undefined;
2336
- tags?: string[] | undefined;
2337
- parent?: string | undefined;
2338
- } | undefined;
2339
- language: "bpy" | "three";
2340
- script: string;
2341
- params: Record<string, string | number | boolean>;
2342
- artifact: string;
2343
- manifest: {
2344
- bounds: {
2345
- min: [number, number, number];
2346
- max: [number, number, number];
2347
- };
2348
- params: {
2349
- id: string;
2350
- label?: string | undefined;
2351
- kind: "boolean" | "number" | "string";
2352
- default: string | number | boolean;
2353
- min?: number | undefined;
2354
- max?: number | undefined;
2355
- step?: number | undefined;
2356
- unit?: string | undefined;
2357
- options?: string[] | undefined;
2358
- }[];
2359
- parts: {
2360
- id: string;
2361
- label?: string | undefined;
2362
- type?: string | undefined;
2363
- bounds?: {
2364
- min: [number, number, number];
2365
- max: [number, number, number];
2366
- } | undefined;
2367
- }[];
2368
- surfaces: {
2369
- part?: string | undefined;
2370
- y: number;
2371
- polygon: [number, number][];
2372
- }[];
2373
- slots: {
2374
- id: string;
2375
- label?: string | undefined;
2376
- color?: string | undefined;
2377
- roughness?: number | undefined;
2378
- metalness?: number | undefined;
2379
- transparent?: boolean | undefined;
2380
- emissive?: boolean | undefined;
2381
- }[];
2382
- anchors: {
2383
- id: string;
2384
- position: [number, number, number];
2385
- normal?: [number, number, number] | undefined;
2386
- }[];
2387
- lights: {
2388
- id: string;
2389
- position: [number, number, number];
2390
- color: string;
2391
- intensity: number;
2392
- distance?: number | undefined;
2393
- spot?: {
2394
- direction: [number, number, number];
2395
- angle: number;
2396
- softness: number;
2397
- } | undefined;
2398
- shadows?: boolean | undefined;
2399
- glow?: {
2400
- size: number;
2401
- strength: number;
2402
- } | undefined;
2403
- }[];
2404
- undersides: {
2405
- part?: string | undefined;
2406
- polygon: [number, number][];
2407
- plane: [number, number, number, number];
2408
- }[];
2409
- animations: {
2410
- name: string;
2411
- duration: number;
2412
- }[];
2413
- cutters?: {
2414
- host: "ceiling" | "mounted" | "slab" | "wall";
2415
- polygon: number[][];
2416
- minY: number;
2417
- maxY: number;
2418
- }[] | undefined;
2419
- cutout: boolean;
2420
- collider: boolean;
2421
- shape?: {
2422
- tolerance: number;
2423
- bands: {
2424
- y0: number;
2425
- y1: number;
2426
- polygons: {
2427
- outer: [number, number][];
2428
- holes?: [number, number][][] | undefined;
2429
- }[];
2430
- }[];
2431
- } | undefined;
2432
- triangles: number;
2433
- coverage?: number | undefined;
2434
- uncovered?: {
2435
- min: [number, number];
2436
- max: [number, number];
2437
- }[] | undefined;
2438
- };
2439
- images?: {
2440
- artifact: string;
2441
- thumbnail: string;
2442
- floorPlan: string;
2443
- } | undefined;
2444
- inputs: string;
2445
- toHeight?: number | undefined;
2446
- } | undefined;
2447
- b?: {
2448
- kind: "script";
2449
- meta?: {
2450
- description?: string | undefined;
2451
- category?: string | undefined;
2452
- tags?: string[] | undefined;
2453
- parent?: string | undefined;
2454
- } | undefined;
2455
- language: "bpy" | "three";
2456
- script: string;
2457
- params: Record<string, string | number | boolean>;
2458
- artifact: string;
2459
- manifest: {
2460
- bounds: {
2461
- min: [number, number, number];
2462
- max: [number, number, number];
2463
- };
2464
- params: {
2465
- id: string;
2466
- label?: string | undefined;
2467
- kind: "boolean" | "number" | "string";
2468
- default: string | number | boolean;
2469
- min?: number | undefined;
2470
- max?: number | undefined;
2471
- step?: number | undefined;
2472
- unit?: string | undefined;
2473
- options?: string[] | undefined;
2474
- }[];
2475
- parts: {
2476
- id: string;
2477
- label?: string | undefined;
2478
- type?: string | undefined;
2479
- bounds?: {
2480
- min: [number, number, number];
2481
- max: [number, number, number];
2482
- } | undefined;
2483
- }[];
2484
- surfaces: {
2485
- part?: string | undefined;
2486
- y: number;
2487
- polygon: [number, number][];
2488
- }[];
2489
- slots: {
2490
- id: string;
2491
- label?: string | undefined;
2492
- color?: string | undefined;
2493
- roughness?: number | undefined;
2494
- metalness?: number | undefined;
2495
- transparent?: boolean | undefined;
2496
- emissive?: boolean | undefined;
2497
- }[];
2498
- anchors: {
2499
- id: string;
2500
- position: [number, number, number];
2501
- normal?: [number, number, number] | undefined;
2502
- }[];
2503
- lights: {
2504
- id: string;
2505
- position: [number, number, number];
2506
- color: string;
2507
- intensity: number;
2508
- distance?: number | undefined;
2509
- spot?: {
2510
- direction: [number, number, number];
2511
- angle: number;
2512
- softness: number;
2513
- } | undefined;
2514
- shadows?: boolean | undefined;
2515
- glow?: {
2516
- size: number;
2517
- strength: number;
2518
- } | undefined;
2519
- }[];
2520
- undersides: {
2521
- part?: string | undefined;
2522
- polygon: [number, number][];
2523
- plane: [number, number, number, number];
2524
- }[];
2525
- animations: {
2526
- name: string;
2527
- duration: number;
2528
- }[];
2529
- cutters?: {
2530
- host: "ceiling" | "mounted" | "slab" | "wall";
2531
- polygon: number[][];
2532
- minY: number;
2533
- maxY: number;
2534
- }[] | undefined;
2535
- cutout: boolean;
2536
- collider: boolean;
2537
- shape?: {
2538
- tolerance: number;
2539
- bands: {
2540
- y0: number;
2541
- y1: number;
2542
- polygons: {
2543
- outer: [number, number][];
2544
- holes?: [number, number][][] | undefined;
2545
- }[];
2546
- }[];
2547
- } | undefined;
2548
- triangles: number;
2549
- coverage?: number | undefined;
2550
- uncovered?: {
2551
- min: [number, number];
2552
- max: [number, number];
2553
- }[] | undefined;
2554
- };
2555
- images?: {
2556
- artifact: string;
2557
- thumbnail: string;
2558
- floorPlan: string;
2559
- } | undefined;
2560
- inputs: string;
2561
- toHeight?: number | undefined;
2562
- } | undefined;
2563
- } | undefined;
2564
- start: [number, number];
2565
- end: [number, number];
2566
- frontSide: "exterior" | "interior" | "unknown";
2567
- backSide: "exterior" | "interior" | "unknown";
2568
- type: "wall";
2569
- } | {
2570
- object: "node";
2571
- name?: string | undefined;
2572
- parentId: string | null;
2573
- visible: boolean;
2574
- camera?: {
2575
- position: [number, number, number];
2576
- target: [number, number, number];
2577
- mode: "orthographic" | "perspective";
2578
- fov?: number | undefined;
2579
- zoom?: number | undefined;
2580
- } | undefined;
2581
- metadata: Record<string, unknown>;
2582
- provenance?: {
2583
- refs: {
2584
- ns?: string | undefined;
2585
- id: string;
2586
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
2587
- }[];
2588
- lineage?: {
2589
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
2590
- fromIds: string[];
2591
- } | undefined;
2592
- } | undefined;
2593
- position: [number, number, number];
2594
- rotation: number;
2595
- supportSlabId?: string | undefined;
2596
- width: number;
2597
- depth: number;
2598
- carcassHeight: number;
2599
- operationState: number;
2600
- plinthHeight: number;
2601
- toeKickDepth: number;
2602
- boardThickness: number;
2603
- countertopThickness: number;
2604
- countertopOverhang: number;
2605
- countertopBackOverhang: number;
2606
- withFinishedBack: boolean;
2607
- frontThickness: number;
2608
- frontGap: number;
2609
- frontStyle: "raised-arch" | "shaker" | "slab";
2610
- panelReady: boolean;
2611
- handleStyle: "bar" | "cutout" | "hole" | "knob" | "none";
2612
- handlePosition: "auto" | "center" | "top";
2613
- frontOverlay: "full" | "inset";
2614
- withBottomPanel: boolean;
2615
- showPlinth: boolean;
2616
- withCountertop: boolean;
1913
+ id: `slab_${string}`;
2617
1914
  material?: {
2618
1915
  id?: string | undefined;
2619
1916
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
@@ -2638,99 +1935,172 @@ export declare function wallAttachments(nodes: StructureNodes, wall: WallNode):
2638
1935
  } | undefined;
2639
1936
  materialPreset?: string | undefined;
2640
1937
  slots?: Record<string, string> | undefined;
2641
- stack?: ({
2642
- id: string;
2643
- height?: number | undefined;
2644
- type: "shelf";
2645
- shelfCount?: number | undefined;
2646
- } | {
2647
- id: string;
2648
- height?: number | undefined;
2649
- type: "drawer";
2650
- drawerCount?: number | undefined;
2651
- } | {
2652
- id: string;
2653
- height?: number | undefined;
2654
- type: "door";
2655
- doorType?: "double" | "glass" | "single-left" | "single-right" | undefined;
2656
- shelfCount?: number | undefined;
2657
- } | {
2658
- id: string;
2659
- height?: number | undefined;
2660
- type: "sink";
2661
- sinkLayout?: "double" | "double-offset" | "single" | undefined;
2662
- } | {
2663
- id: string;
2664
- height?: number | undefined;
2665
- type: "oven";
2666
- } | {
2667
- id: string;
2668
- height?: number | undefined;
2669
- type: "microwave";
2670
- } | {
2671
- id: string;
2672
- height?: number | undefined;
2673
- type: "dishwasher";
2674
- } | {
2675
- id: string;
2676
- height?: number | undefined;
2677
- cooktopBurnersOn?: boolean | undefined;
2678
- cooktopActiveBurners?: number[] | undefined;
2679
- cooktopKnobProgress?: number[] | undefined;
2680
- cooktopShowGrate?: boolean | undefined;
2681
- type: "cooktop-gas";
2682
- cooktopLayout?: "gas-2burner" | "gas-4burner" | "gas-5burner-wok" | "gas-6burner" | undefined;
2683
- } | {
2684
- id: string;
2685
- height?: number | undefined;
2686
- cooktopBurnersOn?: boolean | undefined;
2687
- cooktopActiveBurners?: number[] | undefined;
2688
- cooktopKnobProgress?: number[] | undefined;
2689
- cooktopShowGrate?: boolean | undefined;
2690
- type: "cooktop-induction";
2691
- cooktopLayout?: "induction-2zone" | "induction-4zone" | undefined;
2692
- } | {
2693
- id: string;
2694
- height?: number | undefined;
2695
- type: "pull-out-pantry";
2696
- shelfCount?: number | undefined;
2697
- pantryRackStyle?: "glass" | "tray" | "wire" | undefined;
2698
- } | {
2699
- id: string;
2700
- height?: number | undefined;
2701
- type: "fridge-single";
2702
- } | {
2703
- id: string;
2704
- height?: number | undefined;
2705
- type: "fridge-double";
2706
- } | {
2707
- id: string;
2708
- height?: number | undefined;
2709
- type: "fridge-top-freezer";
2710
- } | {
2711
- id: string;
2712
- height?: number | undefined;
2713
- type: "fridge-bottom-freezer";
2714
- } | {
2715
- id: string;
2716
- height?: number | undefined;
2717
- type: "hood-pyramid";
2718
- } | {
2719
- id: string;
2720
- height?: number | undefined;
2721
- type: "hood-curved-glass";
2722
- })[] | undefined;
2723
- id: `cabinet_${string}`;
2724
- runTier: "base" | "tall" | "wall";
2725
- children: string[];
2726
- barLedge?: {
2727
- edge: "back" | "left" | "right";
2728
- height: number;
2729
- depth: number;
1938
+ polygon: [number, number][];
1939
+ holes: [number, number][][];
1940
+ holeMetadata: {
1941
+ source: "elevator" | "floor-opening" | "manual" | "room" | "stair";
1942
+ openingId?: string | undefined;
1943
+ stairId?: string | undefined;
1944
+ elevatorId?: string | undefined;
1945
+ }[];
1946
+ elevation: number;
1947
+ floorHeight?: number | undefined;
1948
+ referenceFloorElevation?: number | undefined;
1949
+ foundation?: {
1950
+ type: "none" | "solid";
1951
+ material?: string | {
1952
+ id?: string | undefined;
1953
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1954
+ properties?: {
1955
+ color: string;
1956
+ roughness: number;
1957
+ metalness: number;
1958
+ opacity: number;
1959
+ transparent: boolean;
1960
+ side: "back" | "double" | "front";
1961
+ } | undefined;
1962
+ texture?: {
1963
+ url: string;
1964
+ repeat?: [number, number] | undefined;
1965
+ scale?: number | undefined;
1966
+ offset?: [number, number] | undefined;
1967
+ normalMap?: string | undefined;
1968
+ normalScale?: number | undefined;
1969
+ bumpMap?: string | undefined;
1970
+ bumpScale?: number | undefined;
1971
+ } | undefined;
1972
+ } | undefined;
1973
+ } | undefined;
1974
+ thickness: number;
1975
+ recessed: boolean;
1976
+ recessedRimElevation?: number | undefined;
1977
+ fillToTerrain?: boolean | undefined;
1978
+ boundary?: "auto" | undefined;
1979
+ support?: "open" | undefined;
1980
+ plateRole?: "base" | "platform" | "sunken" | undefined;
1981
+ railing?: {
1982
+ start: [number, number];
1983
+ end: [number, number];
1984
+ }[] | undefined;
1985
+ zoneIds?: string[] | undefined;
1986
+ associatedZoneIds?: string[] | undefined;
1987
+ autoFromWalls: boolean;
1988
+ surfaceScript?: {
1989
+ kind: "script";
1990
+ meta?: {
1991
+ description?: string | undefined;
1992
+ category?: string | undefined;
1993
+ tags?: string[] | undefined;
1994
+ parent?: string | undefined;
1995
+ } | undefined;
1996
+ language: "bpy" | "three";
1997
+ script: string;
1998
+ params: Record<string, string | number | boolean>;
1999
+ artifact: string;
2000
+ manifest: {
2001
+ bounds: {
2002
+ min: [number, number, number];
2003
+ max: [number, number, number];
2004
+ };
2005
+ params: {
2006
+ id: string;
2007
+ label?: string | undefined;
2008
+ kind: "boolean" | "number" | "string";
2009
+ default: string | number | boolean;
2010
+ min?: number | undefined;
2011
+ max?: number | undefined;
2012
+ step?: number | undefined;
2013
+ unit?: string | undefined;
2014
+ options?: string[] | undefined;
2015
+ }[];
2016
+ parts: {
2017
+ id: string;
2018
+ label?: string | undefined;
2019
+ type?: string | undefined;
2020
+ bounds?: {
2021
+ min: [number, number, number];
2022
+ max: [number, number, number];
2023
+ } | undefined;
2024
+ }[];
2025
+ surfaces: {
2026
+ part?: string | undefined;
2027
+ y: number;
2028
+ polygon: [number, number][];
2029
+ }[];
2030
+ slots: {
2031
+ id: string;
2032
+ label?: string | undefined;
2033
+ color?: string | undefined;
2034
+ roughness?: number | undefined;
2035
+ metalness?: number | undefined;
2036
+ transparent?: boolean | undefined;
2037
+ emissive?: boolean | undefined;
2038
+ }[];
2039
+ anchors: {
2040
+ id: string;
2041
+ position: [number, number, number];
2042
+ normal?: [number, number, number] | undefined;
2043
+ }[];
2044
+ lights: {
2045
+ id: string;
2046
+ position: [number, number, number];
2047
+ color: string;
2048
+ intensity: number;
2049
+ distance?: number | undefined;
2050
+ spot?: {
2051
+ direction: [number, number, number];
2052
+ angle: number;
2053
+ softness: number;
2054
+ } | undefined;
2055
+ shadows?: boolean | undefined;
2056
+ glow?: {
2057
+ size: number;
2058
+ strength: number;
2059
+ } | undefined;
2060
+ }[];
2061
+ undersides: {
2062
+ part?: string | undefined;
2063
+ polygon: [number, number][];
2064
+ plane: [number, number, number, number];
2065
+ }[];
2066
+ animations: {
2067
+ name: string;
2068
+ duration: number;
2069
+ }[];
2070
+ cutters?: {
2071
+ host: "ceiling" | "mounted" | "slab" | "wall";
2072
+ polygon: number[][];
2073
+ minY: number;
2074
+ maxY: number;
2075
+ }[] | undefined;
2076
+ cutout: boolean;
2077
+ collider: boolean;
2078
+ shape?: {
2079
+ tolerance: number;
2080
+ bands: {
2081
+ y0: number;
2082
+ y1: number;
2083
+ polygons: {
2084
+ outer: [number, number][];
2085
+ holes?: [number, number][][] | undefined;
2086
+ }[];
2087
+ }[];
2088
+ } | undefined;
2089
+ triangles: number;
2090
+ coverage?: number | undefined;
2091
+ uncovered?: {
2092
+ min: [number, number];
2093
+ max: [number, number];
2094
+ }[] | undefined;
2095
+ };
2096
+ images?: {
2097
+ artifact: string;
2098
+ thumbnail: string;
2099
+ floorPlan: string;
2100
+ } | undefined;
2101
+ inputs: string;
2730
2102
  } | undefined;
2731
- withWaterfall: boolean;
2732
- withFinishedEnds: boolean;
2733
- type: "cabinet";
2103
+ type: "slab";
2734
2104
  } | {
2735
2105
  object: "node";
2736
2106
  name?: string | undefined;
@@ -2755,146 +2125,82 @@ export declare function wallAttachments(nodes: StructureNodes, wall: WallNode):
2755
2125
  fromIds: string[];
2756
2126
  } | undefined;
2757
2127
  } | undefined;
2128
+ id: `leanto_${string}`;
2758
2129
  position: [number, number, number];
2759
- rotation: number;
2760
- supportSlabId?: string | undefined;
2761
- width: number;
2762
- depth: number;
2763
- carcassHeight: number;
2764
- operationState: number;
2765
- plinthHeight: number;
2766
- toeKickDepth: number;
2767
- boardThickness: number;
2768
- countertopThickness: number;
2769
- countertopOverhang: number;
2770
- countertopBackOverhang: number;
2771
- withFinishedBack: boolean;
2772
- frontThickness: number;
2773
- frontGap: number;
2774
- frontStyle: "raised-arch" | "shaker" | "slab";
2775
- panelReady: boolean;
2776
- handleStyle: "bar" | "cutout" | "hole" | "knob" | "none";
2777
- handlePosition: "auto" | "center" | "top";
2778
- frontOverlay: "full" | "inset";
2779
- withBottomPanel: boolean;
2780
- showPlinth: boolean;
2781
- withCountertop: boolean;
2782
- material?: {
2783
- id?: string | undefined;
2784
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
2785
- properties?: {
2786
- color: string;
2787
- roughness: number;
2788
- metalness: number;
2789
- opacity: number;
2790
- transparent: boolean;
2791
- side: "back" | "double" | "front";
2792
- } | undefined;
2793
- texture?: {
2794
- url: string;
2795
- repeat?: [number, number] | undefined;
2796
- scale?: number | undefined;
2797
- offset?: [number, number] | undefined;
2798
- normalMap?: string | undefined;
2799
- normalScale?: number | undefined;
2800
- bumpMap?: string | undefined;
2801
- bumpScale?: number | undefined;
2802
- } | undefined;
2803
- } | undefined;
2804
- materialPreset?: string | undefined;
2130
+ rotation: [number, number, number];
2131
+ children: (`column_${string}` | `roof_${string}`)[];
2132
+ canopyForm: "butterfly" | "gable" | "mono";
2133
+ hostKind: "conical-roof" | "freestanding" | "slab-edge" | "wall";
2134
+ hostHeightOffset: number;
2135
+ hostSlabId?: `slab_${string}` | undefined;
2136
+ hostSlabEdgeIndex?: number | undefined;
2137
+ hostSlabEdgeT?: number | undefined;
2138
+ span: number;
2139
+ autoSpan: boolean;
2140
+ projection: number;
2141
+ spanArcCenterZ?: number | undefined;
2142
+ spanArcRadius?: number | undefined;
2143
+ highEdgeHeight: number;
2144
+ lowEdgeHeight: number;
2145
+ pitch: number;
2146
+ resizeLock: "preserve-high-edge" | "preserve-low-edge" | "preserve-pitch";
2147
+ leftEndCondition: "joined" | "open" | "wall-abutment";
2148
+ rightEndCondition: "joined" | "open" | "wall-abutment";
2149
+ autoMiterCorners: boolean;
2150
+ sideFlashing: boolean;
2151
+ flashingProjection: number;
2152
+ flashingHeight: number;
2805
2153
  slots?: Record<string, string> | undefined;
2806
- stack?: ({
2807
- id: string;
2808
- height?: number | undefined;
2809
- type: "shelf";
2810
- shelfCount?: number | undefined;
2811
- } | {
2812
- id: string;
2813
- height?: number | undefined;
2814
- type: "drawer";
2815
- drawerCount?: number | undefined;
2816
- } | {
2817
- id: string;
2818
- height?: number | undefined;
2819
- type: "door";
2820
- doorType?: "double" | "glass" | "single-left" | "single-right" | undefined;
2821
- shelfCount?: number | undefined;
2822
- } | {
2823
- id: string;
2824
- height?: number | undefined;
2825
- type: "sink";
2826
- sinkLayout?: "double" | "double-offset" | "single" | undefined;
2827
- } | {
2828
- id: string;
2829
- height?: number | undefined;
2830
- type: "oven";
2831
- } | {
2832
- id: string;
2833
- height?: number | undefined;
2834
- type: "microwave";
2835
- } | {
2836
- id: string;
2837
- height?: number | undefined;
2838
- type: "dishwasher";
2839
- } | {
2840
- id: string;
2841
- height?: number | undefined;
2842
- cooktopBurnersOn?: boolean | undefined;
2843
- cooktopActiveBurners?: number[] | undefined;
2844
- cooktopKnobProgress?: number[] | undefined;
2845
- cooktopShowGrate?: boolean | undefined;
2846
- type: "cooktop-gas";
2847
- cooktopLayout?: "gas-2burner" | "gas-4burner" | "gas-5burner-wok" | "gas-6burner" | undefined;
2848
- } | {
2849
- id: string;
2850
- height?: number | undefined;
2851
- cooktopBurnersOn?: boolean | undefined;
2852
- cooktopActiveBurners?: number[] | undefined;
2853
- cooktopKnobProgress?: number[] | undefined;
2854
- cooktopShowGrate?: boolean | undefined;
2855
- type: "cooktop-induction";
2856
- cooktopLayout?: "induction-2zone" | "induction-4zone" | undefined;
2857
- } | {
2858
- id: string;
2859
- height?: number | undefined;
2860
- type: "pull-out-pantry";
2861
- shelfCount?: number | undefined;
2862
- pantryRackStyle?: "glass" | "tray" | "wire" | undefined;
2863
- } | {
2864
- id: string;
2865
- height?: number | undefined;
2866
- type: "fridge-single";
2867
- } | {
2868
- id: string;
2869
- height?: number | undefined;
2870
- type: "fridge-double";
2871
- } | {
2872
- id: string;
2873
- height?: number | undefined;
2874
- type: "fridge-top-freezer";
2875
- } | {
2876
- id: string;
2877
- height?: number | undefined;
2878
- type: "fridge-bottom-freezer";
2879
- } | {
2880
- id: string;
2881
- height?: number | undefined;
2882
- type: "hood-pyramid";
2883
- } | {
2884
- id: string;
2885
- height?: number | undefined;
2886
- type: "hood-curved-glass";
2887
- })[] | undefined;
2888
- id: `cabinet-module_${string}`;
2889
- children: string[];
2890
- cabinetType: "base" | "tall";
2891
- moduleKind: "corner-filler" | "standard" | "wall-filler";
2892
- openSide?: "left" | "right" | undefined;
2893
- cornerShelf?: boolean | undefined;
2894
- topFinish: "none" | "top-cabinet" | "trim";
2895
- topFinishHeight: number;
2896
- topFinishDepth: number;
2897
- type: "cabinet-module";
2154
+ highSideMode: "independent-high-beam" | "wall-ledger";
2155
+ ledgerVerticalOffset: number;
2156
+ lowBeamInset: number;
2157
+ gutterEnabled: boolean;
2158
+ gutterProfile: "box" | "half-round" | "k-style";
2159
+ gutterSize: number;
2160
+ downspoutEnabled: boolean;
2161
+ downspoutPosition: number;
2162
+ connectionMode: "auto" | "manual";
2163
+ hostRoofId?: `roof_${string}` | undefined;
2164
+ hostRoofSegmentId?: string | undefined;
2165
+ hostRoofEdge?: "+X" | "+Z" | "-X" | "-Z" | undefined;
2166
+ hostRoofEdgeRange?: [number, number] | undefined;
2167
+ connectionOffset: number;
2168
+ connectionInset: number;
2169
+ matchHostRoofMaterial: boolean;
2170
+ matchHostRoofStructure: boolean;
2171
+ roofThickness: number;
2172
+ shingleThickness: number;
2173
+ highOverhang: number;
2174
+ lowOverhang: number;
2175
+ leftOverhang: number;
2176
+ rightOverhang: number;
2177
+ coveringType: "generic" | "metal-panel" | "shingle";
2178
+ beamWidth: number;
2179
+ beamHeight: number;
2180
+ ledgerDepth: number;
2181
+ ledgerHeight: number;
2182
+ rafterWidth: number;
2183
+ rafterHeight: number;
2184
+ rafterSpacing: number;
2185
+ rafterEndInset: number;
2186
+ framingStrategy: "covering-specific" | "hidden" | "purlins" | "rafters";
2187
+ purlinWidth: number;
2188
+ purlinHeight: number;
2189
+ purlinSpacing: number;
2190
+ postWidth: number;
2191
+ postDepth: number;
2192
+ postCount: number;
2193
+ postLayoutMode: "count" | "target-spacing";
2194
+ postSpacing: number;
2195
+ postInset: number;
2196
+ omittedPostSlots: {
2197
+ side: "high" | "low";
2198
+ index: number;
2199
+ layoutCount: number;
2200
+ }[];
2201
+ postBracing: "knee" | "none";
2202
+ footingStyle: "base-plate" | "concrete-pad" | "none";
2203
+ type: "lean-to-extension";
2898
2204
  } | {
2899
2205
  object: "node";
2900
2206
  name?: string | undefined;
@@ -2919,7 +2225,51 @@ export declare function wallAttachments(nodes: StructureNodes, wall: WallNode):
2919
2225
  fromIds: string[];
2920
2226
  } | undefined;
2921
2227
  } | undefined;
2922
- id: `downspout_${string}`;
2228
+ id: `wall_${string}`;
2229
+ wallType?: "curtain" | "railing" | "standard" | undefined;
2230
+ curtainWall?: {
2231
+ construction: "stick" | "unitized";
2232
+ framing: "capped" | "horizontal-caps" | "structural-glazing" | "vertical-caps";
2233
+ columns: {
2234
+ layout: "count" | "fixed-spacing" | "maximum-spacing";
2235
+ count: number;
2236
+ spacing: number;
2237
+ alignment: "center" | "end" | "start";
2238
+ };
2239
+ rows: {
2240
+ layout: "count" | "fixed-spacing" | "maximum-spacing";
2241
+ count: number;
2242
+ spacing: number;
2243
+ alignment: "center" | "end" | "start";
2244
+ };
2245
+ mullionWidth: number;
2246
+ transomWidth: number;
2247
+ perimeterWidth: number;
2248
+ jointWidth: number;
2249
+ glassThickness: number;
2250
+ panelType: "empty" | "glass" | "solid";
2251
+ spandrel: "bottom" | "none" | "top";
2252
+ frameColor: string;
2253
+ glassColor: string;
2254
+ solidColor: string;
2255
+ glassOpacity: number;
2256
+ glassRoughness: number;
2257
+ panels: {
2258
+ column: number;
2259
+ row: number;
2260
+ type: "empty" | "glass" | "solid";
2261
+ }[];
2262
+ } | undefined;
2263
+ railing?: {
2264
+ style: "balusters" | "boards" | "cable" | "glass" | "metal" | "post-and-rail";
2265
+ postSpacing: number;
2266
+ postSize: number;
2267
+ infillSize: number;
2268
+ infillGap: number;
2269
+ bottomClearance: number;
2270
+ cap: boolean;
2271
+ } | undefined;
2272
+ children: (`door_${string}` | `item_${string}` | `leanto_${string}` | `procedural-item_${string}` | `window_${string}`)[];
2923
2273
  material?: {
2924
2274
  id?: string | undefined;
2925
2275
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
@@ -2942,45 +2292,31 @@ export declare function wallAttachments(nodes: StructureNodes, wall: WallNode):
2942
2292
  bumpScale?: number | undefined;
2943
2293
  } | undefined;
2944
2294
  } | undefined;
2945
- slots?: Record<string, string> | undefined;
2946
- materialPreset: string;
2947
- gutterId?: string | undefined;
2948
- outletId?: string | undefined;
2949
- length: number;
2950
- lengthMode?: "manual" | "to-ground" | undefined;
2951
- diameter: number;
2952
- standoff: number;
2953
- shape: "auto" | "rect" | "round";
2954
- strapStyle: "band" | "none";
2955
- strapSpacing: number;
2956
- terminal: "kickout" | "splash" | "straight";
2957
- type: "downspout";
2958
- } | {
2959
- object: "node";
2960
- name?: string | undefined;
2961
- parentId: string | null;
2962
- visible: boolean;
2963
- camera?: {
2964
- position: [number, number, number];
2965
- target: [number, number, number];
2966
- mode: "orthographic" | "perspective";
2967
- fov?: number | undefined;
2968
- zoom?: number | undefined;
2969
- } | undefined;
2970
- metadata: Record<string, unknown>;
2971
- provenance?: {
2972
- refs: {
2973
- ns?: string | undefined;
2974
- id: string;
2975
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
2976
- }[];
2977
- lineage?: {
2978
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
2979
- fromIds: string[];
2295
+ materialPreset?: string | undefined;
2296
+ interiorMaterial?: {
2297
+ id?: string | undefined;
2298
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
2299
+ properties?: {
2300
+ color: string;
2301
+ roughness: number;
2302
+ metalness: number;
2303
+ opacity: number;
2304
+ transparent: boolean;
2305
+ side: "back" | "double" | "front";
2306
+ } | undefined;
2307
+ texture?: {
2308
+ url: string;
2309
+ repeat?: [number, number] | undefined;
2310
+ scale?: number | undefined;
2311
+ offset?: [number, number] | undefined;
2312
+ normalMap?: string | undefined;
2313
+ normalScale?: number | undefined;
2314
+ bumpMap?: string | undefined;
2315
+ bumpScale?: number | undefined;
2980
2316
  } | undefined;
2981
2317
  } | undefined;
2982
- id: `gutter_${string}`;
2983
- material?: {
2318
+ interiorMaterialPreset?: string | undefined;
2319
+ exteriorMaterial?: {
2984
2320
  id?: string | undefined;
2985
2321
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
2986
2322
  properties?: {
@@ -3002,247 +2338,386 @@ export declare function wallAttachments(nodes: StructureNodes, wall: WallNode):
3002
2338
  bumpScale?: number | undefined;
3003
2339
  } | undefined;
3004
2340
  } | undefined;
2341
+ exteriorMaterialPreset?: string | undefined;
3005
2342
  slots?: Record<string, string> | undefined;
3006
- materialPreset: string;
3007
- roofSegmentId?: string | undefined;
3008
- position: [number, number, number];
3009
- rotation: number;
3010
- length: number;
3011
- arc?: {
3012
- centerX: number;
3013
- centerZ: number;
3014
- radius: number;
2343
+ legacyFaceMaterials?: {
2344
+ a?: {
2345
+ material?: {
2346
+ id?: string | undefined;
2347
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
2348
+ properties?: {
2349
+ color: string;
2350
+ roughness: number;
2351
+ metalness: number;
2352
+ opacity: number;
2353
+ transparent: boolean;
2354
+ side: "back" | "double" | "front";
2355
+ } | undefined;
2356
+ texture?: {
2357
+ url: string;
2358
+ repeat?: [number, number] | undefined;
2359
+ scale?: number | undefined;
2360
+ offset?: [number, number] | undefined;
2361
+ normalMap?: string | undefined;
2362
+ normalScale?: number | undefined;
2363
+ bumpMap?: string | undefined;
2364
+ bumpScale?: number | undefined;
2365
+ } | undefined;
2366
+ } | undefined;
2367
+ materialPreset?: string | undefined;
2368
+ } | undefined;
2369
+ b?: {
2370
+ material?: {
2371
+ id?: string | undefined;
2372
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
2373
+ properties?: {
2374
+ color: string;
2375
+ roughness: number;
2376
+ metalness: number;
2377
+ opacity: number;
2378
+ transparent: boolean;
2379
+ side: "back" | "double" | "front";
2380
+ } | undefined;
2381
+ texture?: {
2382
+ url: string;
2383
+ repeat?: [number, number] | undefined;
2384
+ scale?: number | undefined;
2385
+ offset?: [number, number] | undefined;
2386
+ normalMap?: string | undefined;
2387
+ normalScale?: number | undefined;
2388
+ bumpMap?: string | undefined;
2389
+ bumpScale?: number | undefined;
2390
+ } | undefined;
2391
+ } | undefined;
2392
+ materialPreset?: string | undefined;
2393
+ } | undefined;
3015
2394
  } | undefined;
3016
- size: number;
3017
- thickness: number;
3018
- profile: "box" | "half-round" | "k-style";
3019
- endCapLeft: boolean;
3020
- endCapRight: boolean;
3021
- hangerStyle: "none" | "strap";
3022
- hangerSpacing: number;
3023
- outlets: {
2395
+ faceRegions?: {
3024
2396
  id: string;
3025
- offset: number;
3026
- diameter: number;
3027
- generatedBy?: "default-downspout" | undefined;
3028
- }[];
3029
- type: "gutter";
3030
- } | {
3031
- object: "node";
3032
- name?: string | undefined;
3033
- parentId: string | null;
3034
- visible: boolean;
3035
- camera?: {
3036
- position: [number, number, number];
3037
- target: [number, number, number];
3038
- mode: "orthographic" | "perspective";
3039
- fov?: number | undefined;
3040
- zoom?: number | undefined;
2397
+ face: "a" | "b";
2398
+ u0?: number | undefined;
2399
+ u1?: number | undefined;
2400
+ v0?: number | undefined;
2401
+ v1?: number | undefined;
2402
+ finish: string;
2403
+ }[] | undefined;
2404
+ thickness?: number | undefined;
2405
+ assembly?: {
2406
+ layers: {
2407
+ id: string;
2408
+ role: "air" | "covering" | "deck" | "fill" | "finish" | "furring" | "glazing" | "insulation" | "lining" | "membrane" | "sheathing" | "shell" | "structure" | "substrate" | "underlay";
2409
+ thickness: number;
2410
+ core?: true | undefined;
2411
+ spacing?: number | undefined;
2412
+ material?: string | undefined;
2413
+ slot?: string | undefined;
2414
+ returns?: boolean | undefined;
2415
+ display?: "construction" | "finished" | undefined;
2416
+ inset?: number | undefined;
2417
+ bottom?: number | undefined;
2418
+ lift?: number | undefined;
2419
+ src?: string | undefined;
2420
+ }[];
2421
+ backing?: {
2422
+ id: string;
2423
+ role: "air" | "covering" | "deck" | "fill" | "finish" | "furring" | "glazing" | "insulation" | "lining" | "membrane" | "sheathing" | "shell" | "structure" | "substrate" | "underlay";
2424
+ thickness: number;
2425
+ core?: true | undefined;
2426
+ spacing?: number | undefined;
2427
+ material?: string | undefined;
2428
+ slot?: string | undefined;
2429
+ returns?: boolean | undefined;
2430
+ display?: "construction" | "finished" | undefined;
2431
+ inset?: number | undefined;
2432
+ bottom?: number | undefined;
2433
+ lift?: number | undefined;
2434
+ src?: string | undefined;
2435
+ }[] | undefined;
2436
+ face?: "exterior" | "front" | undefined;
2437
+ presetId?: string | undefined;
2438
+ cavityInsulation?: string | undefined;
3041
2439
  } | undefined;
3042
- metadata: Record<string, unknown>;
3043
- provenance?: {
3044
- refs: {
3045
- ns?: string | undefined;
3046
- id: string;
3047
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
3048
- }[];
3049
- lineage?: {
3050
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
3051
- fromIds: string[];
3052
- } | undefined;
2440
+ justification?: "a" | "b" | undefined;
2441
+ height?: number | undefined;
2442
+ endHeightOffset?: number | undefined;
2443
+ curveOffset?: number | undefined;
2444
+ supportSlabId?: string | undefined;
2445
+ supportOffset?: number | undefined;
2446
+ fillToTerrain?: boolean | undefined;
2447
+ cap?: boolean | undefined;
2448
+ underpinning?: {
2449
+ rim: number;
2450
+ stem: number;
2451
+ openings?: {
2452
+ u: number;
2453
+ width: number;
2454
+ top: number;
2455
+ bottom: number;
2456
+ }[] | undefined;
3053
2457
  } | undefined;
3054
- id: `site_${string}`;
3055
- polygon: {
3056
- type: "polygon";
3057
- points: [number, number][];
3058
- };
3059
- terrain?: {
3060
- type: "heightfield";
3061
- origin: [number, number];
3062
- spacing: number;
3063
- cols: number;
3064
- rows: number;
3065
- step: number;
3066
- heights: string;
2458
+ skirting?: {
2459
+ enabled: boolean;
2460
+ sides: "a" | "b" | "both" | "exterior" | "interior";
2461
+ height: number;
2462
+ proud: number;
2463
+ profile: "base-colonial" | "base-modern" | "base-ogee" | "base-shoe" | "bevel" | "bullnose" | "cove" | "crown-cove" | "crown-craftsman" | "crown-layered" | "crown-ogee" | "flat" | "rail-ogee" | "rail-picture" | "rail-rounded" | "rail-stepped" | "triangle";
2464
+ offsetY?: number | undefined;
3067
2465
  } | undefined;
3068
- showGround?: boolean | undefined;
3069
- presentation?: {
3070
- theme?: string | undefined;
3071
- exposure?: number | undefined;
3072
- shading?: "rendered" | "solid" | undefined;
3073
- edges?: "off" | "soft" | "strong" | undefined;
3074
- shadows?: boolean | undefined;
3075
- lighting?: {
3076
- background?: string | undefined;
3077
- backgroundSky?: string | null | undefined;
3078
- ground?: string | undefined;
3079
- ambient?: {
3080
- color: string;
3081
- intensity: number;
2466
+ crown?: {
2467
+ enabled: boolean;
2468
+ sides: "a" | "b" | "both" | "exterior" | "interior";
2469
+ height: number;
2470
+ proud: number;
2471
+ profile: "base-colonial" | "base-modern" | "base-ogee" | "base-shoe" | "bevel" | "bullnose" | "cove" | "crown-cove" | "crown-craftsman" | "crown-layered" | "crown-ogee" | "flat" | "rail-ogee" | "rail-picture" | "rail-rounded" | "rail-stepped" | "triangle";
2472
+ offsetY?: number | undefined;
2473
+ } | undefined;
2474
+ chairRail?: {
2475
+ enabled: boolean;
2476
+ sides: "a" | "b" | "both" | "exterior" | "interior";
2477
+ height: number;
2478
+ proud: number;
2479
+ profile: "base-colonial" | "base-modern" | "base-ogee" | "base-shoe" | "bevel" | "bullnose" | "cove" | "crown-cove" | "crown-craftsman" | "crown-layered" | "crown-ogee" | "flat" | "rail-ogee" | "rail-picture" | "rail-rounded" | "rail-stepped" | "triangle";
2480
+ offsetY?: number | undefined;
2481
+ } | undefined;
2482
+ finishScripts?: {
2483
+ a?: {
2484
+ kind: "script";
2485
+ meta?: {
2486
+ description?: string | undefined;
2487
+ category?: string | undefined;
2488
+ tags?: string[] | undefined;
2489
+ parent?: string | undefined;
3082
2490
  } | undefined;
3083
- hemi?: {
3084
- sky: string;
3085
- ground: string;
3086
- intensity: number;
2491
+ language: "bpy" | "three";
2492
+ script: string;
2493
+ params: Record<string, string | number | boolean>;
2494
+ artifact: string;
2495
+ manifest: {
2496
+ bounds: {
2497
+ min: [number, number, number];
2498
+ max: [number, number, number];
2499
+ };
2500
+ params: {
2501
+ id: string;
2502
+ label?: string | undefined;
2503
+ kind: "boolean" | "number" | "string";
2504
+ default: string | number | boolean;
2505
+ min?: number | undefined;
2506
+ max?: number | undefined;
2507
+ step?: number | undefined;
2508
+ unit?: string | undefined;
2509
+ options?: string[] | undefined;
2510
+ }[];
2511
+ parts: {
2512
+ id: string;
2513
+ label?: string | undefined;
2514
+ type?: string | undefined;
2515
+ bounds?: {
2516
+ min: [number, number, number];
2517
+ max: [number, number, number];
2518
+ } | undefined;
2519
+ }[];
2520
+ surfaces: {
2521
+ part?: string | undefined;
2522
+ y: number;
2523
+ polygon: [number, number][];
2524
+ }[];
2525
+ slots: {
2526
+ id: string;
2527
+ label?: string | undefined;
2528
+ color?: string | undefined;
2529
+ roughness?: number | undefined;
2530
+ metalness?: number | undefined;
2531
+ transparent?: boolean | undefined;
2532
+ emissive?: boolean | undefined;
2533
+ }[];
2534
+ anchors: {
2535
+ id: string;
2536
+ position: [number, number, number];
2537
+ normal?: [number, number, number] | undefined;
2538
+ }[];
2539
+ lights: {
2540
+ id: string;
2541
+ position: [number, number, number];
2542
+ color: string;
2543
+ intensity: number;
2544
+ distance?: number | undefined;
2545
+ spot?: {
2546
+ direction: [number, number, number];
2547
+ angle: number;
2548
+ softness: number;
2549
+ } | undefined;
2550
+ shadows?: boolean | undefined;
2551
+ glow?: {
2552
+ size: number;
2553
+ strength: number;
2554
+ } | undefined;
2555
+ }[];
2556
+ undersides: {
2557
+ part?: string | undefined;
2558
+ polygon: [number, number][];
2559
+ plane: [number, number, number, number];
2560
+ }[];
2561
+ animations: {
2562
+ name: string;
2563
+ duration: number;
2564
+ }[];
2565
+ cutters?: {
2566
+ host: "ceiling" | "mounted" | "slab" | "wall";
2567
+ polygon: number[][];
2568
+ minY: number;
2569
+ maxY: number;
2570
+ }[] | undefined;
2571
+ cutout: boolean;
2572
+ collider: boolean;
2573
+ shape?: {
2574
+ tolerance: number;
2575
+ bands: {
2576
+ y0: number;
2577
+ y1: number;
2578
+ polygons: {
2579
+ outer: [number, number][];
2580
+ holes?: [number, number][][] | undefined;
2581
+ }[];
2582
+ }[];
2583
+ } | undefined;
2584
+ triangles: number;
2585
+ coverage?: number | undefined;
2586
+ uncovered?: {
2587
+ min: [number, number];
2588
+ max: [number, number];
2589
+ }[] | undefined;
2590
+ };
2591
+ images?: {
2592
+ artifact: string;
2593
+ thumbnail: string;
2594
+ floorPlan: string;
3087
2595
  } | undefined;
3088
- lights?: {
3089
- color: string;
3090
- intensity: number;
3091
- position: [number, number, number];
3092
- target?: [number, number, number] | undefined;
3093
- castShadow?: boolean | undefined;
3094
- shadow?: {
3095
- intensity?: number | undefined;
3096
- bias?: number | undefined;
3097
- normalBias?: number | undefined;
3098
- radius?: number | undefined;
3099
- mapSize?: 512 | 1024 | 2048 | 4096 | undefined;
3100
- camera?: {
3101
- left: number;
3102
- right: number;
3103
- top: number;
3104
- bottom: number;
3105
- near: number;
3106
- far: number;
2596
+ inputs: string;
2597
+ toHeight?: number | undefined;
2598
+ } | undefined;
2599
+ b?: {
2600
+ kind: "script";
2601
+ meta?: {
2602
+ description?: string | undefined;
2603
+ category?: string | undefined;
2604
+ tags?: string[] | undefined;
2605
+ parent?: string | undefined;
2606
+ } | undefined;
2607
+ language: "bpy" | "three";
2608
+ script: string;
2609
+ params: Record<string, string | number | boolean>;
2610
+ artifact: string;
2611
+ manifest: {
2612
+ bounds: {
2613
+ min: [number, number, number];
2614
+ max: [number, number, number];
2615
+ };
2616
+ params: {
2617
+ id: string;
2618
+ label?: string | undefined;
2619
+ kind: "boolean" | "number" | "string";
2620
+ default: string | number | boolean;
2621
+ min?: number | undefined;
2622
+ max?: number | undefined;
2623
+ step?: number | undefined;
2624
+ unit?: string | undefined;
2625
+ options?: string[] | undefined;
2626
+ }[];
2627
+ parts: {
2628
+ id: string;
2629
+ label?: string | undefined;
2630
+ type?: string | undefined;
2631
+ bounds?: {
2632
+ min: [number, number, number];
2633
+ max: [number, number, number];
3107
2634
  } | undefined;
2635
+ }[];
2636
+ surfaces: {
2637
+ part?: string | undefined;
2638
+ y: number;
2639
+ polygon: [number, number][];
2640
+ }[];
2641
+ slots: {
2642
+ id: string;
2643
+ label?: string | undefined;
2644
+ color?: string | undefined;
2645
+ roughness?: number | undefined;
2646
+ metalness?: number | undefined;
2647
+ transparent?: boolean | undefined;
2648
+ emissive?: boolean | undefined;
2649
+ }[];
2650
+ anchors: {
2651
+ id: string;
2652
+ position: [number, number, number];
2653
+ normal?: [number, number, number] | undefined;
2654
+ }[];
2655
+ lights: {
2656
+ id: string;
2657
+ position: [number, number, number];
2658
+ color: string;
2659
+ intensity: number;
2660
+ distance?: number | undefined;
2661
+ spot?: {
2662
+ direction: [number, number, number];
2663
+ angle: number;
2664
+ softness: number;
2665
+ } | undefined;
2666
+ shadows?: boolean | undefined;
2667
+ glow?: {
2668
+ size: number;
2669
+ strength: number;
2670
+ } | undefined;
2671
+ }[];
2672
+ undersides: {
2673
+ part?: string | undefined;
2674
+ polygon: [number, number][];
2675
+ plane: [number, number, number, number];
2676
+ }[];
2677
+ animations: {
2678
+ name: string;
2679
+ duration: number;
2680
+ }[];
2681
+ cutters?: {
2682
+ host: "ceiling" | "mounted" | "slab" | "wall";
2683
+ polygon: number[][];
2684
+ minY: number;
2685
+ maxY: number;
2686
+ }[] | undefined;
2687
+ cutout: boolean;
2688
+ collider: boolean;
2689
+ shape?: {
2690
+ tolerance: number;
2691
+ bands: {
2692
+ y0: number;
2693
+ y1: number;
2694
+ polygons: {
2695
+ outer: [number, number][];
2696
+ holes?: [number, number][][] | undefined;
2697
+ }[];
2698
+ }[];
3108
2699
  } | undefined;
3109
- }[] | undefined;
3110
- environment?: {
3111
- source: "gradient" | "none" | "room";
3112
- intensity: number;
2700
+ triangles: number;
2701
+ coverage?: number | undefined;
2702
+ uncovered?: {
2703
+ min: [number, number];
2704
+ max: [number, number];
2705
+ }[] | undefined;
2706
+ };
2707
+ images?: {
2708
+ artifact: string;
2709
+ thumbnail: string;
2710
+ floorPlan: string;
3113
2711
  } | undefined;
2712
+ inputs: string;
2713
+ toHeight?: number | undefined;
3114
2714
  } | undefined;
3115
- postprocessing?: {
3116
- ambientOcclusion?: boolean | undefined;
3117
- colorGrading?: boolean | undefined;
3118
- } | undefined;
3119
- display?: {
3120
- mode?: "construction" | "finished" | "systems" | undefined;
3121
- families?: Partial<Record<"device" | "exposed-structure" | "fill" | "finish" | "foundation" | "framing" | "inspection" | "insulation" | "masonry" | "membrane" | "run" | "service-space" | "sheathing", boolean>> | undefined;
3122
- disciplines?: Partial<Record<"electrical" | "fire" | "low-voltage" | "mechanical" | "plumbing", boolean>> | undefined;
3123
- xray?: boolean | undefined;
3124
- colorBy?: "material" | "service" | undefined;
3125
- } | undefined;
3126
- } | undefined;
3127
- address?: {
3128
- street?: string | undefined;
3129
- city?: string | undefined;
3130
- state?: string | undefined;
3131
- zip?: string | undefined;
3132
- } | undefined;
3133
- parcel?: {
3134
- apn?: string | undefined;
3135
- source?: string | undefined;
3136
- county?: string | undefined;
3137
- state?: string | undefined;
3138
- lotAreaSqFt?: number | undefined;
3139
- originLngLat?: [number, number] | undefined;
3140
- resolvedAt?: string | undefined;
3141
- layer?: string | undefined;
3142
- notes?: string[] | undefined;
3143
- } | undefined;
3144
- setbacks?: {
3145
- front: number;
3146
- side: number;
3147
- rear: number;
3148
- left?: number | undefined;
3149
- right?: number | undefined;
3150
- streetSide?: number | undefined;
3151
- } | undefined;
3152
- setbacksSource?: string | undefined;
3153
- zone?: string | undefined;
3154
- frontEdge?: number | undefined;
3155
- streetEdges?: number[] | undefined;
3156
- sightTriangleFt?: number | undefined;
3157
- northRotation?: number | undefined;
3158
- dossier?: {
3159
- [x: string]: unknown;
3160
- provider: string;
3161
- asOf: string;
3162
- point?: {
3163
- lat?: number | undefined;
3164
- lng?: number | undefined;
3165
- source?: string | undefined;
3166
- } | undefined;
3167
- address?: {
3168
- formatted?: string | undefined;
3169
- precision?: string | undefined;
3170
- } | undefined;
3171
- sections: Record<string, {
3172
- [x: string]: unknown;
3173
- status: string;
3174
- summary?: string | undefined;
3175
- reason?: string | undefined;
3176
- source?: {
3177
- name?: string | undefined;
3178
- kind?: string | undefined;
3179
- vintage?: string | undefined;
3180
- attribution?: string | undefined;
3181
- } | undefined;
3182
- }>;
3183
- parcel?: Record<string, unknown> | undefined;
3184
- flood?: Record<string, unknown> | undefined;
3185
- codeBasis?: Record<string, unknown> | undefined;
3186
- zoning?: Record<string, unknown> | undefined;
3187
- utilities?: Record<string, unknown> | undefined;
3188
- soils?: Record<string, unknown> | undefined;
3189
- wetlands?: Record<string, unknown> | undefined;
3190
- structures?: Record<string, unknown> | undefined;
3191
- elevation?: Record<string, unknown> | undefined;
3192
- boundaries?: Record<string, unknown> | undefined;
3193
- } | undefined;
3194
- contourIntervalIn?: number | undefined;
3195
- contours3d?: boolean | undefined;
3196
- terrainContours?: {
3197
- datum: string;
3198
- intervalFt: number;
3199
- source?: string | undefined;
3200
- lines: {
3201
- elevationFt: number;
3202
- points: [number, number][];
3203
- }[];
3204
2715
  } | undefined;
3205
- wallTypes?: {
3206
- id: string;
3207
- label: string;
3208
- assembly: {
3209
- layers: {
3210
- id: string;
3211
- role: "air" | "covering" | "deck" | "fill" | "finish" | "furring" | "glazing" | "insulation" | "lining" | "membrane" | "sheathing" | "shell" | "structure" | "substrate" | "underlay";
3212
- thickness: number;
3213
- core?: true | undefined;
3214
- spacing?: number | undefined;
3215
- material?: string | undefined;
3216
- slot?: string | undefined;
3217
- returns?: boolean | undefined;
3218
- display?: "construction" | "finished" | undefined;
3219
- inset?: number | undefined;
3220
- bottom?: number | undefined;
3221
- lift?: number | undefined;
3222
- src?: string | undefined;
3223
- }[];
3224
- backing?: {
3225
- id: string;
3226
- role: "air" | "covering" | "deck" | "fill" | "finish" | "furring" | "glazing" | "insulation" | "lining" | "membrane" | "sheathing" | "shell" | "structure" | "substrate" | "underlay";
3227
- thickness: number;
3228
- core?: true | undefined;
3229
- spacing?: number | undefined;
3230
- material?: string | undefined;
3231
- slot?: string | undefined;
3232
- returns?: boolean | undefined;
3233
- display?: "construction" | "finished" | undefined;
3234
- inset?: number | undefined;
3235
- bottom?: number | undefined;
3236
- lift?: number | undefined;
3237
- src?: string | undefined;
3238
- }[] | undefined;
3239
- face?: "exterior" | "front" | undefined;
3240
- presetId?: string | undefined;
3241
- cavityInsulation?: string | undefined;
3242
- };
3243
- }[] | undefined;
3244
- children: string[];
3245
- type: "site";
2716
+ start: [number, number];
2717
+ end: [number, number];
2718
+ frontSide: "exterior" | "interior" | "unknown";
2719
+ backSide: "exterior" | "interior" | "unknown";
2720
+ type: "wall";
3246
2721
  } | {
3247
2722
  object: "node";
3248
2723
  name?: string | undefined;
@@ -4446,11 +3921,76 @@ export declare function wallAttachments(nodes: StructureNodes, wall: WallNode):
4446
3921
  fromIds: string[];
4447
3922
  } | undefined;
4448
3923
  } | undefined;
4449
- id: `spawn_${string}`;
4450
- position: [number, number, number];
4451
- rotation: number;
4452
- supportSlabId?: string | undefined;
4453
- type: "spawn";
3924
+ id: `spawn_${string}`;
3925
+ position: [number, number, number];
3926
+ rotation: number;
3927
+ supportSlabId?: string | undefined;
3928
+ type: "spawn";
3929
+ } | {
3930
+ object: "node";
3931
+ name?: string | undefined;
3932
+ parentId: string | null;
3933
+ visible: boolean;
3934
+ camera?: {
3935
+ position: [number, number, number];
3936
+ target: [number, number, number];
3937
+ mode: "orthographic" | "perspective";
3938
+ fov?: number | undefined;
3939
+ zoom?: number | undefined;
3940
+ } | undefined;
3941
+ metadata: Record<string, unknown>;
3942
+ provenance?: {
3943
+ refs: {
3944
+ ns?: string | undefined;
3945
+ id: string;
3946
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
3947
+ }[];
3948
+ lineage?: {
3949
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
3950
+ fromIds: string[];
3951
+ } | undefined;
3952
+ } | undefined;
3953
+ id: `shelf_${string}`;
3954
+ children: string[];
3955
+ position: [number, number, number];
3956
+ rotation: [number, number, number];
3957
+ supportSlabId?: string | undefined;
3958
+ width: number;
3959
+ depth: number;
3960
+ thickness: number;
3961
+ height: number;
3962
+ style: "bookshelf" | "cubby" | "open-rack" | "wall-shelf";
3963
+ rows: number;
3964
+ columns: number;
3965
+ withBack: boolean;
3966
+ withSides: boolean;
3967
+ withBottom: boolean;
3968
+ bracketStyle: "hidden" | "industrial" | "minimal";
3969
+ material?: {
3970
+ id?: string | undefined;
3971
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
3972
+ properties?: {
3973
+ color: string;
3974
+ roughness: number;
3975
+ metalness: number;
3976
+ opacity: number;
3977
+ transparent: boolean;
3978
+ side: "back" | "double" | "front";
3979
+ } | undefined;
3980
+ texture?: {
3981
+ url: string;
3982
+ repeat?: [number, number] | undefined;
3983
+ scale?: number | undefined;
3984
+ offset?: [number, number] | undefined;
3985
+ normalMap?: string | undefined;
3986
+ normalScale?: number | undefined;
3987
+ bumpMap?: string | undefined;
3988
+ bumpScale?: number | undefined;
3989
+ } | undefined;
3990
+ } | undefined;
3991
+ materialPreset?: string | undefined;
3992
+ slots?: Record<string, string> | undefined;
3993
+ type: "shelf";
4454
3994
  } | {
4455
3995
  object: "node";
4456
3996
  name?: string | undefined;
@@ -4965,14 +4505,343 @@ export declare function wallAttachments(nodes: StructureNodes, wall: WallNode):
4965
4505
  fromIds: string[];
4966
4506
  } | undefined;
4967
4507
  } | undefined;
4968
- center: number;
4969
- width: number;
4970
- matchFenceStyle?: boolean | undefined;
4971
- matchFenceHeight?: boolean | undefined;
4972
- height?: number | undefined;
4973
- showPosts: boolean;
4974
- id: `fence-opening_${string}`;
4975
- type: "fence-opening";
4508
+ center: number;
4509
+ width: number;
4510
+ matchFenceStyle?: boolean | undefined;
4511
+ matchFenceHeight?: boolean | undefined;
4512
+ height?: number | undefined;
4513
+ showPosts: boolean;
4514
+ id: `fence-opening_${string}`;
4515
+ type: "fence-opening";
4516
+ } | {
4517
+ object: "node";
4518
+ name?: string | undefined;
4519
+ parentId: string | null;
4520
+ visible: boolean;
4521
+ camera?: {
4522
+ position: [number, number, number];
4523
+ target: [number, number, number];
4524
+ mode: "orthographic" | "perspective";
4525
+ fov?: number | undefined;
4526
+ zoom?: number | undefined;
4527
+ } | undefined;
4528
+ metadata: Record<string, unknown>;
4529
+ provenance?: {
4530
+ refs: {
4531
+ ns?: string | undefined;
4532
+ id: string;
4533
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
4534
+ }[];
4535
+ lineage?: {
4536
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
4537
+ fromIds: string[];
4538
+ } | undefined;
4539
+ } | undefined;
4540
+ position: [number, number, number];
4541
+ rotation: number;
4542
+ supportSlabId?: string | undefined;
4543
+ width: number;
4544
+ depth: number;
4545
+ carcassHeight: number;
4546
+ operationState: number;
4547
+ plinthHeight: number;
4548
+ toeKickDepth: number;
4549
+ boardThickness: number;
4550
+ countertopThickness: number;
4551
+ countertopOverhang: number;
4552
+ countertopBackOverhang: number;
4553
+ withFinishedBack: boolean;
4554
+ frontThickness: number;
4555
+ frontGap: number;
4556
+ frontStyle: "raised-arch" | "shaker" | "slab";
4557
+ panelReady: boolean;
4558
+ handleStyle: "bar" | "cutout" | "hole" | "knob" | "none";
4559
+ handlePosition: "auto" | "center" | "top";
4560
+ frontOverlay: "full" | "inset";
4561
+ withBottomPanel: boolean;
4562
+ showPlinth: boolean;
4563
+ withCountertop: boolean;
4564
+ material?: {
4565
+ id?: string | undefined;
4566
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
4567
+ properties?: {
4568
+ color: string;
4569
+ roughness: number;
4570
+ metalness: number;
4571
+ opacity: number;
4572
+ transparent: boolean;
4573
+ side: "back" | "double" | "front";
4574
+ } | undefined;
4575
+ texture?: {
4576
+ url: string;
4577
+ repeat?: [number, number] | undefined;
4578
+ scale?: number | undefined;
4579
+ offset?: [number, number] | undefined;
4580
+ normalMap?: string | undefined;
4581
+ normalScale?: number | undefined;
4582
+ bumpMap?: string | undefined;
4583
+ bumpScale?: number | undefined;
4584
+ } | undefined;
4585
+ } | undefined;
4586
+ materialPreset?: string | undefined;
4587
+ slots?: Record<string, string> | undefined;
4588
+ stack?: ({
4589
+ id: string;
4590
+ height?: number | undefined;
4591
+ type: "shelf";
4592
+ shelfCount?: number | undefined;
4593
+ } | {
4594
+ id: string;
4595
+ height?: number | undefined;
4596
+ type: "drawer";
4597
+ drawerCount?: number | undefined;
4598
+ } | {
4599
+ id: string;
4600
+ height?: number | undefined;
4601
+ type: "door";
4602
+ doorType?: "double" | "glass" | "single-left" | "single-right" | undefined;
4603
+ shelfCount?: number | undefined;
4604
+ } | {
4605
+ id: string;
4606
+ height?: number | undefined;
4607
+ type: "sink";
4608
+ sinkLayout?: "double" | "double-offset" | "single" | undefined;
4609
+ } | {
4610
+ id: string;
4611
+ height?: number | undefined;
4612
+ type: "oven";
4613
+ } | {
4614
+ id: string;
4615
+ height?: number | undefined;
4616
+ type: "microwave";
4617
+ } | {
4618
+ id: string;
4619
+ height?: number | undefined;
4620
+ type: "dishwasher";
4621
+ } | {
4622
+ id: string;
4623
+ height?: number | undefined;
4624
+ cooktopBurnersOn?: boolean | undefined;
4625
+ cooktopActiveBurners?: number[] | undefined;
4626
+ cooktopKnobProgress?: number[] | undefined;
4627
+ cooktopShowGrate?: boolean | undefined;
4628
+ type: "cooktop-gas";
4629
+ cooktopLayout?: "gas-2burner" | "gas-4burner" | "gas-5burner-wok" | "gas-6burner" | undefined;
4630
+ } | {
4631
+ id: string;
4632
+ height?: number | undefined;
4633
+ cooktopBurnersOn?: boolean | undefined;
4634
+ cooktopActiveBurners?: number[] | undefined;
4635
+ cooktopKnobProgress?: number[] | undefined;
4636
+ cooktopShowGrate?: boolean | undefined;
4637
+ type: "cooktop-induction";
4638
+ cooktopLayout?: "induction-2zone" | "induction-4zone" | undefined;
4639
+ } | {
4640
+ id: string;
4641
+ height?: number | undefined;
4642
+ type: "pull-out-pantry";
4643
+ shelfCount?: number | undefined;
4644
+ pantryRackStyle?: "glass" | "tray" | "wire" | undefined;
4645
+ } | {
4646
+ id: string;
4647
+ height?: number | undefined;
4648
+ type: "fridge-single";
4649
+ } | {
4650
+ id: string;
4651
+ height?: number | undefined;
4652
+ type: "fridge-double";
4653
+ } | {
4654
+ id: string;
4655
+ height?: number | undefined;
4656
+ type: "fridge-top-freezer";
4657
+ } | {
4658
+ id: string;
4659
+ height?: number | undefined;
4660
+ type: "fridge-bottom-freezer";
4661
+ } | {
4662
+ id: string;
4663
+ height?: number | undefined;
4664
+ type: "hood-pyramid";
4665
+ } | {
4666
+ id: string;
4667
+ height?: number | undefined;
4668
+ type: "hood-curved-glass";
4669
+ })[] | undefined;
4670
+ id: `cabinet_${string}`;
4671
+ runTier: "base" | "tall" | "wall";
4672
+ children: string[];
4673
+ barLedge?: {
4674
+ edge: "back" | "left" | "right";
4675
+ height: number;
4676
+ depth: number;
4677
+ } | undefined;
4678
+ withWaterfall: boolean;
4679
+ withFinishedEnds: boolean;
4680
+ type: "cabinet";
4681
+ } | {
4682
+ object: "node";
4683
+ name?: string | undefined;
4684
+ parentId: string | null;
4685
+ visible: boolean;
4686
+ camera?: {
4687
+ position: [number, number, number];
4688
+ target: [number, number, number];
4689
+ mode: "orthographic" | "perspective";
4690
+ fov?: number | undefined;
4691
+ zoom?: number | undefined;
4692
+ } | undefined;
4693
+ metadata: Record<string, unknown>;
4694
+ provenance?: {
4695
+ refs: {
4696
+ ns?: string | undefined;
4697
+ id: string;
4698
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
4699
+ }[];
4700
+ lineage?: {
4701
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
4702
+ fromIds: string[];
4703
+ } | undefined;
4704
+ } | undefined;
4705
+ position: [number, number, number];
4706
+ rotation: number;
4707
+ supportSlabId?: string | undefined;
4708
+ width: number;
4709
+ depth: number;
4710
+ carcassHeight: number;
4711
+ operationState: number;
4712
+ plinthHeight: number;
4713
+ toeKickDepth: number;
4714
+ boardThickness: number;
4715
+ countertopThickness: number;
4716
+ countertopOverhang: number;
4717
+ countertopBackOverhang: number;
4718
+ withFinishedBack: boolean;
4719
+ frontThickness: number;
4720
+ frontGap: number;
4721
+ frontStyle: "raised-arch" | "shaker" | "slab";
4722
+ panelReady: boolean;
4723
+ handleStyle: "bar" | "cutout" | "hole" | "knob" | "none";
4724
+ handlePosition: "auto" | "center" | "top";
4725
+ frontOverlay: "full" | "inset";
4726
+ withBottomPanel: boolean;
4727
+ showPlinth: boolean;
4728
+ withCountertop: boolean;
4729
+ material?: {
4730
+ id?: string | undefined;
4731
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
4732
+ properties?: {
4733
+ color: string;
4734
+ roughness: number;
4735
+ metalness: number;
4736
+ opacity: number;
4737
+ transparent: boolean;
4738
+ side: "back" | "double" | "front";
4739
+ } | undefined;
4740
+ texture?: {
4741
+ url: string;
4742
+ repeat?: [number, number] | undefined;
4743
+ scale?: number | undefined;
4744
+ offset?: [number, number] | undefined;
4745
+ normalMap?: string | undefined;
4746
+ normalScale?: number | undefined;
4747
+ bumpMap?: string | undefined;
4748
+ bumpScale?: number | undefined;
4749
+ } | undefined;
4750
+ } | undefined;
4751
+ materialPreset?: string | undefined;
4752
+ slots?: Record<string, string> | undefined;
4753
+ stack?: ({
4754
+ id: string;
4755
+ height?: number | undefined;
4756
+ type: "shelf";
4757
+ shelfCount?: number | undefined;
4758
+ } | {
4759
+ id: string;
4760
+ height?: number | undefined;
4761
+ type: "drawer";
4762
+ drawerCount?: number | undefined;
4763
+ } | {
4764
+ id: string;
4765
+ height?: number | undefined;
4766
+ type: "door";
4767
+ doorType?: "double" | "glass" | "single-left" | "single-right" | undefined;
4768
+ shelfCount?: number | undefined;
4769
+ } | {
4770
+ id: string;
4771
+ height?: number | undefined;
4772
+ type: "sink";
4773
+ sinkLayout?: "double" | "double-offset" | "single" | undefined;
4774
+ } | {
4775
+ id: string;
4776
+ height?: number | undefined;
4777
+ type: "oven";
4778
+ } | {
4779
+ id: string;
4780
+ height?: number | undefined;
4781
+ type: "microwave";
4782
+ } | {
4783
+ id: string;
4784
+ height?: number | undefined;
4785
+ type: "dishwasher";
4786
+ } | {
4787
+ id: string;
4788
+ height?: number | undefined;
4789
+ cooktopBurnersOn?: boolean | undefined;
4790
+ cooktopActiveBurners?: number[] | undefined;
4791
+ cooktopKnobProgress?: number[] | undefined;
4792
+ cooktopShowGrate?: boolean | undefined;
4793
+ type: "cooktop-gas";
4794
+ cooktopLayout?: "gas-2burner" | "gas-4burner" | "gas-5burner-wok" | "gas-6burner" | undefined;
4795
+ } | {
4796
+ id: string;
4797
+ height?: number | undefined;
4798
+ cooktopBurnersOn?: boolean | undefined;
4799
+ cooktopActiveBurners?: number[] | undefined;
4800
+ cooktopKnobProgress?: number[] | undefined;
4801
+ cooktopShowGrate?: boolean | undefined;
4802
+ type: "cooktop-induction";
4803
+ cooktopLayout?: "induction-2zone" | "induction-4zone" | undefined;
4804
+ } | {
4805
+ id: string;
4806
+ height?: number | undefined;
4807
+ type: "pull-out-pantry";
4808
+ shelfCount?: number | undefined;
4809
+ pantryRackStyle?: "glass" | "tray" | "wire" | undefined;
4810
+ } | {
4811
+ id: string;
4812
+ height?: number | undefined;
4813
+ type: "fridge-single";
4814
+ } | {
4815
+ id: string;
4816
+ height?: number | undefined;
4817
+ type: "fridge-double";
4818
+ } | {
4819
+ id: string;
4820
+ height?: number | undefined;
4821
+ type: "fridge-top-freezer";
4822
+ } | {
4823
+ id: string;
4824
+ height?: number | undefined;
4825
+ type: "fridge-bottom-freezer";
4826
+ } | {
4827
+ id: string;
4828
+ height?: number | undefined;
4829
+ type: "hood-pyramid";
4830
+ } | {
4831
+ id: string;
4832
+ height?: number | undefined;
4833
+ type: "hood-curved-glass";
4834
+ })[] | undefined;
4835
+ id: `cabinet-module_${string}`;
4836
+ children: string[];
4837
+ cabinetType: "base" | "tall";
4838
+ moduleKind: "corner-filler" | "standard" | "wall-filler";
4839
+ openSide?: "left" | "right" | undefined;
4840
+ cornerShelf?: boolean | undefined;
4841
+ topFinish: "none" | "top-cabinet" | "trim";
4842
+ topFinishHeight: number;
4843
+ topFinishDepth: number;
4844
+ type: "cabinet-module";
4976
4845
  } | {
4977
4846
  object: "node";
4978
4847
  name?: string | undefined;
@@ -5272,6 +5141,78 @@ export declare function wallAttachments(nodes: StructureNodes, wall: WallNode):
5272
5141
  louverCount: number;
5273
5142
  backRatio: number;
5274
5143
  type: "eyebrow-vent";
5144
+ } | {
5145
+ object: "node";
5146
+ name?: string | undefined;
5147
+ parentId: string | null;
5148
+ visible: boolean;
5149
+ camera?: {
5150
+ position: [number, number, number];
5151
+ target: [number, number, number];
5152
+ mode: "orthographic" | "perspective";
5153
+ fov?: number | undefined;
5154
+ zoom?: number | undefined;
5155
+ } | undefined;
5156
+ metadata: Record<string, unknown>;
5157
+ provenance?: {
5158
+ refs: {
5159
+ ns?: string | undefined;
5160
+ id: string;
5161
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
5162
+ }[];
5163
+ lineage?: {
5164
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
5165
+ fromIds: string[];
5166
+ } | undefined;
5167
+ } | undefined;
5168
+ id: `gutter_${string}`;
5169
+ material?: {
5170
+ id?: string | undefined;
5171
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
5172
+ properties?: {
5173
+ color: string;
5174
+ roughness: number;
5175
+ metalness: number;
5176
+ opacity: number;
5177
+ transparent: boolean;
5178
+ side: "back" | "double" | "front";
5179
+ } | undefined;
5180
+ texture?: {
5181
+ url: string;
5182
+ repeat?: [number, number] | undefined;
5183
+ scale?: number | undefined;
5184
+ offset?: [number, number] | undefined;
5185
+ normalMap?: string | undefined;
5186
+ normalScale?: number | undefined;
5187
+ bumpMap?: string | undefined;
5188
+ bumpScale?: number | undefined;
5189
+ } | undefined;
5190
+ } | undefined;
5191
+ slots?: Record<string, string> | undefined;
5192
+ materialPreset: string;
5193
+ roofSegmentId?: string | undefined;
5194
+ position: [number, number, number];
5195
+ rotation: number;
5196
+ length: number;
5197
+ arc?: {
5198
+ centerX: number;
5199
+ centerZ: number;
5200
+ radius: number;
5201
+ } | undefined;
5202
+ size: number;
5203
+ thickness: number;
5204
+ profile: "box" | "half-round" | "k-style";
5205
+ endCapLeft: boolean;
5206
+ endCapRight: boolean;
5207
+ hangerStyle: "none" | "strap";
5208
+ hangerSpacing: number;
5209
+ outlets: {
5210
+ id: string;
5211
+ offset: number;
5212
+ diameter: number;
5213
+ generatedBy?: "default-downspout" | undefined;
5214
+ }[];
5215
+ type: "gutter";
5275
5216
  } | {
5276
5217
  object: "node";
5277
5218
  name?: string | undefined;
@@ -5708,6 +5649,66 @@ export declare function wallAttachments(nodes: StructureNodes, wall: WallNode):
5708
5649
  windowSillThickness: number;
5709
5650
  children: `window_${string}`[];
5710
5651
  type: "dormer";
5652
+ } | {
5653
+ object: "node";
5654
+ name?: string | undefined;
5655
+ parentId: string | null;
5656
+ visible: boolean;
5657
+ camera?: {
5658
+ position: [number, number, number];
5659
+ target: [number, number, number];
5660
+ mode: "orthographic" | "perspective";
5661
+ fov?: number | undefined;
5662
+ zoom?: number | undefined;
5663
+ } | undefined;
5664
+ metadata: Record<string, unknown>;
5665
+ provenance?: {
5666
+ refs: {
5667
+ ns?: string | undefined;
5668
+ id: string;
5669
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
5670
+ }[];
5671
+ lineage?: {
5672
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
5673
+ fromIds: string[];
5674
+ } | undefined;
5675
+ } | undefined;
5676
+ id: `downspout_${string}`;
5677
+ material?: {
5678
+ id?: string | undefined;
5679
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
5680
+ properties?: {
5681
+ color: string;
5682
+ roughness: number;
5683
+ metalness: number;
5684
+ opacity: number;
5685
+ transparent: boolean;
5686
+ side: "back" | "double" | "front";
5687
+ } | undefined;
5688
+ texture?: {
5689
+ url: string;
5690
+ repeat?: [number, number] | undefined;
5691
+ scale?: number | undefined;
5692
+ offset?: [number, number] | undefined;
5693
+ normalMap?: string | undefined;
5694
+ normalScale?: number | undefined;
5695
+ bumpMap?: string | undefined;
5696
+ bumpScale?: number | undefined;
5697
+ } | undefined;
5698
+ } | undefined;
5699
+ slots?: Record<string, string> | undefined;
5700
+ materialPreset: string;
5701
+ gutterId?: string | undefined;
5702
+ outletId?: string | undefined;
5703
+ length: number;
5704
+ lengthMode?: "manual" | "to-ground" | undefined;
5705
+ diameter: number;
5706
+ standoff: number;
5707
+ shape: "auto" | "rect" | "round";
5708
+ strapStyle: "band" | "none";
5709
+ strapSpacing: number;
5710
+ terminal: "kickout" | "splash" | "straight";
5711
+ type: "downspout";
5711
5712
  })[];
5712
5713
  export declare function wallSlice(wall: WallNode, start: Point, end: Point, id: string, range?: [number, number]): WallNode;
5713
5714
  export declare function rehostWallChild(nodes: Record<string, AnyNode>, child: AnyNode, source: WallNode, target: WallNode): void;
@@ -5951,6 +5952,7 @@ export declare function splitCollinearWalls(nodes: Record<string, AnyNode>, plac
5951
5952
  } | undefined;
5952
5953
  justification?: "a" | "b" | undefined;
5953
5954
  height?: number | undefined;
5955
+ endHeightOffset?: number | undefined;
5954
5956
  curveOffset?: number | undefined;
5955
5957
  supportSlabId?: string | undefined;
5956
5958
  supportOffset?: number | undefined;
@@ -6467,6 +6469,7 @@ export declare function splitCollinearWalls(nodes: Record<string, AnyNode>, plac
6467
6469
  } | undefined;
6468
6470
  justification?: "a" | "b" | undefined;
6469
6471
  height?: number | undefined;
6472
+ endHeightOffset?: number | undefined;
6470
6473
  curveOffset?: number | undefined;
6471
6474
  supportSlabId?: string | undefined;
6472
6475
  supportOffset?: number | undefined;