@pascal-app/core 0.9.2 → 1.0.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (339) hide show
  1. package/README.md +17 -10
  2. package/dist/events/bus.d.ts +21 -2
  3. package/dist/events/bus.d.ts.map +1 -1
  4. package/dist/hooks/spatial-grid/floor-placed-elevation.d.ts +17 -1
  5. package/dist/hooks/spatial-grid/floor-placed-elevation.d.ts.map +1 -1
  6. package/dist/hooks/spatial-grid/floor-placed-elevation.js +61 -8
  7. package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts +116 -66
  8. package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts.map +1 -1
  9. package/dist/hooks/spatial-grid/spatial-grid-manager.js +319 -441
  10. package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts +46 -1
  11. package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts.map +1 -1
  12. package/dist/hooks/spatial-grid/spatial-grid-sync.js +204 -12
  13. package/dist/hooks/spatial-grid/support-host-id.d.ts +3 -0
  14. package/dist/hooks/spatial-grid/support-host-id.d.ts.map +1 -0
  15. package/dist/hooks/spatial-grid/support-host-id.js +2 -0
  16. package/dist/hooks/spatial-grid/support-host-patch.d.ts +51 -0
  17. package/dist/hooks/spatial-grid/support-host-patch.d.ts.map +1 -0
  18. package/dist/hooks/spatial-grid/support-host-patch.js +164 -0
  19. package/dist/index.d.ts +23 -11
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +22 -10
  22. package/dist/lib/measurement-geometry.d.ts +4 -0
  23. package/dist/lib/measurement-geometry.d.ts.map +1 -1
  24. package/dist/lib/measurement-geometry.js +27 -10
  25. package/dist/lib/slab-polygon.d.ts.map +1 -1
  26. package/dist/lib/slab-polygon.js +33 -1
  27. package/dist/lib/space-detection.d.ts +15 -4
  28. package/dist/lib/space-detection.d.ts.map +1 -1
  29. package/dist/lib/space-detection.js +232 -91
  30. package/dist/lib/terrain-brush.d.ts +163 -0
  31. package/dist/lib/terrain-brush.d.ts.map +1 -0
  32. package/dist/lib/terrain-brush.js +359 -0
  33. package/dist/lib/terrain-codec.d.ts +51 -0
  34. package/dist/lib/terrain-codec.d.ts.map +1 -0
  35. package/dist/lib/terrain-codec.js +167 -0
  36. package/dist/lib/terrain-field.d.ts +150 -0
  37. package/dist/lib/terrain-field.d.ts.map +1 -0
  38. package/dist/lib/terrain-field.js +248 -0
  39. package/dist/lib/terrain-raycast.d.ts +44 -0
  40. package/dist/lib/terrain-raycast.d.ts.map +1 -0
  41. package/dist/lib/terrain-raycast.js +188 -0
  42. package/dist/lib/terrain-source.d.ts +60 -0
  43. package/dist/lib/terrain-source.d.ts.map +1 -0
  44. package/dist/lib/terrain-source.js +90 -0
  45. package/dist/lib/terrain-support.d.ts +85 -0
  46. package/dist/lib/terrain-support.d.ts.map +1 -0
  47. package/dist/lib/terrain-support.js +218 -0
  48. package/dist/lib/zone-quantities.d.ts +1 -1
  49. package/dist/lib/zone-quantities.d.ts.map +1 -1
  50. package/dist/lib/zone-quantities.js +311 -66
  51. package/dist/material-library.d.ts +9 -1
  52. package/dist/material-library.d.ts.map +1 -1
  53. package/dist/material-library.js +56 -4
  54. package/dist/registry/handles.d.ts +16 -1
  55. package/dist/registry/handles.d.ts.map +1 -1
  56. package/dist/registry/index.d.ts +1 -1
  57. package/dist/registry/index.d.ts.map +1 -1
  58. package/dist/registry/subtree.d.ts.map +1 -1
  59. package/dist/registry/subtree.js +5 -2
  60. package/dist/registry/types.d.ts +83 -1
  61. package/dist/registry/types.d.ts.map +1 -1
  62. package/dist/schema/index.d.ts +6 -3
  63. package/dist/schema/index.d.ts.map +1 -1
  64. package/dist/schema/index.js +6 -3
  65. package/dist/schema/nodes/cabinet.d.ts +2 -0
  66. package/dist/schema/nodes/cabinet.d.ts.map +1 -1
  67. package/dist/schema/nodes/cabinet.js +4 -2
  68. package/dist/schema/nodes/ceiling.d.ts +1 -1
  69. package/dist/schema/nodes/ceiling.d.ts.map +1 -1
  70. package/dist/schema/nodes/ceiling.js +7 -1
  71. package/dist/schema/nodes/column.d.ts +1 -0
  72. package/dist/schema/nodes/column.d.ts.map +1 -1
  73. package/dist/schema/nodes/column.js +2 -0
  74. package/dist/schema/nodes/construction-dimension.d.ts +195 -0
  75. package/dist/schema/nodes/construction-dimension.d.ts.map +1 -0
  76. package/dist/schema/nodes/construction-dimension.js +151 -0
  77. package/dist/schema/nodes/door.d.ts +29 -0
  78. package/dist/schema/nodes/door.d.ts.map +1 -1
  79. package/dist/schema/nodes/door.js +20 -0
  80. package/dist/schema/nodes/duct-terminal.d.ts +1 -0
  81. package/dist/schema/nodes/duct-terminal.d.ts.map +1 -1
  82. package/dist/schema/nodes/duct-terminal.js +2 -0
  83. package/dist/schema/nodes/fence.d.ts +2 -0
  84. package/dist/schema/nodes/fence.d.ts.map +1 -1
  85. package/dist/schema/nodes/fence.js +8 -0
  86. package/dist/schema/nodes/hvac-equipment.d.ts +1 -0
  87. package/dist/schema/nodes/hvac-equipment.d.ts.map +1 -1
  88. package/dist/schema/nodes/hvac-equipment.js +2 -0
  89. package/dist/schema/nodes/item.d.ts +1 -0
  90. package/dist/schema/nodes/item.d.ts.map +1 -1
  91. package/dist/schema/nodes/item.js +13 -0
  92. package/dist/schema/nodes/level.d.ts +2 -1
  93. package/dist/schema/nodes/level.d.ts.map +1 -1
  94. package/dist/schema/nodes/level.js +12 -33
  95. package/dist/schema/nodes/shelf.d.ts +1 -0
  96. package/dist/schema/nodes/shelf.d.ts.map +1 -1
  97. package/dist/schema/nodes/shelf.js +2 -0
  98. package/dist/schema/nodes/site.d.ts +9 -0
  99. package/dist/schema/nodes/site.d.ts.map +1 -1
  100. package/dist/schema/nodes/site.js +8 -6
  101. package/dist/schema/nodes/slab.d.ts +5 -0
  102. package/dist/schema/nodes/slab.d.ts.map +1 -1
  103. package/dist/schema/nodes/slab.js +14 -2
  104. package/dist/schema/nodes/spawn.d.ts +1 -0
  105. package/dist/schema/nodes/spawn.d.ts.map +1 -1
  106. package/dist/schema/nodes/spawn.js +2 -0
  107. package/dist/schema/nodes/stair.d.ts +3 -1
  108. package/dist/schema/nodes/stair.d.ts.map +1 -1
  109. package/dist/schema/nodes/stair.js +8 -1
  110. package/dist/schema/nodes/structural-grid.d.ts +27 -0
  111. package/dist/schema/nodes/structural-grid.d.ts.map +1 -0
  112. package/dist/schema/nodes/structural-grid.js +17 -0
  113. package/dist/schema/nodes/wall.d.ts +5 -2
  114. package/dist/schema/nodes/wall.d.ts.map +1 -1
  115. package/dist/schema/nodes/wall.js +13 -4
  116. package/dist/schema/nodes/window.d.ts +29 -0
  117. package/dist/schema/nodes/window.d.ts.map +1 -1
  118. package/dist/schema/nodes/window.js +18 -0
  119. package/dist/schema/nodes/zone.d.ts +20 -0
  120. package/dist/schema/nodes/zone.d.ts.map +1 -1
  121. package/dist/schema/nodes/zone.js +15 -0
  122. package/dist/schema/terrain.d.ts +28 -0
  123. package/dist/schema/terrain.d.ts.map +1 -0
  124. package/dist/schema/terrain.js +30 -0
  125. package/dist/schema/types.d.ts +211 -3
  126. package/dist/schema/types.d.ts.map +1 -1
  127. package/dist/schema/types.js +4 -0
  128. package/dist/services/__fixtures__/wall-plane-top-boundary-repro.d.ts +80 -0
  129. package/dist/services/__fixtures__/wall-plane-top-boundary-repro.d.ts.map +1 -0
  130. package/dist/services/__fixtures__/wall-plane-top-boundary-repro.js +89 -0
  131. package/dist/services/index.d.ts +2 -1
  132. package/dist/services/index.d.ts.map +1 -1
  133. package/dist/services/index.js +2 -1
  134. package/dist/services/level-height.d.ts +8 -9
  135. package/dist/services/level-height.d.ts.map +1 -1
  136. package/dist/services/level-height.js +48 -16
  137. package/dist/services/storey.d.ts +103 -0
  138. package/dist/services/storey.d.ts.map +1 -0
  139. package/dist/services/storey.js +296 -0
  140. package/dist/store/actions/node-actions.d.ts.map +1 -1
  141. package/dist/store/actions/node-actions.js +47 -3
  142. package/dist/store/history-control.d.ts +20 -0
  143. package/dist/store/history-control.d.ts.map +1 -1
  144. package/dist/store/history-control.js +110 -13
  145. package/dist/store/use-live-terrain.d.ts +65 -0
  146. package/dist/store/use-live-terrain.d.ts.map +1 -0
  147. package/dist/store/use-live-terrain.js +31 -0
  148. package/dist/store/use-live-transforms.d.ts +8 -0
  149. package/dist/store/use-live-transforms.d.ts.map +1 -1
  150. package/dist/store/use-scene.d.ts +31 -2
  151. package/dist/store/use-scene.d.ts.map +1 -1
  152. package/dist/store/use-scene.js +638 -8
  153. package/dist/systems/elevator/elevator-opening-system.d.ts +1 -0
  154. package/dist/systems/elevator/elevator-opening-system.d.ts.map +1 -1
  155. package/dist/systems/elevator/elevator-opening-system.js +27 -21
  156. package/dist/systems/elevator/elevator-service.d.ts +0 -2
  157. package/dist/systems/elevator/elevator-service.d.ts.map +1 -1
  158. package/dist/systems/elevator/elevator-service.js +2 -24
  159. package/dist/systems/slab/slab-placement.d.ts +11 -0
  160. package/dist/systems/slab/slab-placement.d.ts.map +1 -0
  161. package/dist/systems/slab/slab-placement.js +14 -0
  162. package/dist/systems/slab/slab-support.d.ts +150 -0
  163. package/dist/systems/slab/slab-support.d.ts.map +1 -0
  164. package/dist/systems/slab/slab-support.js +575 -0
  165. package/dist/systems/stair/stair-opening-preview.d.ts +1060 -935
  166. package/dist/systems/stair/stair-opening-preview.d.ts.map +1 -1
  167. package/dist/systems/stair/stair-opening-sync.d.ts.map +1 -1
  168. package/dist/systems/stair/stair-opening-sync.js +18 -15
  169. package/dist/systems/stair/stair-opening-system.d.ts.map +1 -1
  170. package/dist/systems/stair/stair-opening-system.js +32 -4
  171. package/dist/systems/stair/stair-rise.d.ts +22 -0
  172. package/dist/systems/stair/stair-rise.d.ts.map +1 -0
  173. package/dist/systems/stair/stair-rise.js +79 -0
  174. package/dist/systems/wall/wall-curve.d.ts +10 -0
  175. package/dist/systems/wall/wall-curve.d.ts.map +1 -1
  176. package/dist/systems/wall/wall-curve.js +1 -1
  177. package/dist/systems/wall/wall-mitering.js +6 -6
  178. package/dist/systems/wall/wall-top.d.ts +40 -0
  179. package/dist/systems/wall/wall-top.d.ts.map +1 -0
  180. package/dist/systems/wall/wall-top.js +46 -0
  181. package/dist/utils/clone-scene-graph.d.ts.map +1 -1
  182. package/dist/utils/clone-scene-graph.js +34 -3
  183. package/dist/utils/heal-scene-graph.d.ts +1 -1
  184. package/dist/utils/heal-scene-graph.d.ts.map +1 -1
  185. package/dist/utils/heal-scene-graph.js +25 -9
  186. package/dist/validation/validate-build-json.d.ts +2 -0
  187. package/dist/validation/validate-build-json.d.ts.map +1 -1
  188. package/dist/validation/validate-build-json.js +59 -3
  189. package/package.json +2 -2
  190. package/dist/hooks/scene-registry/scene-registry.test.d.ts +0 -2
  191. package/dist/hooks/scene-registry/scene-registry.test.d.ts.map +0 -1
  192. package/dist/hooks/scene-registry/scene-registry.test.js +0 -26
  193. package/dist/hooks/spatial-grid/floor-placed-elevation.test.d.ts +0 -2
  194. package/dist/hooks/spatial-grid/floor-placed-elevation.test.d.ts.map +0 -1
  195. package/dist/hooks/spatial-grid/floor-placed-elevation.test.js +0 -366
  196. package/dist/hooks/spatial-grid/wall-slab-overlap.test.d.ts +0 -2
  197. package/dist/hooks/spatial-grid/wall-slab-overlap.test.d.ts.map +0 -1
  198. package/dist/hooks/spatial-grid/wall-slab-overlap.test.js +0 -363
  199. package/dist/lib/measurement-geometry.test.d.ts +0 -2
  200. package/dist/lib/measurement-geometry.test.d.ts.map +0 -1
  201. package/dist/lib/measurement-geometry.test.js +0 -102
  202. package/dist/lib/slab-polygon.test.d.ts +0 -2
  203. package/dist/lib/slab-polygon.test.d.ts.map +0 -1
  204. package/dist/lib/slab-polygon.test.js +0 -635
  205. package/dist/lib/space-detection-pause.test.d.ts +0 -2
  206. package/dist/lib/space-detection-pause.test.d.ts.map +0 -1
  207. package/dist/lib/space-detection-pause.test.js +0 -42
  208. package/dist/lib/space-detection.test.d.ts +0 -2
  209. package/dist/lib/space-detection.test.d.ts.map +0 -1
  210. package/dist/lib/space-detection.test.js +0 -376
  211. package/dist/lib/zone-quantities.test.d.ts +0 -2
  212. package/dist/lib/zone-quantities.test.d.ts.map +0 -1
  213. package/dist/lib/zone-quantities.test.js +0 -82
  214. package/dist/registry/registry.test.d.ts +0 -2
  215. package/dist/registry/registry.test.d.ts.map +0 -1
  216. package/dist/registry/registry.test.js +0 -196
  217. package/dist/registry/relations-resolver.test.d.ts +0 -2
  218. package/dist/registry/relations-resolver.test.d.ts.map +0 -1
  219. package/dist/registry/relations-resolver.test.js +0 -183
  220. package/dist/registry/scene-api.test.d.ts +0 -2
  221. package/dist/registry/scene-api.test.d.ts.map +0 -1
  222. package/dist/registry/scene-api.test.js +0 -183
  223. package/dist/registry/subtree.test.d.ts +0 -2
  224. package/dist/registry/subtree.test.d.ts.map +0 -1
  225. package/dist/registry/subtree.test.js +0 -163
  226. package/dist/schema/asset-url.test.d.ts +0 -2
  227. package/dist/schema/asset-url.test.d.ts.map +0 -1
  228. package/dist/schema/asset-url.test.js +0 -134
  229. package/dist/schema/material.test.d.ts +0 -2
  230. package/dist/schema/material.test.d.ts.map +0 -1
  231. package/dist/schema/material.test.js +0 -43
  232. package/dist/schema/nodes/measurement.test.d.ts +0 -2
  233. package/dist/schema/nodes/measurement.test.d.ts.map +0 -1
  234. package/dist/schema/nodes/measurement.test.js +0 -139
  235. package/dist/schema/nodes/ridge-vent-defaults.test.d.ts +0 -2
  236. package/dist/schema/nodes/ridge-vent-defaults.test.d.ts.map +0 -1
  237. package/dist/schema/nodes/ridge-vent-defaults.test.js +0 -205
  238. package/dist/schema/nodes/roof-segment-shape.test.d.ts +0 -2
  239. package/dist/schema/nodes/roof-segment-shape.test.d.ts.map +0 -1
  240. package/dist/schema/nodes/roof-segment-shape.test.js +0 -175
  241. package/dist/schema/nodes/roof-segment-surface.test.d.ts +0 -2
  242. package/dist/schema/nodes/roof-segment-surface.test.d.ts.map +0 -1
  243. package/dist/schema/nodes/roof-segment-surface.test.js +0 -48
  244. package/dist/schema/nodes/roof-segment-trim.test.d.ts +0 -2
  245. package/dist/schema/nodes/roof-segment-trim.test.d.ts.map +0 -1
  246. package/dist/schema/nodes/roof-segment-trim.test.js +0 -107
  247. package/dist/schema/nodes/roof-segment-walls.test.d.ts +0 -2
  248. package/dist/schema/nodes/roof-segment-walls.test.d.ts.map +0 -1
  249. package/dist/schema/nodes/roof-segment-walls.test.js +0 -92
  250. package/dist/schema/nodes/wall.test.d.ts +0 -2
  251. package/dist/schema/nodes/wall.test.d.ts.map +0 -1
  252. package/dist/schema/nodes/wall.test.js +0 -208
  253. package/dist/services/alignment-anchors.test.d.ts +0 -2
  254. package/dist/services/alignment-anchors.test.d.ts.map +0 -1
  255. package/dist/services/alignment-anchors.test.js +0 -383
  256. package/dist/services/alignment.test.d.ts +0 -2
  257. package/dist/services/alignment.test.d.ts.map +0 -1
  258. package/dist/services/alignment.test.js +0 -92
  259. package/dist/services/drag-session.test.d.ts +0 -2
  260. package/dist/services/drag-session.test.d.ts.map +0 -1
  261. package/dist/services/drag-session.test.js +0 -219
  262. package/dist/services/hosting.test.d.ts +0 -2
  263. package/dist/services/hosting.test.d.ts.map +0 -1
  264. package/dist/services/hosting.test.js +0 -230
  265. package/dist/services/movement.test.d.ts +0 -2
  266. package/dist/services/movement.test.d.ts.map +0 -1
  267. package/dist/services/movement.test.js +0 -133
  268. package/dist/services/opening-guides.test.d.ts +0 -2
  269. package/dist/services/opening-guides.test.d.ts.map +0 -1
  270. package/dist/services/opening-guides.test.js +0 -208
  271. package/dist/services/port-connectivity.test.d.ts +0 -2
  272. package/dist/services/port-connectivity.test.d.ts.map +0 -1
  273. package/dist/services/port-connectivity.test.js +0 -297
  274. package/dist/services/riser-diagram.test.d.ts +0 -2
  275. package/dist/services/riser-diagram.test.d.ts.map +0 -1
  276. package/dist/services/riser-diagram.test.js +0 -66
  277. package/dist/services/single-undo-dance.test.d.ts +0 -2
  278. package/dist/services/single-undo-dance.test.d.ts.map +0 -1
  279. package/dist/services/single-undo-dance.test.js +0 -210
  280. package/dist/services/snap.test.d.ts +0 -2
  281. package/dist/services/snap.test.d.ts.map +0 -1
  282. package/dist/services/snap.test.js +0 -137
  283. package/dist/services/system-graph.test.d.ts +0 -2
  284. package/dist/services/system-graph.test.d.ts.map +0 -1
  285. package/dist/services/system-graph.test.js +0 -138
  286. package/dist/services/validate-dwv.test.d.ts +0 -2
  287. package/dist/services/validate-dwv.test.d.ts.map +0 -1
  288. package/dist/services/validate-dwv.test.js +0 -109
  289. package/dist/store/actions/node-mutation-sanitize.test.d.ts +0 -2
  290. package/dist/store/actions/node-mutation-sanitize.test.d.ts.map +0 -1
  291. package/dist/store/actions/node-mutation-sanitize.test.js +0 -147
  292. package/dist/store/actions/reparent.test.d.ts +0 -2
  293. package/dist/store/actions/reparent.test.d.ts.map +0 -1
  294. package/dist/store/actions/reparent.test.js +0 -212
  295. package/dist/store/actions/ridge-vent-update.test.d.ts +0 -2
  296. package/dist/store/actions/ridge-vent-update.test.d.ts.map +0 -1
  297. package/dist/store/actions/ridge-vent-update.test.js +0 -264
  298. package/dist/store/use-scene-dirty-tracking.test.d.ts +0 -2
  299. package/dist/store/use-scene-dirty-tracking.test.d.ts.map +0 -1
  300. package/dist/store/use-scene-dirty-tracking.test.js +0 -68
  301. package/dist/store/use-scene-elevator-migration.test.d.ts +0 -2
  302. package/dist/store/use-scene-elevator-migration.test.d.ts.map +0 -1
  303. package/dist/store/use-scene-elevator-migration.test.js +0 -109
  304. package/dist/store/use-scene-measurement-roundtrip.test.d.ts +0 -2
  305. package/dist/store/use-scene-measurement-roundtrip.test.d.ts.map +0 -1
  306. package/dist/store/use-scene-measurement-roundtrip.test.js +0 -97
  307. package/dist/store/use-scene-plugins.test.d.ts +0 -2
  308. package/dist/store/use-scene-plugins.test.d.ts.map +0 -1
  309. package/dist/store/use-scene-plugins.test.js +0 -51
  310. package/dist/store/use-scene-wall-slot-migration.test.d.ts +0 -2
  311. package/dist/store/use-scene-wall-slot-migration.test.d.ts.map +0 -1
  312. package/dist/store/use-scene-wall-slot-migration.test.js +0 -210
  313. package/dist/store/use-scene-window-migration.test.d.ts +0 -2
  314. package/dist/store/use-scene-window-migration.test.d.ts.map +0 -1
  315. package/dist/store/use-scene-window-migration.test.js +0 -85
  316. package/dist/systems/elevator/elevator-opening-sync.test.d.ts +0 -2
  317. package/dist/systems/elevator/elevator-opening-sync.test.d.ts.map +0 -1
  318. package/dist/systems/elevator/elevator-opening-sync.test.js +0 -146
  319. package/dist/systems/elevator/elevator-runtime.test.d.ts +0 -2
  320. package/dist/systems/elevator/elevator-runtime.test.d.ts.map +0 -1
  321. package/dist/systems/elevator/elevator-runtime.test.js +0 -64
  322. package/dist/systems/fence/fence-spline.test.d.ts +0 -2
  323. package/dist/systems/fence/fence-spline.test.d.ts.map +0 -1
  324. package/dist/systems/fence/fence-spline.test.js +0 -136
  325. package/dist/systems/stair/stair-opening-preview.test.d.ts +0 -2
  326. package/dist/systems/stair/stair-opening-preview.test.d.ts.map +0 -1
  327. package/dist/systems/stair/stair-opening-preview.test.js +0 -80
  328. package/dist/systems/stair/stair-opening-sync.test.d.ts +0 -2
  329. package/dist/systems/stair/stair-opening-sync.test.d.ts.map +0 -1
  330. package/dist/systems/stair/stair-opening-sync.test.js +0 -485
  331. package/dist/systems/wall/wall-mitering.test.d.ts +0 -2
  332. package/dist/systems/wall/wall-mitering.test.d.ts.map +0 -1
  333. package/dist/systems/wall/wall-mitering.test.js +0 -63
  334. package/dist/utils/clone-scene-graph.test.d.ts +0 -2
  335. package/dist/utils/clone-scene-graph.test.d.ts.map +0 -1
  336. package/dist/utils/clone-scene-graph.test.js +0 -62
  337. package/dist/utils/heal-scene-graph.test.d.ts +0 -2
  338. package/dist/utils/heal-scene-graph.test.d.ts.map +0 -1
  339. package/dist/utils/heal-scene-graph.test.js +0 -88
