@pascal-app/core 0.9.1 → 0.9.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (321) hide show
  1. package/dist/events/bus.d.ts +30 -2
  2. package/dist/events/bus.d.ts.map +1 -1
  3. package/dist/hooks/scene-registry/item-clip-registry.d.ts +18 -0
  4. package/dist/hooks/scene-registry/item-clip-registry.d.ts.map +1 -0
  5. package/dist/hooks/scene-registry/item-clip-registry.js +10 -0
  6. package/dist/hooks/scene-registry/scene-registry.d.ts +8 -1
  7. package/dist/hooks/scene-registry/scene-registry.d.ts.map +1 -1
  8. package/dist/hooks/scene-registry/scene-registry.js +27 -1
  9. package/dist/hooks/scene-registry/scene-registry.test.d.ts +2 -0
  10. package/dist/hooks/scene-registry/scene-registry.test.d.ts.map +1 -0
  11. package/dist/hooks/scene-registry/scene-registry.test.js +26 -0
  12. package/dist/hooks/spatial-grid/floor-placed-elevation.test.js +93 -0
  13. package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts +69 -12
  14. package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts.map +1 -1
  15. package/dist/hooks/spatial-grid/spatial-grid-manager.js +476 -195
  16. package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts.map +1 -1
  17. package/dist/hooks/spatial-grid/spatial-grid-sync.js +19 -1
  18. package/dist/hooks/spatial-grid/wall-slab-overlap.test.d.ts +2 -0
  19. package/dist/hooks/spatial-grid/wall-slab-overlap.test.d.ts.map +1 -0
  20. package/dist/hooks/spatial-grid/wall-slab-overlap.test.js +363 -0
  21. package/dist/index.d.ts +16 -6
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +15 -5
  24. package/dist/lib/level-name.d.ts +4 -0
  25. package/dist/lib/level-name.d.ts.map +1 -0
  26. package/dist/lib/level-name.js +10 -0
  27. package/dist/lib/measurement-geometry.d.ts +19 -0
  28. package/dist/lib/measurement-geometry.d.ts.map +1 -0
  29. package/dist/lib/measurement-geometry.js +232 -0
  30. package/dist/lib/measurement-geometry.test.d.ts +2 -0
  31. package/dist/lib/measurement-geometry.test.d.ts.map +1 -0
  32. package/dist/lib/measurement-geometry.test.js +102 -0
  33. package/dist/lib/polygon-geometry.d.ts +0 -1
  34. package/dist/lib/polygon-geometry.d.ts.map +1 -1
  35. package/dist/lib/polygon-geometry.js +0 -18
  36. package/dist/lib/selection-proxy.d.ts +4 -0
  37. package/dist/lib/selection-proxy.d.ts.map +1 -0
  38. package/dist/lib/selection-proxy.js +12 -0
  39. package/dist/lib/slab-polygon.d.ts +31 -2
  40. package/dist/lib/slab-polygon.d.ts.map +1 -1
  41. package/dist/lib/slab-polygon.js +525 -31
  42. package/dist/lib/slab-polygon.test.d.ts +2 -0
  43. package/dist/lib/slab-polygon.test.d.ts.map +1 -0
  44. package/dist/lib/slab-polygon.test.js +635 -0
  45. package/dist/lib/slots.d.ts +14 -0
  46. package/dist/lib/slots.d.ts.map +1 -0
  47. package/dist/lib/slots.js +26 -0
  48. package/dist/lib/space-detection.d.ts +25 -2
  49. package/dist/lib/space-detection.d.ts.map +1 -1
  50. package/dist/lib/space-detection.js +414 -118
  51. package/dist/lib/space-detection.test.js +301 -2
  52. package/dist/lib/wall-distance.d.ts +60 -0
  53. package/dist/lib/wall-distance.d.ts.map +1 -0
  54. package/dist/lib/wall-distance.js +85 -0
  55. package/dist/lib/zone-quantities.d.ts +21 -0
  56. package/dist/lib/zone-quantities.d.ts.map +1 -0
  57. package/dist/lib/zone-quantities.js +183 -0
  58. package/dist/lib/zone-quantities.test.d.ts +2 -0
  59. package/dist/lib/zone-quantities.test.d.ts.map +1 -0
  60. package/dist/lib/zone-quantities.test.js +82 -0
  61. package/dist/material-library.d.ts +20 -1
  62. package/dist/material-library.d.ts.map +1 -1
  63. package/dist/material-library.js +2181 -441
  64. package/dist/registry/handles.d.ts +75 -2
  65. package/dist/registry/handles.d.ts.map +1 -1
  66. package/dist/registry/index.d.ts +3 -3
  67. package/dist/registry/index.d.ts.map +1 -1
  68. package/dist/registry/index.js +1 -1
  69. package/dist/registry/registry.d.ts +46 -3
  70. package/dist/registry/registry.d.ts.map +1 -1
  71. package/dist/registry/registry.js +82 -1
  72. package/dist/registry/registry.test.js +14 -1
  73. package/dist/registry/subtree.d.ts.map +1 -1
  74. package/dist/registry/subtree.js +4 -0
  75. package/dist/registry/subtree.test.js +30 -0
  76. package/dist/registry/types.d.ts +717 -38
  77. package/dist/registry/types.d.ts.map +1 -1
  78. package/dist/schema/index.d.ts +21 -5
  79. package/dist/schema/index.d.ts.map +1 -1
  80. package/dist/schema/index.js +17 -3
  81. package/dist/schema/material.d.ts +3 -2
  82. package/dist/schema/material.d.ts.map +1 -1
  83. package/dist/schema/material.js +7 -5
  84. package/dist/schema/material.test.d.ts +2 -0
  85. package/dist/schema/material.test.d.ts.map +1 -0
  86. package/dist/schema/material.test.js +43 -0
  87. package/dist/schema/nodes/box-vent.d.ts +2 -2
  88. package/dist/schema/nodes/cabinet.d.ts +534 -0
  89. package/dist/schema/nodes/cabinet.d.ts.map +1 -0
  90. package/dist/schema/nodes/cabinet.js +137 -0
  91. package/dist/schema/nodes/ceiling.d.ts +3 -2
  92. package/dist/schema/nodes/ceiling.d.ts.map +1 -1
  93. package/dist/schema/nodes/ceiling.js +4 -0
  94. package/dist/schema/nodes/chimney.d.ts +4 -4
  95. package/dist/schema/nodes/column.d.ts +3 -2
  96. package/dist/schema/nodes/column.d.ts.map +1 -1
  97. package/dist/schema/nodes/column.js +3 -0
  98. package/dist/schema/nodes/cupola.d.ts +2 -2
  99. package/dist/schema/nodes/door.d.ts +13 -5
  100. package/dist/schema/nodes/door.d.ts.map +1 -1
  101. package/dist/schema/nodes/door.js +12 -0
  102. package/dist/schema/nodes/dormer.d.ts +8 -8
  103. package/dist/schema/nodes/dormer.js +1 -1
  104. package/dist/schema/nodes/downspout.d.ts +2 -2
  105. package/dist/schema/nodes/duct-fitting.d.ts +91 -0
  106. package/dist/schema/nodes/duct-fitting.d.ts.map +1 -0
  107. package/dist/schema/nodes/duct-fitting.js +92 -0
  108. package/dist/schema/nodes/duct-segment.d.ts +61 -0
  109. package/dist/schema/nodes/duct-segment.d.ts.map +1 -0
  110. package/dist/schema/nodes/duct-segment.js +73 -0
  111. package/dist/schema/nodes/duct-terminal.d.ts +57 -0
  112. package/dist/schema/nodes/duct-terminal.d.ts.map +1 -0
  113. package/dist/schema/nodes/duct-terminal.js +51 -0
  114. package/dist/schema/nodes/elevator.d.ts +3 -2
  115. package/dist/schema/nodes/elevator.d.ts.map +1 -1
  116. package/dist/schema/nodes/elevator.js +3 -0
  117. package/dist/schema/nodes/eyebrow-vent.d.ts +2 -2
  118. package/dist/schema/nodes/fence.d.ts +18 -2
  119. package/dist/schema/nodes/fence.d.ts.map +1 -1
  120. package/dist/schema/nodes/fence.js +25 -2
  121. package/dist/schema/nodes/gutter.d.ts +2 -2
  122. package/dist/schema/nodes/hvac-equipment.d.ts +63 -0
  123. package/dist/schema/nodes/hvac-equipment.d.ts.map +1 -0
  124. package/dist/schema/nodes/hvac-equipment.js +55 -0
  125. package/dist/schema/nodes/item.d.ts +8 -0
  126. package/dist/schema/nodes/item.d.ts.map +1 -1
  127. package/dist/schema/nodes/item.js +11 -0
  128. package/dist/schema/nodes/level.d.ts +1 -1
  129. package/dist/schema/nodes/level.d.ts.map +1 -1
  130. package/dist/schema/nodes/level.js +2 -0
  131. package/dist/schema/nodes/lineset.d.ts +42 -0
  132. package/dist/schema/nodes/lineset.d.ts.map +1 -0
  133. package/dist/schema/nodes/lineset.js +38 -0
  134. package/dist/schema/nodes/liquid-line.d.ts +34 -0
  135. package/dist/schema/nodes/liquid-line.d.ts.map +1 -0
  136. package/dist/schema/nodes/liquid-line.js +24 -0
  137. package/dist/schema/nodes/measurement.d.ts +306 -0
  138. package/dist/schema/nodes/measurement.d.ts.map +1 -0
  139. package/dist/schema/nodes/measurement.js +87 -0
  140. package/dist/schema/nodes/measurement.test.d.ts +2 -0
  141. package/dist/schema/nodes/measurement.test.d.ts.map +1 -0
  142. package/dist/schema/nodes/measurement.test.js +139 -0
  143. package/dist/schema/nodes/pipe-fitting.d.ts +56 -0
  144. package/dist/schema/nodes/pipe-fitting.d.ts.map +1 -0
  145. package/dist/schema/nodes/pipe-fitting.js +45 -0
  146. package/dist/schema/nodes/pipe-segment.d.ts +48 -0
  147. package/dist/schema/nodes/pipe-segment.d.ts.map +1 -0
  148. package/dist/schema/nodes/pipe-segment.js +36 -0
  149. package/dist/schema/nodes/pipe-trap.d.ts +43 -0
  150. package/dist/schema/nodes/pipe-trap.d.ts.map +1 -0
  151. package/dist/schema/nodes/pipe-trap.js +36 -0
  152. package/dist/schema/nodes/ridge-vent-defaults.test.d.ts +2 -0
  153. package/dist/schema/nodes/ridge-vent-defaults.test.d.ts.map +1 -0
  154. package/dist/schema/nodes/ridge-vent-defaults.test.js +205 -0
  155. package/dist/schema/nodes/ridge-vent.d.ts +18 -3
  156. package/dist/schema/nodes/ridge-vent.d.ts.map +1 -1
  157. package/dist/schema/nodes/ridge-vent.js +221 -3
  158. package/dist/schema/nodes/roof-segment-shape.d.ts +90 -0
  159. package/dist/schema/nodes/roof-segment-shape.d.ts.map +1 -0
  160. package/dist/schema/nodes/roof-segment-shape.js +318 -0
  161. package/dist/schema/nodes/roof-segment-shape.test.d.ts +2 -0
  162. package/dist/schema/nodes/roof-segment-shape.test.d.ts.map +1 -0
  163. package/dist/schema/nodes/roof-segment-shape.test.js +175 -0
  164. package/dist/schema/nodes/roof-segment-surface.test.d.ts +2 -0
  165. package/dist/schema/nodes/roof-segment-surface.test.d.ts.map +1 -0
  166. package/dist/schema/nodes/roof-segment-surface.test.js +48 -0
  167. package/dist/schema/nodes/roof-segment-trim.test.d.ts +2 -0
  168. package/dist/schema/nodes/roof-segment-trim.test.d.ts.map +1 -0
  169. package/dist/schema/nodes/roof-segment-trim.test.js +107 -0
  170. package/dist/schema/nodes/roof-segment-walls.d.ts +101 -0
  171. package/dist/schema/nodes/roof-segment-walls.d.ts.map +1 -0
  172. package/dist/schema/nodes/roof-segment-walls.js +330 -0
  173. package/dist/schema/nodes/roof-segment-walls.test.d.ts +2 -0
  174. package/dist/schema/nodes/roof-segment-walls.test.d.ts.map +1 -0
  175. package/dist/schema/nodes/roof-segment-walls.test.js +92 -0
  176. package/dist/schema/nodes/roof-segment.d.ts +84 -8
  177. package/dist/schema/nodes/roof-segment.d.ts.map +1 -1
  178. package/dist/schema/nodes/roof-segment.js +290 -5
  179. package/dist/schema/nodes/roof.d.ts +8 -8
  180. package/dist/schema/nodes/shelf.d.ts +3 -2
  181. package/dist/schema/nodes/shelf.d.ts.map +1 -1
  182. package/dist/schema/nodes/shelf.js +6 -0
  183. package/dist/schema/nodes/skylight.d.ts +10 -10
  184. package/dist/schema/nodes/slab.d.ts +3 -2
  185. package/dist/schema/nodes/slab.d.ts.map +1 -1
  186. package/dist/schema/nodes/slab.js +4 -0
  187. package/dist/schema/nodes/solar-panel.d.ts +4 -4
  188. package/dist/schema/nodes/stair-segment.d.ts +4 -4
  189. package/dist/schema/nodes/stair.d.ts +13 -12
  190. package/dist/schema/nodes/stair.d.ts.map +1 -1
  191. package/dist/schema/nodes/stair.js +3 -0
  192. package/dist/schema/nodes/turbine-vent.d.ts +2 -2
  193. package/dist/schema/nodes/wall.d.ts +245 -6
  194. package/dist/schema/nodes/wall.d.ts.map +1 -1
  195. package/dist/schema/nodes/wall.js +257 -0
  196. package/dist/schema/nodes/wall.test.d.ts +2 -0
  197. package/dist/schema/nodes/wall.test.d.ts.map +1 -0
  198. package/dist/schema/nodes/wall.test.js +208 -0
  199. package/dist/schema/nodes/window.d.ts +11 -3
  200. package/dist/schema/nodes/window.d.ts.map +1 -1
  201. package/dist/schema/nodes/window.js +12 -0
  202. package/dist/schema/nodes/zone.d.ts +2 -0
  203. package/dist/schema/nodes/zone.d.ts.map +1 -1
  204. package/dist/schema/nodes/zone.js +6 -0
  205. package/dist/schema/scene-material.d.ts +41 -0
  206. package/dist/schema/scene-material.d.ts.map +1 -0
  207. package/dist/schema/scene-material.js +9 -0
  208. package/dist/schema/types.d.ts +1089 -94
  209. package/dist/schema/types.d.ts.map +1 -1
  210. package/dist/schema/types.js +23 -0
  211. package/dist/services/alignment-anchors.d.ts.map +1 -1
  212. package/dist/services/alignment-anchors.js +30 -1
  213. package/dist/services/alignment.d.ts +5 -0
  214. package/dist/services/alignment.d.ts.map +1 -1
  215. package/dist/services/alignment.js +2 -0
  216. package/dist/services/hosting.d.ts +8 -0
  217. package/dist/services/hosting.d.ts.map +1 -1
  218. package/dist/services/hosting.js +13 -4
  219. package/dist/services/hosting.test.js +32 -1
  220. package/dist/services/index.d.ts +8 -2
  221. package/dist/services/index.d.ts.map +1 -1
  222. package/dist/services/index.js +8 -2
  223. package/dist/services/level-height.d.ts +28 -0
  224. package/dist/services/level-height.d.ts.map +1 -0
  225. package/dist/services/level-height.js +62 -0
  226. package/dist/services/opening-guides.d.ts +141 -0
  227. package/dist/services/opening-guides.d.ts.map +1 -0
  228. package/dist/services/opening-guides.js +267 -0
  229. package/dist/services/opening-guides.test.d.ts +2 -0
  230. package/dist/services/opening-guides.test.d.ts.map +1 -0
  231. package/dist/services/opening-guides.test.js +208 -0
  232. package/dist/services/port-connectivity.d.ts +115 -0
  233. package/dist/services/port-connectivity.d.ts.map +1 -0
  234. package/dist/services/port-connectivity.js +300 -0
  235. package/dist/services/port-connectivity.test.d.ts +2 -0
  236. package/dist/services/port-connectivity.test.d.ts.map +1 -0
  237. package/dist/services/port-connectivity.test.js +297 -0
  238. package/dist/services/riser-diagram.d.ts +40 -0
  239. package/dist/services/riser-diagram.d.ts.map +1 -0
  240. package/dist/services/riser-diagram.js +110 -0
  241. package/dist/services/riser-diagram.test.d.ts +2 -0
  242. package/dist/services/riser-diagram.test.d.ts.map +1 -0
  243. package/dist/services/riser-diagram.test.js +66 -0
  244. package/dist/services/snap.d.ts +9 -1
  245. package/dist/services/snap.d.ts.map +1 -1
  246. package/dist/services/snap.js +21 -1
  247. package/dist/services/snap.test.js +43 -1
  248. package/dist/services/system-graph.d.ts +30 -0
  249. package/dist/services/system-graph.d.ts.map +1 -0
  250. package/dist/services/system-graph.js +164 -0
  251. package/dist/services/system-graph.test.d.ts +2 -0
  252. package/dist/services/system-graph.test.d.ts.map +1 -0
  253. package/dist/services/system-graph.test.js +138 -0
  254. package/dist/services/validate-dwv.d.ts +32 -0
  255. package/dist/services/validate-dwv.d.ts.map +1 -0
  256. package/dist/services/validate-dwv.js +118 -0
  257. package/dist/services/validate-dwv.test.d.ts +2 -0
  258. package/dist/services/validate-dwv.test.d.ts.map +1 -0
  259. package/dist/services/validate-dwv.test.js +109 -0
  260. package/dist/store/actions/node-actions.d.ts.map +1 -1
  261. package/dist/store/actions/node-actions.js +94 -1
  262. package/dist/store/actions/ridge-vent-update.test.d.ts +2 -0
  263. package/dist/store/actions/ridge-vent-update.test.d.ts.map +1 -0
  264. package/dist/store/actions/ridge-vent-update.test.js +264 -0
  265. package/dist/store/history-control.d.ts +11 -0
  266. package/dist/store/history-control.d.ts.map +1 -1
  267. package/dist/store/history-control.js +33 -0
  268. package/dist/store/use-scene-dirty-tracking.test.d.ts +2 -0
  269. package/dist/store/use-scene-dirty-tracking.test.d.ts.map +1 -0
  270. package/dist/store/use-scene-dirty-tracking.test.js +68 -0
  271. package/dist/store/use-scene-measurement-roundtrip.test.d.ts +2 -0
  272. package/dist/store/use-scene-measurement-roundtrip.test.d.ts.map +1 -0
  273. package/dist/store/use-scene-measurement-roundtrip.test.js +97 -0
  274. package/dist/store/use-scene-plugins.test.d.ts +2 -0
  275. package/dist/store/use-scene-plugins.test.d.ts.map +1 -0
  276. package/dist/store/use-scene-plugins.test.js +51 -0
  277. package/dist/store/use-scene-wall-slot-migration.test.d.ts +2 -0
  278. package/dist/store/use-scene-wall-slot-migration.test.d.ts.map +1 -0
  279. package/dist/store/use-scene-wall-slot-migration.test.js +210 -0
  280. package/dist/store/use-scene-window-migration.test.d.ts +2 -0
  281. package/dist/store/use-scene-window-migration.test.d.ts.map +1 -0
  282. package/dist/store/use-scene-window-migration.test.js +85 -0
  283. package/dist/store/use-scene.d.ts +17 -2
  284. package/dist/store/use-scene.d.ts.map +1 -1
  285. package/dist/store/use-scene.js +358 -51
  286. package/dist/systems/elevator/elevator-service.js +1 -1
  287. package/dist/systems/fence/fence-centerline.d.ts +12 -0
  288. package/dist/systems/fence/fence-centerline.d.ts.map +1 -0
  289. package/dist/systems/fence/fence-centerline.js +37 -0
  290. package/dist/systems/fence/fence-spline.d.ts +39 -0
  291. package/dist/systems/fence/fence-spline.d.ts.map +1 -0
  292. package/dist/systems/fence/fence-spline.js +196 -0
  293. package/dist/systems/fence/fence-spline.test.d.ts +2 -0
  294. package/dist/systems/fence/fence-spline.test.d.ts.map +1 -0
  295. package/dist/systems/fence/fence-spline.test.js +136 -0
  296. package/dist/systems/stair/stair-footprint.d.ts.map +1 -1
  297. package/dist/systems/stair/stair-footprint.js +21 -11
  298. package/dist/systems/stair/stair-opening-preview.d.ts +1139 -469
  299. package/dist/systems/stair/stair-opening-preview.d.ts.map +1 -1
  300. package/dist/systems/stair/stair-opening-sync.d.ts.map +1 -1
  301. package/dist/systems/stair/stair-opening-sync.js +1 -18
  302. package/dist/systems/stair/stair-opening-sync.test.js +39 -0
  303. package/dist/systems/wall/wall-mitering.d.ts.map +1 -1
  304. package/dist/systems/wall/wall-mitering.js +38 -2
  305. package/dist/systems/wall/wall-mitering.test.d.ts +2 -0
  306. package/dist/systems/wall/wall-mitering.test.d.ts.map +1 -0
  307. package/dist/systems/wall/wall-mitering.test.js +63 -0
  308. package/dist/utils/clone-scene-graph.d.ts +1 -0
  309. package/dist/utils/clone-scene-graph.d.ts.map +1 -1
  310. package/dist/utils/clone-scene-graph.js +23 -3
  311. package/dist/utils/clone-scene-graph.test.js +3 -0
  312. package/dist/utils/heal-scene-graph.d.ts +18 -0
  313. package/dist/utils/heal-scene-graph.d.ts.map +1 -0
  314. package/dist/utils/heal-scene-graph.js +90 -0
  315. package/dist/utils/heal-scene-graph.test.d.ts +2 -0
  316. package/dist/utils/heal-scene-graph.test.d.ts.map +1 -0
  317. package/dist/utils/heal-scene-graph.test.js +88 -0
  318. package/dist/validation/validate-build-json.d.ts +1 -0
  319. package/dist/validation/validate-build-json.d.ts.map +1 -1
  320. package/dist/validation/validate-build-json.js +31 -2
  321. package/package.json +3 -3
