@pascal-app/core 0.9.1 → 1.0.0-beta.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 (378) hide show
  1. package/README.md +17 -10
  2. package/dist/events/bus.d.ts +49 -2
  3. package/dist/events/bus.d.ts.map +1 -1
  4. package/dist/hooks/scene-registry/item-clip-registry.d.ts +18 -0
  5. package/dist/hooks/scene-registry/item-clip-registry.d.ts.map +1 -0
  6. package/dist/hooks/scene-registry/item-clip-registry.js +10 -0
  7. package/dist/hooks/scene-registry/scene-registry.d.ts +8 -1
  8. package/dist/hooks/scene-registry/scene-registry.d.ts.map +1 -1
  9. package/dist/hooks/scene-registry/scene-registry.js +27 -1
  10. package/dist/hooks/spatial-grid/floor-placed-elevation.d.ts +17 -1
  11. package/dist/hooks/spatial-grid/floor-placed-elevation.d.ts.map +1 -1
  12. package/dist/hooks/spatial-grid/floor-placed-elevation.js +61 -8
  13. package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts +135 -28
  14. package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts.map +1 -1
  15. package/dist/hooks/spatial-grid/spatial-grid-manager.js +427 -271
  16. package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts +46 -1
  17. package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts.map +1 -1
  18. package/dist/hooks/spatial-grid/spatial-grid-sync.js +208 -9
  19. package/dist/hooks/spatial-grid/support-host-id.d.ts +3 -0
  20. package/dist/hooks/spatial-grid/support-host-id.d.ts.map +1 -0
  21. package/dist/hooks/spatial-grid/support-host-id.js +2 -0
  22. package/dist/hooks/spatial-grid/support-host-patch.d.ts +51 -0
  23. package/dist/hooks/spatial-grid/support-host-patch.d.ts.map +1 -0
  24. package/dist/hooks/spatial-grid/support-host-patch.js +164 -0
  25. package/dist/index.d.ts +33 -11
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js +32 -10
  28. package/dist/lib/level-name.d.ts +4 -0
  29. package/dist/lib/level-name.d.ts.map +1 -0
  30. package/dist/lib/level-name.js +10 -0
  31. package/dist/lib/measurement-geometry.d.ts +23 -0
  32. package/dist/lib/measurement-geometry.d.ts.map +1 -0
  33. package/dist/lib/measurement-geometry.js +249 -0
  34. package/dist/lib/polygon-geometry.d.ts +0 -1
  35. package/dist/lib/polygon-geometry.d.ts.map +1 -1
  36. package/dist/lib/polygon-geometry.js +0 -18
  37. package/dist/lib/selection-proxy.d.ts +4 -0
  38. package/dist/lib/selection-proxy.d.ts.map +1 -0
  39. package/dist/lib/selection-proxy.js +12 -0
  40. package/dist/lib/slab-polygon.d.ts +31 -2
  41. package/dist/lib/slab-polygon.d.ts.map +1 -1
  42. package/dist/lib/slab-polygon.js +557 -31
  43. package/dist/lib/slots.d.ts +14 -0
  44. package/dist/lib/slots.d.ts.map +1 -0
  45. package/dist/lib/slots.js +26 -0
  46. package/dist/lib/space-detection.d.ts +40 -6
  47. package/dist/lib/space-detection.d.ts.map +1 -1
  48. package/dist/lib/space-detection.js +574 -192
  49. package/dist/lib/terrain-brush.d.ts +163 -0
  50. package/dist/lib/terrain-brush.d.ts.map +1 -0
  51. package/dist/lib/terrain-brush.js +359 -0
  52. package/dist/lib/terrain-codec.d.ts +51 -0
  53. package/dist/lib/terrain-codec.d.ts.map +1 -0
  54. package/dist/lib/terrain-codec.js +167 -0
  55. package/dist/lib/terrain-field.d.ts +150 -0
  56. package/dist/lib/terrain-field.d.ts.map +1 -0
  57. package/dist/lib/terrain-field.js +248 -0
  58. package/dist/lib/terrain-raycast.d.ts +44 -0
  59. package/dist/lib/terrain-raycast.d.ts.map +1 -0
  60. package/dist/lib/terrain-raycast.js +188 -0
  61. package/dist/lib/terrain-source.d.ts +60 -0
  62. package/dist/lib/terrain-source.d.ts.map +1 -0
  63. package/dist/lib/terrain-source.js +90 -0
  64. package/dist/lib/terrain-support.d.ts +60 -0
  65. package/dist/lib/terrain-support.d.ts.map +1 -0
  66. package/dist/lib/terrain-support.js +150 -0
  67. package/dist/lib/wall-distance.d.ts +60 -0
  68. package/dist/lib/wall-distance.d.ts.map +1 -0
  69. package/dist/lib/wall-distance.js +85 -0
  70. package/dist/lib/zone-quantities.d.ts +21 -0
  71. package/dist/lib/zone-quantities.d.ts.map +1 -0
  72. package/dist/lib/zone-quantities.js +428 -0
  73. package/dist/material-library.d.ts +28 -1
  74. package/dist/material-library.d.ts.map +1 -1
  75. package/dist/material-library.js +2233 -441
  76. package/dist/registry/handles.d.ts +91 -3
  77. package/dist/registry/handles.d.ts.map +1 -1
  78. package/dist/registry/index.d.ts +3 -3
  79. package/dist/registry/index.d.ts.map +1 -1
  80. package/dist/registry/index.js +1 -1
  81. package/dist/registry/registry.d.ts +46 -3
  82. package/dist/registry/registry.d.ts.map +1 -1
  83. package/dist/registry/registry.js +82 -1
  84. package/dist/registry/subtree.d.ts.map +1 -1
  85. package/dist/registry/subtree.js +8 -1
  86. package/dist/registry/types.d.ts +781 -39
  87. package/dist/registry/types.d.ts.map +1 -1
  88. package/dist/schema/index.d.ts +27 -8
  89. package/dist/schema/index.d.ts.map +1 -1
  90. package/dist/schema/index.js +23 -6
  91. package/dist/schema/material.d.ts +3 -2
  92. package/dist/schema/material.d.ts.map +1 -1
  93. package/dist/schema/material.js +7 -5
  94. package/dist/schema/nodes/box-vent.d.ts +2 -2
  95. package/dist/schema/nodes/cabinet.d.ts +536 -0
  96. package/dist/schema/nodes/cabinet.d.ts.map +1 -0
  97. package/dist/schema/nodes/cabinet.js +139 -0
  98. package/dist/schema/nodes/ceiling.d.ts +4 -3
  99. package/dist/schema/nodes/ceiling.d.ts.map +1 -1
  100. package/dist/schema/nodes/ceiling.js +11 -1
  101. package/dist/schema/nodes/chimney.d.ts +4 -4
  102. package/dist/schema/nodes/column.d.ts +4 -2
  103. package/dist/schema/nodes/column.d.ts.map +1 -1
  104. package/dist/schema/nodes/column.js +5 -0
  105. package/dist/schema/nodes/construction-dimension.d.ts +195 -0
  106. package/dist/schema/nodes/construction-dimension.d.ts.map +1 -0
  107. package/dist/schema/nodes/construction-dimension.js +151 -0
  108. package/dist/schema/nodes/cupola.d.ts +2 -2
  109. package/dist/schema/nodes/door.d.ts +42 -5
  110. package/dist/schema/nodes/door.d.ts.map +1 -1
  111. package/dist/schema/nodes/door.js +32 -0
  112. package/dist/schema/nodes/dormer.d.ts +8 -8
  113. package/dist/schema/nodes/dormer.js +1 -1
  114. package/dist/schema/nodes/downspout.d.ts +2 -2
  115. package/dist/schema/nodes/duct-fitting.d.ts +91 -0
  116. package/dist/schema/nodes/duct-fitting.d.ts.map +1 -0
  117. package/dist/schema/nodes/duct-fitting.js +92 -0
  118. package/dist/schema/nodes/duct-segment.d.ts +61 -0
  119. package/dist/schema/nodes/duct-segment.d.ts.map +1 -0
  120. package/dist/schema/nodes/duct-segment.js +73 -0
  121. package/dist/schema/nodes/duct-terminal.d.ts +58 -0
  122. package/dist/schema/nodes/duct-terminal.d.ts.map +1 -0
  123. package/dist/schema/nodes/duct-terminal.js +53 -0
  124. package/dist/schema/nodes/elevator.d.ts +3 -2
  125. package/dist/schema/nodes/elevator.d.ts.map +1 -1
  126. package/dist/schema/nodes/elevator.js +3 -0
  127. package/dist/schema/nodes/eyebrow-vent.d.ts +2 -2
  128. package/dist/schema/nodes/fence.d.ts +20 -2
  129. package/dist/schema/nodes/fence.d.ts.map +1 -1
  130. package/dist/schema/nodes/fence.js +33 -2
  131. package/dist/schema/nodes/gutter.d.ts +2 -2
  132. package/dist/schema/nodes/hvac-equipment.d.ts +64 -0
  133. package/dist/schema/nodes/hvac-equipment.d.ts.map +1 -0
  134. package/dist/schema/nodes/hvac-equipment.js +57 -0
  135. package/dist/schema/nodes/item.d.ts +9 -0
  136. package/dist/schema/nodes/item.d.ts.map +1 -1
  137. package/dist/schema/nodes/item.js +24 -0
  138. package/dist/schema/nodes/level.d.ts +2 -1
  139. package/dist/schema/nodes/level.d.ts.map +1 -1
  140. package/dist/schema/nodes/level.js +12 -31
  141. package/dist/schema/nodes/lineset.d.ts +42 -0
  142. package/dist/schema/nodes/lineset.d.ts.map +1 -0
  143. package/dist/schema/nodes/lineset.js +38 -0
  144. package/dist/schema/nodes/liquid-line.d.ts +34 -0
  145. package/dist/schema/nodes/liquid-line.d.ts.map +1 -0
  146. package/dist/schema/nodes/liquid-line.js +24 -0
  147. package/dist/schema/nodes/measurement.d.ts +306 -0
  148. package/dist/schema/nodes/measurement.d.ts.map +1 -0
  149. package/dist/schema/nodes/measurement.js +87 -0
  150. package/dist/schema/nodes/pipe-fitting.d.ts +56 -0
  151. package/dist/schema/nodes/pipe-fitting.d.ts.map +1 -0
  152. package/dist/schema/nodes/pipe-fitting.js +45 -0
  153. package/dist/schema/nodes/pipe-segment.d.ts +48 -0
  154. package/dist/schema/nodes/pipe-segment.d.ts.map +1 -0
  155. package/dist/schema/nodes/pipe-segment.js +36 -0
  156. package/dist/schema/nodes/pipe-trap.d.ts +43 -0
  157. package/dist/schema/nodes/pipe-trap.d.ts.map +1 -0
  158. package/dist/schema/nodes/pipe-trap.js +36 -0
  159. package/dist/schema/nodes/ridge-vent.d.ts +18 -3
  160. package/dist/schema/nodes/ridge-vent.d.ts.map +1 -1
  161. package/dist/schema/nodes/ridge-vent.js +221 -3
  162. package/dist/schema/nodes/roof-segment-shape.d.ts +90 -0
  163. package/dist/schema/nodes/roof-segment-shape.d.ts.map +1 -0
  164. package/dist/schema/nodes/roof-segment-shape.js +318 -0
  165. package/dist/schema/nodes/roof-segment-walls.d.ts +101 -0
  166. package/dist/schema/nodes/roof-segment-walls.d.ts.map +1 -0
  167. package/dist/schema/nodes/roof-segment-walls.js +330 -0
  168. package/dist/schema/nodes/roof-segment.d.ts +84 -8
  169. package/dist/schema/nodes/roof-segment.d.ts.map +1 -1
  170. package/dist/schema/nodes/roof-segment.js +290 -5
  171. package/dist/schema/nodes/roof.d.ts +8 -8
  172. package/dist/schema/nodes/shelf.d.ts +4 -2
  173. package/dist/schema/nodes/shelf.d.ts.map +1 -1
  174. package/dist/schema/nodes/shelf.js +8 -0
  175. package/dist/schema/nodes/site.d.ts +9 -0
  176. package/dist/schema/nodes/site.d.ts.map +1 -1
  177. package/dist/schema/nodes/site.js +8 -6
  178. package/dist/schema/nodes/skylight.d.ts +10 -10
  179. package/dist/schema/nodes/slab.d.ts +8 -2
  180. package/dist/schema/nodes/slab.d.ts.map +1 -1
  181. package/dist/schema/nodes/slab.js +18 -2
  182. package/dist/schema/nodes/solar-panel.d.ts +4 -4
  183. package/dist/schema/nodes/spawn.d.ts +1 -0
  184. package/dist/schema/nodes/spawn.d.ts.map +1 -1
  185. package/dist/schema/nodes/spawn.js +2 -0
  186. package/dist/schema/nodes/stair-segment.d.ts +4 -4
  187. package/dist/schema/nodes/stair.d.ts +16 -13
  188. package/dist/schema/nodes/stair.d.ts.map +1 -1
  189. package/dist/schema/nodes/stair.js +11 -1
  190. package/dist/schema/nodes/structural-grid.d.ts +27 -0
  191. package/dist/schema/nodes/structural-grid.d.ts.map +1 -0
  192. package/dist/schema/nodes/structural-grid.js +17 -0
  193. package/dist/schema/nodes/turbine-vent.d.ts +2 -2
  194. package/dist/schema/nodes/wall.d.ts +248 -6
  195. package/dist/schema/nodes/wall.d.ts.map +1 -1
  196. package/dist/schema/nodes/wall.js +266 -0
  197. package/dist/schema/nodes/window.d.ts +40 -3
  198. package/dist/schema/nodes/window.d.ts.map +1 -1
  199. package/dist/schema/nodes/window.js +30 -0
  200. package/dist/schema/nodes/zone.d.ts +22 -0
  201. package/dist/schema/nodes/zone.d.ts.map +1 -1
  202. package/dist/schema/nodes/zone.js +21 -0
  203. package/dist/schema/scene-material.d.ts +41 -0
  204. package/dist/schema/scene-material.d.ts.map +1 -0
  205. package/dist/schema/scene-material.js +9 -0
  206. package/dist/schema/terrain.d.ts +28 -0
  207. package/dist/schema/terrain.d.ts.map +1 -0
  208. package/dist/schema/terrain.js +30 -0
  209. package/dist/schema/types.d.ts +1300 -97
  210. package/dist/schema/types.d.ts.map +1 -1
  211. package/dist/schema/types.js +27 -0
  212. package/dist/services/__fixtures__/wall-plane-top-boundary-repro.d.ts +80 -0
  213. package/dist/services/__fixtures__/wall-plane-top-boundary-repro.d.ts.map +1 -0
  214. package/dist/services/__fixtures__/wall-plane-top-boundary-repro.js +89 -0
  215. package/dist/services/alignment-anchors.d.ts.map +1 -1
  216. package/dist/services/alignment-anchors.js +30 -1
  217. package/dist/services/alignment.d.ts +5 -0
  218. package/dist/services/alignment.d.ts.map +1 -1
  219. package/dist/services/alignment.js +2 -0
  220. package/dist/services/hosting.d.ts +8 -0
  221. package/dist/services/hosting.d.ts.map +1 -1
  222. package/dist/services/hosting.js +13 -4
  223. package/dist/services/index.d.ts +9 -2
  224. package/dist/services/index.d.ts.map +1 -1
  225. package/dist/services/index.js +9 -2
  226. package/dist/services/level-height.d.ts +27 -0
  227. package/dist/services/level-height.d.ts.map +1 -0
  228. package/dist/services/level-height.js +94 -0
  229. package/dist/services/opening-guides.d.ts +141 -0
  230. package/dist/services/opening-guides.d.ts.map +1 -0
  231. package/dist/services/opening-guides.js +267 -0
  232. package/dist/services/port-connectivity.d.ts +115 -0
  233. package/dist/services/port-connectivity.d.ts.map +1 -0
  234. package/dist/services/port-connectivity.js +300 -0
  235. package/dist/services/riser-diagram.d.ts +40 -0
  236. package/dist/services/riser-diagram.d.ts.map +1 -0
  237. package/dist/services/riser-diagram.js +110 -0
  238. package/dist/services/snap.d.ts +9 -1
  239. package/dist/services/snap.d.ts.map +1 -1
  240. package/dist/services/snap.js +21 -1
  241. package/dist/services/storey.d.ts +103 -0
  242. package/dist/services/storey.d.ts.map +1 -0
  243. package/dist/services/storey.js +296 -0
  244. package/dist/services/system-graph.d.ts +30 -0
  245. package/dist/services/system-graph.d.ts.map +1 -0
  246. package/dist/services/system-graph.js +164 -0
  247. package/dist/services/validate-dwv.d.ts +32 -0
  248. package/dist/services/validate-dwv.d.ts.map +1 -0
  249. package/dist/services/validate-dwv.js +118 -0
  250. package/dist/store/actions/node-actions.d.ts.map +1 -1
  251. package/dist/store/actions/node-actions.js +141 -4
  252. package/dist/store/history-control.d.ts +31 -0
  253. package/dist/store/history-control.d.ts.map +1 -1
  254. package/dist/store/history-control.js +130 -0
  255. package/dist/store/use-live-terrain.d.ts +65 -0
  256. package/dist/store/use-live-terrain.d.ts.map +1 -0
  257. package/dist/store/use-live-terrain.js +31 -0
  258. package/dist/store/use-live-transforms.d.ts +8 -0
  259. package/dist/store/use-live-transforms.d.ts.map +1 -1
  260. package/dist/store/use-scene.d.ts +47 -3
  261. package/dist/store/use-scene.d.ts.map +1 -1
  262. package/dist/store/use-scene.js +992 -55
  263. package/dist/systems/elevator/elevator-opening-system.d.ts +1 -0
  264. package/dist/systems/elevator/elevator-opening-system.d.ts.map +1 -1
  265. package/dist/systems/elevator/elevator-opening-system.js +27 -21
  266. package/dist/systems/elevator/elevator-service.d.ts +0 -2
  267. package/dist/systems/elevator/elevator-service.d.ts.map +1 -1
  268. package/dist/systems/elevator/elevator-service.js +2 -24
  269. package/dist/systems/fence/fence-centerline.d.ts +12 -0
  270. package/dist/systems/fence/fence-centerline.d.ts.map +1 -0
  271. package/dist/systems/fence/fence-centerline.js +37 -0
  272. package/dist/systems/fence/fence-spline.d.ts +39 -0
  273. package/dist/systems/fence/fence-spline.d.ts.map +1 -0
  274. package/dist/systems/fence/fence-spline.js +196 -0
  275. package/dist/systems/slab/slab-placement.d.ts +11 -0
  276. package/dist/systems/slab/slab-placement.d.ts.map +1 -0
  277. package/dist/systems/slab/slab-placement.js +14 -0
  278. package/dist/systems/slab/slab-support.d.ts +137 -0
  279. package/dist/systems/slab/slab-support.d.ts.map +1 -0
  280. package/dist/systems/slab/slab-support.js +557 -0
  281. package/dist/systems/stair/stair-footprint.d.ts.map +1 -1
  282. package/dist/systems/stair/stair-footprint.js +21 -11
  283. package/dist/systems/stair/stair-opening-preview.d.ts +1300 -505
  284. package/dist/systems/stair/stair-opening-preview.d.ts.map +1 -1
  285. package/dist/systems/stair/stair-opening-sync.d.ts.map +1 -1
  286. package/dist/systems/stair/stair-opening-sync.js +19 -33
  287. package/dist/systems/stair/stair-opening-system.d.ts.map +1 -1
  288. package/dist/systems/stair/stair-opening-system.js +32 -4
  289. package/dist/systems/stair/stair-rise.d.ts +22 -0
  290. package/dist/systems/stair/stair-rise.d.ts.map +1 -0
  291. package/dist/systems/stair/stair-rise.js +79 -0
  292. package/dist/systems/wall/wall-curve.d.ts +10 -0
  293. package/dist/systems/wall/wall-curve.d.ts.map +1 -1
  294. package/dist/systems/wall/wall-curve.js +1 -1
  295. package/dist/systems/wall/wall-mitering.d.ts.map +1 -1
  296. package/dist/systems/wall/wall-mitering.js +44 -8
  297. package/dist/systems/wall/wall-top.d.ts +40 -0
  298. package/dist/systems/wall/wall-top.d.ts.map +1 -0
  299. package/dist/systems/wall/wall-top.js +46 -0
  300. package/dist/utils/clone-scene-graph.d.ts +1 -0
  301. package/dist/utils/clone-scene-graph.d.ts.map +1 -1
  302. package/dist/utils/clone-scene-graph.js +56 -5
  303. package/dist/utils/heal-scene-graph.d.ts +18 -0
  304. package/dist/utils/heal-scene-graph.d.ts.map +1 -0
  305. package/dist/utils/heal-scene-graph.js +106 -0
  306. package/dist/validation/validate-build-json.d.ts +3 -0
  307. package/dist/validation/validate-build-json.d.ts.map +1 -1
  308. package/dist/validation/validate-build-json.js +90 -5
  309. package/package.json +4 -4
  310. package/dist/hooks/spatial-grid/floor-placed-elevation.test.d.ts +0 -2
  311. package/dist/hooks/spatial-grid/floor-placed-elevation.test.d.ts.map +0 -1
  312. package/dist/hooks/spatial-grid/floor-placed-elevation.test.js +0 -273
  313. package/dist/lib/space-detection-pause.test.d.ts +0 -2
  314. package/dist/lib/space-detection-pause.test.d.ts.map +0 -1
  315. package/dist/lib/space-detection-pause.test.js +0 -42
  316. package/dist/lib/space-detection.test.d.ts +0 -2
  317. package/dist/lib/space-detection.test.d.ts.map +0 -1
  318. package/dist/lib/space-detection.test.js +0 -77
  319. package/dist/registry/registry.test.d.ts +0 -2
  320. package/dist/registry/registry.test.d.ts.map +0 -1
  321. package/dist/registry/registry.test.js +0 -183
  322. package/dist/registry/relations-resolver.test.d.ts +0 -2
  323. package/dist/registry/relations-resolver.test.d.ts.map +0 -1
  324. package/dist/registry/relations-resolver.test.js +0 -183
  325. package/dist/registry/scene-api.test.d.ts +0 -2
  326. package/dist/registry/scene-api.test.d.ts.map +0 -1
  327. package/dist/registry/scene-api.test.js +0 -183
  328. package/dist/registry/subtree.test.d.ts +0 -2
  329. package/dist/registry/subtree.test.d.ts.map +0 -1
  330. package/dist/registry/subtree.test.js +0 -133
  331. package/dist/schema/asset-url.test.d.ts +0 -2
  332. package/dist/schema/asset-url.test.d.ts.map +0 -1
  333. package/dist/schema/asset-url.test.js +0 -134
  334. package/dist/services/alignment-anchors.test.d.ts +0 -2
  335. package/dist/services/alignment-anchors.test.d.ts.map +0 -1
  336. package/dist/services/alignment-anchors.test.js +0 -383
  337. package/dist/services/alignment.test.d.ts +0 -2
  338. package/dist/services/alignment.test.d.ts.map +0 -1
  339. package/dist/services/alignment.test.js +0 -92
  340. package/dist/services/drag-session.test.d.ts +0 -2
  341. package/dist/services/drag-session.test.d.ts.map +0 -1
  342. package/dist/services/drag-session.test.js +0 -219
  343. package/dist/services/hosting.test.d.ts +0 -2
  344. package/dist/services/hosting.test.d.ts.map +0 -1
  345. package/dist/services/hosting.test.js +0 -199
  346. package/dist/services/movement.test.d.ts +0 -2
  347. package/dist/services/movement.test.d.ts.map +0 -1
  348. package/dist/services/movement.test.js +0 -133
  349. package/dist/services/single-undo-dance.test.d.ts +0 -2
  350. package/dist/services/single-undo-dance.test.d.ts.map +0 -1
  351. package/dist/services/single-undo-dance.test.js +0 -210
  352. package/dist/services/snap.test.d.ts +0 -2
  353. package/dist/services/snap.test.d.ts.map +0 -1
  354. package/dist/services/snap.test.js +0 -95
  355. package/dist/store/actions/node-mutation-sanitize.test.d.ts +0 -2
  356. package/dist/store/actions/node-mutation-sanitize.test.d.ts.map +0 -1
  357. package/dist/store/actions/node-mutation-sanitize.test.js +0 -147
  358. package/dist/store/actions/reparent.test.d.ts +0 -2
  359. package/dist/store/actions/reparent.test.d.ts.map +0 -1
  360. package/dist/store/actions/reparent.test.js +0 -212
  361. package/dist/store/use-scene-elevator-migration.test.d.ts +0 -2
  362. package/dist/store/use-scene-elevator-migration.test.d.ts.map +0 -1
  363. package/dist/store/use-scene-elevator-migration.test.js +0 -109
  364. package/dist/systems/elevator/elevator-opening-sync.test.d.ts +0 -2
  365. package/dist/systems/elevator/elevator-opening-sync.test.d.ts.map +0 -1
  366. package/dist/systems/elevator/elevator-opening-sync.test.js +0 -146
  367. package/dist/systems/elevator/elevator-runtime.test.d.ts +0 -2
  368. package/dist/systems/elevator/elevator-runtime.test.d.ts.map +0 -1
  369. package/dist/systems/elevator/elevator-runtime.test.js +0 -64
  370. package/dist/systems/stair/stair-opening-preview.test.d.ts +0 -2
  371. package/dist/systems/stair/stair-opening-preview.test.d.ts.map +0 -1
  372. package/dist/systems/stair/stair-opening-preview.test.js +0 -80
  373. package/dist/systems/stair/stair-opening-sync.test.d.ts +0 -2
  374. package/dist/systems/stair/stair-opening-sync.test.d.ts.map +0 -1
  375. package/dist/systems/stair/stair-opening-sync.test.js +0 -446
  376. package/dist/utils/clone-scene-graph.test.d.ts +0 -2
  377. package/dist/utils/clone-scene-graph.test.d.ts.map +0 -1
  378. package/dist/utils/clone-scene-graph.test.js +0 -59
