@pascal-app/core 1.0.6 → 1.1.0

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 (1003) hide show
  1. package/dist/agent-operations/__fixtures__/add-object-cases.d.ts +31 -0
  2. package/dist/agent-operations/__fixtures__/add-object-cases.d.ts.map +1 -1
  3. package/dist/agent-operations/__fixtures__/build-room-cases.d.ts.map +1 -1
  4. package/dist/agent-operations/__fixtures__/build-room-cases.js +27 -0
  5. package/dist/agent-operations/__fixtures__/cases.d.ts.map +1 -1
  6. package/dist/agent-operations/__fixtures__/cases.js +19 -11
  7. package/dist/agent-operations/__fixtures__/design-brief-cases.d.ts +25 -2
  8. package/dist/agent-operations/__fixtures__/design-brief-cases.d.ts.map +1 -1
  9. package/dist/agent-operations/__fixtures__/design-brief-cases.js +509 -66
  10. package/dist/agent-operations/__fixtures__/dressing-scenes.d.ts +30 -0
  11. package/dist/agent-operations/__fixtures__/dressing-scenes.d.ts.map +1 -0
  12. package/dist/agent-operations/__fixtures__/dressing-scenes.js +82 -0
  13. package/dist/agent-operations/__fixtures__/native-materials.d.ts +411 -9
  14. package/dist/agent-operations/__fixtures__/native-materials.d.ts.map +1 -1
  15. package/dist/agent-operations/__fixtures__/notation-cases.d.ts.map +1 -1
  16. package/dist/agent-operations/__fixtures__/notation-cases.js +14 -0
  17. package/dist/agent-operations/__fixtures__/roof-bearing-cases.d.ts +13804 -10600
  18. package/dist/agent-operations/__fixtures__/roof-bearing-cases.d.ts.map +1 -1
  19. package/dist/agent-operations/__fixtures__/room-cases.d.ts +1 -0
  20. package/dist/agent-operations/__fixtures__/room-cases.d.ts.map +1 -1
  21. package/dist/agent-operations/__fixtures__/room-cases.js +57 -1
  22. package/dist/agent-operations/__fixtures__/room-check-scenes.d.ts +51 -0
  23. package/dist/agent-operations/__fixtures__/room-check-scenes.d.ts.map +1 -0
  24. package/dist/agent-operations/__fixtures__/room-check-scenes.js +121 -0
  25. package/dist/agent-operations/__fixtures__/scene-check-cases.d.ts.map +1 -1
  26. package/dist/agent-operations/__fixtures__/scene-check-cases.js +152 -18
  27. package/dist/agent-operations/__fixtures__/search-assets-cases.d.ts.map +1 -1
  28. package/dist/agent-operations/__fixtures__/search-assets-cases.js +91 -0
  29. package/dist/agent-operations/__fixtures__/site-cases.d.ts +40 -1
  30. package/dist/agent-operations/__fixtures__/site-cases.d.ts.map +1 -1
  31. package/dist/agent-operations/__fixtures__/structure-cases.d.ts +3 -0
  32. package/dist/agent-operations/__fixtures__/structure-cases.d.ts.map +1 -1
  33. package/dist/agent-operations/__fixtures__/structure-cases.js +199 -18
  34. package/dist/agent-operations/__fixtures__/unit-cases.d.ts +6 -0
  35. package/dist/agent-operations/__fixtures__/unit-cases.d.ts.map +1 -0
  36. package/dist/agent-operations/__fixtures__/unit-cases.js +266 -0
  37. package/dist/agent-operations/__fixtures__/verify-scene-cases.d.ts +37 -1
  38. package/dist/agent-operations/__fixtures__/verify-scene-cases.d.ts.map +1 -1
  39. package/dist/agent-operations/add-column.d.ts.map +1 -1
  40. package/dist/agent-operations/add-column.js +32 -3
  41. package/dist/agent-operations/add-fence.d.ts.map +1 -1
  42. package/dist/agent-operations/add-fence.js +2 -1
  43. package/dist/agent-operations/add-level.d.ts.map +1 -1
  44. package/dist/agent-operations/add-level.js +4 -4
  45. package/dist/agent-operations/add-object.d.ts +32 -6
  46. package/dist/agent-operations/add-object.d.ts.map +1 -1
  47. package/dist/agent-operations/add-object.js +59 -12
  48. package/dist/agent-operations/add-wall.d.ts +3 -8
  49. package/dist/agent-operations/add-wall.d.ts.map +1 -1
  50. package/dist/agent-operations/add-wall.js +31 -8
  51. package/dist/agent-operations/apply-changes.d.ts.map +1 -1
  52. package/dist/agent-operations/apply-changes.js +2 -1
  53. package/dist/agent-operations/asset-catalog.d.ts +63 -0
  54. package/dist/agent-operations/asset-catalog.d.ts.map +1 -0
  55. package/dist/agent-operations/asset-catalog.js +182 -0
  56. package/dist/agent-operations/asset-views.d.ts +4 -2
  57. package/dist/agent-operations/asset-views.d.ts.map +1 -1
  58. package/dist/agent-operations/asset-views.js +1 -3
  59. package/dist/agent-operations/author-scene-checks.d.ts +38 -0
  60. package/dist/agent-operations/author-scene-checks.d.ts.map +1 -0
  61. package/dist/agent-operations/author-scene-checks.js +266 -0
  62. package/dist/agent-operations/author-scene.d.ts +54 -20
  63. package/dist/agent-operations/author-scene.d.ts.map +1 -1
  64. package/dist/agent-operations/author-scene.js +1163 -196
  65. package/dist/agent-operations/authored-scene-merge.d.ts.map +1 -1
  66. package/dist/agent-operations/authored-scene-merge.js +61 -3
  67. package/dist/agent-operations/batch.d.ts +1 -1
  68. package/dist/agent-operations/batch.d.ts.map +1 -1
  69. package/dist/agent-operations/batch.js +38 -39
  70. package/dist/agent-operations/ceiling-object-observations.d.ts.map +1 -1
  71. package/dist/agent-operations/ceiling-object-observations.js +5 -4
  72. package/dist/agent-operations/circulation-geometry.d.ts +14 -0
  73. package/dist/agent-operations/circulation-geometry.d.ts.map +1 -0
  74. package/dist/agent-operations/circulation-geometry.js +151 -0
  75. package/dist/agent-operations/circulation-graph.d.ts +72 -0
  76. package/dist/agent-operations/circulation-graph.d.ts.map +1 -0
  77. package/dist/agent-operations/circulation-graph.js +713 -0
  78. package/dist/agent-operations/circulation-non-spaces.d.ts +10 -0
  79. package/dist/agent-operations/circulation-non-spaces.d.ts.map +1 -0
  80. package/dist/agent-operations/circulation-non-spaces.js +88 -0
  81. package/dist/agent-operations/circulation-spaces.d.ts +5881 -0
  82. package/dist/agent-operations/circulation-spaces.d.ts.map +1 -0
  83. package/dist/agent-operations/circulation-spaces.js +368 -0
  84. package/dist/agent-operations/collections.d.ts.map +1 -1
  85. package/dist/agent-operations/collections.js +9 -7
  86. package/dist/agent-operations/corner-window.d.ts.map +1 -1
  87. package/dist/agent-operations/corner-window.js +2 -4
  88. package/dist/agent-operations/create-roof.d.ts.map +1 -1
  89. package/dist/agent-operations/create-roof.js +5 -7
  90. package/dist/agent-operations/create-room.d.ts +4 -1
  91. package/dist/agent-operations/create-room.d.ts.map +1 -1
  92. package/dist/agent-operations/create-room.js +7 -4
  93. package/dist/agent-operations/create-stair.js +2 -2
  94. package/dist/agent-operations/design-brief.d.ts +13 -7
  95. package/dist/agent-operations/design-brief.d.ts.map +1 -1
  96. package/dist/agent-operations/design-brief.js +172 -92
  97. package/dist/agent-operations/door-clearance.d.ts +68 -8
  98. package/dist/agent-operations/door-clearance.d.ts.map +1 -1
  99. package/dist/agent-operations/door-clearance.js +127 -20
  100. package/dist/agent-operations/dress-targets.d.ts +23 -0
  101. package/dist/agent-operations/dress-targets.d.ts.map +1 -0
  102. package/dist/agent-operations/dress-targets.js +34 -0
  103. package/dist/agent-operations/duplicate-node.d.ts +14 -0
  104. package/dist/agent-operations/duplicate-node.d.ts.map +1 -0
  105. package/dist/agent-operations/duplicate-node.js +173 -0
  106. package/dist/agent-operations/find-by-type.d.ts.map +1 -1
  107. package/dist/agent-operations/find-by-type.js +3 -0
  108. package/dist/agent-operations/furnish-room.d.ts +2 -0
  109. package/dist/agent-operations/furnish-room.d.ts.map +1 -1
  110. package/dist/agent-operations/furnish-room.js +15 -4
  111. package/dist/agent-operations/furniture-kind.d.ts +28 -1
  112. package/dist/agent-operations/furniture-kind.d.ts.map +1 -1
  113. package/dist/agent-operations/furniture-kind.js +105 -6
  114. package/dist/agent-operations/ground-reader.d.ts +10 -0
  115. package/dist/agent-operations/ground-reader.d.ts.map +1 -0
  116. package/dist/agent-operations/ground-reader.js +25 -0
  117. package/dist/agent-operations/index.d.ts +118 -12
  118. package/dist/agent-operations/index.d.ts.map +1 -1
  119. package/dist/agent-operations/index.js +26 -1
  120. package/dist/agent-operations/item-solids.d.ts +39 -0
  121. package/dist/agent-operations/item-solids.d.ts.map +1 -0
  122. package/dist/agent-operations/item-solids.js +128 -0
  123. package/dist/agent-operations/layout-clearance.d.ts +91 -11
  124. package/dist/agent-operations/layout-clearance.d.ts.map +1 -1
  125. package/dist/agent-operations/layout-clearance.js +280 -73
  126. package/dist/agent-operations/level-height-fill.d.ts.map +1 -1
  127. package/dist/agent-operations/level-height-fill.js +7 -1
  128. package/dist/agent-operations/level-reads.d.ts +5 -0
  129. package/dist/agent-operations/level-reads.d.ts.map +1 -1
  130. package/dist/agent-operations/level-reads.js +39 -3
  131. package/dist/agent-operations/list-levels.d.ts.map +1 -1
  132. package/dist/agent-operations/list-levels.js +2 -4
  133. package/dist/agent-operations/move-node.d.ts +12 -0
  134. package/dist/agent-operations/move-node.d.ts.map +1 -0
  135. package/dist/agent-operations/move-node.js +28 -0
  136. package/dist/agent-operations/move-plan.d.ts +28 -0
  137. package/dist/agent-operations/move-plan.d.ts.map +1 -0
  138. package/dist/agent-operations/move-plan.js +259 -0
  139. package/dist/agent-operations/node-patch.d.ts.map +1 -1
  140. package/dist/agent-operations/node-patch.js +15 -0
  141. package/dist/agent-operations/paint.d.ts +3 -1
  142. package/dist/agent-operations/paint.d.ts.map +1 -1
  143. package/dist/agent-operations/paint.js +14 -1
  144. package/dist/agent-operations/photo-elevation.d.ts.map +1 -1
  145. package/dist/agent-operations/photo-elevation.js +2 -1
  146. package/dist/agent-operations/place-in-room.d.ts.map +1 -1
  147. package/dist/agent-operations/place-in-room.js +1 -0
  148. package/dist/agent-operations/place-items.d.ts.map +1 -1
  149. package/dist/agent-operations/place-items.js +3 -4
  150. package/dist/agent-operations/plan-clearance.d.ts +28 -0
  151. package/dist/agent-operations/plan-clearance.d.ts.map +1 -0
  152. package/dist/agent-operations/plan-clearance.js +47 -0
  153. package/dist/agent-operations/plan-geometry.d.ts +2 -0
  154. package/dist/agent-operations/plan-geometry.d.ts.map +1 -1
  155. package/dist/agent-operations/plan-geometry.js +10 -0
  156. package/dist/agent-operations/project-files.d.ts +10 -0
  157. package/dist/agent-operations/project-files.d.ts.map +1 -1
  158. package/dist/agent-operations/reachability.d.ts +41 -0
  159. package/dist/agent-operations/reachability.d.ts.map +1 -0
  160. package/dist/agent-operations/reachability.js +199 -0
  161. package/dist/agent-operations/room-checks.d.ts +60 -0
  162. package/dist/agent-operations/room-checks.d.ts.map +1 -0
  163. package/dist/agent-operations/room-checks.js +226 -0
  164. package/dist/agent-operations/room-faces.d.ts +30 -0
  165. package/dist/agent-operations/room-faces.d.ts.map +1 -0
  166. package/dist/agent-operations/room-faces.js +31 -0
  167. package/dist/agent-operations/room-findings.d.ts +5 -2
  168. package/dist/agent-operations/room-findings.d.ts.map +1 -1
  169. package/dist/agent-operations/room-findings.js +30 -0
  170. package/dist/agent-operations/room-finishes.d.ts +87 -0
  171. package/dist/agent-operations/room-finishes.d.ts.map +1 -0
  172. package/dist/agent-operations/room-finishes.js +193 -0
  173. package/dist/agent-operations/room-floor-script.d.ts +3 -3
  174. package/dist/agent-operations/room-floor-script.js +3 -3
  175. package/dist/agent-operations/room-readings.d.ts +90 -0
  176. package/dist/agent-operations/room-readings.d.ts.map +1 -0
  177. package/dist/agent-operations/room-readings.js +369 -0
  178. package/dist/agent-operations/room-tile.d.ts +15 -0
  179. package/dist/agent-operations/room-tile.d.ts.map +1 -0
  180. package/dist/agent-operations/room-tile.js +30 -0
  181. package/dist/agent-operations/room-wet.d.ts +55 -0
  182. package/dist/agent-operations/room-wet.d.ts.map +1 -0
  183. package/dist/agent-operations/room-wet.js +203 -0
  184. package/dist/agent-operations/scene-check-policy.d.ts +5 -0
  185. package/dist/agent-operations/scene-check-policy.d.ts.map +1 -0
  186. package/dist/agent-operations/scene-check-policy.js +24 -0
  187. package/dist/agent-operations/scene-checkpoint.d.ts +10 -0
  188. package/dist/agent-operations/scene-checkpoint.d.ts.map +1 -1
  189. package/dist/agent-operations/scene-checkpoint.js +31 -0
  190. package/dist/agent-operations/scene-issue-groups.d.ts +17 -0
  191. package/dist/agent-operations/scene-issue-groups.d.ts.map +1 -0
  192. package/dist/agent-operations/scene-issue-groups.js +71 -0
  193. package/dist/agent-operations/scene-materials.d.ts +23 -0
  194. package/dist/agent-operations/scene-materials.d.ts.map +1 -1
  195. package/dist/agent-operations/scene-materials.js +41 -0
  196. package/dist/agent-operations/scene-queries.d.ts +2525 -1723
  197. package/dist/agent-operations/scene-queries.d.ts.map +1 -1
  198. package/dist/agent-operations/scene-queries.js +3 -3
  199. package/dist/agent-operations/scene-review.d.ts.map +1 -1
  200. package/dist/agent-operations/scene-review.js +3 -2
  201. package/dist/agent-operations/scene-view.d.ts.map +1 -1
  202. package/dist/agent-operations/scene-view.js +91 -21
  203. package/dist/agent-operations/search-assets.d.ts +10 -6
  204. package/dist/agent-operations/search-assets.d.ts.map +1 -1
  205. package/dist/agent-operations/search-assets.js +37 -22
  206. package/dist/agent-operations/set-checkpoint.d.ts.map +1 -1
  207. package/dist/agent-operations/set-checkpoint.js +1 -0
  208. package/dist/agent-operations/set-ground-level.d.ts +1 -1
  209. package/dist/agent-operations/set-ground-level.d.ts.map +1 -1
  210. package/dist/agent-operations/set-ground-level.js +3 -14
  211. package/dist/agent-operations/site.js +3 -2
  212. package/dist/agent-operations/slab-surface-script.d.ts +25 -0
  213. package/dist/agent-operations/slab-surface-script.d.ts.map +1 -0
  214. package/dist/agent-operations/slab-surface-script.js +60 -0
  215. package/dist/agent-operations/stair-plan-footprint.d.ts +9 -0
  216. package/dist/agent-operations/stair-plan-footprint.d.ts.map +1 -0
  217. package/dist/agent-operations/stair-plan-footprint.js +50 -0
  218. package/dist/agent-operations/types.d.ts +10 -5
  219. package/dist/agent-operations/types.d.ts.map +1 -1
  220. package/dist/agent-operations/units.d.ts +26 -0
  221. package/dist/agent-operations/units.d.ts.map +1 -0
  222. package/dist/agent-operations/units.js +110 -0
  223. package/dist/agent-operations/unreachable-rooms-check.d.ts +17 -0
  224. package/dist/agent-operations/unreachable-rooms-check.d.ts.map +1 -0
  225. package/dist/agent-operations/unreachable-rooms-check.js +35 -0
  226. package/dist/agent-operations/usage-checks.d.ts +2 -0
  227. package/dist/agent-operations/usage-checks.d.ts.map +1 -0
  228. package/dist/agent-operations/usage-checks.js +12 -0
  229. package/dist/agent-operations/verify-scene.d.ts +8 -11
  230. package/dist/agent-operations/verify-scene.d.ts.map +1 -1
  231. package/dist/agent-operations/verify-scene.js +59 -13
  232. package/dist/agent-operations/wall-face-defaults.d.ts +44 -0
  233. package/dist/agent-operations/wall-face-defaults.d.ts.map +1 -0
  234. package/dist/agent-operations/wall-face-defaults.js +229 -0
  235. package/dist/agent-operations/wall-joins.d.ts +119 -0
  236. package/dist/agent-operations/wall-joins.d.ts.map +1 -0
  237. package/dist/agent-operations/wall-joins.js +308 -0
  238. package/dist/agent-operations/wall-object-observations.d.ts.map +1 -1
  239. package/dist/agent-operations/wall-object-observations.js +5 -7
  240. package/dist/agent-operations/wall-skirting.d.ts.map +1 -1
  241. package/dist/agent-operations/wall-skirting.js +2 -0
  242. package/dist/agent-operations/wall-type.d.ts +49 -0
  243. package/dist/agent-operations/wall-type.d.ts.map +1 -0
  244. package/dist/agent-operations/wall-type.js +31 -0
  245. package/dist/agent-operations/zone-coverage.d.ts +85 -0
  246. package/dist/agent-operations/zone-coverage.d.ts.map +1 -0
  247. package/dist/agent-operations/zone-coverage.js +208 -0
  248. package/dist/agent-tools/add-object.d.ts +31 -0
  249. package/dist/agent-tools/add-object.d.ts.map +1 -1
  250. package/dist/agent-tools/add-object.js +44 -7
  251. package/dist/agent-tools/assets.d.ts +4 -0
  252. package/dist/agent-tools/assets.d.ts.map +1 -1
  253. package/dist/agent-tools/assets.js +11 -1
  254. package/dist/agent-tools/author-scene.d.ts +810 -15
  255. package/dist/agent-tools/author-scene.d.ts.map +1 -1
  256. package/dist/agent-tools/author-scene.js +275 -34
  257. package/dist/agent-tools/batch.d.ts +1 -1
  258. package/dist/agent-tools/batch.d.ts.map +1 -1
  259. package/dist/agent-tools/batch.js +5 -1
  260. package/dist/agent-tools/checkpoints.js +1 -1
  261. package/dist/agent-tools/columns.d.ts +14 -0
  262. package/dist/agent-tools/columns.d.ts.map +1 -1
  263. package/dist/agent-tools/columns.js +14 -2
  264. package/dist/agent-tools/contract.d.ts +10 -0
  265. package/dist/agent-tools/contract.d.ts.map +1 -1
  266. package/dist/agent-tools/contract.js +5 -1
  267. package/dist/agent-tools/corner-window.d.ts +1 -0
  268. package/dist/agent-tools/corner-window.d.ts.map +1 -1
  269. package/dist/agent-tools/corner-window.js +1 -1
  270. package/dist/agent-tools/create-room.d.ts +85 -0
  271. package/dist/agent-tools/create-room.d.ts.map +1 -1
  272. package/dist/agent-tools/create-room.js +8 -1
  273. package/dist/agent-tools/design-brief.d.ts +513 -7
  274. package/dist/agent-tools/design-brief.d.ts.map +1 -1
  275. package/dist/agent-tools/design-brief.js +192 -14
  276. package/dist/agent-tools/designs.js +1 -1
  277. package/dist/agent-tools/find-by-type.js +1 -1
  278. package/dist/agent-tools/index.d.ts +658 -10
  279. package/dist/agent-tools/index.d.ts.map +1 -1
  280. package/dist/agent-tools/index.js +9 -1
  281. package/dist/agent-tools/levels.js +4 -4
  282. package/dist/agent-tools/move-duplicate.d.ts +65 -0
  283. package/dist/agent-tools/move-duplicate.d.ts.map +1 -0
  284. package/dist/agent-tools/move-duplicate.js +68 -0
  285. package/dist/agent-tools/paint.d.ts +6 -0
  286. package/dist/agent-tools/paint.d.ts.map +1 -1
  287. package/dist/agent-tools/paint.js +7 -3
  288. package/dist/agent-tools/photo-elevation.js +1 -1
  289. package/dist/agent-tools/project-files.d.ts +2 -2
  290. package/dist/agent-tools/project-files.d.ts.map +1 -1
  291. package/dist/agent-tools/project-files.js +1 -1
  292. package/dist/agent-tools/refusal.d.ts +9 -1
  293. package/dist/agent-tools/refusal.d.ts.map +1 -1
  294. package/dist/agent-tools/refusal.js +5 -1
  295. package/dist/agent-tools/roofs.js +1 -1
  296. package/dist/agent-tools/room-structure.d.ts +60 -0
  297. package/dist/agent-tools/room-structure.d.ts.map +1 -1
  298. package/dist/agent-tools/room-structure.js +20 -1
  299. package/dist/agent-tools/search-materials.d.ts +1 -0
  300. package/dist/agent-tools/search-materials.d.ts.map +1 -1
  301. package/dist/agent-tools/site.js +1 -1
  302. package/dist/agent-tools/stairs.js +1 -1
  303. package/dist/agent-tools/units.d.ts +84 -0
  304. package/dist/agent-tools/units.d.ts.map +1 -0
  305. package/dist/agent-tools/units.js +54 -0
  306. package/dist/agent-tools/verify-scene-usage.d.ts +44 -0
  307. package/dist/agent-tools/verify-scene-usage.d.ts.map +1 -0
  308. package/dist/agent-tools/verify-scene-usage.js +146 -0
  309. package/dist/agent-tools/verify-scene.d.ts +12 -1
  310. package/dist/agent-tools/verify-scene.d.ts.map +1 -1
  311. package/dist/agent-tools/verify-scene.js +183 -3
  312. package/dist/agent-tools/view-scene.d.ts +3 -0
  313. package/dist/agent-tools/view-scene.d.ts.map +1 -1
  314. package/dist/agent-tools/view-scene.js +4 -1
  315. package/dist/agent-tools/wall-openings.d.ts +121 -2
  316. package/dist/agent-tools/wall-openings.d.ts.map +1 -1
  317. package/dist/agent-tools/wall-openings.js +123 -18
  318. package/dist/agent-tools/walls.d.ts +30 -0
  319. package/dist/agent-tools/walls.d.ts.map +1 -1
  320. package/dist/agent-tools/walls.js +54 -2
  321. package/dist/building/__fixtures__/wall-opening-cases.d.ts +181 -35
  322. package/dist/building/__fixtures__/wall-opening-cases.d.ts.map +1 -1
  323. package/dist/building/__fixtures__/wall-opening-cases.js +13 -0
  324. package/dist/building/code-profile.d.ts +231 -0
  325. package/dist/building/code-profile.d.ts.map +1 -0
  326. package/dist/building/code-profile.js +208 -0
  327. package/dist/building/corner-window.d.ts +2 -2
  328. package/dist/building/corner-window.d.ts.map +1 -1
  329. package/dist/building/corner-window.js +11 -2
  330. package/dist/building/door-types.d.ts +1 -0
  331. package/dist/building/door-types.d.ts.map +1 -1
  332. package/dist/building/door-types.js +2 -0
  333. package/dist/building/floor-item-fit.d.ts.map +1 -1
  334. package/dist/building/floor-item-fit.js +2 -4
  335. package/dist/building/ground-level.d.ts +1 -3
  336. package/dist/building/ground-level.d.ts.map +1 -1
  337. package/dist/building/ground-level.js +3 -5
  338. package/dist/building/index.d.ts +2 -0
  339. package/dist/building/index.d.ts.map +1 -1
  340. package/dist/building/index.js +2 -0
  341. package/dist/building/level-duplication.d.ts +4667 -3065
  342. package/dist/building/level-duplication.d.ts.map +1 -1
  343. package/dist/building/level-insertion.d.ts +1 -1
  344. package/dist/building/level-wall-copy.d.ts +24 -0
  345. package/dist/building/level-wall-copy.d.ts.map +1 -0
  346. package/dist/building/level-wall-copy.js +53 -0
  347. package/dist/building/merge-windows.d.ts.map +1 -1
  348. package/dist/building/merge-windows.js +5 -3
  349. package/dist/building/opening-style-presets.d.ts +2 -0
  350. package/dist/building/opening-style-presets.d.ts.map +1 -1
  351. package/dist/building/opening-style-presets.js +26 -5
  352. package/dist/building/room-use.d.ts +26 -0
  353. package/dist/building/room-use.d.ts.map +1 -0
  354. package/dist/building/room-use.js +102 -0
  355. package/dist/building/wall-openings.d.ts +134 -12
  356. package/dist/building/wall-openings.d.ts.map +1 -1
  357. package/dist/building/wall-openings.js +182 -41
  358. package/dist/building/window-types.d.ts +1 -0
  359. package/dist/building/window-types.d.ts.map +1 -1
  360. package/dist/building/window-types.js +3 -0
  361. package/dist/coherence/__fixtures__/enclosure-scenes.d.ts +84 -0
  362. package/dist/coherence/__fixtures__/enclosure-scenes.d.ts.map +1 -0
  363. package/dist/coherence/__fixtures__/enclosure-scenes.js +44 -0
  364. package/dist/commands/structure/attached-walls.d.ts +16 -0
  365. package/dist/commands/structure/attached-walls.d.ts.map +1 -0
  366. package/dist/commands/structure/attached-walls.js +53 -0
  367. package/dist/commands/structure/index.d.ts +3 -0
  368. package/dist/commands/structure/index.d.ts.map +1 -1
  369. package/dist/commands/structure/index.js +3 -0
  370. package/dist/commands/structure/move-separators.d.ts +62 -0
  371. package/dist/commands/structure/move-separators.d.ts.map +1 -0
  372. package/dist/commands/structure/move-separators.js +346 -0
  373. package/dist/commands/structure/set-floor-foundation.d.ts +5 -0
  374. package/dist/commands/structure/set-floor-foundation.d.ts.map +1 -1
  375. package/dist/commands/structure/set-wall-geometry.d.ts.map +1 -1
  376. package/dist/commands/structure/set-wall-geometry.js +44 -11
  377. package/dist/commands/structure/set-zone-intent.d.ts +26 -0
  378. package/dist/commands/structure/set-zone-intent.d.ts.map +1 -1
  379. package/dist/commands/structure/set-zone-intent.js +107 -2
  380. package/dist/commands/structure/shared.d.ts +889 -88
  381. package/dist/commands/structure/shared.d.ts.map +1 -1
  382. package/dist/commands/structure/wall-overlap.d.ts +45 -0
  383. package/dist/commands/structure/wall-overlap.d.ts.map +1 -0
  384. package/dist/commands/structure/wall-overlap.js +289 -0
  385. package/dist/commands/structure/zone-wall-merge.d.ts +2897 -1938
  386. package/dist/commands/structure/zone-wall-merge.d.ts.map +1 -1
  387. package/dist/contracts/reference-discovery.d.ts +2 -2
  388. package/dist/contracts/reference-discovery.d.ts.map +1 -1
  389. package/dist/contracts/reference-discovery.js +5 -3
  390. package/dist/contracts/reference-inventory.d.ts.map +1 -1
  391. package/dist/contracts/reference-inventory.js +75 -25
  392. package/dist/events/bus.d.ts +15 -2
  393. package/dist/events/bus.d.ts.map +1 -1
  394. package/dist/hooks/spatial-grid/built-in-floor-placed.d.ts +40 -0
  395. package/dist/hooks/spatial-grid/built-in-floor-placed.d.ts.map +1 -0
  396. package/dist/hooks/spatial-grid/built-in-floor-placed.js +220 -0
  397. package/dist/hooks/spatial-grid/floor-placed-elevation.d.ts.map +1 -1
  398. package/dist/hooks/spatial-grid/floor-placed-elevation.js +13 -7
  399. package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts +62 -2
  400. package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts.map +1 -1
  401. package/dist/hooks/spatial-grid/spatial-grid-manager.js +207 -36
  402. package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts +2915 -2114
  403. package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts.map +1 -1
  404. package/dist/hooks/spatial-grid/spatial-grid-sync.js +32 -5
  405. package/dist/hooks/spatial-grid/support-host-patch.js +10 -10
  406. package/dist/i18n/format.d.ts +41 -0
  407. package/dist/i18n/format.d.ts.map +1 -0
  408. package/dist/i18n/format.js +124 -0
  409. package/dist/i18n/index.d.ts +5 -0
  410. package/dist/i18n/index.d.ts.map +1 -0
  411. package/dist/i18n/index.js +3 -0
  412. package/dist/i18n/registry.d.ts +78 -0
  413. package/dist/i18n/registry.d.ts.map +1 -0
  414. package/dist/i18n/registry.js +252 -0
  415. package/dist/i18n/use-translate.d.ts +16 -0
  416. package/dist/i18n/use-translate.d.ts.map +1 -0
  417. package/dist/i18n/use-translate.js +23 -0
  418. package/dist/index.d.ts +43 -20
  419. package/dist/index.d.ts.map +1 -1
  420. package/dist/index.js +42 -19
  421. package/dist/lib/__fixtures__/mezzanine.d.ts +10900 -8225
  422. package/dist/lib/__fixtures__/mezzanine.d.ts.map +1 -1
  423. package/dist/lib/absorb-wall-separators.d.ts +1629 -828
  424. package/dist/lib/absorb-wall-separators.d.ts.map +1 -1
  425. package/dist/lib/beam.d.ts +137 -0
  426. package/dist/lib/beam.d.ts.map +1 -0
  427. package/dist/lib/beam.js +297 -0
  428. package/dist/lib/below-grade-footprints.d.ts +13 -5
  429. package/dist/lib/below-grade-footprints.d.ts.map +1 -1
  430. package/dist/lib/below-grade-footprints.js +53 -10
  431. package/dist/lib/build-mode.d.ts +11 -0
  432. package/dist/lib/build-mode.d.ts.map +1 -0
  433. package/dist/lib/build-mode.js +24 -0
  434. package/dist/lib/build-up.d.ts +89 -0
  435. package/dist/lib/build-up.d.ts.map +1 -0
  436. package/dist/lib/build-up.js +216 -0
  437. package/dist/lib/corner-pair.d.ts +207 -4
  438. package/dist/lib/corner-pair.d.ts.map +1 -1
  439. package/dist/lib/deck-boards.d.ts +80 -0
  440. package/dist/lib/deck-boards.d.ts.map +1 -0
  441. package/dist/lib/deck-boards.js +184 -0
  442. package/dist/lib/deck-framing.d.ts +150 -0
  443. package/dist/lib/deck-framing.d.ts.map +1 -0
  444. package/dist/lib/deck-framing.js +515 -0
  445. package/dist/lib/deepest-drawn.d.ts +3 -6
  446. package/dist/lib/deepest-drawn.d.ts.map +1 -1
  447. package/dist/lib/deepest-drawn.js +4 -8
  448. package/dist/lib/door-interaction.d.ts +14 -0
  449. package/dist/lib/door-interaction.d.ts.map +1 -0
  450. package/dist/lib/door-interaction.js +62 -0
  451. package/dist/lib/door-opening.d.ts +19 -0
  452. package/dist/lib/door-opening.d.ts.map +1 -0
  453. package/dist/lib/door-opening.js +27 -0
  454. package/dist/lib/door-operation.d.ts +2 -0
  455. package/dist/lib/door-operation.d.ts.map +1 -1
  456. package/dist/lib/door-operation.js +4 -0
  457. package/dist/lib/elevator-support.d.ts +15 -0
  458. package/dist/lib/elevator-support.d.ts.map +1 -0
  459. package/dist/lib/elevator-support.js +40 -0
  460. package/dist/lib/exterior-wall-loops.d.ts.map +1 -1
  461. package/dist/lib/exterior-wall-loops.js +2 -1
  462. package/dist/lib/finish-script.d.ts +5 -5
  463. package/dist/lib/finish-script.d.ts.map +1 -1
  464. package/dist/lib/finish-script.js +12 -5
  465. package/dist/lib/floor-footprint-name.d.ts +17 -0
  466. package/dist/lib/floor-footprint-name.d.ts.map +1 -1
  467. package/dist/lib/floor-footprint-name.js +17 -4
  468. package/dist/lib/floor-intent-changes.d.ts.map +1 -1
  469. package/dist/lib/floor-intent-changes.js +66 -39
  470. package/dist/lib/floor-opening-footprints.d.ts +1 -1
  471. package/dist/lib/floor-opening-footprints.d.ts.map +1 -1
  472. package/dist/lib/floor-opening-footprints.js +10 -4
  473. package/dist/lib/floor-plate-paint.d.ts +2 -0
  474. package/dist/lib/floor-plate-paint.d.ts.map +1 -1
  475. package/dist/lib/floor-plate-paint.js +12 -0
  476. package/dist/lib/floor-plates.d.ts +250 -0
  477. package/dist/lib/floor-plates.d.ts.map +1 -1
  478. package/dist/lib/floor-plates.js +43 -4
  479. package/dist/lib/floor-script.d.ts +35 -6
  480. package/dist/lib/floor-script.d.ts.map +1 -1
  481. package/dist/lib/floor-script.js +96 -16
  482. package/dist/lib/foundation-construction.d.ts +4 -13
  483. package/dist/lib/foundation-construction.d.ts.map +1 -1
  484. package/dist/lib/foundation-construction.js +4 -14
  485. package/dist/lib/foundation-standard.d.ts +2 -3
  486. package/dist/lib/foundation-standard.d.ts.map +1 -1
  487. package/dist/lib/foundation-standard.js +2 -3
  488. package/dist/lib/foundation-wall.d.ts +1 -2
  489. package/dist/lib/foundation-wall.d.ts.map +1 -1
  490. package/dist/lib/foundation-wall.js +1 -2
  491. package/dist/lib/framing-post.d.ts +91 -0
  492. package/dist/lib/framing-post.d.ts.map +1 -0
  493. package/dist/lib/framing-post.js +174 -0
  494. package/dist/lib/geometry-script-node.d.ts +11 -0
  495. package/dist/lib/geometry-script-node.d.ts.map +1 -1
  496. package/dist/lib/geometry-script-node.js +35 -0
  497. package/dist/lib/grade-standing.d.ts +16 -2
  498. package/dist/lib/grade-standing.d.ts.map +1 -1
  499. package/dist/lib/grade-standing.js +129 -9
  500. package/dist/lib/ground-seat.d.ts +2 -22
  501. package/dist/lib/ground-seat.d.ts.map +1 -1
  502. package/dist/lib/ground-seat.js +2 -17
  503. package/dist/lib/ground-window.d.ts +2 -1
  504. package/dist/lib/ground-window.d.ts.map +1 -1
  505. package/dist/lib/ground-window.js +5 -2
  506. package/dist/lib/hierarchy.d.ts +19 -0
  507. package/dist/lib/hierarchy.d.ts.map +1 -0
  508. package/dist/lib/hierarchy.js +53 -0
  509. package/dist/lib/level-footprints.d.ts +2 -0
  510. package/dist/lib/level-footprints.d.ts.map +1 -1
  511. package/dist/lib/level-footprints.js +7 -0
  512. package/dist/lib/opening-casing.d.ts +67 -0
  513. package/dist/lib/opening-casing.d.ts.map +1 -0
  514. package/dist/lib/opening-casing.js +131 -0
  515. package/dist/lib/opening-exterior-face.d.ts +6 -0
  516. package/dist/lib/opening-exterior-face.d.ts.map +1 -0
  517. package/dist/lib/opening-exterior-face.js +15 -0
  518. package/dist/lib/opening-floor-datum.d.ts +11 -5
  519. package/dist/lib/opening-floor-datum.d.ts.map +1 -1
  520. package/dist/lib/opening-floor-datum.js +40 -8
  521. package/dist/lib/opening-frame-depth.d.ts +18 -0
  522. package/dist/lib/opening-frame-depth.d.ts.map +1 -0
  523. package/dist/lib/opening-frame-depth.js +22 -0
  524. package/dist/lib/outdoor-room.d.ts +32 -0
  525. package/dist/lib/outdoor-room.d.ts.map +1 -0
  526. package/dist/lib/outdoor-room.js +66 -0
  527. package/dist/lib/own-floor-intent.d.ts.map +1 -1
  528. package/dist/lib/own-floor-intent.js +2 -2
  529. package/dist/lib/plate-surface.d.ts +8 -0
  530. package/dist/lib/plate-surface.d.ts.map +1 -1
  531. package/dist/lib/plate-surface.js +53 -3
  532. package/dist/lib/polygon-boolean.d.ts.map +1 -1
  533. package/dist/lib/polygon-boolean.js +2 -1
  534. package/dist/lib/porch-framing-sync.d.ts +46 -0
  535. package/dist/lib/porch-framing-sync.d.ts.map +1 -0
  536. package/dist/lib/porch-framing-sync.js +206 -0
  537. package/dist/lib/porch-framing.d.ts +44 -0
  538. package/dist/lib/porch-framing.d.ts.map +1 -0
  539. package/dist/lib/porch-framing.js +159 -0
  540. package/dist/lib/railing-rooms.d.ts +13 -0
  541. package/dist/lib/railing-rooms.d.ts.map +1 -0
  542. package/dist/lib/railing-rooms.js +37 -0
  543. package/dist/lib/roof-eave.d.ts +135 -0
  544. package/dist/lib/roof-eave.d.ts.map +1 -0
  545. package/dist/lib/roof-eave.js +186 -0
  546. package/dist/lib/room-floor-elevation.d.ts +12 -0
  547. package/dist/lib/room-floor-elevation.d.ts.map +1 -0
  548. package/dist/lib/room-floor-elevation.js +41 -0
  549. package/dist/lib/room-floor-feasibility.d.ts.map +1 -1
  550. package/dist/lib/room-floor-feasibility.js +1 -1
  551. package/dist/lib/room-floor-plate.d.ts +3 -1
  552. package/dist/lib/room-floor-plate.d.ts.map +1 -1
  553. package/dist/lib/room-floor-plate.js +7 -0
  554. package/dist/lib/space-detection.d.ts +13 -0
  555. package/dist/lib/space-detection.d.ts.map +1 -1
  556. package/dist/lib/space-detection.js +113 -24
  557. package/dist/lib/structure-kernel.d.ts +22 -9
  558. package/dist/lib/structure-kernel.d.ts.map +1 -1
  559. package/dist/lib/structure-kernel.js +146 -28
  560. package/dist/lib/structure-reconcile.d.ts +1 -1
  561. package/dist/lib/structure-reconcile.d.ts.map +1 -1
  562. package/dist/lib/structure-reconcile.js +7 -4
  563. package/dist/lib/surface-intent.d.ts +10 -0
  564. package/dist/lib/surface-intent.d.ts.map +1 -0
  565. package/dist/lib/surface-intent.js +18 -0
  566. package/dist/lib/terrain-source.d.ts.map +1 -1
  567. package/dist/lib/terrain-source.js +2 -1
  568. package/dist/lib/wall-face-script.d.ts.map +1 -1
  569. package/dist/lib/wall-face-script.js +8 -5
  570. package/dist/lib/window-interaction.d.ts +16 -0
  571. package/dist/lib/window-interaction.d.ts.map +1 -0
  572. package/dist/lib/window-interaction.js +82 -0
  573. package/dist/lib/zone-quantities.js +1 -1
  574. package/dist/material-kinds.d.ts +1 -1
  575. package/dist/material-kinds.d.ts.map +1 -1
  576. package/dist/material-kinds.js +1 -0
  577. package/dist/material-library.d.ts +15 -0
  578. package/dist/material-library.d.ts.map +1 -1
  579. package/dist/material-library.js +458 -59
  580. package/dist/node-slots/column.d.ts +5 -0
  581. package/dist/node-slots/column.d.ts.map +1 -1
  582. package/dist/node-slots/column.js +10 -0
  583. package/dist/node-slots/door.d.ts +3 -4
  584. package/dist/node-slots/door.d.ts.map +1 -1
  585. package/dist/node-slots/door.js +4 -3
  586. package/dist/node-slots/wall.d.ts.map +1 -1
  587. package/dist/node-slots/wall.js +21 -3
  588. package/dist/node-slots/window.d.ts +2 -2
  589. package/dist/node-slots/window.d.ts.map +1 -1
  590. package/dist/node-slots/window.js +6 -1
  591. package/dist/procedural-items/design.d.ts +8 -0
  592. package/dist/procedural-items/design.d.ts.map +1 -1
  593. package/dist/procedural-items/design.js +169 -21
  594. package/dist/procedural-items/motion-controller.d.ts +2 -0
  595. package/dist/procedural-items/motion-controller.d.ts.map +1 -1
  596. package/dist/procedural-items/motion-controller.js +2 -1
  597. package/dist/registry/index.d.ts +3 -3
  598. package/dist/registry/index.d.ts.map +1 -1
  599. package/dist/registry/index.js +2 -2
  600. package/dist/registry/mechanism.d.ts +4 -1
  601. package/dist/registry/mechanism.d.ts.map +1 -1
  602. package/dist/registry/mechanism.js +10 -0
  603. package/dist/registry/registry.d.ts +5 -0
  604. package/dist/registry/registry.d.ts.map +1 -1
  605. package/dist/registry/registry.js +10 -0
  606. package/dist/registry/types.d.ts +89 -23
  607. package/dist/registry/types.d.ts.map +1 -1
  608. package/dist/runtime/__fixtures__/live-scene.d.ts +14 -0
  609. package/dist/runtime/__fixtures__/live-scene.d.ts.map +1 -0
  610. package/dist/runtime/__fixtures__/live-scene.js +64 -0
  611. package/dist/runtime/apply.d.ts +42 -0
  612. package/dist/runtime/apply.d.ts.map +1 -0
  613. package/dist/runtime/apply.js +274 -0
  614. package/dist/runtime/dependencies.d.ts +97 -0
  615. package/dist/runtime/dependencies.d.ts.map +1 -0
  616. package/dist/runtime/dependencies.js +42 -0
  617. package/dist/runtime/ids.d.ts +11 -0
  618. package/dist/runtime/ids.d.ts.map +1 -0
  619. package/dist/runtime/ids.js +80 -0
  620. package/dist/runtime/index.d.ts +14 -0
  621. package/dist/runtime/index.d.ts.map +1 -0
  622. package/dist/runtime/index.js +11 -0
  623. package/dist/runtime/node-queries.d.ts +16 -0
  624. package/dist/runtime/node-queries.d.ts.map +1 -0
  625. package/dist/runtime/node-queries.js +30 -0
  626. package/dist/runtime/patch.d.ts +26 -0
  627. package/dist/runtime/patch.d.ts.map +1 -0
  628. package/dist/runtime/patch.js +165 -0
  629. package/dist/runtime/reader.d.ts +104 -0
  630. package/dist/runtime/reader.d.ts.map +1 -0
  631. package/dist/runtime/reader.js +455 -0
  632. package/dist/runtime/scene-runtime.d.ts +112 -0
  633. package/dist/runtime/scene-runtime.d.ts.map +1 -0
  634. package/dist/runtime/scene-runtime.js +302 -0
  635. package/dist/schema/__fixtures__/node-fixtures.d.ts.map +1 -1
  636. package/dist/schema/__fixtures__/node-fixtures.js +1 -0
  637. package/dist/schema/assembly.d.ts +3 -0
  638. package/dist/schema/assembly.d.ts.map +1 -1
  639. package/dist/schema/assembly.js +13 -0
  640. package/dist/schema/asset-url.d.ts +37 -2
  641. package/dist/schema/asset-url.d.ts.map +1 -1
  642. package/dist/schema/asset-url.js +80 -11
  643. package/dist/schema/base.d.ts +8 -0
  644. package/dist/schema/base.d.ts.map +1 -1
  645. package/dist/schema/base.js +19 -1
  646. package/dist/schema/build-up.d.ts +247 -0
  647. package/dist/schema/build-up.d.ts.map +1 -0
  648. package/dist/schema/build-up.js +83 -0
  649. package/dist/schema/geometry-source.d.ts +80 -0
  650. package/dist/schema/geometry-source.d.ts.map +1 -1
  651. package/dist/schema/geometry-source.js +38 -0
  652. package/dist/schema/index.d.ts +12 -7
  653. package/dist/schema/index.d.ts.map +1 -1
  654. package/dist/schema/index.js +12 -6
  655. package/dist/schema/material.d.ts +5 -0
  656. package/dist/schema/material.d.ts.map +1 -1
  657. package/dist/schema/material.js +6 -0
  658. package/dist/schema/nodes/beam.d.ts +264 -0
  659. package/dist/schema/nodes/beam.d.ts.map +1 -0
  660. package/dist/schema/nodes/beam.js +139 -0
  661. package/dist/schema/nodes/box-vent.d.ts +5 -0
  662. package/dist/schema/nodes/box-vent.d.ts.map +1 -1
  663. package/dist/schema/nodes/cabinet.d.ts +10 -0
  664. package/dist/schema/nodes/cabinet.d.ts.map +1 -1
  665. package/dist/schema/nodes/ceiling.d.ts +48 -0
  666. package/dist/schema/nodes/ceiling.d.ts.map +1 -1
  667. package/dist/schema/nodes/ceiling.js +5 -0
  668. package/dist/schema/nodes/chimney.d.ts +10 -0
  669. package/dist/schema/nodes/chimney.d.ts.map +1 -1
  670. package/dist/schema/nodes/column.d.ts +42 -0
  671. package/dist/schema/nodes/column.d.ts.map +1 -1
  672. package/dist/schema/nodes/column.js +11 -1
  673. package/dist/schema/nodes/cupola.d.ts +5 -0
  674. package/dist/schema/nodes/cupola.d.ts.map +1 -1
  675. package/dist/schema/nodes/door.d.ts +54 -3
  676. package/dist/schema/nodes/door.d.ts.map +1 -1
  677. package/dist/schema/nodes/door.js +41 -7
  678. package/dist/schema/nodes/dormer.d.ts +20 -0
  679. package/dist/schema/nodes/dormer.d.ts.map +1 -1
  680. package/dist/schema/nodes/downspout.d.ts +5 -0
  681. package/dist/schema/nodes/downspout.d.ts.map +1 -1
  682. package/dist/schema/nodes/elevator.d.ts +5 -0
  683. package/dist/schema/nodes/elevator.d.ts.map +1 -1
  684. package/dist/schema/nodes/eyebrow-vent.d.ts +5 -0
  685. package/dist/schema/nodes/eyebrow-vent.d.ts.map +1 -1
  686. package/dist/schema/nodes/fence.d.ts +5 -0
  687. package/dist/schema/nodes/fence.d.ts.map +1 -1
  688. package/dist/schema/nodes/guide.d.ts +14 -0
  689. package/dist/schema/nodes/guide.d.ts.map +1 -1
  690. package/dist/schema/nodes/guide.js +2 -0
  691. package/dist/schema/nodes/gutter.d.ts +5 -0
  692. package/dist/schema/nodes/gutter.d.ts.map +1 -1
  693. package/dist/schema/nodes/item.d.ts +71 -0
  694. package/dist/schema/nodes/item.d.ts.map +1 -1
  695. package/dist/schema/nodes/item.js +5 -1
  696. package/dist/schema/nodes/level.d.ts +1 -1
  697. package/dist/schema/nodes/level.d.ts.map +1 -1
  698. package/dist/schema/nodes/opening-types.d.ts +13 -0
  699. package/dist/schema/nodes/opening-types.d.ts.map +1 -1
  700. package/dist/schema/nodes/opening-types.js +8 -1
  701. package/dist/schema/nodes/railing-wall.d.ts +112 -0
  702. package/dist/schema/nodes/railing-wall.d.ts.map +1 -0
  703. package/dist/schema/nodes/railing-wall.js +160 -0
  704. package/dist/schema/nodes/ridge-vent.d.ts +5 -0
  705. package/dist/schema/nodes/ridge-vent.d.ts.map +1 -1
  706. package/dist/schema/nodes/roof-segment-resize.d.ts.map +1 -1
  707. package/dist/schema/nodes/roof-segment-resize.js +2 -2
  708. package/dist/schema/nodes/roof-segment.d.ts +226 -1
  709. package/dist/schema/nodes/roof-segment.d.ts.map +1 -1
  710. package/dist/schema/nodes/roof-segment.js +97 -12
  711. package/dist/schema/nodes/roof-types.d.ts +11 -0
  712. package/dist/schema/nodes/roof-types.d.ts.map +1 -1
  713. package/dist/schema/nodes/roof-types.js +6 -0
  714. package/dist/schema/nodes/roof.d.ts +60 -0
  715. package/dist/schema/nodes/roof.d.ts.map +1 -1
  716. package/dist/schema/nodes/roof.js +4 -0
  717. package/dist/schema/nodes/shelf.d.ts +5 -0
  718. package/dist/schema/nodes/shelf.d.ts.map +1 -1
  719. package/dist/schema/nodes/site.d.ts +80 -0
  720. package/dist/schema/nodes/site.d.ts.map +1 -1
  721. package/dist/schema/nodes/site.js +7 -0
  722. package/dist/schema/nodes/skylight.d.ts +10 -0
  723. package/dist/schema/nodes/skylight.d.ts.map +1 -1
  724. package/dist/schema/nodes/slab.d.ts +137 -0
  725. package/dist/schema/nodes/slab.d.ts.map +1 -1
  726. package/dist/schema/nodes/slab.js +3 -0
  727. package/dist/schema/nodes/solar-panel.d.ts +10 -0
  728. package/dist/schema/nodes/solar-panel.d.ts.map +1 -1
  729. package/dist/schema/nodes/stair-segment.d.ts +5 -0
  730. package/dist/schema/nodes/stair-segment.d.ts.map +1 -1
  731. package/dist/schema/nodes/stair-structure.d.ts +69 -0
  732. package/dist/schema/nodes/stair-structure.d.ts.map +1 -0
  733. package/dist/schema/nodes/stair-structure.js +39 -0
  734. package/dist/schema/nodes/stair.d.ts +46 -0
  735. package/dist/schema/nodes/stair.d.ts.map +1 -1
  736. package/dist/schema/nodes/stair.js +3 -0
  737. package/dist/schema/nodes/turbine-vent.d.ts +5 -0
  738. package/dist/schema/nodes/turbine-vent.d.ts.map +1 -1
  739. package/dist/schema/nodes/wall.d.ts +136 -2
  740. package/dist/schema/nodes/wall.d.ts.map +1 -1
  741. package/dist/schema/nodes/wall.js +48 -6
  742. package/dist/schema/nodes/window.d.ts +66 -1
  743. package/dist/schema/nodes/window.d.ts.map +1 -1
  744. package/dist/schema/nodes/window.js +50 -5
  745. package/dist/schema/nodes/zone.d.ts +68 -0
  746. package/dist/schema/nodes/zone.d.ts.map +1 -1
  747. package/dist/schema/nodes/zone.js +32 -0
  748. package/dist/schema/scene-material.d.ts +5 -0
  749. package/dist/schema/scene-material.d.ts.map +1 -1
  750. package/dist/schema/types.d.ts +1080 -4
  751. package/dist/schema/types.d.ts.map +1 -1
  752. package/dist/schema/types.js +2 -0
  753. package/dist/schema/wall-type.d.ts +95 -0
  754. package/dist/schema/wall-type.d.ts.map +1 -0
  755. package/dist/schema/wall-type.js +32 -0
  756. package/dist/services/index.d.ts +1 -1
  757. package/dist/services/index.d.ts.map +1 -1
  758. package/dist/services/index.js +1 -1
  759. package/dist/services/movement.d.ts +7 -0
  760. package/dist/services/movement.d.ts.map +1 -1
  761. package/dist/services/movement.js +13 -0
  762. package/dist/services/port-connectivity.d.ts +15 -6
  763. package/dist/services/port-connectivity.d.ts.map +1 -1
  764. package/dist/services/port-connectivity.js +83 -17
  765. package/dist/services/roof-bearing.d.ts.map +1 -1
  766. package/dist/services/roof-bearing.js +8 -4
  767. package/dist/services/roof-level.d.ts.map +1 -1
  768. package/dist/services/roof-level.js +4 -3
  769. package/dist/services/roof-move.d.ts.map +1 -1
  770. package/dist/services/roof-move.js +13 -7
  771. package/dist/services/storey.d.ts +6 -1
  772. package/dist/services/storey.d.ts.map +1 -1
  773. package/dist/services/storey.js +24 -10
  774. package/dist/spatial/usage-field/beds.d.ts +51 -0
  775. package/dist/spatial/usage-field/beds.d.ts.map +1 -0
  776. package/dist/spatial/usage-field/beds.js +346 -0
  777. package/dist/spatial/usage-field/blocked.d.ts +28 -0
  778. package/dist/spatial/usage-field/blocked.d.ts.map +1 -0
  779. package/dist/spatial/usage-field/blocked.js +185 -0
  780. package/dist/spatial/usage-field/boxes.d.ts +17 -0
  781. package/dist/spatial/usage-field/boxes.d.ts.map +1 -0
  782. package/dist/spatial/usage-field/boxes.js +82 -0
  783. package/dist/spatial/usage-field/catalogue-shapes.d.ts +3 -0
  784. package/dist/spatial/usage-field/catalogue-shapes.d.ts.map +1 -0
  785. package/dist/spatial/usage-field/catalogue-shapes.js +257 -0
  786. package/dist/spatial/usage-field/catalogue.d.ts +6 -0
  787. package/dist/spatial/usage-field/catalogue.d.ts.map +1 -0
  788. package/dist/spatial/usage-field/catalogue.js +11 -0
  789. package/dist/spatial/usage-field/clash.d.ts +40 -0
  790. package/dist/spatial/usage-field/clash.d.ts.map +1 -0
  791. package/dist/spatial/usage-field/clash.js +187 -0
  792. package/dist/spatial/usage-field/door-stairs.d.ts +18 -0
  793. package/dist/spatial/usage-field/door-stairs.d.ts.map +1 -0
  794. package/dist/spatial/usage-field/door-stairs.js +129 -0
  795. package/dist/spatial/usage-field/entry-way.d.ts +14 -0
  796. package/dist/spatial/usage-field/entry-way.d.ts.map +1 -0
  797. package/dist/spatial/usage-field/entry-way.js +219 -0
  798. package/dist/spatial/usage-field/fences.d.ts +18 -0
  799. package/dist/spatial/usage-field/fences.d.ts.map +1 -0
  800. package/dist/spatial/usage-field/fences.js +253 -0
  801. package/dist/spatial/usage-field/field.d.ts +44 -0
  802. package/dist/spatial/usage-field/field.d.ts.map +1 -0
  803. package/dist/spatial/usage-field/field.js +145 -0
  804. package/dist/spatial/usage-field/findings.d.ts +76 -0
  805. package/dist/spatial/usage-field/findings.d.ts.map +1 -0
  806. package/dist/spatial/usage-field/findings.js +252 -0
  807. package/dist/spatial/usage-field/fixtures.d.ts +18 -0
  808. package/dist/spatial/usage-field/fixtures.d.ts.map +1 -0
  809. package/dist/spatial/usage-field/fixtures.js +160 -0
  810. package/dist/spatial/usage-field/flag.d.ts +10 -0
  811. package/dist/spatial/usage-field/flag.d.ts.map +1 -0
  812. package/dist/spatial/usage-field/flag.js +12 -0
  813. package/dist/spatial/usage-field/floors.d.ts +13 -0
  814. package/dist/spatial/usage-field/floors.d.ts.map +1 -0
  815. package/dist/spatial/usage-field/floors.js +36 -0
  816. package/dist/spatial/usage-field/index.d.ts +7 -0
  817. package/dist/spatial/usage-field/index.d.ts.map +1 -0
  818. package/dist/spatial/usage-field/index.js +5 -0
  819. package/dist/spatial/usage-field/items.d.ts +38 -0
  820. package/dist/spatial/usage-field/items.d.ts.map +1 -0
  821. package/dist/spatial/usage-field/items.js +261 -0
  822. package/dist/spatial/usage-field/labels.d.ts +8 -0
  823. package/dist/spatial/usage-field/labels.d.ts.map +1 -0
  824. package/dist/spatial/usage-field/labels.js +14 -0
  825. package/dist/spatial/usage-field/level-field.d.ts +47 -0
  826. package/dist/spatial/usage-field/level-field.d.ts.map +1 -0
  827. package/dist/spatial/usage-field/level-field.js +96 -0
  828. package/dist/spatial/usage-field/measure.d.ts +324 -0
  829. package/dist/spatial/usage-field/measure.d.ts.map +1 -0
  830. package/dist/spatial/usage-field/measure.js +458 -0
  831. package/dist/spatial/usage-field/obstacles.d.ts +63 -0
  832. package/dist/spatial/usage-field/obstacles.d.ts.map +1 -0
  833. package/dist/spatial/usage-field/obstacles.js +215 -0
  834. package/dist/spatial/usage-field/openings.d.ts +12 -0
  835. package/dist/spatial/usage-field/openings.d.ts.map +1 -0
  836. package/dist/spatial/usage-field/openings.js +162 -0
  837. package/dist/spatial/usage-field/path.d.ts +48 -0
  838. package/dist/spatial/usage-field/path.d.ts.map +1 -0
  839. package/dist/spatial/usage-field/path.js +354 -0
  840. package/dist/spatial/usage-field/pieces.d.ts +27 -0
  841. package/dist/spatial/usage-field/pieces.d.ts.map +1 -0
  842. package/dist/spatial/usage-field/pieces.js +89 -0
  843. package/dist/spatial/usage-field/shapes.d.ts +18 -0
  844. package/dist/spatial/usage-field/shapes.d.ts.map +1 -0
  845. package/dist/spatial/usage-field/shapes.js +92 -0
  846. package/dist/spatial/usage-field/stairs.d.ts +23 -0
  847. package/dist/spatial/usage-field/stairs.d.ts.map +1 -0
  848. package/dist/spatial/usage-field/stairs.js +163 -0
  849. package/dist/spatial/usage-field/support.d.ts +24 -0
  850. package/dist/spatial/usage-field/support.d.ts.map +1 -0
  851. package/dist/spatial/usage-field/support.js +46 -0
  852. package/dist/spatial/usage-field/swings.d.ts +847 -0
  853. package/dist/spatial/usage-field/swings.d.ts.map +1 -0
  854. package/dist/spatial/usage-field/swings.js +427 -0
  855. package/dist/spatial/usage-field/types.d.ts +65 -0
  856. package/dist/spatial/usage-field/types.d.ts.map +1 -0
  857. package/dist/spatial/usage-field/types.js +1 -0
  858. package/dist/spatial/usage-field/walls.d.ts +1059 -0
  859. package/dist/spatial/usage-field/walls.d.ts.map +1 -0
  860. package/dist/spatial/usage-field/walls.js +180 -0
  861. package/dist/spatial/usage-field/way-in.d.ts +26 -0
  862. package/dist/spatial/usage-field/way-in.d.ts.map +1 -0
  863. package/dist/spatial/usage-field/way-in.js +113 -0
  864. package/dist/store/actions/node-actions.d.ts +1467 -664
  865. package/dist/store/actions/node-actions.d.ts.map +1 -1
  866. package/dist/store/actions/node-actions.js +65 -21
  867. package/dist/store/derived-node-guard.d.ts +10 -2
  868. package/dist/store/derived-node-guard.d.ts.map +1 -1
  869. package/dist/store/derived-node-guard.js +33 -12
  870. package/dist/store/document-settling.d.ts +9 -0
  871. package/dist/store/document-settling.d.ts.map +1 -0
  872. package/dist/store/document-settling.js +22 -0
  873. package/dist/store/history-control.d.ts +19 -10
  874. package/dist/store/history-control.d.ts.map +1 -1
  875. package/dist/store/history-control.js +176 -127
  876. package/dist/store/history-drafts.d.ts.map +1 -1
  877. package/dist/store/history-drafts.js +21 -17
  878. package/dist/store/live-previews.d.ts +9 -0
  879. package/dist/store/live-previews.d.ts.map +1 -0
  880. package/dist/store/live-previews.js +19 -0
  881. package/dist/store/scene-annotations.d.ts +5409 -3807
  882. package/dist/store/scene-annotations.d.ts.map +1 -1
  883. package/dist/store/scene-environment.d.ts +33 -0
  884. package/dist/store/scene-environment.d.ts.map +1 -0
  885. package/dist/store/scene-environment.js +54 -0
  886. package/dist/store/scene-hydration.d.ts.map +1 -1
  887. package/dist/store/scene-hydration.js +41 -30
  888. package/dist/store/use-interactive.d.ts +9 -3
  889. package/dist/store/use-interactive.d.ts.map +1 -1
  890. package/dist/store/use-interactive.js +43 -11
  891. package/dist/store/use-live-node-overrides.d.ts.map +1 -1
  892. package/dist/store/use-live-node-overrides.js +3 -0
  893. package/dist/store/use-scene.d.ts +25 -0
  894. package/dist/store/use-scene.d.ts.map +1 -1
  895. package/dist/store/use-scene.js +408 -336
  896. package/dist/systems/document-reconcile.d.ts +40 -0
  897. package/dist/systems/document-reconcile.d.ts.map +1 -0
  898. package/dist/systems/document-reconcile.js +159 -0
  899. package/dist/systems/elevator/elevator-geometry.d.ts +25 -0
  900. package/dist/systems/elevator/elevator-geometry.d.ts.map +1 -1
  901. package/dist/systems/elevator/elevator-geometry.js +40 -8
  902. package/dist/systems/elevator/elevator-opening-sync.d.ts.map +1 -1
  903. package/dist/systems/elevator/elevator-opening-sync.js +4 -35
  904. package/dist/systems/elevator/elevator-opening-system.d.ts.map +1 -1
  905. package/dist/systems/elevator/elevator-opening-system.js +9 -24
  906. package/dist/systems/elevator/elevator-runtime.d.ts.map +1 -1
  907. package/dist/systems/elevator/elevator-runtime.js +95 -18
  908. package/dist/systems/elevator/elevator-service.d.ts.map +1 -1
  909. package/dist/systems/elevator/elevator-service.js +24 -4
  910. package/dist/systems/fence/guard-layout.d.ts +69 -0
  911. package/dist/systems/fence/guard-layout.d.ts.map +1 -0
  912. package/dist/systems/fence/guard-layout.js +194 -0
  913. package/dist/systems/owned-floor-openings.d.ts +13 -1
  914. package/dist/systems/owned-floor-openings.d.ts.map +1 -1
  915. package/dist/systems/owned-floor-openings.js +58 -2
  916. package/dist/systems/reconcile-owned-floor-openings.d.ts +3 -1
  917. package/dist/systems/reconcile-owned-floor-openings.d.ts.map +1 -1
  918. package/dist/systems/reconcile-owned-floor-openings.js +4 -4
  919. package/dist/systems/roof/roof-elevation-system.d.ts.map +1 -1
  920. package/dist/systems/roof/roof-elevation-system.js +8 -26
  921. package/dist/systems/roof/roof-elevation.d.ts +16 -1
  922. package/dist/systems/roof/roof-elevation.d.ts.map +1 -1
  923. package/dist/systems/roof/roof-elevation.js +87 -5
  924. package/dist/systems/roof/roof-footprint.d.ts +42 -1
  925. package/dist/systems/roof/roof-footprint.d.ts.map +1 -1
  926. package/dist/systems/roof/roof-footprint.js +160 -4
  927. package/dist/systems/slab/__fixtures__/floor-step.d.ts +2714 -1481
  928. package/dist/systems/slab/__fixtures__/floor-step.d.ts.map +1 -1
  929. package/dist/systems/slab/__fixtures__/raised-room.d.ts +3815 -2565
  930. package/dist/systems/slab/__fixtures__/raised-room.d.ts.map +1 -1
  931. package/dist/systems/stair/stair-clearance.d.ts +7 -0
  932. package/dist/systems/stair/stair-clearance.d.ts.map +1 -1
  933. package/dist/systems/stair/stair-clearance.js +31 -11
  934. package/dist/systems/stair/stair-construction.d.ts +8 -3
  935. package/dist/systems/stair/stair-construction.d.ts.map +1 -1
  936. package/dist/systems/stair/stair-construction.js +55 -4
  937. package/dist/systems/stair/stair-opening-preview.d.ts +1630 -829
  938. package/dist/systems/stair/stair-opening-preview.d.ts.map +1 -1
  939. package/dist/systems/stair/stair-opening-system.d.ts.map +1 -1
  940. package/dist/systems/stair/stair-opening-system.js +18 -34
  941. package/dist/systems/stair/stair-presets.d.ts +36 -0
  942. package/dist/systems/stair/stair-presets.d.ts.map +1 -1
  943. package/dist/systems/stair/stair-rise-query.d.ts.map +1 -1
  944. package/dist/systems/stair/stair-rise-query.js +3 -2
  945. package/dist/systems/stair/stair-rise.d.ts.map +1 -1
  946. package/dist/systems/stair/stair-rise.js +6 -0
  947. package/dist/systems/stair/stair-sizing.d.ts +42 -11
  948. package/dist/systems/stair/stair-sizing.d.ts.map +1 -1
  949. package/dist/systems/stair/stair-sizing.js +10 -1
  950. package/dist/systems/stair/stair-structure.d.ts +277 -0
  951. package/dist/systems/stair/stair-structure.d.ts.map +1 -0
  952. package/dist/systems/stair/stair-structure.js +496 -0
  953. package/dist/systems/wall/wall-assembly.d.ts +84 -6
  954. package/dist/systems/wall/wall-assembly.d.ts.map +1 -1
  955. package/dist/systems/wall/wall-assembly.js +204 -5
  956. package/dist/systems/wall/wall-curve.d.ts +10 -0
  957. package/dist/systems/wall/wall-curve.d.ts.map +1 -1
  958. package/dist/systems/wall/wall-curve.js +38 -0
  959. package/dist/systems/wall/wall-finish.d.ts +38 -2
  960. package/dist/systems/wall/wall-finish.d.ts.map +1 -1
  961. package/dist/systems/wall/wall-finish.js +70 -2
  962. package/dist/systems/wall/wall-footprint.js +2 -2
  963. package/dist/systems/wall/wall-frame.d.ts.map +1 -1
  964. package/dist/systems/wall/wall-frame.js +8 -0
  965. package/dist/systems/wall/wall-merge.d.ts +9 -1
  966. package/dist/systems/wall/wall-merge.d.ts.map +1 -1
  967. package/dist/systems/wall/wall-merge.js +66 -13
  968. package/dist/systems/wall/wall-mitering.d.ts +1 -0
  969. package/dist/systems/wall/wall-mitering.d.ts.map +1 -1
  970. package/dist/systems/wall/wall-mitering.js +152 -52
  971. package/dist/systems/wall/wall-move.d.ts +23 -6
  972. package/dist/systems/wall/wall-move.d.ts.map +1 -1
  973. package/dist/systems/wall/wall-move.js +65 -0
  974. package/dist/systems/wall/wall-top.d.ts +11 -4
  975. package/dist/systems/wall/wall-top.d.ts.map +1 -1
  976. package/dist/systems/wall/wall-top.js +28 -7
  977. package/dist/systems/wall/wall-topology.d.ts +32 -1
  978. package/dist/systems/wall/wall-topology.d.ts.map +1 -1
  979. package/dist/systems/wall/wall-topology.js +137 -11
  980. package/dist/systems/wall/wall-trim-profiles.d.ts +12 -0
  981. package/dist/systems/wall/wall-trim-profiles.d.ts.map +1 -0
  982. package/dist/systems/wall/wall-trim-profiles.js +191 -0
  983. package/dist/utils/ensure-scene-openings.d.ts +4663 -3061
  984. package/dist/utils/ensure-scene-openings.d.ts.map +1 -1
  985. package/dist/utils/floor-piece-adoption.d.ts +5 -0
  986. package/dist/utils/floor-piece-adoption.d.ts.map +1 -1
  987. package/dist/utils/floor-plate-migration.d.ts +3372 -2571
  988. package/dist/utils/floor-plate-migration.d.ts.map +1 -1
  989. package/dist/utils/measurement-format.d.ts +27 -0
  990. package/dist/utils/measurement-format.d.ts.map +1 -0
  991. package/dist/utils/measurement-format.js +143 -0
  992. package/dist/utils/owned-floor-opening-migration.d.ts +1629 -828
  993. package/dist/utils/owned-floor-opening-migration.d.ts.map +1 -1
  994. package/dist/utils/reconcile-structure-on-load.d.ts +2308 -1507
  995. package/dist/utils/reconcile-structure-on-load.d.ts.map +1 -1
  996. package/dist/utils/structure-id.d.ts.map +1 -1
  997. package/dist/utils/structure-id.js +4 -0
  998. package/dist/validation/validate-build-json.d.ts.map +1 -1
  999. package/dist/validation/validate-build-json.js +3 -1
  1000. package/package.json +22 -5
  1001. package/dist/lib/generic-foundation.d.ts +0 -40
  1002. package/dist/lib/generic-foundation.d.ts.map +0 -1
  1003. package/dist/lib/generic-foundation.js +0 -200