@@ -106,6 +106,7 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
106
106
  } | undefined;
107
107
  } | undefined;
108
108
  materialPreset?: string | undefined;
109
+ slots?: Record<string, string> | undefined;
109
110
  shaftWidth?: number | undefined;
110
111
  shaftDepth?: number | undefined;
111
112
  servedLevelIds?: string[] | undefined;
@@ -189,7 +190,10 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
189
190
  side?: "front" | "back" | undefined;
190
191
  wallId?: string | undefined;
191
192
  wallT?: number | undefined;
193
+ roofSegmentId?: string | undefined;
194
+ roofFace?: "front" | "back" | "right" | "left" | undefined;
192
195
  collectionIds?: `collection_${string}`[] | undefined;
196
+ slots?: Record<string, string> | undefined;
193
197
  } | {
194
198
  object: "node";
195
199
  parentId: string | null;
@@ -233,6 +237,7 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
233
237
  } | undefined;
234
238
  } | undefined;
235
239
  materialPreset?: string | undefined;
240
+ slots?: Record<string, string> | undefined;
236
241
  } | {
237
242
  object: "node";
238
243
  parentId: string | null;
@@ -339,6 +344,7 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
339
344
  } | undefined;
340
345
  } | undefined;
341
346
  materialPreset?: string | undefined;
347
+ slots?: Record<string, string> | undefined;
342
348
  } | {
343
349
  object: "node";
344
350
  parentId: string | null;
@@ -356,10 +362,12 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
356
362
  topRailHeight: number;
357
363
  groundClearance: number;
358
364
  edgeInset: number;
365
+ slatGap: number;
366
+ postCap: "flat" | "none" | "pyramid";
359
367
  baseStyle: "floating" | "grounded";
360
368
  showInfill: boolean;
361
369
  color: string;
362
- style: "slat" | "rail" | "privacy";
370
+ style: "slat" | "rail" | "privacy" | "horizontal";
363
371
  name?: string | undefined;
364
372
  camera?: {
365
373
  position: [number, number, number];
@@ -386,6 +394,9 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
386
394
  } | undefined;
387
395
  } | undefined;
388
396
  materialPreset?: string | undefined;
397
+ slots?: Record<string, string> | undefined;
398
+ path?: [number, number][] | undefined;
399
+ tangents?: ([number, number] | null)[] | undefined;
389
400
  curveOffset?: number | undefined;