@@ -192,6 +192,7 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
192
192
  wallT?: number | undefined;
193
193
  roofSegmentId?: string | undefined;
194
194
  roofFace?: "front" | "back" | "right" | "left" | undefined;
195
+ supportSlabId?: string | undefined;
195
196
  collectionIds?: `collection_${string}`[] | undefined;
196
197
  slots?: Record<string, string> | undefined;
197
198
  } | {
@@ -209,7 +210,6 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
209
210
  stairId?: string | undefined;
210
211
  elevatorId?: string | undefined;
211
212
  }[];
212
- height: number;
213
213
  autoFromWalls: boolean;
214
214
  name?: string | undefined;
215
215
  camera?: {
@@ -238,6 +238,7 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
238
238
  } | undefined;
239
239
  materialPreset?: string | undefined;
240
240
  slots?: Record<string, string> | undefined;
241
+ height?: number | undefined;
241
242
  } | {
242
243
  object: "node";
243
244
  parentId: string | null;
@@ -326,6 +327,46 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
326
327
  fov?: number | undefined;
327
328
  zoom?: number | undefined;
328
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;
329
370
  material?: {
330
371
  id?: string | undefined;
331
372
  preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
@@ -344,7 +385,80 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
344
385
  } | undefined;
345
386
  } | undefined;