@@ -1,5 +1,6 @@
1
1
  import type { AnyNode } from '../schema/index.js';
2
2
  import type { SceneNodes } from './types.js';
3
+ export { orderedChildIds, queryNodes } from '../runtime/node-queries.js';
3
4
  export type LevelRole = 'occupied' | 'roof' | 'support';
4
5
  export type ContentCounts = {
5
6
  walls: number;
@@ -45,7 +46,7 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
45
46
  fromIds: string[];
46
47
  } | undefined;
47
48
  } | undefined;
48
- id: `elevator_${string}`;
49
+ id: `bvent_${string}`;
49
50
  material?: {
50
51
  id?: string | undefined;
51
52
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
@@ -61,33 +62,31 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
61
62
  url: string;
62
63
  repeat?: [number, number] | undefined;
63
64
  scale?: number | undefined;
65
+ offset?: [number, number] | undefined;
66
+ normalMap?: string | undefined;
67
+ normalScale?: number | undefined;
68
+ bumpMap?: string | undefined;
69
+ bumpScale?: number | undefined;
64
70
  } | undefined;
65
71
  } | undefined;
66
- materialPreset?: string | undefined;
67
72
  slots?: Record<string, string> | undefined;
73
+ materialPreset: string;
74
+ roofSegmentId?: string | undefined;
68
75
  position: [number, number, number];