390
401
  } | {
391
402
  object: "node";
@@ -420,25 +431,12 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
420
431
  parentId: string | null;
421
432
  visible: boolean;
422
433
  metadata: import("zod").JSONType;
423
- id: `rseg_${string}`;
424
- type: "roof-segment";
425
- position: [number, number, number];
426
- rotation: number;
427
- roofType: "flat" | "hip" | "gable" | "shed" | "gambrel" | "dutch" | "mansard";
428
- width: number;
429
- depth: number;
430
- wallHeight: number;
431
- pitch: number;
432
- wallThickness: number;
433
- deckThickness: number;
434
- overhang: number;
435
- shingleThickness: number;
436
- gambrelLowerWidthRatio: number;
437
- gambrelLowerHeightRatio: number;
438
- mansardSteepWidthRatio: number;
439
- mansardSteepHeightRatio: number;
440
- dutchHipWidthRatio: number;
441
- dutchHipHeightRatio: number;
434
+ id: `site_${string}`;
435
+ type: "site";
436
+ polygon: {
437
+ type: "polygon";
438
+ points: [number, number][];
439
+ };
442
440
  children: string[];
443
441
  name?: string | undefined;
444
442
  camera?: {
@@ -448,6 +446,61 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
448
446
  fov?: number | undefined;
449
447
  zoom?: number | undefined;
450
448
  } | undefined;
449
+ } | {
450
+ object: "node";
451
+ parentId: string | null;
452
+ visible: boolean;
453
+ metadata: import("zod").JSONType;
454
+ id: `building_${string}`;
455
+ type: "building";
456
+ children: (`elevator_${string}` | `level_${string}`)[];
457
+ position: [number, number, number];
458
+ rotation: [number, number, number];
459
+ name?: string | undefined;
460
+ camera?: {
461
+ position: [number, number, number];
462
+ target: [number, number, number];
463
+ mode: "perspective" | "orthographic";
464
+ fov?: number | undefined;
465
+ zoom?: number | undefined;
466
+ } | undefined;
467
+ } | {
468
+ object: "node";
469
+ parentId: string | null;
470
+ visible: boolean;
471
+ metadata: import("zod").JSONType;
472
+ id: `level_${string}`;
473
+ type: "level";
474
+ children: (`item_${string}` | `ceiling_${string}` | `column_${string}` | `fence_${string}` | `guide_${string}` | `wall_${string}` | `zone_${string}` | `slab_${string}` | `roof_${string}` | `stair_${string}` | `scan_${string}` | `measurement_${string}` | `spawn_${string}` | `shelf_${string}`)[];
475
+ level: number;
476
+ name?: string | undefined;
477
+ camera?: {
478
+ position: [number, number, number];
479
+ target: [number, number, number];
480
+ mode: "perspective" | "orthographic";
481
+ fov?: number | undefined;
482
+ zoom?: number | undefined;
483
+ } | undefined;
484
+ } | {
485
+ object: "node";
486
+ parentId: string | null;
487
+ visible: boolean;
488
+ metadata: import("zod").JSONType;
489
+ id: `wall_${string}`;
490
+ type: "wall";
491
+ children: (`item_${string}` | `door_${string}` | `window_${string}`)[];
492
+ start: [number, number];
493
+ end: [number, number];
494
+ frontSide: "unknown" | "interior" | "exterior";
495
+ backSide: "unknown" | "interior" | "exterior";
496
+ name?: string | undefined;
497
+ camera?: {
498
+ position: [number, number, number];
499
+ target: [number, number, number];
500
+ mode: "perspective" | "orthographic";
501
+ fov?: number | undefined;
502
+ zoom?: number | undefined;
503
+ } | undefined;
451
504
  material?: {
452
505
  id?: string | undefined;
453
506
  preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
@@ -466,7 +519,7 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
466
519
  } | undefined;
467
520
  } | undefined;
468
521
  materialPreset?: string | undefined;
469
- topMaterial?: {
522
+ interiorMaterial?: {
470
523
  id?: string | undefined;
471
524
  preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
472
525
  properties?: {
@@ -483,8 +536,8 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
483
536
  scale?: number | undefined;
484
537
  } | undefined;
485
538
  } | undefined;
486
- topMaterialPreset?: string | undefined;
487
- edgeMaterial?: {
539
+ interiorMaterialPreset?: string | undefined;
540
+ exteriorMaterial?: {
488
541
  id?: string | undefined;
489
542
  preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
490
543
  properties?: {
@@ -501,35 +554,74 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
501
554
  scale?: number | undefined;
502
555
  } | undefined;
503
556
  } | undefined;
504
- edgeMaterialPreset?: string | undefined;
505
- wallMaterial?: {
506
- id?: string | undefined;
507
- preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
508
- properties?: {
509
- color: string;
510
- roughness: number;
511
- metalness: number;
512
- opacity: number;
513
- transparent: boolean;
514
- side: "front" | "back" | "double";
515
- } | undefined;
516
- texture?: {
517
- url: string;
518
- repeat?: [number, number] | undefined;
519
- scale?: number | undefined;
520
- } | undefined;
557
+ exteriorMaterialPreset?: string | undefined;
558
+ slots?: Record<string, string> | undefined;
559
+ thickness?: number | undefined;
560
+ height?: number | undefined;
561
+ curveOffset?: number | undefined;
562
+ faceBands?: {
563
+ enabled: boolean;
564
+ count: number;
565
+ lowerHeight: number;
566
+ middleHeight: number;
567
+ upperHeight: number;
568
+ } | undefined;
569
+ skirting?: {
570
+ enabled: boolean;
571
+ sides: "interior" | "exterior" | "both";
572
+ height: number;
573
+ proud: number;
574
+ profile: "flat" | "bevel" | "triangle" | "cove" | "bullnose" | "base-modern" | "base-colonial" | "base-shoe" | "base-ogee" | "crown-cove" | "crown-ogee" | "crown-craftsman" | "crown-layered" | "rail-rounded" | "rail-ogee" | "rail-picture" | "rail-stepped";
575
+ offsetY?: number | undefined;
576
+ } | undefined;
577
+ crown?: {
578
+ enabled: boolean;
579
+ sides: "interior" | "exterior" | "both";
580
+ height: number;
581
+ proud: number;
582
+ profile: "flat" | "bevel" | "triangle" | "cove" | "bullnose" | "base-modern" | "base-colonial" | "base-shoe" | "base-ogee" | "crown-cove" | "crown-ogee" | "crown-craftsman" | "crown-layered" | "rail-rounded" | "rail-ogee" | "rail-picture" | "rail-stepped";
583
+ offsetY?: number | undefined;
584
+ } | undefined;
585
+ chairRail?: {
586
+ enabled: boolean;
587
+ sides: "interior" | "exterior" | "both";
588
+ height: number;
589
+ proud: number;
590
+ profile: "flat" | "bevel" | "triangle" | "cove" | "bullnose" | "base-modern" | "base-colonial" | "base-shoe" | "base-ogee" | "crown-cove" | "crown-ogee" | "crown-craftsman" | "crown-layered" | "rail-rounded" | "rail-ogee" | "rail-picture" | "rail-stepped";
591
+ offsetY?: number | undefined;
521
592
  } | undefined;
522
- wallMaterialPreset?: string | undefined;
523
593
  } | {
524
594
  object: "node";
525
595
  parentId: string | null;
526
596
  visible: boolean;
527
597
  metadata: import("zod").JSONType;
528
- id: `roof_${string}`;
529
- type: "roof";
530
598
  position: [number, number, number];
531
599
  rotation: number;
532
- children: `rseg_${string}`[];
600
+ width: number;
601
+ depth: number;
602
+ carcassHeight: number;
603
+ operationState: number;
604
+ plinthHeight: number;
605
+ toeKickDepth: number;
606
+ boardThickness: number;
607
+ countertopThickness: number;
608
+ countertopOverhang: number;
609
+ countertopBackOverhang: number;
610
+ withFinishedBack: boolean;
611
+ frontThickness: number;
612
+ frontGap: number;
613
+ frontStyle: "slab" | "shaker" | "raised-arch";
614
+ handleStyle: "none" | "bar" | "cutout" | "hole" | "knob";
615
+ handlePosition: "top" | "auto" | "center";
616
+ frontOverlay: "full" | "inset";
617
+ withBottomPanel: boolean;
618
+ showPlinth: boolean;
619
+ withCountertop: boolean;
620
+ id: `cabinet_${string}`;
621
+ type: "cabinet";
622
+ runTier: "wall" | "base" | "tall";
623
+ children: `cabinet-module_${string}`[];
624
+ withWaterfall: boolean;
533
625
  name?: string | undefined;
534
626
  camera?: {
535
627
  position: [number, number, number];
@@ -556,101 +648,126 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
556
648
  } | undefined;
557
649
  } | undefined;
558
650
  materialPreset?: string | undefined;
559
- topMaterial?: {
560
- id?: string | undefined;
561
- preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
562
- properties?: {
563
- color: string;
564
- roughness: number;
565
- metalness: number;
566
- opacity: number;
567
- transparent: boolean;
568
- side: "front" | "back" | "double";
569
- } | undefined;
570
- texture?: {
571
- url: string;
572
- repeat?: [number, number] | undefined;
573
- scale?: number | undefined;
574
- } | undefined;
575
- } | undefined;
576
- topMaterialPreset?: string | undefined;
577
- edgeMaterial?: {
578
- id?: string | undefined;
579
- preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
580
- properties?: {
581
- color: string;
582
- roughness: number;
583
- metalness: number;
584
- opacity: number;
585
- transparent: boolean;
586
- side: "front" | "back" | "double";
587
- } | undefined;
588
- texture?: {
589
- url: string;
590
- repeat?: [number, number] | undefined;
591
- scale?: number | undefined;
592
- } | undefined;
593
- } | undefined;
594
- edgeMaterialPreset?: string | undefined;
595
- wallMaterial?: {
596
- id?: string | undefined;
597
- preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
598
- properties?: {
599
- color: string;
600
- roughness: number;
601
- metalness: number;
602
- opacity: number;
603
- transparent: boolean;
604
- side: "front" | "back" | "double";
605
- } | undefined;
606
- texture?: {
607
- url: string;
608
- repeat?: [number, number] | undefined;
609
- scale?: number | undefined;
610
- } | undefined;
611
- } | undefined;
612
- wallMaterialPreset?: string | undefined;
613
- } | {
614
- object: "node";
615
- parentId: string | null;
616
- visible: boolean;
617
- metadata: import("zod").JSONType;
618
- id: `scan_${string}`;
619
- type: "scan";
620
- url: string;
621
- position: [number, number, number];
622
- rotation: [number, number, number];
623
- scale: number;
624
- opacity: number;
625
- name?: string | undefined;
626
- camera?: {
627
- position: [number, number, number];
628
- target: [number, number, number];
629
- mode: "perspective" | "orthographic";
630
- fov?: number | undefined;
631
- zoom?: number | undefined;
651
+ slots?: Record<string, string> | undefined;
652
+ stack?: ({
653
+ type: "shelf";
654
+ id: string;
655
+ shelfCount?: number | undefined;
656
+ height?: number | undefined;
657
+ } | {
658
+ type: "drawer";
659
+ id: string;
660
+ drawerCount?: number | undefined;
661
+ height?: number | undefined;
662
+ } | {
663
+ type: "door";
664
+ id: string;
665
+ doorType?: "glass" | "double" | "single-left" | "single-right" | undefined;
666
+ shelfCount?: number | undefined;
667
+ height?: number | undefined;
668
+ } | {
669
+ type: "sink";
670
+ id: string;
671
+ sinkLayout?: "double" | "single" | "double-offset" | undefined;
672
+ height?: number | undefined;
673
+ } | {
674
+ type: "oven";
675
+ id: string;
676
+ height?: number | undefined;
677
+ } | {
678
+ type: "microwave";
679
+ id: string;
680
+ height?: number | undefined;
681
+ } | {
682
+ type: "dishwasher";
683
+ id: string;
684
+ height?: number | undefined;
685
+ } | {
686
+ type: "cooktop-gas";
687
+ id: string;
688
+ cooktopLayout?: "gas-2burner" | "gas-4burner" | "gas-5burner-wok" | "gas-6burner" | undefined;
689
+ cooktopBurnersOn?: boolean | undefined;
690
+ cooktopActiveBurners?: number[] | undefined;
691
+ cooktopKnobProgress?: number[] | undefined;
692
+ cooktopShowGrate?: boolean | undefined;
693
+ height?: number | undefined;
694
+ } | {
695
+ type: "cooktop-induction";
696
+ id: string;
697
+ cooktopLayout?: "induction-2zone" | "induction-4zone" | undefined;
698
+ cooktopBurnersOn?: boolean | undefined;
699
+ cooktopActiveBurners?: number[] | undefined;
700
+ cooktopKnobProgress?: number[] | undefined;
701
+ cooktopShowGrate?: boolean | undefined;
702
+ height?: number | undefined;
703
+ } | {
704
+ type: "pull-out-pantry";
705
+ id: string;
706
+ shelfCount?: number | undefined;
707
+ pantryRackStyle?: "glass" | "wire" | "tray" | undefined;
708
+ height?: number | undefined;
709
+ } | {
710
+ type: "fridge-single";
711
+ id: string;
712
+ height?: number | undefined;
713
+ } | {
714
+ type: "fridge-double";
715
+ id: string;
716
+ height?: number | undefined;
717
+ } | {
718
+ type: "fridge-top-freezer";
719
+ id: string;
720
+ height?: number | undefined;
721
+ } | {
722
+ type: "fridge-bottom-freezer";
723
+ id: string;
724
+ height?: number | undefined;
725
+ } | {
726
+ type: "hood-pyramid";
727
+ id: string;
728
+ height?: number | undefined;
729
+ } | {
730
+ type: "hood-curved-glass";
731
+ id: string;
732
+ height?: number | undefined;
733
+ })[] | undefined;
734
+ barLedge?: {
735
+ edge: "back" | "right" | "left";
736
+ height: number;
737
+ depth: number;
632
738
  } | undefined;
633
739
  } | {
634
740
  object: "node";
635
741
  parentId: string | null;
636
742
  visible: boolean;
637
743
  metadata: import("zod").JSONType;
638
- id: `shelf_${string}`;
639
- type: "shelf";
640
- children: `item_${string}`[];
641
744
  position: [number, number, number];
642
- rotation: [number, number, number];
745
+ rotation: number;
643
746
  width: number;
644
747
  depth: number;
645
- thickness: number;
646
- height: number;
647
- style: "wall-shelf" | "bookshelf" | "open-rack" | "cubby";
648
- rows: number;
649
- columns: number;
650
- withBack: boolean;
651
- withSides: boolean;
652
- withBottom: boolean;
653
- bracketStyle: "minimal" | "industrial" | "hidden";
748
+ carcassHeight: number;
749
+ operationState: number;
750
+ plinthHeight: number;
751
+ toeKickDepth: number;
752
+ boardThickness: number;
753
+ countertopThickness: number;
754
+ countertopOverhang: number;
755
+ countertopBackOverhang: number;
756
+ withFinishedBack: boolean;
757
+ frontThickness: number;
758
+ frontGap: number;
759
+ frontStyle: "slab" | "shaker" | "raised-arch";
760
+ handleStyle: "none" | "bar" | "cutout" | "hole" | "knob";
761
+ handlePosition: "top" | "auto" | "center";
762
+ frontOverlay: "full" | "inset";
763
+ withBottomPanel: boolean;
764
+ showPlinth: boolean;
765
+ withCountertop: boolean;
766
+ id: `cabinet-module_${string}`;
767
+ type: "cabinet-module";
768
+ children: (`cabinet_${string}` | `cabinet-module_${string}`)[];
769
+ cabinetType: "base" | "tall";
770
+ moduleKind: "standard" | "corner-filler";
654
771
  name?: string | undefined;
655
772
  camera?: {
656
773
  position: [number, number, number];
@@ -677,6 +794,110 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
677
794
  } | undefined;
678
795
  } | undefined;
679
796
  materialPreset?: string | undefined;
797
+ slots?: Record<string, string> | undefined;
798
+ stack?: ({
799
+ type: "shelf";
800
+ id: string;
801
+ shelfCount?: number | undefined;
802
+ height?: number | undefined;
803
+ } | {
804
+ type: "drawer";
805
+ id: string;
806
+ drawerCount?: number | undefined;
807
+ height?: number | undefined;
808
+ } | {
809
+ type: "door";
810
+ id: string;
811
+ doorType?: "glass" | "double" | "single-left" | "single-right" | undefined;
812
+ shelfCount?: number | undefined;
813
+ height?: number | undefined;
814
+ } | {
815
+ type: "sink";
816
+ id: string;
817
+ sinkLayout?: "double" | "single" | "double-offset" | undefined;
818
+ height?: number | undefined;
819
+ } | {
820
+ type: "oven";
821
+ id: string;
822
+ height?: number | undefined;
823
+ } | {
824
+ type: "microwave";
825
+ id: string;
826
+ height?: number | undefined;
827
+ } | {
828
+ type: "dishwasher";
829
+ id: string;
830
+ height?: number | undefined;
831
+ } | {
832
+ type: "cooktop-gas";
833
+ id: string;
834
+ cooktopLayout?: "gas-2burner" | "gas-4burner" | "gas-5burner-wok" | "gas-6burner" | undefined;
835
+ cooktopBurnersOn?: boolean | undefined;
836
+ cooktopActiveBurners?: number[] | undefined;
837
+ cooktopKnobProgress?: number[] | undefined;
838
+ cooktopShowGrate?: boolean | undefined;
839
+ height?: number | undefined;
840
+ } | {
841
+ type: "cooktop-induction";
842
+ id: string;
843
+ cooktopLayout?: "induction-2zone" | "induction-4zone" | undefined;
844
+ cooktopBurnersOn?: boolean | undefined;
845
+ cooktopActiveBurners?: number[] | undefined;
846
+ cooktopKnobProgress?: number[] | undefined;
847
+ cooktopShowGrate?: boolean | undefined;
848
+ height?: number | undefined;
849
+ } | {
850
+ type: "pull-out-pantry";
851
+ id: string;
852
+ shelfCount?: number | undefined;
853
+ pantryRackStyle?: "glass" | "wire" | "tray" | undefined;
854
+ height?: number | undefined;
855
+ } | {
856
+ type: "fridge-single";
857
+ id: string;
858
+ height?: number | undefined;
859
+ } | {
860
+ type: "fridge-double";
861
+ id: string;
862
+ height?: number | undefined;
863
+ } | {
864
+ type: "fridge-top-freezer";
865
+ id: string;
866
+ height?: number | undefined;
867
+ } | {
868
+ type: "fridge-bottom-freezer";
869
+ id: string;
870
+ height?: number | undefined;
871
+ } | {
872
+ type: "hood-pyramid";
873
+ id: string;
874
+ height?: number | undefined;
875
+ } | {
876
+ type: "hood-curved-glass";
877
+ id: string;
878
+ height?: number | undefined;
879
+ })[] | undefined;
880
+ openSide?: "right" | "left" | undefined;
881
+ cornerShelf?: boolean | undefined;
882
+ } | {
883
+ object: "node";
884
+ parentId: string | null;
885
+ visible: boolean;
886
+ id: `zone_${string}`;
887
+ type: "zone";
888
+ name: string;
889
+ polygon: [number, number][];
890
+ autoFromWalls: boolean;
891
+ boundaryWallIds: `wall_${string}`[];
892
+ color: string;
893
+ metadata: import("zod").JSONType;
894
+ camera?: {
895
+ position: [number, number, number];
896
+ target: [number, number, number];
897
+ mode: "perspective" | "orthographic";
898
+ fov?: number | undefined;
899
+ zoom?: number | undefined;
900
+ } | undefined;
680
901
  } | {
681
902
  object: "node";
682
903
  parentId: string | null;
@@ -719,40 +940,17 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
719
940
  } | undefined;
720
941
  } | undefined;