346
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;
347
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;
348
462
  } | {
349
463
  object: "node";
350
464
  parentId: string | null;
@@ -397,27 +511,50 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
397
511
  slots?: Record<string, string> | undefined;
398
512
  path?: [number, number][] | undefined;
399
513
  tangents?: ([number, number] | null)[] | undefined;
514
+ supportSlabId?: string | undefined;
515
+ supportOffset?: number | undefined;
400
516
  curveOffset?: number | undefined;
401
517
  } | {
402
518
  object: "node";
403
519
  parentId: string | null;
404
520
  visible: boolean;
405
521
  metadata: import("zod").JSONType;
406
- id: `guide_${string}`;
407
- type: "guide";
408
- url: string;
409
- position: [number, number, number];
410
- rotation: [number, number, number];
411
- scale: number;
412
- opacity: number;
413
- scaleReference: {
414
- start: [number, number];
415
- end: [number, number];
416
- realLengthMeters: number;
417
- measuredLengthUnits: number;
418
- metersPerUnit: number;
419
- label: string;
420
- } | 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;
421
558
  name?: string | undefined;
422
559
  camera?: {
423
560
  position: [number, number, number];
@@ -431,13 +568,13 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
431
568
  parentId: string | null;
432
569
  visible: boolean;
433
570
  metadata: import("zod").JSONType;
434
- id: `site_${string}`;
435
- type: "site";
436
- polygon: {
437
- type: "polygon";
438
- points: [number, number][];
439
- };
440
- children: string[];
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;
441
578
  name?: string | undefined;
442
579
  camera?: {
443
580
  position: [number, number, number];
@@ -450,13 +587,23 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
450
587
  object: "node";
451
588
  parentId: string | null;
452
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;
453
606
  metadata: import("zod").JSONType;
454
- id: `building_${string}`;
455
- type: "building";
456
- children: (`elevator_${string}` | `level_${string}`)[];
457
- position: [number, number, number];
458
- rotation: [number, number, number];
459
- name?: string | undefined;
460
607
  camera?: {
461
608
  position: [number, number, number];
462
609
  target: [number, number, number];
@@ -469,10 +616,19 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
469
616
  parentId: string | null;
470
617
  visible: boolean;
471
618
  metadata: import("zod").JSONType;
472
- id: `level_${string}`;
473
- type: "level";
474
- children: (`item_${string}` | `ceiling_${string}` | `column_${string}` | `fence_${string}` | `guide_${string}` | `wall_${string}` | `zone_${string}` | `slab_${string}` | `roof_${string}` | `stair_${string}` | `scan_${string}` | `measurement_${string}` | `spawn_${string}` | `shelf_${string}`)[];
475
- level: number;
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;
476
632
  name?: string | undefined;
477
633
  camera?: {
478
634
  position: [number, number, number];
@@ -481,18 +637,37 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
481
637
  fov?: number | undefined;
482
638
  zoom?: number | undefined;
483
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;
484
661
  } | {
485
662
  object: "node";
486
663
  parentId: string | null;
487
664
  visible: boolean;
488
665
  metadata: import("zod").JSONType;
489
- id: `wall_${string}`;
490
- type: "wall";
491
- children: (`item_${string}` | `door_${string}` | `window_${string}`)[];
492
- start: [number, number];
493
- end: [number, number];
494
- frontSide: "unknown" | "interior" | "exterior";
495
- backSide: "unknown" | "interior" | "exterior";
666
+ id: `roof_${string}`;
667
+ type: "roof";
668
+ position: [number, number, number];
669
+ rotation: number;
670
+ children: `rseg_${string}`[];
496
671
  name?: string | undefined;
497
672
  camera?: {
498
673
  position: [number, number, number];
@@ -519,7 +694,7 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
519
694
  } | undefined;
520
695
  } | undefined;
521
696
  materialPreset?: string | undefined;
522
- interiorMaterial?: {
697
+ topMaterial?: {
523
698
  id?: string | undefined;
524
699
  preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
525
700
  properties?: {
@@ -536,8 +711,8 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
536
711
  scale?: number | undefined;
537
712
  } | undefined;
538
713
  } | undefined;
539
- interiorMaterialPreset?: string | undefined;
540
- exteriorMaterial?: {
714
+ topMaterialPreset?: string | undefined;
715
+ edgeMaterial?: {
541
716
  id?: string | undefined;
542
717
  preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
543
718
  properties?: {
@@ -554,74 +729,52 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
554
729
  scale?: number | undefined;
555
730
  } | undefined;
556
731
  } | undefined;
557
- exteriorMaterialPreset?: string | undefined;
558
- slots?: Record<string, string> | undefined;
559
- thickness?: number | undefined;
560
- height?: number | undefined;
561
- curveOffset?: number | undefined;
562
- faceBands?: {
563
- enabled: boolean;
564
- count: number;
565
- lowerHeight: number;
566
- middleHeight: number;
567
- upperHeight: number;
568
- } | undefined;
569
- skirting?: {
570
- enabled: boolean;
571
- sides: "interior" | "exterior" | "both";
572
- height: number;
573
- proud: number;
574
- profile: "flat" | "bevel" | "triangle" | "cove" | "bullnose" | "base-modern" | "base-colonial" | "base-shoe" | "base-ogee" | "crown-cove" | "crown-ogee" | "crown-craftsman" | "crown-layered" | "rail-rounded" | "rail-ogee" | "rail-picture" | "rail-stepped";
575
- offsetY?: number | undefined;
576
- } | undefined;
577
- crown?: {
578
- enabled: boolean;
579
- sides: "interior" | "exterior" | "both";
580
- height: number;
581
- proud: number;
582
- profile: "flat" | "bevel" | "triangle" | "cove" | "bullnose" | "base-modern" | "base-colonial" | "base-shoe" | "base-ogee" | "crown-cove" | "crown-ogee" | "crown-craftsman" | "crown-layered" | "rail-rounded" | "rail-ogee" | "rail-picture" | "rail-stepped";
583
- offsetY?: number | undefined;
584
- } | undefined;
585
- chairRail?: {
586
- enabled: boolean;
587
- sides: "interior" | "exterior" | "both";
588
- height: number;
589
- proud: number;
590
- profile: "flat" | "bevel" | "triangle" | "cove" | "bullnose" | "base-modern" | "base-colonial" | "base-shoe" | "base-ogee" | "crown-cove" | "crown-ogee" | "crown-craftsman" | "crown-layered" | "rail-rounded" | "rail-ogee" | "rail-picture" | "rail-stepped";
591
- offsetY?: number | undefined;
732
+ edgeMaterialPreset?: string | undefined;
733
+ wallMaterial?: {
734
+ id?: string | undefined;
735
+ preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
736
+ properties?: {
737
+ color: string;
738
+ roughness: number;
739
+ metalness: number;
740
+ opacity: number;
741
+ transparent: boolean;
742
+ side: "front" | "back" | "double";
743
+ } | undefined;
744
+ texture?: {
745
+ url: string;
746
+ repeat?: [number, number] | undefined;
747
+ scale?: number | undefined;
748
+ } | undefined;
592
749
  } | undefined;
750
+ wallMaterialPreset?: string | undefined;
593
751
  } | {
594
752
  object: "node";
595
753
  parentId: string | null;
596
754
  visible: boolean;
597
755
  metadata: import("zod").JSONType;
598
- position: [number, number, number];
756
+ id: `stair_${string}`;
757
+ type: "stair";
758
+ position: [number, number, number];
599
759
  rotation: number;
760
+ stairType: "straight" | "spiral" | "curved";
761
+ fromLevelId: string | null;
762
+ toLevelId: string | null;
763
+ slabOpeningMode: "none" | "destination";
764
+ openingOffset: number;
600
765
  width: number;
601
- depth: number;
602
- carcassHeight: number;
603
- operationState: number;
604
- plinthHeight: number;
605
- toeKickDepth: number;
606
- boardThickness: number;
607
- countertopThickness: number;
608
- countertopOverhang: number;
609
- countertopBackOverhang: number;
610
- withFinishedBack: boolean;
611
- frontThickness: number;
612
- frontGap: number;
613
- frontStyle: "slab" | "shaker" | "raised-arch";
614
- handleStyle: "none" | "bar" | "cutout" | "hole" | "knob";
615
- handlePosition: "top" | "auto" | "center";
616
- frontOverlay: "full" | "inset";
617
- withBottomPanel: boolean;
618
- showPlinth: boolean;
619
- withCountertop: boolean;
620
- id: `cabinet_${string}`;
621
- type: "cabinet";
622
- runTier: "wall" | "base" | "tall";
623
- children: `cabinet-module_${string}`[];
624
- withWaterfall: boolean;
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}`[];
625
778
  name?: string | undefined;
626
779
  camera?: {
627
780
  position: [number, number, number];
@@ -648,135 +801,43 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
648
801
  } | undefined;
649
802
  } | undefined;
650
803
  materialPreset?: string | undefined;
651
- slots?: Record<string, string> | undefined;
652
- stack?: ({
653
- type: "shelf";
654
- id: string;
655
- shelfCount?: number | undefined;
656
- height?: number | undefined;
657
- } | {
658
- type: "drawer";
659
- id: string;
660
- drawerCount?: number | undefined;
661
- height?: number | undefined;
662
- } | {
663
- type: "door";
664
- id: string;
665
- doorType?: "glass" | "double" | "single-left" | "single-right" | undefined;
666
- shelfCount?: number | undefined;
667
- height?: number | undefined;
668
- } | {
669
- type: "sink";
670
- id: string;
671
- sinkLayout?: "double" | "single" | "double-offset" | undefined;
672
- height?: number | undefined;
673
- } | {
674
- type: "oven";
675
- id: string;
676
- height?: number | undefined;
677
- } | {
678
- type: "microwave";
679
- id: string;
680
- height?: number | undefined;
681
- } | {
682
- type: "dishwasher";
683
- id: string;
684
- height?: number | undefined;
685
- } | {
686
- type: "cooktop-gas";
687
- id: string;
688
- cooktopLayout?: "gas-2burner" | "gas-4burner" | "gas-5burner-wok" | "gas-6burner" | undefined;
689
- cooktopBurnersOn?: boolean | undefined;
690
- cooktopActiveBurners?: number[] | undefined;
691
- cooktopKnobProgress?: number[] | undefined;
692
- cooktopShowGrate?: boolean | undefined;
693
- height?: number | undefined;
694
- } | {
695
- type: "cooktop-induction";
696
- id: string;
697
- cooktopLayout?: "induction-2zone" | "induction-4zone" | undefined;
698
- cooktopBurnersOn?: boolean | undefined;
699
- cooktopActiveBurners?: number[] | undefined;
700
- cooktopKnobProgress?: number[] | undefined;
701
- cooktopShowGrate?: boolean | undefined;
702
- height?: number | undefined;
703
- } | {
704
- type: "pull-out-pantry";
705
- id: string;
706
- shelfCount?: number | undefined;
707
- pantryRackStyle?: "glass" | "wire" | "tray" | undefined;
708
- height?: number | undefined;
709
- } | {
710
- type: "fridge-single";
711
- id: string;
712
- height?: number | undefined;
713
- } | {
714
- type: "fridge-double";
715
- id: string;
716
- height?: number | undefined;
717
- } | {
718
- type: "fridge-top-freezer";
719
- id: string;
720
- height?: number | undefined;
721
- } | {
722
- type: "fridge-bottom-freezer";
723
- id: string;
724
- height?: number | undefined;
725
- } | {
726
- type: "hood-pyramid";
727
- id: string;
728
- height?: number | undefined;
729
- } | {
730
- type: "hood-curved-glass";
731
- id: string;
732
- height?: number | undefined;
733
- })[] | undefined;
734
- barLedge?: {
735
- edge: "back" | "right" | "left";
736
- height: number;
737
- depth: number;
804
+ railingMaterial?: {
805
+ id?: string | undefined;
806
+ preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
807
+ properties?: {
808
+ color: string;
809
+ roughness: number;
810
+ metalness: number;
811
+ opacity: number;
812
+ transparent: boolean;
813
+ side: "front" | "back" | "double";
814
+ } | undefined;
815
+ texture?: {
816
+ url: string;
817
+ repeat?: [number, number] | undefined;
818
+ scale?: number | undefined;
819
+ } | undefined;
738
820
  } | undefined;
739
- } | {
740
- object: "node";
741
- parentId: string | null;
742
- visible: boolean;
743
- metadata: import("zod").JSONType;
744
- position: [number, number, number];
745
- rotation: number;
746
- width: number;
747
- depth: number;
748
- carcassHeight: number;
749
- operationState: number;
750
- plinthHeight: number;
751
- toeKickDepth: number;
752
- boardThickness: number;
753
- countertopThickness: number;
754
- countertopOverhang: number;
755
- countertopBackOverhang: number;
756
- withFinishedBack: boolean;
757
- frontThickness: number;
758
- frontGap: number;
759
- frontStyle: "slab" | "shaker" | "raised-arch";
760
- handleStyle: "none" | "bar" | "cutout" | "hole" | "knob";
761
- handlePosition: "top" | "auto" | "center";
762
- frontOverlay: "full" | "inset";
763
- withBottomPanel: boolean;
764
- showPlinth: boolean;
765
- withCountertop: boolean;
766
- id: `cabinet-module_${string}`;
767
- type: "cabinet-module";
768
- children: (`cabinet_${string}` | `cabinet-module_${string}`)[];
769
- cabinetType: "base" | "tall";
770
- moduleKind: "standard" | "corner-filler";
771
- name?: string | undefined;
772
- camera?: {
773
- position: [number, number, number];
774
- target: [number, number, number];
775
- mode: "perspective" | "orthographic";
776
- fov?: number | undefined;
777
- zoom?: number | undefined;
821
+ railingMaterialPreset?: string | undefined;
822
+ treadMaterial?: {
823
+ id?: string | undefined;
824
+ preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
825
+ properties?: {
826
+ color: string;
827
+ roughness: number;
828
+ metalness: number;
829
+ opacity: number;
830
+ transparent: boolean;
831
+ side: "front" | "back" | "double";
832
+ } | undefined;
833
+ texture?: {
834
+ url: string;
835
+ repeat?: [number, number] | undefined;
836
+ scale?: number | undefined;
837
+ } | undefined;
778
838
  } | undefined;
779
- material?: {
839
+ treadMaterialPreset?: string | undefined;
840
+ sideMaterial?: {
780
841
  id?: string | undefined;
781
842
  preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
782
843
  properties?: {
@@ -793,104 +854,365 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
793
854
  scale?: number | undefined;
794
855
  } | undefined;
795
856
  } | undefined;
796
- materialPreset?: string | undefined;
857
+ sideMaterialPreset?: string | undefined;
797
858
  slots?: Record<string, string> | undefined;
798
- stack?: ({
799
- type: "shelf";
800
- id: string;
801
- shelfCount?: number | undefined;
802
- height?: number | undefined;
803
- } | {
804
- type: "drawer";
805
- id: string;
806
- drawerCount?: number | undefined;
807
- height?: number | undefined;
808
- } | {
809
- type: "door";
810
- id: string;
811
- doorType?: "glass" | "double" | "single-left" | "single-right" | undefined;
812
- shelfCount?: number | undefined;
813
- height?: number | undefined;
814
- } | {
815
- type: "sink";
816
- id: string;
817
- sinkLayout?: "double" | "single" | "double-offset" | undefined;
818
- height?: number | undefined;
819
- } | {
820
- type: "oven";
821
- id: string;
822
- height?: number | undefined;
823
- } | {
824
- type: "microwave";
825
- id: string;
826
- height?: number | undefined;
827
- } | {
828
- type: "dishwasher";
829
- id: string;
830
- height?: number | undefined;
831
- } | {
832
- type: "cooktop-gas";
833
- id: string;
834
- cooktopLayout?: "gas-2burner" | "gas-4burner" | "gas-5burner-wok" | "gas-6burner" | undefined;
835
- cooktopBurnersOn?: boolean | undefined;
836
- cooktopActiveBurners?: number[] | undefined;
837
- cooktopKnobProgress?: number[] | undefined;
838
- cooktopShowGrate?: boolean | undefined;
839
- height?: number | undefined;
840
- } | {
841
- type: "cooktop-induction";
842
- id: string;
843
- cooktopLayout?: "induction-2zone" | "induction-4zone" | undefined;
844
- cooktopBurnersOn?: boolean | undefined;
845
- cooktopActiveBurners?: number[] | undefined;
846
- cooktopKnobProgress?: number[] | undefined;
847
- cooktopShowGrate?: boolean | undefined;
848
- height?: number | undefined;
849
- } | {
850
- type: "pull-out-pantry";
851
- id: string;
852
- shelfCount?: number | undefined;
853
- pantryRackStyle?: "glass" | "wire" | "tray" | undefined;
854
- height?: number | undefined;
855
- } | {
856
- type: "fridge-single";
857
- id: string;
858
- height?: number | undefined;
859
- } | {
860
- type: "fridge-double";
861
- id: string;
862
- height?: number | undefined;
859
+ supportSlabId?: string | undefined;
860
+ deckSlabId?: string | undefined;
861
+ totalRise?: number | undefined;
862
+ } | {
863
+ object: "node";
864
+ parentId: string | null;
865
+ visible: boolean;
866
+ metadata: import("zod").JSONType;
867
+ id: `scan_${string}`;
868
+ type: "scan";
869
+ url: string;
870
+ position: [number, number, number];
871
+ rotation: [number, number, number];
872
+ scale: number;
873
+ opacity: number;
874
+ name?: string | undefined;
875
+ camera?: {
876
+ position: [number, number, number];
877
+ target: [number, number, number];
878
+ mode: "perspective" | "orthographic";
879
+ fov?: number | undefined;
880
+ zoom?: number | undefined;
881
+ } | undefined;
882
+ } | {
883
+ object: "node";
884
+ parentId: string | null;
885
+ visible: boolean;
886
+ metadata: import("zod").JSONType;
887
+ id: `guide_${string}`;
888
+ type: "guide";
889
+ url: string;
890
+ position: [number, number, number];
891
+ rotation: [number, number, number];
892
+ scale: number;
893
+ opacity: number;
894
+ scaleReference: {
895
+ start: [number, number];
896
+ end: [number, number];
897
+ realLengthMeters: number;
898
+ measuredLengthUnits: number;
899
+ metersPerUnit: number;
900
+ label: string;
901
+ } | null;
902
+ name?: string | undefined;
903
+ camera?: {
904
+ position: [number, number, number];
905
+ target: [number, number, number];
906
+ mode: "perspective" | "orthographic";
907
+ fov?: number | undefined;
908
+ zoom?: number | undefined;
909
+ } | undefined;
910
+ } | {
911
+ object: "node";
912
+ parentId: string | null;
913
+ visible: boolean;
914
+ metadata: import("zod").JSONType;
915
+ id: `measurement_${string}`;
916
+ type: "measurement";
917
+ measurement: {
918
+ kind: "distance";
919
+ points: [[number, number, number] | {
920
+ kind: "feature";
921
+ reference: {
922
+ nodeId: string;
923
+ featureId: string;
924
+ parameters?: Record<string, string | number | boolean> | undefined;
925
+ };
926
+ fallback: [number, number, number];
927
+ }, [number, number, number] | {
928
+ kind: "feature";
929
+ reference: {
930
+ nodeId: string;
931
+ featureId: string;
932
+ parameters?: Record<string, string | number | boolean> | undefined;
933
+ };
934
+ fallback: [number, number, number];
935
+ }];
863
936
  } | {
864
- type: "fridge-top-freezer";
865
- id: string;
866
- height?: number | undefined;
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
+ }];
867
963
  } | {
868
- type: "fridge-bottom-freezer";
869
- id: string;
870
- height?: number | undefined;
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
+ })[];
871
974
  } | {
872
- type: "hood-pyramid";
873
- id: string;
874
- height?: number | undefined;
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
+ })[];
875
985
  } | {
876
- type: "hood-curved-glass";
877
- id: string;
878
- height?: number | undefined;
879
- })[] | undefined;
880
- openSide?: "right" | "left" | undefined;
881
- cornerShelf?: boolean | undefined;
986
+ kind: "volume";
987
+ base: ([number, number, number] | {
988
+ kind: "feature";
989
+ reference: {
990
+ nodeId: string;
991
+ featureId: string;
992
+ parameters?: Record<string, string | number | boolean> | undefined;
993
+ };
994
+ fallback: [number, number, number];
995
+ })[];
996
+ extrusion: [number, number, number];
997
+ };
998
+ name?: string | undefined;
999
+ camera?: {
1000
+ position: [number, number, number];
1001
+ target: [number, number, number];
1002
+ mode: "perspective" | "orthographic";
1003
+ fov?: number | undefined;
1004
+ zoom?: number | undefined;
1005
+ } | undefined;
1006
+ } | {
1007
+ object: "node";
1008
+ parentId: string | null;
1009
+ visible: boolean;
1010
+ metadata: import("zod").JSONType;
1011
+ id: `spawn_${string}`;
1012
+ type: "spawn";
1013
+ position: [number, number, number];
1014
+ rotation: number;
1015
+ name?: string | undefined;
1016
+ camera?: {
1017
+ position: [number, number, number];
1018
+ target: [number, number, number];
1019
+ mode: "perspective" | "orthographic";
1020
+ fov?: number | undefined;
1021
+ zoom?: number | undefined;
1022
+ } | undefined;
1023
+ supportSlabId?: string | undefined;
1024
+ } | {
1025
+ object: "node";
1026
+ parentId: string | null;
1027
+ visible: boolean;
1028
+ metadata: import("zod").JSONType;
1029
+ id: `shelf_${string}`;
1030
+ type: "shelf";
1031
+ children: `item_${string}`[];
1032
+ position: [number, number, number];
1033
+ rotation: [number, number, number];
1034
+ width: number;
1035
+ depth: number;
1036
+ thickness: number;
1037
+ height: number;
1038
+ style: "wall-shelf" | "bookshelf" | "open-rack" | "cubby";
1039
+ rows: number;
1040
+ columns: number;
1041
+ withBack: boolean;
1042
+ withSides: boolean;
1043
+ withBottom: boolean;
1044
+ bracketStyle: "minimal" | "industrial" | "hidden";
1045
+ name?: string | undefined;
1046
+ camera?: {
1047
+ position: [number, number, number];
1048
+ target: [number, number, number];
1049
+ mode: "perspective" | "orthographic";
1050
+ fov?: number | undefined;
1051
+ zoom?: number | undefined;
1052
+ } | undefined;
1053
+ supportSlabId?: string | undefined;
1054
+ material?: {
1055
+ id?: string | undefined;
1056
+ preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
1057
+ properties?: {
1058
+ color: string;
1059
+ roughness: number;
1060
+ metalness: number;
1061
+ opacity: number;
1062
+ transparent: boolean;
1063
+ side: "front" | "back" | "double";
1064
+ } | undefined;
1065
+ texture?: {
1066
+ url: string;
1067
+ repeat?: [number, number] | undefined;
1068
+ scale?: number | undefined;
1069
+ } | undefined;
1070
+ } | undefined;
1071
+ materialPreset?: string | undefined;
1072
+ slots?: Record<string, string> | undefined;
1073
+ } | {
1074
+ object: "node";
1075
+ parentId: string | null;
1076
+ visible: boolean;
1077
+ metadata: import("zod").JSONType;
1078
+ id: `duct-segment_${string}`;
1079
+ type: "duct-segment";
1080
+ path: [number, number, number][];
1081
+ shape: "round" | "rect" | "oval";
1082
+ diameter: number;
1083
+ width: number;
1084
+ height: number;
1085
+ roll: number;
1086
+ ductMaterial: "spiral" | "sheet-metal" | "flex" | "duct-board";
1087
+ seamDetail: boolean;
1088
+ insulated: boolean;
1089
+ insulationR: number;
1090
+ system: "supply" | "return";
1091
+ name?: string | undefined;
1092
+ camera?: {
1093
+ position: [number, number, number];
1094
+ target: [number, number, number];
1095
+ mode: "perspective" | "orthographic";
1096
+ fov?: number | undefined;
1097
+ zoom?: number | undefined;
1098
+ } | undefined;
1099
+ slots?: Record<string, string> | undefined;
1100
+ } | {
1101
+ object: "node";
1102
+ parentId: string | null;
1103
+ visible: boolean;
1104
+ metadata: import("zod").JSONType;
1105
+ id: `duct-fitting_${string}`;
1106
+ type: "duct-fitting";
1107
+ position: [number, number, number];
1108
+ rotation: [number, number, number];
1109
+ fittingType: "elbow" | "tee" | "cross" | "reducer" | "transition";
1110
+ shape: "round" | "rect" | "oval";
1111
+ width: number;
1112
+ height: number;
1113
+ shape2: "round" | "rect" | "oval";
1114
+ width2: number;
1115
+ height2: number;
1116
+ angle: number;
1117
+ branchAngle: number;
1118
+ diameter: number;
1119
+ diameter2: number;
1120
+ ductMaterial: "sheet-metal" | "flex" | "duct-board";
1121
+ system: "supply" | "return";
1122
+ name?: string | undefined;
1123
+ camera?: {
1124
+ position: [number, number, number];
1125
+ target: [number, number, number];
1126
+ mode: "perspective" | "orthographic";
1127
+ fov?: number | undefined;
1128
+ zoom?: number | undefined;
1129
+ } | undefined;
1130
+ slots?: Record<string, string> | undefined;
1131
+ } | {
1132
+ object: "node";
1133
+ parentId: string | null;
1134
+ visible: boolean;
1135
+ metadata: import("zod").JSONType;
1136
+ id: `duct-terminal_${string}`;
1137
+ type: "duct-terminal";
1138
+ position: [number, number, number];
1139
+ rotation: number;
1140
+ terminalType: "supply-register" | "diffuser" | "return-grille";
1141
+ mount: "wall" | "ceiling" | "floor";
1142
+ width: number;
1143
+ depth: number;
1144
+ collarShape: "round" | "rect" | "oval";
1145
+ collarDiameter: number;
1146
+ collarWidth: number;
1147
+ collarHeight: number;
1148
+ name?: string | undefined;
1149
+ camera?: {
1150
+ position: [number, number, number];
1151
+ target: [number, number, number];
1152
+ mode: "perspective" | "orthographic";
1153
+ fov?: number | undefined;
1154
+ zoom?: number | undefined;
1155
+ } | undefined;
1156
+ supportSlabId?: string | undefined;
1157
+ } | {
1158
+ object: "node";
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;
1185
+ } | undefined;
1186
+ supportSlabId?: string | undefined;
1187
+ } | {
1188
+ object: "node";
1189
+ parentId: string | null;
1190
+ visible: boolean;
1191
+ metadata: import("zod").JSONType;
1192
+ id: `lineset_${string}`;
1193
+ type: "lineset";
1194
+ path: [number, number, number][];
1195
+ suctionDiameter: number;
1196
+ liquidDiameter: number;
1197
+ insulated: boolean;
1198
+ name?: string | undefined;
1199
+ camera?: {
1200
+ position: [number, number, number];
1201
+ target: [number, number, number];
1202
+ mode: "perspective" | "orthographic";
1203
+ fov?: number | undefined;
1204
+ zoom?: number | undefined;
1205
+ } | undefined;
882
1206
  } | {
883
1207
  object: "node";
884
1208
  parentId: string | null;
885
1209
  visible: boolean;
886
- id: `zone_${string}`;
887
- type: "zone";
888
- name: string;
889
- polygon: [number, number][];
890
- autoFromWalls: boolean;
891
- boundaryWallIds: `wall_${string}`[];
892
- color: string;
893
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;
894
1216
  camera?: {
895
1217
  position: [number, number, number];
896
1218
  target: [number, number, number];
@@ -903,17 +1225,12 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
903
1225
  parentId: string | null;
904
1226
  visible: boolean;
905
1227
  metadata: import("zod").JSONType;
906
- id: `slab_${string}`;
907
- type: "slab";
908
- polygon: [number, number][];
909
- holes: [number, number][][];
910
- holeMetadata: {
911
- source: "stair" | "elevator" | "manual";
912
- stairId?: string | undefined;
913
- elevatorId?: string | undefined;
914
- }[];
915
- elevation: number;
916
- autoFromWalls: boolean;
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";
917
1234
  name?: string | undefined;
918
1235
  camera?: {
919
1236
  position: [number, number, number];
@@ -922,35 +1239,41 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
922
1239
  fov?: number | undefined;
923
1240
  zoom?: number | undefined;
924
1241
  } | undefined;
925
- material?: {
926
- id?: string | undefined;
927
- preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
928
- properties?: {
929
- color: string;
930
- roughness: number;
931
- metalness: number;
932
- opacity: number;
933
- transparent: boolean;
934
- side: "front" | "back" | "double";
935
- } | undefined;
936
- texture?: {
937
- url: string;
938
- repeat?: [number, number] | undefined;
939
- scale?: number | undefined;
940
- } | 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;
941
1264
  } | undefined;
942
- materialPreset?: string | undefined;
943
- slots?: Record<string, string> | undefined;
944
1265
  } | {
945
1266
  object: "node";
946
1267
  parentId: string | null;
947
1268
  visible: boolean;
948
1269
  metadata: import("zod").JSONType;
949
- id: `roof_${string}`;
950
- type: "roof";
1270
+ id: `pipe-trap_${string}`;
1271
+ type: "pipe-trap";
951
1272
  position: [number, number, number];
952
1273
  rotation: number;
953
- children: `rseg_${string}`[];
1274
+ diameter: number;
1275
+ pipeMaterial: "pvc" | "abs" | "cast-iron";
1276
+ armLengthM: number;
954
1277
  name?: string | undefined;
955
1278
  camera?: {
956
1279
  position: [number, number, number];
@@ -959,124 +1282,103 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
959
1282
  fov?: number | undefined;
960
1283
  zoom?: number | undefined;
961
1284
  } | undefined;
962
- material?: {
963
- id?: string | undefined;
964
- preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
965
- properties?: {
966
- color: string;
967
- roughness: number;
968
- metalness: number;
969
- opacity: number;
970
- transparent: boolean;
971
- side: "front" | "back" | "double";
972
- } | undefined;
973
- texture?: {
974
- url: string;
975
- repeat?: [number, number] | undefined;
976
- scale?: number | undefined;
977
- } | undefined;
1285
+ } | {
1286
+ object: "node";
1287
+ parentId: string | null;
1288
+ visible: boolean;
1289
+ metadata: import("zod").JSONType;
1290
+ id: `site_${string}`;
1291
+ type: "site";
1292
+ polygon: {
1293
+ type: "polygon";
1294
+ points: [number, number][];
1295
+ };
1296
+ children: string[];
1297
+ name?: string | undefined;
1298
+ camera?: {
1299
+ position: [number, number, number];
1300
+ target: [number, number, number];
1301
+ mode: "perspective" | "orthographic";
1302
+ fov?: number | undefined;
1303
+ zoom?: number | undefined;
978
1304
  } | undefined;
979
- materialPreset?: string | undefined;
980
- topMaterial?: {
981
- id?: string | undefined;
982
- preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
983
- properties?: {
984
- color: string;
985
- roughness: number;
986
- metalness: number;
987
- opacity: number;
988
- transparent: boolean;
989
- side: "front" | "back" | "double";
990
- } | undefined;
991
- texture?: {
992
- url: string;
993
- repeat?: [number, number] | undefined;
994
- scale?: number | undefined;
995
- } | undefined;
1305
+ terrain?: {
1306
+ type: "heightfield";
1307
+ origin: [number, number];
1308
+ spacing: number;
1309
+ cols: number;
1310
+ rows: number;
1311
+ step: number;
1312
+ heights: string;
996
1313
  } | undefined;
997
- topMaterialPreset?: string | undefined;
998
- edgeMaterial?: {
999
- id?: string | undefined;
1000
- preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
1001
- properties?: {
1002
- color: string;
1003
- roughness: number;
1004
- metalness: number;
1005
- opacity: number;
1006
- transparent: boolean;
1007
- side: "front" | "back" | "double";
1008
- } | undefined;
1009
- texture?: {
1010
- url: string;
1011
- repeat?: [number, number] | undefined;
1012
- scale?: number | undefined;
1013
- } | undefined;
1314
+ } | {
1315
+ object: "node";
1316
+ parentId: string | null;
1317
+ visible: boolean;
1318
+ metadata: import("zod").JSONType;
1319
+ id: `building_${string}`;
1320
+ type: "building";
1321
+ children: (`elevator_${string}` | `level_${string}`)[];
1322
+ position: [number, number, number];
1323
+ rotation: [number, number, number];
1324
+ name?: string | undefined;
1325
+ camera?: {
1326
+ position: [number, number, number];
1327
+ target: [number, number, number];
1328
+ mode: "perspective" | "orthographic";
1329
+ fov?: number | undefined;
1330
+ zoom?: number | undefined;
1014
1331
  } | undefined;
1015
- edgeMaterialPreset?: string | undefined;
1016
- wallMaterial?: {
1017
- id?: string | undefined;
1018
- preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
1019
- properties?: {
1020
- color: string;
1021
- roughness: number;
1022
- metalness: number;
1023
- opacity: number;
1024
- transparent: boolean;
1025
- side: "front" | "back" | "double";
1026
- } | undefined;
1027
- texture?: {
1028
- url: string;
1029
- repeat?: [number, number] | undefined;
1030
- scale?: number | undefined;
1031
- } | undefined;
1332
+ } | {
1333
+ object: "node";
1334
+ parentId: string | null;
1335
+ visible: boolean;
1336
+ metadata: import("zod").JSONType;
1337
+ id: `level_${string}`;
1338
+ type: "level";
1339
+ children: (`item_${string}` | `ceiling_${string}` | `column_${string}` | `wall_${string}` | `fence_${string}` | `construction-dimension_${string}` | `structural-grid_${string}` | `zone_${string}` | `slab_${string}` | `roof_${string}` | `stair_${string}` | `scan_${string}` | `guide_${string}` | `measurement_${string}` | `spawn_${string}` | `shelf_${string}` | `duct-segment_${string}` | `duct-fitting_${string}` | `duct-terminal_${string}` | `hvac-equipment_${string}` | `lineset_${string}` | `liquid-line_${string}` | `pipe-segment_${string}` | `pipe-fitting_${string}` | `pipe-trap_${string}`)[];
1340
+ level: number;
1341
+ 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;
1032
1348
  } | undefined;
1033
- wallMaterialPreset?: string | undefined;
1349
+ height?: number | undefined;
1034
1350
  } | {
1035
1351
  object: "node";
1036
1352
  parentId: string | null;
1037
1353
  visible: boolean;
1038
1354
  metadata: import("zod").JSONType;
1039
- id: `rseg_${string}`;
1040
- type: "roof-segment";
1041
1355
  position: [number, number, number];
1042
1356
  rotation: number;
1043
- roofType: "flat" | "hip" | "gable" | "shed" | "gambrel" | "dutch" | "mansard";
1044
1357
  width: number;
1045
1358
  depth: number;
1046
- trim: {
1047
- left: number;
1048
- right: number;
1049
- front: number;
1050
- back: number;
1051
- frontLeft: number;
1052
- frontRight: number;
1053
- backLeft: number;
1054
- backRight: number;
1055
- frontLeftX: number;
1056
- frontLeftZ: number;
1057
- frontRightX: number;
1058
- frontRightZ: number;
1059
- backLeftX: number;
1060
- backLeftZ: number;
1061
- backRightX: number;
1062
- backRightZ: number;
1063
- };
1064
- wallHeight: number;
1065
- pitch: number;
1066
- wallThickness: number;
1067
- deckThickness: number;
1068
- overhang: number;
1069
- shingleThickness: number;
1070
- gambrelLowerWidthRatio: number;
1071
- gambrelLowerHeightRatio: number;
1072
- mansardSteepWidthRatio: number;
1073
- mansardSteepHeightRatio: number;
1074
- dutchHipWidthRatio: number;
1075
- dutchHipHeightRatio: number;
1076
- dutchWaistLengthRatio: number;
1077
- dutchGabletRake: number;
1078
- dutchTopRakeThickness: number;
1079
- children: string[];
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;
1080
1382
  name?: string | undefined;
1081
1383
  camera?: {
1082
1384
  position: [number, number, number];
@@ -1085,6 +1387,7 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1085
1387
  fov?: number | undefined;
1086
1388
  zoom?: number | undefined;
1087
1389
  } | undefined;
1390
+ supportSlabId?: string | undefined;
1088
1391
  material?: {
1089
1392
  id?: string | undefined;
1090
1393
  preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
@@ -1103,81 +1406,126 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1103
1406
  } | undefined;
1104
1407
  } | undefined;
1105
1408
  materialPreset?: string | undefined;
1106
- topMaterial?: {
1107
- id?: string | undefined;
1108
- preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
1109
- properties?: {
1110
- color: string;
1111
- roughness: number;
1112
- metalness: number;
1113
- opacity: number;
1114
- transparent: boolean;
1115
- side: "front" | "back" | "double";
1116
- } | undefined;
1117
- texture?: {
1118
- url: string;
1119
- repeat?: [number, number] | undefined;
1120
- scale?: number | undefined;
1121
- } | undefined;
1122
- } | undefined;
1123
- topMaterialPreset?: string | undefined;
1124
- edgeMaterial?: {
1125
- id?: string | undefined;
1126
- preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
1127
- properties?: {
1128
- color: string;
1129
- roughness: number;
1130
- metalness: number;
1131
- opacity: number;
1132
- transparent: boolean;
1133
- side: "front" | "back" | "double";
1134
- } | undefined;
1135
- texture?: {
1136
- url: string;
1137
- repeat?: [number, number] | undefined;
1138
- scale?: number | undefined;
1139
- } | undefined;
1140
- } | undefined;
1141
- edgeMaterialPreset?: string | undefined;
1142
- wallMaterial?: {
1143
- id?: string | undefined;
1144
- preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
1145
- properties?: {
1146
- color: string;
1147
- roughness: number;
1148
- metalness: number;
1149
- opacity: number;
1150
- transparent: boolean;
1151
- side: "front" | "back" | "double";
1152
- } | undefined;
1153
- texture?: {
1154
- url: string;
1155
- repeat?: [number, number] | undefined;
1156
- scale?: number | undefined;
1157
- } | 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;
1158
1496
  } | undefined;
1159
- wallMaterialPreset?: string | undefined;
1160
1497
  } | {
1161
1498
  object: "node";
1162
1499
  parentId: string | null;
1163
1500
  visible: boolean;
1164
1501
  metadata: import("zod").JSONType;
1165
- id: `shelf_${string}`;
1166
- type: "shelf";
1167
- children: `item_${string}`[];
1168
1502
  position: [number, number, number];
1169
- rotation: [number, number, number];
1503
+ rotation: number;
1170
1504
  width: number;
1171
1505
  depth: number;
1172
- thickness: number;
1173
- height: number;
1174
- style: "wall-shelf" | "bookshelf" | "open-rack" | "cubby";
1175
- rows: number;
1176
- columns: number;
1177
- withBack: boolean;
1178
- withSides: boolean;
1179
- withBottom: boolean;
1180
- bracketStyle: "minimal" | "industrial" | "hidden";
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";
1181
1529
  name?: string | undefined;
1182
1530
  camera?: {
1183
1531
  position: [number, number, number];
@@ -1186,6 +1534,7 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1186
1534
  fov?: number | undefined;
1187
1535
  zoom?: number | undefined;
1188
1536
  } | undefined;
1537
+ supportSlabId?: string | undefined;
1189
1538
  material?: {
1190
1539
  id?: string | undefined;
1191
1540
  preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
@@ -1205,34 +1554,136 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1205
1554
  } | undefined;
1206
1555
  materialPreset?: string | undefined;
1207
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;
1208
1641
  } | {
1209
1642
  object: "node";
1210
1643
  parentId: string | null;
1211
1644
  visible: boolean;
1212
1645
  metadata: import("zod").JSONType;
1213
- id: `stair_${string}`;
1214
- type: "stair";
1646
+ id: `rseg_${string}`;
1647
+ type: "roof-segment";
1215
1648
  position: [number, number, number];
1216
1649
  rotation: number;
1217
- stairType: "straight" | "spiral" | "curved";
1218
- fromLevelId: string | null;
1219
- toLevelId: string | null;
1220
- slabOpeningMode: "none" | "destination";
1221
- openingOffset: number;
1650
+ roofType: "flat" | "hip" | "gable" | "shed" | "gambrel" | "dutch" | "mansard";
1222
1651
  width: number;
1223
- totalRise: number;
1224
- stepCount: number;
1225
- thickness: number;
1226
- fillToFloor: boolean;
1227
- innerRadius: number;
1228
- sweepAngle: number;
1229
- topLandingMode: "none" | "integrated";
1230
- topLandingDepth: number;
1231
- showCenterColumn: boolean;
1232
- showStepSupports: boolean;
1233
- railingMode: "right" | "left" | "none" | "both";
1234
- railingHeight: number;
1235
- children: `sseg_${string}`[];
1652
+ depth: 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[];
1236
1687
  name?: string | undefined;
1237
1688
  camera?: {
1238
1689
  position: [number, number, number];
@@ -1259,43 +1710,7 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1259
1710
  } | undefined;
1260
1711
  } | undefined;
1261
1712
  materialPreset?: string | undefined;
1262
- railingMaterial?: {
1263
- id?: string | undefined;
1264
- preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
1265
- properties?: {
1266
- color: string;
1267
- roughness: number;
1268
- metalness: number;
1269
- opacity: number;
1270
- transparent: boolean;
1271
- side: "front" | "back" | "double";
1272
- } | undefined;
1273
- texture?: {
1274
- url: string;
1275
- repeat?: [number, number] | undefined;
1276
- scale?: number | undefined;
1277
- } | undefined;
1278
- } | undefined;
1279
- railingMaterialPreset?: string | undefined;
1280
- treadMaterial?: {
1281
- id?: string | undefined;
1282
- preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
1283
- properties?: {
1284
- color: string;
1285
- roughness: number;
1286
- metalness: number;
1287
- opacity: number;
1288
- transparent: boolean;
1289
- side: "front" | "back" | "double";
1290
- } | undefined;
1291
- texture?: {
1292
- url: string;
1293
- repeat?: [number, number] | undefined;
1294
- scale?: number | undefined;
1295
- } | undefined;
1296
- } | undefined;
1297
- treadMaterialPreset?: string | undefined;
1298
- sideMaterial?: {
1713
+ topMaterial?: {
1299
1714
  id?: string | undefined;
1300
1715
  preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
1301
1716
  properties?: {
@@ -1312,34 +1727,8 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1312
1727
  scale?: number | undefined;
1313
1728
  } | undefined;
1314
1729
  } | undefined;
1315
- sideMaterialPreset?: string | undefined;
1316
- slots?: Record<string, string> | undefined;
1317
- } | {
1318
- object: "node";
1319
- parentId: string | null;
1320
- visible: boolean;
1321
- metadata: import("zod").JSONType;
1322
- id: `sseg_${string}`;
1323
- type: "stair-segment";
1324
- position: [number, number, number];
1325
- rotation: number;
1326
- segmentType: "stair" | "landing";
1327
- width: number;
1328
- length: number;
1329
- height: number;
1330
- stepCount: number;
1331
- attachmentSide: "front" | "right" | "left";
1332
- fillToFloor: boolean;
1333
- thickness: number;
1334
- name?: string | undefined;
1335
- camera?: {
1336
- position: [number, number, number];
1337
- target: [number, number, number];
1338
- mode: "perspective" | "orthographic";
1339
- fov?: number | undefined;
1340
- zoom?: number | undefined;
1341
- } | undefined;
1342
- material?: {
1730
+ topMaterialPreset?: string | undefined;
1731
+ edgeMaterial?: {
1343
1732
  id?: string | undefined;
1344
1733
  preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
1345
1734
  properties?: {
@@ -1356,132 +1745,42 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1356
1745
  scale?: number | undefined;
1357
1746
  } | undefined;
1358
1747
  } | undefined;
1359
- materialPreset?: string | undefined;
1360
- } | {
1361
- object: "node";
1362
- parentId: string | null;
1363
- visible: boolean;
1364
- metadata: import("zod").JSONType;
1365
- id: `scan_${string}`;
1366
- type: "scan";
1367
- url: string;
1368
- position: [number, number, number];
1369
- rotation: [number, number, number];
1370
- scale: number;
1371
- opacity: number;
1372
- name?: string | undefined;
1373
- camera?: {
1374
- position: [number, number, number];
1375
- target: [number, number, number];
1376
- mode: "perspective" | "orthographic";
1377
- fov?: number | undefined;
1378
- zoom?: number | undefined;
1379
- } | undefined;
1380
- } | {
1381
- object: "node";
1382
- parentId: string | null;
1383
- visible: boolean;
1384
- metadata: import("zod").JSONType;
1385
- id: `measurement_${string}`;
1386
- type: "measurement";
1387
- measurement: {
1388
- kind: "distance";
1389
- points: [[number, number, number] | {
1390
- kind: "feature";
1391
- reference: {
1392
- nodeId: string;
1393
- featureId: string;
1394
- parameters?: Record<string, string | number | boolean> | undefined;
1395
- };
1396
- fallback: [number, number, number];
1397
- }, [number, number, number] | {
1398
- kind: "feature";
1399
- reference: {
1400
- nodeId: string;
1401
- featureId: string;
1402
- parameters?: Record<string, string | number | boolean> | undefined;
1403
- };
1404
- fallback: [number, number, number];
1405
- }];
1406
- } | {
1407
- kind: "angle";
1408
- points: [[number, number, number] | {
1409
- kind: "feature";
1410
- reference: {
1411
- nodeId: string;
1412
- featureId: string;
1413
- parameters?: Record<string, string | number | boolean> | undefined;
1414
- };
1415
- fallback: [number, number, number];
1416
- }, [number, number, number] | {
1417
- kind: "feature";
1418
- reference: {
1419
- nodeId: string;
1420
- featureId: string;
1421
- parameters?: Record<string, string | number | boolean> | undefined;
1422
- };
1423
- fallback: [number, number, number];
1424
- }, [number, number, number] | {
1425
- kind: "feature";
1426
- reference: {
1427
- nodeId: string;
1428
- featureId: string;
1429
- parameters?: Record<string, string | number | boolean> | undefined;
1430
- };
1431
- fallback: [number, number, number];
1432
- }];
1433
- } | {
1434
- kind: "area";
1435
- base: ([number, number, number] | {
1436
- kind: "feature";
1437
- reference: {
1438
- nodeId: string;
1439
- featureId: string;
1440
- parameters?: Record<string, string | number | boolean> | undefined;
1441
- };
1442
- fallback: [number, number, number];
1443
- })[];
1444
- } | {
1445
- kind: "perimeter";
1446
- base: ([number, number, number] | {
1447
- kind: "feature";
1448
- reference: {
1449
- nodeId: string;
1450
- featureId: string;
1451
- parameters?: Record<string, string | number | boolean> | undefined;
1452
- };
1453
- fallback: [number, number, number];
1454
- })[];
1455
- } | {
1456
- kind: "volume";
1457
- base: ([number, number, number] | {
1458
- kind: "feature";
1459
- reference: {
1460
- nodeId: string;
1461
- featureId: string;
1462
- parameters?: Record<string, string | number | boolean> | undefined;
1463
- };
1464
- fallback: [number, number, number];
1465
- })[];
1466
- extrusion: [number, number, number];
1467
- };
1468
- name?: string | undefined;
1469
- camera?: {
1470
- position: [number, number, number];
1471
- target: [number, number, number];
1472
- mode: "perspective" | "orthographic";
1473
- fov?: number | undefined;
1474
- zoom?: number | 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;
1475
1765
  } | undefined;
1766
+ wallMaterialPreset?: string | undefined;
1476
1767
  } | {
1477
1768
  object: "node";
1478
1769
  parentId: string | null;
1479
1770
  visible: boolean;
1480
1771
  metadata: import("zod").JSONType;
1481
- id: `spawn_${string}`;
1482
- type: "spawn";
1772
+ id: `sseg_${string}`;
1773
+ type: "stair-segment";
1483
1774
  position: [number, number, number];
1484
1775
  rotation: number;
1776
+ segmentType: "stair" | "landing";
1777
+ width: number;
1778
+ length: number;
1779
+ height: number;
1780
+ stepCount: number;
1781
+ attachmentSide: "front" | "right" | "left";
1782
+ fillToFloor: boolean;
1783
+ thickness: number;
1485
1784
  name?: string | undefined;
1486
1785
  camera?: {
1487
1786
  position: [number, number, number];
@@ -1490,6 +1789,24 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1490
1789
  fov?: number | undefined;
1491
1790
  zoom?: number | undefined;
1492
1791
  } | undefined;
1792
+ material?: {
1793
+ id?: string | undefined;
1794
+ preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
1795
+ properties?: {
1796
+ color: string;
1797
+ roughness: number;
1798
+ metalness: number;
1799
+ opacity: number;
1800
+ transparent: boolean;
1801
+ side: "front" | "back" | "double";
1802
+ } | undefined;
1803
+ texture?: {
1804
+ url: string;
1805
+ repeat?: [number, number] | undefined;
1806
+ scale?: number | undefined;
1807
+ } | undefined;
1808
+ } | undefined;
1809
+ materialPreset?: string | undefined;
1493
1810
  } | {
1494
1811
  object: "node";
1495
1812
  parentId: string | null;
@@ -1501,6 +1818,8 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1501
1818
  rotation: [number, number, number];
1502
1819
  width: number;
1503
1820
  height: number;
1821
+ constructionType: "framed" | "masonry";
1822
+ dimensionReference: "nominal" | "rough-opening" | "masonry-opening" | "finish-opening";
1504
1823
  openingKind: "window" | "opening";
1505
1824
  windowType: "sliding" | "fixed" | "casement" | "awning" | "hopper" | "single-hung" | "double-hung" | "bay" | "bow" | "louvered";
1506
1825
  operationState: number;
@@ -1552,6 +1871,13 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1552
1871
  wallId?: string | undefined;
1553
1872
  roofSegmentId?: string | undefined;
1554
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;
1555
1881
  } | {
1556
1882
  object: "node";
1557
1883
  parentId: string | null;
@@ -1563,6 +1889,8 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1563
1889
  rotation: [number, number, number];
1564
1890
  width: number;
1565
1891
  height: number;
1892
+ constructionType: "framed" | "masonry";
1893
+ dimensionReference: "nominal" | "rough-opening" | "masonry-opening" | "finish-opening";
1566
1894
  doorCategory: "interior" | "garage";
1567
1895
  doorType: "double" | "hinged" | "french" | "folding" | "pocket" | "barn" | "sliding" | "garage-sectional" | "garage-rollup" | "garage-tiltup";
1568
1896
  leafCount: 4 | 1 | 2 | 3;
@@ -1629,6 +1957,13 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
1629
1957
  wallId?: string | undefined;
1630
1958
  roofSegmentId?: string | undefined;
1631
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;
1632
1967
  } | {
1633
1968
  object: "node";
1634
1969
  parentId: string | null;
@@ -2227,219 +2562,9 @@ export declare function getNodesWithLiveStairOpeningInputs(nodes: Record<string,
2227
2562
  } | undefined;
2228
2563
  gutterId?: string | undefined;
2229
2564
  outletId?: string | undefined;
2230
- } | {
2231
- object: "node";
2232
- parentId: string | null;
2233
- visible: boolean;
2234
- metadata: import("zod").JSONType;
2235
- id: `duct-segment_${string}`;
2236
- type: "duct-segment";
2237
- path: [number, number, number][];
2238
- shape: "round" | "rect" | "oval";
2239
- diameter: number;
2240
- width: number;
2241
- height: number;
2242
- roll: number;
2243
- ductMaterial: "spiral" | "sheet-metal" | "flex" | "duct-board";
2244
- seamDetail: boolean;
2245
- insulated: boolean;
2246
- insulationR: number;
2247
- system: "supply" | "return";
2248
- name?: string | undefined;
2249
- camera?: {
2250
- position: [number, number, number];
2251
- target: [number, number, number];
2252
- mode: "perspective" | "orthographic";
2253
- fov?: number | undefined;
2254
- zoom?: number | undefined;
2255
- } | undefined;
2256
- slots?: Record<string, string> | undefined;
2257
- } | {
2258
- object: "node";
2259
- parentId: string | null;
2260
- visible: boolean;
2261
- metadata: import("zod").JSONType;
2262
- id: `duct-fitting_${string}`;
2263
- type: "duct-fitting";
2264
- position: [number, number, number];
2265
- rotation: [number, number, number];
2266
- fittingType: "elbow" | "tee" | "cross" | "reducer" | "transition";
2267
- shape: "round" | "rect" | "oval";
2268
- width: number;
2269
- height: number;
2270
- shape2: "round" | "rect" | "oval";
2271
- width2: number;
2272
- height2: number;
2273
- angle: number;
2274
- branchAngle: number;
2275
- diameter: number;
2276
- diameter2: number;
2277
- ductMaterial: "sheet-metal" | "flex" | "duct-board";
2278
- system: "supply" | "return";
2279
- name?: string | undefined;
2280
- camera?: {
2281
- position: [number, number, number];
2282
- target: [number, number, number];
2283
- mode: "perspective" | "orthographic";
2284
- fov?: number | undefined;
2285
- zoom?: number | undefined;
2286
- } | undefined;
2287
- slots?: Record<string, string> | undefined;
2288
- } | {
2289
- object: "node";
2290
- parentId: string | null;
2291
- visible: boolean;
2292
- metadata: import("zod").JSONType;
2293
- id: `duct-terminal_${string}`;
2294
- type: "duct-terminal";
2295
- position: [number, number, number];
2296
- rotation: number;
2297
- terminalType: "supply-register" | "diffuser" | "return-grille";
2298
- mount: "wall" | "ceiling" | "floor";
2299
- width: number;
2300
- depth: number;
2301
- collarShape: "round" | "rect" | "oval";
2302
- collarDiameter: number;
2303
- collarWidth: number;
2304
- collarHeight: number;
2305
- name?: string | undefined;
2306
- camera?: {
2307
- position: [number, number, number];
2308
- target: [number, number, number];
2309
- mode: "perspective" | "orthographic";
2310
- fov?: number | undefined;
2311
- zoom?: number | undefined;
2312
- } | undefined;
2313
- } | {
2314
- object: "node";
2315
- parentId: string | null;
2316
- visible: boolean;
2317
- metadata: import("zod").JSONType;
2318
- id: `hvac-equipment_${string}`;
2319
- type: "hvac-equipment";
2320
- position: [number, number, number];
2321
- rotation: number;
2322
- equipmentType: "furnace" | "air-handler" | "condenser";
2323
- width: number;
2324
- depth: number;
2325
- height: number;
2326
- supplyShape: "round" | "rect" | "oval";
2327
- returnShape: "round" | "rect" | "oval";
2328
- supplyDiameter: number;
2329
- returnDiameter: number;
2330
- supplyWidth: number;
2331
- supplyHeight: number;
2332
- returnWidth: number;
2333
- returnHeight: number;
2334
- name?: string | undefined;
2335
- camera?: {
2336
- position: [number, number, number];
2337
- target: [number, number, number];
2338
- mode: "perspective" | "orthographic";
2339
- fov?: number | undefined;
2340
- zoom?: number | undefined;
2341
- } | undefined;
2342
- } | {
2343
- object: "node";
2344
- parentId: string | null;
2345
- visible: boolean;
2346
- metadata: import("zod").JSONType;
2347
- id: `lineset_${string}`;
2348
- type: "lineset";
2349
- path: [number, number, number][];
2350
- suctionDiameter: number;
2351
- liquidDiameter: number;
2352
- insulated: boolean;
2353
- name?: string | undefined;
2354
- camera?: {
2355
- position: [number, number, number];
2356
- target: [number, number, number];
2357
- mode: "perspective" | "orthographic";
2358
- fov?: number | undefined;
2359
- zoom?: number | undefined;
2360
- } | undefined;
2361
- } | {
2362
- object: "node";
2363
- parentId: string | null;
2364
- visible: boolean;
2365
- metadata: import("zod").JSONType;
2366
- id: `liquid-line_${string}`;
2367
- type: "liquid-line";
2368
- path: [number, number, number][];
2369
- diameter: number;
2370
- name?: string | undefined;
2371
- camera?: {
2372
- position: [number, number, number];
2373
- target: [number, number, number];
2374
- mode: "perspective" | "orthographic";
2375
- fov?: number | undefined;
2376
- zoom?: number | undefined;
2377
- } | undefined;
2378
- } | {
2379
- object: "node";
2380
- parentId: string | null;
2381
- visible: boolean;
2382
- metadata: import("zod").JSONType;
2383
- id: `pipe-segment_${string}`;
2384
- type: "pipe-segment";
2385
- path: [number, number, number][];
2386
- diameter: number;
2387
- pipeMaterial: "pvc" | "abs" | "cast-iron";
2388
- system: "waste" | "vent";
2389
- name?: string | undefined;
2390
- camera?: {
2391
- position: [number, number, number];
2392
- target: [number, number, number];
2393
- mode: "perspective" | "orthographic";
2394
- fov?: number | undefined;
2395
- zoom?: number | undefined;
2396
- } | undefined;
2397
- } | {
2398
- object: "node";
2399
- parentId: string | null;
2400
- visible: boolean;
2401
- metadata: import("zod").JSONType;
2402
- id: `pipe-fitting_${string}`;
2403
- type: "pipe-fitting";
2404
- position: [number, number, number];
2405
- rotation: [number, number, number];
2406
- fittingType: "elbow" | "cross" | "wye" | "sanitary-tee";
2407
- angle: number;
2408
- diameter: number;
2409
- diameter2: number;
2410
- pipeMaterial: "pvc" | "abs" | "cast-iron";
2411
- system: "waste" | "vent";
2412
- name?: string | undefined;
2413
- camera?: {
2414
- position: [number, number, number];
2415
- target: [number, number, number];
2416
- mode: "perspective" | "orthographic";
2417
- fov?: number | undefined;
2418
- zoom?: number | undefined;
2419
- } | undefined;
2420
- } | {
2421
- object: "node";
2422
- parentId: string | null;
2423
- visible: boolean;
2424
- metadata: import("zod").JSONType;
2425
- id: `pipe-trap_${string}`;
2426
- type: "pipe-trap";
2427
- position: [number, number, number];
2428
- rotation: number;
2429
- diameter: number;
2430
- pipeMaterial: "pvc" | "abs" | "cast-iron";
2431
- armLengthM: number;
2432
- name?: string | undefined;
2433
- camera?: {
2434
- position: [number, number, number];
2435
- target: [number, number, number];
2436
- mode: "perspective" | "orthographic";
2437
- fov?: number | undefined;
2438
- zoom?: number | undefined;
2439
- } | undefined;
2440
2565
  }>;
2441
2566
  export declare function createSurfaceOpeningPreviewController(): {
2442
- previewSurfaceIds: Set<`bvent_${string}` | `elevator_${string}` | `item_${string}` | `ceiling_${string}` | `column_${string}` | `fence_${string}` | `guide_${string}` | `site_${string}` | `building_${string}` | `level_${string}` | `wall_${string}` | `door_${string}` | `window_${string}` | `zone_${string}` | `slab_${string}` | `roof_${string}` | `rseg_${string}` | `stair_${string}` | `sseg_${string}` | `scan_${string}` | `measurement_${string}` | `spawn_${string}` | `shelf_${string}` | `cabinet_${string}` | `cabinet-module_${string}` | `rvent_${string}` | `tvent_${string}` | `cupola_${string}` | `eyebrow-vent_${string}` | `gutter_${string}` | `chimney_${string}` | `solarpanel_${string}` | `skylight_${string}` | `dormer_${string}` | `downspout_${string}` | `duct-segment_${string}` | `duct-fitting_${string}` | `duct-terminal_${string}` | `hvac-equipment_${string}` | `lineset_${string}` | `liquid-line_${string}` | `pipe-segment_${string}` | `pipe-fitting_${string}` | `pipe-trap_${string}`>;
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}`>;
2443
2568
  apply(updates: SurfaceOpeningUpdate[]): void;
2444
2569
  clear(): void;
2445
2570
  };