@pascal-app/core 1.0.0-beta.5 → 1.0.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 (417) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +23 -0
  3. package/dist/capture/index.d.ts +3 -0
  4. package/dist/capture/index.d.ts.map +1 -0
  5. package/dist/capture/index.js +2 -0
  6. package/dist/capture/schema.d.ts +417 -0
  7. package/dist/capture/schema.d.ts.map +1 -0
  8. package/dist/capture/schema.js +350 -0
  9. package/dist/capture/source.d.ts +60 -0
  10. package/dist/capture/source.d.ts.map +1 -0
  11. package/dist/capture/source.js +254 -0
  12. package/dist/events/bus.d.ts +58 -7
  13. package/dist/events/bus.d.ts.map +1 -1
  14. package/dist/events/hidden-wall-pointer-hold.d.ts +28 -0
  15. package/dist/events/hidden-wall-pointer-hold.d.ts.map +1 -0
  16. package/dist/events/hidden-wall-pointer-hold.js +37 -0
  17. package/dist/hooks/spatial-grid/floor-placed-elevation.d.ts +4 -4
  18. package/dist/hooks/spatial-grid/floor-placed-elevation.d.ts.map +1 -1
  19. package/dist/hooks/spatial-grid/floor-placed-elevation.js +7 -12
  20. package/dist/hooks/spatial-grid/floor-placed-footprints.d.ts +4 -0
  21. package/dist/hooks/spatial-grid/floor-placed-footprints.d.ts.map +1 -0
  22. package/dist/hooks/spatial-grid/floor-placed-footprints.js +7 -0
  23. package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts +5 -8
  24. package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts.map +1 -1
  25. package/dist/hooks/spatial-grid/spatial-grid-manager.js +23 -106
  26. package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts +2931 -2
  27. package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts.map +1 -1
  28. package/dist/hooks/spatial-grid/spatial-grid-sync.js +207 -30
  29. package/dist/hooks/spatial-grid/support-host-patch.d.ts +45 -1
  30. package/dist/hooks/spatial-grid/support-host-patch.d.ts.map +1 -1
  31. package/dist/hooks/spatial-grid/support-host-patch.js +174 -9
  32. package/dist/hooks/spatial-grid/use-spatial-query.d.ts +1 -1
  33. package/dist/hooks/spatial-grid/use-spatial-query.js +1 -1
  34. package/dist/index.d.ts +74 -64
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +74 -61
  37. package/dist/lib/asset-storage.d.ts.map +1 -1
  38. package/dist/lib/asset-storage.js +4 -1
  39. package/dist/lib/door-operation.d.ts +1 -1
  40. package/dist/lib/item-polygon-overlap.d.ts +6 -0
  41. package/dist/lib/item-polygon-overlap.d.ts.map +1 -0
  42. package/dist/lib/item-polygon-overlap.js +67 -0
  43. package/dist/lib/level-name.d.ts +1 -1
  44. package/dist/lib/measurement-geometry.d.ts +4 -4
  45. package/dist/lib/plan-footprint.d.ts +41 -0
  46. package/dist/lib/plan-footprint.d.ts.map +1 -0
  47. package/dist/lib/plan-footprint.js +58 -0
  48. package/dist/lib/polygon-union.d.ts +4 -0
  49. package/dist/lib/polygon-union.d.ts.map +1 -0
  50. package/dist/lib/polygon-union.js +306 -0
  51. package/dist/lib/roof-overlap.d.ts +32 -0
  52. package/dist/lib/roof-overlap.d.ts.map +1 -0
  53. package/dist/lib/roof-overlap.js +72 -0
  54. package/dist/lib/room-topology-index.d.ts +1 -1
  55. package/dist/lib/room-topology-index.js +1 -1
  56. package/dist/lib/selection-proxy.d.ts +1 -1
  57. package/dist/lib/slab-polygon.d.ts +36 -3
  58. package/dist/lib/slab-polygon.d.ts.map +1 -1
  59. package/dist/lib/slab-polygon.js +135 -29
  60. package/dist/lib/space-detection.d.ts +12 -1
  61. package/dist/lib/space-detection.d.ts.map +1 -1
  62. package/dist/lib/space-detection.js +58 -25
  63. package/dist/lib/terrain-brush.d.ts +1 -1
  64. package/dist/lib/terrain-brush.js +1 -1
  65. package/dist/lib/terrain-codec.d.ts +2 -2
  66. package/dist/lib/terrain-codec.js +1 -1
  67. package/dist/lib/terrain-raycast.d.ts +1 -1
  68. package/dist/lib/terrain-raycast.js +1 -1
  69. package/dist/lib/terrain-source.d.ts +3 -3
  70. package/dist/lib/terrain-source.js +3 -3
  71. package/dist/lib/terrain-support.d.ts +1 -1
  72. package/dist/lib/terrain-support.js +3 -3
  73. package/dist/lib/unit-containment.d.ts +19 -0
  74. package/dist/lib/unit-containment.d.ts.map +1 -0
  75. package/dist/lib/unit-containment.js +158 -0
  76. package/dist/lib/unit-report.d.ts +19 -0
  77. package/dist/lib/unit-report.d.ts.map +1 -0
  78. package/dist/lib/unit-report.js +36 -0
  79. package/dist/lib/wall-distance.d.ts +2 -2
  80. package/dist/lib/wall-distance.js +1 -1
  81. package/dist/lib/zone-quantities.d.ts +1 -1
  82. package/dist/lib/zone-quantities.js +7 -7
  83. package/dist/material-library.d.ts +1 -1
  84. package/dist/material-library.js +1 -1
  85. package/dist/procedural-items/fixtures.d.ts +261 -0
  86. package/dist/procedural-items/fixtures.d.ts.map +1 -0
  87. package/dist/procedural-items/fixtures.js +349 -0
  88. package/dist/procedural-items/index.d.ts +10 -0
  89. package/dist/procedural-items/index.d.ts.map +1 -0
  90. package/dist/procedural-items/index.js +9 -0
  91. package/dist/procedural-items/integration.d.ts +92 -0
  92. package/dist/procedural-items/integration.d.ts.map +1 -0
  93. package/dist/procedural-items/integration.js +19 -0
  94. package/dist/procedural-items/library-colors.d.ts +56 -0
  95. package/dist/procedural-items/library-colors.d.ts.map +1 -0
  96. package/dist/procedural-items/library-colors.js +84 -0
  97. package/dist/procedural-items/materials.d.ts +5 -0
  98. package/dist/procedural-items/materials.d.ts.map +1 -0
  99. package/dist/procedural-items/materials.js +47 -0
  100. package/dist/procedural-items/node.d.ts +280 -0
  101. package/dist/procedural-items/node.d.ts.map +1 -0
  102. package/dist/procedural-items/node.js +71 -0
  103. package/dist/procedural-items/placement.d.ts +7 -0
  104. package/dist/procedural-items/placement.d.ts.map +1 -0
  105. package/dist/procedural-items/placement.js +48 -0
  106. package/dist/procedural-items/query.d.ts +50 -0
  107. package/dist/procedural-items/query.d.ts.map +1 -0
  108. package/dist/procedural-items/query.js +298 -0
  109. package/dist/procedural-items/recipe.d.ts +144 -0
  110. package/dist/procedural-items/recipe.d.ts.map +1 -0
  111. package/dist/procedural-items/recipe.js +372 -0
  112. package/dist/procedural-items/spatial.d.ts +19 -0
  113. package/dist/procedural-items/spatial.d.ts.map +1 -0
  114. package/dist/procedural-items/spatial.js +39 -0
  115. package/dist/registry/__bench__/relations-resolver.bench.js +2 -2
  116. package/dist/registry/handles.d.ts +36 -7
  117. package/dist/registry/handles.d.ts.map +1 -1
  118. package/dist/registry/index.d.ts +6 -7
  119. package/dist/registry/index.d.ts.map +1 -1
  120. package/dist/registry/index.js +4 -5
  121. package/dist/registry/registry.d.ts +13 -6
  122. package/dist/registry/registry.d.ts.map +1 -1
  123. package/dist/registry/registry.js +37 -4
  124. package/dist/registry/relations-resolver.d.ts +2 -2
  125. package/dist/registry/relations-resolver.js +1 -1
  126. package/dist/registry/scene-api.d.ts +18 -2
  127. package/dist/registry/scene-api.d.ts.map +1 -1
  128. package/dist/registry/scene-api.js +50 -2
  129. package/dist/registry/subtree.d.ts +1 -1
  130. package/dist/registry/subtree.js +2 -2
  131. package/dist/registry/types.d.ts +246 -21
  132. package/dist/registry/types.d.ts.map +1 -1
  133. package/dist/registry/use-registry-version.js +1 -1
  134. package/dist/registry/validate-relations.d.ts +4 -0
  135. package/dist/registry/validate-relations.d.ts.map +1 -0
  136. package/dist/registry/validate-relations.js +22 -0
  137. package/dist/schema/__bench__/node-parsers.bench.d.ts +24 -0
  138. package/dist/schema/__bench__/node-parsers.bench.d.ts.map +1 -0
  139. package/dist/schema/__bench__/node-parsers.bench.js +314 -0
  140. package/dist/schema/__fixtures__/node-fixtures.d.ts +28 -0
  141. package/dist/schema/__fixtures__/node-fixtures.d.ts.map +1 -0
  142. package/dist/schema/__fixtures__/node-fixtures.js +127 -0
  143. package/dist/schema/base.d.ts +1 -1
  144. package/dist/schema/base.d.ts.map +1 -1
  145. package/dist/schema/base.js +9 -2
  146. package/dist/schema/collections.d.ts +1 -1
  147. package/dist/schema/collections.js +1 -1
  148. package/dist/schema/compiled-node-parsers.d.ts +40 -0
  149. package/dist/schema/compiled-node-parsers.d.ts.map +1 -0
  150. package/dist/schema/compiled-node-parsers.js +95 -0
  151. package/dist/schema/index.d.ts +73 -66
  152. package/dist/schema/index.d.ts.map +1 -1
  153. package/dist/schema/index.js +65 -57
  154. package/dist/schema/material.d.ts +1 -0
  155. package/dist/schema/material.d.ts.map +1 -1
  156. package/dist/schema/material.js +2 -1
  157. package/dist/schema/nodes/automatic-downspout.d.ts +17 -0
  158. package/dist/schema/nodes/automatic-downspout.d.ts.map +1 -0
  159. package/dist/schema/nodes/automatic-downspout.js +237 -0
  160. package/dist/schema/nodes/block.d.ts +107 -0
  161. package/dist/schema/nodes/block.d.ts.map +1 -0
  162. package/dist/schema/nodes/block.js +206 -0
  163. package/dist/schema/nodes/box-vent.d.ts +8 -2
  164. package/dist/schema/nodes/box-vent.d.ts.map +1 -1
  165. package/dist/schema/nodes/box-vent.js +4 -2
  166. package/dist/schema/nodes/building.d.ts +2 -2
  167. package/dist/schema/nodes/building.d.ts.map +1 -1
  168. package/dist/schema/nodes/building.js +8 -5
  169. package/dist/schema/nodes/cabinet.d.ts +26 -4
  170. package/dist/schema/nodes/cabinet.d.ts.map +1 -1
  171. package/dist/schema/nodes/cabinet.js +29 -8
  172. package/dist/schema/nodes/ceiling.d.ts +2 -2
  173. package/dist/schema/nodes/ceiling.js +5 -5
  174. package/dist/schema/nodes/chimney.d.ts +2 -2
  175. package/dist/schema/nodes/chimney.js +2 -2
  176. package/dist/schema/nodes/column.d.ts +7 -6
  177. package/dist/schema/nodes/column.d.ts.map +1 -1
  178. package/dist/schema/nodes/column.js +3 -2
  179. package/dist/schema/nodes/construction-dimension.d.ts +1 -1
  180. package/dist/schema/nodes/construction-dimension.js +2 -2
  181. package/dist/schema/nodes/cupola.d.ts +9 -1
  182. package/dist/schema/nodes/cupola.d.ts.map +1 -1
  183. package/dist/schema/nodes/cupola.js +4 -2
  184. package/dist/schema/nodes/door.d.ts +1 -1
  185. package/dist/schema/nodes/door.js +2 -2
  186. package/dist/schema/nodes/dormer.d.ts +45 -2
  187. package/dist/schema/nodes/dormer.d.ts.map +1 -1
  188. package/dist/schema/nodes/dormer.js +133 -9
  189. package/dist/schema/nodes/downspout.d.ts +11 -1
  190. package/dist/schema/nodes/downspout.d.ts.map +1 -1
  191. package/dist/schema/nodes/downspout.js +26 -2
  192. package/dist/schema/nodes/duct-fitting.d.ts +18 -1
  193. package/dist/schema/nodes/duct-fitting.d.ts.map +1 -1
  194. package/dist/schema/nodes/duct-fitting.js +26 -5
  195. package/dist/schema/nodes/duct-segment.d.ts +23 -1
  196. package/dist/schema/nodes/duct-segment.d.ts.map +1 -1
  197. package/dist/schema/nodes/duct-segment.js +21 -1
  198. package/dist/schema/nodes/duct-terminal.d.ts +1 -1
  199. package/dist/schema/nodes/duct-terminal.js +1 -1
  200. package/dist/schema/nodes/elevator.d.ts +1 -1
  201. package/dist/schema/nodes/elevator.js +2 -2
  202. package/dist/schema/nodes/eyebrow-vent.d.ts +8 -2
  203. package/dist/schema/nodes/eyebrow-vent.d.ts.map +1 -1
  204. package/dist/schema/nodes/eyebrow-vent.js +4 -2
  205. package/dist/schema/nodes/fence.d.ts +1 -1
  206. package/dist/schema/nodes/fence.js +2 -2
  207. package/dist/schema/nodes/guide.d.ts +1 -1
  208. package/dist/schema/nodes/guide.js +2 -2
  209. package/dist/schema/nodes/gutter.d.ts +36 -2
  210. package/dist/schema/nodes/gutter.d.ts.map +1 -1
  211. package/dist/schema/nodes/gutter.js +310 -3
  212. package/dist/schema/nodes/hanger-overrides.d.ts +7 -0
  213. package/dist/schema/nodes/hanger-overrides.d.ts.map +1 -0
  214. package/dist/schema/nodes/hanger-overrides.js +6 -0
  215. package/dist/schema/nodes/hvac-equipment.d.ts +1 -1
  216. package/dist/schema/nodes/hvac-equipment.js +1 -1
  217. package/dist/schema/nodes/imported-mesh.d.ts +40 -0
  218. package/dist/schema/nodes/imported-mesh.d.ts.map +1 -0
  219. package/dist/schema/nodes/imported-mesh.js +27 -0
  220. package/dist/schema/nodes/item.d.ts +3 -2
  221. package/dist/schema/nodes/item.d.ts.map +1 -1
  222. package/dist/schema/nodes/item.js +8 -3
  223. package/dist/schema/nodes/lean-to-extension.d.ts +212 -0
  224. package/dist/schema/nodes/lean-to-extension.d.ts.map +1 -0
  225. package/dist/schema/nodes/lean-to-extension.js +114 -0
  226. package/dist/schema/nodes/level.d.ts +2 -2
  227. package/dist/schema/nodes/level.d.ts.map +1 -1
  228. package/dist/schema/nodes/level.js +1 -1
  229. package/dist/schema/nodes/lineset.d.ts +1 -1
  230. package/dist/schema/nodes/lineset.js +1 -1
  231. package/dist/schema/nodes/liquid-line.d.ts +1 -1
  232. package/dist/schema/nodes/liquid-line.js +1 -1
  233. package/dist/schema/nodes/measurement.d.ts +1 -1
  234. package/dist/schema/nodes/measurement.js +2 -2
  235. package/dist/schema/nodes/pipe-fitting.d.ts +10 -2
  236. package/dist/schema/nodes/pipe-fitting.d.ts.map +1 -1
  237. package/dist/schema/nodes/pipe-fitting.js +7 -3
  238. package/dist/schema/nodes/pipe-segment.d.ts +24 -2
  239. package/dist/schema/nodes/pipe-segment.d.ts.map +1 -1
  240. package/dist/schema/nodes/pipe-segment.js +21 -1
  241. package/dist/schema/nodes/pipe-trap.d.ts +2 -2
  242. package/dist/schema/nodes/pipe-trap.js +1 -1
  243. package/dist/schema/nodes/ridge-vent.d.ts +2 -2
  244. package/dist/schema/nodes/ridge-vent.d.ts.map +1 -1
  245. package/dist/schema/nodes/ridge-vent.js +7 -4
  246. package/dist/schema/nodes/roof-segment-shape.d.ts +5 -1
  247. package/dist/schema/nodes/roof-segment-shape.d.ts.map +1 -1
  248. package/dist/schema/nodes/roof-segment-shape.js +65 -2
  249. package/dist/schema/nodes/roof-segment-walls.d.ts +4 -2
  250. package/dist/schema/nodes/roof-segment-walls.d.ts.map +1 -1
  251. package/dist/schema/nodes/roof-segment-walls.js +2 -2
  252. package/dist/schema/nodes/roof-segment.d.ts +42 -2
  253. package/dist/schema/nodes/roof-segment.d.ts.map +1 -1
  254. package/dist/schema/nodes/roof-segment.js +81 -4
  255. package/dist/schema/nodes/roof.d.ts +23 -2
  256. package/dist/schema/nodes/roof.d.ts.map +1 -1
  257. package/dist/schema/nodes/roof.js +17 -3
  258. package/dist/schema/nodes/scan.d.ts +19 -2
  259. package/dist/schema/nodes/scan.d.ts.map +1 -1
  260. package/dist/schema/nodes/scan.js +13 -3
  261. package/dist/schema/nodes/shelf.d.ts +3 -3
  262. package/dist/schema/nodes/shelf.d.ts.map +1 -1
  263. package/dist/schema/nodes/shelf.js +3 -4
  264. package/dist/schema/nodes/site.d.ts +1 -1
  265. package/dist/schema/nodes/site.js +2 -2
  266. package/dist/schema/nodes/skylight.d.ts +5 -5
  267. package/dist/schema/nodes/skylight.js +2 -2
  268. package/dist/schema/nodes/slab.d.ts +1 -1
  269. package/dist/schema/nodes/slab.js +3 -3
  270. package/dist/schema/nodes/solar-panel.d.ts +1 -1
  271. package/dist/schema/nodes/solar-panel.js +3 -3
  272. package/dist/schema/nodes/spawn.d.ts +1 -1
  273. package/dist/schema/nodes/spawn.js +1 -1
  274. package/dist/schema/nodes/stair-segment.d.ts +1 -1
  275. package/dist/schema/nodes/stair-segment.js +2 -2
  276. package/dist/schema/nodes/stair.d.ts +2 -2
  277. package/dist/schema/nodes/stair.js +3 -3
  278. package/dist/schema/nodes/structural-grid.d.ts +1 -1
  279. package/dist/schema/nodes/structural-grid.js +1 -1
  280. package/dist/schema/nodes/turbine-vent.d.ts +8 -2
  281. package/dist/schema/nodes/turbine-vent.d.ts.map +1 -1
  282. package/dist/schema/nodes/turbine-vent.js +4 -2
  283. package/dist/schema/nodes/unit.d.ts +33 -0
  284. package/dist/schema/nodes/unit.d.ts.map +1 -0
  285. package/dist/schema/nodes/unit.js +13 -0
  286. package/dist/schema/nodes/wall.d.ts +5 -5
  287. package/dist/schema/nodes/wall.d.ts.map +1 -1
  288. package/dist/schema/nodes/wall.js +13 -6
  289. package/dist/schema/nodes/window.d.ts +10 -3
  290. package/dist/schema/nodes/window.d.ts.map +1 -1
  291. package/dist/schema/nodes/window.js +6 -2
  292. package/dist/schema/nodes/zone.d.ts +2 -2
  293. package/dist/schema/nodes/zone.js +2 -2
  294. package/dist/schema/scene-material.js +2 -2
  295. package/dist/schema/types.d.ts +815 -118
  296. package/dist/schema/types.d.ts.map +1 -1
  297. package/dist/schema/types.js +79 -46
  298. package/dist/services/alignment-anchors.d.ts +6 -11
  299. package/dist/services/alignment-anchors.d.ts.map +1 -1
  300. package/dist/services/alignment-anchors.js +7 -34
  301. package/dist/services/drag-session.d.ts +4 -4
  302. package/dist/services/drag-session.js +1 -1
  303. package/dist/services/hosting.d.ts +4 -10
  304. package/dist/services/hosting.d.ts.map +1 -1
  305. package/dist/services/hosting.js +6 -16
  306. package/dist/services/index.d.ts +16 -13
  307. package/dist/services/index.d.ts.map +1 -1
  308. package/dist/services/index.js +16 -13
  309. package/dist/services/level-height.d.ts +2 -2
  310. package/dist/services/level-height.js +3 -3
  311. package/dist/services/movement.d.ts +3 -3
  312. package/dist/services/movement.js +2 -2
  313. package/dist/services/port-connectivity.d.ts +1 -1
  314. package/dist/services/port-connectivity.js +1 -1
  315. package/dist/services/riser-diagram.d.ts +1 -1
  316. package/dist/services/shelf-board.d.ts +5 -0
  317. package/dist/services/shelf-board.d.ts.map +1 -0
  318. package/dist/services/shelf-board.js +15 -0
  319. package/dist/services/storey.d.ts +2 -2
  320. package/dist/services/storey.js +2 -2
  321. package/dist/services/surface-hosting-procedural-parity.fixtures.d.ts +13 -0
  322. package/dist/services/surface-hosting-procedural-parity.fixtures.d.ts.map +1 -0
  323. package/dist/services/surface-hosting-procedural-parity.fixtures.js +4691 -0
  324. package/dist/services/surface-hosting-shelf-parity.fixtures.d.ts +1060 -0
  325. package/dist/services/surface-hosting-shelf-parity.fixtures.d.ts.map +1 -0
  326. package/dist/services/surface-hosting-shelf-parity.fixtures.js +3127 -0
  327. package/dist/services/surface-hosting.d.ts +88 -0
  328. package/dist/services/surface-hosting.d.ts.map +1 -0
  329. package/dist/services/surface-hosting.js +268 -0
  330. package/dist/services/surface-region.d.ts +8 -0
  331. package/dist/services/surface-region.d.ts.map +1 -0
  332. package/dist/services/surface-region.js +44 -0
  333. package/dist/services/system-graph.d.ts +12 -1
  334. package/dist/services/system-graph.d.ts.map +1 -1
  335. package/dist/services/system-graph.js +36 -6
  336. package/dist/services/validate-dwv.d.ts +1 -1
  337. package/dist/services/validate-dwv.js +1 -1
  338. package/dist/store/actions/node-actions.d.ts +9 -2
  339. package/dist/store/actions/node-actions.d.ts.map +1 -1
  340. package/dist/store/actions/node-actions.js +475 -24
  341. package/dist/store/history-control.d.ts +3 -3
  342. package/dist/store/history-invalidation.d.ts +3 -0
  343. package/dist/store/history-invalidation.d.ts.map +1 -0
  344. package/dist/store/history-invalidation.js +72 -0
  345. package/dist/store/scene-hydration.d.ts +5 -0
  346. package/dist/store/scene-hydration.d.ts.map +1 -0
  347. package/dist/store/scene-hydration.js +57 -0
  348. package/dist/store/use-interactive.d.ts +2 -2
  349. package/dist/store/use-live-terrain.d.ts +1 -1
  350. package/dist/store/use-scene.d.ts +7 -4
  351. package/dist/store/use-scene.d.ts.map +1 -1
  352. package/dist/store/use-scene.js +361 -87
  353. package/dist/systems/elevator/elevator-dispatch.d.ts +2 -2
  354. package/dist/systems/elevator/elevator-dispatch.js +1 -1
  355. package/dist/systems/elevator/elevator-geometry.d.ts +1 -1
  356. package/dist/systems/elevator/elevator-opening-sync.d.ts +1 -1
  357. package/dist/systems/elevator/elevator-opening-sync.js +2 -2
  358. package/dist/systems/elevator/elevator-opening-system.js +3 -3
  359. package/dist/systems/elevator/elevator-runtime.d.ts +3 -3
  360. package/dist/systems/elevator/elevator-runtime.js +3 -3
  361. package/dist/systems/elevator/elevator-service.d.ts +1 -1
  362. package/dist/systems/elevator/elevator-service.js +1 -1
  363. package/dist/systems/fence/fence-centerline.d.ts +2 -2
  364. package/dist/systems/fence/fence-centerline.js +2 -2
  365. package/dist/systems/fence/fence-spline.d.ts +2 -2
  366. package/dist/systems/roof/roof-elevation-system.d.ts +3 -0
  367. package/dist/systems/roof/roof-elevation-system.d.ts.map +1 -0
  368. package/dist/systems/roof/roof-elevation-system.js +94 -0
  369. package/dist/systems/roof/roof-elevation.d.ts +4 -0
  370. package/dist/systems/roof/roof-elevation.d.ts.map +1 -0
  371. package/dist/systems/roof/roof-elevation.js +95 -0
  372. package/dist/systems/roof/roof-footprint.d.ts +17 -0
  373. package/dist/systems/roof/roof-footprint.d.ts.map +1 -0
  374. package/dist/systems/roof/roof-footprint.js +83 -0
  375. package/dist/systems/slab/slab-placement.d.ts +1 -1
  376. package/dist/systems/slab/slab-support.d.ts +1 -1
  377. package/dist/systems/slab/slab-support.js +4 -4
  378. package/dist/systems/stair/stair-flight.d.ts +17 -0
  379. package/dist/systems/stair/stair-flight.d.ts.map +1 -0
  380. package/dist/systems/stair/stair-flight.js +27 -0
  381. package/dist/systems/stair/stair-footprint.d.ts +1 -1
  382. package/dist/systems/stair/stair-opening-preview.d.ts +1621 -1267
  383. package/dist/systems/stair/stair-opening-preview.d.ts.map +1 -1
  384. package/dist/systems/stair/stair-opening-preview.js +2 -2
  385. package/dist/systems/stair/stair-opening-sync.d.ts +1 -1
  386. package/dist/systems/stair/stair-opening-sync.js +6 -6
  387. package/dist/systems/stair/stair-opening-system.d.ts +1 -0
  388. package/dist/systems/stair/stair-opening-system.d.ts.map +1 -1
  389. package/dist/systems/stair/stair-opening-system.js +100 -103
  390. package/dist/systems/stair/stair-rise.d.ts +1 -1
  391. package/dist/systems/stair/stair-rise.d.ts.map +1 -1
  392. package/dist/systems/stair/stair-rise.js +23 -24
  393. package/dist/systems/wall/wall-curve.d.ts +3 -2
  394. package/dist/systems/wall/wall-curve.d.ts.map +1 -1
  395. package/dist/systems/wall/wall-curve.js +73 -0
  396. package/dist/systems/wall/wall-footprint.d.ts +3 -2
  397. package/dist/systems/wall/wall-footprint.d.ts.map +1 -1
  398. package/dist/systems/wall/wall-footprint.js +3 -2
  399. package/dist/systems/wall/wall-mitering.d.ts +1 -1
  400. package/dist/systems/wall/wall-mitering.js +1 -1
  401. package/dist/systems/wall/wall-move.d.ts +1 -1
  402. package/dist/systems/wall/wall-top.d.ts +1 -1
  403. package/dist/systems/wall/wall-topology.d.ts +2 -2
  404. package/dist/systems/wall/wall-topology.js +4 -4
  405. package/dist/utils/clone-scene-graph.d.ts +3 -3
  406. package/dist/utils/clone-scene-graph.d.ts.map +1 -1
  407. package/dist/utils/clone-scene-graph.js +35 -3
  408. package/dist/utils/scene-migrations.d.ts +3 -3
  409. package/dist/utils/scene-migrations.js +3 -3
  410. package/dist/utils/vertical-scene-migration.js +5 -5
  411. package/dist/validation/validate-build-json.d.ts +7 -1
  412. package/dist/validation/validate-build-json.d.ts.map +1 -1
  413. package/dist/validation/validate-build-json.js +92 -4
  414. package/package.json +23 -5
  415. package/dist/systems/elevator/elevator-runtime-system.d.ts +0 -2
  416. package/dist/systems/elevator/elevator-runtime-system.d.ts.map +0 -1
  417. package/dist/systems/elevator/elevator-runtime-system.js +0 -8