721
942
  materialPreset?: string | undefined;
943
+ slots?: Record<string, string> | undefined;
722
944
  } | {
723
945
  object: "node";
724
946
  parentId: string | null;
725
947
  visible: boolean;
726
948
  metadata: import("zod").JSONType;
727
- id: `spawn_${string}`;
728
- type: "spawn";
949
+ id: `roof_${string}`;
950
+ type: "roof";
729
951
  position: [number, number, number];
730
952
  rotation: number;
731
- name?: string | undefined;
732
- camera?: {
733
- position: [number, number, number];
734
- target: [number, number, number];
735
- mode: "perspective" | "orthographic";
736
- fov?: number | undefined;
737
- zoom?: number | undefined;
738
- } | undefined;
739
- } | {
740
- object: "node";
741
- parentId: string | null;
742
- visible: boolean;
743
- metadata: import("zod").JSONType;
744
- id: `sseg_${string}`;
745
- type: "stair-segment";
746
- position: [number, number, number];
747
- rotation: number;
748
- segmentType: "stair" | "landing";
749
- width: number;
750
- length: number;
751
- height: number;
752
- stepCount: number;
753
- attachmentSide: "front" | "left" | "right";
754
- fillToFloor: boolean;
755
- thickness: number;
953
+ children: `rseg_${string}`[];
756
954
  name?: string | undefined;
757
955
  camera?: {
758
956
  position: [number, number, number];
@@ -779,34 +977,106 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
779
977
  } | undefined;
780
978
  } | undefined;
781
979
  materialPreset?: string | undefined;
980
+ topMaterial?: {
981
+ id?: string | undefined;
982
+ preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
983
+ properties?: {
984
+ color: string;
985
+ roughness: number;
986
+ metalness: number;
987
+ opacity: number;
988
+ transparent: boolean;
989
+ side: "front" | "back" | "double";
990
+ } | undefined;
991
+ texture?: {
992
+ url: string;
993
+ repeat?: [number, number] | undefined;
994
+ scale?: number | undefined;
995
+ } | undefined;
996
+ } | undefined;
997
+ topMaterialPreset?: string | undefined;
998
+ edgeMaterial?: {
999
+ id?: string | undefined;
1000
+ preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
1001
+ properties?: {
1002
+ color: string;
1003
+ roughness: number;
1004
+ metalness: number;
1005
+ opacity: number;
1006
+ transparent: boolean;
1007
+ side: "front" | "back" | "double";
1008
+ } | undefined;
1009
+ texture?: {
1010
+ url: string;
1011
+ repeat?: [number, number] | undefined;
1012
+ scale?: number | undefined;
1013
+ } | undefined;
1014
+ } | undefined;
1015
+ edgeMaterialPreset?: string | undefined;
1016
+ wallMaterial?: {
1017
+ id?: string | undefined;
1018
+ preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
1019
+ properties?: {
1020
+ color: string;
1021
+ roughness: number;
1022
+ metalness: number;
1023
+ opacity: number;
1024
+ transparent: boolean;
1025
+ side: "front" | "back" | "double";
1026
+ } | undefined;
1027
+ texture?: {
1028
+ url: string;
1029
+ repeat?: [number, number] | undefined;
1030
+ scale?: number | undefined;
1031
+ } | undefined;
1032
+ } | undefined;
1033
+ wallMaterialPreset?: string | undefined;
782
1034
  } | {
783
1035
  object: "node";
784
1036
  parentId: string | null;
785
1037
  visible: boolean;
786
1038
  metadata: import("zod").JSONType;
787
- id: `stair_${string}`;
788
- type: "stair";
1039
+ id: `rseg_${string}`;
1040
+ type: "roof-segment";
789
1041
  position: [number, number, number];
790
1042
  rotation: number;
791
- stairType: "straight" | "spiral" | "curved";
792
- fromLevelId: string | null;
793
- toLevelId: string | null;
794
- slabOpeningMode: "none" | "destination";
795
- openingOffset: number;
1043
+ roofType: "flat" | "hip" | "gable" | "shed" | "gambrel" | "dutch" | "mansard";
796
1044
  width: number;
797
- totalRise: number;
798
- stepCount: number;
799
- thickness: number;
800
- fillToFloor: boolean;
801
- innerRadius: number;
802
- sweepAngle: number;
803
- topLandingMode: "none" | "integrated";
804
- topLandingDepth: number;
805
- showCenterColumn: boolean;
806
- showStepSupports: boolean;
807
- railingMode: "none" | "left" | "right" | "both";
808
- railingHeight: number;
809
- children: `sseg_${string}`[];
1045
+ depth: number;
1046
+ trim: {
1047
+ left: number;
1048
+ right: number;
1049
+ front: number;
1050
+ back: number;
1051
+ frontLeft: number;
1052
+ frontRight: number;
1053
+ backLeft: number;
1054
+ backRight: number;
1055
+ frontLeftX: number;
1056
+ frontLeftZ: number;
1057
+ frontRightX: number;
1058
+ frontRightZ: number;
1059
+ backLeftX: number;
1060
+ backLeftZ: number;
1061
+ backRightX: number;
1062
+ backRightZ: number;
1063
+ };
1064
+ wallHeight: number;
1065
+ pitch: number;
1066
+ wallThickness: number;
1067
+ deckThickness: number;
1068
+ overhang: number;
1069
+ shingleThickness: number;
1070
+ gambrelLowerWidthRatio: number;
1071
+ gambrelLowerHeightRatio: number;
1072
+ mansardSteepWidthRatio: number;
1073
+ mansardSteepHeightRatio: number;
1074
+ dutchHipWidthRatio: number;
1075
+ dutchHipHeightRatio: number;
1076
+ dutchWaistLengthRatio: number;
1077
+ dutchGabletRake: number;
1078
+ dutchTopRakeThickness: number;
1079
+ children: string[];
810
1080
  name?: string | undefined;
811
1081
  camera?: {
812
1082
  position: [number, number, number];
@@ -833,7 +1103,7 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
833
1103
  } | undefined;
834
1104
  } | undefined;