@@ -106,6 +106,7 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
106
106
  } | undefined;
107
107
  } | undefined;
108
108
  materialPreset?: string | undefined;
109
+ slots?: Record<string, string> | undefined;
109
110
  shaftWidth?: number | undefined;
110
111
  shaftDepth?: number | undefined;
111
112
  servedLevelIds?: string[] | undefined;
@@ -189,7 +190,11 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
189
190
  side?: "front" | "back" | undefined;
190
191
  wallId?: string | undefined;
191
192
  wallT?: number | undefined;
193
+ roofSegmentId?: string | undefined;
194
+ roofFace?: "front" | "back" | "right" | "left" | undefined;
195
+ supportSlabId?: string | undefined;
192
196
  collectionIds?: `collection_${string}`[] | undefined;
197
+ slots?: Record<string, string> | undefined;
193
198
  } | {
194
199
  object: "node";
195
200
  parentId: string | null;
@@ -205,7 +210,6 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
205
210
  stairId?: string | undefined;
206
211
  elevatorId?: string | undefined;
207
212
  }[];
208
- height: number;
209
213
  autoFromWalls: boolean;
210
214
  name?: string | undefined;
211
215
  camera?: {
@@ -233,6 +237,8 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
233
237
  } | undefined;
234
238
  } | undefined;