@@ -1,6 +1,6 @@
1
- import type { AnyNode, AnyNodeId, CeilingNode, SlabNode } from '../../schema';
2
- import { type LiveNodeOverrides } from '../../store/use-live-node-overrides';
3
- import type { LiveTransform } from '../../store/use-live-transforms';
1
+ import type { AnyNode, AnyNodeId, CeilingNode, SlabNode } from '../../schema/index.js';
2
+ import { type LiveNodeOverrides } from '../../store/use-live-node-overrides.js';
3
+ import type { LiveTransform } from '../../store/use-live-transforms.js';
4
4
  type SurfaceOpeningUpdate = {
5
5
  id: AnyNodeId;
6
6
  data: Partial<SlabNode | CeilingNode>;
@@ -8,26 +8,16 @@ type SurfaceOpeningUpdate = {
8
8
  export declare function hasLiveStairOpeningInputs(nodes: Record<string, AnyNode>, liveTransforms: ReadonlyMap<string, LiveTransform>, liveOverrides: ReadonlyMap<string, LiveNodeOverrides>, previewSurfaceIds: ReadonlySet<string>): boolean;
9
9
  export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string, AnyNode>, liveTransforms: ReadonlyMap<string, LiveTransform>, liveOverrides: ReadonlyMap<string, LiveNodeOverrides>, previewSurfaceIds: ReadonlySet<string>): Record<string, {
10
10
  object: "node";
11
+ id: `site_${string}`;
11
12
  parentId: string | null;
12
13
  visible: boolean;
13
- metadata: import("zod").JSONType;
14
- id: `bvent_${string}`;
15
- type: "box-vent";
16
- materialPreset: string;
17
- position: [number, number, number];
18
- rotation: number;
19
- width: number;
20
- depth: number;
21
- height: number;
22
- hoodOverhang: number;
23
- topTaper: number;
24
- capHeight: number;
25
- capGap: number;
26
- domeCurvature: number;
27
- baseInset: number;
28
- baseHeight: number;
29
- cornerBevel: number;
30
- style: "box" | "cap" | "dome";
14
+ metadata: Record<string, unknown>;
15
+ children: string[];
16
+ polygon: {
17
+ type: "polygon";
18
+ points: [number, number][];
19
+ };
20
+ type: "site";
31
21
  name?: string | undefined;
32
22
  camera?: {
33
23
  position: [number, number, number];
@@ -36,32 +26,40 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
36
26
  fov?: number | undefined;
37
27
  zoom?: number | undefined;
38
28
  } | undefined;
39
- material?: {
40
- id?: string | undefined;
41
- preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
42
- properties?: {
43
- color: string;
44
- roughness: number;
45
- metalness: number;
46
- opacity: number;
47
- transparent: boolean;
48
- side: "front" | "back" | "double";
49
- } | undefined;
50
- texture?: {
51
- url: string;
52
- repeat?: [number, number] | undefined;
53
- scale?: number | undefined;
54
- } | undefined;
29
+ terrain?: {
30
+ type: "heightfield";
31
+ origin: [number, number];
32
+ spacing: number;
33
+ cols: number;
34
+ rows: number;
35
+ step: number;
36
+ heights: string;
55
37
  } | undefined;
56
- roofSegmentId?: string | undefined;
57
38
  } | {
58
39
  object: "node";
40
+ position: [number, number, number];
41
+ id: `building_${string}`;
59
42
  parentId: string | null;
60
43
  visible: boolean;
61
- metadata: import("zod").JSONType;
62
- id: `elevator_${string}`;
63
- type: "elevator";
44
+ metadata: Record<string, unknown>;
45
+ rotation: [number, number, number];
46
+ children: (`elevator_${string}` | `level_${string}` | `unit_${string}`)[];
47
+ type: "building";
48
+ name?: string | undefined;
49
+ camera?: {
50
+ position: [number, number, number];
51
+ target: [number, number, number];
52
+ mode: "perspective" | "orthographic";
53
+ fov?: number | undefined;
54
+ zoom?: number | undefined;
55
+ } | undefined;
56
+ } | {
57
+ object: "node";
64
58
  position: [number, number, number];
59
+ id: `elevator_${string}`;
60
+ parentId: string | null;
61
+ visible: boolean;
62
+ metadata: Record<string, unknown>;
65
63
  rotation: number;
66
64
  width: number;
67
65
  depth: number;
@@ -80,6 +78,7 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
80
78
  speed: number;
81
79
  doorDurationMs: number;
82
80
  dwellMs: number;
81
+ type: "elevator";
83
82
  name?: string | undefined;
84
83
  camera?: {
85
84
  position: [number, number, number];
@@ -88,6 +87,7 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
88
87
  fov?: number | undefined;
89
88
  zoom?: number | undefined;
90
89
  } | undefined;
90
+ slots?: Record<string, string> | undefined;
91
91
  material?: {
92
92
  id?: string | undefined;
93
93
  preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
@@ -106,79 +106,37 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
106
106
  } | undefined;
107
107
  } | undefined;
108
108
  materialPreset?: string | undefined;
109
- slots?: Record<string, string> | undefined;
110
109
  shaftWidth?: number | undefined;
111
110
  shaftDepth?: number | undefined;
112
111
  servedLevelIds?: string[] | undefined;
113
112
  } | {
114
113
  object: "node";
114
+ id: `unit_${string}`;
115
+ name: string;
115
116
  parentId: string | null;
116
117
  visible: boolean;
117
- metadata: import("zod").JSONType;
118
- id: `item_${string}`;
119
- type: "item";
120
- position: [number, number, number];
121
- rotation: [number, number, number];
122
- scale: [number, number, number];
123
- children: `item_${string}`[];
124
- asset: {
125
- id: string;
126
- category: string;
127
- name: string;
128
- thumbnail: string;
129
- source: "library" | "community" | "mine";
130
- src: string;
131
- dimensions: [number, number, number];
132
- offset: [number, number, number];
133
- rotation: [number, number, number];
134
- scale: [number, number, number];
135
- floorPlanUrl?: string | undefined;
136
- isDraft?: boolean | undefined;
137
- attachTo?: "wall" | "ceiling" | "wall-side" | undefined;
138
- recessed?: boolean | undefined;
139
- tags?: string[] | undefined;
140
- functionTags?: string[] | undefined;
141
- surface?: {
142
- height: number;
143
- } | undefined;
144
- interactive?: {
145
- controls: ({
146
- kind: "toggle";
147
- label?: string | undefined;
148
- default?: boolean | undefined;
149
- } | {
150
- kind: "slider";
151
- label: string;
152
- min: number;
153
- max: number;
154
- step: number;
155
- displayMode: "slider" | "stepper" | "dial";
156
- unit?: string | undefined;
157
- default?: number | undefined;
158
- } | {
159
- kind: "temperature";
160
- label: string;
161
- min: number;
162
- max: number;
163
- unit: "C" | "F";
164
- default?: number | undefined;
165
- })[];
166
- effects: ({
167
- kind: "animation";
168
- clips: {
169
- on?: string | undefined;
170
- off?: string | undefined;
171
- loop?: string | undefined;
172
- };
173
- } | {
174
- kind: "light";
175
- color: string;
176
- intensityRange: [number, number];
177
- offset: [number, number, number];
178
- distance?: number | undefined;
179
- })[];
180
- } | undefined;
181
- };
118
+ metadata: Record<string, unknown>;
119
+ color: string;
120
+ kind: "apartment" | "hotel-room" | "commercial" | "common";
121
+ members: `zone_${string}`[];
122
+ type: "unit";
123
+ camera?: {
124
+ position: [number, number, number];
125
+ target: [number, number, number];
126
+ mode: "perspective" | "orthographic";
127
+ fov?: number | undefined;
128
+ zoom?: number | undefined;
129
+ } | undefined;
130
+ } | {
131
+ object: "node";
132
+ id: `level_${string}`;
133
+ parentId: string | null;
134
+ visible: boolean;
135
+ metadata: Record<string, unknown>;
136
+ children: (`block_${string}` | `ceiling_${string}` | `item_${string}` | `procedural-item_${string}` | `column_${string}` | `construction-dimension_${string}` | `wall_${string}` | `roof_${string}` | `slab_${string}` | `fence_${string}` | `structural-grid_${string}` | `imesh_${string}` | `zone_${string}` | `stair_${string}` | `scan_${string}` | `guide_${string}` | `measurement_${string}` | `spawn_${string}` | `shelf_${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}`)[];
137
+ level: number;
138
+ baseElevation: number;
139
+ type: "level";
182
140
  name?: string | undefined;
183
141
  camera?: {
184
142
  position: [number, number, number];
@@ -187,30 +145,78 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
187
145
  fov?: number | undefined;
188
146
  zoom?: number | undefined;
189
147
  } | undefined;
190
- side?: "front" | "back" | undefined;
191
- wallId?: string | undefined;
192
- wallT?: number | undefined;
193
- roofSegmentId?: string | undefined;
194
- roofFace?: "front" | "back" | "right" | "left" | undefined;
195
- supportSlabId?: string | undefined;
196
- collectionIds?: `collection_${string}`[] | undefined;
197
- slots?: Record<string, string> | undefined;
148
+ height?: number | undefined;
198
149
  } | {
199
150
  object: "node";
151
+ position: [number, number, number];
152
+ id: `leanto_${string}`;
200
153
  parentId: string | null;
201
154
  visible: boolean;
202
- metadata: import("zod").JSONType;
203
- id: `ceiling_${string}`;
204
- type: "ceiling";
205
- children: `item_${string}`[];
206
- polygon: [number, number][];
207
- holes: [number, number][][];
208
- holeMetadata: {
209
- source: "stair" | "elevator" | "manual";
210
- stairId?: string | undefined;
211
- elevatorId?: string | undefined;
155
+ metadata: Record<string, unknown>;
156
+ rotation: [number, number, number];
157
+ children: (`column_${string}` | `roof_${string}`)[];
158
+ pitch: number;
159
+ shingleThickness: number;
160
+ canopyForm: "gable" | "mono" | "butterfly";
161
+ hostKind: "wall" | "slab-edge" | "freestanding" | "conical-roof";
162
+ hostHeightOffset: number;
163
+ span: number;
164
+ autoSpan: boolean;
165
+ projection: number;
166
+ highEdgeHeight: number;
167
+ lowEdgeHeight: number;
168
+ resizeLock: "preserve-high-edge" | "preserve-low-edge" | "preserve-pitch";
169
+ leftEndCondition: "open" | "wall-abutment" | "joined";
170
+ rightEndCondition: "open" | "wall-abutment" | "joined";
171
+ autoMiterCorners: boolean;
172
+ sideFlashing: boolean;
173
+ flashingProjection: number;
174
+ flashingHeight: number;
175
+ highSideMode: "wall-ledger" | "independent-high-beam";
176
+ ledgerVerticalOffset: number;
177
+ lowBeamInset: number;
178
+ gutterEnabled: boolean;
179
+ gutterProfile: "box" | "k-style" | "half-round";
180
+ gutterSize: number;
181
+ downspoutEnabled: boolean;
182
+ downspoutPosition: number;
183
+ connectionMode: "manual" | "auto";
184
+ connectionOffset: number;
185
+ connectionInset: number;
186
+ matchHostRoofMaterial: boolean;
187
+ matchHostRoofStructure: boolean;
188
+ roofThickness: number;
189
+ highOverhang: number;
190
+ lowOverhang: number;
191
+ leftOverhang: number;
192
+ rightOverhang: number;
193
+ coveringType: "generic" | "shingle" | "metal-panel";
194
+ beamWidth: number;
195
+ beamHeight: number;
196
+ ledgerDepth: number;
197
+ ledgerHeight: number;
198
+ rafterWidth: number;
199
+ rafterHeight: number;
200
+ rafterSpacing: number;
201
+ rafterEndInset: number;
202
+ framingStrategy: "hidden" | "rafters" | "purlins" | "covering-specific";
203
+ purlinWidth: number;
204
+ purlinHeight: number;
205
+ purlinSpacing: number;
206
+ postWidth: number;
207
+ postDepth: number;
208
+ postCount: number;
209
+ postLayoutMode: "count" | "target-spacing";
210
+ postSpacing: number;
211
+ postInset: number;
212
+ omittedPostSlots: {
213
+ side: "low" | "high";
214
+ index: number;
215
+ layoutCount: number;
212
216
  }[];
213
- autoFromWalls: boolean;
217
+ postBracing: "none" | "knee";
218
+ footingStyle: "none" | "base-plate" | "concrete-pad";
219
+ type: "lean-to-extension";
214
220
  name?: string | undefined;
215
221
  camera?: {
216
222
  position: [number, number, number];
@@ -219,43 +225,33 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
219
225
  fov?: number | undefined;
220
226
  zoom?: number | undefined;
221
227
  } | undefined;
222
- material?: {
223
- id?: string | undefined;
224
- preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
225
- properties?: {
226
- color: string;
227
- roughness: number;
228
- metalness: number;
229
- opacity: number;
230
- transparent: boolean;
231
- side: "front" | "back" | "double";
232
- } | undefined;
233
- texture?: {
234
- url: string;
235
- repeat?: [number, number] | undefined;
236
- scale?: number | undefined;
237
- } | undefined;
238
- } | undefined;
239
- materialPreset?: string | undefined;
240
228
  slots?: Record<string, string> | undefined;
241
- height?: number | undefined;
229
+ hostSlabId?: `slab_${string}` | undefined;
230
+ hostSlabEdgeIndex?: number | undefined;
231
+ hostSlabEdgeT?: number | undefined;
232
+ spanArcCenterZ?: number | undefined;
233
+ spanArcRadius?: number | undefined;
234
+ hostRoofId?: `roof_${string}` | undefined;
235
+ hostRoofSegmentId?: string | undefined;
236
+ hostRoofEdge?: "+X" | "-X" | "+Z" | "-Z" | undefined;
237
+ hostRoofEdgeRange?: [number, number] | undefined;
242
238
  } | {
243
239
  object: "node";
240
+ position: [number, number, number];
241
+ id: `column_${string}`;
244
242
  parentId: string | null;
245
243
  visible: boolean;
246
- metadata: import("zod").JSONType;
247
- id: `column_${string}`;
248
- type: "column";
249
- position: [number, number, number];
244
+ metadata: Record<string, unknown>;
250
245
  rotation: number;
246
+ children: string[];
247
+ width: number;
248
+ depth: number;
249
+ height: number;
250
+ baseHeight: number;
251
251
  style: "plain" | "faceted" | "fluted" | "lathe-turned" | "dravidian-carved" | "cluster";
252
252
  crossSection: "round" | "square" | "rectangular" | "octagonal" | "sixteen-sided";
253
- height: number;
254
253
  radius: number;
255
- width: number;
256
- depth: number;
257
254
  edgeSoftness: number;
258
- baseHeight: number;
259
255
  capitalHeight: number;
260
256
  shaftProfile: "straight" | "tapered" | "bulged" | "baluster" | "hourglass";
261
257
  shaftTaper: number;
@@ -293,7 +289,7 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
293
289
  pendantCount: number;
294
290
  capitalCarvingLevel: number;
295
291
  ringCount: number;
296
- ringPlacement: "ends" | "even" | "top" | "bottom";
292
+ ringPlacement: "top" | "ends" | "even" | "bottom";
297
293
  ringThickness: number;
298
294
  ringSpread: number;
299
295
  fluteCount: number;
@@ -305,9 +301,9 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
305
301
  panelInsetDepth: number;
306
302
  panelShape: "rectangle" | "arched" | "diamond";
307
303
  latheRingCount: number;
308
- latheRingSpacing: "ends" | "even" | "top" | "bottom";
304
+ latheRingSpacing: "top" | "ends" | "even" | "bottom";
309
305
  carvingLevel: number;
310
- carvingPlacement: "shaft" | "base" | "capital" | "all";
306
+ carvingPlacement: "base" | "shaft" | "capital" | "all";
311
307
  lowerBandEnabled: boolean;
312
308
  lowerBandHeight: number;
313
309
  lowerBandCarvingLevel: number;
@@ -319,6 +315,7 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
319
315
  braceBottomSpread: number;
320
316
  braceTopSpread: number;
321
317
  bracePlateEnabled: boolean;
318
+ type: "column";
322
319
  name?: string | undefined;
323
320
  camera?: {
324
321
  position: [number, number, number];
@@ -328,6 +325,7 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
328
325
  zoom?: number | undefined;
329
326
  } | undefined;
330
327
  supportSlabId?: string | undefined;
328
+ slots?: Record<string, string> | undefined;
331
329
  material?: {
332
330
  id?: string | undefined;
333
331
  preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
@@ -346,19 +344,47 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
346
344
  } | undefined;
347
345
  } | undefined;
348
346
  materialPreset?: string | undefined;
349
- slots?: Record<string, string> | undefined;
350
347
  } | {
351
348
  object: "node";
349
+ mode: "radius" | "linear" | "diameter" | "center-mark" | "chord" | "arc-length" | "angular" | "coordinate";
350
+ id: `construction-dimension_${string}`;
352
351
  parentId: string | null;
353
352
  visible: boolean;
354
- metadata: import("zod").JSONType;
355
- id: `wall_${string}`;
356
- type: "wall";
357
- children: (`item_${string}` | `door_${string}` | `window_${string}`)[];
358
- start: [number, number];
359
- end: [number, number];
360
- frontSide: "unknown" | "interior" | "exterior";
361
- backSide: "unknown" | "interior" | "exterior";
353
+ metadata: Record<string, unknown>;
354
+ anchors: ([number, number, number] | {
355
+ kind: "feature";
356
+ reference: {
357
+ nodeId: string;
358
+ featureId: string;
359
+ parameters?: Record<string, string | number | boolean> | undefined;
360
+ };
361
+ fallback: [number, number, number];
362
+ })[];
363
+ baseline: {
364
+ origin: [number, number];
365
+ direction: [number, number];
366
+ };
367
+ chainMode: "point-to-point" | "continuous";
368
+ featureCount: number;
369
+ showCenterMark: boolean;
370
+ prefix: string;
371
+ suffix: string;
372
+ textOverride: string | null;
373
+ datumPolicy: "centerline" | "wall-face" | "structural-face" | "finish-face";
374
+ terminator: "architectural-tick" | "filled-arrow" | "open-arrow" | "dot";
375
+ textPosition: "above" | "centered";
376
+ imperialPrecision: "1" | "1/2" | "1/4" | "1/8" | "1/16";
377
+ metricNotation: "meters" | "millimeters";
378
+ extensionStartGap: number;
379
+ extensionOvershoot: number;
380
+ drawingType: "floor-plan" | "foundation-plan" | "reflected-ceiling-plan" | "roof-plan" | "site-plan";
381
+ drawingOverrides: {
382
+ drawingType: "floor-plan" | "foundation-plan" | "reflected-ceiling-plan" | "roof-plan" | "site-plan";
383
+ presentation: "shown" | "omit" | "controlled";
384
+ suppressedSegmentIndexes: number[];
385
+ }[];
386
+ controllingDimensionId: `construction-dimension_${string}` | null;
387
+ type: "construction-dimension";
362
388
  name?: string | undefined;
363
389
  camera?: {
364
390
  position: [number, number, number];
@@ -367,10 +393,88 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
367
393
  fov?: number | undefined;
368
394
  zoom?: number | undefined;
369
395
  } | undefined;
370
- material?: {
371
- id?: string | undefined;
372
- preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
373
- properties?: {
396
+ } | {
397
+ object: "node";
398
+ position: [number, number, number];
399
+ id: `block_${string}`;
400
+ parentId: string | null;
401
+ visible: boolean;
402
+ metadata: Record<string, unknown>;
403
+ rotation: number;
404
+ children: string[];
405
+ topology: {
406
+ vertices: {
407
+ id: string;
408
+ position: [number, number, number];
409
+ }[];
410
+ edges: {
411
+ id: string;
412
+ vertexIds: [string, string];
413
+ }[];
414
+ faces: {
415
+ id: string;
416
+ vertexIds: string[];
417
+ materialSlot: string;
418
+ }[];
419
+ };
420
+ slots: Record<string, string>;
421
+ slotNames: Record<string, string>;
422
+ type: "block";
423
+ name?: string | undefined;
424
+ camera?: {
425
+ position: [number, number, number];
426
+ target: [number, number, number];
427
+ mode: "perspective" | "orthographic";
428
+ fov?: number | undefined;
429
+ zoom?: number | undefined;
430
+ } | undefined;
431
+ supportSlabId?: string | undefined;
432
+ } | {
433
+ object: "node";
434
+ id: `structural-grid_${string}`;
435
+ parentId: string | null;
436
+ visible: boolean;
437
+ metadata: Record<string, unknown>;
438
+ label: string;
439
+ start: [number, number];
440
+ end: [number, number];
441
+ showStartBubble: boolean;
442
+ showEndBubble: boolean;
443
+ type: "structural-grid";
444
+ name?: string | undefined;
445
+ camera?: {
446
+ position: [number, number, number];
447
+ target: [number, number, number];
448
+ mode: "perspective" | "orthographic";
449
+ fov?: number | undefined;
450
+ zoom?: number | undefined;
451
+ } | undefined;
452
+ } | {
453
+ object: "node";
454
+ id: `wall_${string}`;
455
+ parentId: string | null;
456
+ visible: boolean;
457
+ metadata: Record<string, unknown>;
458
+ children: (`item_${string}` | `procedural-item_${string}` | `door_${string}` | `window_${string}` | `leanto_${string}`)[];
459
+ start: [number, number];
460
+ end: [number, number];
461
+ frontSide: "unknown" | "interior" | "exterior";
462
+ backSide: "unknown" | "interior" | "exterior";
463
+ type: "wall";
464
+ name?: string | undefined;
465
+ camera?: {
466
+ position: [number, number, number];
467
+ target: [number, number, number];
468
+ mode: "perspective" | "orthographic";
469
+ fov?: number | undefined;
470
+ zoom?: number | undefined;
471
+ } | undefined;
472
+ supportSlabId?: string | undefined;
473
+ slots?: Record<string, string> | undefined;
474
+ material?: {
475
+ id?: string | undefined;
476
+ preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
477
+ properties?: {
374
478
  color: string;
375
479
  roughness: number;
376
480
  metalness: number;
@@ -385,6 +489,9 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
385
489
  } | undefined;
386
490
  } | undefined;
387
491
  materialPreset?: string | undefined;
492
+ height?: number | undefined;
493
+ thickness?: number | undefined;
494
+ fillToTerrain?: boolean | undefined;
388
495
  interiorMaterial?: {
389
496
  id?: string | undefined;
390
497
  preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
@@ -421,13 +528,8 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
421
528
  } | undefined;
422
529
  } | undefined;
423
530
  exteriorMaterialPreset?: string | undefined;
424
- slots?: Record<string, string> | undefined;
425
- thickness?: number | undefined;
426
- height?: number | undefined;
427
531
  curveOffset?: number | undefined;
428
- supportSlabId?: string | undefined;
429
532
  supportOffset?: number | undefined;
430
- fillToTerrain?: boolean | undefined;
431
533
  faceBands?: {
432
534
  enabled: boolean;
433
535
  count: number;
@@ -461,27 +563,27 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
461
563
  } | undefined;
462
564
  } | {
463
565
  object: "node";
566
+ id: `fence_${string}`;
464
567
  parentId: string | null;
465
568
  visible: boolean;
466
- metadata: import("zod").JSONType;
467
- id: `fence_${string}`;
468
- type: "fence";
469
- start: [number, number];
470
- end: [number, number];
569
+ metadata: Record<string, unknown>;
570
+ color: string;
471
571
  height: number;
472
- thickness: number;
473
572
  baseHeight: number;
573
+ style: "slat" | "rail" | "privacy" | "horizontal";
574
+ baseStyle: "floating" | "grounded";
575
+ thickness: number;
474
576
  postSpacing: number;
577
+ start: [number, number];
578
+ end: [number, number];
475
579
  postSize: number;
476
580
  topRailHeight: number;
477
581
  groundClearance: number;
478
582
  edgeInset: number;
479
583
  slatGap: number;
480
584
  postCap: "flat" | "none" | "pyramid";
481
- baseStyle: "floating" | "grounded";
482
585
  showInfill: boolean;
483
- color: string;
484
- style: "slat" | "rail" | "privacy" | "horizontal";
586
+ type: "fence";
485
587
  name?: string | undefined;
486
588
  camera?: {
487
589
  position: [number, number, number];
@@ -490,6 +592,9 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
490
592
  fov?: number | undefined;
491
593
  zoom?: number | undefined;
492
594
  } | undefined;
595
+ path?: [number, number][] | undefined;
596
+ supportSlabId?: string | undefined;
597
+ slots?: Record<string, string> | undefined;
493
598
  material?: {
494
599
  id?: string | undefined;
495
600
  preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
@@ -508,127 +613,43 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
508
613
  } | undefined;
509
614
  } | undefined;
510
615
  materialPreset?: string | undefined;
511
- slots?: Record<string, string> | undefined;
512
- path?: [number, number][] | undefined;
513
- tangents?: ([number, number] | null)[] | undefined;
514
- supportSlabId?: string | undefined;
515
- supportOffset?: number | undefined;
516
616
  curveOffset?: number | undefined;
617
+ supportOffset?: number | undefined;
618
+ tangents?: ([number, number] | null)[] | undefined;
517
619
  } | {
518
620
  object: "node";
621
+ position: [number, number, number];
622
+ id: `cabinet_${string}`;
519
623
  parentId: string | null;
520
624
  visible: boolean;
521
- metadata: import("zod").JSONType;
522
- id: `construction-dimension_${string}`;
523
- type: "construction-dimension";
524
- anchors: ([number, number, number] | {
525
- kind: "feature";
526
- reference: {
527
- nodeId: string;
528
- featureId: string;
529
- parameters?: Record<string, string | number | boolean> | undefined;
530
- };
531
- fallback: [number, number, number];
532
- })[];
533
- baseline: {
534
- origin: [number, number];
535
- direction: [number, number];
536
- };
537
- chainMode: "point-to-point" | "continuous";
538
- mode: "radius" | "linear" | "diameter" | "center-mark" | "chord" | "arc-length" | "angular" | "coordinate";
539
- featureCount: number;
540
- showCenterMark: boolean;
541
- prefix: string;
542
- suffix: string;
543
- textOverride: string | null;
544
- datumPolicy: "centerline" | "wall-face" | "structural-face" | "finish-face";
545
- terminator: "architectural-tick" | "filled-arrow" | "open-arrow" | "dot";
546
- textPosition: "above" | "centered";
547
- imperialPrecision: "1" | "1/2" | "1/4" | "1/8" | "1/16";
548
- metricNotation: "meters" | "millimeters";
549
- extensionStartGap: number;
550
- extensionOvershoot: number;
551
- drawingType: "floor-plan" | "foundation-plan" | "reflected-ceiling-plan" | "roof-plan" | "site-plan";
552
- drawingOverrides: {
553
- drawingType: "floor-plan" | "foundation-plan" | "reflected-ceiling-plan" | "roof-plan" | "site-plan";
554
- presentation: "shown" | "omit" | "controlled";
555
- suppressedSegmentIndexes: number[];
556
- }[];
557
- controllingDimensionId: `construction-dimension_${string}` | null;
558
- name?: string | undefined;
559
- camera?: {
560
- position: [number, number, number];
561
- target: [number, number, number];
562
- mode: "perspective" | "orthographic";
563
- fov?: number | undefined;
564
- zoom?: number | undefined;
565
- } | undefined;
566
- } | {
567
- object: "node";
568
- parentId: string | null;
569
- visible: boolean;
570
- metadata: import("zod").JSONType;
571
- id: `structural-grid_${string}`;
572
- type: "structural-grid";
573
- start: [number, number];
574
- end: [number, number];
575
- label: string;
576
- showStartBubble: boolean;
577
- showEndBubble: boolean;
578
- name?: string | undefined;
579
- camera?: {
580
- position: [number, number, number];
581
- target: [number, number, number];
582
- mode: "perspective" | "orthographic";
583
- fov?: number | undefined;
584
- zoom?: number | undefined;
585
- } | undefined;
586
- } | {
587
- object: "node";
588
- parentId: string | null;
589
- visible: boolean;
590
- id: `zone_${string}`;
591
- type: "zone";
592
- name: string;
593
- polygon: [number, number][];
594
- autoFromWalls: boolean;
595
- boundaryWallIds: `wall_${string}`[];
596
- spaceRole: "generic" | "room";
597
- roomNumber: string;
598
- enclosureStatus: "auto" | "enclosed" | "open";
599
- floorFinish: string;
600
- wallFinish: string;
601
- ceilingFinish: string;
602
- ceilingHeight: number;
603
- occupancy: string;
604
- clearDimensionPolicy: "none" | "inside-faces" | "finish-faces";
605
- color: string;
606
- metadata: import("zod").JSONType;
607
- camera?: {
608
- position: [number, number, number];
609
- target: [number, number, number];
610
- mode: "perspective" | "orthographic";
611
- fov?: number | undefined;
612
- zoom?: number | undefined;
613
- } | undefined;
614
- } | {
615
- object: "node";
616
- parentId: string | null;
617
- visible: boolean;
618
- metadata: import("zod").JSONType;
619
- id: `slab_${string}`;
620
- type: "slab";
621
- polygon: [number, number][];
622
- holes: [number, number][][];
623
- holeMetadata: {
624
- source: "stair" | "elevator" | "manual";
625
- stairId?: string | undefined;
626
- elevatorId?: string | undefined;
627
- }[];
628
- elevation: number;
629
- thickness: number;
630
- recessed: boolean;
631
- autoFromWalls: boolean;
625
+ metadata: Record<string, unknown>;
626
+ rotation: number;
627
+ children: string[];
628
+ width: number;
629
+ depth: number;
630
+ operationState: number;
631
+ runTier: "wall" | "base" | "tall";
632
+ withWaterfall: boolean;
633
+ withFinishedEnds: boolean;
634
+ carcassHeight: number;
635
+ plinthHeight: number;
636
+ toeKickDepth: number;
637
+ boardThickness: number;
638
+ countertopThickness: number;
639
+ countertopOverhang: number;
640
+ countertopBackOverhang: number;
641
+ withFinishedBack: boolean;
642
+ frontThickness: number;
643
+ frontGap: number;
644
+ frontStyle: "slab" | "shaker" | "raised-arch";
645
+ panelReady: boolean;
646
+ handleStyle: "none" | "bar" | "cutout" | "hole" | "knob";
647
+ handlePosition: "top" | "auto" | "center";
648
+ frontOverlay: "full" | "inset";
649
+ withBottomPanel: boolean;
650
+ showPlinth: boolean;
651
+ withCountertop: boolean;
652
+ type: "cabinet";
632
653
  name?: string | undefined;
633
654
  camera?: {
634
655
  position: [number, number, number];
@@ -637,6 +658,8 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
637
658
  fov?: number | undefined;
638
659
  zoom?: number | undefined;
639
660
  } | undefined;
661
+ supportSlabId?: string | undefined;
662
+ slots?: Record<string, string> | undefined;
640
663
  material?: {
641
664
  id?: string | undefined;
642
665
  preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
@@ -655,393 +678,129 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
655
678
  } | undefined;
656
679
  } | undefined;
657
680
  materialPreset?: string | undefined;
658
- slots?: Record<string, string> | undefined;
659
- recessedRimElevation?: number | undefined;
660
- fillToTerrain?: boolean | undefined;
661
- } | {
662
- object: "node";
663
- parentId: string | null;
664
- visible: boolean;
665
- metadata: import("zod").JSONType;
666
- id: `roof_${string}`;
667
- type: "roof";
668
- position: [number, number, number];
669
- rotation: number;
670
- children: `rseg_${string}`[];
671
- name?: string | undefined;
672
- camera?: {
673
- position: [number, number, number];
674
- target: [number, number, number];
675
- mode: "perspective" | "orthographic";
676
- fov?: number | undefined;
677
- zoom?: number | undefined;
681
+ barLedge?: {
682
+ edge: "back" | "right" | "left";
683
+ height: number;
684
+ depth: number;
678
685
  } | undefined;
679
- material?: {
680
- id?: string | undefined;
681
- preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
682
- properties?: {
683
- color: string;
684
- roughness: number;
685
- metalness: number;
686
- opacity: number;
687
- transparent: boolean;
688
- side: "front" | "back" | "double";
689
- } | undefined;
690
- texture?: {
691
- url: string;
692
- repeat?: [number, number] | undefined;
693
- scale?: number | undefined;
694
- } | undefined;
695
- } | undefined;
696
- materialPreset?: string | undefined;
697
- topMaterial?: {
698
- id?: string | undefined;
699
- preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
700
- properties?: {
701
- color: string;
702
- roughness: number;
703
- metalness: number;
704
- opacity: number;
705
- transparent: boolean;
706
- side: "front" | "back" | "double";
707
- } | undefined;
708
- texture?: {
709
- url: string;
710
- repeat?: [number, number] | undefined;
711
- scale?: number | undefined;
712
- } | undefined;
713
- } | undefined;
714
- topMaterialPreset?: string | undefined;
715
- edgeMaterial?: {
716
- id?: string | undefined;
717
- preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
718
- properties?: {
719
- color: string;
720
- roughness: number;
721
- metalness: number;
722
- opacity: number;
723
- transparent: boolean;
724
- side: "front" | "back" | "double";
725
- } | undefined;
726
- texture?: {
727
- url: string;
728
- repeat?: [number, number] | undefined;
729
- scale?: number | undefined;
730
- } | undefined;
731
- } | undefined;
732
- edgeMaterialPreset?: string | undefined;
733
- wallMaterial?: {
734
- id?: string | undefined;
735
- preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
736
- properties?: {
737
- color: string;
738
- roughness: number;
739
- metalness: number;
740
- opacity: number;
741
- transparent: boolean;
742
- side: "front" | "back" | "double";
743
- } | undefined;
744
- texture?: {
745
- url: string;
746
- repeat?: [number, number] | undefined;
747
- scale?: number | undefined;
748
- } | undefined;
749
- } | undefined;
750
- wallMaterialPreset?: string | undefined;
751
- } | {
752
- object: "node";
753
- parentId: string | null;
754
- visible: boolean;
755
- metadata: import("zod").JSONType;
756
- id: `stair_${string}`;
757
- type: "stair";
758
- position: [number, number, number];
759
- rotation: number;
760
- stairType: "straight" | "spiral" | "curved";
761
- fromLevelId: string | null;
762
- toLevelId: string | null;
763
- slabOpeningMode: "none" | "destination";
764
- openingOffset: number;
765
- width: number;
766
- stepCount: number;
767
- thickness: number;
768
- fillToFloor: boolean;
769
- innerRadius: number;
770
- sweepAngle: number;
771
- topLandingMode: "none" | "integrated";
772
- topLandingDepth: number;
773
- showCenterColumn: boolean;
774
- showStepSupports: boolean;
775
- railingMode: "right" | "left" | "none" | "both";
776
- railingHeight: number;
777
- children: `sseg_${string}`[];
778
- name?: string | undefined;
779
- camera?: {
780
- position: [number, number, number];
781
- target: [number, number, number];
782
- mode: "perspective" | "orthographic";
783
- fov?: number | undefined;
784
- zoom?: number | undefined;
785
- } | undefined;
786
- material?: {
787
- id?: string | undefined;
788
- preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
789
- properties?: {
790
- color: string;
791
- roughness: number;
792
- metalness: number;
793
- opacity: number;
794
- transparent: boolean;
795
- side: "front" | "back" | "double";
796
- } | undefined;
797
- texture?: {
798
- url: string;
799
- repeat?: [number, number] | undefined;
800
- scale?: number | undefined;
801
- } | undefined;
802
- } | undefined;
803
- materialPreset?: string | undefined;
804
- railingMaterial?: {
805
- id?: string | undefined;
806
- preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
807
- properties?: {
808
- color: string;
809
- roughness: number;
810
- metalness: number;
811
- opacity: number;
812
- transparent: boolean;
813
- side: "front" | "back" | "double";
814
- } | undefined;
815
- texture?: {
816
- url: string;
817
- repeat?: [number, number] | undefined;
818
- scale?: number | undefined;
819
- } | undefined;
820
- } | undefined;
821
- railingMaterialPreset?: string | undefined;
822
- treadMaterial?: {
823
- id?: string | undefined;
824
- preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
825
- properties?: {
826
- color: string;
827
- roughness: number;
828
- metalness: number;
829
- opacity: number;
830
- transparent: boolean;
831
- side: "front" | "back" | "double";
832
- } | undefined;
833
- texture?: {
834
- url: string;
835
- repeat?: [number, number] | undefined;
836
- scale?: number | undefined;
837
- } | undefined;
838
- } | undefined;
839
- treadMaterialPreset?: string | undefined;
840
- sideMaterial?: {
841
- id?: string | undefined;
842
- preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
843
- properties?: {
844
- color: string;
845
- roughness: number;
846
- metalness: number;
847
- opacity: number;
848
- transparent: boolean;
849
- side: "front" | "back" | "double";
850
- } | undefined;
851
- texture?: {
852
- url: string;
853
- repeat?: [number, number] | undefined;
854
- scale?: number | undefined;
855
- } | undefined;
856
- } | undefined;
857
- sideMaterialPreset?: string | undefined;
858
- slots?: Record<string, string> | undefined;
859
- supportSlabId?: string | undefined;
860
- deckSlabId?: string | undefined;
861
- totalRise?: number | undefined;
862
- } | {
863
- object: "node";
864
- parentId: string | null;
865
- visible: boolean;
866
- metadata: import("zod").JSONType;
867
- id: `scan_${string}`;
868
- type: "scan";
869
- url: string;
870
- position: [number, number, number];
871
- rotation: [number, number, number];
872
- scale: number;
873
- opacity: number;
874
- name?: string | undefined;
875
- camera?: {
876
- position: [number, number, number];
877
- target: [number, number, number];
878
- mode: "perspective" | "orthographic";
879
- fov?: number | undefined;
880
- zoom?: number | undefined;
881
- } | undefined;
882
- } | {
883
- object: "node";
884
- parentId: string | null;
885
- visible: boolean;
886
- metadata: import("zod").JSONType;
887
- id: `guide_${string}`;
888
- type: "guide";
889
- url: string;
890
- position: [number, number, number];
891
- rotation: [number, number, number];
892
- scale: number;
893
- opacity: number;
894
- scaleReference: {
895
- start: [number, number];
896
- end: [number, number];
897
- realLengthMeters: number;
898
- measuredLengthUnits: number;
899
- metersPerUnit: number;
900
- label: string;
901
- } | null;
902
- name?: string | undefined;
903
- camera?: {
904
- position: [number, number, number];
905
- target: [number, number, number];
906
- mode: "perspective" | "orthographic";
907
- fov?: number | undefined;
908
- zoom?: number | undefined;
909
- } | undefined;
910
- } | {
911
- object: "node";
912
- parentId: string | null;
913
- visible: boolean;
914
- metadata: import("zod").JSONType;
915
- id: `measurement_${string}`;
916
- type: "measurement";
917
- measurement: {
918
- kind: "distance";
919
- points: [[number, number, number] | {
920
- kind: "feature";
921
- reference: {
922
- nodeId: string;
923
- featureId: string;
924
- parameters?: Record<string, string | number | boolean> | undefined;
925
- };
926
- fallback: [number, number, number];
927
- }, [number, number, number] | {
928
- kind: "feature";
929
- reference: {
930
- nodeId: string;
931
- featureId: string;
932
- parameters?: Record<string, string | number | boolean> | undefined;
933
- };
934
- fallback: [number, number, number];
935
- }];
686
+ stack?: ({
687
+ type: "shelf";
688
+ id: string;
689
+ shelfCount?: number | undefined;
690
+ height?: number | undefined;
936
691
  } | {
937
- kind: "angle";
938
- points: [[number, number, number] | {
939
- kind: "feature";
940
- reference: {
941
- nodeId: string;
942
- featureId: string;
943
- parameters?: Record<string, string | number | boolean> | undefined;
944
- };
945
- fallback: [number, number, number];
946
- }, [number, number, number] | {
947
- kind: "feature";
948
- reference: {
949
- nodeId: string;
950
- featureId: string;
951
- parameters?: Record<string, string | number | boolean> | undefined;
952
- };
953
- fallback: [number, number, number];
954
- }, [number, number, number] | {
955
- kind: "feature";
956
- reference: {
957
- nodeId: string;
958
- featureId: string;
959
- parameters?: Record<string, string | number | boolean> | undefined;
960
- };
961
- fallback: [number, number, number];
962
- }];
692
+ type: "drawer";
693
+ id: string;
694
+ drawerCount?: number | undefined;
695
+ height?: number | undefined;
963
696
  } | {
964
- kind: "area";
965
- base: ([number, number, number] | {
966
- kind: "feature";
967
- reference: {
968
- nodeId: string;
969
- featureId: string;
970
- parameters?: Record<string, string | number | boolean> | undefined;
971
- };
972
- fallback: [number, number, number];
973
- })[];
697
+ type: "door";
698
+ id: string;
699
+ doorType?: "glass" | "double" | "single-left" | "single-right" | undefined;
700
+ shelfCount?: number | undefined;
701
+ height?: number | undefined;
974
702
  } | {
975
- kind: "perimeter";
976
- base: ([number, number, number] | {
977
- kind: "feature";
978
- reference: {
979
- nodeId: string;
980
- featureId: string;
981
- parameters?: Record<string, string | number | boolean> | undefined;
982
- };
983
- fallback: [number, number, number];
984
- })[];
703
+ type: "sink";
704
+ id: string;
705
+ sinkLayout?: "double" | "single" | "double-offset" | undefined;
706
+ height?: number | undefined;
985
707
  } | {
986
- kind: "volume";
987
- base: ([number, number, number] | {
988
- kind: "feature";
989
- reference: {
990
- nodeId: string;
991
- featureId: string;
992
- parameters?: Record<string, string | number | boolean> | undefined;
993
- };
994
- fallback: [number, number, number];
995
- })[];
996
- extrusion: [number, number, number];
997
- };
998
- name?: string | undefined;
999
- camera?: {
1000
- position: [number, number, number];
1001
- target: [number, number, number];
1002
- mode: "perspective" | "orthographic";
1003
- fov?: number | undefined;
1004
- zoom?: number | undefined;
1005
- } | undefined;
708
+ type: "oven";
709
+ id: string;
710
+ height?: number | undefined;
711
+ } | {
712
+ type: "microwave";
713
+ id: string;
714
+ height?: number | undefined;
715
+ } | {
716
+ type: "dishwasher";
717
+ id: string;
718
+ height?: number | undefined;
719
+ } | {
720
+ type: "cooktop-gas";
721
+ id: string;
722
+ cooktopLayout?: "gas-2burner" | "gas-4burner" | "gas-5burner-wok" | "gas-6burner" | undefined;
723
+ cooktopBurnersOn?: boolean | undefined;
724
+ cooktopActiveBurners?: number[] | undefined;
725
+ cooktopKnobProgress?: number[] | undefined;
726
+ cooktopShowGrate?: boolean | undefined;
727
+ height?: number | undefined;
728
+ } | {
729
+ type: "cooktop-induction";
730
+ id: string;
731
+ cooktopLayout?: "induction-2zone" | "induction-4zone" | undefined;
732
+ cooktopBurnersOn?: boolean | undefined;
733
+ cooktopActiveBurners?: number[] | undefined;
734
+ cooktopKnobProgress?: number[] | undefined;
735
+ cooktopShowGrate?: boolean | undefined;
736
+ height?: number | undefined;
737
+ } | {
738
+ type: "pull-out-pantry";
739
+ id: string;
740
+ shelfCount?: number | undefined;
741
+ pantryRackStyle?: "glass" | "wire" | "tray" | undefined;
742
+ height?: number | undefined;
743
+ } | {
744
+ type: "fridge-single";
745
+ id: string;
746
+ height?: number | undefined;
747
+ } | {
748
+ type: "fridge-double";
749
+ id: string;
750
+ height?: number | undefined;
751
+ } | {
752
+ type: "fridge-top-freezer";
753
+ id: string;
754
+ height?: number | undefined;
755
+ } | {
756
+ type: "fridge-bottom-freezer";
757
+ id: string;
758
+ height?: number | undefined;
759
+ } | {
760
+ type: "hood-pyramid";
761
+ id: string;
762
+ height?: number | undefined;
763
+ } | {
764
+ type: "hood-curved-glass";
765
+ id: string;
766
+ height?: number | undefined;
767
+ })[] | undefined;
1006
768
  } | {
1007
769
  object: "node";
1008
- parentId: string | null;
1009
- visible: boolean;
1010
- metadata: import("zod").JSONType;
1011
- id: `spawn_${string}`;
1012
- type: "spawn";
1013
770
  position: [number, number, number];
1014
- rotation: number;
1015
- name?: string | undefined;
1016
- camera?: {
1017
- position: [number, number, number];
1018
- target: [number, number, number];
1019
- mode: "perspective" | "orthographic";
1020
- fov?: number | undefined;
1021
- zoom?: number | undefined;
1022
- } | undefined;
1023
- supportSlabId?: string | undefined;
1024
- } | {
1025
- object: "node";
771
+ id: `cabinet-module_${string}`;
1026
772
  parentId: string | null;
1027
773
  visible: boolean;
1028
- metadata: import("zod").JSONType;
1029
- id: `shelf_${string}`;
1030
- type: "shelf";
1031
- children: `item_${string}`[];
1032
- position: [number, number, number];
1033
- rotation: [number, number, number];
774
+ metadata: Record<string, unknown>;
775
+ rotation: number;
776
+ children: string[];
1034
777
  width: number;
1035
778
  depth: number;
1036
- thickness: number;
1037
- height: number;
1038
- style: "wall-shelf" | "bookshelf" | "open-rack" | "cubby";
1039
- rows: number;
1040
- columns: number;
1041
- withBack: boolean;
1042
- withSides: boolean;
1043
- withBottom: boolean;
1044
- bracketStyle: "minimal" | "industrial" | "hidden";
779
+ operationState: number;
780
+ carcassHeight: number;
781
+ plinthHeight: number;
782
+ toeKickDepth: number;
783
+ boardThickness: number;
784
+ countertopThickness: number;
785
+ countertopOverhang: number;
786
+ countertopBackOverhang: number;
787
+ withFinishedBack: boolean;
788
+ frontThickness: number;
789
+ frontGap: number;
790
+ frontStyle: "slab" | "shaker" | "raised-arch";
791
+ panelReady: boolean;
792
+ handleStyle: "none" | "bar" | "cutout" | "hole" | "knob";
793
+ handlePosition: "top" | "auto" | "center";
794
+ frontOverlay: "full" | "inset";
795
+ withBottomPanel: boolean;
796
+ showPlinth: boolean;
797
+ withCountertop: boolean;
798
+ cabinetType: "base" | "tall";
799
+ moduleKind: "standard" | "corner-filler";
800
+ topFinish: "trim" | "none" | "top-cabinet";
801
+ topFinishHeight: number;
802
+ topFinishDepth: number;
803
+ type: "cabinet-module";
1045
804
  name?: string | undefined;
1046
805
  camera?: {
1047
806
  position: [number, number, number];
@@ -1051,6 +810,7 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1051
810
  zoom?: number | undefined;
1052
811
  } | undefined;
1053
812
  supportSlabId?: string | undefined;
813
+ slots?: Record<string, string> | undefined;
1054
814
  material?: {
1055
815
  id?: string | undefined;
1056
816
  preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
@@ -1069,112 +829,159 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1069
829
  } | undefined;
1070
830
  } | undefined;
1071
831
  materialPreset?: string | undefined;
1072
- slots?: Record<string, string> | undefined;
1073
- } | {
1074
- object: "node";
1075
- parentId: string | null;
1076
- visible: boolean;
1077
- metadata: import("zod").JSONType;
1078
- id: `duct-segment_${string}`;
1079
- type: "duct-segment";
1080
- path: [number, number, number][];
1081
- shape: "round" | "rect" | "oval";
1082
- diameter: number;
1083
- width: number;
1084
- height: number;
1085
- roll: number;
1086
- ductMaterial: "spiral" | "sheet-metal" | "flex" | "duct-board";
1087
- seamDetail: boolean;
1088
- insulated: boolean;
1089
- insulationR: number;
1090
- system: "supply" | "return";
1091
- name?: string | undefined;
1092
- camera?: {
1093
- position: [number, number, number];
1094
- target: [number, number, number];
1095
- mode: "perspective" | "orthographic";
1096
- fov?: number | undefined;
1097
- zoom?: number | undefined;
1098
- } | undefined;
1099
- slots?: Record<string, string> | undefined;
1100
- } | {
1101
- object: "node";
1102
- parentId: string | null;
1103
- visible: boolean;
1104
- metadata: import("zod").JSONType;
1105
- id: `duct-fitting_${string}`;
1106
- type: "duct-fitting";
1107
- position: [number, number, number];
1108
- rotation: [number, number, number];
1109
- fittingType: "elbow" | "tee" | "cross" | "reducer" | "transition";
1110
- shape: "round" | "rect" | "oval";
1111
- width: number;
1112
- height: number;
1113
- shape2: "round" | "rect" | "oval";
1114
- width2: number;
1115
- height2: number;
1116
- angle: number;
1117
- branchAngle: number;
1118
- diameter: number;
1119
- diameter2: number;
1120
- ductMaterial: "sheet-metal" | "flex" | "duct-board";
1121
- system: "supply" | "return";
1122
- name?: string | undefined;
1123
- camera?: {
1124
- position: [number, number, number];
1125
- target: [number, number, number];
1126
- mode: "perspective" | "orthographic";
1127
- fov?: number | undefined;
1128
- zoom?: number | undefined;
1129
- } | undefined;
1130
- slots?: Record<string, string> | undefined;
832
+ stack?: ({
833
+ type: "shelf";
834
+ id: string;
835
+ shelfCount?: number | undefined;
836
+ height?: number | undefined;
837
+ } | {
838
+ type: "drawer";
839
+ id: string;
840
+ drawerCount?: number | undefined;
841
+ height?: number | undefined;
842
+ } | {
843
+ type: "door";
844
+ id: string;
845
+ doorType?: "glass" | "double" | "single-left" | "single-right" | undefined;
846
+ shelfCount?: number | undefined;
847
+ height?: number | undefined;
848
+ } | {
849
+ type: "sink";
850
+ id: string;
851
+ sinkLayout?: "double" | "single" | "double-offset" | undefined;
852
+ height?: number | undefined;
853
+ } | {
854
+ type: "oven";
855
+ id: string;
856
+ height?: number | undefined;
857
+ } | {
858
+ type: "microwave";
859
+ id: string;
860
+ height?: number | undefined;
861
+ } | {
862
+ type: "dishwasher";
863
+ id: string;
864
+ height?: number | undefined;
865
+ } | {
866
+ type: "cooktop-gas";
867
+ id: string;
868
+ cooktopLayout?: "gas-2burner" | "gas-4burner" | "gas-5burner-wok" | "gas-6burner" | undefined;
869
+ cooktopBurnersOn?: boolean | undefined;
870
+ cooktopActiveBurners?: number[] | undefined;
871
+ cooktopKnobProgress?: number[] | undefined;
872
+ cooktopShowGrate?: boolean | undefined;
873
+ height?: number | undefined;
874
+ } | {
875
+ type: "cooktop-induction";
876
+ id: string;
877
+ cooktopLayout?: "induction-2zone" | "induction-4zone" | undefined;
878
+ cooktopBurnersOn?: boolean | undefined;
879
+ cooktopActiveBurners?: number[] | undefined;
880
+ cooktopKnobProgress?: number[] | undefined;
881
+ cooktopShowGrate?: boolean | undefined;
882
+ height?: number | undefined;
883
+ } | {
884
+ type: "pull-out-pantry";
885
+ id: string;
886
+ shelfCount?: number | undefined;
887
+ pantryRackStyle?: "glass" | "wire" | "tray" | undefined;
888
+ height?: number | undefined;
889
+ } | {
890
+ type: "fridge-single";
891
+ id: string;
892
+ height?: number | undefined;
893
+ } | {
894
+ type: "fridge-double";
895
+ id: string;
896
+ height?: number | undefined;
897
+ } | {
898
+ type: "fridge-top-freezer";
899
+ id: string;
900
+ height?: number | undefined;
901
+ } | {
902
+ type: "fridge-bottom-freezer";
903
+ id: string;
904
+ height?: number | undefined;
905
+ } | {
906
+ type: "hood-pyramid";
907
+ id: string;
908
+ height?: number | undefined;
909
+ } | {
910
+ type: "hood-curved-glass";
911
+ id: string;
912
+ height?: number | undefined;
913
+ })[] | undefined;
914
+ openSide?: "right" | "left" | undefined;
915
+ cornerShelf?: boolean | undefined;
1131
916
  } | {
1132
917
  object: "node";
1133
- parentId: string | null;
1134
- visible: boolean;
1135
- metadata: import("zod").JSONType;
1136
- id: `duct-terminal_${string}`;
1137
- type: "duct-terminal";
1138
918
  position: [number, number, number];
1139
- rotation: number;
1140
- terminalType: "supply-register" | "diffuser" | "return-grille";
1141
- mount: "wall" | "ceiling" | "floor";
1142
- width: number;
1143
- depth: number;
1144
- collarShape: "round" | "rect" | "oval";
1145
- collarDiameter: number;
1146
- collarWidth: number;
1147
- collarHeight: number;
1148
- name?: string | undefined;
1149
- camera?: {
1150
- position: [number, number, number];
1151
- target: [number, number, number];
1152
- mode: "perspective" | "orthographic";
1153
- fov?: number | undefined;
1154
- zoom?: number | undefined;
1155
- } | undefined;
1156
- supportSlabId?: string | undefined;
1157
- } | {
1158
- object: "node";
919
+ id: `item_${string}`;
1159
920
  parentId: string | null;
1160
921
  visible: boolean;
1161
- metadata: import("zod").JSONType;
1162
- id: `hvac-equipment_${string}`;
1163
- type: "hvac-equipment";
1164
- position: [number, number, number];
1165
- rotation: number;
1166
- equipmentType: "furnace" | "air-handler" | "condenser";
1167
- width: number;
1168
- depth: number;
1169
- height: number;
1170
- supplyShape: "round" | "rect" | "oval";
1171
- returnShape: "round" | "rect" | "oval";
1172
- supplyDiameter: number;
1173
- returnDiameter: number;
1174
- supplyWidth: number;
1175
- supplyHeight: number;
1176
- returnWidth: number;
1177
- returnHeight: number;
922
+ metadata: Record<string, unknown>;
923
+ scale: [number, number, number];
924
+ rotation: [number, number, number];
925
+ children: string[];
926
+ asset: {
927
+ id: string;
928
+ category: string;
929
+ name: string;
930
+ thumbnail: string;
931
+ source: "library" | "community" | "mine";
932
+ src: string;
933
+ dimensions: [number, number, number];
934
+ offset: [number, number, number];
935
+ rotation: [number, number, number];
936
+ scale: [number, number, number];
937
+ floorPlanUrl?: string | undefined;
938
+ isDraft?: boolean | undefined;
939
+ attachTo?: "wall" | "ceiling" | "wall-side" | undefined;
940
+ recessed?: boolean | undefined;
941
+ tags?: string[] | undefined;
942
+ functionTags?: string[] | undefined;
943
+ surface?: {
944
+ height: number;
945
+ } | undefined;
946
+ interactive?: {
947
+ controls: ({
948
+ kind: "toggle";
949
+ label?: string | undefined;
950
+ default?: boolean | undefined;
951
+ } | {
952
+ kind: "slider";
953
+ label: string;
954
+ min: number;
955
+ max: number;
956
+ step: number;
957
+ displayMode: "slider" | "stepper" | "dial";
958
+ unit?: string | undefined;
959
+ default?: number | undefined;
960
+ } | {
961
+ kind: "temperature";
962
+ label: string;
963
+ min: number;
964
+ max: number;
965
+ unit: "C" | "F";
966
+ default?: number | undefined;
967
+ })[];
968
+ effects: ({
969
+ kind: "animation";
970
+ clips: {
971
+ on?: string | undefined;
972
+ off?: string | undefined;
973
+ loop?: string | undefined;
974
+ };
975
+ } | {
976
+ kind: "light";
977
+ color: string;
978
+ intensityRange: [number, number];
979
+ offset: [number, number, number];
980
+ distance?: number | undefined;
981
+ })[];
982
+ } | undefined;
983
+ };
984
+ type: "item";
1178
985
  name?: string | undefined;
1179
986
  camera?: {
1180
987
  position: [number, number, number];
@@ -1183,18 +990,88 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1183
990
  fov?: number | undefined;
1184
991
  zoom?: number | undefined;
1185
992
  } | undefined;
993
+ side?: "front" | "back" | undefined;
1186
994
  supportSlabId?: string | undefined;
995
+ slots?: Record<string, string> | undefined;
996
+ roofSegmentId?: string | undefined;
997
+ wallId?: string | undefined;
998
+ wallT?: number | undefined;
999
+ roofFace?: "front" | "back" | "right" | "left" | undefined;
1000
+ blockFaceId?: string | undefined;
1001
+ collectionIds?: `collection_${string}`[] | undefined;
1187
1002
  } | {
1188
1003
  object: "node";
1004
+ position: [number, number, number];
1005
+ id: `procedural-item_${string}`;
1189
1006
  parentId: string | null;
1190
1007
  visible: boolean;
1191
- metadata: import("zod").JSONType;
1192
- id: `lineset_${string}`;
1193
- type: "lineset";
1194
- path: [number, number, number][];
1195
- suctionDiameter: number;
1196
- liquidDiameter: number;
1197
- insulated: boolean;
1008
+ metadata: Record<string, unknown>;
1009
+ rotation: [number, number, number];
1010
+ children: string[];
1011
+ slots: Record<string, string>;
1012
+ parameters: Record<string, number>;
1013
+ recipe: {
1014
+ version: 1;
1015
+ name: string;
1016
+ description: string;
1017
+ parameters: {
1018
+ id: string;
1019
+ label: string;
1020
+ default: number;
1021
+ min: number;
1022
+ max: number;
1023
+ step: number;
1024
+ unit: "count" | "m" | "rad";
1025
+ part?: string | undefined;
1026
+ axis?: "x" | "y" | "z" | undefined;
1027
+ }[];
1028
+ slots: {
1029
+ id: string;
1030
+ label: string;
1031
+ color: string;
1032
+ finish?: "wood" | "glass" | "metal" | undefined;
1033
+ }[];
1034
+ parts: {
1035
+ id: string;
1036
+ label: string;
1037
+ count: import("../../procedural-items/index.js").Expr;
1038
+ shapes: {
1039
+ id: string;
1040
+ primitive: "box" | "roundedBox" | "cylinder";
1041
+ slot: string;
1042
+ size: [import("../../procedural-items/index.js").Expr, import("../../procedural-items/index.js").Expr, import("../../procedural-items/index.js").Expr];
1043
+ position: [import("../../procedural-items/index.js").Expr, import("../../procedural-items/index.js").Expr, import("../../procedural-items/index.js").Expr];
1044
+ rotation?: [import("../../procedural-items/index.js").Expr, import("../../procedural-items/index.js").Expr, import("../../procedural-items/index.js").Expr] | undefined;
1045
+ radius?: import("../../procedural-items/index.js").Expr | undefined;
1046
+ support?: boolean | undefined;
1047
+ }[];
1048
+ }[];
1049
+ constraints: {
1050
+ left: import("../../procedural-items/index.js").Expr;
1051
+ relation: "lte" | "gte";
1052
+ right: import("../../procedural-items/index.js").Expr;
1053
+ message: string;
1054
+ }[];
1055
+ classification?: {
1056
+ category: string;
1057
+ functionTags: string[];
1058
+ tags: string[];
1059
+ } | undefined;
1060
+ mounting?: {
1061
+ attachTo: "ceiling" | "wall-side";
1062
+ reference: string;
1063
+ } | undefined;
1064
+ surfaces?: {
1065
+ id: string;
1066
+ label: string;
1067
+ position: [import("../../procedural-items/index.js").Expr, import("../../procedural-items/index.js").Expr, import("../../procedural-items/index.js").Expr];
1068
+ size: [import("../../procedural-items/index.js").Expr, import("../../procedural-items/index.js").Expr];
1069
+ part?: string | undefined;
1070
+ rotation?: [import("../../procedural-items/index.js").Expr, import("../../procedural-items/index.js").Expr, import("../../procedural-items/index.js").Expr] | undefined;
1071
+ }[] | undefined;
1072
+ };
1073
+ attachments: Record<string, string>;
1074
+ type: "procedural-item";
1198
1075
  name?: string | undefined;
1199
1076
  camera?: {
1200
1077
  position: [number, number, number];
@@ -1203,15 +1080,25 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1203
1080
  fov?: number | undefined;
1204
1081
  zoom?: number | undefined;
1205
1082
  } | undefined;
1083
+ side?: "front" | "back" | undefined;
1084
+ supportSlabId?: string | undefined;
1085
+ wallId?: string | undefined;
1206
1086
  } | {
1207
1087
  object: "node";
1088
+ position: [number, number, number];
1089
+ id: `imesh_${string}`;
1208
1090
  parentId: string | null;
1209
1091
  visible: boolean;
1210
- metadata: import("zod").JSONType;
1211
- id: `liquid-line_${string}`;
1212
- type: "liquid-line";
1213
- path: [number, number, number][];
1214
- diameter: number;
1092
+ metadata: Record<string, unknown>;
1093
+ rotation: [number, number, number];
1094
+ primitives: {
1095
+ positions: number[];
1096
+ indices: number[];
1097
+ color: string;
1098
+ opacity: number;
1099
+ normals?: number[] | undefined;
1100
+ }[];
1101
+ type: "imported-mesh";
1215
1102
  name?: string | undefined;
1216
1103
  camera?: {
1217
1104
  position: [number, number, number];
@@ -1222,16 +1109,25 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1222
1109
  } | undefined;
1223
1110
  } | {
1224
1111
  object: "node";
1112
+ id: `zone_${string}`;
1113
+ name: string;
1225
1114
  parentId: string | null;
1226
1115
  visible: boolean;
1227
- metadata: import("zod").JSONType;
1228
- id: `pipe-segment_${string}`;
1229
- type: "pipe-segment";
1230
- path: [number, number, number][];
1231
- diameter: number;
1232
- pipeMaterial: "pvc" | "abs" | "cast-iron";
1233
- system: "waste" | "vent";
1234
- name?: string | undefined;
1116
+ metadata: Record<string, unknown>;
1117
+ color: string;
1118
+ polygon: [number, number][];
1119
+ autoFromWalls: boolean;
1120
+ boundaryWallIds: `wall_${string}`[];
1121
+ spaceRole: "generic" | "room";
1122
+ roomNumber: string;
1123
+ enclosureStatus: "auto" | "open" | "enclosed";
1124
+ floorFinish: string;
1125
+ wallFinish: string;
1126
+ ceilingFinish: string;
1127
+ ceilingHeight: number;
1128
+ occupancy: string;
1129
+ clearDimensionPolicy: "none" | "inside-faces" | "finish-faces";
1130
+ type: "zone";
1235
1131
  camera?: {
1236
1132
  position: [number, number, number];
1237
1133
  target: [number, number, number];
@@ -1241,19 +1137,22 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1241
1137
  } | undefined;
1242
1138
  } | {
1243
1139
  object: "node";
1140
+ id: `slab_${string}`;
1244
1141
  parentId: string | null;
1245
1142
  visible: boolean;
1246
- metadata: import("zod").JSONType;
1247
- id: `pipe-fitting_${string}`;
1248
- type: "pipe-fitting";
1249
- position: [number, number, number];
1250
- rotation: [number, number, number];
1251
- fittingType: "elbow" | "cross" | "wye" | "sanitary-tee";
1252
- angle: number;
1253
- diameter: number;
1254
- diameter2: number;
1255
- pipeMaterial: "pvc" | "abs" | "cast-iron";
1256
- system: "waste" | "vent";
1143
+ metadata: Record<string, unknown>;
1144
+ recessed: boolean;
1145
+ polygon: [number, number][];
1146
+ holes: [number, number][][];
1147
+ holeMetadata: {
1148
+ source: "stair" | "elevator" | "manual";
1149
+ stairId?: string | undefined;
1150
+ elevatorId?: string | undefined;
1151
+ }[];
1152
+ autoFromWalls: boolean;
1153
+ elevation: number;
1154
+ thickness: number;
1155
+ type: "slab";
1257
1156
  name?: string | undefined;
1258
1157
  camera?: {
1259
1158
  position: [number, number, number];
@@ -1262,18 +1161,43 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1262
1161
  fov?: number | undefined;
1263
1162
  zoom?: number | undefined;
1264
1163
  } | undefined;
1164
+ slots?: Record<string, string> | undefined;
1165
+ material?: {
1166
+ id?: string | undefined;
1167
+ preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
1168
+ properties?: {
1169
+ color: string;
1170
+ roughness: number;
1171
+ metalness: number;
1172
+ opacity: number;
1173
+ transparent: boolean;
1174
+ side: "front" | "back" | "double";
1175
+ } | undefined;
1176
+ texture?: {
1177
+ url: string;
1178
+ repeat?: [number, number] | undefined;
1179
+ scale?: number | undefined;
1180
+ } | undefined;
1181
+ } | undefined;
1182
+ materialPreset?: string | undefined;
1183
+ recessedRimElevation?: number | undefined;
1184
+ fillToTerrain?: boolean | undefined;
1265
1185
  } | {
1266
1186
  object: "node";
1187
+ id: `ceiling_${string}`;
1267
1188
  parentId: string | null;
1268
1189
  visible: boolean;
1269
- metadata: import("zod").JSONType;
1270
- id: `pipe-trap_${string}`;
1271
- type: "pipe-trap";
1272
- position: [number, number, number];
1273
- rotation: number;
1274
- diameter: number;
1275
- pipeMaterial: "pvc" | "abs" | "cast-iron";
1276
- armLengthM: number;
1190
+ metadata: Record<string, unknown>;
1191
+ children: (`item_${string}` | `procedural-item_${string}`)[];
1192
+ polygon: [number, number][];
1193
+ holes: [number, number][][];
1194
+ holeMetadata: {
1195
+ source: "stair" | "elevator" | "manual";
1196
+ stairId?: string | undefined;
1197
+ elevatorId?: string | undefined;
1198
+ }[];
1199
+ autoFromWalls: boolean;
1200
+ type: "ceiling";
1277
1201
  name?: string | undefined;
1278
1202
  camera?: {
1279
1203
  position: [number, number, number];
@@ -1282,18 +1206,46 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1282
1206
  fov?: number | undefined;
1283
1207
  zoom?: number | undefined;
1284
1208
  } | undefined;
1209
+ slots?: Record<string, string> | undefined;
1210
+ material?: {
1211
+ id?: string | undefined;
1212
+ preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
1213
+ properties?: {
1214
+ color: string;
1215
+ roughness: number;
1216
+ metalness: number;
1217
+ opacity: number;
1218
+ transparent: boolean;
1219
+ side: "front" | "back" | "double";
1220
+ } | undefined;
1221
+ texture?: {
1222
+ url: string;
1223
+ repeat?: [number, number] | undefined;
1224
+ scale?: number | undefined;
1225
+ } | undefined;
1226
+ } | undefined;
1227
+ materialPreset?: string | undefined;
1228
+ height?: number | undefined;
1285
1229
  } | {
1286
1230
  object: "node";
1231
+ position: [number, number, number];
1232
+ id: `roof_${string}`;
1287
1233
  parentId: string | null;
1288
1234
  visible: boolean;
1289
- metadata: import("zod").JSONType;
1290
- id: `site_${string}`;
1291
- type: "site";
1292
- polygon: {
1293
- type: "polygon";
1294
- points: [number, number][];
1235
+ metadata: Record<string, unknown>;
1236
+ rotation: number;
1237
+ children: `rseg_${string}`[];
1238
+ support: {
1239
+ kind: "level";
1240
+ } | {
1241
+ kind: "walls";
1242
+ } | {
1243
+ kind: "roof";
1244
+ roofSegmentId: `rseg_${string}`;
1245
+ localPosition: [number, number];
1246
+ curbHeight: number;
1295
1247
  };
1296
- children: string[];
1248
+ type: "roof";
1297
1249
  name?: string | undefined;
1298
1250
  camera?: {
1299
1251
  position: [number, number, number];
@@ -1302,25 +1254,127 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1302
1254
  fov?: number | undefined;
1303
1255
  zoom?: number | undefined;
1304
1256
  } | undefined;
1305
- terrain?: {
1306
- type: "heightfield";
1307
- origin: [number, number];
1308
- spacing: number;
1309
- cols: number;
1310
- rows: number;
1311
- step: number;
1312
- heights: string;
1257
+ material?: {
1258
+ id?: string | undefined;
1259
+ preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
1260
+ properties?: {
1261
+ color: string;
1262
+ roughness: number;
1263
+ metalness: number;
1264
+ opacity: number;
1265
+ transparent: boolean;
1266
+ side: "front" | "back" | "double";
1267
+ } | undefined;
1268
+ texture?: {
1269
+ url: string;
1270
+ repeat?: [number, number] | undefined;
1271
+ scale?: number | undefined;
1272
+ } | undefined;
1273
+ } | undefined;
1274
+ materialPreset?: string | undefined;
1275
+ topMaterial?: {
1276
+ id?: string | undefined;
1277
+ preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
1278
+ properties?: {
1279
+ color: string;
1280
+ roughness: number;
1281
+ metalness: number;
1282
+ opacity: number;
1283
+ transparent: boolean;
1284
+ side: "front" | "back" | "double";
1285
+ } | undefined;
1286
+ texture?: {
1287
+ url: string;
1288
+ repeat?: [number, number] | undefined;
1289
+ scale?: number | undefined;
1290
+ } | undefined;
1291
+ } | undefined;
1292
+ topMaterialPreset?: string | undefined;
1293
+ edgeMaterial?: {
1294
+ id?: string | undefined;
1295
+ preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
1296
+ properties?: {
1297
+ color: string;
1298
+ roughness: number;
1299
+ metalness: number;
1300
+ opacity: number;
1301
+ transparent: boolean;
1302
+ side: "front" | "back" | "double";
1303
+ } | undefined;
1304
+ texture?: {
1305
+ url: string;
1306
+ repeat?: [number, number] | undefined;
1307
+ scale?: number | undefined;
1308
+ } | undefined;
1309
+ } | undefined;
1310
+ edgeMaterialPreset?: string | undefined;
1311
+ wallMaterial?: {
1312
+ id?: string | undefined;
1313
+ preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
1314
+ properties?: {
1315
+ color: string;
1316
+ roughness: number;
1317
+ metalness: number;
1318
+ opacity: number;
1319
+ transparent: boolean;
1320
+ side: "front" | "back" | "double";
1321
+ } | undefined;
1322
+ texture?: {
1323
+ url: string;
1324
+ repeat?: [number, number] | undefined;
1325
+ scale?: number | undefined;
1326
+ } | undefined;
1313
1327
  } | undefined;
1328
+ wallMaterialPreset?: string | undefined;
1314
1329
  } | {
1315
1330
  object: "node";
1331
+ position: [number, number, number];
1332
+ id: `rseg_${string}`;
1316
1333
  parentId: string | null;
1317
1334
  visible: boolean;
1318
- metadata: import("zod").JSONType;
1319
- id: `building_${string}`;
1320
- type: "building";
1321
- children: (`elevator_${string}` | `level_${string}`)[];
1322
- position: [number, number, number];
1323
- rotation: [number, number, number];
1335
+ metadata: Record<string, unknown>;
1336
+ rotation: number;
1337
+ children: string[];
1338
+ trim: {
1339
+ left: number;
1340
+ right: number;
1341
+ front: number;
1342
+ back: number;
1343
+ frontLeft: number;
1344
+ frontRight: number;
1345
+ backLeft: number;
1346
+ backRight: number;
1347
+ frontLeftX: number;
1348
+ frontLeftZ: number;
1349
+ frontRightX: number;
1350
+ frontRightZ: number;
1351
+ backLeftX: number;
1352
+ backLeftZ: number;
1353
+ backRightX: number;
1354
+ backRightZ: number;
1355
+ };
1356
+ width: number;
1357
+ depth: number;
1358
+ roofType: "flat" | "hip" | "gable" | "shed" | "gambrel" | "dutch" | "mansard" | "conical";
1359
+ wallHeight: number;
1360
+ pitch: number;
1361
+ wallThickness: number;
1362
+ deckThickness: number;
1363
+ overhang: number;
1364
+ shingleThickness: number;
1365
+ managedByParent: boolean;
1366
+ wallShell: "omit" | "auto" | "include";
1367
+ shedInsetEndPanels: boolean;
1368
+ gambrelLowerWidthRatio: number;
1369
+ gambrelLowerHeightRatio: number;
1370
+ mansardSteepWidthRatio: number;
1371
+ mansardSteepHeightRatio: number;
1372
+ dutchHipWidthRatio: number;
1373
+ dutchHipHeightRatio: number;
1374
+ dutchWaistLengthRatio: number;
1375
+ dutchGabletRake: number;
1376
+ dutchTopRakeThickness: number;
1377
+ type: "roof-segment";
1324
1378
  name?: string | undefined;
1325
1379
  camera?: {
1326
1380
  position: [number, number, number];
@@ -1329,57 +1383,119 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1329
1383
  fov?: number | undefined;
1330
1384
  zoom?: number | undefined;
1331
1385
  } | undefined;
1332
- } | {
1333
- object: "node";
1334
- parentId: string | null;
1335
- visible: boolean;
1336
- metadata: import("zod").JSONType;
1337
- id: `level_${string}`;
1338
- type: "level";
1339
- children: (`item_${string}` | `ceiling_${string}` | `column_${string}` | `wall_${string}` | `fence_${string}` | `construction-dimension_${string}` | `structural-grid_${string}` | `zone_${string}` | `slab_${string}` | `roof_${string}` | `stair_${string}` | `scan_${string}` | `guide_${string}` | `measurement_${string}` | `spawn_${string}` | `shelf_${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}`)[];
1340
- level: number;
1341
- baseElevation: number;
1342
- name?: string | undefined;
1343
- camera?: {
1386
+ material?: {
1387
+ id?: string | undefined;
1388
+ preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
1389
+ properties?: {
1390
+ color: string;
1391
+ roughness: number;
1392
+ metalness: number;
1393
+ opacity: number;
1394
+ transparent: boolean;
1395
+ side: "front" | "back" | "double";
1396
+ } | undefined;
1397
+ texture?: {
1398
+ url: string;
1399
+ repeat?: [number, number] | undefined;
1400
+ scale?: number | undefined;
1401
+ } | undefined;
1402
+ } | undefined;
1403
+ materialPreset?: string | undefined;
1404
+ topMaterial?: {
1405
+ id?: string | undefined;
1406
+ preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
1407
+ properties?: {
1408
+ color: string;
1409
+ roughness: number;
1410
+ metalness: number;
1411
+ opacity: number;
1412
+ transparent: boolean;
1413
+ side: "front" | "back" | "double";
1414
+ } | undefined;
1415
+ texture?: {
1416
+ url: string;
1417
+ repeat?: [number, number] | undefined;
1418
+ scale?: number | undefined;
1419
+ } | undefined;
1420
+ } | undefined;
1421
+ topMaterialPreset?: string | undefined;
1422
+ edgeMaterial?: {
1423
+ id?: string | undefined;
1424
+ preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
1425
+ properties?: {
1426
+ color: string;
1427
+ roughness: number;
1428
+ metalness: number;
1429
+ opacity: number;
1430
+ transparent: boolean;
1431
+ side: "front" | "back" | "double";
1432
+ } | undefined;
1433
+ texture?: {
1434
+ url: string;
1435
+ repeat?: [number, number] | undefined;
1436
+ scale?: number | undefined;
1437
+ } | undefined;
1438
+ } | undefined;
1439
+ edgeMaterialPreset?: string | undefined;
1440
+ wallMaterial?: {
1441
+ id?: string | undefined;
1442
+ preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
1443
+ properties?: {
1444
+ color: string;
1445
+ roughness: number;
1446
+ metalness: number;
1447
+ opacity: number;
1448
+ transparent: boolean;
1449
+ side: "front" | "back" | "double";
1450
+ } | undefined;
1451
+ texture?: {
1452
+ url: string;
1453
+ repeat?: [number, number] | undefined;
1454
+ scale?: number | undefined;
1455
+ } | undefined;
1456
+ } | undefined;
1457
+ wallMaterialPreset?: string | undefined;
1458
+ conicalStartAngle?: number | undefined;
1459
+ conicalSweepAngle?: number | undefined;
1460
+ conicalFullCircle?: boolean | undefined;
1461
+ arc?: {
1462
+ centerX: number;
1463
+ centerZ: number;
1464
+ radius: number;
1465
+ } | undefined;
1466
+ shedSideInfillSpan?: number | undefined;
1467
+ shedSideInfillMinX?: number | undefined;
1468
+ shedSideInfillMaxX?: number | undefined;
1469
+ shedFootprintPieces?: [number, number][][] | undefined;
1470
+ shedOpenEndSides?: ("right" | "left")[] | undefined;
1471
+ shedJointFrame?: {
1344
1472
  position: [number, number, number];
1345
- target: [number, number, number];
1346
- mode: "perspective" | "orthographic";
1347
- fov?: number | undefined;
1348
- zoom?: number | undefined;
1473
+ rotation: number;
1349
1474
  } | undefined;
1350
- height?: number | undefined;
1475
+ shedJointOwnerId?: string | undefined;
1476
+ shedJointNeighborIds?: string[] | undefined;
1477
+ shedJointScopeId?: string | undefined;
1351
1478
  } | {
1352
1479
  object: "node";
1480
+ position: [number, number, number];
1481
+ id: `shelf_${string}`;
1353
1482
  parentId: string | null;
1354
1483
  visible: boolean;
1355
- metadata: import("zod").JSONType;
1356
- position: [number, number, number];
1357
- rotation: number;
1484
+ metadata: Record<string, unknown>;
1485
+ rotation: [number, number, number];
1486
+ children: string[];
1358
1487
  width: number;
1359
1488
  depth: number;
1360
- carcassHeight: number;
1361
- operationState: number;
1362
- plinthHeight: number;
1363
- toeKickDepth: number;
1364
- boardThickness: number;
1365
- countertopThickness: number;
1366
- countertopOverhang: number;
1367
- countertopBackOverhang: number;
1368
- withFinishedBack: boolean;
1369
- frontThickness: number;
1370
- frontGap: number;
1371
- frontStyle: "slab" | "shaker" | "raised-arch";
1372
- handleStyle: "none" | "bar" | "cutout" | "hole" | "knob";
1373
- handlePosition: "top" | "auto" | "center";
1374
- frontOverlay: "full" | "inset";
1375
- withBottomPanel: boolean;
1376
- showPlinth: boolean;
1377
- withCountertop: boolean;
1378
- id: `cabinet_${string}`;
1379
- type: "cabinet";
1380
- runTier: "wall" | "base" | "tall";
1381
- children: `cabinet-module_${string}`[];
1382
- withWaterfall: boolean;
1489
+ height: number;
1490
+ style: "wall-shelf" | "bookshelf" | "open-rack" | "cubby";
1491
+ rows: number;
1492
+ thickness: number;
1493
+ columns: number;
1494
+ withBack: boolean;
1495
+ withSides: boolean;
1496
+ withBottom: boolean;
1497
+ bracketStyle: "hidden" | "minimal" | "industrial";
1498
+ type: "shelf";
1383
1499
  name?: string | undefined;
1384
1500
  camera?: {
1385
1501
  position: [number, number, number];
@@ -1389,6 +1505,7 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1389
1505
  zoom?: number | undefined;
1390
1506
  } | undefined;
1391
1507
  supportSlabId?: string | undefined;
1508
+ slots?: Record<string, string> | undefined;
1392
1509
  material?: {
1393
1510
  id?: string | undefined;
1394
1511
  preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
@@ -1407,126 +1524,33 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1407
1524
  } | undefined;
1408
1525
  } | undefined;
1409
1526
  materialPreset?: string | undefined;
1410
- slots?: Record<string, string> | undefined;
1411
- stack?: ({
1412
- type: "shelf";
1413
- id: string;
1414
- shelfCount?: number | undefined;
1415
- height?: number | undefined;
1416
- } | {
1417
- type: "drawer";
1418
- id: string;
1419
- drawerCount?: number | undefined;
1420
- height?: number | undefined;
1421
- } | {
1422
- type: "door";
1423
- id: string;
1424
- doorType?: "glass" | "double" | "single-left" | "single-right" | undefined;
1425
- shelfCount?: number | undefined;
1426
- height?: number | undefined;
1427
- } | {
1428
- type: "sink";
1429
- id: string;
1430
- sinkLayout?: "double" | "single" | "double-offset" | undefined;
1431
- height?: number | undefined;
1432
- } | {
1433
- type: "oven";
1434
- id: string;
1435
- height?: number | undefined;
1436
- } | {
1437
- type: "microwave";
1438
- id: string;
1439
- height?: number | undefined;
1440
- } | {
1441
- type: "dishwasher";
1442
- id: string;
1443
- height?: number | undefined;
1444
- } | {
1445
- type: "cooktop-gas";
1446
- id: string;
1447
- cooktopLayout?: "gas-2burner" | "gas-4burner" | "gas-5burner-wok" | "gas-6burner" | undefined;
1448
- cooktopBurnersOn?: boolean | undefined;
1449
- cooktopActiveBurners?: number[] | undefined;
1450
- cooktopKnobProgress?: number[] | undefined;
1451
- cooktopShowGrate?: boolean | undefined;
1452
- height?: number | undefined;
1453
- } | {
1454
- type: "cooktop-induction";
1455
- id: string;
1456
- cooktopLayout?: "induction-2zone" | "induction-4zone" | undefined;
1457
- cooktopBurnersOn?: boolean | undefined;
1458
- cooktopActiveBurners?: number[] | undefined;
1459
- cooktopKnobProgress?: number[] | undefined;
1460
- cooktopShowGrate?: boolean | undefined;
1461
- height?: number | undefined;
1462
- } | {
1463
- type: "pull-out-pantry";
1464
- id: string;
1465
- shelfCount?: number | undefined;
1466
- pantryRackStyle?: "glass" | "wire" | "tray" | undefined;
1467
- height?: number | undefined;
1468
- } | {
1469
- type: "fridge-single";
1470
- id: string;
1471
- height?: number | undefined;
1472
- } | {
1473
- type: "fridge-double";
1474
- id: string;
1475
- height?: number | undefined;
1476
- } | {
1477
- type: "fridge-top-freezer";
1478
- id: string;
1479
- height?: number | undefined;
1480
- } | {
1481
- type: "fridge-bottom-freezer";
1482
- id: string;
1483
- height?: number | undefined;
1484
- } | {
1485
- type: "hood-pyramid";
1486
- id: string;
1487
- height?: number | undefined;
1488
- } | {
1489
- type: "hood-curved-glass";
1490
- id: string;
1491
- height?: number | undefined;
1492
- })[] | undefined;
1493
- barLedge?: {
1494
- edge: "back" | "right" | "left";
1495
- height: number;
1496
- depth: number;
1497
- } | undefined;
1498
1527
  } | {
1499
1528
  object: "node";
1529
+ position: [number, number, number];
1530
+ id: `stair_${string}`;
1500
1531
  parentId: string | null;
1501
1532
  visible: boolean;
1502
- metadata: import("zod").JSONType;
1503
- position: [number, number, number];
1533
+ metadata: Record<string, unknown>;
1504
1534
  rotation: number;
1535
+ children: `sseg_${string}`[];
1505
1536
  width: number;
1506
- depth: number;
1507
- carcassHeight: number;
1508
- operationState: number;
1509
- plinthHeight: number;
1510
- toeKickDepth: number;
1511
- boardThickness: number;
1512
- countertopThickness: number;
1513
- countertopOverhang: number;
1514
- countertopBackOverhang: number;
1515
- withFinishedBack: boolean;
1516
- frontThickness: number;
1517
- frontGap: number;
1518
- frontStyle: "slab" | "shaker" | "raised-arch";
1519
- handleStyle: "none" | "bar" | "cutout" | "hole" | "knob";
1520
- handlePosition: "top" | "auto" | "center";
1521
- frontOverlay: "full" | "inset";
1522
- withBottomPanel: boolean;
1523
- showPlinth: boolean;
1524
- withCountertop: boolean;
1525
- id: `cabinet-module_${string}`;
1526
- type: "cabinet-module";
1527
- children: (`cabinet_${string}` | `cabinet-module_${string}`)[];
1528
- cabinetType: "base" | "tall";
1529
- moduleKind: "standard" | "corner-filler";
1537
+ fromLevelId: string | null;
1538
+ toLevelId: string | null;
1539
+ thickness: number;
1540
+ stairType: "straight" | "spiral" | "curved";
1541
+ slabOpeningMode: "none" | "destination";
1542
+ openingOffset: number;
1543
+ stepCount: number;
1544
+ fillToFloor: boolean;
1545
+ innerRadius: number;
1546
+ sweepAngle: number;
1547
+ topLandingMode: "none" | "integrated";
1548
+ topLandingDepth: number;
1549
+ showCenterColumn: boolean;
1550
+ showStepSupports: boolean;
1551
+ railingMode: "right" | "left" | "none" | "both";
1552
+ railingHeight: number;
1553
+ type: "stair";
1530
1554
  name?: string | undefined;
1531
1555
  camera?: {
1532
1556
  position: [number, number, number];
@@ -1536,6 +1560,7 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1536
1560
  zoom?: number | undefined;
1537
1561
  } | undefined;
1538
1562
  supportSlabId?: string | undefined;
1563
+ slots?: Record<string, string> | undefined;
1539
1564
  material?: {
1540
1565
  id?: string | undefined;
1541
1566
  preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
@@ -1554,146 +1579,7 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1554
1579
  } | undefined;
1555
1580
  } | undefined;
1556
1581
  materialPreset?: string | undefined;
1557
- slots?: Record<string, string> | undefined;
1558
- stack?: ({
1559
- type: "shelf";
1560
- id: string;
1561
- shelfCount?: number | undefined;
1562
- height?: number | undefined;
1563
- } | {
1564
- type: "drawer";
1565
- id: string;
1566
- drawerCount?: number | undefined;
1567
- height?: number | undefined;
1568
- } | {
1569
- type: "door";
1570
- id: string;
1571
- doorType?: "glass" | "double" | "single-left" | "single-right" | undefined;
1572
- shelfCount?: number | undefined;
1573
- height?: number | undefined;
1574
- } | {
1575
- type: "sink";
1576
- id: string;
1577
- sinkLayout?: "double" | "single" | "double-offset" | undefined;
1578
- height?: number | undefined;
1579
- } | {
1580
- type: "oven";
1581
- id: string;
1582
- height?: number | undefined;
1583
- } | {
1584
- type: "microwave";
1585
- id: string;
1586
- height?: number | undefined;
1587
- } | {
1588
- type: "dishwasher";
1589
- id: string;
1590
- height?: number | undefined;
1591
- } | {
1592
- type: "cooktop-gas";
1593
- id: string;
1594
- cooktopLayout?: "gas-2burner" | "gas-4burner" | "gas-5burner-wok" | "gas-6burner" | undefined;
1595
- cooktopBurnersOn?: boolean | undefined;
1596
- cooktopActiveBurners?: number[] | undefined;
1597
- cooktopKnobProgress?: number[] | undefined;
1598
- cooktopShowGrate?: boolean | undefined;
1599
- height?: number | undefined;
1600
- } | {
1601
- type: "cooktop-induction";
1602
- id: string;
1603
- cooktopLayout?: "induction-2zone" | "induction-4zone" | undefined;
1604
- cooktopBurnersOn?: boolean | undefined;
1605
- cooktopActiveBurners?: number[] | undefined;
1606
- cooktopKnobProgress?: number[] | undefined;
1607
- cooktopShowGrate?: boolean | undefined;
1608
- height?: number | undefined;
1609
- } | {
1610
- type: "pull-out-pantry";
1611
- id: string;
1612
- shelfCount?: number | undefined;
1613
- pantryRackStyle?: "glass" | "wire" | "tray" | undefined;
1614
- height?: number | undefined;
1615
- } | {
1616
- type: "fridge-single";
1617
- id: string;
1618
- height?: number | undefined;
1619
- } | {
1620
- type: "fridge-double";
1621
- id: string;
1622
- height?: number | undefined;
1623
- } | {
1624
- type: "fridge-top-freezer";
1625
- id: string;
1626
- height?: number | undefined;
1627
- } | {
1628
- type: "fridge-bottom-freezer";
1629
- id: string;
1630
- height?: number | undefined;
1631
- } | {
1632
- type: "hood-pyramid";
1633
- id: string;
1634
- height?: number | undefined;
1635
- } | {
1636
- type: "hood-curved-glass";
1637
- id: string;
1638
- height?: number | undefined;
1639
- })[] | undefined;
1640
- openSide?: "right" | "left" | undefined;
1641
- cornerShelf?: boolean | undefined;
1642
- } | {
1643
- object: "node";
1644
- parentId: string | null;
1645
- visible: boolean;
1646
- metadata: import("zod").JSONType;
1647
- id: `rseg_${string}`;
1648
- type: "roof-segment";
1649
- position: [number, number, number];
1650
- rotation: number;
1651
- roofType: "flat" | "hip" | "gable" | "shed" | "gambrel" | "dutch" | "mansard";
1652
- width: number;
1653
- depth: number;
1654
- trim: {
1655
- left: number;
1656
- right: number;
1657
- front: number;
1658
- back: number;
1659
- frontLeft: number;
1660
- frontRight: number;
1661
- backLeft: number;
1662
- backRight: number;
1663
- frontLeftX: number;
1664
- frontLeftZ: number;
1665
- frontRightX: number;
1666
- frontRightZ: number;
1667
- backLeftX: number;
1668
- backLeftZ: number;
1669
- backRightX: number;
1670
- backRightZ: number;
1671
- };
1672
- wallHeight: number;
1673
- pitch: number;
1674
- wallThickness: number;
1675
- deckThickness: number;
1676
- overhang: number;
1677
- shingleThickness: number;
1678
- gambrelLowerWidthRatio: number;
1679
- gambrelLowerHeightRatio: number;
1680
- mansardSteepWidthRatio: number;
1681
- mansardSteepHeightRatio: number;
1682
- dutchHipWidthRatio: number;
1683
- dutchHipHeightRatio: number;
1684
- dutchWaistLengthRatio: number;
1685
- dutchGabletRake: number;
1686
- dutchTopRakeThickness: number;
1687
- children: string[];
1688
- name?: string | undefined;
1689
- camera?: {
1690
- position: [number, number, number];
1691
- target: [number, number, number];
1692
- mode: "perspective" | "orthographic";
1693
- fov?: number | undefined;
1694
- zoom?: number | undefined;
1695
- } | undefined;
1696
- material?: {
1582
+ railingMaterial?: {
1697
1583
  id?: string | undefined;
1698
1584
  preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
1699
1585
  properties?: {
@@ -1710,8 +1596,8 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1710
1596
  scale?: number | undefined;
1711
1597
  } | undefined;
1712
1598
  } | undefined;
1713
- materialPreset?: string | undefined;
1714
- topMaterial?: {
1599
+ railingMaterialPreset?: string | undefined;
1600
+ treadMaterial?: {
1715
1601
  id?: string | undefined;
1716
1602
  preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
1717
1603
  properties?: {
@@ -1728,8 +1614,8 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1728
1614
  scale?: number | undefined;
1729
1615
  } | undefined;
1730
1616
  } | undefined;
1731
- topMaterialPreset?: string | undefined;
1732
- edgeMaterial?: {
1617
+ treadMaterialPreset?: string | undefined;
1618
+ sideMaterial?: {
1733
1619
  id?: string | undefined;
1734
1620
  preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
1735
1621
  properties?: {
@@ -1746,8 +1632,35 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1746
1632
  scale?: number | undefined;
1747
1633
  } | undefined;
1748
1634
  } | undefined;
1749
- edgeMaterialPreset?: string | undefined;
1750
- wallMaterial?: {
1635
+ sideMaterialPreset?: string | undefined;
1636
+ deckSlabId?: string | undefined;
1637
+ totalRise?: number | undefined;
1638
+ } | {
1639
+ object: "node";
1640
+ position: [number, number, number];
1641
+ id: `sseg_${string}`;
1642
+ parentId: string | null;
1643
+ visible: boolean;
1644
+ metadata: Record<string, unknown>;
1645
+ length: number;
1646
+ rotation: number;
1647
+ width: number;
1648
+ height: number;
1649
+ thickness: number;
1650
+ stepCount: number;
1651
+ fillToFloor: boolean;
1652
+ segmentType: "stair" | "landing";
1653
+ attachmentSide: "front" | "right" | "left";
1654
+ type: "stair-segment";
1655
+ name?: string | undefined;
1656
+ camera?: {
1657
+ position: [number, number, number];
1658
+ target: [number, number, number];
1659
+ mode: "perspective" | "orthographic";
1660
+ fov?: number | undefined;
1661
+ zoom?: number | undefined;
1662
+ } | undefined;
1663
+ material?: {
1751
1664
  id?: string | undefined;
1752
1665
  preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
1753
1666
  properties?: {
@@ -1764,24 +1677,167 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1764
1677
  scale?: number | undefined;
1765
1678
  } | undefined;
1766
1679
  } | undefined;
1767
- wallMaterialPreset?: string | undefined;
1680
+ materialPreset?: string | undefined;
1681
+ } | {
1682
+ object: "node";
1683
+ position: [number, number, number];
1684
+ id: `scan_${string}`;
1685
+ parentId: string | null;
1686
+ visible: boolean;
1687
+ metadata: Record<string, unknown>;
1688
+ opacity: number;
1689
+ url: string | null;
1690
+ scale: number;
1691
+ rotation: [number, number, number];
1692
+ captureSession: {
1693
+ sessionId: string;
1694
+ schemaVersion?: number | undefined;
1695
+ revisionId?: string | undefined;
1696
+ manifestUrl?: string | undefined;
1697
+ } | null;
1698
+ layers: Record<string, boolean>;
1699
+ type: "scan";
1700
+ name?: string | undefined;
1701
+ camera?: {
1702
+ position: [number, number, number];
1703
+ target: [number, number, number];
1704
+ mode: "perspective" | "orthographic";
1705
+ fov?: number | undefined;
1706
+ zoom?: number | undefined;
1707
+ } | undefined;
1708
+ } | {
1709
+ object: "node";
1710
+ position: [number, number, number];
1711
+ id: `guide_${string}`;
1712
+ parentId: string | null;
1713
+ visible: boolean;
1714
+ metadata: Record<string, unknown>;
1715
+ opacity: number;
1716
+ url: string;
1717
+ scale: number;
1718
+ rotation: [number, number, number];
1719
+ scaleReference: {
1720
+ start: [number, number];
1721
+ end: [number, number];
1722
+ realLengthMeters: number;
1723
+ measuredLengthUnits: number;
1724
+ metersPerUnit: number;
1725
+ label: string;
1726
+ } | null;
1727
+ type: "guide";
1728
+ name?: string | undefined;
1729
+ camera?: {
1730
+ position: [number, number, number];
1731
+ target: [number, number, number];
1732
+ mode: "perspective" | "orthographic";
1733
+ fov?: number | undefined;
1734
+ zoom?: number | undefined;
1735
+ } | undefined;
1736
+ } | {
1737
+ object: "node";
1738
+ id: `measurement_${string}`;
1739
+ parentId: string | null;
1740
+ visible: boolean;
1741
+ metadata: Record<string, unknown>;
1742
+ measurement: {
1743
+ kind: "distance";
1744
+ points: [[number, number, number] | {
1745
+ kind: "feature";
1746
+ reference: {
1747
+ nodeId: string;
1748
+ featureId: string;
1749
+ parameters?: Record<string, string | number | boolean> | undefined;
1750
+ };
1751
+ fallback: [number, number, number];
1752
+ }, [number, number, number] | {
1753
+ kind: "feature";
1754
+ reference: {
1755
+ nodeId: string;
1756
+ featureId: string;
1757
+ parameters?: Record<string, string | number | boolean> | undefined;
1758
+ };
1759
+ fallback: [number, number, number];
1760
+ }];
1761
+ } | {
1762
+ kind: "angle";
1763
+ points: [[number, number, number] | {
1764
+ kind: "feature";
1765
+ reference: {
1766
+ nodeId: string;
1767
+ featureId: string;
1768
+ parameters?: Record<string, string | number | boolean> | undefined;
1769
+ };
1770
+ fallback: [number, number, number];
1771
+ }, [number, number, number] | {
1772
+ kind: "feature";
1773
+ reference: {
1774
+ nodeId: string;
1775
+ featureId: string;
1776
+ parameters?: Record<string, string | number | boolean> | undefined;
1777
+ };
1778
+ fallback: [number, number, number];
1779
+ }, [number, number, number] | {
1780
+ kind: "feature";
1781
+ reference: {
1782
+ nodeId: string;
1783
+ featureId: string;
1784
+ parameters?: Record<string, string | number | boolean> | undefined;
1785
+ };
1786
+ fallback: [number, number, number];
1787
+ }];
1788
+ } | {
1789
+ kind: "area";
1790
+ base: ([number, number, number] | {
1791
+ kind: "feature";
1792
+ reference: {
1793
+ nodeId: string;
1794
+ featureId: string;
1795
+ parameters?: Record<string, string | number | boolean> | undefined;
1796
+ };
1797
+ fallback: [number, number, number];
1798
+ })[];
1799
+ } | {
1800
+ kind: "perimeter";
1801
+ base: ([number, number, number] | {
1802
+ kind: "feature";
1803
+ reference: {
1804
+ nodeId: string;
1805
+ featureId: string;
1806
+ parameters?: Record<string, string | number | boolean> | undefined;
1807
+ };
1808
+ fallback: [number, number, number];
1809
+ })[];
1810
+ } | {
1811
+ kind: "volume";
1812
+ base: ([number, number, number] | {
1813
+ kind: "feature";
1814
+ reference: {
1815
+ nodeId: string;
1816
+ featureId: string;
1817
+ parameters?: Record<string, string | number | boolean> | undefined;
1818
+ };
1819
+ fallback: [number, number, number];
1820
+ })[];
1821
+ extrusion: [number, number, number];
1822
+ };
1823
+ type: "measurement";
1824
+ name?: string | undefined;
1825
+ camera?: {
1826
+ position: [number, number, number];
1827
+ target: [number, number, number];
1828
+ mode: "perspective" | "orthographic";
1829
+ fov?: number | undefined;
1830
+ zoom?: number | undefined;
1831
+ } | undefined;
1768
1832
  } | {
1769
1833
  object: "node";
1834
+ position: [number, number, number];
1835
+ id: `spawn_${string}`;
1770
1836
  parentId: string | null;
1771
1837
  visible: boolean;
1772
- metadata: import("zod").JSONType;
1773
- id: `sseg_${string}`;
1774
- type: "stair-segment";
1775
- position: [number, number, number];
1838
+ metadata: Record<string, unknown>;
1776
1839
  rotation: number;
1777
- segmentType: "stair" | "landing";
1778
- width: number;
1779
- length: number;
1780
- height: number;
1781
- stepCount: number;
1782
- attachmentSide: "front" | "right" | "left";
1783
- fillToFloor: boolean;
1784
- thickness: number;
1840
+ type: "spawn";
1785
1841
  name?: string | undefined;
1786
1842
  camera?: {
1787
1843
  position: [number, number, number];
@@ -1790,58 +1846,41 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1790
1846
  fov?: number | undefined;
1791
1847
  zoom?: number | undefined;
1792
1848
  } | undefined;
1793
- material?: {
1794
- id?: string | undefined;
1795
- preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
1796
- properties?: {
1797
- color: string;
1798
- roughness: number;
1799
- metalness: number;
1800
- opacity: number;
1801
- transparent: boolean;
1802
- side: "front" | "back" | "double";
1803
- } | undefined;
1804
- texture?: {
1805
- url: string;
1806
- repeat?: [number, number] | undefined;
1807
- scale?: number | undefined;
1808
- } | undefined;
1809
- } | undefined;
1810
- materialPreset?: string | undefined;
1849
+ supportSlabId?: string | undefined;
1811
1850
  } | {
1812
1851
  object: "node";
1852
+ position: [number, number, number];
1853
+ id: `window_${string}`;
1813
1854
  parentId: string | null;
1814
1855
  visible: boolean;
1815
- metadata: import("zod").JSONType;
1816
- id: `window_${string}`;
1817
- type: "window";
1818
- position: [number, number, number];
1856
+ metadata: Record<string, unknown>;
1819
1857
  rotation: [number, number, number];
1820
1858
  width: number;
1821
1859
  height: number;
1822
1860
  constructionType: "framed" | "masonry";
1823
1861
  dimensionReference: "nominal" | "rough-opening" | "masonry-opening" | "finish-opening";
1824
- openingKind: "window" | "opening";
1825
- windowType: "sliding" | "fixed" | "casement" | "awning" | "hopper" | "single-hung" | "double-hung" | "bay" | "bow" | "louvered";
1826
1862
  operationState: number;
1827
- awningDirection: "up" | "down";
1828
- casementStyle: "french" | "single";
1829
- hingesSide: "right" | "left";
1863
+ openingKind: "window" | "opening";
1830
1864
  openingShape: "rectangle" | "rounded" | "arch";
1831
1865
  openingRadiusMode: "all" | "individual";
1832
- openingCornerRadii: [number, number, number, number];
1833
1866
  cornerRadius: number;
1834
1867
  archHeight: number;
1835
1868
  openingRevealRadius: number;
1836
1869
  frameThickness: number;
1837
1870
  frameDepth: number;
1871
+ hingesSide: "right" | "left";
1838
1872
  columnRatios: number[];
1873
+ windowType: "fixed" | "sliding" | "casement" | "awning" | "hopper" | "single-hung" | "double-hung" | "bay" | "bow" | "louvered";
1874
+ awningDirection: "up" | "down";
1875
+ casementStyle: "french" | "single";
1876
+ openingCornerRadii: [number, number, number, number];
1839
1877
  rowRatios: number[];
1840
1878
  columnDividerThickness: number;
1841
1879
  rowDividerThickness: number;
1842
1880
  sill: boolean;
1843
1881
  sillDepth: number;
1844
1882
  sillThickness: number;
1883
+ type: "window";
1845
1884
  name?: string | undefined;
1846
1885
  camera?: {
1847
1886
  position: [number, number, number];
@@ -1850,6 +1889,8 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1850
1889
  fov?: number | undefined;
1851
1890
  zoom?: number | undefined;
1852
1891
  } | undefined;
1892
+ side?: "front" | "back" | undefined;
1893
+ slots?: Record<string, string> | undefined;
1853
1894
  material?: {
1854
1895
  id?: string | undefined;
1855
1896
  preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
@@ -1867,10 +1908,8 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1867
1908
  scale?: number | undefined;
1868
1909
  } | undefined;
1869
1910
  } | undefined;
1870
- slots?: Record<string, string> | undefined;
1871
- side?: "front" | "back" | undefined;
1872
- wallId?: string | undefined;
1873
1911
  roofSegmentId?: string | undefined;
1912
+ wallId?: string | undefined;
1874
1913
  roofFace?: "front" | "back" | "right" | "left" | undefined;
1875
1914
  mark?: string | undefined;
1876
1915
  roughOpeningWidth?: number | undefined;
@@ -1879,22 +1918,23 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1879
1918
  masonryOpeningHeight?: number | undefined;
1880
1919
  finishOpeningWidth?: number | undefined;
1881
1920
  finishOpeningHeight?: number | undefined;
1921
+ dormerId?: string | undefined;
1922
+ dormerFace?: "front" | "back" | "right" | "left" | undefined;
1882
1923
  } | {
1883
1924
  object: "node";
1925
+ position: [number, number, number];
1926
+ id: `door_${string}`;
1884
1927
  parentId: string | null;
1885
1928
  visible: boolean;
1886
- metadata: import("zod").JSONType;
1887
- id: `door_${string}`;
1888
- type: "door";
1889
- position: [number, number, number];
1929
+ metadata: Record<string, unknown>;
1890
1930
  rotation: [number, number, number];
1891
1931
  width: number;
1892
1932
  height: number;
1933
+ leafCount: 3 | 2 | 1 | 4;
1893
1934
  constructionType: "framed" | "masonry";
1894
1935
  dimensionReference: "nominal" | "rough-opening" | "masonry-opening" | "finish-opening";
1895
1936
  doorCategory: "interior" | "garage";
1896
1937
  doorType: "double" | "hinged" | "french" | "folding" | "pocket" | "barn" | "sliding" | "garage-sectional" | "garage-rollup" | "garage-tiltup";
1897
- leafCount: 4 | 1 | 2 | 3;
1898
1938
  operationState: number;
1899
1939
  slideDirection: "right" | "left";
1900
1940
  trackStyle: "visible" | "none" | "pocket" | "overhead";
@@ -1928,6 +1968,7 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1928
1968
  doorCloser: boolean;
1929
1969
  panicBar: boolean;
1930
1970
  panicBarHeight: number;
1971
+ type: "door";
1931
1972
  name?: string | undefined;
1932
1973
  camera?: {
1933
1974
  position: [number, number, number];
@@ -1936,6 +1977,8 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1936
1977
  fov?: number | undefined;
1937
1978
  zoom?: number | undefined;
1938
1979
  } | undefined;
1980
+ side?: "front" | "back" | undefined;
1981
+ slots?: Record<string, string> | undefined;
1939
1982
  material?: {
1940
1983
  id?: string | undefined;
1941
1984
  preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
@@ -1953,10 +1996,8 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1953
1996
  scale?: number | undefined;
1954
1997
  } | undefined;
1955
1998
  } | undefined;
1956
- slots?: Record<string, string> | undefined;
1957
- side?: "front" | "back" | undefined;
1958
- wallId?: string | undefined;
1959
1999
  roofSegmentId?: string | undefined;
2000
+ wallId?: string | undefined;
1960
2001
  roofFace?: "front" | "back" | "right" | "left" | undefined;
1961
2002
  mark?: string | undefined;
1962
2003
  roughOpeningWidth?: number | undefined;
@@ -1967,18 +2008,67 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1967
2008
  finishOpeningHeight?: number | undefined;
1968
2009
  } | {
1969
2010
  object: "node";
2011
+ position: [number, number, number];
2012
+ id: `bvent_${string}`;
1970
2013
  parentId: string | null;
1971
2014
  visible: boolean;
1972
- metadata: import("zod").JSONType;
1973
- id: `rvent_${string}`;
1974
- type: "ridge-vent";
1975
- position: [number, number, number];
2015
+ metadata: Record<string, unknown>;
1976
2016
  rotation: number;
2017
+ materialPreset: string;
2018
+ width: number;
2019
+ depth: number;
2020
+ height: number;
2021
+ hoodOverhang: number;
2022
+ topTaper: number;
2023
+ capHeight: number;
2024
+ capGap: number;
2025
+ domeCurvature: number;
2026
+ baseInset: number;
2027
+ baseHeight: number;
2028
+ cornerBevel: number;
2029
+ style: "box" | "cap" | "dome";
2030
+ type: "box-vent";
2031
+ name?: string | undefined;
2032
+ camera?: {
2033
+ position: [number, number, number];
2034
+ target: [number, number, number];
2035
+ mode: "perspective" | "orthographic";
2036
+ fov?: number | undefined;
2037
+ zoom?: number | undefined;
2038
+ } | undefined;
2039
+ slots?: Record<string, string> | undefined;
2040
+ material?: {
2041
+ id?: string | undefined;
2042
+ preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
2043
+ properties?: {
2044
+ color: string;
2045
+ roughness: number;
2046
+ metalness: number;
2047
+ opacity: number;
2048
+ transparent: boolean;
2049
+ side: "front" | "back" | "double";
2050
+ } | undefined;
2051
+ texture?: {
2052
+ url: string;
2053
+ repeat?: [number, number] | undefined;
2054
+ scale?: number | undefined;
2055
+ } | undefined;
2056
+ } | undefined;
2057
+ roofSegmentId?: string | undefined;
2058
+ } | {
2059
+ object: "node";
2060
+ position: [number, number, number];
2061
+ id: `rvent_${string}`;
2062
+ parentId: string | null;
2063
+ visible: boolean;
2064
+ metadata: Record<string, unknown>;
1977
2065
  length: number;
2066
+ rotation: number;
1978
2067
  width: number;
1979
2068
  height: number;
1980
2069
  style: "metal" | "standard" | "shingled";
1981
2070
  endCaps: boolean;
2071
+ type: "ridge-vent";
1982
2072
  name?: string | undefined;
1983
2073
  camera?: {
1984
2074
  position: [number, number, number];
@@ -2008,21 +2098,21 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
2008
2098
  roofSegmentId?: string | undefined;
2009
2099
  } | {
2010
2100
  object: "node";
2101
+ position: [number, number, number];
2102
+ id: `tvent_${string}`;
2011
2103
  parentId: string | null;
2012
2104
  visible: boolean;
2013
- metadata: import("zod").JSONType;
2014
- id: `tvent_${string}`;
2015
- type: "turbine-vent";
2016
- materialPreset: string;
2017
- position: [number, number, number];
2105
+ metadata: Record<string, unknown>;
2018
2106
  rotation: number;
2019
- diameter: number;
2107
+ materialPreset: string;
2020
2108
  height: number;
2109
+ style: "cylinder" | "globe";
2110
+ diameter: number;
2021
2111
  neckHeight: number;
2022
2112
  baseOverhang: number;
2023
2113
  vaneCount: number;
2024
2114
  spinSpeed: number;
2025
- style: "globe" | "cylinder";
2115
+ type: "turbine-vent";
2026
2116
  name?: string | undefined;
2027
2117
  camera?: {
2028
2118
  position: [number, number, number];
@@ -2031,6 +2121,7 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
2031
2121
  fov?: number | undefined;
2032
2122
  zoom?: number | undefined;
2033
2123
  } | undefined;
2124
+ slots?: Record<string, string> | undefined;
2034
2125
  material?: {
2035
2126
  id?: string | undefined;
2036
2127
  preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
@@ -2051,19 +2142,19 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
2051
2142
  roofSegmentId?: string | undefined;
2052
2143
  } | {
2053
2144
  object: "node";
2145
+ position: [number, number, number];
2146
+ id: `cupola_${string}`;
2054
2147
  parentId: string | null;
2055
2148
  visible: boolean;
2056
- metadata: import("zod").JSONType;
2057
- id: `cupola_${string}`;
2058
- type: "cupola";
2059
- materialPreset: string;
2060
- position: [number, number, number];
2149
+ metadata: Record<string, unknown>;
2061
2150
  rotation: number;
2151
+ materialPreset: string;
2062
2152
  width: number;
2063
2153
  depth: number;
2064
2154
  height: number;
2065
2155
  roofStyle: "dome" | "pyramid";
2066
2156
  finial: boolean;
2157
+ type: "cupola";
2067
2158
  name?: string | undefined;
2068
2159
  camera?: {
2069
2160
  position: [number, number, number];
@@ -2072,6 +2163,7 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
2072
2163
  fov?: number | undefined;
2073
2164
  zoom?: number | undefined;
2074
2165
  } | undefined;
2166
+ slots?: Record<string, string> | undefined;
2075
2167
  material?: {
2076
2168
  id?: string | undefined;
2077
2169
  preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
@@ -2092,20 +2184,20 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
2092
2184
  roofSegmentId?: string | undefined;
2093
2185
  } | {
2094
2186
  object: "node";
2187
+ position: [number, number, number];
2188
+ id: `eyebrow-vent_${string}`;
2095
2189
  parentId: string | null;
2096
2190
  visible: boolean;
2097
- metadata: import("zod").JSONType;
2098
- id: `eyebrow-vent_${string}`;
2099
- type: "eyebrow-vent";
2100
- materialPreset: string;
2101
- position: [number, number, number];
2191
+ metadata: Record<string, unknown>;
2102
2192
  rotation: number;
2193
+ materialPreset: string;
2103
2194
  width: number;
2104
2195
  depth: number;
2105
2196
  height: number;
2106
- style: "scoop" | "half-round" | "slant-box";
2197
+ style: "half-round" | "scoop" | "slant-box";
2107
2198
  louverCount: number;
2108
2199
  backRatio: number;
2200
+ type: "eyebrow-vent";
2109
2201
  name?: string | undefined;
2110
2202
  camera?: {
2111
2203
  position: [number, number, number];
@@ -2114,6 +2206,7 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
2114
2206
  fov?: number | undefined;
2115
2207
  zoom?: number | undefined;
2116
2208
  } | undefined;
2209
+ slots?: Record<string, string> | undefined;
2117
2210
  material?: {
2118
2211
  id?: string | undefined;
2119
2212
  preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
@@ -2134,27 +2227,28 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
2134
2227
  roofSegmentId?: string | undefined;
2135
2228
  } | {
2136
2229
  object: "node";
2230
+ position: [number, number, number];
2231
+ id: `gutter_${string}`;
2137
2232
  parentId: string | null;
2138
2233
  visible: boolean;
2139
- metadata: import("zod").JSONType;
2140
- id: `gutter_${string}`;
2141
- type: "gutter";
2142
- materialPreset: string;
2143
- position: [number, number, number];
2144
- rotation: number;
2234
+ metadata: Record<string, unknown>;
2145
2235
  length: number;
2146
- size: number;
2236
+ rotation: number;
2237
+ materialPreset: string;
2147
2238
  thickness: number;
2148
- profile: "box" | "half-round" | "k-style";
2149
- endCapLeft: boolean;
2150
- endCapRight: boolean;
2239
+ profile: "box" | "k-style" | "half-round";
2240
+ size: number;
2151
2241
  hangerStyle: "none" | "strap";
2152
2242
  hangerSpacing: number;
2243
+ endCapLeft: boolean;
2244
+ endCapRight: boolean;
2153
2245
  outlets: {
2154
2246
  id: string;
2155
2247
  offset: number;
2156
2248
  diameter: number;
2249
+ generatedBy?: "default-downspout" | undefined;
2157
2250
  }[];
2251
+ type: "gutter";
2158
2252
  name?: string | undefined;
2159
2253
  camera?: {
2160
2254
  position: [number, number, number];
@@ -2163,6 +2257,7 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
2163
2257
  fov?: number | undefined;
2164
2258
  zoom?: number | undefined;
2165
2259
  } | undefined;
2260
+ slots?: Record<string, string> | undefined;
2166
2261
  material?: {
2167
2262
  id?: string | undefined;
2168
2263
  preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
@@ -2181,24 +2276,30 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
2181
2276
  } | undefined;
2182
2277
  } | undefined;
2183
2278
  roofSegmentId?: string | undefined;
2279
+ arc?: {
2280
+ centerX: number;
2281
+ centerZ: number;
2282
+ radius: number;
2283
+ } | undefined;
2184
2284
  } | {
2185
2285
  object: "node";
2286
+ position: [number, number, number];
2287
+ id: `chimney_${string}`;
2186
2288
  parentId: string | null;
2187
2289
  visible: boolean;
2188
- metadata: import("zod").JSONType;
2189
- id: `chimney_${string}`;
2190
- type: "chimney";
2191
- position: [number, number, number];
2290
+ metadata: Record<string, unknown>;
2192
2291
  rotation: number;
2292
+ width: number;
2293
+ depth: number;
2294
+ cornerBevel: number;
2295
+ cap: boolean;
2296
+ panelDepth: number;
2297
+ panelHeight: number;
2193
2298
  bodyShape: "round" | "square";
2194
2299
  bodyHollowDepth: number;
2195
2300
  bodyHollowMargin: number;
2196
- width: number;
2197
- depth: number;
2198
2301
  heightAboveRidge: number;
2199
2302
  cutoutOffset: number;
2200
- cornerBevel: number;
2201
- cap: boolean;
2202
2303
  capShape: "flat" | "none" | "stepped" | "sloped";
2203
2304
  capOverhang: number;
2204
2305
  capThickness: number;
@@ -2220,10 +2321,9 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
2220
2321
  cricketHeight: number;
2221
2322
  cricketSide: "front" | "back";
2222
2323
  panelStyle: "rectangular" | "none";
2223
- panelDepth: number;
2224
- panelHeight: number;
2225
2324
  panelOffsetTop: number;
2226
2325
  panelMargin: number;
2326
+ type: "chimney";
2227
2327
  name?: string | undefined;
2228
2328
  camera?: {
2229
2329
  position: [number, number, number];
@@ -2250,6 +2350,7 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
2250
2350
  } | undefined;
2251
2351
  } | undefined;
2252
2352
  materialPreset?: string | undefined;
2353
+ roofSegmentId?: string | undefined;
2253
2354
  topMaterial?: {
2254
2355
  id?: string | undefined;
2255
2356
  preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
@@ -2268,17 +2369,17 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
2268
2369
  } | undefined;
2269
2370
  } | undefined;
2270
2371
  topMaterialPreset?: string | undefined;
2271
- roofSegmentId?: string | undefined;
2272
2372
  } | {
2273
2373
  object: "node";
2374
+ position: [number, number, number];
2375
+ id: `solarpanel_${string}`;
2274
2376
  parentId: string | null;
2275
2377
  visible: boolean;
2276
- metadata: import("zod").JSONType;
2277
- id: `solarpanel_${string}`;
2278
- type: "solar-panel";
2279
- position: [number, number, number];
2378
+ metadata: Record<string, unknown>;
2280
2379
  rotation: number;
2281
2380
  rows: number;
2381
+ frameThickness: number;
2382
+ frameDepth: number;
2282
2383
  columns: number;
2283
2384
  panelWidth: number;
2284
2385
  panelHeight: number;
@@ -2287,8 +2388,7 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
2287
2388
  mountingType: "flush" | "tilted";
2288
2389
  tiltAngle: number;
2289
2390
  standoffHeight: number;
2290
- frameThickness: number;
2291
- frameDepth: number;
2391
+ type: "solar-panel";
2292
2392
  name?: string | undefined;
2293
2393
  camera?: {
2294
2394
  position: [number, number, number];
@@ -2315,6 +2415,7 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
2315
2415
  } | undefined;
2316
2416
  } | undefined;
2317
2417
  materialPreset?: string | undefined;
2418
+ roofSegmentId?: string | undefined;
2318
2419
  panelMaterial?: {
2319
2420
  id?: string | undefined;
2320
2421
  preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
@@ -2334,36 +2435,35 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
2334
2435
  } | undefined;
2335
2436
  panelMaterialPreset?: string | undefined;
2336
2437
  panelTypePreset?: "residential" | "residential-large" | "compact" | "frameless" | undefined;
2337
- roofSegmentId?: string | undefined;
2338
2438
  surfaceNormal?: [number, number, number] | undefined;
2339
2439
  } | {
2340
2440
  object: "node";
2441
+ position: [number, number, number];
2442
+ id: `skylight_${string}`;
2341
2443
  parentId: string | null;
2342
2444
  visible: boolean;
2343
- metadata: import("zod").JSONType;
2344
- id: `skylight_${string}`;
2345
- type: "skylight";
2346
- position: [number, number, number];
2445
+ metadata: Record<string, unknown>;
2347
2446
  rotation: number;
2348
2447
  width: number;
2349
2448
  height: number;
2449
+ operationState: number;
2450
+ slideDirection: "x" | "z";
2350
2451
  frameThickness: number;
2351
2452
  frameDepth: number;
2453
+ curbHeight: number;
2454
+ cutoutOffset: number;
2352
2455
  skylightType: "flat" | "sliding" | "opening" | "walk-on" | "lantern";
2353
2456
  glassThickness: number;
2354
2457
  lanternHeight: number;
2355
2458
  lanternTopScale: number;
2356
2459
  openingAngle: number;
2357
- openingSide: "right" | "left" | "top" | "bottom";
2358
- operationState: number;
2460
+ openingSide: "top" | "right" | "left" | "bottom";
2359
2461
  motorHousing: boolean;
2360
2462
  slideFraction: number;
2361
- slideDirection: "z" | "x";
2362
2463
  trackWidth: number;
2363
2464
  motorHousingSize: number;
2364
2465
  curb: boolean;
2365
- curbHeight: number;
2366
- cutoutOffset: number;
2466
+ type: "skylight";
2367
2467
  name?: string | undefined;
2368
2468
  camera?: {
2369
2469
  position: [number, number, number];
@@ -2390,6 +2490,8 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
2390
2490
  } | undefined;
2391
2491
  } | undefined;
2392
2492
  materialPreset?: string | undefined;
2493
+ roofSegmentId?: string | undefined;
2494
+ surfaceNormal?: [number, number, number] | undefined;
2393
2495
  glassMaterial?: {
2394
2496
  id?: string | undefined;
2395
2497
  preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
@@ -2408,22 +2510,21 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
2408
2510
  } | undefined;
2409
2511
  } | undefined;
2410
2512
  glassMaterialPreset?: string | undefined;
2411
- roofSegmentId?: string | undefined;
2412
- surfaceNormal?: [number, number, number] | undefined;
2413
2513
  } | {
2414
2514
  object: "node";
2515
+ position: [number, number, number];
2516
+ id: `dormer_${string}`;
2415
2517
  parentId: string | null;
2416
2518
  visible: boolean;
2417
- metadata: import("zod").JSONType;
2418
- id: `dormer_${string}`;
2419
- type: "dormer";
2420
- position: [number, number, number];
2519
+ metadata: Record<string, unknown>;
2421
2520
  rotation: number;
2521
+ children: `window_${string}`[];
2422
2522
  width: number;
2423
2523
  depth: number;
2424
2524
  height: number;
2425
- roofType: "flat" | "hip" | "gable" | "shed" | "gambrel" | "dutch" | "mansard";
2525
+ roofType: "flat" | "hip" | "gable" | "shed" | "gambrel" | "dutch" | "mansard" | "conical";
2426
2526
  roofHeight: number;
2527
+ shedHighSide: "front" | "back";
2427
2528
  wallSkirtHeight: number;
2428
2529
  windowWidth: number;
2429
2530
  windowHeight: number;
@@ -2440,6 +2541,7 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
2440
2541
  windowSill: boolean;
2441
2542
  windowSillDepth: number;
2442
2543
  windowSillThickness: number;
2544
+ type: "dormer";
2443
2545
  name?: string | undefined;
2444
2546
  camera?: {
2445
2547
  position: [number, number, number];
@@ -2466,6 +2568,7 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
2466
2568
  } | undefined;
2467
2569
  } | undefined;
2468
2570
  materialPreset?: string | undefined;
2571
+ roofSegmentId?: string | undefined;
2469
2572
  topMaterial?: {
2470
2573
  id?: string | undefined;
2471
2574
  preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
@@ -2484,7 +2587,7 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
2484
2587
  } | undefined;
2485
2588
  } | undefined;