835
1105
  materialPreset?: string | undefined;
836
- railingMaterial?: {
1106
+ topMaterial?: {
837
1107
  id?: string | undefined;
838
1108
  preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
839
1109
  properties?: {
@@ -850,8 +1120,8 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
850
1120
  scale?: number | undefined;
851
1121
  } | undefined;
852
1122
  } | undefined;
853
- railingMaterialPreset?: string | undefined;
854
- treadMaterial?: {
1123
+ topMaterialPreset?: string | undefined;
1124
+ edgeMaterial?: {
855
1125
  id?: string | undefined;
856
1126
  preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
857
1127
  properties?: {
@@ -868,8 +1138,8 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
868
1138
  scale?: number | undefined;
869
1139
  } | undefined;
870
1140
  } | undefined;
871
- treadMaterialPreset?: string | undefined;
872
- sideMaterial?: {
1141
+ edgeMaterialPreset?: string | undefined;
1142
+ wallMaterial?: {
873
1143
  id?: string | undefined;
874
1144
  preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
875
1145
  properties?: {
@@ -886,54 +1156,28 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
886
1156
  scale?: number | undefined;
887
1157
  } | undefined;
888
1158
  } | undefined;
889
- sideMaterialPreset?: string | undefined;
1159
+ wallMaterialPreset?: string | undefined;
890
1160
  } | {
891
1161
  object: "node";
892
1162
  parentId: string | null;
893
1163
  visible: boolean;
894
1164
  metadata: import("zod").JSONType;
895
- id: `door_${string}`;
896
- type: "door";
1165
+ id: `shelf_${string}`;
1166
+ type: "shelf";
1167
+ children: `item_${string}`[];
897
1168
  position: [number, number, number];
898
1169
  rotation: [number, number, number];
899
1170
  width: number;
1171
+ depth: number;
1172
+ thickness: number;
900
1173
  height: number;
901
- doorCategory: "interior" | "garage";
902
- doorType: "double" | "hinged" | "french" | "folding" | "pocket" | "barn" | "sliding" | "garage-sectional" | "garage-rollup" | "garage-tiltup";
903
- leafCount: 4 | 1 | 2 | 3;
904
- operationState: number;
905
- slideDirection: "left" | "right";
906
- trackStyle: "visible" | "none" | "pocket" | "overhead";
907
- garagePanelCount: number;
908
- openingKind: "door" | "opening";
909
- openingShape: "rectangle" | "rounded" | "arch";
910
- openingRadiusMode: "all" | "individual";
911
- openingTopRadii: [number, number];
912
- cornerRadius: number;
913
- archHeight: number;
914
- openingRevealRadius: number;
915
- frameThickness: number;
916
- frameDepth: number;
917
- threshold: boolean;
918
- thresholdHeight: number;
919
- hingesSide: "left" | "right";
920
- swingDirection: "inward" | "outward";
921
- swingAngle: number;
922
- segments: {
923
- type: "glass" | "panel" | "empty";
924
- heightRatio: number;
925
- columnRatios: number[];
926
- dividerThickness: number;
927
- panelDepth: number;
928
- panelInset: number;
929
- }[];
930
- handle: boolean;
931
- handleHeight: number;
932
- handleSide: "left" | "right";
933
- contentPadding: [number, number];
934
- doorCloser: boolean;
935
- panicBar: boolean;
936
- panicBarHeight: number;
1174
+ style: "wall-shelf" | "bookshelf" | "open-rack" | "cubby";
1175
+ rows: number;
1176
+ columns: number;
1177
+ withBack: boolean;
1178
+ withSides: boolean;
1179
+ withBottom: boolean;
1180
+ bracketStyle: "minimal" | "industrial" | "hidden";
937
1181
  name?: string | undefined;
938
1182
  camera?: {
939
1183
  position: [number, number, number];
@@ -959,40 +1203,36 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
959
1203
  scale?: number | undefined;
960
1204
  } | undefined;
961
1205
  } | undefined;
962
- side?: "front" | "back" | undefined;
963
- wallId?: string | undefined;
1206
+ materialPreset?: string | undefined;
1207
+ slots?: Record<string, string> | undefined;
964
1208
  } | {
965
1209
  object: "node";
966
1210
  parentId: string | null;
967
1211
  visible: boolean;
968
1212
  metadata: import("zod").JSONType;
969
- id: `window_${string}`;
970
- type: "window";
1213
+ id: `stair_${string}`;
1214
+ type: "stair";
971
1215
  position: [number, number, number];
972
- rotation: [number, number, number];
1216
+ rotation: number;
1217
+ stairType: "straight" | "spiral" | "curved";
1218
+ fromLevelId: string | null;
1219
+ toLevelId: string | null;
1220
+ slabOpeningMode: "none" | "destination";
1221
+ openingOffset: number;
973
1222
  width: number;
974
- height: number;
975
- openingKind: "window" | "opening";
976
- windowType: "sliding" | "fixed" | "casement" | "awning" | "hopper" | "single-hung" | "double-hung" | "bay" | "bow" | "louvered";
977
- operationState: number;
978
- awningDirection: "up" | "down";
979
- casementStyle: "french" | "single";
980
- hingesSide: "left" | "right";
981
- openingShape: "rectangle" | "rounded" | "arch";
982
- openingRadiusMode: "all" | "individual";
983
- openingCornerRadii: [number, number, number, number];
984
- cornerRadius: number;
985
- archHeight: number;
986
- openingRevealRadius: number;
987
- frameThickness: number;
988
- frameDepth: number;
989
- columnRatios: number[];
990
- rowRatios: number[];
991
- columnDividerThickness: number;
992
- rowDividerThickness: number;
993
- sill: boolean;
994
- sillDepth: number;
995
- sillThickness: number;
1223
+ totalRise: number;
1224
+ stepCount: number;
1225
+ thickness: number;
1226
+ fillToFloor: boolean;
1227
+ innerRadius: number;
1228
+ sweepAngle: number;
1229
+ topLandingMode: "none" | "integrated";
1230
+ topLandingDepth: number;
1231
+ showCenterColumn: boolean;
1232
+ showStepSupports: boolean;
1233
+ railingMode: "right" | "left" | "none" | "both";
1234
+ railingHeight: number;
1235
+ children: `sseg_${string}`[];
996
1236
  name?: string | undefined;
997
1237
  camera?: {
998
1238
  position: [number, number, number];
@@ -1018,29 +1258,8 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1018
1258
  scale?: number | undefined;
1019
1259
  } | undefined;
1020
1260
  } | undefined;
1021
- side?: "front" | "back" | undefined;
1022
- wallId?: string | undefined;
1023
- } | {
1024
- object: "node";
1025
- parentId: string | null;
1026
- visible: boolean;
1027
- metadata: import("zod").JSONType;
1028
- id: `wall_${string}`;
1029
- type: "wall";
1030
- children: (`item_${string}` | `door_${string}` | `window_${string}`)[];
1031
- start: [number, number];
1032
- end: [number, number];
1033
- frontSide: "unknown" | "interior" | "exterior";
1034
- backSide: "unknown" | "interior" | "exterior";
1035
- name?: string | undefined;
1036
- camera?: {
1037
- position: [number, number, number];
1038
- target: [number, number, number];
1039
- mode: "perspective" | "orthographic";
1040
- fov?: number | undefined;
1041
- zoom?: number | undefined;
1042
- } | undefined;
1043
- material?: {
1261
+ materialPreset?: string | undefined;
1262
+ railingMaterial?: {
1044
1263
  id?: string | undefined;
1045
1264
  preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
1046
1265
  properties?: {
@@ -1057,8 +1276,8 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1057
1276
  scale?: number | undefined;
1058
1277
  } | undefined;
1059
1278
  } | undefined;
1060
- materialPreset?: string | undefined;
1061
- interiorMaterial?: {
1279
+ railingMaterialPreset?: string | undefined;
1280
+ treadMaterial?: {
1062
1281
  id?: string | undefined;
1063
1282
  preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
1064
1283
  properties?: {
@@ -1075,8 +1294,8 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1075
1294
  scale?: number | undefined;
1076
1295
  } | undefined;
1077
1296
  } | undefined;
1078
- interiorMaterialPreset?: string | undefined;
1079
- exteriorMaterial?: {
1297
+ treadMaterialPreset?: string | undefined;
1298
+ sideMaterial?: {
1080
1299
  id?: string | undefined;
1081
1300
  preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
1082
1301
  properties?: {
@@ -1093,20 +1312,26 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1093
1312
  scale?: number | undefined;
1094
1313
  } | undefined;
1095
1314
  } | undefined;
1096
- exteriorMaterialPreset?: string | undefined;
1097
- thickness?: number | undefined;
1098
- height?: number | undefined;
1099
- curveOffset?: number | undefined;
1315
+ sideMaterialPreset?: string | undefined;
1316
+ slots?: Record<string, string> | undefined;
1100
1317
  } | {
1101
1318
  object: "node";
1102
1319
  parentId: string | null;
1103
1320
  visible: boolean;
1104
- id: `zone_${string}`;
1105
- type: "zone";
1106
- name: string;
1107
- polygon: [number, number][];
1108
- color: string;
1109
1321
  metadata: import("zod").JSONType;
1322
+ id: `sseg_${string}`;
1323
+ type: "stair-segment";
1324
+ position: [number, number, number];
1325
+ rotation: number;
1326
+ segmentType: "stair" | "landing";
1327
+ width: number;
1328
+ length: number;
1329
+ height: number;
1330
+ stepCount: number;
1331
+ attachmentSide: "front" | "right" | "left";
1332
+ fillToFloor: boolean;
1333
+ thickness: number;
1334
+ name?: string | undefined;
1110
1335
  camera?: {
1111
1336
  position: [number, number, number];
1112
1337
  target: [number, number, number];
@@ -1114,15 +1339,36 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1114
1339
  fov?: number | undefined;
1115
1340
  zoom?: number | undefined;
1116
1341
  } | undefined;
1342
+ material?: {
1343
+ id?: string | undefined;
1344
+ preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
1345
+ properties?: {
1346
+ color: string;
1347
+ roughness: number;
1348
+ metalness: number;
1349
+ opacity: number;
1350
+ transparent: boolean;
1351
+ side: "front" | "back" | "double";
1352
+ } | undefined;
1353
+ texture?: {
1354
+ url: string;
1355
+ repeat?: [number, number] | undefined;
1356
+ scale?: number | undefined;
1357
+ } | undefined;
1358
+ } | undefined;
1359
+ materialPreset?: string | undefined;
1117
1360
  } | {
1118
1361
  object: "node";
1119
1362
  parentId: string | null;
1120
1363
  visible: boolean;
1121
1364
  metadata: import("zod").JSONType;
1122
- id: `level_${string}`;
1123
- type: "level";
1124
- children: (`item_${string}` | `ceiling_${string}` | `column_${string}` | `fence_${string}` | `guide_${string}` | `roof_${string}` | `scan_${string}` | `shelf_${string}` | `slab_${string}` | `spawn_${string}` | `stair_${string}` | `wall_${string}` | `zone_${string}`)[];
1125
- level: number;
1365
+ id: `scan_${string}`;
1366
+ type: "scan";
1367
+ url: string;
1368
+ position: [number, number, number];
1369
+ rotation: [number, number, number];
1370
+ scale: number;
1371
+ opacity: number;
1126
1372
  name?: string | undefined;
1127
1373
  camera?: {
1128
1374
  position: [number, number, number];
@@ -1136,11 +1382,89 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1136
1382
  parentId: string | null;
1137
1383
  visible: boolean;
1138
1384
  metadata: import("zod").JSONType;
1139
- id: `building_${string}`;
1140
- type: "building";
1141
- children: (`elevator_${string}` | `level_${string}`)[];
1142
- position: [number, number, number];
1143
- rotation: [number, number, number];
1385
+ id: `measurement_${string}`;
1386
+ type: "measurement";
1387
+ measurement: {
1388
+ kind: "distance";
1389
+ points: [[number, number, number] | {
1390
+ kind: "feature";
1391
+ reference: {
1392
+ nodeId: string;
1393
+ featureId: string;
1394
+ parameters?: Record<string, string | number | boolean> | undefined;
1395
+ };
1396
+ fallback: [number, number, number];
1397
+ }, [number, number, number] | {
1398
+ kind: "feature";
1399
+ reference: {
1400
+ nodeId: string;
1401
+ featureId: string;
1402
+ parameters?: Record<string, string | number | boolean> | undefined;
1403
+ };
1404
+ fallback: [number, number, number];
1405
+ }];
1406
+ } | {
1407
+ kind: "angle";
1408
+ points: [[number, number, number] | {
1409
+ kind: "feature";
1410
+ reference: {
1411
+ nodeId: string;
1412
+ featureId: string;
1413
+ parameters?: Record<string, string | number | boolean> | undefined;
1414
+ };
1415
+ fallback: [number, number, number];
1416
+ }, [number, number, number] | {
1417
+ kind: "feature";
1418
+ reference: {
1419
+ nodeId: string;
1420
+ featureId: string;
1421
+ parameters?: Record<string, string | number | boolean> | undefined;
1422
+ };
1423
+ fallback: [number, number, number];
1424
+ }, [number, number, number] | {
1425
+ kind: "feature";
1426
+ reference: {
1427
+ nodeId: string;
1428
+ featureId: string;
1429
+ parameters?: Record<string, string | number | boolean> | undefined;
1430
+ };
1431
+ fallback: [number, number, number];
1432
+ }];
1433
+ } | {
1434
+ kind: "area";
1435
+ base: ([number, number, number] | {
1436
+ kind: "feature";
1437
+ reference: {
1438
+ nodeId: string;
1439
+ featureId: string;
1440
+ parameters?: Record<string, string | number | boolean> | undefined;
1441
+ };
1442
+ fallback: [number, number, number];
1443
+ })[];
1444
+ } | {
1445
+ kind: "perimeter";
1446
+ base: ([number, number, number] | {
1447
+ kind: "feature";
1448
+ reference: {
1449
+ nodeId: string;
1450
+ featureId: string;
1451
+ parameters?: Record<string, string | number | boolean> | undefined;
1452
+ };
1453
+ fallback: [number, number, number];
1454
+ })[];
1455
+ } | {
1456
+ kind: "volume";
1457
+ base: ([number, number, number] | {
1458
+ kind: "feature";
1459
+ reference: {
1460
+ nodeId: string;
1461
+ featureId: string;
1462
+ parameters?: Record<string, string | number | boolean> | undefined;
1463
+ };
1464
+ fallback: [number, number, number];
1465
+ })[];
1466
+ extrusion: [number, number, number];
1467
+ };
1144
1468
  name?: string | undefined;
1145
1469
  camera?: {
1146
1470
  position: [number, number, number];
@@ -1154,44 +1478,50 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1154
1478
  parentId: string | null;
1155
1479
  visible: boolean;
1156
1480
  metadata: import("zod").JSONType;
1157
- id: `chimney_${string}`;
1158
- type: "chimney";
1481
+ id: `spawn_${string}`;
1482
+ type: "spawn";
1159
1483
  position: [number, number, number];
1160
1484
  rotation: number;
1161
- bodyShape: "round" | "square";
1162
- bodyHollowDepth: number;
1163
- bodyHollowMargin: number;
1485
+ name?: string | undefined;
1486
+ camera?: {
1487
+ position: [number, number, number];
1488
+ target: [number, number, number];
1489
+ mode: "perspective" | "orthographic";
1490
+ fov?: number | undefined;
1491
+ zoom?: number | undefined;
1492
+ } | undefined;
1493
+ } | {
1494
+ object: "node";
1495
+ parentId: string | null;
1496
+ visible: boolean;
1497
+ metadata: import("zod").JSONType;
1498
+ id: `window_${string}`;
1499
+ type: "window";
1500
+ position: [number, number, number];
1501
+ rotation: [number, number, number];
1164
1502
  width: number;
1165
- depth: number;
1166
- heightAboveRidge: number;
1167
- cutoutOffset: number;
1168
- cornerBevel: number;
1169
- cap: boolean;
1170
- capShape: "flat" | "none" | "stepped" | "sloped";
1171
- capOverhang: number;
1172
- capThickness: number;
1173
- flueCount: number;
1174
- flueShape: "round" | "square";
1175
- flueHeight: number;
1176
- flueDiameter: number;
1177
- flueSpacing: number;
1178
- flueWallThickness: number;
1179
- shoulderStyle: "tapered" | "none" | "corbeled";
1180
- shoulderHeight: number;
1181
- shoulderExtent: number;
1182
- bandStyle: "double" | "none" | "single";
1183
- bandHeight: number;
1184
- bandExtent: number;
1185
- bandOffset: number;
1186
- cricketStyle: "none" | "simple";
1187
- cricketLength: number;
1188
- cricketHeight: number;
1189
- cricketSide: "front" | "back";
1190
- panelStyle: "rectangular" | "none";
1191
- panelDepth: number;
1192
- panelHeight: number;
1193
- panelOffsetTop: number;
1194
- panelMargin: number;
1503
+ height: number;
1504
+ openingKind: "window" | "opening";
1505
+ windowType: "sliding" | "fixed" | "casement" | "awning" | "hopper" | "single-hung" | "double-hung" | "bay" | "bow" | "louvered";
1506
+ operationState: number;
1507
+ awningDirection: "up" | "down";
1508
+ casementStyle: "french" | "single";
1509
+ hingesSide: "right" | "left";
1510
+ openingShape: "rectangle" | "rounded" | "arch";
1511
+ openingRadiusMode: "all" | "individual";
1512
+ openingCornerRadii: [number, number, number, number];
1513
+ cornerRadius: number;
1514
+ archHeight: number;
1515
+ openingRevealRadius: number;
1516
+ frameThickness: number;
1517
+ frameDepth: number;
1518
+ columnRatios: number[];
1519
+ rowRatios: number[];
1520
+ columnDividerThickness: number;
1521
+ rowDividerThickness: number;
1522
+ sill: boolean;
1523
+ sillDepth: number;
1524
+ sillThickness: number;
1195
1525
  name?: string | undefined;
1196
1526
  camera?: {
1197
1527
  position: [number, number, number];
@@ -1217,41 +1547,58 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1217
1547
  scale?: number | undefined;
1218
1548
  } | undefined;
1219
1549
  } | undefined;
1220
- materialPreset?: string | undefined;
1221
- topMaterial?: {
1222
- id?: string | undefined;
1223
- preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
1224
- properties?: {
1225
- color: string;
1226
- roughness: number;
1227
- metalness: number;
1228
- opacity: number;
1229
- transparent: boolean;
1230
- side: "front" | "back" | "double";
1231
- } | undefined;
1232
- texture?: {
1233
- url: string;
1234
- repeat?: [number, number] | undefined;
1235
- scale?: number | undefined;
1236
- } | undefined;
1237
- } | undefined;
1238
- topMaterialPreset?: string | undefined;
1550
+ slots?: Record<string, string> | undefined;
1551
+ side?: "front" | "back" | undefined;
1552
+ wallId?: string | undefined;
1239
1553
  roofSegmentId?: string | undefined;
1554
+ roofFace?: "front" | "back" | "right" | "left" | undefined;
1240
1555
  } | {
1241
1556
  object: "node";
1242
1557
  parentId: string | null;
1243
1558
  visible: boolean;
1244
1559
  metadata: import("zod").JSONType;
1245
- id: `cupola_${string}`;
1246
- type: "cupola";
1247
- materialPreset: string;
1560
+ id: `door_${string}`;
1561
+ type: "door";
1248
1562
  position: [number, number, number];
1249
- rotation: number;
1563
+ rotation: [number, number, number];
1250
1564
  width: number;
1251
- depth: number;
1252
1565
  height: number;
1253
- roofStyle: "dome" | "pyramid";
1254
- finial: boolean;
1566
+ doorCategory: "interior" | "garage";
1567
+ doorType: "double" | "hinged" | "french" | "folding" | "pocket" | "barn" | "sliding" | "garage-sectional" | "garage-rollup" | "garage-tiltup";
1568
+ leafCount: 4 | 1 | 2 | 3;
1569
+ operationState: number;
1570
+ slideDirection: "right" | "left";
1571
+ trackStyle: "visible" | "none" | "pocket" | "overhead";
1572
+ garagePanelCount: number;
1573
+ openingKind: "door" | "opening";
1574
+ openingShape: "rectangle" | "rounded" | "arch";
1575
+ openingRadiusMode: "all" | "individual";
1576
+ openingTopRadii: [number, number];
1577
+ cornerRadius: number;
1578
+ archHeight: number;
1579
+ openingRevealRadius: number;
1580
+ frameThickness: number;
1581
+ frameDepth: number;
1582
+ threshold: boolean;
1583
+ thresholdHeight: number;
1584
+ hingesSide: "right" | "left";
1585
+ swingDirection: "inward" | "outward";
1586
+ swingAngle: number;
1587
+ segments: {
1588
+ type: "glass" | "panel" | "empty";
1589
+ heightRatio: number;
1590
+ columnRatios: number[];
1591
+ dividerThickness: number;
1592
+ panelDepth: number;
1593
+ panelInset: number;
1594
+ }[];
1595
+ handle: boolean;
1596
+ handleHeight: number;
1597
+ handleSide: "right" | "left";
1598
+ contentPadding: [number, number];
1599
+ doorCloser: boolean;
1600
+ panicBar: boolean;
1601
+ panicBarHeight: number;
1255
1602
  name?: string | undefined;
1256
1603
  camera?: {
1257
1604
  position: [number, number, number];
@@ -1277,37 +1624,25 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1277
1624
  scale?: number | undefined;
1278
1625
  } | undefined;
1279
1626
  } | undefined;
1627
+ slots?: Record<string, string> | undefined;
1628
+ side?: "front" | "back" | undefined;
1629
+ wallId?: string | undefined;
1280
1630
  roofSegmentId?: string | undefined;
1631
+ roofFace?: "front" | "back" | "right" | "left" | undefined;
1281
1632
  } | {
1282
1633
  object: "node";
1283
1634
  parentId: string | null;
1284
1635
  visible: boolean;
1285
1636
  metadata: import("zod").JSONType;
1286
- id: `dormer_${string}`;
1287
- type: "dormer";
1637
+ id: `rvent_${string}`;
1638
+ type: "ridge-vent";
1288
1639
  position: [number, number, number];
1289
1640
  rotation: number;
1641
+ length: number;
1290
1642
  width: number;
1291
- depth: number;
1292
1643
  height: number;
1293
- roofType: "flat" | "hip" | "gable" | "shed" | "gambrel" | "dutch" | "mansard";
1294
- roofHeight: number;
1295
- wallSkirtHeight: number;
1296
- windowWidth: number;
1297
- windowHeight: number;
1298
- windowOffsetX: number;
1299
- windowOffsetY: number;
1300
- windowFrameThickness: number;
1301
- windowFrameDepth: number;
1302
- windowColumns: number;
1303
- windowRows: number;
1304
- windowDividerThickness: number;
1305
- windowShape: "rectangle" | "rounded" | "arch";
1306
- windowArchHeight: number;
1307
- windowCornerRadii: [number, number, number, number];
1308
- windowSill: boolean;
1309
- windowSillDepth: number;
1310
- windowSillThickness: number;
1644
+ style: "metal" | "standard" | "shingled";
1645
+ endCaps: boolean;
1311
1646
  name?: string | undefined;
1312
1647
  camera?: {
1313
1648
  position: [number, number, number];
@@ -1334,7 +1669,33 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1334
1669
  } | undefined;
1335
1670
  } | undefined;
1336
1671
  materialPreset?: string | undefined;
1337
- topMaterial?: {
1672
+ roofSegmentId?: string | undefined;
1673
+ } | {
1674
+ object: "node";
1675
+ parentId: string | null;
1676
+ visible: boolean;
1677
+ metadata: import("zod").JSONType;
1678
+ id: `tvent_${string}`;
1679
+ type: "turbine-vent";
1680
+ materialPreset: string;
1681
+ position: [number, number, number];
1682
+ rotation: number;
1683
+ diameter: number;
1684
+ height: number;
1685
+ neckHeight: number;
1686
+ baseOverhang: number;
1687
+ vaneCount: number;
1688
+ spinSpeed: number;
1689
+ style: "globe" | "cylinder";
1690
+ name?: string | undefined;
1691
+ camera?: {
1692
+ position: [number, number, number];
1693
+ target: [number, number, number];
1694
+ mode: "perspective" | "orthographic";
1695
+ fov?: number | undefined;
1696
+ zoom?: number | undefined;
1697
+ } | undefined;
1698
+ material?: {
1338
1699
  id?: string | undefined;
1339
1700
  preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
1340
1701
  properties?: {
@@ -1351,59 +1712,22 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1351
1712
  scale?: number | undefined;
1352
1713
  } | undefined;
1353
1714
  } | undefined;
1354
- topMaterialPreset?: string | undefined;
1355
- sideMaterial?: {
1356
- id?: string | undefined;
1357
- preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
1358
- properties?: {
1359
- color: string;
1360
- roughness: number;
1361
- metalness: number;
1362
- opacity: number;
1363
- transparent: boolean;
1364
- side: "front" | "back" | "double";
1365
- } | undefined;
1366
- texture?: {
1367
- url: string;
1368
- repeat?: [number, number] | undefined;
1369
- scale?: number | undefined;
1370
- } | undefined;
1371
- } | undefined;
1372
- sideMaterialPreset?: string | undefined;
1373
- wallMaterial?: {
1374
- id?: string | undefined;
1375
- preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
1376
- properties?: {
1377
- color: string;
1378
- roughness: number;
1379
- metalness: number;
1380
- opacity: number;
1381
- transparent: boolean;
1382
- side: "front" | "back" | "double";
1383
- } | undefined;
1384
- texture?: {
1385
- url: string;
1386
- repeat?: [number, number] | undefined;
1387
- scale?: number | undefined;
1388
- } | undefined;
1389
- } | undefined;
1390
- wallMaterialPreset?: string | undefined;
1391
1715
  roofSegmentId?: string | undefined;
1392
1716
  } | {
1393
1717
  object: "node";
1394
1718
  parentId: string | null;
1395
1719
  visible: boolean;
1396
1720
  metadata: import("zod").JSONType;
1397
- id: `downspout_${string}`;
1398
- type: "downspout";
1721
+ id: `cupola_${string}`;
1722
+ type: "cupola";
1399
1723
  materialPreset: string;
1400
- length: number;
1401
- diameter: number;
1402
- standoff: number;
1403
- shape: "round" | "auto" | "rect";
1404
- strapStyle: "none" | "band";
1405
- strapSpacing: number;
1406
- terminal: "straight" | "splash" | "kickout";
1724
+ position: [number, number, number];
1725
+ rotation: number;
1726
+ width: number;
1727
+ depth: number;
1728
+ height: number;
1729
+ roofStyle: "dome" | "pyramid";
1730
+ finial: boolean;
1407
1731
  name?: string | undefined;
1408
1732
  camera?: {
1409
1733
  position: [number, number, number];
@@ -1429,8 +1753,7 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1429
1753
  scale?: number | undefined;
1430
1754
  } | undefined;
1431
1755
  } | undefined;
1432
- gutterId?: string | undefined;
1433
- outletId?: string | undefined;
1756
+ roofSegmentId?: string | undefined;
1434
1757
  } | {
1435
1758
  object: "node";
1436
1759
  parentId: string | null;
@@ -1527,16 +1850,44 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1527
1850
  parentId: string | null;
1528
1851
  visible: boolean;
1529
1852
  metadata: import("zod").JSONType;
1530
- id: `rvent_${string}`;
1531
- type: "ridge-vent";
1532
- materialPreset: string;
1853
+ id: `chimney_${string}`;
1854
+ type: "chimney";
1533
1855
  position: [number, number, number];
1534
1856
  rotation: number;
1535
- length: number;
1857
+ bodyShape: "round" | "square";
1858
+ bodyHollowDepth: number;
1859
+ bodyHollowMargin: number;
1536
1860
  width: number;
1537
- height: number;
1538
- style: "metal" | "standard" | "shingled";
1539
- endCaps: boolean;
1861
+ depth: number;
1862
+ heightAboveRidge: number;
1863
+ cutoutOffset: number;
1864
+ cornerBevel: number;
1865
+ cap: boolean;
1866
+ capShape: "flat" | "none" | "stepped" | "sloped";
1867
+ capOverhang: number;
1868
+ capThickness: number;
1869
+ flueCount: number;
1870
+ flueShape: "round" | "square";
1871
+ flueHeight: number;
1872
+ flueDiameter: number;
1873
+ flueSpacing: number;
1874
+ flueWallThickness: number;
1875
+ shoulderStyle: "tapered" | "none" | "corbeled";
1876
+ shoulderHeight: number;
1877
+ shoulderExtent: number;
1878
+ bandStyle: "double" | "none" | "single";
1879
+ bandHeight: number;
1880
+ bandExtent: number;
1881
+ bandOffset: number;
1882
+ cricketStyle: "none" | "simple";
1883
+ cricketLength: number;
1884
+ cricketHeight: number;
1885
+ cricketSide: "front" | "back";
1886
+ panelStyle: "rectangular" | "none";
1887
+ panelDepth: number;
1888
+ panelHeight: number;
1889
+ panelOffsetTop: number;
1890
+ panelMargin: number;
1540
1891
  name?: string | undefined;
1541
1892
  camera?: {
1542
1893
  position: [number, number, number];
@@ -1562,19 +1913,46 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1562
1913
  scale?: number | undefined;
1563
1914
  } | undefined;
1564
1915
  } | undefined;
1916
+ materialPreset?: string | undefined;
1917
+ topMaterial?: {
1918
+ id?: string | undefined;
1919
+ preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
1920
+ properties?: {
1921
+ color: string;
1922
+ roughness: number;
1923
+ metalness: number;
1924
+ opacity: number;
1925
+ transparent: boolean;
1926
+ side: "front" | "back" | "double";
1927
+ } | undefined;
1928
+ texture?: {
1929
+ url: string;
1930
+ repeat?: [number, number] | undefined;
1931
+ scale?: number | undefined;
1932
+ } | undefined;
1933
+ } | undefined;
1934
+ topMaterialPreset?: string | undefined;
1565
1935
  roofSegmentId?: string | undefined;
1566
1936
  } | {
1567
1937
  object: "node";
1568
1938
  parentId: string | null;
1569
1939
  visible: boolean;
1570
1940
  metadata: import("zod").JSONType;
1571
- id: `site_${string}`;
1572
- type: "site";
1573
- polygon: {
1574
- type: "polygon";
1575
- points: [number, number][];
1576
- };
1577
- children: string[];
1941
+ id: `solarpanel_${string}`;
1942
+ type: "solar-panel";
1943
+ position: [number, number, number];
1944
+ rotation: number;
1945
+ rows: number;
1946
+ columns: number;
1947
+ panelWidth: number;
1948
+ panelHeight: number;
1949
+ gapX: number;
1950
+ gapY: number;
1951
+ mountingType: "flush" | "tilted";
1952
+ tiltAngle: number;
1953
+ standoffHeight: number;
1954
+ frameThickness: number;
1955
+ frameDepth: number;
1578
1956
  name?: string | undefined;
1579
1957
  camera?: {
1580
1958
  position: [number, number, number];
@@ -1583,6 +1961,45 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1583
1961
  fov?: number | undefined;
1584
1962
  zoom?: number | undefined;
1585
1963
  } | undefined;
1964
+ material?: {
1965
+ id?: string | undefined;
1966
+ preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
1967
+ properties?: {
1968
+ color: string;
1969
+ roughness: number;
1970
+ metalness: number;
1971
+ opacity: number;
1972
+ transparent: boolean;
1973
+ side: "front" | "back" | "double";
1974
+ } | undefined;
1975
+ texture?: {
1976
+ url: string;
1977
+ repeat?: [number, number] | undefined;
1978
+ scale?: number | undefined;
1979
+ } | undefined;
1980
+ } | undefined;
1981
+ materialPreset?: string | undefined;
1982
+ panelMaterial?: {
1983
+ id?: string | undefined;
1984
+ preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
1985
+ properties?: {
1986
+ color: string;
1987
+ roughness: number;
1988
+ metalness: number;
1989
+ opacity: number;
1990
+ transparent: boolean;
1991
+ side: "front" | "back" | "double";
1992
+ } | undefined;
1993
+ texture?: {
1994
+ url: string;
1995
+ repeat?: [number, number] | undefined;
1996
+ scale?: number | undefined;
1997
+ } | undefined;
1998
+ } | undefined;
1999
+ panelMaterialPreset?: string | undefined;
2000
+ panelTypePreset?: "residential" | "residential-large" | "compact" | "frameless" | undefined;
2001
+ roofSegmentId?: string | undefined;
2002
+ surfaceNormal?: [number, number, number] | undefined;
1586
2003
  } | {
1587
2004
  object: "node";
1588
2005
  parentId: string | null;
@@ -1601,11 +2018,11 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1601
2018
  lanternHeight: number;
1602
2019
  lanternTopScale: number;
1603
2020
  openingAngle: number;
1604
- openingSide: "top" | "bottom" | "left" | "right";
2021
+ openingSide: "right" | "left" | "top" | "bottom";
1605
2022
  operationState: number;
1606
2023
  motorHousing: boolean;
1607
2024
  slideFraction: number;
1608
- slideDirection: "x" | "z";
2025
+ slideDirection: "z" | "x";
1609
2026
  trackWidth: number;
1610
2027
  motorHousingSize: number;
1611
2028
  curb: boolean;
@@ -1662,21 +2079,31 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1662
2079
  parentId: string | null;
1663
2080
  visible: boolean;
1664
2081
  metadata: import("zod").JSONType;
1665
- id: `solarpanel_${string}`;
1666
- type: "solar-panel";
2082
+ id: `dormer_${string}`;
2083
+ type: "dormer";
1667
2084
  position: [number, number, number];
1668
2085
  rotation: number;
1669
- rows: number;
1670
- columns: number;
1671
- panelWidth: number;
1672
- panelHeight: number;
1673
- gapX: number;
1674
- gapY: number;
1675
- mountingType: "flush" | "tilted";
1676
- tiltAngle: number;
1677
- standoffHeight: number;
1678
- frameThickness: number;
1679
- frameDepth: number;
2086
+ width: number;
2087
+ depth: number;
2088
+ height: number;
2089
+ roofType: "flat" | "hip" | "gable" | "shed" | "gambrel" | "dutch" | "mansard";
2090
+ roofHeight: number;
2091
+ wallSkirtHeight: number;
2092
+ windowWidth: number;
2093
+ windowHeight: number;
2094
+ windowOffsetX: number;
2095
+ windowOffsetY: number;
2096
+ windowFrameThickness: number;
2097
+ windowFrameDepth: number;
2098
+ windowColumns: number;
2099
+ windowRows: number;
2100
+ windowDividerThickness: number;
2101
+ windowShape: "rectangle" | "rounded" | "arch";
2102
+ windowArchHeight: number;
2103
+ windowCornerRadii: [number, number, number, number];
2104
+ windowSill: boolean;
2105
+ windowSillDepth: number;
2106
+ windowSillThickness: number;
1680
2107
  name?: string | undefined;
1681
2108
  camera?: {
1682
2109
  position: [number, number, number];
@@ -1703,7 +2130,7 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1703
2130
  } | undefined;
1704
2131
  } | undefined;
1705
2132
  materialPreset?: string | undefined;
1706
- panelMaterial?: {
2133
+ topMaterial?: {
1707
2134
  id?: string | undefined;
1708
2135
  preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
1709
2136
  properties?: {
@@ -1720,27 +2147,59 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1720
2147
  scale?: number | undefined;
1721
2148
  } | undefined;
1722
2149
  } | undefined;
1723
- panelMaterialPreset?: string | undefined;
1724
- panelTypePreset?: "residential" | "residential-large" | "compact" | "frameless" | undefined;
2150
+ topMaterialPreset?: string | undefined;
2151
+ sideMaterial?: {
2152
+ id?: string | undefined;
2153
+ preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
2154
+ properties?: {
2155
+ color: string;
2156
+ roughness: number;
2157
+ metalness: number;
2158
+ opacity: number;
2159
+ transparent: boolean;
2160
+ side: "front" | "back" | "double";
2161
+ } | undefined;
2162
+ texture?: {
2163
+ url: string;
2164
+ repeat?: [number, number] | undefined;
2165
+ scale?: number | undefined;
2166
+ } | undefined;
2167
+ } | undefined;
2168
+ sideMaterialPreset?: string | undefined;
2169
+ wallMaterial?: {
2170
+ id?: string | undefined;
2171
+ preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
2172
+ properties?: {
2173
+ color: string;
2174
+ roughness: number;
2175
+ metalness: number;
2176
+ opacity: number;
2177
+ transparent: boolean;
2178
+ side: "front" | "back" | "double";
2179
+ } | undefined;
2180
+ texture?: {
2181
+ url: string;
2182
+ repeat?: [number, number] | undefined;
2183
+ scale?: number | undefined;
2184
+ } | undefined;
2185
+ } | undefined;
2186
+ wallMaterialPreset?: string | undefined;
1725
2187
  roofSegmentId?: string | undefined;
1726
- surfaceNormal?: [number, number, number] | undefined;
1727
2188
  } | {
1728
2189
  object: "node";
1729
2190
  parentId: string | null;
1730
2191
  visible: boolean;
1731
2192
  metadata: import("zod").JSONType;
1732
- id: `tvent_${string}`;
1733
- type: "turbine-vent";
2193
+ id: `downspout_${string}`;
2194
+ type: "downspout";
1734
2195
  materialPreset: string;
1735
- position: [number, number, number];
1736
- rotation: number;
2196
+ length: number;
1737
2197
  diameter: number;
1738
- height: number;
1739
- neckHeight: number;
1740
- baseOverhang: number;
1741
- vaneCount: number;
1742
- spinSpeed: number;
1743
- style: "globe" | "cylinder";
2198
+ standoff: number;
2199
+ shape: "round" | "auto" | "rect";
2200
+ strapStyle: "none" | "band";
2201
+ strapSpacing: number;
2202
+ terminal: "straight" | "splash" | "kickout";
1744
2203
  name?: string | undefined;
1745
2204
  camera?: {
1746
2205
  position: [number, number, number];
@@ -1766,10 +2225,221 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1766
2225
  scale?: number | undefined;
1767
2226
  } | undefined;
1768
2227
  } | undefined;
1769
- roofSegmentId?: string | undefined;
2228
+ gutterId?: string | undefined;
2229
+ outletId?: string | undefined;
2230
+ } | {
2231
+ object: "node";
2232
+ parentId: string | null;
2233
+ visible: boolean;
2234
+ metadata: import("zod").JSONType;
2235
+ id: `duct-segment_${string}`;
2236
+ type: "duct-segment";
2237
+ path: [number, number, number][];
2238
+ shape: "round" | "rect" | "oval";
2239
+ diameter: number;
2240
+ width: number;
2241
+ height: number;
2242
+ roll: number;
2243
+ ductMaterial: "spiral" | "sheet-metal" | "flex" | "duct-board";
2244
+ seamDetail: boolean;
2245
+ insulated: boolean;
2246
+ insulationR: number;
2247
+ system: "supply" | "return";
2248
+ name?: string | undefined;
2249
+ camera?: {
2250
+ position: [number, number, number];
2251
+ target: [number, number, number];
2252
+ mode: "perspective" | "orthographic";
2253
+ fov?: number | undefined;
2254
+ zoom?: number | undefined;
2255
+ } | undefined;
2256
+ slots?: Record<string, string> | undefined;
2257
+ } | {
2258
+ object: "node";
2259
+ parentId: string | null;
2260
+ visible: boolean;
2261
+ metadata: import("zod").JSONType;
2262
+ id: `duct-fitting_${string}`;
2263
+ type: "duct-fitting";
2264
+ position: [number, number, number];
2265
+ rotation: [number, number, number];
2266
+ fittingType: "elbow" | "tee" | "cross" | "reducer" | "transition";
2267
+ shape: "round" | "rect" | "oval";
2268
+ width: number;
2269
+ height: number;
2270
+ shape2: "round" | "rect" | "oval";
2271
+ width2: number;
2272
+ height2: number;
2273
+ angle: number;
2274
+ branchAngle: number;
2275
+ diameter: number;
2276
+ diameter2: number;
2277
+ ductMaterial: "sheet-metal" | "flex" | "duct-board";
2278
+ system: "supply" | "return";
2279
+ name?: string | undefined;
2280
+ camera?: {
2281
+ position: [number, number, number];
2282
+ target: [number, number, number];
2283
+ mode: "perspective" | "orthographic";
2284
+ fov?: number | undefined;
2285
+ zoom?: number | undefined;
2286
+ } | undefined;
2287
+ slots?: Record<string, string> | undefined;
2288
+ } | {
2289
+ object: "node";
2290
+ parentId: string | null;
2291
+ visible: boolean;
2292
+ metadata: import("zod").JSONType;
2293
+ id: `duct-terminal_${string}`;
2294
+ type: "duct-terminal";
2295
+ position: [number, number, number];
2296
+ rotation: number;
2297
+ terminalType: "supply-register" | "diffuser" | "return-grille";
2298
+ mount: "wall" | "ceiling" | "floor";
2299
+ width: number;
2300
+ depth: number;
2301
+ collarShape: "round" | "rect" | "oval";
2302
+ collarDiameter: number;
2303
+ collarWidth: number;
2304
+ collarHeight: number;
2305
+ name?: string | undefined;
2306
+ camera?: {
2307
+ position: [number, number, number];
2308
+ target: [number, number, number];
2309
+ mode: "perspective" | "orthographic";
2310
+ fov?: number | undefined;
2311
+ zoom?: number | undefined;
2312
+ } | undefined;
2313
+ } | {
2314
+ object: "node";
2315
+ parentId: string | null;
2316
+ visible: boolean;
2317
+ metadata: import("zod").JSONType;
2318
+ id: `hvac-equipment_${string}`;
2319
+ type: "hvac-equipment";
2320
+ position: [number, number, number];
2321
+ rotation: number;
2322
+ equipmentType: "furnace" | "air-handler" | "condenser";
2323
+ width: number;
2324
+ depth: number;
2325
+ height: number;
2326
+ supplyShape: "round" | "rect" | "oval";
2327
+ returnShape: "round" | "rect" | "oval";
2328
+ supplyDiameter: number;
2329
+ returnDiameter: number;
2330
+ supplyWidth: number;
2331
+ supplyHeight: number;
2332
+ returnWidth: number;
2333
+ returnHeight: number;
2334
+ name?: string | undefined;
2335
+ camera?: {
2336
+ position: [number, number, number];
2337
+ target: [number, number, number];
2338
+ mode: "perspective" | "orthographic";
2339
+ fov?: number | undefined;
2340
+ zoom?: number | undefined;
2341
+ } | undefined;
2342
+ } | {
2343
+ object: "node";
2344
+ parentId: string | null;
2345
+ visible: boolean;
2346
+ metadata: import("zod").JSONType;
2347
+ id: `lineset_${string}`;
2348
+ type: "lineset";
2349
+ path: [number, number, number][];
2350
+ suctionDiameter: number;
2351
+ liquidDiameter: number;
2352
+ insulated: boolean;
2353
+ name?: string | undefined;
2354
+ camera?: {
2355
+ position: [number, number, number];
2356
+ target: [number, number, number];
2357
+ mode: "perspective" | "orthographic";
2358
+ fov?: number | undefined;
2359
+ zoom?: number | undefined;
2360
+ } | undefined;
2361
+ } | {
2362
+ object: "node";
2363
+ parentId: string | null;
2364
+ visible: boolean;
2365
+ metadata: import("zod").JSONType;
2366
+ id: `liquid-line_${string}`;
2367
+ type: "liquid-line";
2368
+ path: [number, number, number][];
2369
+ diameter: number;
2370
+ name?: string | undefined;
2371
+ camera?: {
2372
+ position: [number, number, number];
2373
+ target: [number, number, number];
2374
+ mode: "perspective" | "orthographic";
2375
+ fov?: number | undefined;
2376
+ zoom?: number | undefined;
2377
+ } | undefined;
2378
+ } | {
2379
+ object: "node";
2380
+ parentId: string | null;
2381
+ visible: boolean;
2382
+ metadata: import("zod").JSONType;
2383
+ id: `pipe-segment_${string}`;
2384
+ type: "pipe-segment";
2385
+ path: [number, number, number][];
2386
+ diameter: number;
2387
+ pipeMaterial: "pvc" | "abs" | "cast-iron";
2388
+ system: "waste" | "vent";
2389
+ name?: string | undefined;
2390
+ camera?: {
2391
+ position: [number, number, number];
2392
+ target: [number, number, number];
2393
+ mode: "perspective" | "orthographic";
2394
+ fov?: number | undefined;
2395
+ zoom?: number | undefined;
2396
+ } | undefined;
2397
+ } | {
2398
+ object: "node";
2399
+ parentId: string | null;
2400
+ visible: boolean;
2401
+ metadata: import("zod").JSONType;
2402
+ id: `pipe-fitting_${string}`;
2403
+ type: "pipe-fitting";
2404
+ position: [number, number, number];
2405
+ rotation: [number, number, number];
2406
+ fittingType: "elbow" | "cross" | "wye" | "sanitary-tee";
2407
+ angle: number;
2408
+ diameter: number;
2409
+ diameter2: number;
2410
+ pipeMaterial: "pvc" | "abs" | "cast-iron";
2411
+ system: "waste" | "vent";
2412
+ name?: string | undefined;
2413
+ camera?: {
2414
+ position: [number, number, number];
2415
+ target: [number, number, number];
2416
+ mode: "perspective" | "orthographic";
2417
+ fov?: number | undefined;
2418
+ zoom?: number | undefined;
2419
+ } | undefined;
2420
+ } | {
2421
+ object: "node";
2422
+ parentId: string | null;
2423
+ visible: boolean;
2424
+ metadata: import("zod").JSONType;
2425
+ id: `pipe-trap_${string}`;
2426
+ type: "pipe-trap";
2427
+ position: [number, number, number];
2428
+ rotation: number;
2429
+ diameter: number;
2430
+ pipeMaterial: "pvc" | "abs" | "cast-iron";
2431
+ armLengthM: number;
2432
+ name?: string | undefined;
2433
+ camera?: {
2434
+ position: [number, number, number];
2435
+ target: [number, number, number];
2436
+ mode: "perspective" | "orthographic";
2437
+ fov?: number | undefined;
2438
+ zoom?: number | undefined;
2439
+ } | undefined;
1770
2440
  }>;