235
239
  materialPreset?: string | undefined;
240
+ slots?: Record<string, string> | undefined;
241
+ height?: number | undefined;
236
242
  } | {
237
243
  object: "node";
238
244
  parentId: string | null;
@@ -321,6 +327,46 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
321
327
  fov?: number | undefined;
322
328
  zoom?: number | undefined;
323
329
  } | undefined;
330
+ supportSlabId?: string | undefined;
331
+ material?: {
332
+ id?: string | undefined;
333
+ preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
334
+ properties?: {
335
+ color: string;
336
+ roughness: number;
337
+ metalness: number;
338
+ opacity: number;
339
+ transparent: boolean;
340
+ side: "front" | "back" | "double";
341
+ } | undefined;
342
+ texture?: {
343
+ url: string;
344
+ repeat?: [number, number] | undefined;
345
+ scale?: number | undefined;
346
+ } | undefined;
347
+ } | undefined;
348
+ materialPreset?: string | undefined;
349
+ slots?: Record<string, string> | undefined;
350
+ } | {
351
+ object: "node";
352
+ parentId: string | null;
353
+ 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";
362
+ name?: string | undefined;
363
+ camera?: {
364
+ position: [number, number, number];
365
+ target: [number, number, number];
366
+ mode: "perspective" | "orthographic";
367
+ fov?: number | undefined;
368
+ zoom?: number | undefined;
369
+ } | undefined;
324
370
  material?: {
325
371
  id?: string | undefined;
326
372
  preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
@@ -339,6 +385,80 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
339
385
  } | undefined;
340
386
  } | undefined;
341
387
  materialPreset?: string | undefined;
388
+ interiorMaterial?: {
389
+ id?: string | undefined;
390
+ preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
391
+ properties?: {
392
+ color: string;
393
+ roughness: number;
394
+ metalness: number;
395
+ opacity: number;
396
+ transparent: boolean;
397
+ side: "front" | "back" | "double";
398
+ } | undefined;
399
+ texture?: {
400
+ url: string;
401
+ repeat?: [number, number] | undefined;
402
+ scale?: number | undefined;
403
+ } | undefined;
404
+ } | undefined;
405
+ interiorMaterialPreset?: string | undefined;
406
+ exteriorMaterial?: {
407
+ id?: string | undefined;
408
+ preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
409
+ properties?: {
410
+ color: string;
411
+ roughness: number;
412
+ metalness: number;
413
+ opacity: number;
414
+ transparent: boolean;
415
+ side: "front" | "back" | "double";
416
+ } | undefined;
417
+ texture?: {
418
+ url: string;
419
+ repeat?: [number, number] | undefined;
420
+ scale?: number | undefined;
421
+ } | undefined;
422
+ } | undefined;
423
+ exteriorMaterialPreset?: string | undefined;
424
+ slots?: Record<string, string> | undefined;
425
+ thickness?: number | undefined;
426
+ height?: number | undefined;
427
+ curveOffset?: number | undefined;
428
+ supportSlabId?: string | undefined;
429
+ supportOffset?: number | undefined;
430
+ fillToTerrain?: boolean | undefined;
431
+ faceBands?: {
432
+ enabled: boolean;
433
+ count: number;
434
+ lowerHeight: number;
435
+ middleHeight: number;
436
+ upperHeight: number;
437
+ } | undefined;
438
+ skirting?: {
439
+ enabled: boolean;
440
+ sides: "interior" | "exterior" | "both";
441
+ height: number;
442
+ proud: number;
443
+ profile: "flat" | "bevel" | "triangle" | "cove" | "bullnose" | "base-modern" | "base-colonial" | "base-shoe" | "base-ogee" | "crown-cove" | "crown-ogee" | "crown-craftsman" | "crown-layered" | "rail-rounded" | "rail-ogee" | "rail-picture" | "rail-stepped";
444
+ offsetY?: number | undefined;
445
+ } | undefined;
446
+ crown?: {
447
+ enabled: boolean;
448
+ sides: "interior" | "exterior" | "both";
449
+ height: number;
450
+ proud: number;
451
+ profile: "flat" | "bevel" | "triangle" | "cove" | "bullnose" | "base-modern" | "base-colonial" | "base-shoe" | "base-ogee" | "crown-cove" | "crown-ogee" | "crown-craftsman" | "crown-layered" | "rail-rounded" | "rail-ogee" | "rail-picture" | "rail-stepped";
452
+ offsetY?: number | undefined;
453
+ } | undefined;
454
+ chairRail?: {
455
+ enabled: boolean;
456
+ sides: "interior" | "exterior" | "both";
457
+ height: number;
458
+ proud: number;
459
+ profile: "flat" | "bevel" | "triangle" | "cove" | "bullnose" | "base-modern" | "base-colonial" | "base-shoe" | "base-ogee" | "crown-cove" | "crown-ogee" | "crown-craftsman" | "crown-layered" | "rail-rounded" | "rail-ogee" | "rail-picture" | "rail-stepped";
460
+ offsetY?: number | undefined;
461
+ } | undefined;
342
462
  } | {
343
463
  object: "node";
344
464
  parentId: string | null;
@@ -356,10 +476,12 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
356
476
  topRailHeight: number;
357
477
  groundClearance: number;
358
478
  edgeInset: number;
479
+ slatGap: number;
480
+ postCap: "flat" | "none" | "pyramid";
359
481
  baseStyle: "floating" | "grounded";
360
482
  showInfill: boolean;
361
483
  color: string;
362
- style: "slat" | "rail" | "privacy";
484
+ style: "slat" | "rail" | "privacy" | "horizontal";
363
485
  name?: string | undefined;
364
486
  camera?: {
365
487
  position: [number, number, number];
@@ -386,27 +508,53 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
386
508
  } | undefined;
387
509
  } | undefined;
388
510
  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;
389
516
  curveOffset?: number | undefined;