69
76
  rotation: number;
70
77
  width: number;
71
78
  depth: number;
72
- shaftWidth?: number | undefined;
73
- shaftDepth?: number | undefined;
74
- shaftWallThickness: number;
75
- shaftStyle: "glass" | "solid";
76
- cabHeight: number;
77
- doorWidth: number;
78
- doorHeight: number;
79
- doorStyle: "center-opening" | "single-left" | "single-right";
80
- doorPanelStyle: "glass-frame" | "segmented-panel" | "solid-panel";
81
- fromLevelId: string | null;
82
- toLevelId: string | null;
83
- servedLevelIds?: string[] | undefined;
84
- disabledLevelIds: string[];
85
- serviceOnlyLevelIds: string[];
86
- defaultLevelId: string | null;
87
- speed: number;
88
- doorDurationMs: number;
89
- dwellMs: number;
90
- type: "elevator";
79
+ height: number;
80
+ hoodOverhang: number;
81
+ topTaper: number;
82
+ capHeight: number;
83
+ capGap: number;
84
+ domeCurvature: number;
85
+ baseInset: number;
86
+ baseHeight: number;
87
+ cornerBevel: number;
88
+ style: "box" | "cap" | "dome";
89
+ type: "box-vent";
91
90
  } | {
92
91
  object: "node";
93
92
  name?: string | undefined;
@@ -112,143 +111,223 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
112
111
  fromIds: string[];
113
112
  } | undefined;
114
113
  } | undefined;
115
- id: `measurement_${string}`;
116
- measurement: {
117
- kind: "volume";
118
- base: ({
119
- kind: "feature";
120
- reference: {
121
- nodeId: string;
122
- featureId: string;
123
- parameters?: Record<string, string | number | boolean> | undefined;
124
- };
125
- fallback: [number, number, number];
126
- } | [number, number, number])[];
127
- extrusion: [number, number, number];
128
- } | {
129
- kind: "distance";
130
- points: [{
131
- kind: "feature";
132
- reference: {
133
- nodeId: string;
134
- featureId: string;
135
- parameters?: Record<string, string | number | boolean> | undefined;
136
- };
137
- fallback: [number, number, number];
138
- } | [number, number, number], {
139
- kind: "feature";
140
- reference: {
141
- nodeId: string;
142
- featureId: string;
143
- parameters?: Record<string, string | number | boolean> | undefined;
144
- };
145
- fallback: [number, number, number];
146
- } | [number, number, number]];
147
- } | {
148
- kind: "angle";
149
- points: [{
150
- kind: "feature";
151
- reference: {
152
- nodeId: string;
153
- featureId: string;
154
- parameters?: Record<string, string | number | boolean> | undefined;
155
- };
156
- fallback: [number, number, number];
157
- } | [number, number, number], {
158
- kind: "feature";
159
- reference: {
160
- nodeId: string;
161
- featureId: string;
162
- parameters?: Record<string, string | number | boolean> | undefined;
163
- };
164
- fallback: [number, number, number];
165
- } | [number, number, number], {
166
- kind: "feature";
167
- reference: {
168
- nodeId: string;
169
- featureId: string;
170
- parameters?: Record<string, string | number | boolean> | undefined;
171
- };
172
- fallback: [number, number, number];
173
- } | [number, number, number]];
174
- } | {
175
- kind: "area";
176
- base: ({
177
- kind: "feature";
178
- reference: {
179
- nodeId: string;
180
- featureId: string;
181
- parameters?: Record<string, string | number | boolean> | undefined;
182
- };
183
- fallback: [number, number, number];
184
- } | [number, number, number])[];
185
- } | {
186
- kind: "perimeter";
187
- base: ({
188
- kind: "feature";
189
- reference: {
190
- nodeId: string;
191
- featureId: string;
192
- parameters?: Record<string, string | number | boolean> | undefined;
114
+ id: `column_${string}`;
115
+ children: string[];
116
+ position: [number, number, number];
117
+ rotation: number;
118
+ supportSlabId?: string | undefined;
119
+ source?: {
120
+ kind: "script";
121
+ meta?: {
122
+ description?: string | undefined;
123
+ category?: string | undefined;
124
+ tags?: string[] | undefined;
125
+ parent?: string | undefined;
126
+ } | undefined;
127
+ language: "bpy" | "three";
128
+ script: string;
129
+ params: Record<string, string | number | boolean>;
130
+ artifact: string;
131
+ manifest: {
132
+ bounds: {
133
+ min: [number, number, number];
134
+ max: [number, number, number];
193
135
  };
194
- fallback: [number, number, number];
195
- } | [number, number, number])[];
196
- };
197
- type: "measurement";
198
- } | {
199
- object: "node";
200
- name?: string | undefined;
201
- parentId: string | null;
202
- visible: boolean;
203
- camera?: {
204
- position: [number, number, number];
205
- target: [number, number, number];
206
- mode: "orthographic" | "perspective";
207
- fov?: number | undefined;
208
- zoom?: number | undefined;
209
- } | undefined;
210
- metadata: Record<string, unknown>;
211
- provenance?: {
212
- refs: {
213
- ns?: string | undefined;
214
- id: string;
215
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
216
- }[];
217
- lineage?: {
218
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
219
- fromIds: string[];
136
+ params: {
137
+ id: string;
138
+ label?: string | undefined;
139
+ kind: "boolean" | "number" | "string";
140
+ default: string | number | boolean;
141
+ min?: number | undefined;
142
+ max?: number | undefined;
143
+ step?: number | undefined;
144
+ unit?: string | undefined;
145
+ options?: string[] | undefined;
146
+ }[];
147
+ parts: {
148
+ id: string;
149
+ label?: string | undefined;
150
+ type?: string | undefined;
151
+ bounds?: {
152
+ min: [number, number, number];
153
+ max: [number, number, number];
154
+ } | undefined;
155
+ }[];
156
+ surfaces: {
157
+ part?: string | undefined;
158
+ y: number;
159
+ polygon: [number, number][];
160
+ }[];
161
+ slots: {
162
+ id: string;
163
+ label?: string | undefined;
164
+ color?: string | undefined;
165
+ roughness?: number | undefined;
166
+ metalness?: number | undefined;
167
+ transparent?: boolean | undefined;
168
+ emissive?: boolean | undefined;
169
+ }[];
170
+ anchors: {
171
+ id: string;
172
+ position: [number, number, number];
173
+ normal?: [number, number, number] | undefined;
174
+ }[];
175
+ lights: {
176
+ id: string;
177
+ position: [number, number, number];
178
+ color: string;
179
+ intensity: number;
180
+ distance?: number | undefined;
181
+ spot?: {
182
+ direction: [number, number, number];
183
+ angle: number;
184
+ softness: number;
185
+ } | undefined;
186
+ shadows?: boolean | undefined;
187
+ glow?: {
188
+ size: number;
189
+ strength: number;
190
+ } | undefined;
191
+ }[];
192
+ undersides: {
193
+ part?: string | undefined;
194
+ polygon: [number, number][];
195
+ plane: [number, number, number, number];
196
+ }[];
197
+ animations: {
198
+ name: string;
199
+ duration: number;
200
+ }[];
201
+ cutters?: {
202
+ host: "ceiling" | "mounted" | "slab" | "wall";
203
+ polygon: number[][];
204
+ minY: number;
205
+ maxY: number;
206
+ }[] | undefined;
207
+ cutout: boolean;
208
+ collider: boolean;
209
+ shape?: {
210
+ tolerance: number;
211
+ bands: {
212
+ y0: number;
213
+ y1: number;
214
+ polygons: {
215
+ outer: [number, number][];
216
+ holes?: [number, number][][] | undefined;
217
+ }[];
218
+ }[];
219
+ } | undefined;
220
+ triangles: number;
221
+ coverage?: number | undefined;
222
+ uncovered?: {
223
+ min: [number, number];
224
+ max: [number, number];
225
+ }[] | undefined;
226
+ };
227
+ images?: {
228
+ artifact: string;
229
+ thumbnail: string;
230
+ floorPlan: string;
220
231
  } | undefined;
221
232
  } | undefined;
222
- id: `duct-segment_${string}`;
223
- path: [number, number, number][];
224
- autoHangers?: boolean | undefined;
225
- hangerOverrides?: Record<string, {
226
- fraction?: number | undefined;
227
- skipped?: boolean | undefined;
228
- hostId?: string | undefined;
229
- }> | undefined;
230
- hangerStyle?: "double" | "single" | undefined;
231
- hangerSpacing?: number | undefined;
232
- hangerMaxReach?: number | undefined;
233
- wallAttachment?: {
234
- wallId: `wall_${string}`;
235
- side: "back" | "front";
236
- startUV: [number, number];
237
- endUV: [number, number];
238
- offset: number;
239
- } | undefined;
240
- shape: "oval" | "rect" | "round";
241
- diameter: number;
242
- width: number;
233
+ style: "cluster" | "dravidian-carved" | "faceted" | "fluted" | "lathe-turned" | "plain";
234
+ crossSection: "octagonal" | "rectangular" | "round" | "sixteen-sided" | "square";
243
235
  height: number;
244
- roll: number;
245
- ductMaterial: "duct-board" | "flex" | "sheet-metal" | "spiral";
246
- seamDetail: boolean;
247
- insulated: boolean;
248
- insulationR: number;
249
- system: "return" | "supply";
236
+ radius: number;
237
+ width: number;
238
+ depth: number;
239
+ edgeSoftness: number;
240
+ baseHeight: number;
241
+ capitalHeight: number;
242
+ shaftProfile: "baluster" | "bulged" | "hourglass" | "straight" | "tapered";
243
+ shaftTaper: number;
244
+ shaftBulge: number;
245
+ shaftStartScale: number;
246
+ shaftEndScale: number;
247
+ shaftSegmentCount: number;
248
+ shaftTwistStep: number;
249
+ shaftCornerRadius: number;
250
+ shaftDetail: "fluted" | "lathe-turned" | "none" | "panelled" | "spiral";
251
+ baseStyle: "lotus" | "none" | "panelled-pedestal" | "ribbed-lotus" | "round-rings" | "simple-square" | "square-plinth" | "stepped-square";
252
+ baseWidthScale: number;
253
+ baseDepthScale: number;
254
+ baseTierCount: number;
255
+ baseStepSpread: number;
256
+ basePlinthHeightRatio: number;
257
+ baseRoundBandScale: number;
258
+ baseNeckScale: number;
259
+ baseRoundBandCount: number;
260
+ baseRibCount: number;
261
+ baseCarvingLevel: number;
262
+ basePanelInset: number;
263
+ capitalStyle: "corinthian-leaf" | "doric" | "ionic-volute" | "leaf-carved" | "none" | "rounded" | "simple" | "simple-slab" | "south-indian-bracket" | "stepped" | "volute" | "wood-bracket";
264
+ capitalWidthScale: number;
265
+ capitalDepthScale: number;
266
+ capitalTierCount: number;
267
+ capitalStepSpread: number;
268
+ capitalBandCount: number;
269
+ voluteSize: number;
270
+ voluteCount: number;
271
+ leafCount: number;
272
+ leafRows: number;
273
+ bracketDepth: number;
274
+ bracketTierCount: number;
275
+ pendantCount: number;
276
+ capitalCarvingLevel: number;
277
+ ringCount: number;
278
+ ringPlacement: "bottom" | "ends" | "even" | "top";
279
+ ringThickness: number;
280
+ ringSpread: number;
281
+ fluteCount: number;
282
+ fluteDepth: number;
283
+ fluteWidth: number;
284
+ spiralTwist: number;
285
+ spiralRibCount: number;
286
+ panelCount: number;
287
+ panelInsetDepth: number;
288
+ panelShape: "arched" | "diamond" | "rectangle";
289
+ latheRingCount: number;
290
+ latheRingSpacing: "bottom" | "ends" | "even" | "top";
291
+ carvingLevel: number;
292
+ carvingPlacement: "all" | "base" | "capital" | "shaft";
293
+ lowerBandEnabled: boolean;
294
+ lowerBandHeight: number;
295
+ lowerBandCarvingLevel: number;
296
+ dentilCount: number;
297
+ beadCount: number;
298
+ supportStyle: "a-frame" | "box-frame" | "k-brace" | "portal-frame" | "single-strut" | "trestle" | "tripod" | "v-frame" | "vertical" | "x-brace" | "y-frame";
299
+ braceWidth: number;
300
+ braceDepth: number;
301
+ braceBottomSpread: number;
302
+ braceTopSpread: number;
303
+ bracePlateEnabled: boolean;
304
+ role?: "ornament" | "post" | undefined;
305
+ postBase?: "none" | "pier" | "post-base" | undefined;
306
+ material?: {
307
+ id?: string | undefined;
308
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
309
+ properties?: {
310
+ color: string;
311
+ roughness: number;
312
+ metalness: number;
313
+ opacity: number;
314
+ transparent: boolean;
315
+ side: "back" | "double" | "front";
316
+ } | undefined;
317
+ texture?: {
318
+ url: string;
319
+ repeat?: [number, number] | undefined;
320
+ scale?: number | undefined;
321
+ offset?: [number, number] | undefined;
322
+ normalMap?: string | undefined;
323
+ normalScale?: number | undefined;
324
+ bumpMap?: string | undefined;
325
+ bumpScale?: number | undefined;
326
+ } | undefined;
327
+ } | undefined;
328
+ materialPreset?: string | undefined;
250
329
  slots?: Record<string, string> | undefined;
251
- type: "duct-segment";
330
+ type: "column";
252
331
  } | {
253
332
  object: "node";
254
333
  name?: string | undefined;
@@ -273,18 +352,29 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
273
352
  fromIds: string[];
274
353
  } | undefined;
275
354
  } | undefined;
276
- id: `floor-opening_${string}`;
277
- polygon: [number, number][];
278
- hostZoneId?: string | undefined;
279
- legacyPlateCuts?: Record<string, [number, number][][]> | undefined;
280
- legacyCeilingCuts?: Record<string, [number, number][][]> | undefined;
281
- source: string;
282
- ownerId?: string | undefined;
283
- surfaceId?: string | undefined;
284
- drawnOn: "ceiling" | "floor";
285
- cutsPrimary: boolean;
286
- cutsAdjacent: boolean;
287
- type: "floor-opening";
355
+ id: `duct-fitting_${string}`;
356
+ position: [number, number, number];
357
+ rotation: [number, number, number];
358
+ fittingType: "access-panel" | "coupling" | "cross" | "damper" | "elbow" | "end-cap" | "reducer" | "tee" | "transition";
359
+ shape: "oval" | "rect" | "round";
360
+ inletShape?: "oval" | "rect" | "round" | undefined;
361
+ outletShape?: "oval" | "rect" | "round" | undefined;
362
+ width: number;
363
+ height: number;
364
+ shape2: "oval" | "rect" | "round";
365
+ width2: number;
366
+ height2: number;
367
+ angle: number;
368
+ branchAngle: number;
369
+ diameter: number;
370
+ diameter2: number;
371
+ ductMaterial: "duct-board" | "flex" | "sheet-metal";
372
+ system: "return" | "supply";
373
+ damperAngle: number;
374
+ panelWidth: number;
375
+ panelHeight: number;
376
+ slots?: Record<string, string> | undefined;
377
+ type: "duct-fitting";
288
378
  } | {
289
379
  object: "node";
290
380
  name?: string | undefined;
@@ -309,12 +399,23 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
309
399
  fromIds: string[];
310
400
  } | undefined;
311
401
  } | undefined;
312
- id: `lineset_${string}`;
313
- path: [number, number, number][];
314
- suctionDiameter: number;
315
- liquidDiameter: number;
316
- insulated: boolean;
317
- type: "lineset";
402
+ id: `hvac-equipment_${string}`;
403
+ position: [number, number, number];
404
+ rotation: number;
405
+ supportSlabId?: string | undefined;
406
+ equipmentType: "air-handler" | "condenser" | "furnace";
407
+ width: number;
408
+ depth: number;
409
+ height: number;
410
+ supplyShape: "oval" | "rect" | "round";
411
+ returnShape: "oval" | "rect" | "round";
412
+ supplyDiameter: number;
413
+ returnDiameter: number;
414
+ supplyWidth: number;
415
+ supplyHeight: number;
416
+ returnWidth: number;
417
+ returnHeight: number;
418
+ type: "hvac-equipment";
318
419
  } | {
319
420
  object: "node";
320
421
  name?: string | undefined;
@@ -339,13 +440,17 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
339
440
  fromIds: string[];
340
441
  } | undefined;
341
442
  } | undefined;
342
- id: `pipe-trap_${string}`;
443
+ id: `pipe-fitting_${string}`;
343
444
  position: [number, number, number];
344
- rotation: number;
445
+ rotation: [number, number, number];
446
+ fittingType: "cleanout" | "coupling" | "cross" | "elbow" | "end-cap" | "reducer" | "sanitary-tee" | "wye";
447
+ angle: number;
345
448
  diameter: number;
449
+ diameter2: number;
450
+ cleanoutStyle: "end" | "inline";
346
451
  pipeMaterial: "abs" | "cast-iron" | "pvc";
347
- armLengthM: number;
348
- type: "pipe-trap";
452
+ system: "vent" | "waste";
453
+ type: "pipe-fitting";
349
454
  } | {
350
455
  object: "node";
351
456
  name?: string | undefined;
@@ -386,6 +491,11 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
386
491
  url: string;
387
492
  repeat?: [number, number] | undefined;
388
493
  scale?: number | undefined;
494
+ offset?: [number, number] | undefined;
495
+ normalMap?: string | undefined;
496
+ normalScale?: number | undefined;
497
+ bumpMap?: string | undefined;
498
+ bumpScale?: number | undefined;
389
499
  } | undefined;
390
500
  } | undefined;
391
501
  materialPreset?: string | undefined;
@@ -404,6 +514,11 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
404
514
  url: string;
405
515
  repeat?: [number, number] | undefined;
406
516
  scale?: number | undefined;
517
+ offset?: [number, number] | undefined;
518
+ normalMap?: string | undefined;
519
+ normalScale?: number | undefined;
520
+ bumpMap?: string | undefined;
521
+ bumpScale?: number | undefined;
407
522
  } | undefined;
408
523
  } | undefined;
409
524
  topMaterialPreset?: string | undefined;
@@ -422,6 +537,11 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
422
537
  url: string;
423
538
  repeat?: [number, number] | undefined;
424
539
  scale?: number | undefined;
540
+ offset?: [number, number] | undefined;
541
+ normalMap?: string | undefined;
542
+ normalScale?: number | undefined;
543
+ bumpMap?: string | undefined;
544
+ bumpScale?: number | undefined;
425
545
  } | undefined;
426
546
  } | undefined;
427
547
  edgeMaterialPreset?: string | undefined;
@@ -440,6 +560,11 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
440
560
  url: string;
441
561
  repeat?: [number, number] | undefined;
442
562
  scale?: number | undefined;
563
+ offset?: [number, number] | undefined;
564
+ normalMap?: string | undefined;
565
+ normalScale?: number | undefined;
566
+ bumpMap?: string | undefined;
567
+ bumpScale?: number | undefined;
443
568
  } | undefined;
444
569
  } | undefined;
445
570
  wallMaterialPreset?: string | undefined;
@@ -509,6 +634,39 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
509
634
  overhang: number;
510
635
  gableOverhang?: number | undefined;
511
636
  shingleThickness: number;
637
+ buildUp?: {
638
+ presetId?: string | undefined;
639
+ roofing: {
640
+ kind: "architectural-shingle" | "asphalt-3-tab" | "clay-tile" | "concrete-tile" | "slate" | "standing-seam-metal" | "wood-shake";
641
+ thickness: number;
642
+ name?: string | undefined;
643
+ };
644
+ underlayment?: {
645
+ kind: "felt-15" | "felt-30" | "ice-and-water" | "synthetic";
646
+ thickness: number;
647
+ name?: string | undefined;
648
+ } | undefined;
649
+ sheathing: {
650
+ kind: "osb" | "plywood";
651
+ thickness: number;
652
+ name?: string | undefined;
653
+ };
654
+ structure: {
655
+ system: "rafters" | "trusses";
656
+ size: "2x10" | "2x12" | "2x4" | "2x6" | "2x8";
657
+ spacing: number;
658
+ };
659
+ insulation?: {
660
+ kind: "batt" | "blown" | "rigid";
661
+ thickness: number;
662
+ name?: string | undefined;
663
+ } | undefined;
664
+ finish?: {
665
+ kind: "drywall" | "plaster" | "wood-plank";
666
+ thickness: number;
667
+ name?: string | undefined;
668
+ } | undefined;
669
+ } | undefined;
512
670
  arc?: {
513
671
  centerX: number;
514
672
  centerZ: number;
@@ -530,6 +688,7 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
530
688
  wallShell: "auto" | "include" | "omit";
531
689
  shedInsetEndPanels: boolean;
532
690
  fascia?: boolean | undefined;
691
+ eaveCut?: "plumb" | "plumb-level" | "square" | undefined;
533
692
  fasciaHighEdge?: boolean | undefined;
534
693
  fasciaHeight?: number | undefined;
535
694
  fasciaDepth?: number | undefined;
@@ -548,9 +707,83 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
548
707
  url: string;
549
708
  repeat?: [number, number] | undefined;
550
709
  scale?: number | undefined;
710
+ offset?: [number, number] | undefined;
711
+ normalMap?: string | undefined;
712
+ normalScale?: number | undefined;
713
+ bumpMap?: string | undefined;
714
+ bumpScale?: number | undefined;
551
715
  } | undefined;
552
716
  } | undefined;
553
717
  fasciaMaterialPreset?: string | undefined;
718
+ heelMaterial?: {
719
+ id?: string | undefined;
720
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
721
+ properties?: {
722
+ color: string;
723
+ roughness: number;
724
+ metalness: number;
725
+ opacity: number;
726
+ transparent: boolean;
727
+ side: "back" | "double" | "front";
728
+ } | undefined;
729
+ texture?: {
730
+ url: string;
731
+ repeat?: [number, number] | undefined;
732
+ scale?: number | undefined;
733
+ offset?: [number, number] | undefined;
734
+ normalMap?: string | undefined;
735
+ normalScale?: number | undefined;
736
+ bumpMap?: string | undefined;
737
+ bumpScale?: number | undefined;
738
+ } | undefined;
739
+ } | undefined;
740
+ heelMaterialPreset?: string | undefined;
741
+ gableLeftMaterial?: {
742
+ id?: string | undefined;
743
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
744
+ properties?: {
745
+ color: string;
746
+ roughness: number;
747
+ metalness: number;
748
+ opacity: number;
749
+ transparent: boolean;
750
+ side: "back" | "double" | "front";
751
+ } | undefined;
752
+ texture?: {
753
+ url: string;
754
+ repeat?: [number, number] | undefined;
755
+ scale?: number | undefined;
756
+ offset?: [number, number] | undefined;
757
+ normalMap?: string | undefined;
758
+ normalScale?: number | undefined;
759
+ bumpMap?: string | undefined;
760
+ bumpScale?: number | undefined;
761
+ } | undefined;
762
+ } | undefined;
763
+ gableLeftMaterialPreset?: string | undefined;
764
+ gableRightMaterial?: {
765
+ id?: string | undefined;
766
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
767
+ properties?: {
768
+ color: string;
769
+ roughness: number;
770
+ metalness: number;
771
+ opacity: number;
772
+ transparent: boolean;
773
+ side: "back" | "double" | "front";
774
+ } | undefined;
775
+ texture?: {
776
+ url: string;
777
+ repeat?: [number, number] | undefined;
778
+ scale?: number | undefined;
779
+ offset?: [number, number] | undefined;
780
+ normalMap?: string | undefined;
781
+ normalScale?: number | undefined;
782
+ bumpMap?: string | undefined;
783
+ bumpScale?: number | undefined;
784
+ } | undefined;
785
+ } | undefined;
786
+ gableRightMaterialPreset?: string | undefined;
554
787
  gambrelLowerWidthRatio: number;
555
788
  gambrelLowerHeightRatio: number;
556
789
  mansardSteepWidthRatio: number;
@@ -586,35 +819,7 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
586
819
  fromIds: string[];
587
820
  } | undefined;
588
821
  } | undefined;
589
- id: `separator_${string}`;
590
- start: [number, number];
591
- end: [number, number];
592
- type: "separator";
593
- } | {
594
- object: "node";
595
- name?: string | undefined;
596
- parentId: string | null;
597
- visible: boolean;
598
- camera?: {
599
- position: [number, number, number];
600
- target: [number, number, number];
601
- mode: "orthographic" | "perspective";
602
- fov?: number | undefined;
603
- zoom?: number | undefined;
604
- } | undefined;
605
- metadata: Record<string, unknown>;
606
- provenance?: {
607
- refs: {
608
- ns?: string | undefined;
609
- id: string;
610
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
611
- }[];
612
- lineage?: {
613
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
614
- fromIds: string[];
615
- } | undefined;
616
- } | undefined;
617
- id: `sseg_${string}`;
822
+ id: `roof_${string}`;
618
823
  material?: {
619
824
  id?: string | undefined;
620
825
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
@@ -630,64 +835,15 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
630
835
  url: string;
631
836
  repeat?: [number, number] | undefined;
632
837
  scale?: number | undefined;
838
+ offset?: [number, number] | undefined;
839
+ normalMap?: string | undefined;
840
+ normalScale?: number | undefined;
841
+ bumpMap?: string | undefined;
842
+ bumpScale?: number | undefined;
633
843
  } | undefined;
634
844
  } | undefined;
635
845
  materialPreset?: string | undefined;