1771
2441
  export declare function createSurfaceOpeningPreviewController(): {
1772
- previewSurfaceIds: Set<`bvent_${string}` | `elevator_${string}` | `item_${string}` | `ceiling_${string}` | `column_${string}` | `fence_${string}` | `guide_${string}` | `rseg_${string}` | `roof_${string}` | `scan_${string}` | `shelf_${string}` | `slab_${string}` | `spawn_${string}` | `sseg_${string}` | `stair_${string}` | `door_${string}` | `window_${string}` | `wall_${string}` | `zone_${string}` | `level_${string}` | `building_${string}` | `chimney_${string}` | `cupola_${string}` | `dormer_${string}` | `downspout_${string}` | `eyebrow-vent_${string}` | `gutter_${string}` | `rvent_${string}` | `site_${string}` | `skylight_${string}` | `solarpanel_${string}` | `tvent_${string}`>;
2442
+ previewSurfaceIds: Set<`bvent_${string}` | `elevator_${string}` | `item_${string}` | `ceiling_${string}` | `column_${string}` | `fence_${string}` | `guide_${string}` | `site_${string}` | `building_${string}` | `level_${string}` | `wall_${string}` | `door_${string}` | `window_${string}` | `zone_${string}` | `slab_${string}` | `roof_${string}` | `rseg_${string}` | `stair_${string}` | `sseg_${string}` | `scan_${string}` | `measurement_${string}` | `spawn_${string}` | `shelf_${string}` | `cabinet_${string}` | `cabinet-module_${string}` | `rvent_${string}` | `tvent_${string}` | `cupola_${string}` | `eyebrow-vent_${string}` | `gutter_${string}` | `chimney_${string}` | `solarpanel_${string}` | `skylight_${string}` | `dormer_${string}` | `downspout_${string}` | `duct-segment_${string}` | `duct-fitting_${string}` | `duct-terminal_${string}` | `hvac-equipment_${string}` | `lineset_${string}` | `liquid-line_${string}` | `pipe-segment_${string}` | `pipe-fitting_${string}` | `pipe-trap_${string}`>;
1773
2443
  apply(updates: SurfaceOpeningUpdate[]): void;
1774
2444
  clear(): void;
1775
2445
  };