390
517
  } | {
391
518
  object: "node";
392
519
  parentId: string | null;
393
520
  visible: boolean;
394
521
  metadata: import("zod").JSONType;
395
- id: `guide_${string}`;
396
- type: "guide";
397
- url: string;
398
- position: [number, number, number];
399
- rotation: [number, number, number];
400
- scale: number;
401
- opacity: number;
402
- scaleReference: {
403
- start: [number, number];
404
- end: [number, number];
405
- realLengthMeters: number;
406
- measuredLengthUnits: number;
407
- metersPerUnit: number;
408
- label: string;
409
- } | null;
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;
410
558
  name?: string | undefined;
411
559
  camera?: {
412
560
  position: [number, number, number];
@@ -420,26 +568,106 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
420
568
  parentId: string | null;
421
569
  visible: boolean;
422
570
  metadata: import("zod").JSONType;
423
- id: `rseg_${string}`;
424
- type: "roof-segment";
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;
632
+ name?: string | undefined;
633
+ camera?: {
634
+ position: [number, number, number];
635
+ target: [number, number, number];
636
+ mode: "perspective" | "orthographic";
637
+ fov?: number | undefined;
638
+ zoom?: number | undefined;
639
+ } | undefined;
640
+ material?: {
641
+ id?: string | undefined;
642
+ preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
643
+ properties?: {
644
+ color: string;
645
+ roughness: number;
646
+ metalness: number;
647
+ opacity: number;
648
+ transparent: boolean;
649
+ side: "front" | "back" | "double";
650
+ } | undefined;
651
+ texture?: {
652
+ url: string;
653
+ repeat?: [number, number] | undefined;
654
+ scale?: number | undefined;
655
+ } | undefined;
656
+ } | undefined;
657
+ 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";
425
668
  position: [number, number, number];
426
669
  rotation: number;
427
- roofType: "flat" | "hip" | "gable" | "shed" | "gambrel" | "dutch" | "mansard";
428
- width: number;
429
- depth: number;
430
- wallHeight: number;
431
- pitch: number;
432
- wallThickness: number;
433
- deckThickness: number;
434
- overhang: number;
435
- shingleThickness: number;
436
- gambrelLowerWidthRatio: number;
437
- gambrelLowerHeightRatio: number;
438
- mansardSteepWidthRatio: number;
439
- mansardSteepHeightRatio: number;
440
- dutchHipWidthRatio: number;
441
- dutchHipHeightRatio: number;
442
- children: string[];
670
+ children: `rseg_${string}`[];
443
671
  name?: string | undefined;
444
672
  camera?: {
445
673
  position: [number, number, number];
@@ -525,11 +753,28 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
525
753
  parentId: string | null;
526
754
  visible: boolean;
527
755
  metadata: import("zod").JSONType;
528
- id: `roof_${string}`;
529
- type: "roof";
756
+ id: `stair_${string}`;
757
+ type: "stair";
530
758
  position: [number, number, number];
531
759
  rotation: number;
532
- children: `rseg_${string}`[];
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}`[];
533
778
  name?: string | undefined;
534
779
  camera?: {
535
780
  position: [number, number, number];
@@ -556,7 +801,7 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
556
801
  } | undefined;
557
802
  } | undefined;
558
803
  materialPreset?: string | undefined;
559
- topMaterial?: {
804
+ railingMaterial?: {
560
805
  id?: string | undefined;
561
806
  preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
562
807
  properties?: {
@@ -573,8 +818,8 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
573
818
  scale?: number | undefined;
574
819
  } | undefined;
575
820
  } | undefined;
576
- topMaterialPreset?: string | undefined;
577
- edgeMaterial?: {
821
+ railingMaterialPreset?: string | undefined;
822
+ treadMaterial?: {
578
823
  id?: string | undefined;
579
824
  preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
580
825
  properties?: {
@@ -591,8 +836,8 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
591
836
  scale?: number | undefined;
592
837
  } | undefined;
593
838
  } | undefined;
594
- edgeMaterialPreset?: string | undefined;
595
- wallMaterial?: {
839
+ treadMaterialPreset?: string | undefined;
840
+ sideMaterial?: {
596
841
  id?: string | undefined;
597
842
  preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
598
843
  properties?: {
@@ -609,7 +854,11 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
609
854
  scale?: number | undefined;
610
855
  } | undefined;
611
856
  } | undefined;
612
- wallMaterialPreset?: string | undefined;
857
+ sideMaterialPreset?: string | undefined;
858
+ slots?: Record<string, string> | undefined;
859
+ supportSlabId?: string | undefined;
860
+ deckSlabId?: string | undefined;
861
+ totalRise?: number | undefined;
613
862
  } | {
614
863
  object: "node";
615
864
  parentId: string | null;
@@ -635,22 +884,21 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
635
884
  parentId: string | null;
636
885
  visible: boolean;
637
886
  metadata: import("zod").JSONType;
638
- id: `shelf_${string}`;
639
- type: "shelf";
640
- children: `item_${string}`[];
887
+ id: `guide_${string}`;
888
+ type: "guide";
889
+ url: string;
641
890
  position: [number, number, number];
642
891
  rotation: [number, number, number];
643
- width: number;
644
- depth: number;
645
- thickness: number;
646
- height: number;
647
- style: "wall-shelf" | "bookshelf" | "open-rack" | "cubby";
648
- rows: number;
649
- columns: number;
650
- withBack: boolean;
651
- withSides: boolean;
652
- withBottom: boolean;
653
- bracketStyle: "minimal" | "industrial" | "hidden";
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;
654
902
  name?: string | undefined;
655
903
  camera?: {
656
904
  position: [number, number, number];
@@ -659,40 +907,94 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
659
907
  fov?: number | undefined;
660
908
  zoom?: number | undefined;
661
909
  } | undefined;
662
- material?: {
663
- id?: string | undefined;
664
- preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
665
- properties?: {
666
- color: string;
667
- roughness: number;
668
- metalness: number;
669
- opacity: number;
670
- transparent: boolean;
671
- side: "front" | "back" | "double";
672
- } | undefined;
673
- texture?: {
674
- url: string;
675
- repeat?: [number, number] | undefined;
676
- scale?: number | undefined;
677
- } | undefined;
678
- } | undefined;
679
- materialPreset?: string | undefined;
680
910
  } | {
681
911
  object: "node";
682
912
  parentId: string | null;
683
913
  visible: boolean;
684
914
  metadata: import("zod").JSONType;
685
- id: `slab_${string}`;
686
- type: "slab";
687
- polygon: [number, number][];
688
- holes: [number, number][][];
689
- holeMetadata: {
690
- source: "stair" | "elevator" | "manual";
691
- stairId?: string | undefined;
692
- elevatorId?: string | undefined;
693
- }[];
694
- elevation: number;
695
- autoFromWalls: boolean;
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
+ }];
936
+ } | {
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
+ }];
963
+ } | {
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
+ })[];
974
+ } | {
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
+ })[];
985
+ } | {
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
+ };
696
998
  name?: string | undefined;
697
999
  camera?: {
698
1000
  position: [number, number, number];
@@ -701,24 +1003,6 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
701
1003
  fov?: number | undefined;
702
1004
  zoom?: number | undefined;
703
1005
  } | undefined;
704
- material?: {
705
- id?: string | undefined;
706
- preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
707
- properties?: {
708
- color: string;
709
- roughness: number;
710
- metalness: number;
711
- opacity: number;
712
- transparent: boolean;
713
- side: "front" | "back" | "double";
714
- } | undefined;
715
- texture?: {
716
- url: string;
717
- repeat?: [number, number] | undefined;
718
- scale?: number | undefined;
719
- } | undefined;
720
- } | undefined;
721
- materialPreset?: string | undefined;
722
1006
  } | {
723
1007
  object: "node";
724
1008
  parentId: string | null;
@@ -736,23 +1020,28 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
736
1020
  fov?: number | undefined;
737
1021
  zoom?: number | undefined;
738
1022
  } | undefined;
1023
+ supportSlabId?: string | undefined;
739
1024
  } | {
740
1025
  object: "node";
741
1026
  parentId: string | null;
742
1027
  visible: boolean;
743
1028
  metadata: import("zod").JSONType;
744
- id: `sseg_${string}`;
745
- type: "stair-segment";
1029
+ id: `shelf_${string}`;
1030
+ type: "shelf";
1031
+ children: `item_${string}`[];
746
1032
  position: [number, number, number];
747
- rotation: number;
748
- segmentType: "stair" | "landing";
1033
+ rotation: [number, number, number];
749
1034
  width: number;
750
- length: number;
751
- height: number;
752
- stepCount: number;
753
- attachmentSide: "front" | "left" | "right";
754
- fillToFloor: boolean;
1035
+ depth: number;
755
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";
756
1045
  name?: string | undefined;
757
1046
  camera?: {
758
1047
  position: [number, number, number];
@@ -761,6 +1050,7 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
761
1050
  fov?: number | undefined;
762
1051
  zoom?: number | undefined;
763
1052
  } | undefined;
1053
+ supportSlabId?: string | undefined;
764
1054
  material?: {
765
1055
  id?: string | undefined;
766
1056
  preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
@@ -779,34 +1069,25 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
779
1069
  } | undefined;
780
1070
  } | undefined;
781
1071
  materialPreset?: string | undefined;
1072
+ slots?: Record<string, string> | undefined;
782
1073
  } | {
783
1074
  object: "node";
784
1075
  parentId: string | null;
785
1076
  visible: boolean;
786
1077
  metadata: import("zod").JSONType;
787
- id: `stair_${string}`;
788
- type: "stair";
789
- position: [number, number, number];
790
- rotation: number;
791
- stairType: "straight" | "spiral" | "curved";
792
- fromLevelId: string | null;
793
- toLevelId: string | null;
794
- slabOpeningMode: "none" | "destination";
795
- openingOffset: number;
1078
+ id: `duct-segment_${string}`;
1079
+ type: "duct-segment";
1080
+ path: [number, number, number][];
1081
+ shape: "round" | "rect" | "oval";
1082
+ diameter: number;
796
1083
  width: number;
797
- totalRise: number;
798
- stepCount: number;
799
- thickness: number;
800
- fillToFloor: boolean;
801
- innerRadius: number;
802
- sweepAngle: number;
803
- topLandingMode: "none" | "integrated";
804
- topLandingDepth: number;
805
- showCenterColumn: boolean;
806
- showStepSupports: boolean;
807
- railingMode: "none" | "left" | "right" | "both";
808
- railingHeight: number;
809
- children: `sseg_${string}`[];
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";
810
1091
  name?: string | undefined;
811
1092
  camera?: {
812
1093
  position: [number, number, number];
@@ -815,125 +1096,29 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
815
1096
  fov?: number | undefined;
816
1097
  zoom?: number | undefined;
817
1098
  } | undefined;
818
- material?: {
819
- id?: string | undefined;
820
- preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
821
- properties?: {
822
- color: string;
823
- roughness: number;
824
- metalness: number;
825
- opacity: number;
826
- transparent: boolean;
827
- side: "front" | "back" | "double";
828
- } | undefined;
829
- texture?: {
830
- url: string;
831
- repeat?: [number, number] | undefined;
832
- scale?: number | undefined;
833
- } | undefined;
834
- } | undefined;
835
- materialPreset?: string | undefined;
836
- railingMaterial?: {
837
- id?: string | undefined;
838
- preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
839
- properties?: {
840
- color: string;
841
- roughness: number;
842
- metalness: number;
843
- opacity: number;
844
- transparent: boolean;
845
- side: "front" | "back" | "double";
846
- } | undefined;
847
- texture?: {
848
- url: string;
849
- repeat?: [number, number] | undefined;
850
- scale?: number | undefined;
851
- } | undefined;
852
- } | undefined;
853
- railingMaterialPreset?: string | undefined;
854
- treadMaterial?: {
855
- id?: string | undefined;
856
- preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
857
- properties?: {
858
- color: string;
859
- roughness: number;
860
- metalness: number;
861
- opacity: number;
862
- transparent: boolean;
863
- side: "front" | "back" | "double";
864
- } | undefined;
865
- texture?: {
866
- url: string;
867
- repeat?: [number, number] | undefined;
868
- scale?: number | undefined;
869
- } | undefined;
870
- } | undefined;
871
- treadMaterialPreset?: string | undefined;
872
- sideMaterial?: {
873
- id?: string | undefined;
874
- preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
875
- properties?: {
876
- color: string;
877
- roughness: number;
878
- metalness: number;
879
- opacity: number;
880
- transparent: boolean;
881
- side: "front" | "back" | "double";
882
- } | undefined;
883
- texture?: {
884
- url: string;
885
- repeat?: [number, number] | undefined;
886
- scale?: number | undefined;
887
- } | undefined;
888
- } | undefined;
889
- sideMaterialPreset?: string | undefined;
1099
+ slots?: Record<string, string> | undefined;
890
1100
  } | {
891
1101
  object: "node";
892
1102
  parentId: string | null;
893
1103
  visible: boolean;
894
1104
  metadata: import("zod").JSONType;
895
- id: `door_${string}`;
896
- type: "door";
1105
+ id: `duct-fitting_${string}`;
1106
+ type: "duct-fitting";
897
1107
  position: [number, number, number];
898
1108
  rotation: [number, number, number];
1109
+ fittingType: "elbow" | "tee" | "cross" | "reducer" | "transition";
1110
+ shape: "round" | "rect" | "oval";
899
1111
  width: number;
900
1112
  height: number;
901
- doorCategory: "interior" | "garage";
902
- doorType: "double" | "hinged" | "french" | "folding" | "pocket" | "barn" | "sliding" | "garage-sectional" | "garage-rollup" | "garage-tiltup";
903
- leafCount: 4 | 1 | 2 | 3;
904
- operationState: number;
905
- slideDirection: "left" | "right";
906
- trackStyle: "visible" | "none" | "pocket" | "overhead";
907
- garagePanelCount: number;
908
- openingKind: "door" | "opening";
909
- openingShape: "rectangle" | "rounded" | "arch";
910
- openingRadiusMode: "all" | "individual";
911
- openingTopRadii: [number, number];
912
- cornerRadius: number;
913
- archHeight: number;
914
- openingRevealRadius: number;
915
- frameThickness: number;
916
- frameDepth: number;
917
- threshold: boolean;
918
- thresholdHeight: number;
919
- hingesSide: "left" | "right";
920
- swingDirection: "inward" | "outward";
921
- swingAngle: number;
922
- segments: {
923
- type: "glass" | "panel" | "empty";
924
- heightRatio: number;
925
- columnRatios: number[];
926
- dividerThickness: number;
927
- panelDepth: number;
928
- panelInset: number;
929
- }[];
930
- handle: boolean;
931
- handleHeight: number;
932
- handleSide: "left" | "right";
933
- contentPadding: [number, number];
934
- doorCloser: boolean;
935
- panicBar: boolean;
936
- panicBarHeight: number;
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";
937
1122
  name?: string | undefined;
938
1123
  camera?: {
939
1124
  position: [number, number, number];
@@ -942,57 +1127,24 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
942
1127
  fov?: number | undefined;
943
1128
  zoom?: number | undefined;
944
1129
  } | undefined;
945
- material?: {
946
- id?: string | undefined;
947
- preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
948
- properties?: {
949
- color: string;
950
- roughness: number;
951
- metalness: number;
952
- opacity: number;
953
- transparent: boolean;
954
- side: "front" | "back" | "double";
955
- } | undefined;
956
- texture?: {
957
- url: string;
958
- repeat?: [number, number] | undefined;
959
- scale?: number | undefined;
960
- } | undefined;
961
- } | undefined;
962
- side?: "front" | "back" | undefined;
963
- wallId?: string | undefined;
1130
+ slots?: Record<string, string> | undefined;
964
1131
  } | {
965
1132
  object: "node";
966
1133
  parentId: string | null;
967
1134
  visible: boolean;
968
1135
  metadata: import("zod").JSONType;
969
- id: `window_${string}`;
970
- type: "window";
1136
+ id: `duct-terminal_${string}`;
1137
+ type: "duct-terminal";
971
1138
  position: [number, number, number];
972
- rotation: [number, number, number];
1139
+ rotation: number;
1140
+ terminalType: "supply-register" | "diffuser" | "return-grille";
1141
+ mount: "wall" | "ceiling" | "floor";
973
1142
  width: number;
974
- height: number;
975
- openingKind: "window" | "opening";
976
- windowType: "sliding" | "fixed" | "casement" | "awning" | "hopper" | "single-hung" | "double-hung" | "bay" | "bow" | "louvered";
977
- operationState: number;
978
- awningDirection: "up" | "down";
979
- casementStyle: "french" | "single";
980
- hingesSide: "left" | "right";
981
- openingShape: "rectangle" | "rounded" | "arch";
982
- openingRadiusMode: "all" | "individual";
983
- openingCornerRadii: [number, number, number, number];
984
- cornerRadius: number;
985
- archHeight: number;
986
- openingRevealRadius: number;
987
- frameThickness: number;
988
- frameDepth: number;
989
- columnRatios: number[];
990
- rowRatios: number[];
991
- columnDividerThickness: number;
992
- rowDividerThickness: number;
993
- sill: boolean;
994
- sillDepth: number;
995
- sillThickness: number;
1143
+ depth: number;
1144
+ collarShape: "round" | "rect" | "oval";
1145
+ collarDiameter: number;
1146
+ collarWidth: number;
1147
+ collarHeight: number;
996
1148
  name?: string | undefined;
997
1149
  camera?: {
998
1150
  position: [number, number, number];
@@ -1001,37 +1153,48 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1001
1153
  fov?: number | undefined;
1002
1154
  zoom?: number | undefined;
1003
1155
  } | undefined;
1004
- material?: {
1005
- id?: string | undefined;
1006
- preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
1007
- properties?: {
1008
- color: string;
1009
- roughness: number;
1010
- metalness: number;
1011
- opacity: number;
1012
- transparent: boolean;
1013
- side: "front" | "back" | "double";
1014
- } | undefined;
1015
- texture?: {
1016
- url: string;
1017
- repeat?: [number, number] | undefined;
1018
- scale?: number | undefined;
1019
- } | undefined;
1156
+ supportSlabId?: string | undefined;
1157
+ } | {
1158
+ object: "node";
1159
+ parentId: string | null;
1160
+ 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;
1178
+ name?: string | undefined;
1179
+ camera?: {
1180
+ position: [number, number, number];
1181
+ target: [number, number, number];
1182
+ mode: "perspective" | "orthographic";
1183
+ fov?: number | undefined;
1184
+ zoom?: number | undefined;
1020
1185
  } | undefined;
1021
- side?: "front" | "back" | undefined;
1022
- wallId?: string | undefined;
1186
+ supportSlabId?: string | undefined;
1023
1187
  } | {
1024
1188
  object: "node";
1025
1189
  parentId: string | null;
1026
1190
  visible: boolean;
1027
1191
  metadata: import("zod").JSONType;
1028
- id: `wall_${string}`;
1029
- type: "wall";
1030
- children: (`item_${string}` | `door_${string}` | `window_${string}`)[];
1031
- start: [number, number];
1032
- end: [number, number];
1033
- frontSide: "unknown" | "interior" | "exterior";
1034
- backSide: "unknown" | "interior" | "exterior";
1192
+ id: `lineset_${string}`;
1193
+ type: "lineset";
1194
+ path: [number, number, number][];
1195
+ suctionDiameter: number;
1196
+ liquidDiameter: number;
1197
+ insulated: boolean;
1035
1198
  name?: string | undefined;
1036
1199
  camera?: {
1037
1200
  position: [number, number, number];
@@ -1040,73 +1203,78 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1040
1203
  fov?: number | undefined;
1041
1204
  zoom?: number | undefined;
1042
1205
  } | undefined;
1043
- material?: {
1044
- id?: string | undefined;
1045
- preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
1046
- properties?: {
1047
- color: string;
1048
- roughness: number;
1049
- metalness: number;
1050
- opacity: number;
1051
- transparent: boolean;
1052
- side: "front" | "back" | "double";
1053
- } | undefined;
1054
- texture?: {
1055
- url: string;
1056
- repeat?: [number, number] | undefined;
1057
- scale?: number | undefined;
1058
- } | undefined;
1206
+ } | {
1207
+ object: "node";
1208
+ parentId: string | null;
1209
+ visible: boolean;
1210
+ metadata: import("zod").JSONType;
1211
+ id: `liquid-line_${string}`;
1212
+ type: "liquid-line";
1213
+ path: [number, number, number][];
1214
+ diameter: number;
1215
+ name?: string | undefined;
1216
+ camera?: {
1217
+ position: [number, number, number];
1218
+ target: [number, number, number];
1219
+ mode: "perspective" | "orthographic";
1220
+ fov?: number | undefined;
1221
+ zoom?: number | undefined;
1059
1222
  } | undefined;
1060
- materialPreset?: string | undefined;
1061
- interiorMaterial?: {
1062
- id?: string | undefined;
1063
- preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
1064
- properties?: {
1065
- color: string;
1066
- roughness: number;
1067
- metalness: number;
1068
- opacity: number;
1069
- transparent: boolean;
1070
- side: "front" | "back" | "double";
1071
- } | undefined;
1072
- texture?: {
1073
- url: string;
1074
- repeat?: [number, number] | undefined;
1075
- scale?: number | undefined;
1076
- } | undefined;
1223
+ } | {
1224
+ object: "node";
1225
+ parentId: string | null;
1226
+ 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;
1235
+ camera?: {
1236
+ position: [number, number, number];
1237
+ target: [number, number, number];
1238
+ mode: "perspective" | "orthographic";
1239
+ fov?: number | undefined;
1240
+ zoom?: number | undefined;
1077
1241
  } | undefined;
1078
- interiorMaterialPreset?: string | undefined;
1079
- exteriorMaterial?: {
1080
- id?: string | undefined;
1081
- preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
1082
- properties?: {
1083
- color: string;
1084
- roughness: number;
1085
- metalness: number;
1086
- opacity: number;
1087
- transparent: boolean;
1088
- side: "front" | "back" | "double";
1089
- } | undefined;
1090
- texture?: {
1091
- url: string;
1092
- repeat?: [number, number] | undefined;
1093
- scale?: number | undefined;
1094
- } | undefined;
1242
+ } | {
1243
+ object: "node";
1244
+ parentId: string | null;
1245
+ 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";
1257
+ name?: string | undefined;
1258
+ camera?: {
1259
+ position: [number, number, number];
1260
+ target: [number, number, number];
1261
+ mode: "perspective" | "orthographic";
1262
+ fov?: number | undefined;
1263
+ zoom?: number | undefined;
1095
1264
  } | undefined;
1096
- exteriorMaterialPreset?: string | undefined;
1097
- thickness?: number | undefined;
1098
- height?: number | undefined;
1099
- curveOffset?: number | undefined;
1100
1265
  } | {
1101
1266
  object: "node";
1102
1267
  parentId: string | null;
1103
1268
  visible: boolean;
1104
- id: `zone_${string}`;
1105
- type: "zone";
1106
- name: string;
1107
- polygon: [number, number][];
1108
- color: string;
1109
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;
1277
+ name?: string | undefined;
1110
1278
  camera?: {
1111
1279
  position: [number, number, number];
1112
1280
  target: [number, number, number];
@@ -1119,10 +1287,13 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1119
1287
  parentId: string | null;
1120
1288
  visible: boolean;
1121
1289
  metadata: import("zod").JSONType;
1122
- id: `level_${string}`;
1123
- type: "level";
1124
- children: (`item_${string}` | `ceiling_${string}` | `column_${string}` | `fence_${string}` | `guide_${string}` | `roof_${string}` | `scan_${string}` | `shelf_${string}` | `slab_${string}` | `spawn_${string}` | `stair_${string}` | `wall_${string}` | `zone_${string}`)[];
1125
- level: number;
1290
+ id: `site_${string}`;
1291
+ type: "site";
1292
+ polygon: {
1293
+ type: "polygon";
1294
+ points: [number, number][];
1295
+ };
1296
+ children: string[];
1126
1297
  name?: string | undefined;
1127
1298
  camera?: {
1128
1299
  position: [number, number, number];
@@ -1131,6 +1302,15 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1131
1302
  fov?: number | undefined;
1132
1303
  zoom?: number | undefined;
1133
1304
  } | 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;
1313
+ } | undefined;
1134
1314
  } | {
1135
1315
  object: "node";
1136
1316
  parentId: string | null;
@@ -1154,44 +1334,356 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1154
1334
  parentId: string | null;
1155
1335
  visible: boolean;
1156
1336
  metadata: import("zod").JSONType;
1157
- id: `chimney_${string}`;
1158
- type: "chimney";
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
+ name?: string | undefined;
1342
+ camera?: {
1343
+ position: [number, number, number];
1344
+ target: [number, number, number];
1345
+ mode: "perspective" | "orthographic";
1346
+ fov?: number | undefined;
1347
+ zoom?: number | undefined;
1348
+ } | undefined;
1349
+ height?: number | undefined;
1350
+ } | {
1351
+ object: "node";
1352
+ parentId: string | null;
1353
+ visible: boolean;
1354
+ metadata: import("zod").JSONType;
1355
+ position: [number, number, number];
1356
+ rotation: number;
1357
+ width: number;
1358
+ depth: number;
1359
+ carcassHeight: number;
1360
+ operationState: number;
1361
+ plinthHeight: number;
1362
+ toeKickDepth: number;
1363
+ boardThickness: number;
1364
+ countertopThickness: number;
1365
+ countertopOverhang: number;
1366
+ countertopBackOverhang: number;
1367
+ withFinishedBack: boolean;
1368
+ frontThickness: number;
1369
+ frontGap: number;
1370
+ frontStyle: "slab" | "shaker" | "raised-arch";
1371
+ handleStyle: "none" | "bar" | "cutout" | "hole" | "knob";
1372
+ handlePosition: "top" | "auto" | "center";
1373
+ frontOverlay: "full" | "inset";
1374
+ withBottomPanel: boolean;
1375
+ showPlinth: boolean;
1376
+ withCountertop: boolean;
1377
+ id: `cabinet_${string}`;
1378
+ type: "cabinet";
1379
+ runTier: "wall" | "base" | "tall";
1380
+ children: `cabinet-module_${string}`[];
1381
+ withWaterfall: boolean;
1382
+ name?: string | undefined;
1383
+ camera?: {
1384
+ position: [number, number, number];
1385
+ target: [number, number, number];
1386
+ mode: "perspective" | "orthographic";
1387
+ fov?: number | undefined;
1388
+ zoom?: number | undefined;
1389
+ } | undefined;
1390
+ supportSlabId?: string | undefined;
1391
+ material?: {
1392
+ id?: string | undefined;
1393
+ preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
1394
+ properties?: {
1395
+ color: string;
1396
+ roughness: number;
1397
+ metalness: number;
1398
+ opacity: number;
1399
+ transparent: boolean;
1400
+ side: "front" | "back" | "double";
1401
+ } | undefined;
1402
+ texture?: {
1403
+ url: string;
1404
+ repeat?: [number, number] | undefined;
1405
+ scale?: number | undefined;
1406
+ } | undefined;
1407
+ } | undefined;
1408
+ materialPreset?: string | undefined;
1409
+ slots?: Record<string, string> | undefined;
1410
+ stack?: ({
1411
+ type: "shelf";
1412
+ id: string;
1413
+ shelfCount?: number | undefined;
1414
+ height?: number | undefined;
1415
+ } | {
1416
+ type: "drawer";
1417
+ id: string;
1418
+ drawerCount?: number | undefined;
1419
+ height?: number | undefined;
1420
+ } | {
1421
+ type: "door";
1422
+ id: string;
1423
+ doorType?: "glass" | "double" | "single-left" | "single-right" | undefined;
1424
+ shelfCount?: number | undefined;
1425
+ height?: number | undefined;
1426
+ } | {
1427
+ type: "sink";
1428
+ id: string;
1429
+ sinkLayout?: "double" | "single" | "double-offset" | undefined;
1430
+ height?: number | undefined;
1431
+ } | {
1432
+ type: "oven";
1433
+ id: string;
1434
+ height?: number | undefined;
1435
+ } | {
1436
+ type: "microwave";
1437
+ id: string;
1438
+ height?: number | undefined;
1439
+ } | {
1440
+ type: "dishwasher";
1441
+ id: string;
1442
+ height?: number | undefined;
1443
+ } | {
1444
+ type: "cooktop-gas";
1445
+ id: string;
1446
+ cooktopLayout?: "gas-2burner" | "gas-4burner" | "gas-5burner-wok" | "gas-6burner" | undefined;
1447
+ cooktopBurnersOn?: boolean | undefined;
1448
+ cooktopActiveBurners?: number[] | undefined;
1449
+ cooktopKnobProgress?: number[] | undefined;
1450
+ cooktopShowGrate?: boolean | undefined;
1451
+ height?: number | undefined;
1452
+ } | {
1453
+ type: "cooktop-induction";
1454
+ id: string;
1455
+ cooktopLayout?: "induction-2zone" | "induction-4zone" | undefined;
1456
+ cooktopBurnersOn?: boolean | undefined;
1457
+ cooktopActiveBurners?: number[] | undefined;
1458
+ cooktopKnobProgress?: number[] | undefined;
1459
+ cooktopShowGrate?: boolean | undefined;
1460
+ height?: number | undefined;
1461
+ } | {
1462
+ type: "pull-out-pantry";
1463
+ id: string;
1464
+ shelfCount?: number | undefined;
1465
+ pantryRackStyle?: "glass" | "wire" | "tray" | undefined;
1466
+ height?: number | undefined;
1467
+ } | {
1468
+ type: "fridge-single";
1469
+ id: string;
1470
+ height?: number | undefined;
1471
+ } | {
1472
+ type: "fridge-double";
1473
+ id: string;
1474
+ height?: number | undefined;
1475
+ } | {
1476
+ type: "fridge-top-freezer";
1477
+ id: string;
1478
+ height?: number | undefined;
1479
+ } | {
1480
+ type: "fridge-bottom-freezer";
1481
+ id: string;
1482
+ height?: number | undefined;
1483
+ } | {
1484
+ type: "hood-pyramid";
1485
+ id: string;
1486
+ height?: number | undefined;
1487
+ } | {
1488
+ type: "hood-curved-glass";
1489
+ id: string;
1490
+ height?: number | undefined;
1491
+ })[] | undefined;
1492
+ barLedge?: {
1493
+ edge: "back" | "right" | "left";
1494
+ height: number;
1495
+ depth: number;
1496
+ } | undefined;
1497
+ } | {
1498
+ object: "node";
1499
+ parentId: string | null;
1500
+ visible: boolean;
1501
+ metadata: import("zod").JSONType;
1502
+ position: [number, number, number];
1503
+ rotation: number;
1504
+ width: number;
1505
+ depth: number;
1506
+ carcassHeight: number;
1507
+ operationState: number;
1508
+ plinthHeight: number;
1509
+ toeKickDepth: number;
1510
+ boardThickness: number;
1511
+ countertopThickness: number;
1512
+ countertopOverhang: number;
1513
+ countertopBackOverhang: number;
1514
+ withFinishedBack: boolean;
1515
+ frontThickness: number;
1516
+ frontGap: number;
1517
+ frontStyle: "slab" | "shaker" | "raised-arch";
1518
+ handleStyle: "none" | "bar" | "cutout" | "hole" | "knob";
1519
+ handlePosition: "top" | "auto" | "center";
1520
+ frontOverlay: "full" | "inset";
1521
+ withBottomPanel: boolean;
1522
+ showPlinth: boolean;
1523
+ withCountertop: boolean;
1524
+ id: `cabinet-module_${string}`;
1525
+ type: "cabinet-module";
1526
+ children: (`cabinet_${string}` | `cabinet-module_${string}`)[];
1527
+ cabinetType: "base" | "tall";
1528
+ moduleKind: "standard" | "corner-filler";
1529
+ name?: string | undefined;
1530
+ camera?: {
1531
+ position: [number, number, number];
1532
+ target: [number, number, number];
1533
+ mode: "perspective" | "orthographic";
1534
+ fov?: number | undefined;
1535
+ zoom?: number | undefined;
1536
+ } | undefined;
1537
+ supportSlabId?: string | undefined;
1538
+ material?: {
1539
+ id?: string | undefined;
1540
+ preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
1541
+ properties?: {
1542
+ color: string;
1543
+ roughness: number;
1544
+ metalness: number;
1545
+ opacity: number;
1546
+ transparent: boolean;
1547
+ side: "front" | "back" | "double";
1548
+ } | undefined;
1549
+ texture?: {
1550
+ url: string;
1551
+ repeat?: [number, number] | undefined;
1552
+ scale?: number | undefined;
1553
+ } | undefined;
1554
+ } | undefined;
1555
+ materialPreset?: string | undefined;
1556
+ slots?: Record<string, string> | undefined;
1557
+ stack?: ({
1558
+ type: "shelf";
1559
+ id: string;
1560
+ shelfCount?: number | undefined;
1561
+ height?: number | undefined;
1562
+ } | {
1563
+ type: "drawer";
1564
+ id: string;
1565
+ drawerCount?: number | undefined;
1566
+ height?: number | undefined;
1567
+ } | {
1568
+ type: "door";
1569
+ id: string;
1570
+ doorType?: "glass" | "double" | "single-left" | "single-right" | undefined;
1571
+ shelfCount?: number | undefined;
1572
+ height?: number | undefined;
1573
+ } | {
1574
+ type: "sink";
1575
+ id: string;
1576
+ sinkLayout?: "double" | "single" | "double-offset" | undefined;
1577
+ height?: number | undefined;
1578
+ } | {
1579
+ type: "oven";
1580
+ id: string;
1581
+ height?: number | undefined;
1582
+ } | {
1583
+ type: "microwave";
1584
+ id: string;
1585
+ height?: number | undefined;
1586
+ } | {
1587
+ type: "dishwasher";
1588
+ id: string;
1589
+ height?: number | undefined;
1590
+ } | {
1591
+ type: "cooktop-gas";
1592
+ id: string;
1593
+ cooktopLayout?: "gas-2burner" | "gas-4burner" | "gas-5burner-wok" | "gas-6burner" | undefined;
1594
+ cooktopBurnersOn?: boolean | undefined;
1595
+ cooktopActiveBurners?: number[] | undefined;
1596
+ cooktopKnobProgress?: number[] | undefined;
1597
+ cooktopShowGrate?: boolean | undefined;
1598
+ height?: number | undefined;
1599
+ } | {
1600
+ type: "cooktop-induction";
1601
+ id: string;
1602
+ cooktopLayout?: "induction-2zone" | "induction-4zone" | undefined;
1603
+ cooktopBurnersOn?: boolean | undefined;
1604
+ cooktopActiveBurners?: number[] | undefined;
1605
+ cooktopKnobProgress?: number[] | undefined;
1606
+ cooktopShowGrate?: boolean | undefined;
1607
+ height?: number | undefined;
1608
+ } | {
1609
+ type: "pull-out-pantry";
1610
+ id: string;
1611
+ shelfCount?: number | undefined;
1612
+ pantryRackStyle?: "glass" | "wire" | "tray" | undefined;
1613
+ height?: number | undefined;
1614
+ } | {
1615
+ type: "fridge-single";
1616
+ id: string;
1617
+ height?: number | undefined;
1618
+ } | {
1619
+ type: "fridge-double";
1620
+ id: string;
1621
+ height?: number | undefined;
1622
+ } | {
1623
+ type: "fridge-top-freezer";
1624
+ id: string;
1625
+ height?: number | undefined;
1626
+ } | {
1627
+ type: "fridge-bottom-freezer";
1628
+ id: string;
1629
+ height?: number | undefined;
1630
+ } | {
1631
+ type: "hood-pyramid";
1632
+ id: string;
1633
+ height?: number | undefined;
1634
+ } | {
1635
+ type: "hood-curved-glass";
1636
+ id: string;
1637
+ height?: number | undefined;
1638
+ })[] | undefined;
1639
+ openSide?: "right" | "left" | undefined;
1640
+ cornerShelf?: boolean | undefined;
1641
+ } | {
1642
+ object: "node";
1643
+ parentId: string | null;
1644
+ visible: boolean;
1645
+ metadata: import("zod").JSONType;
1646
+ id: `rseg_${string}`;
1647
+ type: "roof-segment";
1159
1648
  position: [number, number, number];
1160
1649
  rotation: number;
1161
- bodyShape: "round" | "square";
1162
- bodyHollowDepth: number;
1163
- bodyHollowMargin: number;
1650
+ roofType: "flat" | "hip" | "gable" | "shed" | "gambrel" | "dutch" | "mansard";
1164
1651
  width: number;
1165
1652
  depth: number;
1166
- heightAboveRidge: number;
1167
- cutoutOffset: number;
1168
- cornerBevel: number;
1169
- cap: boolean;
1170
- capShape: "flat" | "none" | "stepped" | "sloped";
1171
- capOverhang: number;
1172
- capThickness: number;
1173
- flueCount: number;
1174
- flueShape: "round" | "square";
1175
- flueHeight: number;
1176
- flueDiameter: number;
1177
- flueSpacing: number;
1178
- flueWallThickness: number;
1179
- shoulderStyle: "tapered" | "none" | "corbeled";
1180
- shoulderHeight: number;
1181
- shoulderExtent: number;
1182
- bandStyle: "double" | "none" | "single";
1183
- bandHeight: number;
1184
- bandExtent: number;
1185
- bandOffset: number;
1186
- cricketStyle: "none" | "simple";
1187
- cricketLength: number;
1188
- cricketHeight: number;
1189
- cricketSide: "front" | "back";
1190
- panelStyle: "rectangular" | "none";
1191
- panelDepth: number;
1192
- panelHeight: number;
1193
- panelOffsetTop: number;
1194
- panelMargin: number;
1653
+ trim: {
1654
+ left: number;
1655
+ right: number;
1656
+ front: number;
1657
+ back: number;
1658
+ frontLeft: number;
1659
+ frontRight: number;
1660
+ backLeft: number;
1661
+ backRight: number;
1662
+ frontLeftX: number;
1663
+ frontLeftZ: number;
1664
+ frontRightX: number;
1665
+ frontRightZ: number;
1666
+ backLeftX: number;
1667
+ backLeftZ: number;
1668
+ backRightX: number;
1669
+ backRightZ: number;
1670
+ };
1671
+ wallHeight: number;
1672
+ pitch: number;
1673
+ wallThickness: number;
1674
+ deckThickness: number;
1675
+ overhang: number;
1676
+ shingleThickness: number;
1677
+ gambrelLowerWidthRatio: number;
1678
+ gambrelLowerHeightRatio: number;
1679
+ mansardSteepWidthRatio: number;
1680
+ mansardSteepHeightRatio: number;
1681
+ dutchHipWidthRatio: number;
1682
+ dutchHipHeightRatio: number;
1683
+ dutchWaistLengthRatio: number;
1684
+ dutchGabletRake: number;
1685
+ dutchTopRakeThickness: number;
1686
+ children: string[];
1195
1687
  name?: string | undefined;
1196
1688
  camera?: {
1197
1689
  position: [number, number, number];
@@ -1236,22 +1728,59 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1236
1728
  } | undefined;
1237
1729
  } | undefined;
1238
1730
  topMaterialPreset?: string | undefined;
1239
- roofSegmentId?: string | undefined;
1731
+ edgeMaterial?: {
1732
+ id?: string | undefined;
1733
+ preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
1734
+ properties?: {
1735
+ color: string;
1736
+ roughness: number;
1737
+ metalness: number;
1738
+ opacity: number;
1739
+ transparent: boolean;
1740
+ side: "front" | "back" | "double";
1741
+ } | undefined;
1742
+ texture?: {
1743
+ url: string;
1744
+ repeat?: [number, number] | undefined;
1745
+ scale?: number | undefined;
1746
+ } | undefined;
1747
+ } | undefined;
1748
+ edgeMaterialPreset?: string | undefined;
1749
+ wallMaterial?: {
1750
+ id?: string | undefined;
1751
+ preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
1752
+ properties?: {
1753
+ color: string;
1754
+ roughness: number;
1755
+ metalness: number;
1756
+ opacity: number;
1757
+ transparent: boolean;
1758
+ side: "front" | "back" | "double";
1759
+ } | undefined;
1760
+ texture?: {
1761
+ url: string;
1762
+ repeat?: [number, number] | undefined;
1763
+ scale?: number | undefined;
1764
+ } | undefined;
1765
+ } | undefined;
1766
+ wallMaterialPreset?: string | undefined;
1240
1767
  } | {
1241
1768
  object: "node";
1242
1769
  parentId: string | null;
1243
1770
  visible: boolean;
1244
1771
  metadata: import("zod").JSONType;
1245
- id: `cupola_${string}`;
1246
- type: "cupola";
1247
- materialPreset: string;
1772
+ id: `sseg_${string}`;
1773
+ type: "stair-segment";
1248
1774
  position: [number, number, number];
1249
1775
  rotation: number;
1776
+ segmentType: "stair" | "landing";
1250
1777
  width: number;
1251
- depth: number;
1778
+ length: number;
1252
1779
  height: number;
1253
- roofStyle: "dome" | "pyramid";
1254
- finial: boolean;
1780
+ stepCount: number;
1781
+ attachmentSide: "front" | "right" | "left";
1782
+ fillToFloor: boolean;
1783
+ thickness: number;
1255
1784
  name?: string | undefined;
1256
1785
  camera?: {
1257
1786
  position: [number, number, number];
@@ -1277,37 +1806,41 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1277
1806
  scale?: number | undefined;
1278
1807
  } | undefined;
1279
1808
  } | undefined;
1280
- roofSegmentId?: string | undefined;
1809
+ materialPreset?: string | undefined;
1281
1810
  } | {
1282
1811
  object: "node";
1283
1812
  parentId: string | null;
1284
1813
  visible: boolean;
1285
1814
  metadata: import("zod").JSONType;
1286
- id: `dormer_${string}`;
1287
- type: "dormer";
1815
+ id: `window_${string}`;
1816
+ type: "window";
1288
1817
  position: [number, number, number];
1289
- rotation: number;
1818
+ rotation: [number, number, number];
1290
1819
  width: number;
1291
- depth: number;
1292
1820
  height: number;
1293
- roofType: "flat" | "hip" | "gable" | "shed" | "gambrel" | "dutch" | "mansard";
1294
- roofHeight: number;
1295
- wallSkirtHeight: number;
1296
- windowWidth: number;
1297
- windowHeight: number;
1298
- windowOffsetX: number;
1299
- windowOffsetY: number;
1300
- windowFrameThickness: number;
1301
- windowFrameDepth: number;
1302
- windowColumns: number;
1303
- windowRows: number;
1304
- windowDividerThickness: number;
1305
- windowShape: "rectangle" | "rounded" | "arch";
1306
- windowArchHeight: number;
1307
- windowCornerRadii: [number, number, number, number];
1308
- windowSill: boolean;
1309
- windowSillDepth: number;
1310
- windowSillThickness: number;
1821
+ constructionType: "framed" | "masonry";
1822
+ dimensionReference: "nominal" | "rough-opening" | "masonry-opening" | "finish-opening";
1823
+ openingKind: "window" | "opening";
1824
+ windowType: "sliding" | "fixed" | "casement" | "awning" | "hopper" | "single-hung" | "double-hung" | "bay" | "bow" | "louvered";
1825
+ operationState: number;
1826
+ awningDirection: "up" | "down";
1827
+ casementStyle: "french" | "single";
1828
+ hingesSide: "right" | "left";
1829
+ openingShape: "rectangle" | "rounded" | "arch";
1830
+ openingRadiusMode: "all" | "individual";
1831
+ openingCornerRadii: [number, number, number, number];
1832
+ cornerRadius: number;
1833
+ archHeight: number;
1834
+ openingRevealRadius: number;
1835
+ frameThickness: number;
1836
+ frameDepth: number;
1837
+ columnRatios: number[];
1838
+ rowRatios: number[];
1839
+ columnDividerThickness: number;
1840
+ rowDividerThickness: number;
1841
+ sill: boolean;
1842
+ sillDepth: number;
1843
+ sillThickness: number;
1311
1844
  name?: string | undefined;
1312
1845
  camera?: {
1313
1846
  position: [number, number, number];
@@ -1333,8 +1866,76 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1333
1866
  scale?: number | undefined;
1334
1867
  } | undefined;
1335
1868
  } | undefined;
1336
- materialPreset?: string | undefined;
1337
- topMaterial?: {
1869
+ slots?: Record<string, string> | undefined;
1870
+ side?: "front" | "back" | undefined;
1871
+ wallId?: string | undefined;
1872
+ roofSegmentId?: string | undefined;
1873
+ roofFace?: "front" | "back" | "right" | "left" | undefined;
1874
+ mark?: string | undefined;
1875
+ roughOpeningWidth?: number | undefined;
1876
+ roughOpeningHeight?: number | undefined;
1877
+ masonryOpeningWidth?: number | undefined;
1878
+ masonryOpeningHeight?: number | undefined;
1879
+ finishOpeningWidth?: number | undefined;
1880
+ finishOpeningHeight?: number | undefined;
1881
+ } | {
1882
+ object: "node";
1883
+ parentId: string | null;
1884
+ visible: boolean;
1885
+ metadata: import("zod").JSONType;
1886
+ id: `door_${string}`;
1887
+ type: "door";
1888
+ position: [number, number, number];
1889
+ rotation: [number, number, number];
1890
+ width: number;
1891
+ height: number;
1892
+ constructionType: "framed" | "masonry";
1893
+ dimensionReference: "nominal" | "rough-opening" | "masonry-opening" | "finish-opening";
1894
+ doorCategory: "interior" | "garage";
1895
+ doorType: "double" | "hinged" | "french" | "folding" | "pocket" | "barn" | "sliding" | "garage-sectional" | "garage-rollup" | "garage-tiltup";
1896
+ leafCount: 4 | 1 | 2 | 3;
1897
+ operationState: number;
1898
+ slideDirection: "right" | "left";
1899
+ trackStyle: "visible" | "none" | "pocket" | "overhead";
1900
+ garagePanelCount: number;
1901
+ openingKind: "door" | "opening";
1902
+ openingShape: "rectangle" | "rounded" | "arch";
1903
+ openingRadiusMode: "all" | "individual";
1904
+ openingTopRadii: [number, number];
1905
+ cornerRadius: number;
1906
+ archHeight: number;
1907
+ openingRevealRadius: number;
1908
+ frameThickness: number;
1909
+ frameDepth: number;
1910
+ threshold: boolean;
1911
+ thresholdHeight: number;
1912
+ hingesSide: "right" | "left";
1913
+ swingDirection: "inward" | "outward";
1914
+ swingAngle: number;
1915
+ segments: {
1916
+ type: "glass" | "panel" | "empty";
1917
+ heightRatio: number;
1918
+ columnRatios: number[];
1919
+ dividerThickness: number;
1920
+ panelDepth: number;
1921
+ panelInset: number;
1922
+ }[];
1923
+ handle: boolean;
1924
+ handleHeight: number;
1925
+ handleSide: "right" | "left";
1926
+ contentPadding: [number, number];
1927
+ doorCloser: boolean;
1928
+ panicBar: boolean;
1929
+ panicBarHeight: number;
1930
+ name?: string | undefined;
1931
+ camera?: {
1932
+ position: [number, number, number];
1933
+ target: [number, number, number];
1934
+ mode: "perspective" | "orthographic";
1935
+ fov?: number | undefined;
1936
+ zoom?: number | undefined;
1937
+ } | undefined;
1938
+ material?: {
1338
1939
  id?: string | undefined;
1339
1940
  preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
1340
1941
  properties?: {
@@ -1351,8 +1952,41 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1351
1952
  scale?: number | undefined;
1352
1953
  } | undefined;
1353
1954
  } | undefined;
1354
- topMaterialPreset?: string | undefined;
1355
- sideMaterial?: {
1955
+ slots?: Record<string, string> | undefined;
1956
+ side?: "front" | "back" | undefined;
1957
+ wallId?: string | undefined;
1958
+ roofSegmentId?: string | undefined;
1959
+ roofFace?: "front" | "back" | "right" | "left" | undefined;
1960
+ mark?: string | undefined;
1961
+ roughOpeningWidth?: number | undefined;
1962
+ roughOpeningHeight?: number | undefined;
1963
+ masonryOpeningWidth?: number | undefined;
1964
+ masonryOpeningHeight?: number | undefined;
1965
+ finishOpeningWidth?: number | undefined;
1966
+ finishOpeningHeight?: number | undefined;
1967
+ } | {
1968
+ object: "node";
1969
+ parentId: string | null;
1970
+ visible: boolean;
1971
+ metadata: import("zod").JSONType;
1972
+ id: `rvent_${string}`;
1973
+ type: "ridge-vent";
1974
+ position: [number, number, number];
1975
+ rotation: number;
1976
+ length: number;
1977
+ width: number;
1978
+ height: number;
1979
+ style: "metal" | "standard" | "shingled";
1980
+ endCaps: boolean;
1981
+ name?: string | undefined;
1982
+ camera?: {
1983
+ position: [number, number, number];
1984
+ target: [number, number, number];
1985
+ mode: "perspective" | "orthographic";
1986
+ fov?: number | undefined;
1987
+ zoom?: number | undefined;
1988
+ } | undefined;
1989
+ material?: {
1356
1990
  id?: string | undefined;
1357
1991
  preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
1358
1992
  properties?: {
@@ -1369,8 +2003,34 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1369
2003
  scale?: number | undefined;
1370
2004
  } | undefined;
1371
2005
  } | undefined;
1372
- sideMaterialPreset?: string | undefined;
1373
- wallMaterial?: {
2006
+ materialPreset?: string | undefined;
2007
+ roofSegmentId?: string | undefined;
2008
+ } | {
2009
+ object: "node";
2010
+ parentId: string | null;
2011
+ visible: boolean;
2012
+ metadata: import("zod").JSONType;
2013
+ id: `tvent_${string}`;
2014
+ type: "turbine-vent";
2015
+ materialPreset: string;
2016
+ position: [number, number, number];
2017
+ rotation: number;
2018
+ diameter: number;
2019
+ height: number;
2020
+ neckHeight: number;
2021
+ baseOverhang: number;
2022
+ vaneCount: number;
2023
+ spinSpeed: number;
2024
+ style: "globe" | "cylinder";
2025
+ name?: string | undefined;
2026
+ camera?: {
2027
+ position: [number, number, number];
2028
+ target: [number, number, number];
2029
+ mode: "perspective" | "orthographic";
2030
+ fov?: number | undefined;
2031
+ zoom?: number | undefined;
2032
+ } | undefined;
2033
+ material?: {
1374
2034
  id?: string | undefined;
1375
2035
  preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
1376
2036
  properties?: {
@@ -1387,23 +2047,22 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1387
2047
  scale?: number | undefined;
1388
2048
  } | undefined;
1389
2049
  } | undefined;
1390
- wallMaterialPreset?: string | undefined;
1391
2050
  roofSegmentId?: string | undefined;
1392
2051
  } | {
1393
2052
  object: "node";
1394
2053
  parentId: string | null;
1395
2054
  visible: boolean;
1396
2055
  metadata: import("zod").JSONType;
1397
- id: `downspout_${string}`;
1398
- type: "downspout";
2056
+ id: `cupola_${string}`;
2057
+ type: "cupola";
1399
2058
  materialPreset: string;
1400
- length: number;
1401
- diameter: number;
1402
- standoff: number;
1403
- shape: "round" | "auto" | "rect";
1404
- strapStyle: "none" | "band";
1405
- strapSpacing: number;
1406
- terminal: "straight" | "splash" | "kickout";
2059
+ position: [number, number, number];
2060
+ rotation: number;
2061
+ width: number;
2062
+ depth: number;
2063
+ height: number;
2064
+ roofStyle: "dome" | "pyramid";
2065
+ finial: boolean;
1407
2066
  name?: string | undefined;
1408
2067
  camera?: {
1409
2068
  position: [number, number, number];
@@ -1429,8 +2088,7 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1429
2088
  scale?: number | undefined;
1430
2089
  } | undefined;
1431
2090
  } | undefined;
1432
- gutterId?: string | undefined;
1433
- outletId?: string | undefined;
2091
+ roofSegmentId?: string | undefined;
1434
2092
  } | {
1435
2093
  object: "node";
1436
2094
  parentId: string | null;
@@ -1527,16 +2185,44 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1527
2185
  parentId: string | null;
1528
2186
  visible: boolean;
1529
2187
  metadata: import("zod").JSONType;
1530
- id: `rvent_${string}`;
1531
- type: "ridge-vent";
1532
- materialPreset: string;
2188
+ id: `chimney_${string}`;
2189
+ type: "chimney";
1533
2190
  position: [number, number, number];
1534
2191
  rotation: number;
1535
- length: number;
2192
+ bodyShape: "round" | "square";
2193
+ bodyHollowDepth: number;
2194
+ bodyHollowMargin: number;
1536
2195
  width: number;
1537
- height: number;
1538
- style: "metal" | "standard" | "shingled";
1539
- endCaps: boolean;
2196
+ depth: number;
2197
+ heightAboveRidge: number;
2198
+ cutoutOffset: number;
2199
+ cornerBevel: number;
2200
+ cap: boolean;
2201
+ capShape: "flat" | "none" | "stepped" | "sloped";
2202
+ capOverhang: number;
2203
+ capThickness: number;
2204
+ flueCount: number;
2205
+ flueShape: "round" | "square";
2206
+ flueHeight: number;
2207
+ flueDiameter: number;
2208
+ flueSpacing: number;
2209
+ flueWallThickness: number;
2210
+ shoulderStyle: "tapered" | "none" | "corbeled";
2211
+ shoulderHeight: number;
2212
+ shoulderExtent: number;
2213
+ bandStyle: "double" | "none" | "single";
2214
+ bandHeight: number;
2215
+ bandExtent: number;
2216
+ bandOffset: number;
2217
+ cricketStyle: "none" | "simple";
2218
+ cricketLength: number;
2219
+ cricketHeight: number;
2220
+ cricketSide: "front" | "back";
2221
+ panelStyle: "rectangular" | "none";
2222
+ panelDepth: number;
2223
+ panelHeight: number;
2224
+ panelOffsetTop: number;
2225
+ panelMargin: number;
1540
2226
  name?: string | undefined;
1541
2227
  camera?: {
1542
2228
  position: [number, number, number];
@@ -1562,19 +2248,46 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1562
2248
  scale?: number | undefined;
1563
2249
  } | undefined;
1564
2250
  } | undefined;
2251
+ materialPreset?: string | undefined;
2252
+ topMaterial?: {
2253
+ id?: string | undefined;
2254
+ preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
2255
+ properties?: {
2256
+ color: string;
2257
+ roughness: number;
2258
+ metalness: number;
2259
+ opacity: number;
2260
+ transparent: boolean;
2261
+ side: "front" | "back" | "double";
2262
+ } | undefined;
2263
+ texture?: {
2264
+ url: string;
2265
+ repeat?: [number, number] | undefined;
2266
+ scale?: number | undefined;
2267
+ } | undefined;
2268
+ } | undefined;
2269
+ topMaterialPreset?: string | undefined;
1565
2270
  roofSegmentId?: string | undefined;
1566
2271
  } | {
1567
2272
  object: "node";
1568
2273
  parentId: string | null;
1569
2274
  visible: boolean;
1570
2275
  metadata: import("zod").JSONType;
1571
- id: `site_${string}`;
1572
- type: "site";
1573
- polygon: {
1574
- type: "polygon";
1575
- points: [number, number][];
1576
- };
1577
- children: string[];
2276
+ id: `solarpanel_${string}`;
2277
+ type: "solar-panel";
2278
+ position: [number, number, number];
2279
+ rotation: number;
2280
+ rows: number;
2281
+ columns: number;
2282
+ panelWidth: number;
2283
+ panelHeight: number;
2284
+ gapX: number;
2285
+ gapY: number;
2286
+ mountingType: "flush" | "tilted";
2287
+ tiltAngle: number;
2288
+ standoffHeight: number;
2289
+ frameThickness: number;
2290
+ frameDepth: number;
1578
2291
  name?: string | undefined;
1579
2292
  camera?: {
1580
2293
  position: [number, number, number];
@@ -1583,6 +2296,45 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1583
2296
  fov?: number | undefined;
1584
2297
  zoom?: number | undefined;
1585
2298
  } | undefined;
2299
+ material?: {
2300
+ id?: string | undefined;
2301
+ preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
2302
+ properties?: {
2303
+ color: string;
2304
+ roughness: number;
2305
+ metalness: number;
2306
+ opacity: number;
2307
+ transparent: boolean;
2308
+ side: "front" | "back" | "double";
2309
+ } | undefined;
2310
+ texture?: {
2311
+ url: string;
2312
+ repeat?: [number, number] | undefined;
2313
+ scale?: number | undefined;
2314
+ } | undefined;
2315
+ } | undefined;
2316
+ materialPreset?: string | undefined;
2317
+ panelMaterial?: {
2318
+ id?: string | undefined;
2319
+ preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
2320
+ properties?: {
2321
+ color: string;
2322
+ roughness: number;
2323
+ metalness: number;
2324
+ opacity: number;
2325
+ transparent: boolean;
2326
+ side: "front" | "back" | "double";
2327
+ } | undefined;
2328
+ texture?: {
2329
+ url: string;
2330
+ repeat?: [number, number] | undefined;
2331
+ scale?: number | undefined;
2332
+ } | undefined;
2333
+ } | undefined;
2334
+ panelMaterialPreset?: string | undefined;
2335
+ panelTypePreset?: "residential" | "residential-large" | "compact" | "frameless" | undefined;
2336
+ roofSegmentId?: string | undefined;
2337
+ surfaceNormal?: [number, number, number] | undefined;
1586
2338
  } | {
1587
2339
  object: "node";
1588
2340
  parentId: string | null;
@@ -1601,11 +2353,11 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1601
2353
  lanternHeight: number;
1602
2354
  lanternTopScale: number;
1603
2355
  openingAngle: number;
1604
- openingSide: "top" | "bottom" | "left" | "right";
2356
+ openingSide: "right" | "left" | "top" | "bottom";
1605
2357
  operationState: number;
1606
2358
  motorHousing: boolean;
1607
2359
  slideFraction: number;
1608
- slideDirection: "x" | "z";
2360
+ slideDirection: "z" | "x";
1609
2361
  trackWidth: number;
1610
2362
  motorHousingSize: number;
1611
2363
  curb: boolean;
@@ -1662,21 +2414,31 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1662
2414
  parentId: string | null;
1663
2415
  visible: boolean;
1664
2416
  metadata: import("zod").JSONType;
1665
- id: `solarpanel_${string}`;
1666
- type: "solar-panel";
2417
+ id: `dormer_${string}`;
2418
+ type: "dormer";
1667
2419
  position: [number, number, number];
1668
2420
  rotation: number;
1669
- rows: number;
1670
- columns: number;
1671
- panelWidth: number;
1672
- panelHeight: number;
1673
- gapX: number;
1674
- gapY: number;
1675
- mountingType: "flush" | "tilted";
1676
- tiltAngle: number;
1677
- standoffHeight: number;
1678
- frameThickness: number;
1679
- frameDepth: number;
2421
+ width: number;
2422
+ depth: number;
2423
+ height: number;
2424
+ roofType: "flat" | "hip" | "gable" | "shed" | "gambrel" | "dutch" | "mansard";
2425
+ roofHeight: number;
2426
+ wallSkirtHeight: number;
2427
+ windowWidth: number;
2428
+ windowHeight: number;
2429
+ windowOffsetX: number;
2430
+ windowOffsetY: number;
2431
+ windowFrameThickness: number;
2432
+ windowFrameDepth: number;
2433
+ windowColumns: number;
2434
+ windowRows: number;
2435
+ windowDividerThickness: number;
2436
+ windowShape: "rectangle" | "rounded" | "arch";
2437
+ windowArchHeight: number;
2438
+ windowCornerRadii: [number, number, number, number];
2439
+ windowSill: boolean;
2440
+ windowSillDepth: number;
2441
+ windowSillThickness: number;
1680
2442
  name?: string | undefined;
1681
2443
  camera?: {
1682
2444
  position: [number, number, number];
@@ -1703,7 +2465,7 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1703
2465
  } | undefined;
1704
2466
  } | undefined;
1705
2467
  materialPreset?: string | undefined;
1706
- panelMaterial?: {
2468
+ topMaterial?: {
1707
2469
  id?: string | undefined;
1708
2470
  preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
1709
2471
  properties?: {
@@ -1720,27 +2482,59 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1720
2482
  scale?: number | undefined;
1721
2483
  } | undefined;
1722
2484
  } | undefined;
1723
- panelMaterialPreset?: string | undefined;
1724
- panelTypePreset?: "residential" | "residential-large" | "compact" | "frameless" | undefined;
2485
+ topMaterialPreset?: string | undefined;
2486
+ sideMaterial?: {
2487
+ id?: string | undefined;
2488
+ preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
2489
+ properties?: {
2490
+ color: string;
2491
+ roughness: number;
2492
+ metalness: number;
2493
+ opacity: number;
2494
+ transparent: boolean;
2495
+ side: "front" | "back" | "double";
2496
+ } | undefined;
2497
+ texture?: {
2498
+ url: string;
2499
+ repeat?: [number, number] | undefined;
2500
+ scale?: number | undefined;
2501
+ } | undefined;
2502
+ } | undefined;
2503
+ sideMaterialPreset?: string | undefined;
2504
+ wallMaterial?: {
2505
+ id?: string | undefined;
2506
+ preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
2507
+ properties?: {
2508
+ color: string;
2509
+ roughness: number;
2510
+ metalness: number;
2511
+ opacity: number;
2512
+ transparent: boolean;
2513
+ side: "front" | "back" | "double";
2514
+ } | undefined;
2515
+ texture?: {
2516
+ url: string;
2517
+ repeat?: [number, number] | undefined;
2518
+ scale?: number | undefined;
2519
+ } | undefined;
2520
+ } | undefined;
2521
+ wallMaterialPreset?: string | undefined;
1725
2522
  roofSegmentId?: string | undefined;
1726
- surfaceNormal?: [number, number, number] | undefined;
1727
2523
  } | {
1728
2524
  object: "node";
1729
2525
  parentId: string | null;
1730
2526
  visible: boolean;
1731
2527
  metadata: import("zod").JSONType;
1732
- id: `tvent_${string}`;
1733
- type: "turbine-vent";
2528
+ id: `downspout_${string}`;
2529
+ type: "downspout";
1734
2530
  materialPreset: string;
1735
- position: [number, number, number];
1736
- rotation: number;
2531
+ length: number;
1737
2532
  diameter: number;
1738
- height: number;
1739
- neckHeight: number;
1740
- baseOverhang: number;
1741
- vaneCount: number;
1742
- spinSpeed: number;
1743
- style: "globe" | "cylinder";
2533
+ standoff: number;
2534
+ shape: "round" | "auto" | "rect";
2535
+ strapStyle: "none" | "band";
2536
+ strapSpacing: number;
2537
+ terminal: "straight" | "splash" | "kickout";
1744
2538
  name?: string | undefined;
1745
2539
  camera?: {
1746
2540
  position: [number, number, number];
@@ -1766,10 +2560,11 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1766
2560
  scale?: number | undefined;
1767
2561
  } | undefined;
1768
2562
  } | undefined;
1769
- roofSegmentId?: string | undefined;
2563
+ gutterId?: string | undefined;
2564
+ outletId?: string | undefined;
1770
2565
  }>;
1771
2566
  export declare function createSurfaceOpeningPreviewController(): {
1772
- previewSurfaceIds: Set<`bvent_${string}` | `elevator_${string}` | `item_${string}` | `ceiling_${string}` | `column_${string}` | `fence_${string}` | `guide_${string}` | `rseg_${string}` | `roof_${string}` | `scan_${string}` | `shelf_${string}` | `slab_${string}` | `spawn_${string}` | `sseg_${string}` | `stair_${string}` | `door_${string}` | `window_${string}` | `wall_${string}` | `zone_${string}` | `level_${string}` | `building_${string}` | `chimney_${string}` | `cupola_${string}` | `dormer_${string}` | `downspout_${string}` | `eyebrow-vent_${string}` | `gutter_${string}` | `rvent_${string}` | `site_${string}` | `skylight_${string}` | `solarpanel_${string}` | `tvent_${string}`>;
2567
+ 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}`>;
1773
2568
  apply(updates: SurfaceOpeningUpdate[]): void;
1774
2569
  clear(): void;
1775
2570
  };