636
- slots?: Record<string, string> | undefined;
637
- position: [number, number, number];
638
- rotation: number;
639
- segmentType: "landing" | "stair";
640
- width: number;
641
- length: number;
642
- height: number;
643
- stepCount: number;
644
- attachmentSide: "front" | "left" | "right";
645
- fillToFloor: boolean;
646
- construction?: {
647
- mode: "center-stringer" | "open" | "side-stringers" | "solid" | "waist";
648
- waistThickness: number;
649
- treadThickness: number;
650
- riserThickness: number;
651
- nosing: number;
652
- finishThickness: number;
653
- closedRisers: boolean;
654
- stringerWidth: number;
655
- stringerDepth: number;
656
- } | undefined;
657
- winder?: {
658
- turn: "left" | "right";
659
- innerGap: number;
660
- walkingLineOffset: number;
661
- division: "equal-angle" | "equal-going";
662
- } | undefined;
663
- thickness: number;
664
- type: "stair-segment";
665
- } | {
666
- object: "node";
667
- name?: string | undefined;
668
- parentId: string | null;
669
- visible: boolean;
670
- camera?: {
671
- position: [number, number, number];
672
- target: [number, number, number];
673
- mode: "orthographic" | "perspective";
674
- fov?: number | undefined;
675
- zoom?: number | undefined;
676
- } | undefined;
677
- metadata: Record<string, unknown>;
678
- provenance?: {
679
- refs: {
680
- ns?: string | undefined;
681
- id: string;
682
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
683
- }[];
684
- lineage?: {
685
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
686
- fromIds: string[];
687
- } | undefined;
688
- } | undefined;
689
- id: `stair_${string}`;
690
- material?: {
846
+ topMaterial?: {
691
847
  id?: string | undefined;
692
848
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
693
849
  properties?: {
@@ -702,10 +858,15 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
702
858
  url: string;
703
859
  repeat?: [number, number] | undefined;
704
860
  scale?: number | undefined;
861
+ offset?: [number, number] | undefined;
862
+ normalMap?: string | undefined;
863
+ normalScale?: number | undefined;
864
+ bumpMap?: string | undefined;
865
+ bumpScale?: number | undefined;
705
866
  } | undefined;
706
867
  } | undefined;
707
- materialPreset?: string | undefined;
708
- railingMaterial?: {
868
+ topMaterialPreset?: string | undefined;
869
+ edgeMaterial?: {
709
870
  id?: string | undefined;
710
871
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
711
872
  properties?: {
@@ -720,10 +881,15 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
720
881
  url: string;
721
882
  repeat?: [number, number] | undefined;
722
883
  scale?: number | undefined;
884
+ offset?: [number, number] | undefined;
885
+ normalMap?: string | undefined;
886
+ normalScale?: number | undefined;
887
+ bumpMap?: string | undefined;
888
+ bumpScale?: number | undefined;
723
889
  } | undefined;
724
890
  } | undefined;
725
- railingMaterialPreset?: string | undefined;
726
- treadMaterial?: {
891
+ edgeMaterialPreset?: string | undefined;
892
+ wallMaterial?: {
727
893
  id?: string | undefined;
728
894
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
729
895
  properties?: {
@@ -738,10 +904,15 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
738
904
  url: string;
739
905
  repeat?: [number, number] | undefined;
740
906
  scale?: number | undefined;
907
+ offset?: [number, number] | undefined;
908
+ normalMap?: string | undefined;
909
+ normalScale?: number | undefined;
910
+ bumpMap?: string | undefined;
911
+ bumpScale?: number | undefined;
741
912
  } | undefined;
742
913
  } | undefined;
743
- treadMaterialPreset?: string | undefined;
744
- sideMaterial?: {
914
+ wallMaterialPreset?: string | undefined;
915
+ heelMaterial?: {
745
916
  id?: string | undefined;
746
917
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
747
918
  properties?: {
@@ -756,75 +927,129 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
756
927
  url: string;
757
928
  repeat?: [number, number] | undefined;
758
929
  scale?: number | undefined;
930
+ offset?: [number, number] | undefined;
931
+ normalMap?: string | undefined;
932
+ normalScale?: number | undefined;
933
+ bumpMap?: string | undefined;
934
+ bumpScale?: number | undefined;
759
935
  } | undefined;
760
936
  } | undefined;
761
- sideMaterialPreset?: string | undefined;
762
- slots?: Record<string, string> | undefined;
937
+ heelMaterialPreset?: string | undefined;
763
938
  position: [number, number, number];
764
939
  rotation: number;
940
+ support: {
941
+ kind: "level";
942
+ } | {
943
+ kind: "walls";
944
+ } | {
945
+ kind: "roof";
946
+ roofSegmentId: `rseg_${string}`;
947
+ localPosition: [number, number];
948
+ curbHeight: number;
949
+ };
950
+ assembly?: {
951
+ layers: {
952
+ id: string;
953
+ role: "air" | "covering" | "deck" | "fill" | "finish" | "furring" | "glazing" | "insulation" | "lining" | "membrane" | "sheathing" | "shell" | "structure" | "substrate" | "underlay";
954
+ thickness: number;
955
+ core?: true | undefined;
956
+ spacing?: number | undefined;
957
+ material?: string | undefined;
958
+ slot?: string | undefined;
959
+ returns?: boolean | undefined;
960
+ display?: "construction" | "finished" | undefined;
961
+ inset?: number | undefined;
962
+ bottom?: number | undefined;
963
+ lift?: number | undefined;
964
+ src?: string | undefined;
965
+ }[];
966
+ backing?: {
967
+ id: string;
968
+ role: "air" | "covering" | "deck" | "fill" | "finish" | "furring" | "glazing" | "insulation" | "lining" | "membrane" | "sheathing" | "shell" | "structure" | "substrate" | "underlay";
969
+ thickness: number;
970
+ core?: true | undefined;
971
+ spacing?: number | undefined;
972
+ material?: string | undefined;
973
+ slot?: string | undefined;
974
+ returns?: boolean | undefined;
975
+ display?: "construction" | "finished" | undefined;
976
+ inset?: number | undefined;
977
+ bottom?: number | undefined;
978
+ lift?: number | undefined;
979
+ src?: string | undefined;
980
+ }[] | undefined;
981
+ face?: "exterior" | "front" | undefined;
982
+ presetId?: string | undefined;
983
+ cavityInsulation?: string | undefined;
984
+ } | undefined;
985
+ slots?: Record<string, string> | undefined;
986
+ children: `rseg_${string}`[];
987
+ type: "roof";
988
+ } | {
989
+ object: "node";
990
+ name?: string | undefined;
991
+ parentId: string | null;
992
+ visible: boolean;
993
+ camera?: {
994
+ position: [number, number, number];
995
+ target: [number, number, number];
996
+ mode: "orthographic" | "perspective";
997
+ fov?: number | undefined;
998
+ zoom?: number | undefined;
999
+ } | undefined;
1000
+ metadata: Record<string, unknown>;
1001
+ provenance?: {
1002
+ refs: {
1003
+ ns?: string | undefined;
1004
+ id: string;
1005
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
1006
+ }[];
1007
+ lineage?: {
1008
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
1009
+ fromIds: string[];
1010
+ } | undefined;
1011
+ } | undefined;
1012
+ id: `shelf_${string}`;
1013
+ children: string[];
1014
+ position: [number, number, number];
1015
+ rotation: [number, number, number];
765
1016
  supportSlabId?: string | undefined;
766
- stairType: "curved" | "spiral" | "straight";
767
- fromLevelId: string | null;
768
- toLevelId: string | null;
769
- deckSlabId?: string | undefined;
770
- slabOpeningMode: "destination" | "none";
771
- openingOffset: number;
772
1017
  width: number;
773
- totalRise?: number | undefined;
774
- designTargets?: {
775
- maxRiserHeight: number;
776
- minimumGoing: number;
777
- targetGoing: number;
778
- minimumHeadroom: number;
779
- } | undefined;
780
- uniformRisers?: boolean | undefined;
781
- stepCount: number;
782
- autoSurfaceSnap?: boolean | undefined;
783
- destinationSurfaceId?: string | undefined;
1018
+ depth: number;
784
1019
  thickness: number;
785
- fillToFloor: boolean;
786
- construction?: {
787
- mode: "center-stringer" | "open" | "side-stringers" | "solid" | "waist";
788
- waistThickness: number;
789
- treadThickness: number;
790
- riserThickness: number;
791
- nosing: number;
792
- finishThickness: number;
793
- closedRisers: boolean;
794
- stringerWidth: number;
795
- stringerDepth: number;
796
- } | undefined;
797
- innerRadius: number;
798
- sweepAngle: number;
799
- topLandingMode: "integrated" | "none";
800
- topLandingDepth: number;
801
- showCenterColumn: boolean;
802
- showStepSupports: boolean;
803
- railingMode: "both" | "left" | "none" | "right";
804
- railingHeight: number;
805
- railingStyle?: "balusters" | "boards" | "cable" | "glass" | "metal" | "post-and-rail" | undefined;
806
- railingPath?: "continuous" | "original" | undefined;
807
- handrail?: {
808
- mode: "both" | "left" | "none" | "right";
809
- height: number;
810
- diameter: number;
811
- offset: number;
812
- bottom?: {
813
- extension: number;
814
- return: "floor" | "none" | "post" | "wall";
815
- returnLength: number;
1020
+ height: number;
1021
+ style: "bookshelf" | "cubby" | "open-rack" | "wall-shelf";
1022
+ rows: number;
1023
+ columns: number;
1024
+ withBack: boolean;
1025
+ withSides: boolean;
1026
+ withBottom: boolean;
1027
+ bracketStyle: "hidden" | "industrial" | "minimal";
1028
+ material?: {
1029
+ id?: string | undefined;
1030
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1031
+ properties?: {
1032
+ color: string;
1033
+ roughness: number;
1034
+ metalness: number;
1035
+ opacity: number;
1036
+ transparent: boolean;
1037
+ side: "back" | "double" | "front";
816
1038
  } | undefined;
817
- top?: {
818
- extension: number;
819
- return: "floor" | "none" | "post" | "wall";
820
- returnLength: number;
1039
+ texture?: {
1040
+ url: string;
1041
+ repeat?: [number, number] | undefined;
1042
+ scale?: number | undefined;
1043
+ offset?: [number, number] | undefined;
1044
+ normalMap?: string | undefined;
1045
+ normalScale?: number | undefined;
1046
+ bumpMap?: string | undefined;
1047
+ bumpScale?: number | undefined;
821
1048
  } | undefined;
822
1049
  } | undefined;
823
- railingTopPost?: boolean | undefined;
824
- railingTopReach?: number | undefined;
825
- railingPostThrough?: boolean | undefined;
826
- children: `sseg_${string}`[];
827
- type: "stair";
1050
+ materialPreset?: string | undefined;
1051
+ slots?: Record<string, string> | undefined;
1052
+ type: "shelf";
828
1053
  } | {
829
1054
  object: "node";
830
1055
  name?: string | undefined;
@@ -849,11 +1074,30 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
849
1074
  fromIds: string[];
850
1075
  } | undefined;
851
1076
  } | undefined;
852
- id: `column_${string}`;
853
- children: string[];
854
- position: [number, number, number];
855
- rotation: number;
856
- supportSlabId?: string | undefined;
1077
+ id: `door_${string}`;
1078
+ material?: {
1079
+ id?: string | undefined;
1080
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1081
+ properties?: {
1082
+ color: string;
1083
+ roughness: number;
1084
+ metalness: number;
1085
+ opacity: number;
1086
+ transparent: boolean;
1087
+ side: "back" | "double" | "front";
1088
+ } | undefined;
1089
+ texture?: {
1090
+ url: string;
1091
+ repeat?: [number, number] | undefined;
1092
+ scale?: number | undefined;
1093
+ offset?: [number, number] | undefined;
1094
+ normalMap?: string | undefined;
1095
+ normalScale?: number | undefined;
1096
+ bumpMap?: string | undefined;
1097
+ bumpScale?: number | undefined;
1098
+ } | undefined;
1099
+ } | undefined;
1100
+ slots?: Record<string, string> | undefined;
857
1101
  source?: {
858
1102
  kind: "script";
859
1103
  meta?: {
@@ -916,7 +1160,17 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
916
1160
  color: string;
917
1161
  intensity: number;
918
1162
  distance?: number | undefined;
919
- }[];
1163
+ spot?: {
1164
+ direction: [number, number, number];
1165
+ angle: number;
1166
+ softness: number;
1167
+ } | undefined;
1168
+ shadows?: boolean | undefined;
1169
+ glow?: {
1170
+ size: number;
1171
+ strength: number;
1172
+ } | undefined;
1173
+ }[];
920
1174
  undersides: {
921
1175
  part?: string | undefined;
922
1176
  polygon: [number, number][];
@@ -934,6 +1188,17 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
934
1188
  }[] | undefined;
935
1189
  cutout: boolean;
936
1190
  collider: boolean;
1191
+ shape?: {
1192
+ tolerance: number;
1193
+ bands: {
1194
+ y0: number;
1195
+ y1: number;
1196
+ polygons: {
1197
+ outer: [number, number][];
1198
+ holes?: [number, number][][] | undefined;
1199
+ }[];
1200
+ }[];
1201
+ } | undefined;
937
1202
  triangles: number;
938
1203
  coverage?: number | undefined;
939
1204
  uncovered?: {
@@ -947,98 +1212,72 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
947
1212
  floorPlan: string;
948
1213
  } | undefined;
949
1214
  } | undefined;
950
- style: "cluster" | "dravidian-carved" | "faceted" | "fluted" | "lathe-turned" | "plain";
951
- crossSection: "octagonal" | "rectangular" | "round" | "sixteen-sided" | "square";
952
- height: number;
953
- radius: number;
1215
+ position: [number, number, number];
1216
+ rotation: [number, number, number];
1217
+ side?: "back" | "front" | undefined;
1218
+ verticalAnchor?: "floor" | "wall" | undefined;
1219
+ floorThresholdVersion: 0 | 1;
1220
+ wallId?: string | undefined;
1221
+ roofSegmentId?: string | undefined;
1222
+ roofFace?: "back" | "front" | "left" | "right" | undefined;
954
1223
  width: number;
955
- depth: number;
956
- edgeSoftness: number;
957
- baseHeight: number;
958
- capitalHeight: number;
959
- shaftProfile: "baluster" | "bulged" | "hourglass" | "straight" | "tapered";
960
- shaftTaper: number;
961
- shaftBulge: number;
962
- shaftStartScale: number;
963
- shaftEndScale: number;
964
- shaftSegmentCount: number;
965
- shaftTwistStep: number;
966
- shaftCornerRadius: number;
967
- shaftDetail: "fluted" | "lathe-turned" | "none" | "panelled" | "spiral";
968
- baseStyle: "lotus" | "none" | "panelled-pedestal" | "ribbed-lotus" | "round-rings" | "simple-square" | "square-plinth" | "stepped-square";
969
- baseWidthScale: number;
970
- baseDepthScale: number;
971
- baseTierCount: number;
972
- baseStepSpread: number;
973
- basePlinthHeightRatio: number;
974
- baseRoundBandScale: number;
975
- baseNeckScale: number;
976
- baseRoundBandCount: number;
977
- baseRibCount: number;
978
- baseCarvingLevel: number;
979
- basePanelInset: number;
980
- capitalStyle: "corinthian-leaf" | "doric" | "ionic-volute" | "leaf-carved" | "none" | "rounded" | "simple" | "simple-slab" | "south-indian-bracket" | "stepped" | "volute" | "wood-bracket";
981
- capitalWidthScale: number;
982
- capitalDepthScale: number;
983
- capitalTierCount: number;
984
- capitalStepSpread: number;
985
- capitalBandCount: number;
986
- voluteSize: number;
987
- voluteCount: number;
988
- leafCount: number;
989
- leafRows: number;
990
- bracketDepth: number;
991
- bracketTierCount: number;
992
- pendantCount: number;
993
- capitalCarvingLevel: number;
994
- ringCount: number;
995
- ringPlacement: "bottom" | "ends" | "even" | "top";
996
- ringThickness: number;
997
- ringSpread: number;
998
- fluteCount: number;
999
- fluteDepth: number;
1000
- fluteWidth: number;
1001
- spiralTwist: number;
1002
- spiralRibCount: number;
1003
- panelCount: number;
1004
- panelInsetDepth: number;
1005
- panelShape: "arched" | "diamond" | "rectangle";
1006
- latheRingCount: number;
1007
- latheRingSpacing: "bottom" | "ends" | "even" | "top";
1008
- carvingLevel: number;
1009
- carvingPlacement: "all" | "base" | "capital" | "shaft";
1010
- lowerBandEnabled: boolean;
1011
- lowerBandHeight: number;
1012
- lowerBandCarvingLevel: number;
1013
- dentilCount: number;
1014
- beadCount: number;
1015
- supportStyle: "a-frame" | "box-frame" | "k-brace" | "portal-frame" | "single-strut" | "trestle" | "tripod" | "v-frame" | "vertical" | "x-brace" | "y-frame";
1016
- braceWidth: number;
1017
- braceDepth: number;
1018
- braceBottomSpread: number;
1019
- braceTopSpread: number;
1020
- bracePlateEnabled: boolean;
1021
- role?: "ornament" | undefined;
1022
- material?: {
1023
- id?: string | undefined;
1024
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1025
- properties?: {
1026
- color: string;
1027
- roughness: number;
1028
- metalness: number;
1029
- opacity: number;
1030
- transparent: boolean;
1031
- side: "back" | "double" | "front";
1032
- } | undefined;
1033
- texture?: {
1034
- url: string;
1035
- repeat?: [number, number] | undefined;
1036
- scale?: number | undefined;
1037
- } | undefined;
1038
- } | undefined;
1039
- materialPreset?: string | undefined;
1040
- slots?: Record<string, string> | undefined;
1041
- type: "column";
1224
+ height: number;
1225
+ sidelightLeft?: number | undefined;
1226
+ sidelightRight?: number | undefined;
1227
+ transomHeight?: number | undefined;
1228
+ slidingStyle?: "bypass" | "patio" | undefined;
1229
+ mark?: string | undefined;
1230
+ constructionType: "framed" | "masonry";
1231
+ dimensionReference: "finish-opening" | "masonry-opening" | "nominal" | "rough-opening";
1232
+ roughOpeningWidth?: number | undefined;
1233
+ roughOpeningHeight?: number | undefined;
1234
+ masonryOpeningWidth?: number | undefined;
1235
+ masonryOpeningHeight?: number | undefined;
1236
+ finishOpeningWidth?: number | undefined;
1237
+ finishOpeningHeight?: number | undefined;
1238
+ doorCategory: "garage" | "interior";
1239
+ doorType: "barn" | "double" | "folding" | "french" | "garage-rollup" | "garage-sectional" | "garage-tiltup" | "hinged" | "pocket" | "sliding";
1240
+ leafCount: 1 | 2 | 3 | 4 | 6 | 8;
1241
+ operationState: number;
1242
+ slideDirection: "left" | "right";
1243
+ trackStyle: "none" | "overhead" | "pocket" | "visible";
1244
+ garagePanelCount: number;
1245
+ openingKind: "door" | "opening";
1246
+ openingShape: "arch" | "rectangle" | "rounded";
1247
+ openingRadiusMode: "all" | "individual";
1248
+ openingTopRadii: [number, number];
1249
+ cornerRadius: number;
1250
+ archHeight: number;
1251
+ openingRevealRadius: number;
1252
+ frameThickness: number;
1253
+ frameDepth?: number | undefined;
1254
+ threshold: boolean;
1255
+ thresholdHeight: number;
1256
+ casingFaceA?: boolean | undefined;
1257
+ casingFaceB?: boolean | undefined;
1258
+ casingWidth?: number | undefined;
1259
+ hingesSide: "left" | "right";
1260
+ swingDirection: "inward" | "outward";
1261
+ swingAngle: number;
1262
+ segments: {
1263
+ type: "empty" | "glass" | "panel";
1264
+ heightRatio: number;
1265
+ columnRatios: number[];
1266
+ dividerThickness: number;
1267
+ panelDepth: number;
1268
+ panelInset: number;
1269
+ }[];
1270
+ handle: boolean;
1271
+ handleStyle?: "bar" | "knob" | "lever" | "lever-curved" | "plate" | undefined;
1272
+ handleHeight: number;
1273
+ handleSide: "left" | "right";
1274
+ contentPadding: [number, number];
1275
+ doorCloser: boolean;
1276
+ panicBar: boolean;
1277
+ panicBarStyle: "crossbar" | "touchbar";
1278
+ panicBarRods: boolean;
1279
+ panicBarHeight: number;
1280
+ type: "door";
1042
1281
  } | {
1043
1282
  object: "node";
1044
1283
  name?: string | undefined;
@@ -1063,343 +1302,8 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
1063
1302
  fromIds: string[];
1064
1303
  } | undefined;
1065
1304
  } | undefined;
1066
- id: `roof_${string}`;
1067
- material?: {
1068
- id?: string | undefined;
1069
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1070
- properties?: {
1071
- color: string;
1072
- roughness: number;
1073
- metalness: number;
1074
- opacity: number;
1075
- transparent: boolean;
1076
- side: "back" | "double" | "front";
1077
- } | undefined;
1078
- texture?: {
1079
- url: string;
1080
- repeat?: [number, number] | undefined;
1081
- scale?: number | undefined;
1082
- } | undefined;
1083
- } | undefined;
1084
- materialPreset?: string | undefined;
1085
- topMaterial?: {
1086
- id?: string | undefined;
1087
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1088
- properties?: {
1089
- color: string;
1090
- roughness: number;
1091
- metalness: number;
1092
- opacity: number;
1093
- transparent: boolean;
1094
- side: "back" | "double" | "front";
1095
- } | undefined;
1096
- texture?: {
1097
- url: string;
1098
- repeat?: [number, number] | undefined;
1099
- scale?: number | undefined;
1100
- } | undefined;
1101
- } | undefined;
1102
- topMaterialPreset?: string | undefined;
1103
- edgeMaterial?: {
1104
- id?: string | undefined;
1105
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1106
- properties?: {
1107
- color: string;
1108
- roughness: number;
1109
- metalness: number;
1110
- opacity: number;
1111
- transparent: boolean;
1112
- side: "back" | "double" | "front";
1113
- } | undefined;
1114
- texture?: {
1115
- url: string;
1116
- repeat?: [number, number] | undefined;
1117
- scale?: number | undefined;
1118
- } | undefined;
1119
- } | undefined;
1120
- edgeMaterialPreset?: string | undefined;
1121
- wallMaterial?: {
1122
- id?: string | undefined;
1123
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1124
- properties?: {
1125
- color: string;
1126
- roughness: number;
1127
- metalness: number;
1128
- opacity: number;
1129
- transparent: boolean;
1130
- side: "back" | "double" | "front";
1131
- } | undefined;
1132
- texture?: {
1133
- url: string;
1134
- repeat?: [number, number] | undefined;
1135
- scale?: number | undefined;
1136
- } | undefined;
1137
- } | undefined;
1138
- wallMaterialPreset?: string | undefined;
1139
- position: [number, number, number];
1140
- rotation: number;
1141
- support: {
1142
- kind: "level";
1143
- } | {
1144
- kind: "walls";
1145
- } | {
1146
- kind: "roof";
1147
- roofSegmentId: `rseg_${string}`;
1148
- localPosition: [number, number];
1149
- curbHeight: number;
1150
- };
1151
- assembly?: {
1152
- layers: {
1153
- id: string;
1154
- role: "air" | "covering" | "deck" | "fill" | "finish" | "furring" | "glazing" | "insulation" | "lining" | "membrane" | "sheathing" | "shell" | "structure" | "substrate" | "underlay";
1155
- thickness: number;
1156
- core?: true | undefined;
1157
- material?: string | undefined;
1158
- slot?: string | undefined;
1159
- returns?: boolean | undefined;
1160
- display?: "construction" | "finished" | undefined;
1161
- inset?: number | undefined;
1162
- bottom?: number | undefined;
1163
- lift?: number | undefined;
1164
- src?: string | undefined;
1165
- }[];
1166
- backing?: {
1167
- id: string;
1168
- role: "air" | "covering" | "deck" | "fill" | "finish" | "furring" | "glazing" | "insulation" | "lining" | "membrane" | "sheathing" | "shell" | "structure" | "substrate" | "underlay";
1169
- thickness: number;
1170
- core?: true | undefined;
1171
- material?: string | undefined;
1172
- slot?: string | undefined;
1173
- returns?: boolean | undefined;
1174
- display?: "construction" | "finished" | undefined;
1175
- inset?: number | undefined;
1176
- bottom?: number | undefined;
1177
- lift?: number | undefined;
1178
- src?: string | undefined;
1179
- }[] | undefined;
1180
- face?: "exterior" | "front" | undefined;
1181
- presetId?: string | undefined;
1182
- cavityInsulation?: string | undefined;
1183
- } | undefined;
1184
- slots?: Record<string, string> | undefined;
1185
- children: `rseg_${string}`[];
1186
- type: "roof";
1187
- } | {
1188
- object: "node";
1189
- name?: string | undefined;
1190
- parentId: string | null;
1191
- visible: boolean;
1192
- camera?: {
1193
- position: [number, number, number];
1194
- target: [number, number, number];
1195
- mode: "orthographic" | "perspective";
1196
- fov?: number | undefined;
1197
- zoom?: number | undefined;
1198
- } | undefined;
1199
- metadata: Record<string, unknown>;
1200
- provenance?: {
1201
- refs: {
1202
- ns?: string | undefined;
1203
- id: string;
1204
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
1205
- }[];
1206
- lineage?: {
1207
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
1208
- fromIds: string[];
1209
- } | undefined;
1210
- } | undefined;
1211
- id: `slab_${string}`;
1212
- material?: {
1213
- id?: string | undefined;
1214
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1215
- properties?: {
1216
- color: string;
1217
- roughness: number;
1218
- metalness: number;
1219
- opacity: number;
1220
- transparent: boolean;
1221
- side: "back" | "double" | "front";
1222
- } | undefined;
1223
- texture?: {
1224
- url: string;
1225
- repeat?: [number, number] | undefined;
1226
- scale?: number | undefined;
1227
- } | undefined;
1228
- } | undefined;
1229
- materialPreset?: string | undefined;
1230
- slots?: Record<string, string> | undefined;
1231
- polygon: [number, number][];
1232
- holes: [number, number][][];
1233
- holeMetadata: {
1234
- source: "elevator" | "floor-opening" | "manual" | "room" | "stair";
1235
- openingId?: string | undefined;
1236
- stairId?: string | undefined;
1237
- elevatorId?: string | undefined;
1238
- }[];
1239
- elevation: number;
1240
- floorHeight?: number | undefined;
1241
- referenceFloorElevation?: number | undefined;
1242
- foundation?: {
1243
- type: "none" | "solid";
1244
- material?: string | {
1245
- id?: string | undefined;
1246
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1247
- properties?: {
1248
- color: string;
1249
- roughness: number;
1250
- metalness: number;
1251
- opacity: number;
1252
- transparent: boolean;
1253
- side: "back" | "double" | "front";
1254
- } | undefined;
1255
- texture?: {
1256
- url: string;
1257
- repeat?: [number, number] | undefined;
1258
- scale?: number | undefined;
1259
- } | undefined;
1260
- } | undefined;
1261
- } | undefined;
1262
- thickness: number;
1263
- recessed: boolean;
1264
- recessedRimElevation?: number | undefined;
1265
- fillToTerrain?: boolean | undefined;
1266
- boundary?: "auto" | undefined;
1267
- support?: "open" | undefined;
1268
- plateRole?: "base" | "platform" | "sunken" | undefined;
1269
- railing?: {
1270
- start: [number, number];
1271
- end: [number, number];
1272
- }[] | undefined;
1273
- zoneIds?: string[] | undefined;
1274
- associatedZoneIds?: string[] | undefined;
1275
- autoFromWalls: boolean;
1276
- type: "slab";
1277
- } | {
1278
- object: "node";
1279
- name?: string | undefined;
1280
- parentId: string | null;
1281
- visible: boolean;
1282
- camera?: {
1283
- position: [number, number, number];
1284
- target: [number, number, number];
1285
- mode: "orthographic" | "perspective";
1286
- fov?: number | undefined;
1287
- zoom?: number | undefined;
1288
- } | undefined;
1289
- metadata: Record<string, unknown>;
1290
- provenance?: {
1291
- refs: {
1292
- ns?: string | undefined;
1293
- id: string;
1294
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
1295
- }[];
1296
- lineage?: {
1297
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
1298
- fromIds: string[];
1299
- } | undefined;
1300
- } | undefined;
1301
- id: `leanto_${string}`;
1302
- position: [number, number, number];
1303
- rotation: [number, number, number];
1304
- children: (`column_${string}` | `roof_${string}`)[];
1305
- canopyForm: "butterfly" | "gable" | "mono";
1306
- hostKind: "conical-roof" | "freestanding" | "slab-edge" | "wall";
1307
- hostHeightOffset: number;
1308
- hostSlabId?: `slab_${string}` | undefined;
1309
- hostSlabEdgeIndex?: number | undefined;
1310
- hostSlabEdgeT?: number | undefined;
1311
- span: number;
1312
- autoSpan: boolean;
1313
- projection: number;
1314
- spanArcCenterZ?: number | undefined;
1315
- spanArcRadius?: number | undefined;
1316
- highEdgeHeight: number;
1317
- lowEdgeHeight: number;
1318
- pitch: number;
1319
- resizeLock: "preserve-high-edge" | "preserve-low-edge" | "preserve-pitch";
1320
- leftEndCondition: "joined" | "open" | "wall-abutment";
1321
- rightEndCondition: "joined" | "open" | "wall-abutment";
1322
- autoMiterCorners: boolean;
1323
- sideFlashing: boolean;
1324
- flashingProjection: number;
1325
- flashingHeight: number;
1326
- slots?: Record<string, string> | undefined;
1327
- highSideMode: "independent-high-beam" | "wall-ledger";
1328
- ledgerVerticalOffset: number;
1329
- lowBeamInset: number;
1330
- gutterEnabled: boolean;
1331
- gutterProfile: "box" | "half-round" | "k-style";
1332
- gutterSize: number;
1333
- downspoutEnabled: boolean;
1334
- downspoutPosition: number;
1335
- connectionMode: "auto" | "manual";
1336
- hostRoofId?: `roof_${string}` | undefined;
1337
- hostRoofSegmentId?: string | undefined;
1338
- hostRoofEdge?: "+X" | "+Z" | "-X" | "-Z" | undefined;
1339
- hostRoofEdgeRange?: [number, number] | undefined;
1340
- connectionOffset: number;
1341
- connectionInset: number;
1342
- matchHostRoofMaterial: boolean;
1343
- matchHostRoofStructure: boolean;
1344
- roofThickness: number;
1345
- shingleThickness: number;
1346
- highOverhang: number;
1347
- lowOverhang: number;
1348
- leftOverhang: number;
1349
- rightOverhang: number;
1350
- coveringType: "generic" | "metal-panel" | "shingle";
1351
- beamWidth: number;
1352
- beamHeight: number;
1353
- ledgerDepth: number;
1354
- ledgerHeight: number;
1355
- rafterWidth: number;
1356
- rafterHeight: number;
1357
- rafterSpacing: number;
1358
- rafterEndInset: number;
1359
- framingStrategy: "covering-specific" | "hidden" | "purlins" | "rafters";
1360
- purlinWidth: number;
1361
- purlinHeight: number;
1362
- purlinSpacing: number;
1363
- postWidth: number;
1364
- postDepth: number;
1365
- postCount: number;
1366
- postLayoutMode: "count" | "target-spacing";
1367
- postSpacing: number;
1368
- postInset: number;
1369
- omittedPostSlots: {
1370
- side: "high" | "low";
1371
- index: number;
1372
- layoutCount: number;
1373
- }[];
1374
- postBracing: "knee" | "none";
1375
- footingStyle: "base-plate" | "concrete-pad" | "none";
1376
- type: "lean-to-extension";
1377
- } | {
1378
- object: "node";
1379
- name?: string | undefined;
1380
- parentId: string | null;
1381
- visible: boolean;
1382
- camera?: {
1383
- position: [number, number, number];
1384
- target: [number, number, number];
1385
- mode: "orthographic" | "perspective";
1386
- fov?: number | undefined;
1387
- zoom?: number | undefined;
1388
- } | undefined;
1389
- metadata: Record<string, unknown>;
1390
- provenance?: {
1391
- refs: {
1392
- ns?: string | undefined;
1393
- id: string;
1394
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
1395
- }[];
1396
- lineage?: {
1397
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
1398
- fromIds: string[];
1399
- } | undefined;
1400
- } | undefined;
1401
- type: "item";
1402
- id: `item_${string}`;
1305
+ type: "item";
1306
+ id: `item_${string}`;
1403
1307
  position: [number, number, number];
1404
1308
  rotation: [number, number, number];
1405
1309
  scale: [number, number, number];
@@ -1475,6 +1379,16 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
1475
1379
  color: string;
1476
1380
  intensity: number;
1477
1381
  distance?: number | undefined;
1382
+ spot?: {
1383
+ direction: [number, number, number];
1384
+ angle: number;
1385
+ softness: number;
1386
+ } | undefined;
1387
+ shadows?: boolean | undefined;
1388
+ glow?: {
1389
+ size: number;
1390
+ strength: number;
1391
+ } | undefined;
1478
1392
  }[];
1479
1393
  undersides: {
1480
1394
  part?: string | undefined;
@@ -1493,6 +1407,17 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
1493
1407
  }[] | undefined;
1494
1408
  cutout: boolean;
1495
1409
  collider: boolean;
1410
+ shape?: {
1411
+ tolerance: number;
1412
+ bands: {
1413
+ y0: number;
1414
+ y1: number;
1415
+ polygons: {
1416
+ outer: [number, number][];
1417
+ holes?: [number, number][][] | undefined;
1418
+ }[];
1419
+ }[];
1420
+ } | undefined;
1496
1421
  triangles: number;
1497
1422
  coverage?: number | undefined;
1498
1423
  uncovered?: {
@@ -1563,6 +1488,16 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
1563
1488
  intensityRange: [number, number];
1564
1489
  distance?: number | undefined;
1565
1490
  offset: [number, number, number];
1491
+ spot?: {
1492
+ direction: [number, number, number];
1493
+ angle: number;
1494
+ softness: number;
1495
+ } | undefined;
1496
+ shadows?: boolean | undefined;
1497
+ glow?: {
1498
+ size: number;
1499
+ strength: number;
1500
+ } | undefined;
1566
1501
  })[];
1567
1502
  } | undefined;