2486
2589
  topMaterialPreset?: string | undefined;
2487
- sideMaterial?: {
2590
+ wallMaterial?: {
2488
2591
  id?: string | undefined;
2489
2592
  preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
2490
2593
  properties?: {
@@ -2501,8 +2604,8 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
2501
2604
  scale?: number | undefined;
2502
2605
  } | undefined;
2503
2606
  } | undefined;
2504
- sideMaterialPreset?: string | undefined;
2505
- wallMaterial?: {
2607
+ wallMaterialPreset?: string | undefined;
2608
+ sideMaterial?: {
2506
2609
  id?: string | undefined;
2507
2610
  preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
2508
2611
  properties?: {
@@ -2519,23 +2622,22 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
2519
2622
  scale?: number | undefined;
2520
2623
  } | undefined;
2521
2624
  } | undefined;
2522
- wallMaterialPreset?: string | undefined;
2523
- roofSegmentId?: string | undefined;
2625
+ sideMaterialPreset?: string | undefined;
2524
2626
  } | {
2525
2627
  object: "node";
2628
+ id: `downspout_${string}`;
2526
2629
  parentId: string | null;
2527
2630
  visible: boolean;
2528
- metadata: import("zod").JSONType;
2529
- id: `downspout_${string}`;
2530
- type: "downspout";
2531
- materialPreset: string;
2631
+ metadata: Record<string, unknown>;
2532
2632
  length: number;
2633
+ materialPreset: string;
2533
2634
  diameter: number;
2534
- standoff: number;
2535
2635
  shape: "round" | "auto" | "rect";
2636
+ standoff: number;
2536
2637
  strapStyle: "none" | "band";
2537
2638
  strapSpacing: number;
2538
2639
  terminal: "straight" | "splash" | "kickout";
2640
+ type: "downspout";
2539
2641
  name?: string | undefined;
2540
2642
  camera?: {
2541
2643
  position: [number, number, number];
@@ -2544,6 +2646,7 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
2544
2646
  fov?: number | undefined;
2545
2647
  zoom?: number | undefined;
2546
2648
  } | undefined;
2649
+ slots?: Record<string, string> | undefined;
2547
2650
  material?: {
2548
2651
  id?: string | undefined;
2549
2652
  preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
@@ -2563,9 +2666,260 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
2563
2666
  } | undefined;
2564
2667
  gutterId?: string | undefined;
2565
2668
  outletId?: string | undefined;
2669
+ lengthMode?: "manual" | "to-ground" | undefined;
2670
+ } | {
2671
+ object: "node";
2672
+ id: `duct-segment_${string}`;
2673
+ parentId: string | null;
2674
+ visible: boolean;
2675
+ metadata: Record<string, unknown>;
2676
+ path: [number, number, number][];
2677
+ width: number;
2678
+ height: number;
2679
+ diameter: number;
2680
+ shape: "round" | "rect" | "oval";
2681
+ roll: number;
2682
+ ductMaterial: "spiral" | "sheet-metal" | "flex" | "duct-board";
2683
+ seamDetail: boolean;
2684
+ insulated: boolean;
2685
+ insulationR: number;
2686
+ system: "supply" | "return";
2687
+ type: "duct-segment";
2688
+ name?: string | undefined;
2689
+ camera?: {
2690
+ position: [number, number, number];
2691
+ target: [number, number, number];
2692
+ mode: "perspective" | "orthographic";
2693
+ fov?: number | undefined;
2694
+ zoom?: number | undefined;
2695
+ } | undefined;
2696
+ slots?: Record<string, string> | undefined;
2697
+ autoHangers?: boolean | undefined;
2698
+ hangerOverrides?: Record<string, {
2699
+ fraction?: number | undefined;
2700
+ skipped?: boolean | undefined;
2701
+ hostId?: string | undefined;
2702
+ }> | undefined;
2703
+ hangerStyle?: "double" | "single" | undefined;
2704
+ hangerSpacing?: number | undefined;
2705
+ hangerMaxReach?: number | undefined;
2706
+ wallAttachment?: {
2707
+ wallId: `wall_${string}`;
2708
+ side: "front" | "back";
2709
+ startUV: [number, number];
2710
+ endUV: [number, number];
2711
+ offset: number;
2712
+ } | undefined;
2713
+ } | {
2714
+ object: "node";
2715
+ position: [number, number, number];
2716
+ id: `duct-fitting_${string}`;
2717
+ parentId: string | null;
2718
+ visible: boolean;
2719
+ metadata: Record<string, unknown>;
2720
+ rotation: [number, number, number];
2721
+ width: number;
2722
+ height: number;
2723
+ angle: number;
2724
+ diameter: number;
2725
+ shape: "round" | "rect" | "oval";
2726
+ ductMaterial: "sheet-metal" | "flex" | "duct-board";
2727
+ system: "supply" | "return";
2728
+ fittingType: "elbow" | "tee" | "cross" | "reducer" | "transition" | "end-cap" | "damper" | "access-panel" | "coupling";
2729
+ shape2: "round" | "rect" | "oval";
2730
+ width2: number;
2731
+ height2: number;
2732
+ branchAngle: number;
2733
+ diameter2: number;
2734
+ damperAngle: number;
2735
+ panelWidth: number;
2736
+ panelHeight: number;
2737
+ type: "duct-fitting";
2738
+ name?: string | undefined;
2739
+ camera?: {
2740
+ position: [number, number, number];
2741
+ target: [number, number, number];
2742
+ mode: "perspective" | "orthographic";
2743
+ fov?: number | undefined;
2744
+ zoom?: number | undefined;
2745
+ } | undefined;
2746
+ slots?: Record<string, string> | undefined;
2747
+ inletShape?: "round" | "rect" | "oval" | undefined;
2748
+ outletShape?: "round" | "rect" | "oval" | undefined;
2749
+ } | {
2750
+ object: "node";
2751
+ position: [number, number, number];
2752
+ id: `duct-terminal_${string}`;
2753
+ parentId: string | null;
2754
+ visible: boolean;
2755
+ metadata: Record<string, unknown>;
2756
+ rotation: number;
2757
+ width: number;
2758
+ depth: number;
2759
+ terminalType: "supply-register" | "diffuser" | "return-grille";
2760
+ mount: "wall" | "ceiling" | "floor";
2761
+ collarShape: "round" | "rect" | "oval";
2762
+ collarDiameter: number;
2763
+ collarWidth: number;
2764
+ collarHeight: number;
2765
+ type: "duct-terminal";
2766
+ name?: string | undefined;
2767
+ camera?: {
2768
+ position: [number, number, number];
2769
+ target: [number, number, number];
2770
+ mode: "perspective" | "orthographic";
2771
+ fov?: number | undefined;
2772
+ zoom?: number | undefined;
2773
+ } | undefined;
2774
+ supportSlabId?: string | undefined;
2775
+ } | {
2776
+ object: "node";
2777
+ position: [number, number, number];
2778
+ id: `hvac-equipment_${string}`;
2779
+ parentId: string | null;
2780
+ visible: boolean;
2781
+ metadata: Record<string, unknown>;
2782
+ rotation: number;
2783
+ width: number;
2784
+ depth: number;
2785
+ height: number;
2786
+ equipmentType: "furnace" | "air-handler" | "condenser";
2787
+ supplyShape: "round" | "rect" | "oval";
2788
+ returnShape: "round" | "rect" | "oval";
2789
+ supplyDiameter: number;
2790
+ returnDiameter: number;
2791
+ supplyWidth: number;
2792
+ supplyHeight: number;
2793
+ returnWidth: number;
2794
+ returnHeight: number;
2795
+ type: "hvac-equipment";
2796
+ name?: string | undefined;
2797
+ camera?: {
2798
+ position: [number, number, number];
2799
+ target: [number, number, number];
2800
+ mode: "perspective" | "orthographic";
2801
+ fov?: number | undefined;
2802
+ zoom?: number | undefined;
2803
+ } | undefined;
2804
+ supportSlabId?: string | undefined;
2805
+ } | {
2806
+ object: "node";
2807
+ id: `lineset_${string}`;
2808
+ parentId: string | null;
2809
+ visible: boolean;
2810
+ metadata: Record<string, unknown>;
2811
+ path: [number, number, number][];
2812
+ insulated: boolean;
2813
+ suctionDiameter: number;
2814
+ liquidDiameter: number;
2815
+ type: "lineset";
2816
+ name?: string | undefined;
2817
+ camera?: {
2818
+ position: [number, number, number];
2819
+ target: [number, number, number];
2820
+ mode: "perspective" | "orthographic";
2821
+ fov?: number | undefined;
2822
+ zoom?: number | undefined;
2823
+ } | undefined;
2824
+ } | {
2825
+ object: "node";
2826
+ id: `liquid-line_${string}`;
2827
+ parentId: string | null;
2828
+ visible: boolean;
2829
+ metadata: Record<string, unknown>;
2830
+ path: [number, number, number][];
2831
+ diameter: number;
2832
+ type: "liquid-line";
2833
+ name?: string | undefined;
2834
+ camera?: {
2835
+ position: [number, number, number];
2836
+ target: [number, number, number];
2837
+ mode: "perspective" | "orthographic";
2838
+ fov?: number | undefined;
2839
+ zoom?: number | undefined;
2840
+ } | undefined;
2841
+ } | {
2842
+ object: "node";
2843
+ id: `pipe-segment_${string}`;
2844
+ parentId: string | null;
2845
+ visible: boolean;
2846
+ metadata: Record<string, unknown>;
2847
+ path: [number, number, number][];
2848
+ diameter: number;
2849
+ system: "waste" | "vent";
2850
+ pipeMaterial: "abs" | "pvc" | "cast-iron";
2851
+ type: "pipe-segment";
2852
+ name?: string | undefined;
2853
+ camera?: {
2854
+ position: [number, number, number];
2855
+ target: [number, number, number];
2856
+ mode: "perspective" | "orthographic";
2857
+ fov?: number | undefined;
2858
+ zoom?: number | undefined;
2859
+ } | undefined;
2860
+ autoHangers?: boolean | undefined;
2861
+ hangerOverrides?: Record<string, {
2862
+ fraction?: number | undefined;
2863
+ skipped?: boolean | undefined;
2864
+ hostId?: string | undefined;
2865
+ }> | undefined;
2866
+ hangerStyle?: "double" | "single" | undefined;
2867
+ hangerSpacing?: number | undefined;
2868
+ hangerMaxReach?: number | undefined;
2869
+ wallAttachment?: {
2870
+ wallId: `wall_${string}`;
2871
+ side: "front" | "back";
2872
+ startUV: [number, number];
2873
+ endUV: [number, number];
2874
+ offset: number;
2875
+ } | undefined;
2876
+ } | {
2877
+ object: "node";
2878
+ position: [number, number, number];
2879
+ id: `pipe-fitting_${string}`;
2880
+ parentId: string | null;
2881
+ visible: boolean;
2882
+ metadata: Record<string, unknown>;
2883
+ rotation: [number, number, number];
2884
+ angle: number;
2885
+ diameter: number;
2886
+ system: "waste" | "vent";
2887
+ fittingType: "elbow" | "cross" | "reducer" | "end-cap" | "coupling" | "wye" | "sanitary-tee" | "cleanout";
2888
+ diameter2: number;
2889
+ pipeMaterial: "abs" | "pvc" | "cast-iron";
2890
+ cleanoutStyle: "end" | "inline";
2891
+ type: "pipe-fitting";
2892
+ name?: string | undefined;
2893
+ camera?: {
2894
+ position: [number, number, number];
2895
+ target: [number, number, number];
2896
+ mode: "perspective" | "orthographic";
2897
+ fov?: number | undefined;
2898
+ zoom?: number | undefined;
2899
+ } | undefined;
2900
+ } | {
2901
+ object: "node";
2902
+ position: [number, number, number];
2903
+ id: `pipe-trap_${string}`;
2904
+ parentId: string | null;
2905
+ visible: boolean;
2906
+ metadata: Record<string, unknown>;
2907
+ rotation: number;
2908
+ diameter: number;
2909
+ pipeMaterial: "abs" | "pvc" | "cast-iron";
2910
+ armLengthM: number;
2911
+ type: "pipe-trap";
2912
+ name?: string | undefined;
2913
+ camera?: {
2914
+ position: [number, number, number];
2915
+ target: [number, number, number];
2916
+ mode: "perspective" | "orthographic";
2917
+ fov?: number | undefined;
2918
+ zoom?: number | undefined;
2919
+ } | undefined;
2566
2920
  }>;
2567
2921
  export declare function createSurfaceOpeningPreviewController(): {
2568
- previewSurfaceIds: Set<`bvent_${string}` | `elevator_${string}` | `item_${string}` | `ceiling_${string}` | `column_${string}` | `site_${string}` | `building_${string}` | `level_${string}` | `wall_${string}` | `door_${string}` | `window_${string}` | `fence_${string}` | `construction-dimension_${string}` | `structural-grid_${string}` | `zone_${string}` | `slab_${string}` | `roof_${string}` | `rseg_${string}` | `stair_${string}` | `sseg_${string}` | `scan_${string}` | `guide_${string}` | `measurement_${string}` | `spawn_${string}` | `shelf_${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}` | `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}`>;
2922
+ previewSurfaceIds: Set<`block_${string}` | `bvent_${string}` | `elevator_${string}` | `ceiling_${string}` | `item_${string}` | `procedural-item_${string}` | `column_${string}` | `construction-dimension_${string}` | `site_${string}` | `building_${string}` | `level_${string}` | `wall_${string}` | `door_${string}` | `window_${string}` | `leanto_${string}` | `roof_${string}` | `rseg_${string}` | `slab_${string}` | `fence_${string}` | `structural-grid_${string}` | `imesh_${string}` | `zone_${string}` | `stair_${string}` | `sseg_${string}` | `scan_${string}` | `guide_${string}` | `measurement_${string}` | `spawn_${string}` | `shelf_${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}` | `unit_${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}`>;
2569
2923
  apply(updates: SurfaceOpeningUpdate[]): void;
2570
2924
  clear(): void;
2571
2925
  };