1568
1503
  };
@@ -1590,7 +1525,7 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
1590
1525
  fromIds: string[];
1591
1526
  } | undefined;
1592
1527
  } | undefined;
1593
- id: `door_${string}`;
1528
+ id: `window_${string}`;
1594
1529
  material?: {
1595
1530
  id?: string | undefined;
1596
1531
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
@@ -1606,6 +1541,11 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
1606
1541
  url: string;
1607
1542
  repeat?: [number, number] | undefined;
1608
1543
  scale?: number | undefined;
1544
+ offset?: [number, number] | undefined;
1545
+ normalMap?: string | undefined;
1546
+ normalScale?: number | undefined;
1547
+ bumpMap?: string | undefined;
1548
+ bumpScale?: number | undefined;
1609
1549
  } | undefined;
1610
1550
  } | undefined;
1611
1551
  slots?: Record<string, string> | undefined;
@@ -1671,6 +1611,16 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
1671
1611
  color: string;
1672
1612
  intensity: number;
1673
1613
  distance?: number | undefined;
1614
+ spot?: {
1615
+ direction: [number, number, number];
1616
+ angle: number;
1617
+ softness: number;
1618
+ } | undefined;
1619
+ shadows?: boolean | undefined;
1620
+ glow?: {
1621
+ size: number;
1622
+ strength: number;
1623
+ } | undefined;
1674
1624
  }[];
1675
1625
  undersides: {
1676
1626
  part?: string | undefined;
@@ -1689,6 +1639,17 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
1689
1639
  }[] | undefined;
1690
1640
  cutout: boolean;
1691
1641
  collider: boolean;
1642
+ shape?: {
1643
+ tolerance: number;
1644
+ bands: {
1645
+ y0: number;
1646
+ y1: number;
1647
+ polygons: {
1648
+ outer: [number, number][];
1649
+ holes?: [number, number][][] | undefined;
1650
+ }[];
1651
+ }[];
1652
+ } | undefined;
1692
1653
  triangles: number;
1693
1654
  coverage?: number | undefined;
1694
1655
  uncovered?: {
@@ -1708,6 +1669,8 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
1708
1669
  verticalAnchor?: "floor" | "wall" | undefined;
1709
1670
  floorThresholdVersion: 0 | 1;
1710
1671
  wallId?: string | undefined;
1672
+ dormerId?: string | undefined;
1673
+ dormerFace?: "back" | "front" | "left" | "right" | undefined;
1711
1674
  roofSegmentId?: string | undefined;
1712
1675
  roofFace?: "back" | "front" | "left" | "right" | undefined;
1713
1676
  width: number;
@@ -1721,43 +1684,52 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
1721
1684
  masonryOpeningHeight?: number | undefined;
1722
1685
  finishOpeningWidth?: number | undefined;
1723
1686
  finishOpeningHeight?: number | undefined;
1724
- doorCategory: "garage" | "interior";
1725
- doorType: "barn" | "double" | "folding" | "french" | "garage-rollup" | "garage-sectional" | "garage-tiltup" | "hinged" | "pocket" | "sliding";
1726
- leafCount: 1 | 2 | 3 | 4;
1687
+ openingKind: "opening" | "window";
1688
+ windowType: "awning" | "bay" | "bow" | "casement" | "double-hung" | "fixed" | "hopper" | "louvered" | "single-hung" | "sliding" | "tilt-turn";
1727
1689
  operationState: number;
1728
- slideDirection: "left" | "right";
1729
- trackStyle: "none" | "overhead" | "pocket" | "visible";
1730
- garagePanelCount: number;
1731
- openingKind: "door" | "opening";
1690
+ openingDirection?: "inward" | "outward" | undefined;
1691
+ tiltTurnMode?: "tilt" | "turn" | undefined;
1692
+ awningDirection: "down" | "up";
1693
+ casementStyle: "french" | "single";
1694
+ hingesSide: "left" | "right";
1732
1695
  openingShape: "arch" | "rectangle" | "rounded";
1733
1696
  openingRadiusMode: "all" | "individual";
1734
- openingTopRadii: [number, number];
1697
+ openingCornerRadii: [number, number, number, number];
1735
1698
  cornerRadius: number;
1736
1699
  archHeight: number;
1737
1700
  openingRevealRadius: number;
1738
1701
  frameThickness: number;
1739
- frameDepth: number;
1740
- threshold: boolean;
1741
- thresholdHeight: number;
1742
- hingesSide: "left" | "right";
1743
- swingDirection: "inward" | "outward";
1744
- swingAngle: number;
1745
- segments: {
1746
- type: "empty" | "glass" | "panel";
1747
- heightRatio: number;
1748
- columnRatios: number[];
1749
- dividerThickness: number;
1750
- panelDepth: number;
1751
- panelInset: number;
1752
- }[];
1753
- handle: boolean;
1754
- handleHeight: number;
1755
- handleSide: "left" | "right";
1756
- contentPadding: [number, number];
1757
- doorCloser: boolean;
1758
- panicBar: boolean;
1759
- panicBarHeight: number;
1760
- type: "door";
1702
+ frameDepth?: number | undefined;
1703
+ windowHandle?: boolean | undefined;
1704
+ sashGrid?: boolean | undefined;
1705
+ columnRatios: number[];
1706
+ rowRatios: number[];
1707
+ columnDividerThickness: number;
1708
+ rowDividerThickness: number;
1709
+ corner?: {
1710
+ end: "end" | "start";
1711
+ partnerId: string;
1712
+ post: "none" | "post";
1713
+ } | undefined;
1714
+ sill: boolean;
1715
+ sillDepth: number;
1716
+ sillThickness: number;
1717
+ sillOverhang?: number | undefined;
1718
+ sillInterior?: boolean | undefined;
1719
+ sillInteriorDepth?: number | undefined;
1720
+ sillInteriorThickness?: number | undefined;
1721
+ sillInteriorOverhang?: number | undefined;
1722
+ shutters?: "board-batten" | "louvered" | "none" | "panel" | undefined;
1723
+ shutterWidth?: number | undefined;
1724
+ shutterOpen?: number | undefined;
1725
+ shutterSides?: "both" | "left" | "right" | undefined;
1726
+ rollerShutter?: "box" | "concealed" | "none" | undefined;
1727
+ rollerShutterBoxHeight?: number | undefined;
1728
+ rollerShutterOpen?: number | undefined;
1729
+ casingFaceA?: boolean | undefined;
1730
+ casingFaceB?: boolean | undefined;
1731
+ casingWidth?: number | undefined;
1732
+ type: "window";
1761
1733
  } | {
1762
1734
  object: "node";
1763
1735
  name?: string | undefined;
@@ -1782,7 +1754,7 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
1782
1754
  fromIds: string[];
1783
1755
  } | undefined;
1784
1756
  } | undefined;
1785
- id: `window_${string}`;
1757
+ id: `slab_${string}`;
1786
1758
  material?: {
1787
1759
  id?: string | undefined;
1788
1760
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
@@ -1798,10 +1770,66 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
1798
1770
  url: string;
1799
1771
  repeat?: [number, number] | undefined;
1800
1772
  scale?: number | undefined;
1773
+ offset?: [number, number] | undefined;
1774
+ normalMap?: string | undefined;
1775
+ normalScale?: number | undefined;
1776
+ bumpMap?: string | undefined;
1777
+ bumpScale?: number | undefined;
1801
1778
  } | undefined;
1802
1779
  } | undefined;
1780
+ materialPreset?: string | undefined;
1803
1781
  slots?: Record<string, string> | undefined;
1804
- source?: {
1782
+ polygon: [number, number][];
1783
+ holes: [number, number][][];
1784
+ holeMetadata: {
1785
+ source: "elevator" | "floor-opening" | "manual" | "room" | "stair";
1786
+ openingId?: string | undefined;
1787
+ stairId?: string | undefined;
1788
+ elevatorId?: string | undefined;
1789
+ }[];
1790
+ elevation: number;
1791
+ floorHeight?: number | undefined;
1792
+ referenceFloorElevation?: number | undefined;
1793
+ foundation?: {
1794
+ type: "none" | "solid";
1795
+ material?: string | {
1796
+ id?: string | undefined;
1797
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1798
+ properties?: {
1799
+ color: string;
1800
+ roughness: number;
1801
+ metalness: number;
1802
+ opacity: number;
1803
+ transparent: boolean;
1804
+ side: "back" | "double" | "front";
1805
+ } | undefined;
1806
+ texture?: {
1807
+ url: string;
1808
+ repeat?: [number, number] | undefined;
1809
+ scale?: number | undefined;
1810
+ offset?: [number, number] | undefined;
1811
+ normalMap?: string | undefined;
1812
+ normalScale?: number | undefined;
1813
+ bumpMap?: string | undefined;
1814
+ bumpScale?: number | undefined;
1815
+ } | undefined;
1816
+ } | undefined;
1817
+ } | undefined;
1818
+ thickness: number;
1819
+ recessed: boolean;
1820
+ recessedRimElevation?: number | undefined;
1821
+ fillToTerrain?: boolean | undefined;
1822
+ boundary?: "auto" | undefined;
1823
+ support?: "open" | undefined;
1824
+ plateRole?: "base" | "platform" | "sunken" | undefined;
1825
+ railing?: {
1826
+ start: [number, number];
1827
+ end: [number, number];
1828
+ }[] | undefined;
1829
+ zoneIds?: string[] | undefined;
1830
+ associatedZoneIds?: string[] | undefined;
1831
+ autoFromWalls: boolean;
1832
+ surfaceScript?: {
1805
1833
  kind: "script";
1806
1834
  meta?: {
1807
1835
  description?: string | undefined;
@@ -1863,6 +1891,16 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
1863
1891
  color: string;
1864
1892
  intensity: number;
1865
1893
  distance?: number | undefined;
1894
+ spot?: {
1895
+ direction: [number, number, number];
1896
+ angle: number;
1897
+ softness: number;
1898
+ } | undefined;
1899
+ shadows?: boolean | undefined;
1900
+ glow?: {
1901
+ size: number;
1902
+ strength: number;
1903
+ } | undefined;
1866
1904
  }[];
1867
1905
  undersides: {
1868
1906
  part?: string | undefined;
@@ -1881,6 +1919,17 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
1881
1919
  }[] | undefined;
1882
1920
  cutout: boolean;
1883
1921
  collider: boolean;
1922
+ shape?: {
1923
+ tolerance: number;
1924
+ bands: {
1925
+ y0: number;
1926
+ y1: number;
1927
+ polygons: {
1928
+ outer: [number, number][];
1929
+ holes?: [number, number][][] | undefined;
1930
+ }[];
1931
+ }[];
1932
+ } | undefined;
1884
1933
  triangles: number;
1885
1934
  coverage?: number | undefined;
1886
1935
  uncovered?: {
@@ -1893,55 +1942,109 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
1893
1942
  thumbnail: string;
1894
1943
  floorPlan: string;
1895
1944
  } | undefined;
1945
+ inputs: string;
1946
+ } | undefined;
1947
+ type: "slab";
1948
+ } | {
1949
+ object: "node";
1950
+ name?: string | undefined;
1951
+ parentId: string | null;
1952
+ visible: boolean;
1953
+ camera?: {
1954
+ position: [number, number, number];
1955
+ target: [number, number, number];
1956
+ mode: "orthographic" | "perspective";
1957
+ fov?: number | undefined;
1958
+ zoom?: number | undefined;
1959
+ } | undefined;
1960
+ metadata: Record<string, unknown>;
1961
+ provenance?: {
1962
+ refs: {
1963
+ ns?: string | undefined;
1964
+ id: string;
1965
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
1966
+ }[];
1967
+ lineage?: {
1968
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
1969
+ fromIds: string[];
1970
+ } | undefined;
1896
1971
  } | undefined;
1972
+ id: `leanto_${string}`;
1897
1973
  position: [number, number, number];
1898
1974
  rotation: [number, number, number];
1899
- side?: "back" | "front" | undefined;
1900
- verticalAnchor?: "floor" | "wall" | undefined;
1901
- floorThresholdVersion: 0 | 1;
1902
- wallId?: string | undefined;
1903
- dormerId?: string | undefined;
1904
- dormerFace?: "back" | "front" | "left" | "right" | undefined;
1905
- roofSegmentId?: string | undefined;
1906
- roofFace?: "back" | "front" | "left" | "right" | undefined;
1907
- width: number;
1908
- height: number;
1909
- mark?: string | undefined;
1910
- constructionType: "framed" | "masonry";
1911
- dimensionReference: "finish-opening" | "masonry-opening" | "nominal" | "rough-opening";
1912
- roughOpeningWidth?: number | undefined;
1913
- roughOpeningHeight?: number | undefined;
1914
- masonryOpeningWidth?: number | undefined;
1915
- masonryOpeningHeight?: number | undefined;
1916
- finishOpeningWidth?: number | undefined;
1917
- finishOpeningHeight?: number | undefined;
1918
- openingKind: "opening" | "window";
1919
- windowType: "awning" | "bay" | "bow" | "casement" | "double-hung" | "fixed" | "hopper" | "louvered" | "single-hung" | "sliding";
1920
- operationState: number;
1921
- awningDirection: "down" | "up";
1922
- casementStyle: "french" | "single";
1923
- hingesSide: "left" | "right";
1924
- openingShape: "arch" | "rectangle" | "rounded";
1925
- openingRadiusMode: "all" | "individual";
1926
- openingCornerRadii: [number, number, number, number];
1927
- cornerRadius: number;
1928
- archHeight: number;
1929
- openingRevealRadius: number;
1930
- frameThickness: number;
1931
- frameDepth: number;
1932
- columnRatios: number[];
1933
- rowRatios: number[];
1934
- columnDividerThickness: number;
1935
- rowDividerThickness: number;
1936
- corner?: {
1937
- end: "end" | "start";
1938
- partnerId: string;
1939
- post: "none" | "post";
1940
- } | undefined;
1941
- sill: boolean;
1942
- sillDepth: number;
1943
- sillThickness: number;
1944
- type: "window";
1975
+ children: (`column_${string}` | `roof_${string}`)[];
1976
+ canopyForm: "butterfly" | "gable" | "mono";
1977
+ hostKind: "conical-roof" | "freestanding" | "slab-edge" | "wall";
1978
+ hostHeightOffset: number;
1979
+ hostSlabId?: `slab_${string}` | undefined;
1980
+ hostSlabEdgeIndex?: number | undefined;
1981
+ hostSlabEdgeT?: number | undefined;
1982
+ span: number;
1983
+ autoSpan: boolean;
1984
+ projection: number;
1985
+ spanArcCenterZ?: number | undefined;
1986
+ spanArcRadius?: number | undefined;
1987
+ highEdgeHeight: number;
1988
+ lowEdgeHeight: number;
1989
+ pitch: number;
1990
+ resizeLock: "preserve-high-edge" | "preserve-low-edge" | "preserve-pitch";
1991
+ leftEndCondition: "joined" | "open" | "wall-abutment";
1992
+ rightEndCondition: "joined" | "open" | "wall-abutment";
1993
+ autoMiterCorners: boolean;
1994
+ sideFlashing: boolean;
1995
+ flashingProjection: number;
1996
+ flashingHeight: number;
1997
+ slots?: Record<string, string> | undefined;
1998
+ highSideMode: "independent-high-beam" | "wall-ledger";
1999
+ ledgerVerticalOffset: number;
2000
+ lowBeamInset: number;
2001
+ gutterEnabled: boolean;
2002
+ gutterProfile: "box" | "half-round" | "k-style";
2003
+ gutterSize: number;
2004
+ downspoutEnabled: boolean;
2005
+ downspoutPosition: number;
2006
+ connectionMode: "auto" | "manual";
2007
+ hostRoofId?: `roof_${string}` | undefined;
2008
+ hostRoofSegmentId?: string | undefined;
2009
+ hostRoofEdge?: "+X" | "+Z" | "-X" | "-Z" | undefined;
2010
+ hostRoofEdgeRange?: [number, number] | undefined;
2011
+ connectionOffset: number;
2012
+ connectionInset: number;
2013
+ matchHostRoofMaterial: boolean;
2014
+ matchHostRoofStructure: boolean;
2015
+ roofThickness: number;
2016
+ shingleThickness: number;
2017
+ highOverhang: number;
2018
+ lowOverhang: number;
2019
+ leftOverhang: number;
2020
+ rightOverhang: number;
2021
+ coveringType: "generic" | "metal-panel" | "shingle";
2022
+ beamWidth: number;
2023
+ beamHeight: number;
2024
+ ledgerDepth: number;
2025
+ ledgerHeight: number;
2026
+ rafterWidth: number;
2027
+ rafterHeight: number;
2028
+ rafterSpacing: number;
2029
+ rafterEndInset: number;
2030
+ framingStrategy: "covering-specific" | "hidden" | "purlins" | "rafters";
2031
+ purlinWidth: number;
2032
+ purlinHeight: number;
2033
+ purlinSpacing: number;
2034
+ postWidth: number;
2035
+ postDepth: number;
2036
+ postCount: number;
2037
+ postLayoutMode: "count" | "target-spacing";
2038
+ postSpacing: number;
2039
+ postInset: number;
2040
+ omittedPostSlots: {
2041
+ side: "high" | "low";
2042
+ index: number;
2043
+ layoutCount: number;
2044
+ }[];
2045
+ postBracing: "knee" | "none";
2046
+ footingStyle: "base-plate" | "concrete-pad" | "none";
2047
+ type: "lean-to-extension";
1945
2048
  } | {
1946
2049
  object: "node";
1947
2050
  name?: string | undefined;
@@ -1967,7 +2070,7 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
1967
2070
  } | undefined;
1968
2071
  } | undefined;
1969
2072
  id: `wall_${string}`;
1970
- wallType?: "curtain" | "standard" | undefined;
2073
+ wallType?: "curtain" | "railing" | "standard" | undefined;
1971
2074
  curtainWall?: {
1972
2075
  construction: "stick" | "unitized";
1973
2076
  framing: "capped" | "horizontal-caps" | "structural-glazing" | "vertical-caps";
@@ -2001,6 +2104,15 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
2001
2104
  type: "empty" | "glass" | "solid";
2002
2105
  }[];
2003
2106
  } | undefined;
2107
+ railing?: {
2108
+ style: "balusters" | "boards" | "cable" | "glass" | "metal" | "post-and-rail";
2109
+ postSpacing: number;
2110
+ postSize: number;
2111
+ infillSize: number;
2112
+ infillGap: number;
2113
+ bottomClearance: number;
2114
+ cap: boolean;
2115
+ } | undefined;
2004
2116
  children: (`door_${string}` | `item_${string}` | `leanto_${string}` | `procedural-item_${string}` | `window_${string}`)[];
2005
2117
  material?: {
2006
2118
  id?: string | undefined;
@@ -2017,6 +2129,11 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
2017
2129
  url: string;
2018
2130
  repeat?: [number, number] | undefined;
2019
2131
  scale?: number | undefined;
2132
+ offset?: [number, number] | undefined;
2133
+ normalMap?: string | undefined;
2134
+ normalScale?: number | undefined;
2135
+ bumpMap?: string | undefined;
2136
+ bumpScale?: number | undefined;
2020
2137
  } | undefined;
2021
2138
  } | undefined;
2022
2139
  materialPreset?: string | undefined;
@@ -2035,6 +2152,11 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
2035
2152
  url: string;
2036
2153
  repeat?: [number, number] | undefined;
2037
2154
  scale?: number | undefined;
2155
+ offset?: [number, number] | undefined;
2156
+ normalMap?: string | undefined;
2157
+ normalScale?: number | undefined;
2158
+ bumpMap?: string | undefined;
2159
+ bumpScale?: number | undefined;
2038
2160
  } | undefined;
2039
2161
  } | undefined;
2040
2162
  interiorMaterialPreset?: string | undefined;
@@ -2053,6 +2175,11 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
2053
2175
  url: string;
2054
2176
  repeat?: [number, number] | undefined;
2055
2177
  scale?: number | undefined;
2178
+ offset?: [number, number] | undefined;
2179
+ normalMap?: string | undefined;
2180
+ normalScale?: number | undefined;
2181
+ bumpMap?: string | undefined;
2182
+ bumpScale?: number | undefined;
2056
2183
  } | undefined;
2057
2184
  } | undefined;
2058
2185
  exteriorMaterialPreset?: string | undefined;
@@ -2074,6 +2201,11 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
2074
2201
  url: string;
2075
2202
  repeat?: [number, number] | undefined;
2076
2203
  scale?: number | undefined;
2204
+ offset?: [number, number] | undefined;
2205
+ normalMap?: string | undefined;
2206
+ normalScale?: number | undefined;
2207
+ bumpMap?: string | undefined;
2208
+ bumpScale?: number | undefined;
2077
2209
  } | undefined;
2078
2210
  } | undefined;
2079
2211
  materialPreset?: string | undefined;
@@ -2094,6 +2226,11 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
2094
2226
  url: string;
2095
2227
  repeat?: [number, number] | undefined;
2096
2228
  scale?: number | undefined;
2229
+ offset?: [number, number] | undefined;
2230
+ normalMap?: string | undefined;
2231
+ normalScale?: number | undefined;
2232
+ bumpMap?: string | undefined;
2233
+ bumpScale?: number | undefined;
2097
2234
  } | undefined;
2098
2235
  } | undefined;
2099
2236
  materialPreset?: string | undefined;
@@ -2115,6 +2252,7 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
2115
2252
  role: "air" | "covering" | "deck" | "fill" | "finish" | "furring" | "glazing" | "insulation" | "lining" | "membrane" | "sheathing" | "shell" | "structure" | "substrate" | "underlay";
2116
2253
  thickness: number;
2117
2254
  core?: true | undefined;
2255
+ spacing?: number | undefined;
2118
2256
  material?: string | undefined;
2119
2257
  slot?: string | undefined;
2120
2258
  returns?: boolean | undefined;
@@ -2129,6 +2267,7 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
2129
2267
  role: "air" | "covering" | "deck" | "fill" | "finish" | "furring" | "glazing" | "insulation" | "lining" | "membrane" | "sheathing" | "shell" | "structure" | "substrate" | "underlay";
2130
2268
  thickness: number;
2131
2269
  core?: true | undefined;
2270
+ spacing?: number | undefined;
2132
2271
  material?: string | undefined;
2133
2272
  slot?: string | undefined;
2134
2273
  returns?: boolean | undefined;
@@ -2144,6 +2283,7 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
2144
2283
  } | undefined;
2145
2284
  justification?: "a" | "b" | undefined;
2146
2285
  height?: number | undefined;
2286
+ endHeightOffset?: number | undefined;
2147
2287
  curveOffset?: number | undefined;
2148
2288
  supportSlabId?: string | undefined;
2149
2289
  supportOffset?: number | undefined;
@@ -2246,6 +2386,16 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
2246
2386
  color: string;
2247
2387
  intensity: number;
2248
2388
  distance?: number | undefined;
2389
+ spot?: {
2390
+ direction: [number, number, number];
2391
+ angle: number;
2392
+ softness: number;
2393
+ } | undefined;
2394
+ shadows?: boolean | undefined;
2395
+ glow?: {
2396
+ size: number;
2397
+ strength: number;
2398
+ } | undefined;
2249
2399
  }[];
2250
2400
  undersides: {
2251
2401
  part?: string | undefined;
@@ -2264,6 +2414,17 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
2264
2414
  }[] | undefined;
2265
2415
  cutout: boolean;
2266
2416
  collider: boolean;
2417
+ shape?: {
2418
+ tolerance: number;
2419
+ bands: {
2420
+ y0: number;
2421
+ y1: number;
2422
+ polygons: {
2423
+ outer: [number, number][];
2424
+ holes?: [number, number][][] | undefined;
2425
+ }[];
2426
+ }[];
2427
+ } | undefined;
2267
2428
  triangles: number;
2268
2429
  coverage?: number | undefined;
2269
2430
  uncovered?: {
@@ -2341,6 +2502,16 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
2341
2502
  color: string;
2342
2503
  intensity: number;
2343
2504
  distance?: number | undefined;
2505
+ spot?: {
2506
+ direction: [number, number, number];
2507
+ angle: number;
2508
+ softness: number;
2509
+ } | undefined;
2510
+ shadows?: boolean | undefined;
2511
+ glow?: {
2512
+ size: number;
2513
+ strength: number;
2514
+ } | undefined;
2344
2515
  }[];
2345
2516
  undersides: {
2346
2517
  part?: string | undefined;
@@ -2359,6 +2530,17 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
2359
2530
  }[] | undefined;
2360
2531
  cutout: boolean;
2361
2532
  collider: boolean;
2533
+ shape?: {
2534
+ tolerance: number;
2535
+ bands: {
2536
+ y0: number;
2537
+ y1: number;
2538
+ polygons: {
2539
+ outer: [number, number][];
2540
+ holes?: [number, number][][] | undefined;
2541
+ }[];
2542
+ }[];
2543
+ } | undefined;
2362
2544
  triangles: number;
2363
2545
  coverage?: number | undefined;
2364
2546
  uncovered?: {
@@ -2371,15 +2553,829 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
2371
2553
  thumbnail: string;
2372
2554
  floorPlan: string;
2373
2555
  } | undefined;
2374
- inputs: string;
2375
- toHeight?: number | undefined;
2556
+ inputs: string;
2557
+ toHeight?: number | undefined;
2558
+ } | undefined;
2559
+ } | undefined;
2560
+ start: [number, number];
2561
+ end: [number, number];
2562
+ frontSide: "exterior" | "interior" | "unknown";
2563
+ backSide: "exterior" | "interior" | "unknown";
2564
+ type: "wall";
2565
+ } | {
2566
+ object: "node";
2567
+ name?: string | undefined;
2568
+ parentId: string | null;
2569
+ visible: boolean;
2570
+ camera?: {
2571
+ position: [number, number, number];
2572
+ target: [number, number, number];
2573
+ mode: "orthographic" | "perspective";
2574
+ fov?: number | undefined;
2575
+ zoom?: number | undefined;
2576
+ } | undefined;
2577
+ metadata: Record<string, unknown>;
2578
+ provenance?: {
2579
+ refs: {
2580
+ ns?: string | undefined;
2581
+ id: string;
2582
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
2583
+ }[];
2584
+ lineage?: {
2585
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
2586
+ fromIds: string[];
2587
+ } | undefined;
2588
+ } | undefined;
2589
+ position: [number, number, number];
2590
+ rotation: number;
2591
+ supportSlabId?: string | undefined;
2592
+ width: number;
2593
+ depth: number;
2594
+ carcassHeight: number;
2595
+ operationState: number;
2596
+ plinthHeight: number;
2597
+ toeKickDepth: number;
2598
+ boardThickness: number;
2599
+ countertopThickness: number;
2600
+ countertopOverhang: number;
2601
+ countertopBackOverhang: number;
2602
+ withFinishedBack: boolean;
2603
+ frontThickness: number;
2604
+ frontGap: number;
2605
+ frontStyle: "raised-arch" | "shaker" | "slab";
2606
+ panelReady: boolean;
2607
+ handleStyle: "bar" | "cutout" | "hole" | "knob" | "none";
2608
+ handlePosition: "auto" | "center" | "top";
2609
+ frontOverlay: "full" | "inset";
2610
+ withBottomPanel: boolean;
2611
+ showPlinth: boolean;
2612
+ withCountertop: boolean;
2613
+ material?: {
2614
+ id?: string | undefined;
2615
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
2616
+ properties?: {
2617
+ color: string;
2618
+ roughness: number;
2619
+ metalness: number;
2620
+ opacity: number;
2621
+ transparent: boolean;
2622
+ side: "back" | "double" | "front";
2623
+ } | undefined;
2624
+ texture?: {
2625
+ url: string;
2626
+ repeat?: [number, number] | undefined;
2627
+ scale?: number | undefined;
2628
+ offset?: [number, number] | undefined;
2629
+ normalMap?: string | undefined;
2630
+ normalScale?: number | undefined;
2631
+ bumpMap?: string | undefined;
2632
+ bumpScale?: number | undefined;
2633
+ } | undefined;
2634
+ } | undefined;
2635
+ materialPreset?: string | undefined;
2636
+ slots?: Record<string, string> | undefined;
2637
+ stack?: ({
2638
+ id: string;
2639
+ height?: number | undefined;
2640
+ type: "shelf";
2641
+ shelfCount?: number | undefined;
2642
+ } | {
2643
+ id: string;
2644
+ height?: number | undefined;
2645
+ type: "drawer";
2646
+ drawerCount?: number | undefined;
2647
+ } | {
2648
+ id: string;
2649
+ height?: number | undefined;
2650
+ type: "door";
2651
+ doorType?: "double" | "glass" | "single-left" | "single-right" | undefined;
2652
+ shelfCount?: number | undefined;
2653
+ } | {
2654
+ id: string;
2655
+ height?: number | undefined;
2656
+ type: "sink";
2657
+ sinkLayout?: "double" | "double-offset" | "single" | undefined;
2658
+ } | {
2659
+ id: string;
2660
+ height?: number | undefined;
2661
+ type: "oven";
2662
+ } | {
2663
+ id: string;
2664
+ height?: number | undefined;
2665
+ type: "microwave";
2666
+ } | {
2667
+ id: string;
2668
+ height?: number | undefined;
2669
+ type: "dishwasher";
2670
+ } | {
2671
+ id: string;
2672
+ height?: number | undefined;
2673
+ cooktopBurnersOn?: boolean | undefined;
2674
+ cooktopActiveBurners?: number[] | undefined;
2675
+ cooktopKnobProgress?: number[] | undefined;
2676
+ cooktopShowGrate?: boolean | undefined;
2677
+ type: "cooktop-gas";
2678
+ cooktopLayout?: "gas-2burner" | "gas-4burner" | "gas-5burner-wok" | "gas-6burner" | undefined;
2679
+ } | {
2680
+ id: string;
2681
+ height?: number | undefined;
2682
+ cooktopBurnersOn?: boolean | undefined;
2683
+ cooktopActiveBurners?: number[] | undefined;
2684
+ cooktopKnobProgress?: number[] | undefined;
2685
+ cooktopShowGrate?: boolean | undefined;
2686
+ type: "cooktop-induction";
2687
+ cooktopLayout?: "induction-2zone" | "induction-4zone" | undefined;
2688
+ } | {
2689
+ id: string;
2690
+ height?: number | undefined;
2691
+ type: "pull-out-pantry";
2692
+ shelfCount?: number | undefined;
2693
+ pantryRackStyle?: "glass" | "tray" | "wire" | undefined;
2694
+ } | {
2695
+ id: string;
2696
+ height?: number | undefined;
2697
+ type: "fridge-single";
2698
+ } | {
2699
+ id: string;
2700
+ height?: number | undefined;
2701
+ type: "fridge-double";
2702
+ } | {
2703
+ id: string;
2704
+ height?: number | undefined;
2705
+ type: "fridge-top-freezer";
2706
+ } | {
2707
+ id: string;
2708
+ height?: number | undefined;
2709
+ type: "fridge-bottom-freezer";
2710
+ } | {
2711
+ id: string;
2712
+ height?: number | undefined;
2713
+ type: "hood-pyramid";
2714
+ } | {
2715
+ id: string;
2716
+ height?: number | undefined;
2717
+ type: "hood-curved-glass";
2718
+ })[] | undefined;
2719
+ id: `cabinet_${string}`;
2720
+ runTier: "base" | "tall" | "wall";
2721
+ children: string[];
2722
+ barLedge?: {
2723
+ edge: "back" | "left" | "right";
2724
+ height: number;
2725
+ depth: number;
2726
+ } | undefined;
2727
+ withWaterfall: boolean;
2728
+ withFinishedEnds: boolean;
2729
+ type: "cabinet";
2730
+ } | {
2731
+ object: "node";
2732
+ name?: string | undefined;
2733
+ parentId: string | null;
2734
+ visible: boolean;
2735
+ camera?: {
2736
+ position: [number, number, number];
2737
+ target: [number, number, number];
2738
+ mode: "orthographic" | "perspective";
2739
+ fov?: number | undefined;
2740
+ zoom?: number | undefined;
2741
+ } | undefined;
2742
+ metadata: Record<string, unknown>;
2743
+ provenance?: {
2744
+ refs: {
2745
+ ns?: string | undefined;
2746
+ id: string;
2747
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
2748
+ }[];
2749
+ lineage?: {
2750
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
2751
+ fromIds: string[];
2752
+ } | undefined;
2753
+ } | undefined;
2754
+ position: [number, number, number];
2755
+ rotation: number;
2756
+ supportSlabId?: string | undefined;
2757
+ width: number;
2758
+ depth: number;
2759
+ carcassHeight: number;
2760
+ operationState: number;
2761
+ plinthHeight: number;
2762
+ toeKickDepth: number;
2763
+ boardThickness: number;
2764
+ countertopThickness: number;
2765
+ countertopOverhang: number;
2766
+ countertopBackOverhang: number;
2767
+ withFinishedBack: boolean;
2768
+ frontThickness: number;
2769
+ frontGap: number;
2770
+ frontStyle: "raised-arch" | "shaker" | "slab";
2771
+ panelReady: boolean;
2772
+ handleStyle: "bar" | "cutout" | "hole" | "knob" | "none";
2773
+ handlePosition: "auto" | "center" | "top";
2774
+ frontOverlay: "full" | "inset";
2775
+ withBottomPanel: boolean;
2776
+ showPlinth: boolean;
2777
+ withCountertop: boolean;
2778
+ material?: {
2779
+ id?: string | undefined;
2780
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
2781
+ properties?: {
2782
+ color: string;
2783
+ roughness: number;
2784
+ metalness: number;
2785
+ opacity: number;
2786
+ transparent: boolean;
2787
+ side: "back" | "double" | "front";
2788
+ } | undefined;
2789
+ texture?: {
2790
+ url: string;
2791
+ repeat?: [number, number] | undefined;
2792
+ scale?: number | undefined;
2793
+ offset?: [number, number] | undefined;
2794
+ normalMap?: string | undefined;
2795
+ normalScale?: number | undefined;
2796
+ bumpMap?: string | undefined;
2797
+ bumpScale?: number | undefined;
2798
+ } | undefined;
2799
+ } | undefined;
2800
+ materialPreset?: string | undefined;
2801
+ slots?: Record<string, string> | undefined;
2802
+ stack?: ({
2803
+ id: string;
2804
+ height?: number | undefined;
2805
+ type: "shelf";
2806
+ shelfCount?: number | undefined;
2807
+ } | {
2808
+ id: string;
2809
+ height?: number | undefined;
2810
+ type: "drawer";
2811
+ drawerCount?: number | undefined;
2812
+ } | {
2813
+ id: string;
2814
+ height?: number | undefined;
2815
+ type: "door";
2816
+ doorType?: "double" | "glass" | "single-left" | "single-right" | undefined;
2817
+ shelfCount?: number | undefined;
2818
+ } | {
2819
+ id: string;
2820
+ height?: number | undefined;
2821
+ type: "sink";
2822
+ sinkLayout?: "double" | "double-offset" | "single" | undefined;
2823
+ } | {
2824
+ id: string;
2825
+ height?: number | undefined;
2826
+ type: "oven";
2827
+ } | {
2828
+ id: string;
2829
+ height?: number | undefined;
2830
+ type: "microwave";
2831
+ } | {
2832
+ id: string;
2833
+ height?: number | undefined;
2834
+ type: "dishwasher";
2835
+ } | {
2836
+ id: string;
2837
+ height?: number | undefined;
2838
+ cooktopBurnersOn?: boolean | undefined;
2839
+ cooktopActiveBurners?: number[] | undefined;
2840
+ cooktopKnobProgress?: number[] | undefined;
2841
+ cooktopShowGrate?: boolean | undefined;
2842
+ type: "cooktop-gas";
2843
+ cooktopLayout?: "gas-2burner" | "gas-4burner" | "gas-5burner-wok" | "gas-6burner" | undefined;
2844
+ } | {
2845
+ id: string;
2846
+ height?: number | undefined;
2847
+ cooktopBurnersOn?: boolean | undefined;
2848
+ cooktopActiveBurners?: number[] | undefined;
2849
+ cooktopKnobProgress?: number[] | undefined;
2850
+ cooktopShowGrate?: boolean | undefined;
2851
+ type: "cooktop-induction";
2852
+ cooktopLayout?: "induction-2zone" | "induction-4zone" | undefined;
2853
+ } | {
2854
+ id: string;
2855
+ height?: number | undefined;
2856
+ type: "pull-out-pantry";
2857
+ shelfCount?: number | undefined;
2858
+ pantryRackStyle?: "glass" | "tray" | "wire" | undefined;
2859
+ } | {
2860
+ id: string;
2861
+ height?: number | undefined;
2862
+ type: "fridge-single";
2863
+ } | {
2864
+ id: string;
2865
+ height?: number | undefined;
2866
+ type: "fridge-double";
2867
+ } | {
2868
+ id: string;
2869
+ height?: number | undefined;
2870
+ type: "fridge-top-freezer";
2871
+ } | {
2872
+ id: string;
2873
+ height?: number | undefined;
2874
+ type: "fridge-bottom-freezer";
2875
+ } | {
2876
+ id: string;
2877
+ height?: number | undefined;
2878
+ type: "hood-pyramid";
2879
+ } | {
2880
+ id: string;
2881
+ height?: number | undefined;
2882
+ type: "hood-curved-glass";
2883
+ })[] | undefined;
2884
+ id: `cabinet-module_${string}`;
2885
+ children: string[];
2886
+ cabinetType: "base" | "tall";
2887
+ moduleKind: "corner-filler" | "standard" | "wall-filler";
2888
+ openSide?: "left" | "right" | undefined;
2889
+ cornerShelf?: boolean | undefined;
2890
+ topFinish: "none" | "top-cabinet" | "trim";
2891
+ topFinishHeight: number;
2892
+ topFinishDepth: number;
2893
+ type: "cabinet-module";
2894
+ } | {
2895
+ object: "node";
2896
+ name?: string | undefined;
2897
+ parentId: string | null;
2898
+ visible: boolean;
2899
+ camera?: {
2900
+ position: [number, number, number];
2901
+ target: [number, number, number];
2902
+ mode: "orthographic" | "perspective";
2903
+ fov?: number | undefined;
2904
+ zoom?: number | undefined;
2905
+ } | undefined;
2906
+ metadata: Record<string, unknown>;
2907
+ provenance?: {
2908
+ refs: {
2909
+ ns?: string | undefined;
2910
+ id: string;
2911
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
2912
+ }[];
2913
+ lineage?: {
2914
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
2915
+ fromIds: string[];
2916
+ } | undefined;
2917
+ } | undefined;
2918
+ id: `downspout_${string}`;
2919
+ material?: {
2920
+ id?: string | undefined;
2921
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
2922
+ properties?: {
2923
+ color: string;
2924
+ roughness: number;
2925
+ metalness: number;
2926
+ opacity: number;
2927
+ transparent: boolean;
2928
+ side: "back" | "double" | "front";
2929
+ } | undefined;
2930
+ texture?: {
2931
+ url: string;
2932
+ repeat?: [number, number] | undefined;
2933
+ scale?: number | undefined;
2934
+ offset?: [number, number] | undefined;
2935
+ normalMap?: string | undefined;
2936
+ normalScale?: number | undefined;
2937
+ bumpMap?: string | undefined;
2938
+ bumpScale?: number | undefined;
2939
+ } | undefined;
2940
+ } | undefined;
2941
+ slots?: Record<string, string> | undefined;
2942
+ materialPreset: string;
2943
+ gutterId?: string | undefined;
2944
+ outletId?: string | undefined;
2945
+ length: number;
2946
+ lengthMode?: "manual" | "to-ground" | undefined;
2947
+ diameter: number;
2948
+ standoff: number;
2949
+ shape: "auto" | "rect" | "round";
2950
+ strapStyle: "band" | "none";
2951
+ strapSpacing: number;
2952
+ terminal: "kickout" | "splash" | "straight";
2953
+ type: "downspout";
2954
+ } | {
2955
+ object: "node";
2956
+ name?: string | undefined;
2957
+ parentId: string | null;
2958
+ visible: boolean;
2959
+ camera?: {
2960
+ position: [number, number, number];
2961
+ target: [number, number, number];
2962
+ mode: "orthographic" | "perspective";
2963
+ fov?: number | undefined;
2964
+ zoom?: number | undefined;
2965
+ } | undefined;
2966
+ metadata: Record<string, unknown>;
2967
+ provenance?: {
2968
+ refs: {
2969
+ ns?: string | undefined;
2970
+ id: string;
2971
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
2972
+ }[];
2973
+ lineage?: {
2974
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
2975
+ fromIds: string[];
2976
+ } | undefined;
2977
+ } | undefined;
2978
+ id: `rvent_${string}`;
2979
+ material?: {
2980
+ id?: string | undefined;
2981
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
2982
+ properties?: {
2983
+ color: string;
2984
+ roughness: number;
2985
+ metalness: number;
2986
+ opacity: number;
2987
+ transparent: boolean;
2988
+ side: "back" | "double" | "front";
2989
+ } | undefined;
2990
+ texture?: {
2991
+ url: string;
2992
+ repeat?: [number, number] | undefined;
2993
+ scale?: number | undefined;
2994
+ offset?: [number, number] | undefined;
2995
+ normalMap?: string | undefined;
2996
+ normalScale?: number | undefined;
2997
+ bumpMap?: string | undefined;
2998
+ bumpScale?: number | undefined;
2999
+ } | undefined;
3000
+ } | undefined;
3001
+ materialPreset?: string | undefined;
3002
+ roofSegmentId?: string | undefined;
3003
+ position: [number, number, number];
3004
+ rotation: number;
3005
+ length: number;
3006
+ width: number;
3007
+ height: number;
3008
+ style: "metal" | "shingled" | "standard";
3009
+ endCaps: boolean;
3010
+ type: "ridge-vent";
3011
+ } | {
3012
+ object: "node";
3013
+ name?: string | undefined;
3014
+ parentId: string | null;
3015
+ visible: boolean;
3016
+ camera?: {
3017
+ position: [number, number, number];
3018
+ target: [number, number, number];
3019
+ mode: "orthographic" | "perspective";
3020
+ fov?: number | undefined;
3021
+ zoom?: number | undefined;
3022
+ } | undefined;
3023
+ metadata: Record<string, unknown>;
3024
+ provenance?: {
3025
+ refs: {
3026
+ ns?: string | undefined;
3027
+ id: string;
3028
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
3029
+ }[];
3030
+ lineage?: {
3031
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
3032
+ fromIds: string[];
3033
+ } | undefined;
3034
+ } | undefined;
3035
+ id: `solarpanel_${string}`;
3036
+ material?: {
3037
+ id?: string | undefined;
3038
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
3039
+ properties?: {
3040
+ color: string;
3041
+ roughness: number;
3042
+ metalness: number;
3043
+ opacity: number;
3044
+ transparent: boolean;
3045
+ side: "back" | "double" | "front";
3046
+ } | undefined;
3047
+ texture?: {
3048
+ url: string;
3049
+ repeat?: [number, number] | undefined;
3050
+ scale?: number | undefined;
3051
+ offset?: [number, number] | undefined;
3052
+ normalMap?: string | undefined;
3053
+ normalScale?: number | undefined;
3054
+ bumpMap?: string | undefined;
3055
+ bumpScale?: number | undefined;
3056
+ } | undefined;
3057
+ } | undefined;
3058
+ materialPreset?: string | undefined;
3059
+ panelMaterial?: {
3060
+ id?: string | undefined;
3061
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
3062
+ properties?: {
3063
+ color: string;
3064
+ roughness: number;
3065
+ metalness: number;
3066
+ opacity: number;
3067
+ transparent: boolean;
3068
+ side: "back" | "double" | "front";
3069
+ } | undefined;
3070
+ texture?: {
3071
+ url: string;
3072
+ repeat?: [number, number] | undefined;
3073
+ scale?: number | undefined;
3074
+ offset?: [number, number] | undefined;
3075
+ normalMap?: string | undefined;
3076
+ normalScale?: number | undefined;
3077
+ bumpMap?: string | undefined;
3078
+ bumpScale?: number | undefined;
3079
+ } | undefined;
3080
+ } | undefined;
3081
+ panelMaterialPreset?: string | undefined;
3082
+ panelTypePreset?: "compact" | "frameless" | "residential" | "residential-large" | undefined;
3083
+ roofSegmentId?: string | undefined;
3084
+ position: [number, number, number];
3085
+ rotation: number;
3086
+ rows: number;
3087
+ columns: number;
3088
+ panelWidth: number;
3089
+ panelHeight: number;
3090
+ gapX: number;
3091
+ gapY: number;
3092
+ mountingType: "flush" | "tilted";
3093
+ tiltAngle: number;
3094
+ standoffHeight: number;
3095
+ frameThickness: number;
3096
+ frameDepth: number;
3097
+ surfaceNormal?: [number, number, number] | undefined;
3098
+ type: "solar-panel";
3099
+ } | {
3100
+ object: "node";
3101
+ name?: string | undefined;
3102
+ parentId: string | null;
3103
+ visible: boolean;
3104
+ camera?: {
3105
+ position: [number, number, number];
3106
+ target: [number, number, number];
3107
+ mode: "orthographic" | "perspective";
3108
+ fov?: number | undefined;
3109
+ zoom?: number | undefined;
3110
+ } | undefined;
3111
+ metadata: Record<string, unknown>;
3112
+ provenance?: {
3113
+ refs: {
3114
+ ns?: string | undefined;
3115
+ id: string;
3116
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
3117
+ }[];
3118
+ lineage?: {
3119
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
3120
+ fromIds: string[];
3121
+ } | undefined;
3122
+ } | undefined;
3123
+ id: `site_${string}`;
3124
+ polygon: {
3125
+ type: "polygon";
3126
+ points: [number, number][];
3127
+ };
3128
+ terrain?: {
3129
+ type: "heightfield";
3130
+ origin: [number, number];
3131
+ spacing: number;
3132
+ cols: number;
3133
+ rows: number;
3134
+ step: number;
3135
+ heights: string;
3136
+ } | undefined;
3137
+ showGround?: boolean | undefined;
3138
+ presentation?: {
3139
+ theme?: string | undefined;
3140
+ exposure?: number | undefined;
3141
+ shading?: "rendered" | "solid" | undefined;
3142
+ edges?: "off" | "soft" | "strong" | undefined;
3143
+ shadows?: boolean | undefined;
3144
+ lighting?: {
3145
+ background?: string | undefined;
3146
+ backgroundSky?: string | null | undefined;
3147
+ ground?: string | undefined;
3148
+ ambient?: {
3149
+ color: string;
3150
+ intensity: number;
3151
+ } | undefined;
3152
+ hemi?: {
3153
+ sky: string;
3154
+ ground: string;
3155
+ intensity: number;
3156
+ } | undefined;
3157
+ lights?: {
3158
+ color: string;
3159
+ intensity: number;
3160
+ position: [number, number, number];
3161
+ target?: [number, number, number] | undefined;
3162
+ castShadow?: boolean | undefined;
3163
+ shadow?: {
3164
+ intensity?: number | undefined;
3165
+ bias?: number | undefined;
3166
+ normalBias?: number | undefined;
3167
+ radius?: number | undefined;
3168
+ mapSize?: 512 | 1024 | 2048 | 4096 | undefined;
3169
+ camera?: {
3170
+ left: number;
3171
+ right: number;
3172
+ top: number;
3173
+ bottom: number;
3174
+ near: number;
3175
+ far: number;
3176
+ } | undefined;
3177
+ } | undefined;
3178
+ }[] | undefined;
3179
+ environment?: {
3180
+ source: "gradient" | "none" | "room";
3181
+ intensity: number;
3182
+ } | undefined;
3183
+ } | undefined;
3184
+ postprocessing?: {
3185
+ ambientOcclusion?: boolean | undefined;
3186
+ colorGrading?: boolean | undefined;
3187
+ } | undefined;
3188
+ display?: {
3189
+ mode?: "construction" | "finished" | "systems" | undefined;
3190
+ families?: Partial<Record<"device" | "exposed-structure" | "fill" | "finish" | "foundation" | "framing" | "inspection" | "insulation" | "masonry" | "membrane" | "run" | "service-space" | "sheathing", boolean>> | undefined;
3191
+ disciplines?: Partial<Record<"electrical" | "fire" | "low-voltage" | "mechanical" | "plumbing", boolean>> | undefined;
3192
+ xray?: boolean | undefined;
3193
+ colorBy?: "material" | "service" | undefined;
3194
+ } | undefined;
3195
+ } | undefined;
3196
+ address?: {
3197
+ street?: string | undefined;
3198
+ city?: string | undefined;
3199
+ state?: string | undefined;
3200
+ zip?: string | undefined;
3201
+ } | undefined;
3202
+ parcel?: {
3203
+ apn?: string | undefined;
3204
+ source?: string | undefined;
3205
+ county?: string | undefined;
3206
+ state?: string | undefined;
3207
+ lotAreaSqFt?: number | undefined;
3208
+ originLngLat?: [number, number] | undefined;
3209
+ resolvedAt?: string | undefined;
3210
+ layer?: string | undefined;
3211
+ notes?: string[] | undefined;
3212
+ } | undefined;
3213
+ setbacks?: {
3214
+ front: number;
3215
+ side: number;
3216
+ rear: number;
3217
+ left?: number | undefined;
3218
+ right?: number | undefined;
3219
+ streetSide?: number | undefined;
3220
+ } | undefined;
3221
+ setbacksSource?: string | undefined;
3222
+ zone?: string | undefined;
3223
+ frontEdge?: number | undefined;
3224
+ streetEdges?: number[] | undefined;
3225
+ sightTriangleFt?: number | undefined;
3226
+ northRotation?: number | undefined;
3227
+ dossier?: {
3228
+ [x: string]: unknown;
3229
+ provider: string;
3230
+ asOf: string;
3231
+ point?: {
3232
+ lat?: number | undefined;
3233
+ lng?: number | undefined;
3234
+ source?: string | undefined;
3235
+ } | undefined;
3236
+ address?: {
3237
+ formatted?: string | undefined;
3238
+ precision?: string | undefined;
3239
+ } | undefined;
3240
+ sections: Record<string, {
3241
+ [x: string]: unknown;
3242
+ status: string;
3243
+ summary?: string | undefined;
3244
+ reason?: string | undefined;
3245
+ source?: {
3246
+ name?: string | undefined;
3247
+ kind?: string | undefined;
3248
+ vintage?: string | undefined;
3249
+ attribution?: string | undefined;
3250
+ } | undefined;
3251
+ }>;
3252
+ parcel?: Record<string, unknown> | undefined;
3253
+ flood?: Record<string, unknown> | undefined;
3254
+ codeBasis?: Record<string, unknown> | undefined;
3255
+ zoning?: Record<string, unknown> | undefined;
3256
+ utilities?: Record<string, unknown> | undefined;
3257
+ soils?: Record<string, unknown> | undefined;
3258
+ wetlands?: Record<string, unknown> | undefined;
3259
+ structures?: Record<string, unknown> | undefined;
3260
+ elevation?: Record<string, unknown> | undefined;
3261
+ boundaries?: Record<string, unknown> | undefined;
3262
+ } | undefined;
3263
+ contourIntervalIn?: number | undefined;
3264
+ contours3d?: boolean | undefined;
3265
+ terrainContours?: {
3266
+ datum: string;
3267
+ intervalFt: number;
3268
+ source?: string | undefined;
3269
+ lines: {
3270
+ elevationFt: number;
3271
+ points: [number, number][];
3272
+ }[];
3273
+ } | undefined;
3274
+ wallTypes?: {
3275
+ id: string;
3276
+ label: string;
3277
+ assembly: {
3278
+ layers: {
3279
+ id: string;
3280
+ role: "air" | "covering" | "deck" | "fill" | "finish" | "furring" | "glazing" | "insulation" | "lining" | "membrane" | "sheathing" | "shell" | "structure" | "substrate" | "underlay";
3281
+ thickness: number;
3282
+ core?: true | undefined;
3283
+ spacing?: number | undefined;
3284
+ material?: string | undefined;
3285
+ slot?: string | undefined;
3286
+ returns?: boolean | undefined;
3287
+ display?: "construction" | "finished" | undefined;
3288
+ inset?: number | undefined;
3289
+ bottom?: number | undefined;
3290
+ lift?: number | undefined;
3291
+ src?: string | undefined;
3292
+ }[];
3293
+ backing?: {
3294
+ id: string;
3295
+ role: "air" | "covering" | "deck" | "fill" | "finish" | "furring" | "glazing" | "insulation" | "lining" | "membrane" | "sheathing" | "shell" | "structure" | "substrate" | "underlay";
3296
+ thickness: number;
3297
+ core?: true | undefined;
3298
+ spacing?: number | undefined;
3299
+ material?: string | undefined;
3300
+ slot?: string | undefined;
3301
+ returns?: boolean | undefined;
3302
+ display?: "construction" | "finished" | undefined;
3303
+ inset?: number | undefined;
3304
+ bottom?: number | undefined;
3305
+ lift?: number | undefined;
3306
+ src?: string | undefined;
3307
+ }[] | undefined;
3308
+ face?: "exterior" | "front" | undefined;
3309
+ presetId?: string | undefined;
3310
+ cavityInsulation?: string | undefined;
3311
+ };
3312
+ }[] | undefined;
3313
+ children: string[];
3314
+ type: "site";
3315
+ } | {
3316
+ object: "node";
3317
+ name?: string | undefined;
3318
+ parentId: string | null;
3319
+ visible: boolean;
3320
+ camera?: {
3321
+ position: [number, number, number];
3322
+ target: [number, number, number];
3323
+ mode: "orthographic" | "perspective";
3324
+ fov?: number | undefined;
3325
+ zoom?: number | undefined;
3326
+ } | undefined;
3327
+ metadata: Record<string, unknown>;
3328
+ provenance?: {
3329
+ refs: {
3330
+ ns?: string | undefined;
3331
+ id: string;
3332
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
3333
+ }[];
3334
+ lineage?: {
3335
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
3336
+ fromIds: string[];
2376
3337
  } | undefined;
2377
3338
  } | undefined;
3339
+ id: `separator_${string}`;
2378
3340
  start: [number, number];
2379
3341
  end: [number, number];
2380
- frontSide: "exterior" | "interior" | "unknown";
2381
- backSide: "exterior" | "interior" | "unknown";
2382
- type: "wall";
3342
+ type: "separator";
3343
+ } | {
3344
+ object: "node";
3345
+ name?: string | undefined;
3346
+ parentId: string | null;
3347
+ visible: boolean;
3348
+ camera?: {
3349
+ position: [number, number, number];
3350
+ target: [number, number, number];
3351
+ mode: "orthographic" | "perspective";
3352
+ fov?: number | undefined;
3353
+ zoom?: number | undefined;
3354
+ } | undefined;
3355
+ metadata: Record<string, unknown>;
3356
+ provenance?: {
3357
+ refs: {
3358
+ ns?: string | undefined;
3359
+ id: string;
3360
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
3361
+ }[];
3362
+ lineage?: {
3363
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
3364
+ fromIds: string[];
3365
+ } | undefined;
3366
+ } | undefined;
3367
+ id: `floor-opening_${string}`;
3368
+ polygon: [number, number][];
3369
+ hostZoneId?: string | undefined;
3370
+ legacyPlateCuts?: Record<string, [number, number][][]> | undefined;
3371
+ legacyCeilingCuts?: Record<string, [number, number][][]> | undefined;
3372
+ source: string;
3373
+ ownerId?: string | undefined;
3374
+ surfaceId?: string | undefined;
3375
+ drawnOn: "ceiling" | "floor";
3376
+ cutsPrimary: boolean;
3377
+ cutsAdjacent: boolean;
3378
+ type: "floor-opening";
2383
3379
  } | {
2384
3380
  object: "node";
2385
3381
  name?: string | undefined;
@@ -2421,6 +3417,11 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
2421
3417
  url: string;
2422
3418
  repeat?: [number, number] | undefined;
2423
3419
  scale?: number | undefined;
3420
+ offset?: [number, number] | undefined;
3421
+ normalMap?: string | undefined;
3422
+ normalScale?: number | undefined;
3423
+ bumpMap?: string | undefined;
3424
+ bumpScale?: number | undefined;
2424
3425
  } | undefined;
2425
3426
  } | undefined;
2426
3427
  materialPreset?: string | undefined;
@@ -2469,6 +3470,42 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
2469
3470
  color: string;
2470
3471
  style: "guard" | "horizontal" | "picket" | "privacy" | "rail" | "slat";
2471
3472
  type: "fence";
3473
+ } | {
3474
+ object: "node";
3475
+ name?: string | undefined;
3476
+ parentId: string | null;
3477
+ visible: boolean;
3478
+ camera?: {
3479
+ position: [number, number, number];
3480
+ target: [number, number, number];
3481
+ mode: "orthographic" | "perspective";
3482
+ fov?: number | undefined;
3483
+ zoom?: number | undefined;
3484
+ } | undefined;
3485
+ metadata: Record<string, unknown>;
3486
+ provenance?: {
3487
+ refs: {
3488
+ ns?: string | undefined;
3489
+ id: string;
3490
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
3491
+ }[];
3492
+ lineage?: {
3493
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
3494
+ fromIds: string[];
3495
+ } | undefined;
3496
+ } | undefined;
3497
+ id: `beam_${string}`;
3498
+ start: [number, number];
3499
+ end: [number, number];
3500
+ width: number;
3501
+ depth: number;
3502
+ size?: string | undefined;
3503
+ plies: number;
3504
+ material: "glulam" | "lvl" | "pressure-treated" | "sawn" | "steel";
3505
+ placement: "dropped" | "flush";
3506
+ topElevation?: number | undefined;
3507
+ supportSlabId?: string | undefined;
3508
+ type: "beam";
2472
3509
  } | {
2473
3510
  object: "node";
2474
3511
  name?: string | undefined;
@@ -2952,6 +3989,16 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
2952
3989
  color: string;
2953
3990
  intensity: number;
2954
3991
  distance?: number | undefined;
3992
+ spot?: {
3993
+ direction: [number, number, number];
3994
+ angle: number;
3995
+ softness: number;
3996
+ } | undefined;
3997
+ shadows?: boolean | undefined;
3998
+ glow?: {
3999
+ size: number;
4000
+ strength: number;
4001
+ } | undefined;
2955
4002
  }[];
2956
4003
  undersides: {
2957
4004
  part?: string | undefined;
@@ -2970,6 +4017,17 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
2970
4017
  }[] | undefined;
2971
4018
  cutout: boolean;
2972
4019
  collider: boolean;
4020
+ shape?: {
4021
+ tolerance: number;
4022
+ bands: {
4023
+ y0: number;
4024
+ y1: number;
4025
+ polygons: {
4026
+ outer: [number, number][];
4027
+ holes?: [number, number][][] | undefined;
4028
+ }[];
4029
+ }[];
4030
+ } | undefined;
2973
4031
  triangles: number;
2974
4032
  coverage?: number | undefined;
2975
4033
  uncovered?: {
@@ -2984,6 +4042,19 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
2984
4042
  } | undefined;
2985
4043
  inputs: string;
2986
4044
  } | undefined;
4045
+ drop?: number | undefined;
4046
+ } | undefined;
4047
+ roomType?: "deck" | "patio" | "porch" | undefined;
4048
+ porchFraming?: {
4049
+ auto?: boolean | undefined;
4050
+ postSize?: string | undefined;
4051
+ postSpacing?: number | undefined;
4052
+ beamSize?: string | undefined;
4053
+ } | undefined;
4054
+ decking?: {
4055
+ boardSize?: "2x4" | "2x6" | "5/4x6" | "composite" | undefined;
4056
+ gap?: number | undefined;
4057
+ direction?: "diagonal" | "parallel" | "perpendicular" | undefined;
2987
4058
  } | undefined;
2988
4059
  ceiling?: {
2989
4060
  regions?: {
@@ -3060,6 +4131,11 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
3060
4131
  url: string;
3061
4132
  repeat?: [number, number] | undefined;
3062
4133
  scale?: number | undefined;
4134
+ offset?: [number, number] | undefined;
4135
+ normalMap?: string | undefined;
4136
+ normalScale?: number | undefined;
4137
+ bumpMap?: string | undefined;
4138
+ bumpScale?: number | undefined;
3063
4139
  } | undefined;
3064
4140
  } | undefined;
3065
4141
  materialPreset?: string | undefined;
@@ -3074,92 +4150,38 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
3074
4150
  }[];
3075
4151
  openingIds?: string[] | undefined;
3076
4152
  height?: number | undefined;
3077
- regions?: {
3078
- id: string;
3079
- polygon: [number, number][];
3080
- finish: string | Record<string, unknown>;
3081
- }[] | undefined;
3082
- boundary?: "auto" | undefined;
3083
- zoneId?: string | undefined;
3084
- autoFromWalls: boolean;
3085
- type: "ceiling";
3086
- } | {
3087
- object: "node";
3088
- name?: string | undefined;
3089
- parentId: string | null;
3090
- visible: boolean;
3091
- camera?: {
3092
- position: [number, number, number];
3093
- target: [number, number, number];
3094
- mode: "orthographic" | "perspective";
3095
- fov?: number | undefined;
3096
- zoom?: number | undefined;
3097
- } | undefined;
3098
- metadata: Record<string, unknown>;
3099
- provenance?: {
3100
- refs: {
3101
- ns?: string | undefined;
3102
- id: string;
3103
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
3104
- }[];
3105
- lineage?: {
3106
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
3107
- fromIds: string[];
4153
+ buildUp?: {
4154
+ presetId?: string | undefined;
4155
+ finish?: {
4156
+ kind: "drywall" | "plaster" | "wood-plank";
4157
+ thickness: number;
4158
+ name?: string | undefined;
3108
4159
  } | undefined;
3109
- } | undefined;
3110
- id: `scan_${string}`;
3111
- url: string | null;
3112
- captureSession: {
3113
- sessionId: string;
3114
- schemaVersion?: number | undefined;
3115
- revisionId?: string | undefined;
3116
- manifestUrl?: string | undefined;
3117
- } | null;
3118
- layers: Record<string, boolean>;
3119
- position: [number, number, number];
3120
- rotation: [number, number, number];
3121
- scale: number;
3122
- opacity: number;
3123
- type: "scan";
3124
- } | {
3125
- object: "node";
3126
- name?: string | undefined;
3127
- parentId: string | null;
3128
- visible: boolean;
3129
- camera?: {
3130
- position: [number, number, number];
3131
- target: [number, number, number];
3132
- mode: "orthographic" | "perspective";
3133
- fov?: number | undefined;
3134
- zoom?: number | undefined;
3135
- } | undefined;
3136
- metadata: Record<string, unknown>;
3137
- provenance?: {
3138
- refs: {
3139
- ns?: string | undefined;
3140
- id: string;
3141
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
3142
- }[];
3143
- lineage?: {
3144
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
3145
- fromIds: string[];
4160
+ framing?: {
4161
+ system: "joists" | "truss-chords";
4162
+ size: "2x10" | "2x12" | "2x4" | "2x6" | "2x8";
4163
+ spacing: number;
3146
4164
  } | undefined;
3147
- } | undefined;
3148
- id: `guide_${string}`;
3149
- url: string;
3150
- position: [number, number, number];
3151
- rotation: [number, number, number];
3152
- scale: number;
3153
- opacity: number;
3154
- scaleReference: {
3155
- start: [number, number];
3156
- end: [number, number];
3157
- realLengthMeters: number;
3158
- measuredLengthUnits: number;
3159
- metersPerUnit: number;
3160
- label: string;
3161
- } | null;
3162
- type: "guide";
4165
+ decking?: {
4166
+ kind: "osb" | "plywood";
4167
+ thickness: number;
4168
+ name?: string | undefined;
4169
+ } | undefined;
4170
+ insulation?: {
4171
+ kind: "batt" | "blown" | "rigid";
4172
+ thickness: number;
4173
+ name?: string | undefined;
4174
+ } | undefined;
4175
+ } | undefined;
4176
+ regions?: {
4177
+ id: string;
4178
+ polygon: [number, number][];
4179
+ finish: string | Record<string, unknown>;
4180
+ }[] | undefined;
4181
+ boundary?: "auto" | undefined;
4182
+ zoneId?: string | undefined;
4183
+ autoFromWalls: boolean;
4184
+ type: "ceiling";
3163
4185
  } | {
3164
4186
  object: "node";
3165
4187
  name?: string | undefined;
@@ -3184,11 +4206,59 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
3184
4206
  fromIds: string[];
3185
4207
  } | undefined;
3186
4208
  } | undefined;
3187
- id: `spawn_${string}`;
4209
+ id: `sseg_${string}`;
4210
+ material?: {
4211
+ id?: string | undefined;
4212
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
4213
+ properties?: {
4214
+ color: string;
4215
+ roughness: number;
4216
+ metalness: number;
4217
+ opacity: number;
4218
+ transparent: boolean;
4219
+ side: "back" | "double" | "front";
4220
+ } | undefined;
4221
+ texture?: {
4222
+ url: string;
4223
+ repeat?: [number, number] | undefined;
4224
+ scale?: number | undefined;
4225
+ offset?: [number, number] | undefined;
4226
+ normalMap?: string | undefined;
4227
+ normalScale?: number | undefined;
4228
+ bumpMap?: string | undefined;
4229
+ bumpScale?: number | undefined;
4230
+ } | undefined;
4231
+ } | undefined;
4232
+ materialPreset?: string | undefined;
4233
+ slots?: Record<string, string> | undefined;
3188
4234
  position: [number, number, number];
3189
4235
  rotation: number;
3190
- supportSlabId?: string | undefined;
3191
- type: "spawn";
4236
+ segmentType: "landing" | "stair";
4237
+ width: number;
4238
+ length: number;
4239
+ height: number;
4240
+ stepCount: number;
4241
+ attachmentSide: "front" | "left" | "right";
4242
+ fillToFloor: boolean;
4243
+ construction?: {
4244
+ mode: "center-stringer" | "open" | "side-stringers" | "solid" | "waist";
4245
+ waistThickness: number;
4246
+ treadThickness: number;
4247
+ riserThickness: number;
4248
+ nosing: number;
4249
+ finishThickness: number;
4250
+ closedRisers: boolean;
4251
+ stringerWidth: number;
4252
+ stringerDepth: number;
4253
+ } | undefined;
4254
+ winder?: {
4255
+ turn: "left" | "right";
4256
+ innerGap: number;
4257
+ walkingLineOffset: number;
4258
+ division: "equal-angle" | "equal-going";
4259
+ } | undefined;
4260
+ thickness: number;
4261
+ type: "stair-segment";
3192
4262
  } | {
3193
4263
  object: "node";
3194
4264
  name?: string | undefined;
@@ -3213,22 +4283,7 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
3213
4283
  fromIds: string[];
3214
4284
  } | undefined;
3215
4285
  } | undefined;
3216
- id: `shelf_${string}`;
3217
- children: string[];
3218
- position: [number, number, number];
3219
- rotation: [number, number, number];
3220
- supportSlabId?: string | undefined;
3221
- width: number;
3222
- depth: number;
3223
- thickness: number;
3224
- height: number;
3225
- style: "bookshelf" | "cubby" | "open-rack" | "wall-shelf";
3226
- rows: number;
3227
- columns: number;
3228
- withBack: boolean;
3229
- withSides: boolean;
3230
- withBottom: boolean;
3231
- bracketStyle: "hidden" | "industrial" | "minimal";
4286
+ id: `stair_${string}`;
3232
4287
  material?: {
3233
4288
  id?: string | undefined;
3234
4289
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
@@ -3244,11 +4299,160 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
3244
4299
  url: string;
3245
4300
  repeat?: [number, number] | undefined;
3246
4301
  scale?: number | undefined;
4302
+ offset?: [number, number] | undefined;
4303
+ normalMap?: string | undefined;
4304
+ normalScale?: number | undefined;
4305
+ bumpMap?: string | undefined;
4306
+ bumpScale?: number | undefined;
3247
4307
  } | undefined;
3248
4308
  } | undefined;
3249
4309
  materialPreset?: string | undefined;
4310
+ railingMaterial?: {
4311
+ id?: string | undefined;
4312
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
4313
+ properties?: {
4314
+ color: string;
4315
+ roughness: number;
4316
+ metalness: number;
4317
+ opacity: number;
4318
+ transparent: boolean;
4319
+ side: "back" | "double" | "front";
4320
+ } | undefined;
4321
+ texture?: {
4322
+ url: string;
4323
+ repeat?: [number, number] | undefined;
4324
+ scale?: number | undefined;
4325
+ offset?: [number, number] | undefined;
4326
+ normalMap?: string | undefined;
4327
+ normalScale?: number | undefined;
4328
+ bumpMap?: string | undefined;
4329
+ bumpScale?: number | undefined;
4330
+ } | undefined;
4331
+ } | undefined;
4332
+ railingMaterialPreset?: string | undefined;
4333
+ treadMaterial?: {
4334
+ id?: string | undefined;
4335
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
4336
+ properties?: {
4337
+ color: string;
4338
+ roughness: number;
4339
+ metalness: number;
4340
+ opacity: number;
4341
+ transparent: boolean;
4342
+ side: "back" | "double" | "front";
4343
+ } | undefined;
4344
+ texture?: {
4345
+ url: string;
4346
+ repeat?: [number, number] | undefined;
4347
+ scale?: number | undefined;
4348
+ offset?: [number, number] | undefined;
4349
+ normalMap?: string | undefined;
4350
+ normalScale?: number | undefined;
4351
+ bumpMap?: string | undefined;
4352
+ bumpScale?: number | undefined;
4353
+ } | undefined;
4354
+ } | undefined;
4355
+ treadMaterialPreset?: string | undefined;
4356
+ sideMaterial?: {
4357
+ id?: string | undefined;
4358
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
4359
+ properties?: {
4360
+ color: string;
4361
+ roughness: number;
4362
+ metalness: number;
4363
+ opacity: number;
4364
+ transparent: boolean;
4365
+ side: "back" | "double" | "front";
4366
+ } | undefined;
4367
+ texture?: {
4368
+ url: string;
4369
+ repeat?: [number, number] | undefined;
4370
+ scale?: number | undefined;
4371
+ offset?: [number, number] | undefined;
4372
+ normalMap?: string | undefined;
4373
+ normalScale?: number | undefined;
4374
+ bumpMap?: string | undefined;
4375
+ bumpScale?: number | undefined;
4376
+ } | undefined;
4377
+ } | undefined;
4378
+ sideMaterialPreset?: string | undefined;
3250
4379
  slots?: Record<string, string> | undefined;
3251
- type: "shelf";
4380
+ position: [number, number, number];
4381
+ rotation: number;
4382
+ supportSlabId?: string | undefined;
4383
+ stairType: "curved" | "spiral" | "straight";
4384
+ fromLevelId: string | null;
4385
+ toLevelId: string | null;
4386
+ deckSlabId?: string | undefined;
4387
+ slabOpeningMode: "destination" | "none";
4388
+ openingOffset: number;
4389
+ width: number;
4390
+ totalRise?: number | undefined;
4391
+ designTargets?: {
4392
+ maxRiserHeight: number;
4393
+ minimumGoing: number;
4394
+ targetGoing: number;
4395
+ minimumHeadroom: number;
4396
+ } | undefined;
4397
+ uniformRisers?: boolean | undefined;
4398
+ stepCount: number;
4399
+ autoSurfaceSnap?: boolean | undefined;
4400
+ destinationSurfaceId?: string | undefined;
4401
+ thickness: number;
4402
+ fillToFloor: boolean;
4403
+ construction?: {
4404
+ mode: "center-stringer" | "open" | "side-stringers" | "solid" | "waist";
4405
+ waistThickness: number;
4406
+ treadThickness: number;
4407
+ riserThickness: number;
4408
+ nosing: number;
4409
+ finishThickness: number;
4410
+ closedRisers: boolean;
4411
+ stringerWidth: number;
4412
+ stringerDepth: number;
4413
+ } | undefined;
4414
+ structure?: {
4415
+ type: "concrete" | "steel-stringers" | "wood-stringers";
4416
+ stringerStock: "2x10" | "2x12";
4417
+ stringerType: "cut" | "housed";
4418
+ stringerSpacing: number;
4419
+ stringerCount?: number | undefined;
4420
+ treadStock?: "2x12" | "2x6-pair" | "5/4x6-pair" | "plywood-finish" | undefined;
4421
+ closedRisers?: boolean | undefined;
4422
+ treated?: boolean | undefined;
4423
+ nosing?: number | undefined;
4424
+ } | undefined;
4425
+ innerRadius: number;
4426
+ sweepAngle: number;
4427
+ topLandingMode: "integrated" | "none";
4428
+ topLandingDepth: number;
4429
+ showCenterColumn: boolean;
4430
+ showStepSupports: boolean;
4431
+ railingMode: "both" | "left" | "none" | "right";
4432
+ railingHeight: number;
4433
+ railingStyle?: "balusters" | "boards" | "cable" | "glass" | "metal" | "post-and-rail" | undefined;
4434
+ railingPath?: "continuous" | "original" | undefined;
4435
+ handrail?: {
4436
+ mode: "both" | "left" | "none" | "right";
4437
+ height: number;
4438
+ diameter: number;
4439
+ offset: number;
4440
+ bottom?: {
4441
+ extension: number;
4442
+ return: "floor" | "none" | "post" | "wall";
4443
+ returnLength: number;
4444
+ } | undefined;
4445
+ top?: {
4446
+ extension: number;
4447
+ return: "floor" | "none" | "post" | "wall";
4448
+ returnLength: number;
4449
+ } | undefined;
4450
+ } | undefined;
4451
+ railingTopPost?: boolean | undefined;
4452
+ railingTopReach?: number | undefined;
4453
+ railingPostThrough?: boolean | undefined;
4454
+ children: `sseg_${string}`[];
4455
+ type: "stair";
3252
4456
  } | {
3253
4457
  object: "node";
3254
4458
  name?: string | undefined;
@@ -3273,29 +4477,20 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
3273
4477
  fromIds: string[];
3274
4478
  } | undefined;
3275
4479
  } | undefined;
3276
- id: `duct-fitting_${string}`;
4480
+ id: `scan_${string}`;
4481
+ url: string | null;
4482
+ captureSession: {
4483
+ sessionId: string;
4484
+ schemaVersion?: number | undefined;
4485
+ revisionId?: string | undefined;
4486
+ manifestUrl?: string | undefined;
4487
+ } | null;
4488
+ layers: Record<string, boolean>;
3277
4489
  position: [number, number, number];
3278
4490
  rotation: [number, number, number];
3279
- fittingType: "access-panel" | "coupling" | "cross" | "damper" | "elbow" | "end-cap" | "reducer" | "tee" | "transition";
3280
- shape: "oval" | "rect" | "round";
3281
- inletShape?: "oval" | "rect" | "round" | undefined;
3282
- outletShape?: "oval" | "rect" | "round" | undefined;
3283
- width: number;
3284
- height: number;
3285
- shape2: "oval" | "rect" | "round";
3286
- width2: number;
3287
- height2: number;
3288
- angle: number;
3289
- branchAngle: number;
3290
- diameter: number;
3291
- diameter2: number;
3292
- ductMaterial: "duct-board" | "flex" | "sheet-metal";
3293
- system: "return" | "supply";
3294
- damperAngle: number;
3295
- panelWidth: number;
3296
- panelHeight: number;
3297
- slots?: Record<string, string> | undefined;
3298
- type: "duct-fitting";
4491
+ scale: number;
4492
+ opacity: number;
4493
+ type: "scan";
3299
4494
  } | {
3300
4495
  object: "node";
3301
4496
  name?: string | undefined;
@@ -3320,19 +4515,23 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
3320
4515
  fromIds: string[];
3321
4516
  } | undefined;
3322
4517
  } | undefined;
3323
- id: `duct-terminal_${string}`;
4518
+ id: `guide_${string}`;
4519
+ url: string;
3324
4520
  position: [number, number, number];
3325
- rotation: number;
3326
- supportSlabId?: string | undefined;
3327
- terminalType: "diffuser" | "return-grille" | "supply-register";
3328
- mount: "ceiling" | "floor" | "wall";
3329
- width: number;
3330
- depth: number;
3331
- collarShape: "oval" | "rect" | "round";
3332
- collarDiameter: number;
3333
- collarWidth: number;
3334
- collarHeight: number;
3335
- type: "duct-terminal";
4521
+ rotation: [number, number, number];
4522
+ scale: number;
4523
+ opacity: number;
4524
+ scaleReference: {
4525
+ start: [number, number];
4526
+ end: [number, number];
4527
+ realLengthMeters: number;
4528
+ measuredLengthUnits: number;
4529
+ metersPerUnit: number;
4530
+ displayLength?: number | undefined;
4531
+ displayUnit?: "centimeters" | "feet" | "inches" | "meters" | undefined;
4532
+ label: string;
4533
+ } | null;
4534
+ type: "guide";
3336
4535
  } | {
3337
4536
  object: "node";
3338
4537
  name?: string | undefined;
@@ -3357,23 +4556,89 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
3357
4556
  fromIds: string[];
3358
4557
  } | undefined;
3359
4558
  } | undefined;
3360
- id: `hvac-equipment_${string}`;
3361
- position: [number, number, number];
3362
- rotation: number;
3363
- supportSlabId?: string | undefined;
3364
- equipmentType: "air-handler" | "condenser" | "furnace";
3365
- width: number;
3366
- depth: number;
3367
- height: number;
3368
- supplyShape: "oval" | "rect" | "round";
3369
- returnShape: "oval" | "rect" | "round";
3370
- supplyDiameter: number;
3371
- returnDiameter: number;
3372
- supplyWidth: number;
3373
- supplyHeight: number;
3374
- returnWidth: number;
3375
- returnHeight: number;
3376
- type: "hvac-equipment";
4559
+ id: `measurement_${string}`;
4560
+ measurement: {
4561
+ kind: "distance";
4562
+ points: [{
4563
+ kind: "feature";
4564
+ reference: {
4565
+ nodeId: string;
4566
+ featureId: string;
4567
+ parameters?: Record<string, string | number | boolean> | undefined;
4568
+ };
4569
+ fallback: [number, number, number];
4570
+ } | [number, number, number], {
4571
+ kind: "feature";
4572
+ reference: {
4573
+ nodeId: string;
4574
+ featureId: string;
4575
+ parameters?: Record<string, string | number | boolean> | undefined;
4576
+ };
4577
+ fallback: [number, number, number];
4578
+ } | [number, number, number]];
4579
+ } | {
4580
+ kind: "angle";
4581
+ points: [{
4582
+ kind: "feature";
4583
+ reference: {
4584
+ nodeId: string;
4585
+ featureId: string;
4586
+ parameters?: Record<string, string | number | boolean> | undefined;
4587
+ };
4588
+ fallback: [number, number, number];
4589
+ } | [number, number, number], {
4590
+ kind: "feature";
4591
+ reference: {
4592
+ nodeId: string;
4593
+ featureId: string;
4594
+ parameters?: Record<string, string | number | boolean> | undefined;
4595
+ };
4596
+ fallback: [number, number, number];
4597
+ } | [number, number, number], {
4598
+ kind: "feature";
4599
+ reference: {
4600
+ nodeId: string;
4601
+ featureId: string;
4602
+ parameters?: Record<string, string | number | boolean> | undefined;
4603
+ };
4604
+ fallback: [number, number, number];
4605
+ } | [number, number, number]];
4606
+ } | {
4607
+ kind: "area";
4608
+ base: ({
4609
+ kind: "feature";
4610
+ reference: {
4611
+ nodeId: string;
4612
+ featureId: string;
4613
+ parameters?: Record<string, string | number | boolean> | undefined;
4614
+ };
4615
+ fallback: [number, number, number];
4616
+ } | [number, number, number])[];
4617
+ } | {
4618
+ kind: "perimeter";
4619
+ base: ({
4620
+ kind: "feature";
4621
+ reference: {
4622
+ nodeId: string;
4623
+ featureId: string;
4624
+ parameters?: Record<string, string | number | boolean> | undefined;
4625
+ };
4626
+ fallback: [number, number, number];
4627
+ } | [number, number, number])[];
4628
+ } | {
4629
+ kind: "volume";
4630
+ base: ({
4631
+ kind: "feature";
4632
+ reference: {
4633
+ nodeId: string;
4634
+ featureId: string;
4635
+ parameters?: Record<string, string | number | boolean> | undefined;
4636
+ };
4637
+ fallback: [number, number, number];
4638
+ } | [number, number, number])[];
4639
+ extrusion: [number, number, number];
4640
+ };
4641
+ type: "measurement";
3377
4642
  } | {
3378
4643
  object: "node";
3379
4644
  name?: string | undefined;
@@ -3398,10 +4663,11 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
3398
4663
  fromIds: string[];
3399
4664
  } | undefined;
3400
4665
  } | undefined;
3401
- id: `liquid-line_${string}`;
3402
- path: [number, number, number][];
3403
- diameter: number;
3404
- type: "liquid-line";
4666
+ id: `spawn_${string}`;
4667
+ position: [number, number, number];
4668
+ rotation: number;
4669
+ supportSlabId?: string | undefined;
4670
+ type: "spawn";
3405
4671
  } | {
3406
4672
  object: "node";
3407
4673
  name?: string | undefined;
@@ -3426,7 +4692,7 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
3426
4692
  fromIds: string[];
3427
4693
  } | undefined;
3428
4694
  } | undefined;
3429
- id: `pipe-segment_${string}`;
4695
+ id: `duct-segment_${string}`;
3430
4696
  path: [number, number, number][];
3431
4697
  autoHangers?: boolean | undefined;
3432
4698
  hangerOverrides?: Record<string, {
@@ -3444,10 +4710,18 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
3444
4710
  endUV: [number, number];
3445
4711
  offset: number;
3446
4712
  } | undefined;
4713
+ shape: "oval" | "rect" | "round";
3447
4714
  diameter: number;
3448
- pipeMaterial: "abs" | "cast-iron" | "pvc";
3449
- system: "vent" | "waste";
3450
- type: "pipe-segment";
4715
+ width: number;
4716
+ height: number;
4717
+ roll: number;
4718
+ ductMaterial: "duct-board" | "flex" | "sheet-metal" | "spiral";
4719
+ seamDetail: boolean;
4720
+ insulated: boolean;
4721
+ insulationR: number;
4722
+ system: "return" | "supply";
4723
+ slots?: Record<string, string> | undefined;
4724
+ type: "duct-segment";
3451
4725
  } | {
3452
4726
  object: "node";
3453
4727
  name?: string | undefined;
@@ -3472,47 +4746,19 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
3472
4746
  fromIds: string[];
3473
4747
  } | undefined;
3474
4748
  } | undefined;
3475
- id: `pipe-fitting_${string}`;
4749
+ id: `duct-terminal_${string}`;
3476
4750
  position: [number, number, number];
3477
- rotation: [number, number, number];
3478
- fittingType: "cleanout" | "coupling" | "cross" | "elbow" | "end-cap" | "reducer" | "sanitary-tee" | "wye";
3479
- angle: number;
3480
- diameter: number;
3481
- diameter2: number;
3482
- cleanoutStyle: "end" | "inline";
3483
- pipeMaterial: "abs" | "cast-iron" | "pvc";
3484
- system: "vent" | "waste";
3485
- type: "pipe-fitting";
3486
- } | {
3487
- object: "node";
3488
- name?: string | undefined;
3489
- parentId: string | null;
3490
- visible: boolean;
3491
- camera?: {
3492
- position: [number, number, number];
3493
- target: [number, number, number];
3494
- mode: "orthographic" | "perspective";
3495
- fov?: number | undefined;
3496
- zoom?: number | undefined;
3497
- } | undefined;
3498
- metadata: Record<string, unknown>;
3499
- provenance?: {
3500
- refs: {
3501
- ns?: string | undefined;
3502
- id: string;
3503
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
3504
- }[];
3505
- lineage?: {
3506
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
3507
- fromIds: string[];
3508
- } | undefined;
3509
- } | undefined;
3510
- id: `level_${string}`;
3511
- children: (`block_${string}` | `ceiling_${string}` | `column_${string}` | `construction-dimension_${string}` | `duct-fitting_${string}` | `duct-segment_${string}` | `duct-terminal_${string}` | `fence_${string}` | `floor-opening_${string}` | `guide_${string}` | `hvac-equipment_${string}` | `imesh_${string}` | `item_${string}` | `lineset_${string}` | `liquid-line_${string}` | `measurement_${string}` | `pipe-fitting_${string}` | `pipe-segment_${string}` | `pipe-trap_${string}` | `procedural-item_${string}` | `roof_${string}` | `scan_${string}` | `separator_${string}` | `shelf_${string}` | `slab_${string}` | `spawn_${string}` | `stair_${string}` | `structural-grid_${string}` | `wall_${string}` | `zone_${string}`)[];
3512
- level: number;
3513
- baseElevation: number;
3514
- height?: number | undefined;
3515
- type: "level";
4751
+ rotation: number;
4752
+ supportSlabId?: string | undefined;
4753
+ terminalType: "diffuser" | "return-grille" | "supply-register";
4754
+ mount: "ceiling" | "floor" | "wall";
4755
+ width: number;
4756
+ depth: number;
4757
+ collarShape: "oval" | "rect" | "round";
4758
+ collarDiameter: number;
4759
+ collarWidth: number;
4760
+ collarHeight: number;
4761
+ type: "duct-terminal";
3516
4762
  } | {
3517
4763
  object: "node";
3518
4764
  name?: string | undefined;
@@ -3534,84 +4780,15 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
3534
4780
  }[];
3535
4781
  lineage?: {
3536
4782
  op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
3537
- fromIds: string[];
3538
- } | undefined;
3539
- } | undefined;
3540
- id: `chimney_${string}`;
3541
- material?: {
3542
- id?: string | undefined;
3543
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
3544
- properties?: {
3545
- color: string;
3546
- roughness: number;
3547
- metalness: number;
3548
- opacity: number;
3549
- transparent: boolean;
3550
- side: "back" | "double" | "front";
3551
- } | undefined;
3552
- texture?: {
3553
- url: string;
3554
- repeat?: [number, number] | undefined;
3555
- scale?: number | undefined;
3556
- } | undefined;
3557
- } | undefined;
3558
- materialPreset?: string | undefined;
3559
- topMaterial?: {
3560
- id?: string | undefined;
3561
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
3562
- properties?: {
3563
- color: string;
3564
- roughness: number;
3565
- metalness: number;
3566
- opacity: number;
3567
- transparent: boolean;
3568
- side: "back" | "double" | "front";
3569
- } | undefined;
3570
- texture?: {
3571
- url: string;
3572
- repeat?: [number, number] | undefined;
3573
- scale?: number | undefined;
3574
- } | undefined;
3575
- } | undefined;
3576
- topMaterialPreset?: string | undefined;
3577
- roofSegmentId?: string | undefined;
3578
- position: [number, number, number];
3579
- rotation: number;
3580
- bodyShape: "round" | "square";
3581
- bodyHollowDepth: number;
3582
- bodyHollowMargin: number;
3583
- width: number;
3584
- depth: number;
3585
- heightAboveRidge: number;
3586
- cutoutOffset: number;
3587
- cornerBevel: number;
3588
- cap: boolean;
3589
- capShape: "flat" | "none" | "sloped" | "stepped";
3590
- capOverhang: number;
3591
- capThickness: number;
3592
- flueCount: number;
3593
- flueShape: "round" | "square";
3594
- flueHeight: number;
3595
- flueDiameter: number;
3596
- flueSpacing: number;
3597
- flueWallThickness: number;
3598
- shoulderStyle: "corbeled" | "none" | "tapered";
3599
- shoulderHeight: number;
3600
- shoulderExtent: number;
3601
- bandStyle: "double" | "none" | "single";
3602
- bandHeight: number;
3603
- bandExtent: number;
3604
- bandOffset: number;
3605
- cricketStyle: "none" | "simple";
3606
- cricketLength: number;
3607
- cricketHeight: number;
3608
- cricketSide: "back" | "front";
3609
- panelStyle: "none" | "rectangular";
3610
- panelDepth: number;
3611
- panelHeight: number;
3612
- panelOffsetTop: number;
3613
- panelMargin: number;
3614
- type: "chimney";
4783
+ fromIds: string[];
4784
+ } | undefined;
4785
+ } | undefined;
4786
+ id: `lineset_${string}`;
4787
+ path: [number, number, number][];
4788
+ suctionDiameter: number;
4789
+ liquidDiameter: number;
4790
+ insulated: boolean;
4791
+ type: "lineset";
3615
4792
  } | {
3616
4793
  object: "node";
3617
4794
  name?: string | undefined;
@@ -3636,36 +4813,10 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
3636
4813
  fromIds: string[];
3637
4814
  } | undefined;
3638
4815
  } | undefined;
3639
- id: `eyebrow-vent_${string}`;
3640
- material?: {
3641
- id?: string | undefined;
3642
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
3643
- properties?: {
3644
- color: string;
3645
- roughness: number;
3646
- metalness: number;
3647
- opacity: number;
3648
- transparent: boolean;
3649
- side: "back" | "double" | "front";
3650
- } | undefined;
3651
- texture?: {
3652
- url: string;
3653
- repeat?: [number, number] | undefined;
3654
- scale?: number | undefined;
3655
- } | undefined;
3656
- } | undefined;
3657
- slots?: Record<string, string> | undefined;
3658
- materialPreset: string;
3659
- roofSegmentId?: string | undefined;
3660
- position: [number, number, number];
3661
- rotation: number;
3662
- width: number;
3663
- depth: number;
3664
- height: number;
3665
- style: "half-round" | "scoop" | "slant-box";
3666
- louverCount: number;
3667
- backRatio: number;
3668
- type: "eyebrow-vent";
4816
+ id: `liquid-line_${string}`;
4817
+ path: [number, number, number][];
4818
+ diameter: number;
4819
+ type: "liquid-line";
3669
4820
  } | {
3670
4821
  object: "node";
3671
4822
  name?: string | undefined;
@@ -3690,34 +4841,28 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
3690
4841
  fromIds: string[];
3691
4842
  } | undefined;
3692
4843
  } | undefined;
3693
- id: `rvent_${string}`;
3694
- material?: {
3695
- id?: string | undefined;
3696
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
3697
- properties?: {
3698
- color: string;
3699
- roughness: number;
3700
- metalness: number;
3701
- opacity: number;
3702
- transparent: boolean;
3703
- side: "back" | "double" | "front";
3704
- } | undefined;
3705
- texture?: {
3706
- url: string;
3707
- repeat?: [number, number] | undefined;
3708
- scale?: number | undefined;
3709
- } | undefined;
4844
+ id: `pipe-segment_${string}`;
4845
+ path: [number, number, number][];
4846
+ autoHangers?: boolean | undefined;
4847
+ hangerOverrides?: Record<string, {
4848
+ fraction?: number | undefined;
4849
+ skipped?: boolean | undefined;
4850
+ hostId?: string | undefined;
4851
+ }> | undefined;
4852
+ hangerStyle?: "double" | "single" | undefined;
4853
+ hangerSpacing?: number | undefined;
4854
+ hangerMaxReach?: number | undefined;
4855
+ wallAttachment?: {
4856
+ wallId: `wall_${string}`;
4857
+ side: "back" | "front";
4858
+ startUV: [number, number];
4859
+ endUV: [number, number];
4860
+ offset: number;
3710
4861
  } | undefined;
3711
- materialPreset?: string | undefined;
3712
- roofSegmentId?: string | undefined;
3713
- position: [number, number, number];
3714
- rotation: number;
3715
- length: number;
3716
- width: number;
3717
- height: number;
3718
- style: "metal" | "shingled" | "standard";
3719
- endCaps: boolean;
3720
- type: "ridge-vent";
4862
+ diameter: number;
4863
+ pipeMaterial: "abs" | "cast-iron" | "pvc";
4864
+ system: "vent" | "waste";
4865
+ type: "pipe-segment";
3721
4866
  } | {
3722
4867
  object: "node";
3723
4868
  name?: string | undefined;
@@ -3742,159 +4887,43 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
3742
4887
  fromIds: string[];
3743
4888
  } | undefined;
3744
4889
  } | undefined;
3745
- id: `site_${string}`;
3746
- polygon: {
3747
- type: "polygon";
3748
- points: [number, number][];
3749
- };
3750
- terrain?: {
3751
- type: "heightfield";
3752
- origin: [number, number];
3753
- spacing: number;
3754
- cols: number;
3755
- rows: number;
3756
- step: number;
3757
- heights: string;
3758
- } | undefined;
3759
- showGround?: boolean | undefined;
3760
- presentation?: {
3761
- theme?: string | undefined;
3762
- exposure?: number | undefined;
3763
- shading?: "rendered" | "solid" | undefined;
3764
- edges?: "off" | "soft" | "strong" | undefined;
3765
- shadows?: boolean | undefined;
3766
- lighting?: {
3767
- background?: string | undefined;
3768
- backgroundSky?: string | null | undefined;
3769
- ground?: string | undefined;
3770
- ambient?: {
3771
- color: string;
3772
- intensity: number;
3773
- } | undefined;
3774
- hemi?: {
3775
- sky: string;
3776
- ground: string;
3777
- intensity: number;
3778
- } | undefined;
3779
- lights?: {
3780
- color: string;
3781
- intensity: number;
3782
- position: [number, number, number];
3783
- target?: [number, number, number] | undefined;
3784
- castShadow?: boolean | undefined;
3785
- shadow?: {
3786
- intensity?: number | undefined;
3787
- bias?: number | undefined;
3788
- normalBias?: number | undefined;
3789
- radius?: number | undefined;
3790
- mapSize?: 512 | 1024 | 2048 | 4096 | undefined;
3791
- camera?: {
3792
- left: number;
3793
- right: number;
3794
- top: number;
3795
- bottom: number;
3796
- near: number;
3797
- far: number;
3798
- } | undefined;
3799
- } | undefined;
3800
- }[] | undefined;
3801
- environment?: {
3802
- source: "gradient" | "none" | "room";
3803
- intensity: number;
3804
- } | undefined;
3805
- } | undefined;
3806
- postprocessing?: {
3807
- ambientOcclusion?: boolean | undefined;
3808
- colorGrading?: boolean | undefined;
3809
- } | undefined;
3810
- display?: {
3811
- mode?: "construction" | "finished" | "systems" | undefined;
3812
- families?: Partial<Record<"device" | "exposed-structure" | "fill" | "finish" | "foundation" | "framing" | "inspection" | "insulation" | "masonry" | "membrane" | "run" | "service-space" | "sheathing", boolean>> | undefined;
3813
- disciplines?: Partial<Record<"electrical" | "fire" | "low-voltage" | "mechanical" | "plumbing", boolean>> | undefined;
3814
- xray?: boolean | undefined;
3815
- colorBy?: "material" | "service" | undefined;
3816
- } | undefined;
3817
- } | undefined;
3818
- address?: {
3819
- street?: string | undefined;
3820
- city?: string | undefined;
3821
- state?: string | undefined;
3822
- zip?: string | undefined;
3823
- } | undefined;
3824
- parcel?: {
3825
- apn?: string | undefined;
3826
- source?: string | undefined;
3827
- county?: string | undefined;
3828
- state?: string | undefined;
3829
- lotAreaSqFt?: number | undefined;
3830
- originLngLat?: [number, number] | undefined;
3831
- resolvedAt?: string | undefined;
3832
- layer?: string | undefined;
3833
- notes?: string[] | undefined;
3834
- } | undefined;
3835
- setbacks?: {
3836
- front: number;
3837
- side: number;
3838
- rear: number;
3839
- left?: number | undefined;
3840
- right?: number | undefined;
3841
- streetSide?: number | undefined;
3842
- } | undefined;
3843
- setbacksSource?: string | undefined;
3844
- zone?: string | undefined;
3845
- frontEdge?: number | undefined;
3846
- streetEdges?: number[] | undefined;
3847
- sightTriangleFt?: number | undefined;
3848
- northRotation?: number | undefined;
3849
- dossier?: {
3850
- [x: string]: unknown;
3851
- provider: string;
3852
- asOf: string;
3853
- point?: {
3854
- lat?: number | undefined;
3855
- lng?: number | undefined;
3856
- source?: string | undefined;
3857
- } | undefined;
3858
- address?: {
3859
- formatted?: string | undefined;
3860
- precision?: string | undefined;
3861
- } | undefined;
3862
- sections: Record<string, {
3863
- [x: string]: unknown;
3864
- status: string;
3865
- summary?: string | undefined;
3866
- reason?: string | undefined;
3867
- source?: {
3868
- name?: string | undefined;
3869
- kind?: string | undefined;
3870
- vintage?: string | undefined;
3871
- attribution?: string | undefined;
3872
- } | undefined;
3873
- }>;
3874
- parcel?: Record<string, unknown> | undefined;
3875
- flood?: Record<string, unknown> | undefined;
3876
- codeBasis?: Record<string, unknown> | undefined;
3877
- zoning?: Record<string, unknown> | undefined;
3878
- utilities?: Record<string, unknown> | undefined;
3879
- soils?: Record<string, unknown> | undefined;
3880
- wetlands?: Record<string, unknown> | undefined;
3881
- structures?: Record<string, unknown> | undefined;
3882
- elevation?: Record<string, unknown> | undefined;
3883
- boundaries?: Record<string, unknown> | undefined;
3884
- } | undefined;
3885
- contourIntervalIn?: number | undefined;
3886
- contours3d?: boolean | undefined;
3887
- terrainContours?: {
3888
- datum: string;
3889
- intervalFt: number;
3890
- source?: string | undefined;
3891
- lines: {
3892
- elevationFt: number;
3893
- points: [number, number][];
4890
+ id: `pipe-trap_${string}`;
4891
+ position: [number, number, number];
4892
+ rotation: number;
4893
+ diameter: number;
4894
+ pipeMaterial: "abs" | "cast-iron" | "pvc";
4895
+ armLengthM: number;
4896
+ type: "pipe-trap";
4897
+ } | {
4898
+ object: "node";
4899
+ name?: string | undefined;
4900
+ parentId: string | null;
4901
+ visible: boolean;
4902
+ camera?: {
4903
+ position: [number, number, number];
4904
+ target: [number, number, number];
4905
+ mode: "orthographic" | "perspective";
4906
+ fov?: number | undefined;
4907
+ zoom?: number | undefined;
4908
+ } | undefined;
4909
+ metadata: Record<string, unknown>;
4910
+ provenance?: {
4911
+ refs: {
4912
+ ns?: string | undefined;
4913
+ id: string;
4914
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
3894
4915
  }[];
4916
+ lineage?: {
4917
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
4918
+ fromIds: string[];
4919
+ } | undefined;
3895
4920
  } | undefined;
3896
- children: string[];
3897
- type: "site";
4921
+ id: `level_${string}`;
4922
+ children: (`beam_${string}` | `block_${string}` | `ceiling_${string}` | `column_${string}` | `construction-dimension_${string}` | `duct-fitting_${string}` | `duct-segment_${string}` | `duct-terminal_${string}` | `fence_${string}` | `floor-opening_${string}` | `guide_${string}` | `hvac-equipment_${string}` | `imesh_${string}` | `item_${string}` | `lineset_${string}` | `liquid-line_${string}` | `measurement_${string}` | `pipe-fitting_${string}` | `pipe-segment_${string}` | `pipe-trap_${string}` | `procedural-item_${string}` | `roof_${string}` | `scan_${string}` | `separator_${string}` | `shelf_${string}` | `slab_${string}` | `spawn_${string}` | `stair_${string}` | `structural-grid_${string}` | `wall_${string}` | `zone_${string}`)[];
4923
+ level: number;
4924
+ baseElevation: number;
4925
+ height?: number | undefined;
4926
+ type: "level";
3898
4927
  } | {
3899
4928
  object: "node";
3900
4929
  name?: string | undefined;
@@ -3919,7 +4948,7 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
3919
4948
  fromIds: string[];
3920
4949
  } | undefined;
3921
4950
  } | undefined;
3922
- id: `tvent_${string}`;
4951
+ id: `elevator_${string}`;
3923
4952
  material?: {
3924
4953
  id?: string | undefined;
3925
4954
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
@@ -3935,21 +4964,38 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
3935
4964
  url: string;
3936
4965
  repeat?: [number, number] | undefined;
3937
4966
  scale?: number | undefined;
4967
+ offset?: [number, number] | undefined;
4968
+ normalMap?: string | undefined;
4969
+ normalScale?: number | undefined;
4970
+ bumpMap?: string | undefined;
4971
+ bumpScale?: number | undefined;
3938
4972
  } | undefined;
3939
4973
  } | undefined;
4974
+ materialPreset?: string | undefined;
3940
4975
  slots?: Record<string, string> | undefined;
3941
- materialPreset: string;
3942
- roofSegmentId?: string | undefined;
3943
4976
  position: [number, number, number];
3944
4977
  rotation: number;
3945
- diameter: number;
3946
- height: number;
3947
- neckHeight: number;
3948
- baseOverhang: number;
3949
- vaneCount: number;
3950
- spinSpeed: number;
3951
- style: "cylinder" | "globe";
3952
- type: "turbine-vent";
4978
+ width: number;
4979
+ depth: number;
4980
+ shaftWidth?: number | undefined;
4981
+ shaftDepth?: number | undefined;
4982
+ shaftWallThickness: number;
4983
+ shaftStyle: "glass" | "solid";
4984
+ cabHeight: number;
4985
+ doorWidth: number;
4986
+ doorHeight: number;
4987
+ doorStyle: "center-opening" | "single-left" | "single-right";
4988
+ doorPanelStyle: "glass-frame" | "segmented-panel" | "solid-panel";
4989
+ fromLevelId: string | null;
4990
+ toLevelId: string | null;
4991
+ servedLevelIds?: string[] | undefined;
4992
+ disabledLevelIds: string[];
4993
+ serviceOnlyLevelIds: string[];
4994
+ defaultLevelId: string | null;
4995
+ speed: number;
4996
+ doorDurationMs: number;
4997
+ dwellMs: number;
4998
+ type: "elevator";
3953
4999
  } | {
3954
5000
  object: "node";
3955
5001
  parentId: string | null;
@@ -4092,208 +5138,25 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
4092
5138
  parentId: string | null;
4093
5139
  visible: boolean;
4094
5140
  camera?: {
4095
- position: [number, number, number];
4096
- target: [number, number, number];
4097
- mode: "orthographic" | "perspective";
4098
- fov?: number | undefined;
4099
- zoom?: number | undefined;
4100
- } | undefined;
4101
- metadata: Record<string, unknown>;
4102
- provenance?: {
4103
- refs: {
4104
- ns?: string | undefined;
4105
- id: string;
4106
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
4107
- }[];
4108
- lineage?: {
4109
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
4110
- fromIds: string[];
4111
- } | undefined;
4112
- } | undefined;
4113
- position: [number, number, number];
4114
- rotation: number;
4115
- supportSlabId?: string | undefined;
4116
- width: number;
4117
- depth: number;
4118
- carcassHeight: number;
4119
- operationState: number;
4120
- plinthHeight: number;
4121
- toeKickDepth: number;
4122
- boardThickness: number;
4123
- countertopThickness: number;
4124
- countertopOverhang: number;
4125
- countertopBackOverhang: number;
4126
- withFinishedBack: boolean;
4127
- frontThickness: number;
4128
- frontGap: number;
4129
- frontStyle: "raised-arch" | "shaker" | "slab";
4130
- panelReady: boolean;
4131
- handleStyle: "bar" | "cutout" | "hole" | "knob" | "none";
4132
- handlePosition: "auto" | "center" | "top";
4133
- frontOverlay: "full" | "inset";
4134
- withBottomPanel: boolean;
4135
- showPlinth: boolean;
4136
- withCountertop: boolean;
4137
- material?: {
4138
- id?: string | undefined;
4139
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
4140
- properties?: {
4141
- color: string;
4142
- roughness: number;
4143
- metalness: number;
4144
- opacity: number;
4145
- transparent: boolean;
4146
- side: "back" | "double" | "front";
4147
- } | undefined;
4148
- texture?: {
4149
- url: string;
4150
- repeat?: [number, number] | undefined;
4151
- scale?: number | undefined;
4152
- } | undefined;
4153
- } | undefined;
4154
- materialPreset?: string | undefined;
4155
- slots?: Record<string, string> | undefined;
4156
- stack?: ({
4157
- id: string;
4158
- height?: number | undefined;
4159
- type: "shelf";
4160
- shelfCount?: number | undefined;
4161
- } | {
4162
- id: string;
4163
- height?: number | undefined;
4164
- type: "drawer";
4165
- drawerCount?: number | undefined;
4166
- } | {
4167
- id: string;
4168
- height?: number | undefined;
4169
- type: "door";
4170
- doorType?: "double" | "glass" | "single-left" | "single-right" | undefined;
4171
- shelfCount?: number | undefined;
4172
- } | {
4173
- id: string;
4174
- height?: number | undefined;
4175
- type: "sink";
4176
- sinkLayout?: "double" | "double-offset" | "single" | undefined;
4177
- } | {
4178
- id: string;
4179
- height?: number | undefined;
4180
- type: "oven";
4181
- } | {
4182
- id: string;
4183
- height?: number | undefined;
4184
- type: "microwave";
4185
- } | {
4186
- id: string;
4187
- height?: number | undefined;
4188
- type: "dishwasher";
4189
- } | {
4190
- id: string;
4191
- height?: number | undefined;
4192
- cooktopBurnersOn?: boolean | undefined;
4193
- cooktopActiveBurners?: number[] | undefined;
4194
- cooktopKnobProgress?: number[] | undefined;
4195
- cooktopShowGrate?: boolean | undefined;
4196
- type: "cooktop-gas";
4197
- cooktopLayout?: "gas-2burner" | "gas-4burner" | "gas-5burner-wok" | "gas-6burner" | undefined;
4198
- } | {
4199
- id: string;
4200
- height?: number | undefined;
4201
- cooktopBurnersOn?: boolean | undefined;
4202
- cooktopActiveBurners?: number[] | undefined;
4203
- cooktopKnobProgress?: number[] | undefined;
4204
- cooktopShowGrate?: boolean | undefined;
4205
- type: "cooktop-induction";
4206
- cooktopLayout?: "induction-2zone" | "induction-4zone" | undefined;
4207
- } | {
4208
- id: string;
4209
- height?: number | undefined;
4210
- type: "pull-out-pantry";
4211
- shelfCount?: number | undefined;
4212
- pantryRackStyle?: "glass" | "tray" | "wire" | undefined;
4213
- } | {
4214
- id: string;
4215
- height?: number | undefined;
4216
- type: "fridge-single";
4217
- } | {
4218
- id: string;
4219
- height?: number | undefined;
4220
- type: "fridge-double";
4221
- } | {
4222
- id: string;
4223
- height?: number | undefined;
4224
- type: "fridge-top-freezer";
4225
- } | {
4226
- id: string;
4227
- height?: number | undefined;
4228
- type: "fridge-bottom-freezer";
4229
- } | {
4230
- id: string;
4231
- height?: number | undefined;
4232
- type: "hood-pyramid";
4233
- } | {
4234
- id: string;
4235
- height?: number | undefined;
4236
- type: "hood-curved-glass";
4237
- })[] | undefined;
4238
- id: `cabinet_${string}`;
4239
- runTier: "base" | "tall" | "wall";
4240
- children: string[];
4241
- barLedge?: {
4242
- edge: "back" | "left" | "right";
4243
- height: number;
4244
- depth: number;
4245
- } | undefined;
4246
- withWaterfall: boolean;
4247
- withFinishedEnds: boolean;
4248
- type: "cabinet";
4249
- } | {
4250
- object: "node";
4251
- name?: string | undefined;
4252
- parentId: string | null;
4253
- visible: boolean;
4254
- camera?: {
4255
- position: [number, number, number];
4256
- target: [number, number, number];
4257
- mode: "orthographic" | "perspective";
4258
- fov?: number | undefined;
4259
- zoom?: number | undefined;
4260
- } | undefined;
4261
- metadata: Record<string, unknown>;
4262
- provenance?: {
4263
- refs: {
4264
- ns?: string | undefined;
4265
- id: string;
4266
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
4267
- }[];
4268
- lineage?: {
4269
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
4270
- fromIds: string[];
4271
- } | undefined;
4272
- } | undefined;
4273
- position: [number, number, number];
4274
- rotation: number;
4275
- supportSlabId?: string | undefined;
4276
- width: number;
4277
- depth: number;
4278
- carcassHeight: number;
4279
- operationState: number;
4280
- plinthHeight: number;
4281
- toeKickDepth: number;
4282
- boardThickness: number;
4283
- countertopThickness: number;
4284
- countertopOverhang: number;
4285
- countertopBackOverhang: number;
4286
- withFinishedBack: boolean;
4287
- frontThickness: number;
4288
- frontGap: number;
4289
- frontStyle: "raised-arch" | "shaker" | "slab";
4290
- panelReady: boolean;
4291
- handleStyle: "bar" | "cutout" | "hole" | "knob" | "none";
4292
- handlePosition: "auto" | "center" | "top";
4293
- frontOverlay: "full" | "inset";
4294
- withBottomPanel: boolean;
4295
- showPlinth: boolean;
4296
- withCountertop: boolean;
5141
+ position: [number, number, number];
5142
+ target: [number, number, number];
5143
+ mode: "orthographic" | "perspective";
5144
+ fov?: number | undefined;
5145
+ zoom?: number | undefined;
5146
+ } | undefined;
5147
+ metadata: Record<string, unknown>;
5148
+ provenance?: {
5149
+ refs: {
5150
+ ns?: string | undefined;
5151
+ id: string;
5152
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
5153
+ }[];
5154
+ lineage?: {
5155
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
5156
+ fromIds: string[];
5157
+ } | undefined;
5158
+ } | undefined;
5159
+ id: `tvent_${string}`;
4297
5160
  material?: {
4298
5161
  id?: string | undefined;
4299
5162
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
@@ -4309,102 +5172,26 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
4309
5172
  url: string;
4310
5173
  repeat?: [number, number] | undefined;
4311
5174
  scale?: number | undefined;
5175
+ offset?: [number, number] | undefined;
5176
+ normalMap?: string | undefined;
5177
+ normalScale?: number | undefined;
5178
+ bumpMap?: string | undefined;
5179
+ bumpScale?: number | undefined;
4312
5180
  } | undefined;
4313
5181
  } | undefined;
4314
- materialPreset?: string | undefined;
4315
5182
  slots?: Record<string, string> | undefined;
4316
- stack?: ({
4317
- id: string;
4318
- height?: number | undefined;
4319
- type: "shelf";
4320
- shelfCount?: number | undefined;
4321
- } | {
4322
- id: string;
4323
- height?: number | undefined;
4324
- type: "drawer";
4325
- drawerCount?: number | undefined;
4326
- } | {
4327
- id: string;
4328
- height?: number | undefined;
4329
- type: "door";
4330
- doorType?: "double" | "glass" | "single-left" | "single-right" | undefined;
4331
- shelfCount?: number | undefined;
4332
- } | {
4333
- id: string;
4334
- height?: number | undefined;
4335
- type: "sink";
4336
- sinkLayout?: "double" | "double-offset" | "single" | undefined;
4337
- } | {
4338
- id: string;
4339
- height?: number | undefined;
4340
- type: "oven";
4341
- } | {
4342
- id: string;
4343
- height?: number | undefined;
4344
- type: "microwave";
4345
- } | {
4346
- id: string;
4347
- height?: number | undefined;
4348
- type: "dishwasher";
4349
- } | {
4350
- id: string;
4351
- height?: number | undefined;
4352
- cooktopBurnersOn?: boolean | undefined;
4353
- cooktopActiveBurners?: number[] | undefined;
4354
- cooktopKnobProgress?: number[] | undefined;
4355
- cooktopShowGrate?: boolean | undefined;
4356
- type: "cooktop-gas";
4357
- cooktopLayout?: "gas-2burner" | "gas-4burner" | "gas-5burner-wok" | "gas-6burner" | undefined;
4358
- } | {
4359
- id: string;
4360
- height?: number | undefined;
4361
- cooktopBurnersOn?: boolean | undefined;
4362
- cooktopActiveBurners?: number[] | undefined;
4363
- cooktopKnobProgress?: number[] | undefined;
4364
- cooktopShowGrate?: boolean | undefined;
4365
- type: "cooktop-induction";
4366
- cooktopLayout?: "induction-2zone" | "induction-4zone" | undefined;
4367
- } | {
4368
- id: string;
4369
- height?: number | undefined;
4370
- type: "pull-out-pantry";
4371
- shelfCount?: number | undefined;
4372
- pantryRackStyle?: "glass" | "tray" | "wire" | undefined;
4373
- } | {
4374
- id: string;
4375
- height?: number | undefined;
4376
- type: "fridge-single";
4377
- } | {
4378
- id: string;
4379
- height?: number | undefined;
4380
- type: "fridge-double";
4381
- } | {
4382
- id: string;
4383
- height?: number | undefined;
4384
- type: "fridge-top-freezer";
4385
- } | {
4386
- id: string;
4387
- height?: number | undefined;
4388
- type: "fridge-bottom-freezer";
4389
- } | {
4390
- id: string;
4391
- height?: number | undefined;
4392
- type: "hood-pyramid";
4393
- } | {
4394
- id: string;
4395
- height?: number | undefined;
4396
- type: "hood-curved-glass";
4397
- })[] | undefined;
4398
- id: `cabinet-module_${string}`;
4399
- children: string[];
4400
- cabinetType: "base" | "tall";
4401
- moduleKind: "corner-filler" | "standard" | "wall-filler";
4402
- openSide?: "left" | "right" | undefined;
4403
- cornerShelf?: boolean | undefined;
4404
- topFinish: "none" | "top-cabinet" | "trim";
4405
- topFinishHeight: number;
4406
- topFinishDepth: number;
4407
- type: "cabinet-module";
5183
+ materialPreset: string;
5184
+ roofSegmentId?: string | undefined;
5185
+ position: [number, number, number];
5186
+ rotation: number;
5187
+ diameter: number;
5188
+ height: number;
5189
+ neckHeight: number;
5190
+ baseOverhang: number;
5191
+ vaneCount: number;
5192
+ spinSpeed: number;
5193
+ style: "cylinder" | "globe";
5194
+ type: "turbine-vent";
4408
5195
  } | {
4409
5196
  object: "node";
4410
5197
  name?: string | undefined;
@@ -4429,7 +5216,7 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
4429
5216
  fromIds: string[];
4430
5217
  } | undefined;
4431
5218
  } | undefined;
4432
- id: `bvent_${string}`;
5219
+ id: `cupola_${string}`;
4433
5220
  material?: {
4434
5221
  id?: string | undefined;
4435
5222
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
@@ -4445,6 +5232,11 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
4445
5232
  url: string;
4446
5233
  repeat?: [number, number] | undefined;
4447
5234
  scale?: number | undefined;
5235
+ offset?: [number, number] | undefined;
5236
+ normalMap?: string | undefined;
5237
+ normalScale?: number | undefined;
5238
+ bumpMap?: string | undefined;
5239
+ bumpScale?: number | undefined;
4448
5240
  } | undefined;
4449
5241
  } | undefined;
4450
5242
  slots?: Record<string, string> | undefined;
@@ -4455,16 +5247,9 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
4455
5247
  width: number;
4456
5248
  depth: number;
4457
5249
  height: number;
4458
- hoodOverhang: number;
4459
- topTaper: number;
4460
- capHeight: number;
4461
- capGap: number;
4462
- domeCurvature: number;
4463
- baseInset: number;
4464
- baseHeight: number;
4465
- cornerBevel: number;
4466
- style: "box" | "cap" | "dome";
4467
- type: "box-vent";
5250
+ roofStyle: "dome" | "pyramid";
5251
+ finial: boolean;
5252
+ type: "cupola";
4468
5253
  } | {
4469
5254
  object: "node";
4470
5255
  name?: string | undefined;
@@ -4489,7 +5274,7 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
4489
5274
  fromIds: string[];
4490
5275
  } | undefined;
4491
5276
  } | undefined;
4492
- id: `cupola_${string}`;
5277
+ id: `eyebrow-vent_${string}`;
4493
5278
  material?: {
4494
5279
  id?: string | undefined;
4495
5280
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
@@ -4505,6 +5290,11 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
4505
5290
  url: string;
4506
5291
  repeat?: [number, number] | undefined;
4507
5292
  scale?: number | undefined;
5293
+ offset?: [number, number] | undefined;
5294
+ normalMap?: string | undefined;
5295
+ normalScale?: number | undefined;
5296
+ bumpMap?: string | undefined;
5297
+ bumpScale?: number | undefined;
4508
5298
  } | undefined;
4509
5299
  } | undefined;
4510
5300
  slots?: Record<string, string> | undefined;
@@ -4515,9 +5305,10 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
4515
5305
  width: number;
4516
5306
  depth: number;
4517
5307
  height: number;
4518
- roofStyle: "dome" | "pyramid";
4519
- finial: boolean;
4520
- type: "cupola";
5308
+ style: "half-round" | "scoop" | "slant-box";
5309
+ louverCount: number;
5310
+ backRatio: number;
5311
+ type: "eyebrow-vent";
4521
5312
  } | {
4522
5313
  object: "node";
4523
5314
  name?: string | undefined;
@@ -4558,6 +5349,11 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
4558
5349
  url: string;
4559
5350
  repeat?: [number, number] | undefined;
4560
5351
  scale?: number | undefined;
5352
+ offset?: [number, number] | undefined;
5353
+ normalMap?: string | undefined;
5354
+ normalScale?: number | undefined;
5355
+ bumpMap?: string | undefined;
5356
+ bumpScale?: number | undefined;
4561
5357
  } | undefined;
4562
5358
  } | undefined;
4563
5359
  slots?: Record<string, string> | undefined;
@@ -4609,7 +5405,7 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
4609
5405
  fromIds: string[];
4610
5406
  } | undefined;
4611
5407
  } | undefined;
4612
- id: `solarpanel_${string}`;
5408
+ id: `chimney_${string}`;
4613
5409
  material?: {
4614
5410
  id?: string | undefined;
4615
5411
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
@@ -4625,10 +5421,15 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
4625
5421
  url: string;
4626
5422
  repeat?: [number, number] | undefined;
4627
5423
  scale?: number | undefined;
5424
+ offset?: [number, number] | undefined;
5425
+ normalMap?: string | undefined;
5426
+ normalScale?: number | undefined;
5427
+ bumpMap?: string | undefined;
5428
+ bumpScale?: number | undefined;
4628
5429
  } | undefined;
4629
5430
  } | undefined;
4630
5431
  materialPreset?: string | undefined;
4631
- panelMaterial?: {
5432
+ topMaterial?: {
4632
5433
  id?: string | undefined;
4633
5434
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
4634
5435
  properties?: {
@@ -4643,26 +5444,52 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
4643
5444
  url: string;
4644
5445
  repeat?: [number, number] | undefined;
4645
5446
  scale?: number | undefined;
5447
+ offset?: [number, number] | undefined;
5448
+ normalMap?: string | undefined;
5449
+ normalScale?: number | undefined;
5450
+ bumpMap?: string | undefined;
5451
+ bumpScale?: number | undefined;
4646
5452
  } | undefined;
4647
5453
  } | undefined;
4648
- panelMaterialPreset?: string | undefined;
4649
- panelTypePreset?: "compact" | "frameless" | "residential" | "residential-large" | undefined;
5454
+ topMaterialPreset?: string | undefined;
4650
5455
  roofSegmentId?: string | undefined;
4651
5456
  position: [number, number, number];
4652
5457
  rotation: number;
4653
- rows: number;
4654
- columns: number;
4655
- panelWidth: number;
5458
+ bodyShape: "round" | "square";
5459
+ bodyHollowDepth: number;
5460
+ bodyHollowMargin: number;
5461
+ width: number;
5462
+ depth: number;
5463
+ heightAboveRidge: number;
5464
+ cutoutOffset: number;
5465
+ cornerBevel: number;
5466
+ cap: boolean;
5467
+ capShape: "flat" | "none" | "sloped" | "stepped";
5468
+ capOverhang: number;
5469
+ capThickness: number;
5470
+ flueCount: number;
5471
+ flueShape: "round" | "square";
5472
+ flueHeight: number;
5473
+ flueDiameter: number;
5474
+ flueSpacing: number;
5475
+ flueWallThickness: number;
5476
+ shoulderStyle: "corbeled" | "none" | "tapered";
5477
+ shoulderHeight: number;
5478
+ shoulderExtent: number;
5479
+ bandStyle: "double" | "none" | "single";
5480
+ bandHeight: number;
5481
+ bandExtent: number;
5482
+ bandOffset: number;
5483
+ cricketStyle: "none" | "simple";
5484
+ cricketLength: number;
5485
+ cricketHeight: number;
5486
+ cricketSide: "back" | "front";
5487
+ panelStyle: "none" | "rectangular";
5488
+ panelDepth: number;
4656
5489
  panelHeight: number;
4657
- gapX: number;
4658
- gapY: number;
4659
- mountingType: "flush" | "tilted";
4660
- tiltAngle: number;
4661
- standoffHeight: number;
4662
- frameThickness: number;
4663
- frameDepth: number;
4664
- surfaceNormal?: [number, number, number] | undefined;
4665
- type: "solar-panel";
5490
+ panelOffsetTop: number;
5491
+ panelMargin: number;
5492
+ type: "chimney";
4666
5493
  } | {
4667
5494
  object: "node";
4668
5495
  name?: string | undefined;
@@ -4703,6 +5530,11 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
4703
5530
  url: string;
4704
5531
  repeat?: [number, number] | undefined;
4705
5532
  scale?: number | undefined;
5533
+ offset?: [number, number] | undefined;
5534
+ normalMap?: string | undefined;
5535
+ normalScale?: number | undefined;
5536
+ bumpMap?: string | undefined;
5537
+ bumpScale?: number | undefined;
4706
5538
  } | undefined;
4707
5539
  } | undefined;
4708
5540
  materialPreset?: string | undefined;
@@ -4721,6 +5553,11 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
4721
5553
  url: string;
4722
5554
  repeat?: [number, number] | undefined;
4723
5555
  scale?: number | undefined;
5556
+ offset?: [number, number] | undefined;
5557
+ normalMap?: string | undefined;
5558
+ normalScale?: number | undefined;
5559
+ bumpMap?: string | undefined;
5560
+ bumpScale?: number | undefined;
4724
5561
  } | undefined;
4725
5562
  } | undefined;
4726
5563
  glassMaterialPreset?: string | undefined;
@@ -4788,6 +5625,11 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
4788
5625
  url: string;
4789
5626
  repeat?: [number, number] | undefined;
4790
5627
  scale?: number | undefined;
5628
+ offset?: [number, number] | undefined;
5629
+ normalMap?: string | undefined;
5630
+ normalScale?: number | undefined;
5631
+ bumpMap?: string | undefined;
5632
+ bumpScale?: number | undefined;
4791
5633
  } | undefined;
4792
5634
  } | undefined;
4793
5635
  materialPreset?: string | undefined;
@@ -4806,6 +5648,11 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
4806
5648
  url: string;
4807
5649
  repeat?: [number, number] | undefined;
4808
5650
  scale?: number | undefined;
5651
+ offset?: [number, number] | undefined;
5652
+ normalMap?: string | undefined;
5653
+ normalScale?: number | undefined;
5654
+ bumpMap?: string | undefined;
5655
+ bumpScale?: number | undefined;
4809
5656
  } | undefined;
4810
5657
  } | undefined;
4811
5658
  topMaterialPreset?: string | undefined;
@@ -4824,6 +5671,11 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
4824
5671
  url: string;
4825
5672
  repeat?: [number, number] | undefined;
4826
5673
  scale?: number | undefined;
5674
+ offset?: [number, number] | undefined;
5675
+ normalMap?: string | undefined;
5676
+ normalScale?: number | undefined;
5677
+ bumpMap?: string | undefined;
5678
+ bumpScale?: number | undefined;
4827
5679
  } | undefined;
4828
5680
  } | undefined;
4829
5681
  sideMaterialPreset?: string | undefined;
@@ -4842,6 +5694,11 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
4842
5694
  url: string;
4843
5695
  repeat?: [number, number] | undefined;
4844
5696
  scale?: number | undefined;
5697
+ offset?: [number, number] | undefined;
5698
+ normalMap?: string | undefined;
5699
+ normalScale?: number | undefined;
5700
+ bumpMap?: string | undefined;
5701
+ bumpScale?: number | undefined;
4845
5702
  } | undefined;
4846
5703
  } | undefined;
4847
5704
  wallMaterialPreset?: string | undefined;
@@ -4872,61 +5729,6 @@ export declare const nodesOnLevel: (nodes: SceneNodes, levelId: string) => ({
4872
5729
  windowSillThickness: number;
4873
5730
  children: `window_${string}`[];
4874
5731
  type: "dormer";
4875
- } | {
4876
- object: "node";
4877
- name?: string | undefined;
4878
- parentId: string | null;
4879
- visible: boolean;
4880
- camera?: {
4881
- position: [number, number, number];
4882
- target: [number, number, number];
4883
- mode: "orthographic" | "perspective";
4884
- fov?: number | undefined;
4885
- zoom?: number | undefined;
4886
- } | undefined;
4887
- metadata: Record<string, unknown>;
4888
- provenance?: {
4889
- refs: {
4890
- ns?: string | undefined;
4891
- id: string;
4892
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
4893
- }[];
4894
- lineage?: {
4895
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
4896
- fromIds: string[];
4897
- } | undefined;
4898
- } | undefined;
4899
- id: `downspout_${string}`;
4900
- material?: {
4901
- id?: string | undefined;
4902
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
4903
- properties?: {
4904
- color: string;
4905
- roughness: number;
4906
- metalness: number;
4907
- opacity: number;
4908
- transparent: boolean;
4909
- side: "back" | "double" | "front";
4910
- } | undefined;
4911
- texture?: {
4912
- url: string;
4913
- repeat?: [number, number] | undefined;
4914
- scale?: number | undefined;
4915
- } | undefined;
4916
- } | undefined;
4917
- slots?: Record<string, string> | undefined;
4918
- materialPreset: string;
4919
- gutterId?: string | undefined;
4920
- outletId?: string | undefined;
4921
- length: number;
4922
- lengthMode?: "manual" | "to-ground" | undefined;
4923
- diameter: number;
4924
- standoff: number;
4925
- shape: "auto" | "rect" | "round";
4926
- strapStyle: "band" | "none";
4927
- strapSpacing: number;
4928
- terminal: "kickout" | "splash" | "straight";
4929
- type: "downspout";
4930
5732
  })[];
4931
5733
  export declare function contentCounts(content: readonly AnyNode[]): ContentCounts;
4932
5734
  /**