@pascal-app/core 1.0.3 → 1.0.5

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 (1485) hide show
  1. package/dist/agent-operations/__fixtures__/add-object-cases.d.ts +247 -0
  2. package/dist/agent-operations/__fixtures__/add-object-cases.d.ts.map +1 -0
  3. package/dist/agent-operations/__fixtures__/add-object-cases.js +429 -0
  4. package/dist/agent-operations/__fixtures__/add-stair-cases.d.ts +3 -0
  5. package/dist/agent-operations/__fixtures__/add-stair-cases.d.ts.map +1 -0
  6. package/dist/agent-operations/__fixtures__/add-stair-cases.js +176 -0
  7. package/dist/agent-operations/__fixtures__/build-room-cases.d.ts +4 -0
  8. package/dist/agent-operations/__fixtures__/build-room-cases.d.ts.map +1 -0
  9. package/dist/agent-operations/__fixtures__/build-room-cases.js +1005 -0
  10. package/dist/agent-operations/__fixtures__/cases.d.ts +67 -0
  11. package/dist/agent-operations/__fixtures__/cases.d.ts.map +1 -0
  12. package/dist/agent-operations/__fixtures__/cases.js +868 -0
  13. package/dist/agent-operations/__fixtures__/corner-window-cases.d.ts +3 -0
  14. package/dist/agent-operations/__fixtures__/corner-window-cases.d.ts.map +1 -0
  15. package/dist/agent-operations/__fixtures__/corner-window-cases.js +155 -0
  16. package/dist/agent-operations/__fixtures__/design-brief-cases.d.ts +14 -0
  17. package/dist/agent-operations/__fixtures__/design-brief-cases.d.ts.map +1 -0
  18. package/dist/agent-operations/__fixtures__/design-brief-cases.js +709 -0
  19. package/dist/agent-operations/__fixtures__/find-by-type-cases.d.ts +7 -0
  20. package/dist/agent-operations/__fixtures__/find-by-type-cases.d.ts.map +1 -0
  21. package/dist/agent-operations/__fixtures__/find-by-type-cases.js +21 -0
  22. package/dist/agent-operations/__fixtures__/finish-cases.d.ts +7 -0
  23. package/dist/agent-operations/__fixtures__/finish-cases.d.ts.map +1 -0
  24. package/dist/agent-operations/__fixtures__/finish-cases.js +758 -0
  25. package/dist/agent-operations/__fixtures__/lot-info-cases.d.ts +3 -0
  26. package/dist/agent-operations/__fixtures__/lot-info-cases.d.ts.map +1 -0
  27. package/dist/agent-operations/__fixtures__/lot-info-cases.js +370 -0
  28. package/dist/agent-operations/__fixtures__/merge-windows-cases.d.ts +3 -0
  29. package/dist/agent-operations/__fixtures__/merge-windows-cases.d.ts.map +1 -0
  30. package/dist/agent-operations/__fixtures__/merge-windows-cases.js +321 -0
  31. package/dist/agent-operations/__fixtures__/native-materials.d.ts +2237 -0
  32. package/dist/agent-operations/__fixtures__/native-materials.d.ts.map +1 -0
  33. package/dist/agent-operations/__fixtures__/native-materials.js +82 -0
  34. package/dist/agent-operations/__fixtures__/node-read-cases.d.ts +4 -0
  35. package/dist/agent-operations/__fixtures__/node-read-cases.d.ts.map +1 -0
  36. package/dist/agent-operations/__fixtures__/node-read-cases.js +639 -0
  37. package/dist/agent-operations/__fixtures__/notation-cases.d.ts +24 -0
  38. package/dist/agent-operations/__fixtures__/notation-cases.d.ts.map +1 -0
  39. package/dist/agent-operations/__fixtures__/notation-cases.js +356 -0
  40. package/dist/agent-operations/__fixtures__/place-items-cases.d.ts +17 -0
  41. package/dist/agent-operations/__fixtures__/place-items-cases.d.ts.map +1 -0
  42. package/dist/agent-operations/__fixtures__/place-items-cases.js +584 -0
  43. package/dist/agent-operations/__fixtures__/roof-bearing-cases.d.ts +19726 -0
  44. package/dist/agent-operations/__fixtures__/roof-bearing-cases.d.ts.map +1 -0
  45. package/dist/agent-operations/__fixtures__/roof-bearing-cases.js +106 -0
  46. package/dist/agent-operations/__fixtures__/roof-cases.d.ts +9 -0
  47. package/dist/agent-operations/__fixtures__/roof-cases.d.ts.map +1 -0
  48. package/dist/agent-operations/__fixtures__/roof-cases.js +382 -0
  49. package/dist/agent-operations/__fixtures__/room-cases.d.ts +4 -0
  50. package/dist/agent-operations/__fixtures__/room-cases.d.ts.map +1 -0
  51. package/dist/agent-operations/__fixtures__/room-cases.js +473 -0
  52. package/dist/agent-operations/__fixtures__/scene-check-cases.d.ts +4 -0
  53. package/dist/agent-operations/__fixtures__/scene-check-cases.d.ts.map +1 -0
  54. package/dist/agent-operations/__fixtures__/scene-check-cases.js +417 -0
  55. package/dist/agent-operations/__fixtures__/search-assets-cases.d.ts +5 -0
  56. package/dist/agent-operations/__fixtures__/search-assets-cases.d.ts.map +1 -0
  57. package/dist/agent-operations/__fixtures__/search-assets-cases.js +149 -0
  58. package/dist/agent-operations/__fixtures__/site-cases.d.ts +290 -0
  59. package/dist/agent-operations/__fixtures__/site-cases.d.ts.map +1 -0
  60. package/dist/agent-operations/__fixtures__/site-cases.js +780 -0
  61. package/dist/agent-operations/__fixtures__/structure-cases.d.ts +7 -0
  62. package/dist/agent-operations/__fixtures__/structure-cases.d.ts.map +1 -0
  63. package/dist/agent-operations/__fixtures__/structure-cases.js +1215 -0
  64. package/dist/agent-operations/__fixtures__/verify-scene-cases.d.ts +313 -0
  65. package/dist/agent-operations/__fixtures__/verify-scene-cases.d.ts.map +1 -0
  66. package/dist/agent-operations/__fixtures__/verify-scene-cases.js +350 -0
  67. package/dist/agent-operations/__fixtures__/view-assets-cases.d.ts +3 -0
  68. package/dist/agent-operations/__fixtures__/view-assets-cases.d.ts.map +1 -0
  69. package/dist/agent-operations/__fixtures__/view-assets-cases.js +155 -0
  70. package/dist/agent-operations/__fixtures__/view-scene-cases.d.ts +50 -0
  71. package/dist/agent-operations/__fixtures__/view-scene-cases.d.ts.map +1 -0
  72. package/dist/agent-operations/__fixtures__/view-scene-cases.js +425 -0
  73. package/dist/agent-operations/achieved.d.ts +21 -0
  74. package/dist/agent-operations/achieved.d.ts.map +1 -0
  75. package/dist/agent-operations/achieved.js +48 -0
  76. package/dist/agent-operations/add-column.d.ts +23 -0
  77. package/dist/agent-operations/add-column.d.ts.map +1 -0
  78. package/dist/agent-operations/add-column.js +99 -0
  79. package/dist/agent-operations/add-fence.d.ts +18 -0
  80. package/dist/agent-operations/add-fence.d.ts.map +1 -0
  81. package/dist/agent-operations/add-fence.js +48 -0
  82. package/dist/agent-operations/add-level.d.ts +17 -0
  83. package/dist/agent-operations/add-level.d.ts.map +1 -0
  84. package/dist/agent-operations/add-level.js +130 -0
  85. package/dist/agent-operations/add-object.d.ts +143 -0
  86. package/dist/agent-operations/add-object.d.ts.map +1 -0
  87. package/dist/agent-operations/add-object.js +522 -0
  88. package/dist/agent-operations/add-wall.d.ts +13 -0
  89. package/dist/agent-operations/add-wall.d.ts.map +1 -0
  90. package/dist/agent-operations/add-wall.js +73 -0
  91. package/dist/agent-operations/apply-changes.d.ts +22 -0
  92. package/dist/agent-operations/apply-changes.d.ts.map +1 -0
  93. package/dist/agent-operations/apply-changes.js +125 -0
  94. package/dist/agent-operations/apply-outcome.d.ts +21 -0
  95. package/dist/agent-operations/apply-outcome.d.ts.map +1 -0
  96. package/dist/agent-operations/apply-outcome.js +33 -0
  97. package/dist/agent-operations/asset-views.d.ts +75 -0
  98. package/dist/agent-operations/asset-views.d.ts.map +1 -0
  99. package/dist/agent-operations/asset-views.js +234 -0
  100. package/dist/agent-operations/author-scene.d.ts +157 -0
  101. package/dist/agent-operations/author-scene.d.ts.map +1 -0
  102. package/dist/agent-operations/author-scene.js +1076 -0
  103. package/dist/agent-operations/authored-scene-merge.d.ts +4 -0
  104. package/dist/agent-operations/authored-scene-merge.d.ts.map +1 -0
  105. package/dist/agent-operations/authored-scene-merge.js +96 -0
  106. package/dist/agent-operations/batch.d.ts +22 -0
  107. package/dist/agent-operations/batch.d.ts.map +1 -0
  108. package/dist/agent-operations/batch.js +104 -0
  109. package/dist/agent-operations/ceiling-object-observations.d.ts +31 -0
  110. package/dist/agent-operations/ceiling-object-observations.d.ts.map +1 -0
  111. package/dist/agent-operations/ceiling-object-observations.js +111 -0
  112. package/dist/agent-operations/collections.d.ts +28 -0
  113. package/dist/agent-operations/collections.d.ts.map +1 -0
  114. package/dist/agent-operations/collections.js +130 -0
  115. package/dist/agent-operations/corner-window.d.ts +19 -0
  116. package/dist/agent-operations/corner-window.d.ts.map +1 -0
  117. package/dist/agent-operations/corner-window.js +84 -0
  118. package/dist/agent-operations/create-roof.d.ts +32 -0
  119. package/dist/agent-operations/create-roof.d.ts.map +1 -0
  120. package/dist/agent-operations/create-roof.js +304 -0
  121. package/dist/agent-operations/create-room.d.ts +38 -0
  122. package/dist/agent-operations/create-room.d.ts.map +1 -0
  123. package/dist/agent-operations/create-room.js +245 -0
  124. package/dist/agent-operations/create-stair.d.ts +11 -0
  125. package/dist/agent-operations/create-stair.d.ts.map +1 -0
  126. package/dist/agent-operations/create-stair.js +330 -0
  127. package/dist/agent-operations/delete-node.d.ts +6 -0
  128. package/dist/agent-operations/delete-node.d.ts.map +1 -0
  129. package/dist/agent-operations/delete-node.js +9 -0
  130. package/dist/agent-operations/design-brief.d.ts +38 -0
  131. package/dist/agent-operations/design-brief.d.ts.map +1 -0
  132. package/dist/agent-operations/design-brief.js +300 -0
  133. package/dist/agent-operations/designs.d.ts +24 -0
  134. package/dist/agent-operations/designs.d.ts.map +1 -0
  135. package/dist/agent-operations/designs.js +48 -0
  136. package/dist/agent-operations/door-clearance.d.ts +150 -0
  137. package/dist/agent-operations/door-clearance.d.ts.map +1 -0
  138. package/dist/agent-operations/door-clearance.js +391 -0
  139. package/dist/agent-operations/duplicate-level.d.ts +12 -0
  140. package/dist/agent-operations/duplicate-level.d.ts.map +1 -0
  141. package/dist/agent-operations/duplicate-level.js +55 -0
  142. package/dist/agent-operations/find-by-type.d.ts +18 -0
  143. package/dist/agent-operations/find-by-type.d.ts.map +1 -0
  144. package/dist/agent-operations/find-by-type.js +317 -0
  145. package/dist/agent-operations/furnish-room.d.ts +39 -0
  146. package/dist/agent-operations/furnish-room.d.ts.map +1 -0
  147. package/dist/agent-operations/furnish-room.js +306 -0
  148. package/dist/agent-operations/furniture-kind.d.ts +22 -0
  149. package/dist/agent-operations/furniture-kind.d.ts.map +1 -0
  150. package/dist/agent-operations/furniture-kind.js +69 -0
  151. package/dist/agent-operations/get-node.d.ts +12 -0
  152. package/dist/agent-operations/get-node.d.ts.map +1 -0
  153. package/dist/agent-operations/get-node.js +105 -0
  154. package/dist/agent-operations/hosted-services.d.ts +14 -0
  155. package/dist/agent-operations/hosted-services.d.ts.map +1 -0
  156. package/dist/agent-operations/hosted-services.js +22 -0
  157. package/dist/agent-operations/index.d.ts +489 -0
  158. package/dist/agent-operations/index.d.ts.map +1 -0
  159. package/dist/agent-operations/index.js +141 -0
  160. package/dist/agent-operations/item-space.d.ts +22 -0
  161. package/dist/agent-operations/item-space.d.ts.map +1 -0
  162. package/dist/agent-operations/item-space.js +69 -0
  163. package/dist/agent-operations/layout-clearance.d.ts +157 -0
  164. package/dist/agent-operations/layout-clearance.d.ts.map +1 -0
  165. package/dist/agent-operations/layout-clearance.js +500 -0
  166. package/dist/agent-operations/level-height-fill.d.ts +12 -0
  167. package/dist/agent-operations/level-height-fill.d.ts.map +1 -0
  168. package/dist/agent-operations/level-height-fill.js +59 -0
  169. package/dist/agent-operations/level-reads.d.ts +37 -0
  170. package/dist/agent-operations/level-reads.d.ts.map +1 -0
  171. package/dist/agent-operations/level-reads.js +168 -0
  172. package/dist/agent-operations/level-target.d.ts +11 -0
  173. package/dist/agent-operations/level-target.d.ts.map +1 -0
  174. package/dist/agent-operations/level-target.js +29 -0
  175. package/dist/agent-operations/list-levels.d.ts +4 -0
  176. package/dist/agent-operations/list-levels.d.ts.map +1 -0
  177. package/dist/agent-operations/list-levels.js +54 -0
  178. package/dist/agent-operations/material-preset.d.ts +11 -0
  179. package/dist/agent-operations/material-preset.d.ts.map +1 -0
  180. package/dist/agent-operations/material-preset.js +68 -0
  181. package/dist/agent-operations/material-refs.d.ts +30 -0
  182. package/dist/agent-operations/material-refs.d.ts.map +1 -0
  183. package/dist/agent-operations/material-refs.js +105 -0
  184. package/dist/agent-operations/merge-windows.d.ts +6 -0
  185. package/dist/agent-operations/merge-windows.d.ts.map +1 -0
  186. package/dist/agent-operations/merge-windows.js +27 -0
  187. package/dist/agent-operations/move-roofs.d.ts +9 -0
  188. package/dist/agent-operations/move-roofs.d.ts.map +1 -0
  189. package/dist/agent-operations/move-roofs.js +29 -0
  190. package/dist/agent-operations/node-patch.d.ts +3 -0
  191. package/dist/agent-operations/node-patch.d.ts.map +1 -0
  192. package/dist/agent-operations/node-patch.js +114 -0
  193. package/dist/agent-operations/paint.d.ts +22 -0
  194. package/dist/agent-operations/paint.d.ts.map +1 -0
  195. package/dist/agent-operations/paint.js +329 -0
  196. package/dist/agent-operations/photo-elevation.d.ts +155 -0
  197. package/dist/agent-operations/photo-elevation.d.ts.map +1 -0
  198. package/dist/agent-operations/photo-elevation.js +761 -0
  199. package/dist/agent-operations/place-in-room.d.ts +29 -0
  200. package/dist/agent-operations/place-in-room.d.ts.map +1 -0
  201. package/dist/agent-operations/place-in-room.js +403 -0
  202. package/dist/agent-operations/place-items.d.ts +20 -0
  203. package/dist/agent-operations/place-items.d.ts.map +1 -0
  204. package/dist/agent-operations/place-items.js +239 -0
  205. package/dist/agent-operations/plan-geometry.d.ts +24 -0
  206. package/dist/agent-operations/plan-geometry.d.ts.map +1 -0
  207. package/dist/agent-operations/plan-geometry.js +97 -0
  208. package/dist/agent-operations/point-context.d.ts +139 -0
  209. package/dist/agent-operations/point-context.d.ts.map +1 -0
  210. package/dist/agent-operations/point-context.js +1 -0
  211. package/dist/agent-operations/project-files.d.ts +9 -0
  212. package/dist/agent-operations/project-files.d.ts.map +1 -0
  213. package/dist/agent-operations/project-files.js +25 -0
  214. package/dist/agent-operations/record-made.d.ts +18 -0
  215. package/dist/agent-operations/record-made.d.ts.map +1 -0
  216. package/dist/agent-operations/record-made.js +28 -0
  217. package/dist/agent-operations/roof-footprint.d.ts +24 -0
  218. package/dist/agent-operations/roof-footprint.d.ts.map +1 -0
  219. package/dist/agent-operations/roof-footprint.js +242 -0
  220. package/dist/agent-operations/roof-writes.d.ts +20 -0
  221. package/dist/agent-operations/roof-writes.d.ts.map +1 -0
  222. package/dist/agent-operations/roof-writes.js +165 -0
  223. package/dist/agent-operations/room-findings.d.ts +54 -0
  224. package/dist/agent-operations/room-findings.d.ts.map +1 -0
  225. package/dist/agent-operations/room-findings.js +143 -0
  226. package/dist/agent-operations/room-floor-script.d.ts +23 -0
  227. package/dist/agent-operations/room-floor-script.d.ts.map +1 -0
  228. package/dist/agent-operations/room-floor-script.js +54 -0
  229. package/dist/agent-operations/room-structure.d.ts +87 -0
  230. package/dist/agent-operations/room-structure.d.ts.map +1 -0
  231. package/dist/agent-operations/room-structure.js +144 -0
  232. package/dist/agent-operations/scene-checkpoint.d.ts +94 -0
  233. package/dist/agent-operations/scene-checkpoint.d.ts.map +1 -0
  234. package/dist/agent-operations/scene-checkpoint.js +176 -0
  235. package/dist/agent-operations/scene-materials.d.ts +15 -0
  236. package/dist/agent-operations/scene-materials.d.ts.map +1 -0
  237. package/dist/agent-operations/scene-materials.js +62 -0
  238. package/dist/agent-operations/scene-measure.d.ts +73 -0
  239. package/dist/agent-operations/scene-measure.d.ts.map +1 -0
  240. package/dist/agent-operations/scene-measure.js +73 -0
  241. package/dist/agent-operations/scene-queries.d.ts +4941 -0
  242. package/dist/agent-operations/scene-queries.d.ts.map +1 -0
  243. package/dist/agent-operations/scene-queries.js +74 -0
  244. package/dist/agent-operations/scene-review.d.ts +52 -0
  245. package/dist/agent-operations/scene-review.d.ts.map +1 -0
  246. package/dist/agent-operations/scene-review.js +106 -0
  247. package/dist/agent-operations/scene-view.d.ts +165 -0
  248. package/dist/agent-operations/scene-view.d.ts.map +1 -0
  249. package/dist/agent-operations/scene-view.js +916 -0
  250. package/dist/agent-operations/search-assets.d.ts +14 -0
  251. package/dist/agent-operations/search-assets.d.ts.map +1 -0
  252. package/dist/agent-operations/search-assets.js +43 -0
  253. package/dist/agent-operations/search-materials.d.ts +18 -0
  254. package/dist/agent-operations/search-materials.d.ts.map +1 -0
  255. package/dist/agent-operations/search-materials.js +165 -0
  256. package/dist/agent-operations/set-checkpoint.d.ts +9 -0
  257. package/dist/agent-operations/set-checkpoint.d.ts.map +1 -0
  258. package/dist/agent-operations/set-checkpoint.js +31 -0
  259. package/dist/agent-operations/set-ground-level.d.ts +12 -0
  260. package/dist/agent-operations/set-ground-level.d.ts.map +1 -0
  261. package/dist/agent-operations/set-ground-level.js +61 -0
  262. package/dist/agent-operations/site.d.ts +21 -0
  263. package/dist/agent-operations/site.d.ts.map +1 -0
  264. package/dist/agent-operations/site.js +123 -0
  265. package/dist/agent-operations/stairs.d.ts +5 -0
  266. package/dist/agent-operations/stairs.d.ts.map +1 -0
  267. package/dist/agent-operations/stairs.js +70 -0
  268. package/dist/agent-operations/types.d.ts +118 -0
  269. package/dist/agent-operations/types.d.ts.map +1 -0
  270. package/dist/agent-operations/types.js +1 -0
  271. package/dist/agent-operations/verify-scene.d.ts +84 -0
  272. package/dist/agent-operations/verify-scene.d.ts.map +1 -0
  273. package/dist/agent-operations/verify-scene.js +548 -0
  274. package/dist/agent-operations/wall-face-script.d.ts +28 -0
  275. package/dist/agent-operations/wall-face-script.d.ts.map +1 -0
  276. package/dist/agent-operations/wall-face-script.js +62 -0
  277. package/dist/agent-operations/wall-object-observations.d.ts +41 -0
  278. package/dist/agent-operations/wall-object-observations.d.ts.map +1 -0
  279. package/dist/agent-operations/wall-object-observations.js +249 -0
  280. package/dist/agent-operations/wall-opening.d.ts +65 -0
  281. package/dist/agent-operations/wall-opening.d.ts.map +1 -0
  282. package/dist/agent-operations/wall-opening.js +55 -0
  283. package/dist/agent-operations/wall-skirting.d.ts +24 -0
  284. package/dist/agent-operations/wall-skirting.d.ts.map +1 -0
  285. package/dist/agent-operations/wall-skirting.js +85 -0
  286. package/dist/agent-tools/achieved.d.ts +9 -0
  287. package/dist/agent-tools/achieved.d.ts.map +1 -0
  288. package/dist/agent-tools/achieved.js +8 -0
  289. package/dist/agent-tools/add-object.d.ts +47 -0
  290. package/dist/agent-tools/add-object.d.ts.map +1 -0
  291. package/dist/agent-tools/add-object.js +92 -0
  292. package/dist/agent-tools/assets.d.ts +21 -0
  293. package/dist/agent-tools/assets.d.ts.map +1 -0
  294. package/dist/agent-tools/assets.js +30 -0
  295. package/dist/agent-tools/author-scene.d.ts +651 -0
  296. package/dist/agent-tools/author-scene.d.ts.map +1 -0
  297. package/dist/agent-tools/author-scene.js +252 -0
  298. package/dist/agent-tools/batch.d.ts +25 -0
  299. package/dist/agent-tools/batch.d.ts.map +1 -0
  300. package/dist/agent-tools/batch.js +61 -0
  301. package/dist/agent-tools/checkpoints.d.ts +13 -0
  302. package/dist/agent-tools/checkpoints.d.ts.map +1 -0
  303. package/dist/agent-tools/checkpoints.js +16 -0
  304. package/dist/agent-tools/clear-scene.d.ts +10 -0
  305. package/dist/agent-tools/clear-scene.d.ts.map +1 -0
  306. package/dist/agent-tools/clear-scene.js +9 -0
  307. package/dist/agent-tools/collections.d.ts +35 -0
  308. package/dist/agent-tools/collections.d.ts.map +1 -0
  309. package/dist/agent-tools/collections.js +31 -0
  310. package/dist/agent-tools/columns.d.ts +44 -0
  311. package/dist/agent-tools/columns.d.ts.map +1 -0
  312. package/dist/agent-tools/columns.js +59 -0
  313. package/dist/agent-tools/contract.d.ts +68 -0
  314. package/dist/agent-tools/contract.d.ts.map +1 -0
  315. package/dist/agent-tools/contract.js +1 -0
  316. package/dist/agent-tools/corner-window.d.ts +46 -0
  317. package/dist/agent-tools/corner-window.d.ts.map +1 -0
  318. package/dist/agent-tools/corner-window.js +47 -0
  319. package/dist/agent-tools/create-room.d.ts +64 -0
  320. package/dist/agent-tools/create-room.d.ts.map +1 -0
  321. package/dist/agent-tools/create-room.js +97 -0
  322. package/dist/agent-tools/design-brief.d.ts +408 -0
  323. package/dist/agent-tools/design-brief.d.ts.map +1 -0
  324. package/dist/agent-tools/design-brief.js +149 -0
  325. package/dist/agent-tools/designs.d.ts +34 -0
  326. package/dist/agent-tools/designs.d.ts.map +1 -0
  327. package/dist/agent-tools/designs.js +50 -0
  328. package/dist/agent-tools/fences.d.ts +28 -0
  329. package/dist/agent-tools/fences.d.ts.map +1 -0
  330. package/dist/agent-tools/fences.js +31 -0
  331. package/dist/agent-tools/find-by-type.d.ts +18 -0
  332. package/dist/agent-tools/find-by-type.d.ts.map +1 -0
  333. package/dist/agent-tools/find-by-type.js +35 -0
  334. package/dist/agent-tools/furnish-room.d.ts +28 -0
  335. package/dist/agent-tools/furnish-room.d.ts.map +1 -0
  336. package/dist/agent-tools/furnish-room.js +37 -0
  337. package/dist/agent-tools/hosted-services.d.ts +438 -0
  338. package/dist/agent-tools/hosted-services.d.ts.map +1 -0
  339. package/dist/agent-tools/hosted-services.js +181 -0
  340. package/dist/agent-tools/index.d.ts +1543 -0
  341. package/dist/agent-tools/index.d.ts.map +1 -0
  342. package/dist/agent-tools/index.js +126 -0
  343. package/dist/agent-tools/levels.d.ts +80 -0
  344. package/dist/agent-tools/levels.d.ts.map +1 -0
  345. package/dist/agent-tools/levels.js +87 -0
  346. package/dist/agent-tools/measurement.d.ts +55 -0
  347. package/dist/agent-tools/measurement.d.ts.map +1 -0
  348. package/dist/agent-tools/measurement.js +144 -0
  349. package/dist/agent-tools/merge-windows.d.ts +10 -0
  350. package/dist/agent-tools/merge-windows.d.ts.map +1 -0
  351. package/dist/agent-tools/merge-windows.js +12 -0
  352. package/dist/agent-tools/node-id.d.ts +3 -0
  353. package/dist/agent-tools/node-id.d.ts.map +1 -0
  354. package/dist/agent-tools/node-id.js +2 -0
  355. package/dist/agent-tools/nodes.d.ts +17 -0
  356. package/dist/agent-tools/nodes.d.ts.map +1 -0
  357. package/dist/agent-tools/nodes.js +13 -0
  358. package/dist/agent-tools/notation-inventory.d.ts +16 -0
  359. package/dist/agent-tools/notation-inventory.d.ts.map +1 -0
  360. package/dist/agent-tools/notation-inventory.js +105 -0
  361. package/dist/agent-tools/paint.d.ts +46 -0
  362. package/dist/agent-tools/paint.d.ts.map +1 -0
  363. package/dist/agent-tools/paint.js +29 -0
  364. package/dist/agent-tools/photo-elevation.d.ts +32 -0
  365. package/dist/agent-tools/photo-elevation.d.ts.map +1 -0
  366. package/dist/agent-tools/photo-elevation.js +73 -0
  367. package/dist/agent-tools/place-in-room.d.ts +35 -0
  368. package/dist/agent-tools/place-in-room.d.ts.map +1 -0
  369. package/dist/agent-tools/place-in-room.js +61 -0
  370. package/dist/agent-tools/place-items.d.ts +19 -0
  371. package/dist/agent-tools/place-items.d.ts.map +1 -0
  372. package/dist/agent-tools/place-items.js +29 -0
  373. package/dist/agent-tools/project-files.d.ts +189 -0
  374. package/dist/agent-tools/project-files.d.ts.map +1 -0
  375. package/dist/agent-tools/project-files.js +99 -0
  376. package/dist/agent-tools/refusal.d.ts +20 -0
  377. package/dist/agent-tools/refusal.d.ts.map +1 -0
  378. package/dist/agent-tools/refusal.js +29 -0
  379. package/dist/agent-tools/retired.d.ts +21 -0
  380. package/dist/agent-tools/retired.d.ts.map +1 -0
  381. package/dist/agent-tools/retired.js +29 -0
  382. package/dist/agent-tools/roofs.d.ts +100 -0
  383. package/dist/agent-tools/roofs.d.ts.map +1 -0
  384. package/dist/agent-tools/roofs.js +96 -0
  385. package/dist/agent-tools/room-structure.d.ts +446 -0
  386. package/dist/agent-tools/room-structure.d.ts.map +1 -0
  387. package/dist/agent-tools/room-structure.js +210 -0
  388. package/dist/agent-tools/search-materials.d.ts +39 -0
  389. package/dist/agent-tools/search-materials.d.ts.map +1 -0
  390. package/dist/agent-tools/search-materials.js +31 -0
  391. package/dist/agent-tools/site.d.ts +27 -0
  392. package/dist/agent-tools/site.d.ts.map +1 -0
  393. package/dist/agent-tools/site.js +40 -0
  394. package/dist/agent-tools/sources.d.ts +12 -0
  395. package/dist/agent-tools/sources.d.ts.map +1 -0
  396. package/dist/agent-tools/sources.js +11 -0
  397. package/dist/agent-tools/stairs.d.ts +106 -0
  398. package/dist/agent-tools/stairs.d.ts.map +1 -0
  399. package/dist/agent-tools/stairs.js +146 -0
  400. package/dist/agent-tools/verify-scene.d.ts +13 -0
  401. package/dist/agent-tools/verify-scene.d.ts.map +1 -0
  402. package/dist/agent-tools/verify-scene.js +21 -0
  403. package/dist/agent-tools/view-scene.d.ts +81 -0
  404. package/dist/agent-tools/view-scene.d.ts.map +1 -0
  405. package/dist/agent-tools/view-scene.js +123 -0
  406. package/dist/agent-tools/wall-openings.d.ts +167 -0
  407. package/dist/agent-tools/wall-openings.d.ts.map +1 -0
  408. package/dist/agent-tools/wall-openings.js +148 -0
  409. package/dist/agent-tools/walls.d.ts +21 -0
  410. package/dist/agent-tools/walls.d.ts.map +1 -0
  411. package/dist/agent-tools/walls.js +35 -0
  412. package/dist/agent-tools/write-target.d.ts +12 -0
  413. package/dist/agent-tools/write-target.d.ts.map +1 -0
  414. package/dist/agent-tools/write-target.js +10 -0
  415. package/dist/building/__fixtures__/wall-opening-cases.d.ts +940 -0
  416. package/dist/building/__fixtures__/wall-opening-cases.d.ts.map +1 -0
  417. package/dist/building/__fixtures__/wall-opening-cases.js +367 -0
  418. package/dist/building/corner-window.d.ts +56 -0
  419. package/dist/building/corner-window.d.ts.map +1 -0
  420. package/dist/building/corner-window.js +179 -0
  421. package/dist/building/door-types.d.ts +22 -0
  422. package/dist/building/door-types.d.ts.map +1 -0
  423. package/dist/building/door-types.js +167 -0
  424. package/dist/building/floor-item-fit.d.ts +38 -0
  425. package/dist/building/floor-item-fit.d.ts.map +1 -0
  426. package/dist/building/floor-item-fit.js +47 -0
  427. package/dist/building/ground-level.d.ts +26 -0
  428. package/dist/building/ground-level.d.ts.map +1 -0
  429. package/dist/building/ground-level.js +58 -0
  430. package/dist/building/index.d.ts +12 -0
  431. package/dist/building/index.d.ts.map +1 -0
  432. package/dist/building/index.js +11 -0
  433. package/dist/building/level-duplication.d.ts +9842 -0
  434. package/dist/building/level-duplication.d.ts.map +1 -0
  435. package/dist/building/level-duplication.js +328 -0
  436. package/dist/building/level-insertion.d.ts +55 -0
  437. package/dist/building/level-insertion.d.ts.map +1 -0
  438. package/dist/building/level-insertion.js +35 -0
  439. package/dist/building/merge-windows.d.ts +58 -0
  440. package/dist/building/merge-windows.d.ts.map +1 -0
  441. package/dist/building/merge-windows.js +189 -0
  442. package/dist/building/opening-style-presets.d.ts +46 -0
  443. package/dist/building/opening-style-presets.d.ts.map +1 -0
  444. package/dist/building/opening-style-presets.js +195 -0
  445. package/dist/building/photo-elevation.d.ts +125 -0
  446. package/dist/building/photo-elevation.d.ts.map +1 -0
  447. package/dist/building/photo-elevation.js +404 -0
  448. package/dist/building/wall-gaps.d.ts +13 -0
  449. package/dist/building/wall-gaps.d.ts.map +1 -0
  450. package/dist/building/wall-gaps.js +158 -0
  451. package/dist/building/wall-openings.d.ts +480 -0
  452. package/dist/building/wall-openings.d.ts.map +1 -0
  453. package/dist/building/wall-openings.js +259 -0
  454. package/dist/building/window-types.d.ts +17 -0
  455. package/dist/building/window-types.d.ts.map +1 -0
  456. package/dist/building/window-types.js +31 -0
  457. package/dist/capture/schema.d.ts +22 -22
  458. package/dist/capture/source.d.ts.map +1 -1
  459. package/dist/capture/source.js +1 -1
  460. package/dist/commands/structure/apply-zone-transform.d.ts +23 -0
  461. package/dist/commands/structure/apply-zone-transform.d.ts.map +1 -0
  462. package/dist/commands/structure/apply-zone-transform.js +55 -0
  463. package/dist/commands/structure/create-mezzanine.d.ts +12 -0
  464. package/dist/commands/structure/create-mezzanine.d.ts.map +1 -0
  465. package/dist/commands/structure/create-mezzanine.js +46 -0
  466. package/dist/commands/structure/create-zone.d.ts +43 -0
  467. package/dist/commands/structure/create-zone.d.ts.map +1 -0
  468. package/dist/commands/structure/create-zone.js +175 -0
  469. package/dist/commands/structure/delete-zone.d.ts +51 -0
  470. package/dist/commands/structure/delete-zone.d.ts.map +1 -0
  471. package/dist/commands/structure/delete-zone.js +354 -0
  472. package/dist/commands/structure/divide-zone.d.ts +38 -0
  473. package/dist/commands/structure/divide-zone.d.ts.map +1 -0
  474. package/dist/commands/structure/divide-zone.js +186 -0
  475. package/dist/commands/structure/duplicate-zone.d.ts +7 -0
  476. package/dist/commands/structure/duplicate-zone.d.ts.map +1 -0
  477. package/dist/commands/structure/duplicate-zone.js +21 -0
  478. package/dist/commands/structure/floor-opening.d.ts +36 -0
  479. package/dist/commands/structure/floor-opening.d.ts.map +1 -0
  480. package/dist/commands/structure/floor-opening.js +124 -0
  481. package/dist/commands/structure/index.d.ts +22 -0
  482. package/dist/commands/structure/index.d.ts.map +1 -0
  483. package/dist/commands/structure/index.js +20 -0
  484. package/dist/commands/structure/lock-outside-faces.d.ts +12 -0
  485. package/dist/commands/structure/lock-outside-faces.d.ts.map +1 -0
  486. package/dist/commands/structure/lock-outside-faces.js +32 -0
  487. package/dist/commands/structure/merge-zones.d.ts +5 -0
  488. package/dist/commands/structure/merge-zones.d.ts.map +1 -0
  489. package/dist/commands/structure/merge-zones.js +22 -0
  490. package/dist/commands/structure/mezzanine-content.d.ts +16 -0
  491. package/dist/commands/structure/mezzanine-content.d.ts.map +1 -0
  492. package/dist/commands/structure/mezzanine-content.js +109 -0
  493. package/dist/commands/structure/plan-mezzanine-stair.d.ts +7 -0
  494. package/dist/commands/structure/plan-mezzanine-stair.d.ts.map +1 -0
  495. package/dist/commands/structure/plan-mezzanine-stair.js +127 -0
  496. package/dist/commands/structure/plan-wall-deletion.d.ts +9 -0
  497. package/dist/commands/structure/plan-wall-deletion.d.ts.map +1 -0
  498. package/dist/commands/structure/plan-wall-deletion.js +151 -0
  499. package/dist/commands/structure/rebase-floor-reference.d.ts +7 -0
  500. package/dist/commands/structure/rebase-floor-reference.d.ts.map +1 -0
  501. package/dist/commands/structure/rebase-floor-reference.js +90 -0
  502. package/dist/commands/structure/resize-mezzanine.d.ts +8 -0
  503. package/dist/commands/structure/resize-mezzanine.d.ts.map +1 -0
  504. package/dist/commands/structure/resize-mezzanine.js +43 -0
  505. package/dist/commands/structure/rotate-zone.d.ts +8 -0
  506. package/dist/commands/structure/rotate-zone.d.ts.map +1 -0
  507. package/dist/commands/structure/rotate-zone.js +28 -0
  508. package/dist/commands/structure/set-floor-foundation.d.ts +62 -0
  509. package/dist/commands/structure/set-floor-foundation.d.ts.map +1 -0
  510. package/dist/commands/structure/set-floor-foundation.js +162 -0
  511. package/dist/commands/structure/set-room-floor-construction.d.ts +8 -0
  512. package/dist/commands/structure/set-room-floor-construction.d.ts.map +1 -0
  513. package/dist/commands/structure/set-room-floor-construction.js +72 -0
  514. package/dist/commands/structure/set-wall-geometry.d.ts +10 -0
  515. package/dist/commands/structure/set-wall-geometry.d.ts.map +1 -0
  516. package/dist/commands/structure/set-wall-geometry.js +52 -0
  517. package/dist/commands/structure/set-zone-edges.d.ts +14 -0
  518. package/dist/commands/structure/set-zone-edges.d.ts.map +1 -0
  519. package/dist/commands/structure/set-zone-edges.js +143 -0
  520. package/dist/commands/structure/set-zone-intent.d.ts +43 -0
  521. package/dist/commands/structure/set-zone-intent.d.ts.map +1 -0
  522. package/dist/commands/structure/set-zone-intent.js +144 -0
  523. package/dist/commands/structure/shared.d.ts +4941 -0
  524. package/dist/commands/structure/shared.d.ts.map +1 -0
  525. package/dist/commands/structure/shared.js +102 -0
  526. package/dist/commands/structure/transform-zone.d.ts +23 -0
  527. package/dist/commands/structure/transform-zone.d.ts.map +1 -0
  528. package/dist/commands/structure/transform-zone.js +472 -0
  529. package/dist/commands/structure/validate-mezzanine.d.ts +5 -0
  530. package/dist/commands/structure/validate-mezzanine.d.ts.map +1 -0
  531. package/dist/commands/structure/validate-mezzanine.js +46 -0
  532. package/dist/commands/structure/zone-crossings.d.ts +8 -0
  533. package/dist/commands/structure/zone-crossings.d.ts.map +1 -0
  534. package/dist/commands/structure/zone-crossings.js +162 -0
  535. package/dist/commands/structure/zone-drop.d.ts +4 -0
  536. package/dist/commands/structure/zone-drop.d.ts.map +1 -0
  537. package/dist/commands/structure/zone-drop.js +68 -0
  538. package/dist/commands/structure/zone-insertion.d.ts +4 -0
  539. package/dist/commands/structure/zone-insertion.d.ts.map +1 -0
  540. package/dist/commands/structure/zone-insertion.js +200 -0
  541. package/dist/commands/structure/zone-transform-content.d.ts +6 -0
  542. package/dist/commands/structure/zone-transform-content.d.ts.map +1 -0
  543. package/dist/commands/structure/zone-transform-content.js +117 -0
  544. package/dist/commands/structure/zone-wall-merge.d.ts +5792 -0
  545. package/dist/commands/structure/zone-wall-merge.d.ts.map +1 -0
  546. package/dist/commands/structure/zone-wall-merge.js +135 -0
  547. package/dist/contracts/reference-discovery.d.ts +18 -0
  548. package/dist/contracts/reference-discovery.d.ts.map +1 -0
  549. package/dist/contracts/reference-discovery.js +100 -0
  550. package/dist/contracts/reference-inventory.d.ts +44 -0
  551. package/dist/contracts/reference-inventory.d.ts.map +1 -0
  552. package/dist/contracts/reference-inventory.js +952 -0
  553. package/dist/events/bus.d.ts +90 -10
  554. package/dist/events/bus.d.ts.map +1 -1
  555. package/dist/events/capture-sessions.d.ts +5 -0
  556. package/dist/events/capture-sessions.d.ts.map +1 -0
  557. package/dist/events/capture-sessions.js +31 -0
  558. package/dist/hooks/scene-registry/item-clip-registry.d.ts +6 -3
  559. package/dist/hooks/scene-registry/item-clip-registry.d.ts.map +1 -1
  560. package/dist/hooks/scene-registry/item-clip-registry.js +2 -1
  561. package/dist/hooks/scene-registry/scene-registry.d.ts.map +1 -1
  562. package/dist/hooks/spatial-grid/floor-placed-elevation.d.ts.map +1 -1
  563. package/dist/hooks/spatial-grid/floor-placed-elevation.js +15 -1
  564. package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts +4 -4
  565. package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts.map +1 -1
  566. package/dist/hooks/spatial-grid/spatial-grid-manager.js +56 -71
  567. package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts +3948 -2034
  568. package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts.map +1 -1
  569. package/dist/hooks/spatial-grid/spatial-grid-sync.js +86 -83
  570. package/dist/hooks/spatial-grid/spatial-grid.d.ts.map +1 -1
  571. package/dist/hooks/spatial-grid/support-host-patch.d.ts +1 -0
  572. package/dist/hooks/spatial-grid/support-host-patch.d.ts.map +1 -1
  573. package/dist/hooks/spatial-grid/support-host-patch.js +21 -5
  574. package/dist/hooks/spatial-grid/use-spatial-query.d.ts +3 -3
  575. package/dist/hooks/spatial-grid/wall-spatial-grid.d.ts.map +1 -1
  576. package/dist/index.d.ts +109 -14
  577. package/dist/index.d.ts.map +1 -1
  578. package/dist/index.js +103 -12
  579. package/dist/lib/__bench__/near-linear-walls.d.ts +2 -0
  580. package/dist/lib/__bench__/near-linear-walls.d.ts.map +1 -0
  581. package/dist/lib/__bench__/near-linear-walls.js +24 -0
  582. package/dist/lib/__bench__/structure-preview.bench.d.ts +2 -0
  583. package/dist/lib/__bench__/structure-preview.bench.d.ts.map +1 -0
  584. package/dist/lib/__bench__/structure-preview.bench.js +72 -0
  585. package/dist/lib/__fixtures__/mezzanine.d.ts +15636 -0
  586. package/dist/lib/__fixtures__/mezzanine.d.ts.map +1 -0
  587. package/dist/lib/__fixtures__/mezzanine.js +43 -0
  588. package/dist/lib/absorb-wall-separators.d.ts +4912 -0
  589. package/dist/lib/absorb-wall-separators.d.ts.map +1 -0
  590. package/dist/lib/absorb-wall-separators.js +65 -0
  591. package/dist/lib/angle-accumulator.d.ts +3 -0
  592. package/dist/lib/angle-accumulator.d.ts.map +1 -0
  593. package/dist/lib/angle-accumulator.js +13 -0
  594. package/dist/lib/artifact-store.d.ts +31 -0
  595. package/dist/lib/artifact-store.d.ts.map +1 -0
  596. package/dist/lib/artifact-store.js +42 -0
  597. package/dist/lib/assembly-stack.d.ts +54 -0
  598. package/dist/lib/assembly-stack.d.ts.map +1 -0
  599. package/dist/lib/assembly-stack.js +52 -0
  600. package/dist/lib/asset-storage.d.ts.map +1 -1
  601. package/dist/lib/asset-storage.js +3 -0
  602. package/dist/lib/below-grade-footprints.d.ts +65 -0
  603. package/dist/lib/below-grade-footprints.d.ts.map +1 -0
  604. package/dist/lib/below-grade-footprints.js +181 -0
  605. package/dist/lib/building-footprint.d.ts +33 -0
  606. package/dist/lib/building-footprint.d.ts.map +1 -0
  607. package/dist/lib/building-footprint.js +89 -0
  608. package/dist/lib/canonical-opening-ring.d.ts +3 -0
  609. package/dist/lib/canonical-opening-ring.d.ts.map +1 -0
  610. package/dist/lib/canonical-opening-ring.js +14 -0
  611. package/dist/lib/ceiling-children.d.ts +8 -0
  612. package/dist/lib/ceiling-children.d.ts.map +1 -0
  613. package/dist/lib/ceiling-children.js +36 -0
  614. package/dist/lib/ceiling-surface.d.ts +40 -0
  615. package/dist/lib/ceiling-surface.d.ts.map +1 -0
  616. package/dist/lib/ceiling-surface.js +65 -0
  617. package/dist/lib/corner-pair.d.ts +1129 -0
  618. package/dist/lib/corner-pair.d.ts.map +1 -0
  619. package/dist/lib/corner-pair.js +130 -0
  620. package/dist/lib/corner-snap.d.ts +54 -0
  621. package/dist/lib/corner-snap.d.ts.map +1 -0
  622. package/dist/lib/corner-snap.js +125 -0
  623. package/dist/lib/critically-damped.d.ts +11 -0
  624. package/dist/lib/critically-damped.d.ts.map +1 -0
  625. package/dist/lib/critically-damped.js +14 -0
  626. package/dist/lib/cutter-host.d.ts +5 -0
  627. package/dist/lib/cutter-host.d.ts.map +1 -0
  628. package/dist/lib/cutter-host.js +30 -0
  629. package/dist/lib/deepest-drawn.d.ts +18 -0
  630. package/dist/lib/deepest-drawn.d.ts.map +1 -0
  631. package/dist/lib/deepest-drawn.js +65 -0
  632. package/dist/lib/door-operation.d.ts +1 -1
  633. package/dist/lib/exterior-wall-loops.d.ts +17 -0
  634. package/dist/lib/exterior-wall-loops.d.ts.map +1 -0
  635. package/dist/lib/exterior-wall-loops.js +334 -0
  636. package/dist/lib/finish-script.d.ts +61 -0
  637. package/dist/lib/finish-script.d.ts.map +1 -0
  638. package/dist/lib/finish-script.js +86 -0
  639. package/dist/lib/floor-construction-lift.d.ts +4 -0
  640. package/dist/lib/floor-construction-lift.d.ts.map +1 -0
  641. package/dist/lib/floor-construction-lift.js +54 -0
  642. package/dist/lib/floor-footprint-key.d.ts +3 -0
  643. package/dist/lib/floor-footprint-key.d.ts.map +1 -0
  644. package/dist/lib/floor-footprint-key.js +9 -0
  645. package/dist/lib/floor-footprint-name.d.ts +11 -0
  646. package/dist/lib/floor-footprint-name.d.ts.map +1 -0
  647. package/dist/lib/floor-footprint-name.js +52 -0
  648. package/dist/lib/floor-foundation-datum.d.ts +31 -0
  649. package/dist/lib/floor-foundation-datum.d.ts.map +1 -0
  650. package/dist/lib/floor-foundation-datum.js +226 -0
  651. package/dist/lib/floor-foundation-stack.d.ts +16 -0
  652. package/dist/lib/floor-foundation-stack.d.ts.map +1 -0
  653. package/dist/lib/floor-foundation-stack.js +214 -0
  654. package/dist/lib/floor-intent-changes.d.ts +10 -0
  655. package/dist/lib/floor-intent-changes.d.ts.map +1 -0
  656. package/dist/lib/floor-intent-changes.js +461 -0
  657. package/dist/lib/floor-opening-footprints.d.ts +24 -0
  658. package/dist/lib/floor-opening-footprints.d.ts.map +1 -0
  659. package/dist/lib/floor-opening-footprints.js +127 -0
  660. package/dist/lib/floor-opening-intent.d.ts +16 -0
  661. package/dist/lib/floor-opening-intent.d.ts.map +1 -0
  662. package/dist/lib/floor-opening-intent.js +82 -0
  663. package/dist/lib/floor-plate-id.d.ts +5 -0
  664. package/dist/lib/floor-plate-id.d.ts.map +1 -0
  665. package/dist/lib/floor-plate-id.js +20 -0
  666. package/dist/lib/floor-plate-paint.d.ts +10 -0
  667. package/dist/lib/floor-plate-paint.d.ts.map +1 -0
  668. package/dist/lib/floor-plate-paint.js +31 -0
  669. package/dist/lib/floor-plates.d.ts +211 -0
  670. package/dist/lib/floor-plates.d.ts.map +1 -0
  671. package/dist/lib/floor-plates.js +729 -0
  672. package/dist/lib/floor-room-faces.d.ts +5 -0
  673. package/dist/lib/floor-room-faces.d.ts.map +1 -0
  674. package/dist/lib/floor-room-faces.js +29 -0
  675. package/dist/lib/floor-script.d.ts +24 -0
  676. package/dist/lib/floor-script.d.ts.map +1 -0
  677. package/dist/lib/floor-script.js +51 -0
  678. package/dist/lib/floor-step-finish.d.ts +49 -0
  679. package/dist/lib/floor-step-finish.d.ts.map +1 -0
  680. package/dist/lib/floor-step-finish.js +128 -0
  681. package/dist/lib/foundation-construction.d.ts +73 -0
  682. package/dist/lib/foundation-construction.d.ts.map +1 -0
  683. package/dist/lib/foundation-construction.js +242 -0
  684. package/dist/lib/foundation-standard.d.ts +30 -0
  685. package/dist/lib/foundation-standard.d.ts.map +1 -0
  686. package/dist/lib/foundation-standard.js +30 -0
  687. package/dist/lib/foundation-wall.d.ts +36 -0
  688. package/dist/lib/foundation-wall.d.ts.map +1 -0
  689. package/dist/lib/foundation-wall.js +66 -0
  690. package/dist/lib/generic-foundation.d.ts +40 -0
  691. package/dist/lib/generic-foundation.d.ts.map +1 -0
  692. package/dist/lib/generic-foundation.js +200 -0
  693. package/dist/lib/geometry-script-node.d.ts +111 -0
  694. package/dist/lib/geometry-script-node.d.ts.map +1 -0
  695. package/dist/lib/geometry-script-node.js +173 -0
  696. package/dist/lib/geometry-surfaces.d.ts +61 -0
  697. package/dist/lib/geometry-surfaces.d.ts.map +1 -0
  698. package/dist/lib/geometry-surfaces.js +156 -0
  699. package/dist/lib/grade-standing.d.ts +38 -0
  700. package/dist/lib/grade-standing.d.ts.map +1 -0
  701. package/dist/lib/grade-standing.js +137 -0
  702. package/dist/lib/ground-level.d.ts +20 -0
  703. package/dist/lib/ground-level.d.ts.map +1 -0
  704. package/dist/lib/ground-level.js +49 -0
  705. package/dist/lib/ground-over-part.d.ts +13 -0
  706. package/dist/lib/ground-over-part.d.ts.map +1 -0
  707. package/dist/lib/ground-over-part.js +94 -0
  708. package/dist/lib/ground-seat.d.ts +47 -0
  709. package/dist/lib/ground-seat.d.ts.map +1 -0
  710. package/dist/lib/ground-seat.js +61 -0
  711. package/dist/lib/ground-window.d.ts +39 -0
  712. package/dist/lib/ground-window.d.ts.map +1 -0
  713. package/dist/lib/ground-window.js +147 -0
  714. package/dist/lib/item-slab-support.d.ts +14 -0
  715. package/dist/lib/item-slab-support.d.ts.map +1 -0
  716. package/dist/lib/item-slab-support.js +40 -0
  717. package/dist/lib/level-footprints.d.ts +23 -0
  718. package/dist/lib/level-footprints.d.ts.map +1 -0
  719. package/dist/lib/level-footprints.js +398 -0
  720. package/dist/lib/level-name.d.ts +7 -0
  721. package/dist/lib/level-name.d.ts.map +1 -1
  722. package/dist/lib/level-name.js +11 -3
  723. package/dist/lib/new-zone.d.ts +10 -0
  724. package/dist/lib/new-zone.d.ts.map +1 -0
  725. package/dist/lib/new-zone.js +10 -0
  726. package/dist/lib/node-ancestry.d.ts +30 -0
  727. package/dist/lib/node-ancestry.d.ts.map +1 -0
  728. package/dist/lib/node-ancestry.js +76 -0
  729. package/dist/lib/object-cuts.d.ts +11 -0
  730. package/dist/lib/object-cuts.d.ts.map +1 -0
  731. package/dist/lib/object-cuts.js +63 -0
  732. package/dist/lib/opening-floor-datum.d.ts +24 -0
  733. package/dist/lib/opening-floor-datum.d.ts.map +1 -0
  734. package/dist/lib/opening-floor-datum.js +144 -0
  735. package/dist/lib/own-floor-intent.d.ts +15 -0
  736. package/dist/lib/own-floor-intent.d.ts.map +1 -0
  737. package/dist/lib/own-floor-intent.js +201 -0
  738. package/dist/lib/plate-reference.d.ts +3 -0
  739. package/dist/lib/plate-reference.d.ts.map +1 -0
  740. package/dist/lib/plate-reference.js +91 -0
  741. package/dist/lib/plate-surface.d.ts +120 -0
  742. package/dist/lib/plate-surface.d.ts.map +1 -0
  743. package/dist/lib/plate-surface.js +727 -0
  744. package/dist/lib/point-ask.d.ts +9 -0
  745. package/dist/lib/point-ask.d.ts.map +1 -0
  746. package/dist/lib/point-ask.js +36 -0
  747. package/dist/lib/polygon-boolean.d.ts +17 -0
  748. package/dist/lib/polygon-boolean.d.ts.map +1 -0
  749. package/dist/lib/polygon-boolean.js +195 -0
  750. package/dist/lib/polygon-label.d.ts +7 -0
  751. package/dist/lib/polygon-label.d.ts.map +1 -0
  752. package/dist/lib/polygon-label.js +94 -0
  753. package/dist/lib/room-drawn-floor.d.ts +29 -0
  754. package/dist/lib/room-drawn-floor.d.ts.map +1 -0
  755. package/dist/lib/room-drawn-floor.js +88 -0
  756. package/dist/lib/room-floor-choices.d.ts +11 -0
  757. package/dist/lib/room-floor-choices.d.ts.map +1 -0
  758. package/dist/lib/room-floor-choices.js +60 -0
  759. package/dist/lib/room-floor-feasibility.d.ts +25 -0
  760. package/dist/lib/room-floor-feasibility.d.ts.map +1 -0
  761. package/dist/lib/room-floor-feasibility.js +293 -0
  762. package/dist/lib/room-floor-plate.d.ts +3 -0
  763. package/dist/lib/room-floor-plate.d.ts.map +1 -0
  764. package/dist/lib/room-floor-plate.js +4 -0
  765. package/dist/lib/room-graph.d.ts +79 -0
  766. package/dist/lib/room-graph.d.ts.map +1 -0
  767. package/dist/lib/room-graph.js +1267 -0
  768. package/dist/lib/room-name.d.ts +12 -0
  769. package/dist/lib/room-name.d.ts.map +1 -0
  770. package/dist/lib/room-name.js +24 -0
  771. package/dist/lib/room-topology-index.d.ts +53 -5
  772. package/dist/lib/room-topology-index.d.ts.map +1 -1
  773. package/dist/lib/room-topology-index.js +176 -30
  774. package/dist/lib/room-vertical-placement.d.ts +12 -0
  775. package/dist/lib/room-vertical-placement.d.ts.map +1 -0
  776. package/dist/lib/room-vertical-placement.js +28 -0
  777. package/dist/lib/room-zone-adoption.d.ts +74 -0
  778. package/dist/lib/room-zone-adoption.d.ts.map +1 -0
  779. package/dist/lib/room-zone-adoption.js +150 -0
  780. package/dist/lib/script-inputs-key.d.ts +3 -0
  781. package/dist/lib/script-inputs-key.d.ts.map +1 -0
  782. package/dist/lib/script-inputs-key.js +13 -0
  783. package/dist/lib/setback-envelope.d.ts +163 -0
  784. package/dist/lib/setback-envelope.d.ts.map +1 -0
  785. package/dist/lib/setback-envelope.js +822 -0
  786. package/dist/lib/site-flatwork.d.ts +11 -0
  787. package/dist/lib/site-flatwork.d.ts.map +1 -0
  788. package/dist/lib/site-flatwork.js +11 -0
  789. package/dist/lib/site-ground-height.d.ts +13 -0
  790. package/dist/lib/site-ground-height.d.ts.map +1 -0
  791. package/dist/lib/site-ground-height.js +16 -0
  792. package/dist/lib/site-placement.d.ts +362 -0
  793. package/dist/lib/site-placement.d.ts.map +1 -0
  794. package/dist/lib/site-placement.js +942 -0
  795. package/dist/lib/slab-polygon.d.ts.map +1 -1
  796. package/dist/lib/slab-polygon.js +33 -12
  797. package/dist/lib/slots.d.ts +20 -0
  798. package/dist/lib/slots.d.ts.map +1 -1
  799. package/dist/lib/slots.js +44 -0
  800. package/dist/lib/snap-ease.d.ts +20 -0
  801. package/dist/lib/snap-ease.d.ts.map +1 -0
  802. package/dist/lib/snap-ease.js +50 -0
  803. package/dist/lib/space-detection.d.ts +14 -94
  804. package/dist/lib/space-detection.d.ts.map +1 -1
  805. package/dist/lib/space-detection.js +244 -1616
  806. package/dist/lib/structure-commit.d.ts +38 -0
  807. package/dist/lib/structure-commit.d.ts.map +1 -0
  808. package/dist/lib/structure-commit.js +52 -0
  809. package/dist/lib/structure-kernel.d.ts +66 -0
  810. package/dist/lib/structure-kernel.d.ts.map +1 -0
  811. package/dist/lib/structure-kernel.js +737 -0
  812. package/dist/lib/structure-reconcile.d.ts +15 -0
  813. package/dist/lib/structure-reconcile.d.ts.map +1 -0
  814. package/dist/lib/structure-reconcile.js +218 -0
  815. package/dist/lib/surface-support-references.d.ts +4 -0
  816. package/dist/lib/surface-support-references.d.ts.map +1 -0
  817. package/dist/lib/surface-support-references.js +19 -0
  818. package/dist/lib/terrain-contours.d.ts +29 -0
  819. package/dist/lib/terrain-contours.d.ts.map +1 -0
  820. package/dist/lib/terrain-contours.js +199 -0
  821. package/dist/lib/terrain-source-persisted.d.ts +42 -0
  822. package/dist/lib/terrain-source-persisted.d.ts.map +1 -0
  823. package/dist/lib/terrain-source-persisted.js +68 -0
  824. package/dist/lib/terrain-source.d.ts +2 -40
  825. package/dist/lib/terrain-source.d.ts.map +1 -1
  826. package/dist/lib/terrain-source.js +2 -68
  827. package/dist/lib/terrain-support-query.d.ts +93 -0
  828. package/dist/lib/terrain-support-query.d.ts.map +1 -0
  829. package/dist/lib/terrain-support-query.js +187 -0
  830. package/dist/lib/terrain-support.d.ts +1 -77
  831. package/dist/lib/terrain-support.d.ts.map +1 -1
  832. package/dist/lib/terrain-support.js +3 -181
  833. package/dist/lib/unit-containment.js +2 -2
  834. package/dist/lib/unit-report.d.ts.map +1 -1
  835. package/dist/lib/unit-report.js +5 -4
  836. package/dist/lib/wall-face-script.d.ts +66 -0
  837. package/dist/lib/wall-face-script.d.ts.map +1 -0
  838. package/dist/lib/wall-face-script.js +235 -0
  839. package/dist/lib/zone-colors.d.ts +11 -0
  840. package/dist/lib/zone-colors.d.ts.map +1 -0
  841. package/dist/lib/zone-colors.js +32 -0
  842. package/dist/lib/zone-quantities.d.ts.map +1 -1
  843. package/dist/lib/zone-quantities.js +117 -228
  844. package/dist/material-kinds.d.ts +9 -0
  845. package/dist/material-kinds.d.ts.map +1 -0
  846. package/dist/material-kinds.js +30 -0
  847. package/dist/material-library.d.ts +13 -5
  848. package/dist/material-library.d.ts.map +1 -1
  849. package/dist/material-library.js +622 -27
  850. package/dist/node-slots/block.d.ts +7 -0
  851. package/dist/node-slots/block.d.ts.map +1 -0
  852. package/dist/node-slots/block.js +27 -0
  853. package/dist/node-slots/cabinet.d.ts +4 -0
  854. package/dist/node-slots/cabinet.d.ts.map +1 -0
  855. package/dist/node-slots/cabinet.js +24 -0
  856. package/dist/node-slots/ceiling.d.ts +6 -0
  857. package/dist/node-slots/ceiling.d.ts.map +1 -0
  858. package/dist/node-slots/ceiling.js +7 -0
  859. package/dist/node-slots/column.d.ts +9 -0
  860. package/dist/node-slots/column.d.ts.map +1 -0
  861. package/dist/node-slots/column.js +24 -0
  862. package/dist/node-slots/door.d.ts +9 -0
  863. package/dist/node-slots/door.d.ts.map +1 -0
  864. package/dist/node-slots/door.js +20 -0
  865. package/dist/node-slots/duct.d.ts +5 -0
  866. package/dist/node-slots/duct.d.ts.map +1 -0
  867. package/dist/node-slots/duct.js +5 -0
  868. package/dist/node-slots/elevator.d.ts +9 -0
  869. package/dist/node-slots/elevator.d.ts.map +1 -0
  870. package/dist/node-slots/elevator.js +17 -0
  871. package/dist/node-slots/fence.d.ts +10 -0
  872. package/dist/node-slots/fence.d.ts.map +1 -0
  873. package/dist/node-slots/fence.js +23 -0
  874. package/dist/node-slots/index.d.ts +26 -0
  875. package/dist/node-slots/index.d.ts.map +1 -0
  876. package/dist/node-slots/index.js +98 -0
  877. package/dist/node-slots/lean-to-extension.d.ts +5 -0
  878. package/dist/node-slots/lean-to-extension.d.ts.map +1 -0
  879. package/dist/node-slots/lean-to-extension.js +15 -0
  880. package/dist/node-slots/procedural-item.d.ts +4 -0
  881. package/dist/node-slots/procedural-item.d.ts.map +1 -0
  882. package/dist/node-slots/procedural-item.js +3 -0
  883. package/dist/node-slots/roof-accessories.d.ts +9 -0
  884. package/dist/node-slots/roof-accessories.d.ts.map +1 -0
  885. package/dist/node-slots/roof-accessories.js +34 -0
  886. package/dist/node-slots/roof.d.ts +5 -0
  887. package/dist/node-slots/roof.d.ts.map +1 -0
  888. package/dist/node-slots/roof.js +12 -0
  889. package/dist/node-slots/shelf.d.ts +9 -0
  890. package/dist/node-slots/shelf.d.ts.map +1 -0
  891. package/dist/node-slots/shelf.js +30 -0
  892. package/dist/node-slots/slab.d.ts +7 -0
  893. package/dist/node-slots/slab.d.ts.map +1 -0
  894. package/dist/node-slots/slab.js +21 -0
  895. package/dist/node-slots/stair.d.ts +10 -0
  896. package/dist/node-slots/stair.d.ts.map +1 -0
  897. package/dist/node-slots/stair.js +21 -0
  898. package/dist/node-slots/wall.d.ts +12 -0
  899. package/dist/node-slots/wall.d.ts.map +1 -0
  900. package/dist/node-slots/wall.js +55 -0
  901. package/dist/node-slots/window.d.ts +5 -0
  902. package/dist/node-slots/window.d.ts.map +1 -0
  903. package/dist/node-slots/window.js +11 -0
  904. package/dist/procedural-items/design-placement.d.ts +49 -0
  905. package/dist/procedural-items/design-placement.d.ts.map +1 -0
  906. package/dist/procedural-items/design-placement.js +129 -0
  907. package/dist/procedural-items/design.d.ts +261 -0
  908. package/dist/procedural-items/design.d.ts.map +1 -0
  909. package/dist/procedural-items/design.js +707 -0
  910. package/dist/procedural-items/fixtures.d.ts +515 -75
  911. package/dist/procedural-items/fixtures.d.ts.map +1 -1
  912. package/dist/procedural-items/index.d.ts +5 -0
  913. package/dist/procedural-items/index.d.ts.map +1 -1
  914. package/dist/procedural-items/index.js +5 -0
  915. package/dist/procedural-items/integration.d.ts +156 -35
  916. package/dist/procedural-items/integration.d.ts.map +1 -1
  917. package/dist/procedural-items/joints.d.ts +56 -0
  918. package/dist/procedural-items/joints.d.ts.map +1 -0
  919. package/dist/procedural-items/joints.js +251 -0
  920. package/dist/procedural-items/library-colors.d.ts +34 -22
  921. package/dist/procedural-items/library-colors.d.ts.map +1 -1
  922. package/dist/procedural-items/library-colors.js +37 -3
  923. package/dist/procedural-items/motion-controller.d.ts +29 -0
  924. package/dist/procedural-items/motion-controller.d.ts.map +1 -0
  925. package/dist/procedural-items/motion-controller.js +130 -0
  926. package/dist/procedural-items/node.d.ts +528 -62
  927. package/dist/procedural-items/node.d.ts.map +1 -1
  928. package/dist/procedural-items/query.d.ts +19 -2
  929. package/dist/procedural-items/query.d.ts.map +1 -1
  930. package/dist/procedural-items/query.js +78 -39
  931. package/dist/procedural-items/recipe.d.ts +260 -16
  932. package/dist/procedural-items/recipe.d.ts.map +1 -1
  933. package/dist/procedural-items/recipe.js +933 -61
  934. package/dist/procedural-items/section.d.ts +27 -0
  935. package/dist/procedural-items/section.d.ts.map +1 -0
  936. package/dist/procedural-items/section.js +237 -0
  937. package/dist/procedural-items/spatial.d.ts +21 -0
  938. package/dist/procedural-items/spatial.d.ts.map +1 -1
  939. package/dist/procedural-items/spatial.js +90 -0
  940. package/dist/registry/handles.d.ts +2 -0
  941. package/dist/registry/handles.d.ts.map +1 -1
  942. package/dist/registry/index.d.ts +6 -4
  943. package/dist/registry/index.d.ts.map +1 -1
  944. package/dist/registry/index.js +4 -2
  945. package/dist/registry/mechanism.d.ts +9 -0
  946. package/dist/registry/mechanism.d.ts.map +1 -0
  947. package/dist/registry/mechanism.js +21 -0
  948. package/dist/registry/registry.d.ts +6 -3
  949. package/dist/registry/registry.d.ts.map +1 -1
  950. package/dist/registry/registry.js +59 -22
  951. package/dist/registry/scene-api.d.ts +21 -0
  952. package/dist/registry/scene-api.d.ts.map +1 -1
  953. package/dist/registry/scene-api.js +29 -13
  954. package/dist/registry/subtree.d.ts +8 -0
  955. package/dist/registry/subtree.d.ts.map +1 -1
  956. package/dist/registry/subtree.js +55 -0
  957. package/dist/registry/types.d.ts +460 -12
  958. package/dist/registry/types.d.ts.map +1 -1
  959. package/dist/schema/__fixtures__/node-fixtures.d.ts.map +1 -1
  960. package/dist/schema/__fixtures__/node-fixtures.js +2 -0
  961. package/dist/schema/assembly.d.ts +153 -0
  962. package/dist/schema/assembly.d.ts.map +1 -0
  963. package/dist/schema/assembly.js +155 -0
  964. package/dist/schema/asset-url.d.ts +2 -1
  965. package/dist/schema/asset-url.d.ts.map +1 -1
  966. package/dist/schema/asset-url.js +5 -2
  967. package/dist/schema/base.d.ts +28 -2
  968. package/dist/schema/base.d.ts.map +1 -1
  969. package/dist/schema/base.js +2 -0
  970. package/dist/schema/camera.d.ts +1 -1
  971. package/dist/schema/collection-templates.d.ts +46 -0
  972. package/dist/schema/collection-templates.d.ts.map +1 -0
  973. package/dist/schema/collection-templates.js +14 -0
  974. package/dist/schema/collections.d.ts +7 -0
  975. package/dist/schema/collections.d.ts.map +1 -1
  976. package/dist/schema/cut.d.ts +29 -0
  977. package/dist/schema/cut.d.ts.map +1 -0
  978. package/dist/schema/cut.js +50 -0
  979. package/dist/schema/geometry-metadata.d.ts +51 -0
  980. package/dist/schema/geometry-metadata.d.ts.map +1 -0
  981. package/dist/schema/geometry-metadata.js +57 -0
  982. package/dist/schema/geometry-source.d.ts +260 -0
  983. package/dist/schema/geometry-source.d.ts.map +1 -0
  984. package/dist/schema/geometry-source.js +144 -0
  985. package/dist/schema/index.d.ts +27 -12
  986. package/dist/schema/index.d.ts.map +1 -1
  987. package/dist/schema/index.js +29 -10
  988. package/dist/schema/material.d.ts +33 -33
  989. package/dist/schema/nodes/barrel-roof.d.ts +3 -0
  990. package/dist/schema/nodes/barrel-roof.d.ts.map +1 -0
  991. package/dist/schema/nodes/barrel-roof.js +11 -0
  992. package/dist/schema/nodes/block.d.ts +27 -1
  993. package/dist/schema/nodes/block.d.ts.map +1 -1
  994. package/dist/schema/nodes/block.js +1 -1
  995. package/dist/schema/nodes/box-vent.d.ts +32 -6
  996. package/dist/schema/nodes/box-vent.d.ts.map +1 -1
  997. package/dist/schema/nodes/building.d.ts +28 -1
  998. package/dist/schema/nodes/building.d.ts.map +1 -1
  999. package/dist/schema/nodes/building.js +2 -0
  1000. package/dist/schema/nodes/cabinet.d.ts +167 -114
  1001. package/dist/schema/nodes/cabinet.d.ts.map +1 -1
  1002. package/dist/schema/nodes/cabinet.js +1 -1
  1003. package/dist/schema/nodes/ceiling.d.ts +44 -7
  1004. package/dist/schema/nodes/ceiling.d.ts.map +1 -1
  1005. package/dist/schema/nodes/ceiling.js +8 -0
  1006. package/dist/schema/nodes/chimney.d.ts +42 -16
  1007. package/dist/schema/nodes/chimney.d.ts.map +1 -1
  1008. package/dist/schema/nodes/column.d.ts +321 -187
  1009. package/dist/schema/nodes/column.d.ts.map +1 -1
  1010. package/dist/schema/nodes/column.js +4 -0
  1011. package/dist/schema/nodes/construction-dimension.d.ts +53 -27
  1012. package/dist/schema/nodes/construction-dimension.d.ts.map +1 -1
  1013. package/dist/schema/nodes/cupola.d.ts +34 -8
  1014. package/dist/schema/nodes/cupola.d.ts.map +1 -1
  1015. package/dist/schema/nodes/curtain-wall.d.ts +21 -20
  1016. package/dist/schema/nodes/curtain-wall.d.ts.map +1 -1
  1017. package/dist/schema/nodes/curtain-wall.js +23 -0
  1018. package/dist/schema/nodes/door.d.ts +170 -44
  1019. package/dist/schema/nodes/door.d.ts.map +1 -1
  1020. package/dist/schema/nodes/door.js +37 -33
  1021. package/dist/schema/nodes/dormer.d.ts +56 -29
  1022. package/dist/schema/nodes/dormer.d.ts.map +1 -1
  1023. package/dist/schema/nodes/downspout.d.ts +36 -10
  1024. package/dist/schema/nodes/downspout.d.ts.map +1 -1
  1025. package/dist/schema/nodes/duct-fitting.d.ts +44 -18
  1026. package/dist/schema/nodes/duct-fitting.d.ts.map +1 -1
  1027. package/dist/schema/nodes/duct-segment.d.ts +34 -8
  1028. package/dist/schema/nodes/duct-segment.d.ts.map +1 -1
  1029. package/dist/schema/nodes/duct-terminal.d.ts +31 -5
  1030. package/dist/schema/nodes/duct-terminal.d.ts.map +1 -1
  1031. package/dist/schema/nodes/elevator.d.ts +34 -8
  1032. package/dist/schema/nodes/elevator.d.ts.map +1 -1
  1033. package/dist/schema/nodes/eyebrow-vent.d.ts +32 -6
  1034. package/dist/schema/nodes/eyebrow-vent.d.ts.map +1 -1
  1035. package/dist/schema/nodes/fence-feature.d.ts +141 -0
  1036. package/dist/schema/nodes/fence-feature.d.ts.map +1 -0
  1037. package/dist/schema/nodes/fence-feature.js +21 -0
  1038. package/dist/schema/nodes/fence-types.d.ts +32 -0
  1039. package/dist/schema/nodes/fence-types.d.ts.map +1 -0
  1040. package/dist/schema/nodes/fence-types.js +22 -0
  1041. package/dist/schema/nodes/fence.d.ts +175 -18
  1042. package/dist/schema/nodes/fence.d.ts.map +1 -1
  1043. package/dist/schema/nodes/fence.js +76 -7
  1044. package/dist/schema/nodes/floor-opening.d.ts +61 -0
  1045. package/dist/schema/nodes/floor-opening.d.ts.map +1 -0
  1046. package/dist/schema/nodes/floor-opening.js +17 -0
  1047. package/dist/schema/nodes/guide.d.ts +27 -1
  1048. package/dist/schema/nodes/guide.d.ts.map +1 -1
  1049. package/dist/schema/nodes/gutter.d.ts +33 -7
  1050. package/dist/schema/nodes/gutter.d.ts.map +1 -1
  1051. package/dist/schema/nodes/gutter.js +6 -5
  1052. package/dist/schema/nodes/hvac-equipment.d.ts +32 -6
  1053. package/dist/schema/nodes/hvac-equipment.d.ts.map +1 -1
  1054. package/dist/schema/nodes/imported-mesh.d.ts +27 -1
  1055. package/dist/schema/nodes/imported-mesh.d.ts.map +1 -1
  1056. package/dist/schema/nodes/item.d.ts +169 -13
  1057. package/dist/schema/nodes/item.d.ts.map +1 -1
  1058. package/dist/schema/nodes/item.js +13 -0
  1059. package/dist/schema/nodes/lean-to-extension.d.ts +55 -29
  1060. package/dist/schema/nodes/lean-to-extension.d.ts.map +1 -1
  1061. package/dist/schema/nodes/level.d.ts +28 -2
  1062. package/dist/schema/nodes/level.d.ts.map +1 -1
  1063. package/dist/schema/nodes/lineset.d.ts +27 -1
  1064. package/dist/schema/nodes/lineset.d.ts.map +1 -1
  1065. package/dist/schema/nodes/liquid-line.d.ts +27 -1
  1066. package/dist/schema/nodes/liquid-line.d.ts.map +1 -1
  1067. package/dist/schema/nodes/measurement.d.ts +27 -1
  1068. package/dist/schema/nodes/measurement.d.ts.map +1 -1
  1069. package/dist/schema/nodes/opening-types.d.ts +41 -0
  1070. package/dist/schema/nodes/opening-types.d.ts.map +1 -0
  1071. package/dist/schema/nodes/opening-types.js +48 -0
  1072. package/dist/schema/nodes/pipe-fitting.d.ts +34 -8
  1073. package/dist/schema/nodes/pipe-fitting.d.ts.map +1 -1
  1074. package/dist/schema/nodes/pipe-segment.d.ts +30 -4
  1075. package/dist/schema/nodes/pipe-segment.d.ts.map +1 -1
  1076. package/dist/schema/nodes/pipe-trap.d.ts +28 -2
  1077. package/dist/schema/nodes/pipe-trap.d.ts.map +1 -1
  1078. package/dist/schema/nodes/ridge-vent.d.ts +33 -7
  1079. package/dist/schema/nodes/ridge-vent.d.ts.map +1 -1
  1080. package/dist/schema/nodes/ridge-vent.js +3 -1
  1081. package/dist/schema/nodes/roof-glazing-config.d.ts +90 -0
  1082. package/dist/schema/nodes/roof-glazing-config.d.ts.map +1 -0
  1083. package/dist/schema/nodes/roof-glazing-config.js +34 -0
  1084. package/dist/schema/nodes/roof-glazing.d.ts +57 -0
  1085. package/dist/schema/nodes/roof-glazing.d.ts.map +1 -0
  1086. package/dist/schema/nodes/roof-glazing.js +514 -0
  1087. package/dist/schema/nodes/roof-segment-resize.d.ts +4 -0
  1088. package/dist/schema/nodes/roof-segment-resize.d.ts.map +1 -0
  1089. package/dist/schema/nodes/roof-segment-resize.js +21 -0
  1090. package/dist/schema/nodes/roof-segment-shape.d.ts +5 -0
  1091. package/dist/schema/nodes/roof-segment-shape.d.ts.map +1 -1
  1092. package/dist/schema/nodes/roof-segment-shape.js +44 -0
  1093. package/dist/schema/nodes/roof-segment-walls.d.ts +1 -1
  1094. package/dist/schema/nodes/roof-segment-walls.d.ts.map +1 -1
  1095. package/dist/schema/nodes/roof-segment-walls.js +26 -1
  1096. package/dist/schema/nodes/roof-segment.d.ts +175 -40
  1097. package/dist/schema/nodes/roof-segment.d.ts.map +1 -1
  1098. package/dist/schema/nodes/roof-segment.js +100 -20
  1099. package/dist/schema/nodes/roof-types.d.ts +14 -0
  1100. package/dist/schema/nodes/roof-types.d.ts.map +1 -0
  1101. package/dist/schema/nodes/roof-types.js +14 -0
  1102. package/dist/schema/nodes/roof.d.ts +122 -21
  1103. package/dist/schema/nodes/roof.d.ts.map +1 -1
  1104. package/dist/schema/nodes/roof.js +6 -0
  1105. package/dist/schema/nodes/scan.d.ts +27 -1
  1106. package/dist/schema/nodes/scan.d.ts.map +1 -1
  1107. package/dist/schema/nodes/separator.d.ts +50 -0
  1108. package/dist/schema/nodes/separator.d.ts.map +1 -0
  1109. package/dist/schema/nodes/separator.js +8 -0
  1110. package/dist/schema/nodes/shelf.d.ts +35 -9
  1111. package/dist/schema/nodes/shelf.d.ts.map +1 -1
  1112. package/dist/schema/nodes/site-facts.d.ts +64 -0
  1113. package/dist/schema/nodes/site-facts.d.ts.map +1 -0
  1114. package/dist/schema/nodes/site-facts.js +73 -0
  1115. package/dist/schema/nodes/site.d.ts +235 -1
  1116. package/dist/schema/nodes/site.d.ts.map +1 -1
  1117. package/dist/schema/nodes/site.js +115 -1
  1118. package/dist/schema/nodes/skylight.d.ts +64 -38
  1119. package/dist/schema/nodes/skylight.d.ts.map +1 -1
  1120. package/dist/schema/nodes/slab.d.ts +91 -7
  1121. package/dist/schema/nodes/slab.d.ts.map +1 -1
  1122. package/dist/schema/nodes/slab.js +37 -2
  1123. package/dist/schema/nodes/solar-panel.d.ts +40 -14
  1124. package/dist/schema/nodes/solar-panel.d.ts.map +1 -1
  1125. package/dist/schema/nodes/spawn.d.ts +27 -1
  1126. package/dist/schema/nodes/spawn.d.ts.map +1 -1
  1127. package/dist/schema/nodes/stair-construction.d.ts +21 -0
  1128. package/dist/schema/nodes/stair-construction.d.ts.map +1 -0
  1129. package/dist/schema/nodes/stair-construction.js +13 -0
  1130. package/dist/schema/nodes/stair-defaults.d.ts +16 -0
  1131. package/dist/schema/nodes/stair-defaults.d.ts.map +1 -0
  1132. package/dist/schema/nodes/stair-defaults.js +15 -0
  1133. package/dist/schema/nodes/stair-design-targets.d.ts +9 -0
  1134. package/dist/schema/nodes/stair-design-targets.d.ts.map +1 -0
  1135. package/dist/schema/nodes/stair-design-targets.js +7 -0
  1136. package/dist/schema/nodes/stair-segment.d.ts +78 -10
  1137. package/dist/schema/nodes/stair-segment.d.ts.map +1 -1
  1138. package/dist/schema/nodes/stair-segment.js +13 -0
  1139. package/dist/schema/nodes/stair-types.d.ts +29 -0
  1140. package/dist/schema/nodes/stair-types.d.ts.map +1 -0
  1141. package/dist/schema/nodes/stair-types.js +23 -0
  1142. package/dist/schema/nodes/stair.d.ts +131 -38
  1143. package/dist/schema/nodes/stair.d.ts.map +1 -1
  1144. package/dist/schema/nodes/stair.js +46 -3
  1145. package/dist/schema/nodes/structural-grid.d.ts +27 -1
  1146. package/dist/schema/nodes/structural-grid.d.ts.map +1 -1
  1147. package/dist/schema/nodes/surface-hole-metadata.d.ts +4 -1
  1148. package/dist/schema/nodes/surface-hole-metadata.d.ts.map +1 -1
  1149. package/dist/schema/nodes/surface-hole-metadata.js +2 -1
  1150. package/dist/schema/nodes/surface-paint-region.d.ts +14 -0
  1151. package/dist/schema/nodes/surface-paint-region.d.ts.map +1 -0
  1152. package/dist/schema/nodes/surface-paint-region.js +12 -0
  1153. package/dist/schema/nodes/turbine-vent.d.ts +32 -6
  1154. package/dist/schema/nodes/turbine-vent.d.ts.map +1 -1
  1155. package/dist/schema/nodes/unit.d.ts +29 -3
  1156. package/dist/schema/nodes/unit.d.ts.map +1 -1
  1157. package/dist/schema/nodes/wall.d.ts +771 -147
  1158. package/dist/schema/nodes/wall.d.ts.map +1 -1
  1159. package/dist/schema/nodes/wall.js +204 -186
  1160. package/dist/schema/nodes/window.d.ts +173 -38
  1161. package/dist/schema/nodes/window.d.ts.map +1 -1
  1162. package/dist/schema/nodes/window.js +22 -14
  1163. package/dist/schema/nodes/zone.d.ts +291 -4
  1164. package/dist/schema/nodes/zone.d.ts.map +1 -1
  1165. package/dist/schema/nodes/zone.js +56 -0
  1166. package/dist/schema/provenance.d.ts +118 -0
  1167. package/dist/schema/provenance.d.ts.map +1 -0
  1168. package/dist/schema/provenance.js +76 -0
  1169. package/dist/schema/scene-material.d.ts +5 -5
  1170. package/dist/schema/site-presentation.d.ts +100 -0
  1171. package/dist/schema/site-presentation.d.ts.map +1 -0
  1172. package/dist/schema/site-presentation.js +83 -0
  1173. package/dist/schema/source-ref.d.ts +23 -0
  1174. package/dist/schema/source-ref.d.ts.map +1 -0
  1175. package/dist/schema/source-ref.js +29 -0
  1176. package/dist/schema/types.d.ts +4442 -653
  1177. package/dist/schema/types.d.ts.map +1 -1
  1178. package/dist/schema/types.js +7 -0
  1179. package/dist/services/__fixtures__/wall-plane-top-boundary-repro.d.ts.map +1 -1
  1180. package/dist/services/alignment-anchors.d.ts +2 -1
  1181. package/dist/services/alignment-anchors.d.ts.map +1 -1
  1182. package/dist/services/alignment-anchors.js +9 -6
  1183. package/dist/services/index.d.ts +5 -1
  1184. package/dist/services/index.d.ts.map +1 -1
  1185. package/dist/services/index.js +5 -1
  1186. package/dist/services/level-height.d.ts.map +1 -1
  1187. package/dist/services/level-height.js +10 -4
  1188. package/dist/services/port-connectivity.d.ts +4 -0
  1189. package/dist/services/port-connectivity.d.ts.map +1 -1
  1190. package/dist/services/port-connectivity.js +35 -0
  1191. package/dist/services/project-file-sink.d.ts +9 -0
  1192. package/dist/services/project-file-sink.d.ts.map +1 -0
  1193. package/dist/services/project-file-sink.js +13 -0
  1194. package/dist/services/roof-bearing.d.ts +62 -0
  1195. package/dist/services/roof-bearing.d.ts.map +1 -0
  1196. package/dist/services/roof-bearing.js +234 -0
  1197. package/dist/services/roof-level.d.ts +121 -0
  1198. package/dist/services/roof-level.d.ts.map +1 -0
  1199. package/dist/services/roof-level.js +280 -0
  1200. package/dist/services/roof-move.d.ts +83 -0
  1201. package/dist/services/roof-move.d.ts.map +1 -0
  1202. package/dist/services/roof-move.js +316 -0
  1203. package/dist/services/stair-surface-snap.d.ts +14 -0
  1204. package/dist/services/stair-surface-snap.d.ts.map +1 -0
  1205. package/dist/services/stair-surface-snap.js +116 -0
  1206. package/dist/services/storey-datum.d.ts +12 -0
  1207. package/dist/services/storey-datum.d.ts.map +1 -0
  1208. package/dist/services/storey-datum.js +18 -0
  1209. package/dist/services/storey.d.ts +72 -6
  1210. package/dist/services/storey.d.ts.map +1 -1
  1211. package/dist/services/storey.js +215 -12
  1212. package/dist/services/surface-hosting.d.ts.map +1 -1
  1213. package/dist/services/surface-hosting.js +4 -1
  1214. package/dist/solar-panel-presets.d.ts +2 -2
  1215. package/dist/store/actions/node-actions.d.ts +4994 -8
  1216. package/dist/store/actions/node-actions.d.ts.map +1 -1
  1217. package/dist/store/actions/node-actions.js +541 -175
  1218. package/dist/store/derived-node-guard.d.ts +84 -0
  1219. package/dist/store/derived-node-guard.d.ts.map +1 -0
  1220. package/dist/store/derived-node-guard.js +586 -0
  1221. package/dist/store/history-control.d.ts +73 -0
  1222. package/dist/store/history-control.d.ts.map +1 -1
  1223. package/dist/store/history-control.js +183 -5
  1224. package/dist/store/history-drafts.d.ts +48 -0
  1225. package/dist/store/history-drafts.d.ts.map +1 -0
  1226. package/dist/store/history-drafts.js +403 -0
  1227. package/dist/store/history-invalidation.d.ts.map +1 -1
  1228. package/dist/store/history-invalidation.js +1 -0
  1229. package/dist/store/item-interaction.d.ts +28 -0
  1230. package/dist/store/item-interaction.d.ts.map +1 -0
  1231. package/dist/store/item-interaction.js +34 -0
  1232. package/dist/store/registered-node-defaults.d.ts +11 -0
  1233. package/dist/store/registered-node-defaults.d.ts.map +1 -0
  1234. package/dist/store/registered-node-defaults.js +25 -0
  1235. package/dist/store/scene-annotations.d.ts +9827 -0
  1236. package/dist/store/scene-annotations.d.ts.map +1 -0
  1237. package/dist/store/scene-annotations.js +107 -0
  1238. package/dist/store/scene-preview.d.ts +16 -0
  1239. package/dist/store/scene-preview.d.ts.map +1 -0
  1240. package/dist/store/scene-preview.js +144 -0
  1241. package/dist/store/use-interactive.d.ts +23 -1
  1242. package/dist/store/use-interactive.d.ts.map +1 -1
  1243. package/dist/store/use-interactive.js +128 -5
  1244. package/dist/store/use-live-node-overrides.d.ts.map +1 -1
  1245. package/dist/store/use-live-terrain.d.ts.map +1 -1
  1246. package/dist/store/use-live-transforms.d.ts.map +1 -1
  1247. package/dist/store/use-scene.d.ts +68 -12
  1248. package/dist/store/use-scene.d.ts.map +1 -1
  1249. package/dist/store/use-scene.js +452 -308
  1250. package/dist/systems/elevator/elevator-dispatch.js +1 -1
  1251. package/dist/systems/elevator/elevator-opening-sync.d.ts.map +1 -1
  1252. package/dist/systems/elevator/elevator-opening-sync.js +4 -6
  1253. package/dist/systems/elevator/elevator-opening-system.d.ts.map +1 -1
  1254. package/dist/systems/elevator/elevator-opening-system.js +12 -6
  1255. package/dist/systems/elevator/elevator-service.d.ts.map +1 -1
  1256. package/dist/systems/elevator/elevator-service.js +8 -3
  1257. package/dist/systems/fence/fence-centerline.d.ts.map +1 -1
  1258. package/dist/systems/fence/fence-centerline.js +6 -5
  1259. package/dist/systems/fence/fence-features.d.ts +36 -0
  1260. package/dist/systems/fence/fence-features.d.ts.map +1 -0
  1261. package/dist/systems/fence/fence-features.js +105 -0
  1262. package/dist/systems/fence/fence-spline.d.ts +8 -5
  1263. package/dist/systems/fence/fence-spline.d.ts.map +1 -1
  1264. package/dist/systems/fence/fence-spline.js +51 -16
  1265. package/dist/systems/owned-floor-openings.d.ts +9 -0
  1266. package/dist/systems/owned-floor-openings.d.ts.map +1 -0
  1267. package/dist/systems/owned-floor-openings.js +347 -0
  1268. package/dist/systems/reconcile-owned-floor-openings.d.ts +3 -0
  1269. package/dist/systems/reconcile-owned-floor-openings.d.ts.map +1 -0
  1270. package/dist/systems/reconcile-owned-floor-openings.js +25 -0
  1271. package/dist/systems/roof/roof-elevation-system.d.ts.map +1 -1
  1272. package/dist/systems/roof/roof-elevation-system.js +9 -3
  1273. package/dist/systems/roof/roof-elevation.d.ts +5 -0
  1274. package/dist/systems/roof/roof-elevation.d.ts.map +1 -1
  1275. package/dist/systems/roof/roof-elevation.js +91 -62
  1276. package/dist/systems/slab/__fixtures__/doorway-steps.d.ts +8 -0
  1277. package/dist/systems/slab/__fixtures__/doorway-steps.d.ts.map +1 -0
  1278. package/dist/systems/slab/__fixtures__/doorway-steps.js +62 -0
  1279. package/dist/systems/slab/__fixtures__/floor-step.d.ts +6743 -0
  1280. package/dist/systems/slab/__fixtures__/floor-step.d.ts.map +1 -0
  1281. package/dist/systems/slab/__fixtures__/floor-step.js +66 -0
  1282. package/dist/systems/slab/__fixtures__/raised-room.d.ts +6848 -0
  1283. package/dist/systems/slab/__fixtures__/raised-room.d.ts.map +1 -0
  1284. package/dist/systems/slab/__fixtures__/raised-room.js +54 -0
  1285. package/dist/systems/slab/ensure-slab-openings.d.ts +9 -0
  1286. package/dist/systems/slab/ensure-slab-openings.d.ts.map +1 -0
  1287. package/dist/systems/slab/ensure-slab-openings.js +41 -0
  1288. package/dist/systems/slab/slab-support.d.ts +30 -8
  1289. package/dist/systems/slab/slab-support.d.ts.map +1 -1
  1290. package/dist/systems/slab/slab-support.js +547 -62
  1291. package/dist/systems/stair/stair-base-elevation.d.ts +3 -0
  1292. package/dist/systems/stair/stair-base-elevation.d.ts.map +1 -0
  1293. package/dist/systems/stair/stair-base-elevation.js +49 -0
  1294. package/dist/systems/stair/stair-clearance.d.ts +39 -0
  1295. package/dist/systems/stair/stair-clearance.d.ts.map +1 -0
  1296. package/dist/systems/stair/stair-clearance.js +508 -0
  1297. package/dist/systems/stair/stair-construction.d.ts +37 -0
  1298. package/dist/systems/stair/stair-construction.d.ts.map +1 -0
  1299. package/dist/systems/stair/stair-construction.js +314 -0
  1300. package/dist/systems/stair/stair-detail-budget.d.ts +13 -0
  1301. package/dist/systems/stair/stair-detail-budget.d.ts.map +1 -0
  1302. package/dist/systems/stair/stair-detail-budget.js +64 -0
  1303. package/dist/systems/stair/stair-flight.d.ts +2 -2
  1304. package/dist/systems/stair/stair-flight.d.ts.map +1 -1
  1305. package/dist/systems/stair/stair-flight.js +4 -3
  1306. package/dist/systems/stair/stair-floor-footprints.d.ts +7 -0
  1307. package/dist/systems/stair/stair-floor-footprints.d.ts.map +1 -0
  1308. package/dist/systems/stair/stair-floor-footprints.js +113 -0
  1309. package/dist/systems/stair/stair-footprint.d.ts +9 -1
  1310. package/dist/systems/stair/stair-footprint.d.ts.map +1 -1
  1311. package/dist/systems/stair/stair-footprint.js +123 -57
  1312. package/dist/systems/stair/stair-layout.d.ts +39 -0
  1313. package/dist/systems/stair/stair-layout.d.ts.map +1 -0
  1314. package/dist/systems/stair/stair-layout.js +58 -0
  1315. package/dist/systems/stair/stair-opening-preview.d.ts +4022 -2061
  1316. package/dist/systems/stair/stair-opening-preview.d.ts.map +1 -1
  1317. package/dist/systems/stair/stair-opening-sync.d.ts +8 -2
  1318. package/dist/systems/stair/stair-opening-sync.d.ts.map +1 -1
  1319. package/dist/systems/stair/stair-opening-sync.js +136 -315
  1320. package/dist/systems/stair/stair-opening-system.d.ts.map +1 -1
  1321. package/dist/systems/stair/stair-opening-system.js +40 -8
  1322. package/dist/systems/stair/stair-presets.d.ts +284 -0
  1323. package/dist/systems/stair/stair-presets.d.ts.map +1 -0
  1324. package/dist/systems/stair/stair-presets.js +158 -0
  1325. package/dist/systems/stair/stair-rail-budget.d.ts +6 -0
  1326. package/dist/systems/stair/stair-rail-budget.d.ts.map +1 -0
  1327. package/dist/systems/stair/stair-rail-budget.js +36 -0
  1328. package/dist/systems/stair/stair-rail-path.d.ts +22 -0
  1329. package/dist/systems/stair/stair-rail-path.d.ts.map +1 -0
  1330. package/dist/systems/stair/stair-rail-path.js +497 -0
  1331. package/dist/systems/stair/stair-rise-edit.d.ts +9 -0
  1332. package/dist/systems/stair/stair-rise-edit.d.ts.map +1 -0
  1333. package/dist/systems/stair/stair-rise-edit.js +46 -0
  1334. package/dist/systems/stair/stair-rise-query.d.ts +40 -0
  1335. package/dist/systems/stair/stair-rise-query.d.ts.map +1 -0
  1336. package/dist/systems/stair/stair-rise-query.js +175 -0
  1337. package/dist/systems/stair/stair-rise.d.ts +4 -19
  1338. package/dist/systems/stair/stair-rise.d.ts.map +1 -1
  1339. package/dist/systems/stair/stair-rise.js +8 -71
  1340. package/dist/systems/stair/stair-sizing.d.ts +416 -0
  1341. package/dist/systems/stair/stair-sizing.d.ts.map +1 -0
  1342. package/dist/systems/stair/stair-sizing.js +255 -0
  1343. package/dist/systems/stair/stair-sweep-edit.d.ts +7 -0
  1344. package/dist/systems/stair/stair-sweep-edit.d.ts.map +1 -0
  1345. package/dist/systems/stair/stair-sweep-edit.js +8 -0
  1346. package/dist/systems/stair/stair-walking-line.d.ts +5 -0
  1347. package/dist/systems/stair/stair-walking-line.d.ts.map +1 -0
  1348. package/dist/systems/stair/stair-walking-line.js +91 -0
  1349. package/dist/systems/stair/stair-winder.d.ts +36 -0
  1350. package/dist/systems/stair/stair-winder.d.ts.map +1 -0
  1351. package/dist/systems/stair/stair-winder.js +173 -0
  1352. package/dist/systems/wall/wall-assembly.d.ts +245 -0
  1353. package/dist/systems/wall/wall-assembly.d.ts.map +1 -0
  1354. package/dist/systems/wall/wall-assembly.js +875 -0
  1355. package/dist/systems/wall/wall-curve.d.ts +7 -1
  1356. package/dist/systems/wall/wall-curve.d.ts.map +1 -1
  1357. package/dist/systems/wall/wall-curve.js +34 -5
  1358. package/dist/systems/wall/wall-finish.d.ts +102 -0
  1359. package/dist/systems/wall/wall-finish.d.ts.map +1 -0
  1360. package/dist/systems/wall/wall-finish.js +264 -0
  1361. package/dist/systems/wall/wall-footprint.d.ts +3 -0
  1362. package/dist/systems/wall/wall-footprint.d.ts.map +1 -1
  1363. package/dist/systems/wall/wall-footprint.js +15 -13
  1364. package/dist/systems/wall/wall-frame.d.ts +45 -0
  1365. package/dist/systems/wall/wall-frame.d.ts.map +1 -0
  1366. package/dist/systems/wall/wall-frame.js +170 -0
  1367. package/dist/systems/wall/wall-layer-bands.d.ts +38 -0
  1368. package/dist/systems/wall/wall-layer-bands.d.ts.map +1 -0
  1369. package/dist/systems/wall/wall-layer-bands.js +109 -0
  1370. package/dist/systems/wall/wall-merge.d.ts +20 -1
  1371. package/dist/systems/wall/wall-merge.d.ts.map +1 -1
  1372. package/dist/systems/wall/wall-merge.js +189 -18
  1373. package/dist/systems/wall/wall-mitering.d.ts +6 -5
  1374. package/dist/systems/wall/wall-mitering.d.ts.map +1 -1
  1375. package/dist/systems/wall/wall-mitering.js +70 -20
  1376. package/dist/systems/wall/wall-operations.d.ts +1 -1
  1377. package/dist/systems/wall/wall-operations.d.ts.map +1 -1
  1378. package/dist/systems/wall/wall-operations.js +2 -1
  1379. package/dist/systems/wall/wall-paint-plan.d.ts +30 -0
  1380. package/dist/systems/wall/wall-paint-plan.d.ts.map +1 -0
  1381. package/dist/systems/wall/wall-paint-plan.js +167 -0
  1382. package/dist/systems/wall/wall-room-sides.d.ts +14 -0
  1383. package/dist/systems/wall/wall-room-sides.d.ts.map +1 -0
  1384. package/dist/systems/wall/wall-room-sides.js +67 -0
  1385. package/dist/systems/wall/wall-step-openings.d.ts +17 -0
  1386. package/dist/systems/wall/wall-step-openings.d.ts.map +1 -0
  1387. package/dist/systems/wall/wall-step-openings.js +32 -0
  1388. package/dist/systems/wall/wall-top.d.ts +7 -8
  1389. package/dist/systems/wall/wall-top.d.ts.map +1 -1
  1390. package/dist/systems/wall/wall-top.js +15 -13
  1391. package/dist/systems/wall/wall-topology.d.ts +25 -0
  1392. package/dist/systems/wall/wall-topology.d.ts.map +1 -1
  1393. package/dist/systems/wall/wall-topology.js +408 -5
  1394. package/dist/systems/wall/wall-trim.d.ts +7 -0
  1395. package/dist/systems/wall/wall-trim.d.ts.map +1 -0
  1396. package/dist/systems/wall/wall-trim.js +10 -0
  1397. package/dist/utils/clone-scene-graph.d.ts +6 -0
  1398. package/dist/utils/clone-scene-graph.d.ts.map +1 -1
  1399. package/dist/utils/clone-scene-graph.js +131 -15
  1400. package/dist/utils/ensure-scene-openings.d.ts +9823 -0
  1401. package/dist/utils/ensure-scene-openings.d.ts.map +1 -0
  1402. package/dist/utils/ensure-scene-openings.js +29 -0
  1403. package/dist/utils/exterior-threshold-migration.d.ts +4 -0
  1404. package/dist/utils/exterior-threshold-migration.d.ts.map +1 -0
  1405. package/dist/utils/exterior-threshold-migration.js +114 -0
  1406. package/dist/utils/floor-follow-migration.d.ts +3 -0
  1407. package/dist/utils/floor-follow-migration.d.ts.map +1 -0
  1408. package/dist/utils/floor-follow-migration.js +29 -0
  1409. package/dist/utils/floor-opening-migration.d.ts +13 -0
  1410. package/dist/utils/floor-opening-migration.d.ts.map +1 -0
  1411. package/dist/utils/floor-opening-migration.js +148 -0
  1412. package/dist/utils/floor-piece-adoption.d.ts +50 -0
  1413. package/dist/utils/floor-piece-adoption.d.ts.map +1 -0
  1414. package/dist/utils/floor-piece-adoption.js +182 -0
  1415. package/dist/utils/floor-plate-migration.d.ts +4936 -0
  1416. package/dist/utils/floor-plate-migration.d.ts.map +1 -0
  1417. package/dist/utils/floor-plate-migration.js +1360 -0
  1418. package/dist/utils/heal-plan-coordinates.d.ts +2 -0
  1419. package/dist/utils/heal-plan-coordinates.d.ts.map +1 -0
  1420. package/dist/utils/heal-plan-coordinates.js +69 -0
  1421. package/dist/utils/heal-scene-graph.d.ts +32 -6
  1422. package/dist/utils/heal-scene-graph.d.ts.map +1 -1
  1423. package/dist/utils/heal-scene-graph.js +78 -16
  1424. package/dist/utils/legacy-material-slots.d.ts +23 -0
  1425. package/dist/utils/legacy-material-slots.d.ts.map +1 -0
  1426. package/dist/utils/legacy-material-slots.js +120 -0
  1427. package/dist/utils/legacy-opening-datums.d.ts +11 -0
  1428. package/dist/utils/legacy-opening-datums.d.ts.map +1 -0
  1429. package/dist/utils/legacy-opening-datums.js +92 -0
  1430. package/dist/utils/legacy-wall-datums.d.ts +6 -0
  1431. package/dist/utils/legacy-wall-datums.d.ts.map +1 -0
  1432. package/dist/utils/legacy-wall-datums.js +199 -0
  1433. package/dist/utils/load-migration.d.ts +28 -0
  1434. package/dist/utils/load-migration.d.ts.map +1 -0
  1435. package/dist/utils/load-migration.js +89 -0
  1436. package/dist/utils/node-defaults.d.ts +37 -0
  1437. package/dist/utils/node-defaults.d.ts.map +1 -0
  1438. package/dist/utils/node-defaults.js +96 -0
  1439. package/dist/utils/normalize-legacy-structure.d.ts +2 -0
  1440. package/dist/utils/normalize-legacy-structure.d.ts.map +1 -0
  1441. package/dist/utils/normalize-legacy-structure.js +61 -0
  1442. package/dist/utils/omit-undefined.d.ts +2 -0
  1443. package/dist/utils/omit-undefined.d.ts.map +1 -0
  1444. package/dist/utils/omit-undefined.js +17 -0
  1445. package/dist/utils/owned-floor-opening-migration.d.ts +4918 -0
  1446. package/dist/utils/owned-floor-opening-migration.d.ts.map +1 -0
  1447. package/dist/utils/owned-floor-opening-migration.js +365 -0
  1448. package/dist/utils/reconcile-structure-on-load.d.ts +4918 -0
  1449. package/dist/utils/reconcile-structure-on-load.d.ts.map +1 -0
  1450. package/dist/utils/reconcile-structure-on-load.js +307 -0
  1451. package/dist/utils/room-zone-migration.d.ts +18 -0
  1452. package/dist/utils/room-zone-migration.d.ts.map +1 -0
  1453. package/dist/utils/room-zone-migration.js +258 -0
  1454. package/dist/utils/scene-migrations.d.ts +16 -1
  1455. package/dist/utils/scene-migrations.d.ts.map +1 -1
  1456. package/dist/utils/scene-migrations.js +15 -1
  1457. package/dist/utils/semantic-equal.d.ts +3 -0
  1458. package/dist/utils/semantic-equal.d.ts.map +1 -0
  1459. package/dist/utils/semantic-equal.js +26 -0
  1460. package/dist/utils/structure-id.d.ts +4 -0
  1461. package/dist/utils/structure-id.d.ts.map +1 -0
  1462. package/dist/utils/structure-id.js +115 -0
  1463. package/dist/utils/types.d.ts.map +1 -1
  1464. package/dist/utils/vertical-scene-migration.d.ts +8 -8
  1465. package/dist/utils/vertical-scene-migration.d.ts.map +1 -1
  1466. package/dist/utils/vertical-scene-migration.js +18 -8
  1467. package/dist/utils/wall-assembly-migration.d.ts +14 -0
  1468. package/dist/utils/wall-assembly-migration.d.ts.map +1 -0
  1469. package/dist/utils/wall-assembly-migration.js +23 -0
  1470. package/dist/utils/wall-face-migration.d.ts +23 -0
  1471. package/dist/utils/wall-face-migration.d.ts.map +1 -0
  1472. package/dist/utils/wall-face-migration.js +246 -0
  1473. package/dist/validation/opening-bounds.d.ts +36 -0
  1474. package/dist/validation/opening-bounds.d.ts.map +1 -0
  1475. package/dist/validation/opening-bounds.js +34 -0
  1476. package/dist/validation/validate-build-json.d.ts +2 -0
  1477. package/dist/validation/validate-build-json.d.ts.map +1 -1
  1478. package/dist/validation/validate-build-json.js +36 -1
  1479. package/package.json +69 -10
  1480. package/dist/services/surface-hosting-procedural-parity.fixtures.d.ts +0 -13
  1481. package/dist/services/surface-hosting-procedural-parity.fixtures.d.ts.map +0 -1
  1482. package/dist/services/surface-hosting-procedural-parity.fixtures.js +0 -4691
  1483. package/dist/services/surface-hosting-shelf-parity.fixtures.d.ts +0 -1060
  1484. package/dist/services/surface-hosting-shelf-parity.fixtures.d.ts.map +0 -1
  1485. package/dist/services/surface-hosting-shelf-parity.fixtures.js +0 -3127
@@ -1,7 +1,7 @@
1
1
  'use client';
2
2
  import { temporal } from 'zundo';
3
3
  import { create } from 'zustand';
4
- import { parseMaterialRef, toSceneMaterialRef } from '../material-library.js';
4
+ import { toSceneMaterialRef } from '../material-library.js';
5
5
  import { getNodePluginId, isNodeKindEnabled, nodeRegistry } from '../registry/registry.js';
6
6
  import { BuildingNode } from '../schema/index.js';
7
7
  import { generateCollectionId } from '../schema/collections.js';
@@ -10,25 +10,35 @@ import { DoorNode as DoorNodeSchema } from '../schema/nodes/door.js';
10
10
  import { createDormerDefaultWindow, DormerNode as DormerNodeSchema, getDormerDefaultWindowFace, } from '../schema/nodes/dormer.js';
11
11
  import { ElevatorNode as ElevatorNodeSchema } from '../schema/nodes/elevator.js';
12
12
  import { LevelNode, normalizeLevelBaseElevation } from '../schema/nodes/level.js';
13
+ import { RoofGlazing } from '../schema/nodes/roof-glazing.js';
13
14
  import { getPitchFromActiveRoofHeight, } from '../schema/nodes/roof-segment.js';
14
15
  import { segmentPointToRoofWallFace } from '../schema/nodes/roof-segment-walls.js';
15
16
  import { ShelfNode as ShelfNodeSchema } from '../schema/nodes/shelf.js';
16
17
  import { SiteNode } from '../schema/nodes/site.js';
17
18
  import { getEffectiveStairSurfaceMaterial, StairNode as StairNodeSchema, } from '../schema/nodes/stair.js';
18
19
  import { StairSegmentNode as StairSegmentNodeSchema } from '../schema/nodes/stair-segment.js';
19
- import { getEffectiveWallSurfaceMaterial } from '../schema/nodes/wall.js';
20
20
  import { WindowNode as WindowNodeSchema } from '../schema/nodes/window.js';
21
- import { generateSceneMaterialId, SceneMaterial, } from '../schema/scene-material.js';
21
+ import { SceneMaterial } from '../schema/scene-material.js';
22
22
  import { AnyNode as AnyNodeSchema } from '../schema/types.js';
23
- import { syncAutoElevatorOpenings } from '../systems/elevator/elevator-opening-sync.js';
24
- import { syncAutoStairOpenings } from '../systems/stair/stair-opening-sync.js';
25
- import { syncStairRises } from '../systems/stair/stair-rise.js';
23
+ import { DEFAULT_LEVEL_HEIGHT } from '../services/level-height.js';
24
+ import { ensureSceneOpenings } from '../utils/ensure-scene-openings.js';
25
+ import { migrateFloorPlates, migrateSlabSlots } from '../utils/floor-plate-migration.js';
26
26
  import { healSceneNodes } from '../utils/heal-scene-graph.js';
27
+ import { legacySpecToMaterialRef, migrateSingleMaterialSlots, migrateWallSurfaceMaterials, } from '../utils/legacy-material-slots.js';
28
+ import { materializeNodeDefaults } from '../utils/node-defaults.js';
29
+ import { normalizeLegacyStructure } from '../utils/normalize-legacy-structure.js';
30
+ import { materializeLegacyAutoOpenings } from '../utils/owned-floor-opening-migration.js';
31
+ import { reconcileStructureOnLoad } from '../utils/reconcile-structure-on-load.js';
27
32
  import { removeRetiredDrawingSheetNodes } from '../utils/retired-scene-nodes.js';
33
+ import { migrateCeilingRoomLinks, migrateRoomZones } from '../utils/room-zone-migration.js';
28
34
  import { migrateVerticalSceneNodes } from '../utils/vertical-scene-migration.js';
35
+ import { migrateLegacyWallAssemblies } from '../utils/wall-assembly-migration.js';
36
+ import { migrateWallFaceBands, migrateWallFaceKeys } from '../utils/wall-face-migration.js';
29
37
  import * as nodeActions from './actions/node-actions.js';
30
- import { areSceneSnapshotsEqual, getSceneHistoryPauseDepth, notifySceneCommit, pauseSceneHistory, resetSceneHistoryPauseDepth, resumeSceneHistory, runWithSceneCommitNodeIds, } from './history-control.js';
38
+ import { areSceneSnapshotsEqual, beginSceneHistoryPauseSession, getSceneHistoryPauseDepth, isRestoringSceneHistory, notifySceneCommit, pauseSceneHistory, resetSceneHistoryPauseDepth, resumeSceneHistory, runAsRemoteSceneChange, runAsSceneHistoryRestore, runSceneWriteGuards, runWithSceneCommitNodeIds, } from './history-control.js';
39
+ import { beginSceneHistoryDraft as beginSceneHistoryDraftIn, clearSceneHistoryDrafts, createdSceneHistoryDraftIds, hasSceneHistoryDrafts, noteSceneHistoryDraftWrite, sceneHistoryDraftRevertUpdates as sceneHistoryDraftRevertUpdatesIn, settleSceneHistoryDrafts, withAdoptedDraftsAsOriginal, withDraftsRestored, } from './history-drafts.js';
31
40
  import { getHistoryDirtyNodeIds } from './history-invalidation.js';
41
+ import { retainSceneAnnotations, withoutSceneAnnotations, withoutSceneNodeAnnotations, writeSceneNodeField, } from './scene-annotations.js';
32
42
  import { invalidatePendingHydration, isHydrationNormalization, queueSceneNormalization, runSceneHydration, } from './scene-hydration.js';
33
43
  import useLiveNodeOverrides from './use-live-node-overrides.js';
34
44
  import useLiveTransforms from './use-live-transforms.js';
@@ -128,6 +138,20 @@ function normalizeWindowNode(node) {
128
138
  const parsed = compiledNodeSchema(WindowNodeSchema).safeParse(node);
129
139
  return parsed.success ? { ...node, ...parsed.data } : null;
130
140
  }
141
+ // Slabs and ceilings written by third-party exporters (scanning apps, IFC
142
+ // hand-offs) can legitimately omit `holes` / `holeMetadata` / `autoFromWalls`:
143
+ // the schema gives them defaults. The opening sync and the public viewer read
144
+ // those fields on the raw node, so a missing `holes` throws
145
+ // "Cannot read properties of undefined (reading 'map')" and the scene never
146
+ // renders. Only the hole fields are filled here — a full zod parse would also
147
+ // default `thickness`, which the vertical-model migration below must still see
148
+ // as absent on legacy solids.
149
+ function normalizeSurfaceHoleFields(node) {
150
+ const holes = Array.isArray(node.holes) ? node.holes : [];
151
+ const holeMetadata = Array.isArray(node.holeMetadata) ? node.holeMetadata : [];
152
+ const autoFromWalls = node.type === 'slab' && node.autoFromWalls === undefined ? { autoFromWalls: false } : {};
153
+ return { ...node, holes, holeMetadata, ...autoFromWalls };
154
+ }
131
155
  function normalizeShelfNode(node) {
132
156
  const sanitized = {
133
157
  ...node,
@@ -217,91 +241,6 @@ function migrateElevatorParent(id, node, nodes) {
217
241
  parentId: buildingId,
218
242
  };
219
243
  }
220
- // Reuse an already-minted scene material for an identical inline legacy
221
- // material so a whole building painted one custom colour collapses to one
222
- // shared datablock (mirrors `commitSlotPaint`'s dedupe-on-match).
223
- function findMintedSceneMaterialRef(material, mintedMaterials) {
224
- const target = JSON.stringify(material);
225
- for (const sceneMaterial of Object.values(mintedMaterials)) {
226
- if (JSON.stringify(sceneMaterial.material) === target) {
227
- return toSceneMaterialRef(sceneMaterial.id);
228
- }
229
- }
230
- return undefined;
231
- }
232
- // Turn a legacy surface spec (`{ material, materialPreset }`) into a
233
- // `MaterialRef`: a preset that's already a `library:`/`scene:` ref is used
234
- // as-is; an inline material mints (or reuses) a scene material. Returns
235
- // undefined when the spec carries no material. Shared by every legacy→slots
236
- // migration below.
237
- function legacySpecToMaterialRef(spec, mintedMaterials) {
238
- if (typeof spec.materialPreset === 'string' && parseMaterialRef(spec.materialPreset)) {
239
- return spec.materialPreset;
240
- }
241
- if (spec.material !== undefined) {
242
- const existing = findMintedSceneMaterialRef(spec.material, mintedMaterials);
243
- if (existing)
244
- return existing;
245
- const id = generateSceneMaterialId();
246
- mintedMaterials[id] = {
247
- id,
248
- name: `Material ${Object.keys(mintedMaterials).length + 1}`,
249
- material: spec.material,
250
- };
251
- return toSceneMaterialRef(id);
252
- }
253
- return undefined;
254
- }
255
- // Move the retired inline `material*` / `interiorMaterial*` / `exteriorMaterial*`
256
- // fields onto the unified `node.slots` model (interior / exterior → a
257
- // `library:`/`scene:` ref), minting scene materials for inline customs into
258
- // `mintedMaterials` (merged into the scene material map by the caller). Already
259
- // slot-modelled walls and walls with no legacy material are left untouched.
260
- function migrateWallSurfaceMaterials(node, mintedMaterials) {
261
- if (node.slots && (node.slots.interior !== undefined || node.slots.exterior !== undefined)) {
262
- return node;
263
- }
264
- const slots = { ...(node.slots ?? {}) };
265
- for (const side of ['interior', 'exterior']) {
266
- const spec = getEffectiveWallSurfaceMaterial(node, side);
267
- const ref = legacySpecToMaterialRef(spec, mintedMaterials);
268
- if (ref)
269
- slots[side] = ref;
270
- }
271
- if (Object.keys(slots).length === 0) {
272
- return node;
273
- }
274
- return {
275
- ...node,
276
- slots,
277
- material: undefined,
278
- materialPreset: undefined,
279
- interiorMaterial: undefined,
280
- interiorMaterialPreset: undefined,
281
- exteriorMaterial: undefined,
282
- exteriorMaterialPreset: undefined,
283
- };
284
- }
285
- // Move a kind's single legacy `material` / `materialPreset` onto its declared
286
- // slots. A pre-slot-model node painted one material rendered that material on
287
- // every part (each slot resolves `node.slots[slot]` → legacy → default), so the
288
- // migration writes the same ref to every slot id the kind can expose — unused
289
- // conditional slots are harmless. Already slot-modelled or unpainted nodes are
290
- // left untouched. Mirrors `migrateWallSurfaceMaterials` for single-surface and
291
- // whole-object kinds (slab, ceiling, fence, column, shelf).
292
- function migrateSingleMaterialSlots(node, slotIds, mintedMaterials) {
293
- if (node.slots && Object.keys(node.slots).length > 0) {
294
- return node;
295
- }
296
- const ref = legacySpecToMaterialRef({ material: node.material, materialPreset: node.materialPreset }, mintedMaterials);
297
- if (!ref) {
298
- return node;
299
- }
300
- const slots = {};
301
- for (const slotId of slotIds)
302
- slots[slotId] = ref;
303
- return { ...node, slots, material: undefined, materialPreset: undefined };
304
- }
305
244
  function migrateRoleMaterialSlots(node, roles, mintedMaterials) {
306
245
  const slots = { ...(node.slots ?? {}) };
307
246
  const next = { ...node };
@@ -509,22 +448,6 @@ function migrateConstructionDimension(node) {
509
448
  }),
510
449
  };
511
450
  }
512
- function migrateWallAssembly(node) {
513
- if (!Object.hasOwn(node, 'assemblyLayers'))
514
- return node;
515
- const assemblyThickness = Array.isArray(node.assemblyLayers)
516
- ? node.assemblyLayers.reduce((total, layer) => {
517
- if (!(layer && typeof layer === 'object'))
518
- return total;
519
- const thickness = layer.thickness;
520
- return typeof thickness === 'number' && Number.isFinite(thickness) && thickness > 0
521
- ? total + thickness
522
- : total;
523
- }, 0)
524
- : 0;
525
- const { assemblyLayers: _assemblyLayers, ...wall } = node;
526
- return assemblyThickness > 0 ? { ...wall, thickness: assemblyThickness } : wall;
527
- }
528
451
  function migrateBlockRename(id, node, nodes) {
529
452
  if (node.type !== 'custom-mesh')
530
453
  return [id, node];
@@ -561,7 +484,7 @@ function migrateBlockHostedItem(node) {
561
484
  function migrateNodes(nodes) {
562
485
  // Repair pre-existing corruption (null children, zero-length walls) before
563
486
  // any per-type migration runs, so already-saved scenes load cleanly.
564
- const { nodes: healed } = healSceneNodes(nodes);
487
+ const { nodes: healed } = healSceneNodes(normalizeLegacyStructure(nodes));
565
488
  const { nodes: patchedNodes } = removeRetiredDrawingSheetNodes(healed);
566
489
  // Scene materials minted while moving legacy wall fields onto `node.slots`;
567
490
  // merged into the scene material map by the caller (`setScene`).
@@ -635,10 +558,15 @@ function migrateNodes(nodes) {
635
558
  // The migration result is cast, not zod-parsed, so the schema default never
636
559
  // applies on its own — this branch is the only place it lands.
637
560
  if (node.type === 'roof-segment') {
561
+ if (node.glazing !== undefined) {
562
+ const glazing = RoofGlazing.safeParse(node.glazing);
563
+ if (glazing.success)
564
+ patchedNodes[id] = { ...patchedNodes[id], glazing: glazing.data };
565
+ }
638
566
  const currentPitch = node.pitch;
639
567
  const hasValidPitch = typeof currentPitch === 'number' && currentPitch > 0;
640
568
  if (!hasValidPitch) {
641
- const { roofHeight, ...rest } = node;
569
+ const { roofHeight, ...rest } = patchedNodes[id];
642
570
  const width = typeof node.width === 'number' ? node.width : 8;
643
571
  const depth = typeof node.depth === 'number' ? node.depth : 6;
644
572
  const roofType = (typeof node.roofType === 'string' ? node.roofType : 'gable');
@@ -661,6 +589,9 @@ function migrateNodes(nodes) {
661
589
  patchedNodes[id] = normalized;
662
590
  }
663
591
  }
592
+ if (node.type === 'slab' || node.type === 'ceiling') {
593
+ patchedNodes[id] = normalizeSurfaceHoleFields(patchedNodes[id] ?? node);
594
+ }
664
595
  // Dormers originally rendered one inline parametric window. Promote that
665
596
  // default to a real hosted WindowNode so additional windows can use the
666
597
  // regular window tool and inspector without changing the old appearance.
@@ -706,7 +637,7 @@ function migrateNodes(nodes) {
706
637
  }
707
638
  }
708
639
  if (node.type === 'wall') {
709
- patchedNodes[id] = migrateWallSurfaceMaterials(migrateWallAssembly(patchedNodes[id]), mintedMaterials);
640
+ patchedNodes[id] = migrateWallSurfaceMaterials(patchedNodes[id], mintedMaterials);
710
641
  }
711
642
  // Cabinet v2→v3: node-level `doorStyle` was dead (geometry reads only the
712
643
  // per-compartment `doorType`) and was removed from both cabinet schemas;
@@ -822,30 +753,6 @@ function migrateNodes(nodes) {
822
753
  if (node.type === 'roof') {
823
754
  patchedNodes[id] = migrateRoofSurfaceMaterials(patchedNodes[id]);
824
755
  }
825
- // Legacy: site.children used to hold nested BuildingNode / ItemNode
826
- // objects (see the SiteNode schema before the children-as-ids fix).
827
- // Flatten any leftover nested children into ids, and absorb the
828
- // embedded nodes into the flat map so the rest of the loader can
829
- // treat the site like every other parent.
830
- if (node.type === 'site' && Array.isArray(node.children)) {
831
- let needsFlatten = false;
832
- const flattened = [];
833
- for (const child of node.children) {
834
- if (typeof child === 'string') {
835
- flattened.push(child);
836
- }
837
- else if (child && typeof child === 'object' && typeof child.id === 'string') {
838
- needsFlatten = true;
839
- flattened.push(child.id);
840
- if (!patchedNodes[child.id]) {
841
- patchedNodes[child.id] = { ...child, parentId: id };
842
- }
843
- }
844
- }
845
- if (needsFlatten) {
846
- patchedNodes[id] = { ...node, children: flattened };
847
- }
848
- }
849
756
  // Level children normalization.
850
757
  // Pre-0.9.1 JSONs may carry child IDs that no longer exist in the node
851
758
  // map (e.g. elevator IDs that lived under a level before the elevator
@@ -898,8 +805,28 @@ function migrateNodes(nodes) {
898
805
  patchedNodes[id] = normalized;
899
806
  }
900
807
  }
901
- const vertical = migrateVerticalSceneNodes(patchedNodes);
902
- return { nodes: vertical.nodes, mintedMaterials };
808
+ const walls = migrateLegacyWallAssemblies(patchedNodes);
809
+ const vertical = migrateVerticalSceneNodes(walls.nodes);
810
+ const rooms = migrateRoomZones(vertical.nodes);
811
+ const ceilings = migrateCeilingRoomLinks(rooms.nodes);
812
+ const legacyOpeningsPrepared = Object.values(ceilings.nodes).some((value) => {
813
+ const node = value;
814
+ return node.type === 'slab' && node.autoFromWalls && !node.plateRole;
815
+ }) &&
816
+ Object.values(ceilings.nodes).some((value) => {
817
+ const node = value;
818
+ return node.type === 'stair' || node.type === 'elevator';
819
+ });
820
+ const plates = migrateFloorPlates(materializeLegacyAutoOpenings(ceilings.nodes, true));
821
+ const slots = migrateSlabSlots(plates.nodes);
822
+ const openings = ensureSceneOpenings(slots.nodes).nodes;
823
+ // M1 before M2: bands move onto geometric faces, then become paint regions.
824
+ const wallFaces = migrateWallFaceKeys(openings);
825
+ const structure = reconcileStructureOnLoad(migrateWallFaceBands(wallFaces.nodes).nodes, vertical.nodes, { legacyOpeningsPrepared });
826
+ return {
827
+ nodes: materializeNodeDefaults(structure.nodes).nodes,
828
+ mintedMaterials,
829
+ };
903
830
  }
904
831
  function getNodeChildIds(node) {
905
832
  if (!('children' in node && Array.isArray(node.children))) {
@@ -949,23 +876,36 @@ function collectReachableNodeIds(nodes, rootNodeIds) {
949
876
  }
950
877
  return reachable;
951
878
  }
952
- function sceneHistorySnapshotFromState(state) {
953
- const { nodes, rootNodeIds, collections, materials, installedPlugins } = state;
954
- // Fresh placement nodes are renderable drafts, not document history. Excluding their
955
- // entire subtree here protects both local undo and external commit subscribers.
956
- const transientNodeIds = new Set();
957
- for (const node of Object.values(nodes)) {
958
- const metadata = node.metadata;
959
- if (metadata &&
960
- typeof metadata === 'object' &&
961
- !Array.isArray(metadata) &&
962
- metadata.isNew === true) {
963
- transientNodeIds.add(node.id);
964
- }
965
- }
966
- if (transientNodeIds.size === 0) {
967
- return { nodes, rootNodeIds, collections, materials, installedPlugins };
879
+ /** Collection membership lives in `collection.nodeIds`; items alone mirror it in `collectionIds`. */
880
+ function mirrorItemMembership(nodes, collectionId, nodeIds, member) {
881
+ let next = nodes;
882
+ for (const nodeId of nodeIds) {
883
+ const node = next[nodeId];
884
+ if (node?.type !== 'item')
885
+ continue;
886
+ const current = node.collectionIds ?? [];
887
+ if (current.includes(collectionId) === member)
888
+ continue;
889
+ if (next === nodes)
890
+ next = { ...nodes };
891
+ next[nodeId] = {
892
+ ...node,
893
+ collectionIds: member
894
+ ? [...current, collectionId]
895
+ : current.filter((id) => id !== collectionId),
896
+ };
968
897
  }
898
+ return next;
899
+ }
900
+ /**
901
+ * `parts` without the subtrees of `draftIds`, and without the references to them (children,
902
+ * procedural attachments, collections, roots). Returns `parts` itself when there is nothing to drop.
903
+ */
904
+ function withoutDraftSubtrees(parts, draftIds) {
905
+ const { nodes, rootNodeIds, collections } = parts;
906
+ const transientNodeIds = new Set([...draftIds].filter((id) => Boolean(nodes[id])));
907
+ if (transientNodeIds.size === 0)
908
+ return parts;
969
909
  const childIdsByParentId = new Map();
970
910
  const addChild = (parentId, childId) => {
971
911
  const childIds = childIdsByParentId.get(parentId) ?? new Set();
@@ -990,7 +930,7 @@ function sceneHistorySnapshotFromState(state) {
990
930
  pendingIds.push(childId);
991
931
  }
992
932
  }
993
- const historyNodes = {};
933
+ const documentNodes = {};
994
934
  for (const [id, sourceNode] of Object.entries(nodes)) {
995
935
  if (transientNodeIds.has(id))
996
936
  continue;
@@ -1007,31 +947,76 @@ function sceneHistorySnapshotFromState(state) {
1007
947
  node = { ...node, attachments };
1008
948
  }
1009
949
  if (!('children' in node && Array.isArray(node.children))) {
1010
- historyNodes[id] = node;
950
+ documentNodes[id] = node;
1011
951
  continue;
1012
952
  }
1013
953
  const children = node.children.filter((childId) => !transientNodeIds.has(childId));
1014
- historyNodes[id] =
954
+ documentNodes[id] =
1015
955
  children.length === node.children.length ? node : { ...node, children };
1016
956
  }
1017
- const historyCollections = {};
957
+ const documentCollections = {};
1018
958
  for (const [id, collection] of Object.entries(collections)) {
1019
959
  const nodeIds = collection.nodeIds.filter((nodeId) => !transientNodeIds.has(nodeId));
1020
960
  if (collection.controlNodeId && transientNodeIds.has(collection.controlNodeId)) {
1021
961
  const { controlNodeId: _controlNodeId, ...rest } = collection;
1022
- historyCollections[id] = { ...rest, nodeIds };
962
+ documentCollections[id] = { ...rest, nodeIds };
1023
963
  }
1024
964
  else {
1025
- historyCollections[id] =
965
+ documentCollections[id] =
1026
966
  nodeIds.length === collection.nodeIds.length ? collection : { ...collection, nodeIds };
1027
967
  }
1028
968
  }
1029
969
  return {
1030
- nodes: historyNodes,
970
+ nodes: documentNodes,
1031
971
  rootNodeIds: rootNodeIds.filter((id) => !transientNodeIds.has(id)),
1032
- collections: historyCollections,
972
+ collections: documentCollections,
973
+ };
974
+ }
975
+ function isFreshPlacementNode(node) {
976
+ const metadata = node.metadata;
977
+ return (!!metadata &&
978
+ typeof metadata === 'object' &&
979
+ !Array.isArray(metadata) &&
980
+ metadata.isNew === true);
981
+ }
982
+ /**
983
+ * Fresh placement nodes are renderable drafts, not document history. Excluding their entire
984
+ * subtree here protects both local undo and external commit subscribers. Carried drafts
985
+ * (history-drafts.ts) are kept out the same way.
986
+ */
987
+ function sceneHistorySnapshotFromState(state) {
988
+ const { nodes, materials, installedPlugins, hasExplicitPluginInstallState } = state;
989
+ const kept = withoutDraftSubtrees(state, [
990
+ ...createdSceneHistoryDraftIds(),
991
+ ...Object.values(nodes)
992
+ .filter(isFreshPlacementNode)
993
+ .map((node) => node.id),
994
+ ]);
995
+ return {
996
+ nodes: withAdoptedDraftsAsOriginal(nodes, kept.nodes),
997
+ rootNodeIds: kept.rootNodeIds,
998
+ collections: kept.collections,
1033
999
  materials,
1034
1000
  installedPlugins,
1001
+ hasExplicitPluginInstallState,
1002
+ };
1003
+ }
1004
+ /**
1005
+ * The current scene as every save writes it: without the drafts an interaction is carrying —
1006
+ * created carry drafts (history-drafts.ts) and the `drafts` the caller owns — and with adopted
1007
+ * carry drafts as they were before the carry. Never inferred from metadata: committed nodes can
1008
+ * still carry `metadata.isNew`, so only explicitly owned drafts are left out.
1009
+ */
1010
+ export function getSceneDocument(drafts = []) {
1011
+ const state = useScene.getState();
1012
+ const kept = withoutDraftSubtrees(state, [...createdSceneHistoryDraftIds(), ...drafts]);
1013
+ return {
1014
+ nodes: withAdoptedDraftsAsOriginal(state.nodes, kept.nodes),
1015
+ rootNodeIds: kept.rootNodeIds,
1016
+ collections: kept.collections,
1017
+ materials: state.materials,
1018
+ installedPlugins: state.installedPlugins,
1019
+ hasExplicitPluginInstallState: state.hasExplicitPluginInstallState,
1035
1020
  };
1036
1021
  }
1037
1022
  /**
@@ -1091,7 +1076,26 @@ function createSceneStore(config) {
1091
1076
  };
1092
1077
  return create()(hydratedConfig);
1093
1078
  }
1094
- function runTemporalJump(target, jump) {
1079
+ function runTemporalJump(target, restore) {
1080
+ const draftsBefore = useScene.getState().nodes;
1081
+ const restoreDrafts = () => {
1082
+ const current = useScene.getState().nodes;
1083
+ const nodes = retainSceneAnnotations(draftsBefore, withDraftsRestored(draftsBefore, current) ?? current);
1084
+ if (nodes === current)
1085
+ return;
1086
+ // The carry's own state, not a new step: a tracked write here would clear redo.
1087
+ const pause = beginSceneHistoryPauseSession(useScene);
1088
+ try {
1089
+ useScene.setState({ nodes });
1090
+ }
1091
+ finally {
1092
+ pause.end();
1093
+ }
1094
+ };
1095
+ runTemporalJumpOnly(target, () => runAsSceneHistoryRestore(restore));
1096
+ restoreDrafts();
1097
+ }
1098
+ function runTemporalJumpOnly(target, jump) {
1095
1099
  if (!target?.nodes) {
1096
1100
  jump();
1097
1101
  return;
@@ -1104,7 +1108,6 @@ function runTemporalJump(target, jump) {
1104
1108
  const next = target.nodes[nodeId];
1105
1109
  if (previous === next)
1106
1110
  continue;
1107
- // Structural hierarchy changes keep the full-level reconciliation fallback.
1108
1111
  if ([previous, next].some((node) => node && ['site', 'building', 'level'].includes(node.type))) {
1109
1112
  jump();
1110
1113
  return;
@@ -1136,6 +1139,7 @@ const useScene = createSceneStore(temporal((set, get) => ({
1136
1139
  readOnly: false,
1137
1140
  setReadOnly: (readOnly) => set({ readOnly }),
1138
1141
  unloadScene: () => {
1142
+ runSceneWriteGuards();
1139
1143
  invalidatePendingHydration();
1140
1144
  set({
1141
1145
  hydrationToken: null,
@@ -1157,11 +1161,12 @@ const useScene = createSceneStore(temporal((set, get) => ({
1157
1161
  set({ installedPlugins, hasExplicitPluginInstallState });
1158
1162
  },
1159
1163
  setScene: (nodes, rootNodeIds, extra) => {
1164
+ runSceneWriteGuards();
1160
1165
  // Apply backward compatibility migrations
1161
1166
  const { nodes: patchedNodes, mintedMaterials } = migrateNodes(nodes);
1162
- // Scene materials minted by the wall legacy→slots migration join the
1163
- // loaded palette (existing refs win on id collision — there are none,
1164
- // ids are freshly generated).
1167
+ // Scene materials minted by the legacy→slots migrations join the
1168
+ // loaded palette. Their ids are content-derived, so an existing entry
1169
+ // with the same id (the hosted authority minted it) is the same material.
1165
1170
  const materials = { ...mintedMaterials, ...(extra?.materials ?? {}) };
1166
1171
  // Remove orphans: nodes whose parentId points to a non-existent node
1167
1172
  const cleanedNodes = { ...patchedNodes };
@@ -1198,37 +1203,22 @@ const useScene = createSceneStore(temporal((set, get) => ({
1198
1203
  installedPlugins: Array.from(new Set(extra?.installedPlugins ?? [])),
1199
1204
  hasExplicitPluginInstallState: extra?.hasExplicitPluginInstallState ?? false,
1200
1205
  });
1201
- const applyNormalization = (updates) => {
1202
- if (updates.length > 0)
1203
- get().updateNodes(updates);
1204
- };
1205
- const hydratedNodes = Object.values(get().nodes);
1206
- if (!get().readOnly) {
1207
- pauseSceneHistory(useScene);
1208
- try {
1209
- if (hydratedNodes.some((node) => node.type === 'elevator')) {
1210
- applyNormalization(syncAutoElevatorOpenings(get().nodes));
1206
+ if (!get().readOnly &&
1207
+ Object.values(get().nodes).some((node) => node.type === 'stair')) {
1208
+ queueSceneNormalization(() => {
1209
+ if (get().hydrationId !== hydrationId)
1210
+ return;
1211
+ const { updates } = ensureSceneOpenings(get().nodes);
1212
+ if (!updates.length)
1213
+ return;
1214
+ pauseSceneHistory(useScene);
1215
+ try {
1216
+ get().updateNodes(updates);
1211
1217
  }
1212
- }
1213
- finally {
1214
- resumeSceneHistory(useScene);
1215
- }
1216
- if (hydratedNodes.some((node) => node.type === 'stair')) {
1217
- // Spatial-grid subscribers must settle first. Owning this pass
1218
- // here also covers opening systems that mount after the load.
1219
- queueSceneNormalization(() => {
1220
- if (get().hydrationId !== hydrationId)
1221
- return;
1222
- pauseSceneHistory(useScene);
1223
- try {
1224
- applyNormalization(syncStairRises(get().nodes));
1225
- applyNormalization(syncAutoStairOpenings(get().nodes));
1226
- }
1227
- finally {
1228
- resumeSceneHistory(useScene);
1229
- }
1230
- });
1231
- }
1218
+ finally {
1219
+ resumeSceneHistory(useScene);
1220
+ }
1221
+ });
1232
1222
  }
1233
1223
  // Mark all nodes as dirty to trigger re-validation
1234
1224
  Object.values(get().nodes).forEach((node) => {
@@ -1281,7 +1271,7 @@ const useScene = createSceneStore(temporal((set, get) => ({
1281
1271
  parentId: building.id,
1282
1272
  level: 0,
1283
1273
  children: [],
1284
- height: 2.5,
1274
+ height: DEFAULT_LEVEL_HEIGHT,
1285
1275
  });
1286
1276
  // Define all nodes flat
1287
1277
  const nodes = {
@@ -1303,33 +1293,24 @@ const useScene = createSceneStore(temporal((set, get) => ({
1303
1293
  clearDirty: (id) => {
1304
1294
  get().dirtyNodes.delete(id);
1305
1295
  },
1306
- createNodes: (ops) => nodeActions.createNodesAction(set, get, ops),
1307
- createNode: (node, parentId) => nodeActions.createNodesAction(set, get, [{ node, parentId }]),
1308
- applyNodeChanges: (changes) => nodeActions.applyNodeChangesAction(set, get, changes),
1309
- updateNodes: (updates) => nodeActions.updateNodesAction(set, get, updates),
1310
- updateNode: (id, data) => nodeActions.updateNodesAction(set, get, [{ id, data }]),
1296
+ createNodes: (ops, options) => nodeActions.createNodesAction(set, get, ops, options),
1297
+ createNode: (node, parentId, options) => nodeActions.createNodesAction(set, get, [{ node, parentId }], options),
1298
+ applyNodeChanges: (changes, options) => nodeActions.applyNodeChangesAction(set, get, changes, options),
1299
+ updateNodes: (updates, options) => nodeActions.updateNodesAction(set, get, updates, options),
1300
+ updateNode: (id, data, options) => nodeActions.updateNodesAction(set, get, [{ id, data }], options),
1301
+ detachDerivedNode: (id, data) => nodeActions.detachDerivedNodeAction(set, get, id, data),
1311
1302
  // --- DELETE ---
1312
- deleteNodes: (ids) => nodeActions.deleteNodesAction(set, get, ids),
1313
- deleteNode: (id) => nodeActions.deleteNodesAction(set, get, [id]),
1303
+ deleteNodes: (ids, options) => nodeActions.deleteNodesAction(set, get, ids, options),
1304
+ deleteNode: (id, options) => nodeActions.deleteNodesAction(set, get, [id], options),
1314
1305
  // --- COLLECTIONS ---
1315
1306
  createCollection: (name, nodeIds = []) => {
1316
1307
  if (get().readOnly)
1317
1308
  return '';
1318
1309
  const id = generateCollectionId();
1319
- const collection = { id, name, nodeIds };
1320
- set((state) => {
1321
- const nextCollections = { ...state.collections, [id]: collection };
1322
- // Denormalize: stamp collectionId onto each node
1323
- const nextNodes = { ...state.nodes };
1324
- for (const nodeId of nodeIds) {
1325
- const node = nextNodes[nodeId];
1326
- if (!node)
1327
- continue;
1328
- const existing = ('collectionIds' in node ? node.collectionIds : undefined) ?? [];
1329
- nextNodes[nodeId] = { ...node, collectionIds: [...existing, id] };
1330
- }
1331
- return { collections: nextCollections, nodes: nextNodes };
1332
- });
1310
+ set((state) => ({
1311
+ collections: { ...state.collections, [id]: { id, name, nodeIds: [...nodeIds] } },
1312
+ nodes: mirrorItemMembership(state.nodes, id, nodeIds, true),
1313
+ }));
1333
1314
  return id;
1334
1315
  },
1335
1316
  deleteCollection: (id) => {
@@ -1339,18 +1320,10 @@ const useScene = createSceneStore(temporal((set, get) => ({
1339
1320
  const col = state.collections[id];
1340
1321
  const nextCollections = { ...state.collections };
1341
1322
  delete nextCollections[id];
1342
- // Remove collectionId from all member nodes
1343
- const nextNodes = { ...state.nodes };
1344
- for (const nodeId of col?.nodeIds ?? []) {
1345
- const node = nextNodes[nodeId];
1346
- if (!(node && 'collectionIds' in node))
1347
- continue;
1348
- nextNodes[nodeId] = {
1349
- ...node,
1350
- collectionIds: node.collectionIds.filter((cid) => cid !== id),
1351
- };
1352
- }
1353
- return { collections: nextCollections, nodes: nextNodes };
1323
+ return {
1324
+ collections: nextCollections,
1325
+ nodes: mirrorItemMembership(state.nodes, id, col?.nodeIds ?? [], false),
1326
+ };
1354
1327
  });
1355
1328
  },
1356
1329
  updateCollection: (id, data) => {
@@ -1363,50 +1336,38 @@ const useScene = createSceneStore(temporal((set, get) => ({
1363
1336
  return { collections: { ...state.collections, [id]: { ...col, ...data } } };
1364
1337
  });
1365
1338
  },
1366
- addToCollection: (id, nodeId) => {
1339
+ addToCollection: (id, nodeIds) => {
1367
1340
  if (get().readOnly)
1368
1341
  return;
1369
1342
  set((state) => {
1370
1343
  const col = state.collections[id];
1371
- if (!col || col.nodeIds.includes(nodeId))
1344
+ const added = nodeIds.filter((nodeId) => !col?.nodeIds.includes(nodeId));
1345
+ if (!col || added.length === 0)
1372
1346
  return state;
1373
- const nextCollections = {
1374
- ...state.collections,
1375
- [id]: { ...col, nodeIds: [...col.nodeIds, nodeId] },
1376
- };
1377
- const node = state.nodes[nodeId];
1378
- if (!node)
1379
- return { collections: nextCollections };
1380
- const existing = ('collectionIds' in node ? node.collectionIds : undefined) ?? [];
1381
- const nextNodes = {
1382
- ...state.nodes,
1383
- [nodeId]: { ...node, collectionIds: [...existing, id] },
1347
+ return {
1348
+ collections: {
1349
+ ...state.collections,
1350
+ [id]: { ...col, nodeIds: [...col.nodeIds, ...added] },
1351
+ },
1352
+ nodes: mirrorItemMembership(state.nodes, id, added, true),
1384
1353
  };
1385
- return { collections: nextCollections, nodes: nextNodes };
1386
1354
  });
1387
1355
  },
1388
- removeFromCollection: (id, nodeId) => {
1356
+ removeFromCollection: (id, nodeIds) => {
1389
1357
  if (get().readOnly)
1390
1358
  return;
1391
1359
  set((state) => {
1392
1360
  const col = state.collections[id];
1393
- if (!col)
1361
+ const removed = nodeIds.filter((nodeId) => col?.nodeIds.includes(nodeId));
1362
+ if (!col || removed.length === 0)
1394
1363
  return state;
1395
- const nextCollections = {
1396
- ...state.collections,
1397
- [id]: { ...col, nodeIds: col.nodeIds.filter((n) => n !== nodeId) },
1398
- };
1399
- const node = state.nodes[nodeId];
1400
- if (!(node && 'collectionIds' in node))
1401
- return { collections: nextCollections };
1402
- const nextNodes = {
1403
- ...state.nodes,
1404
- [nodeId]: {
1405
- ...node,
1406
- collectionIds: node.collectionIds.filter((cid) => cid !== id),
1364
+ return {
1365
+ collections: {
1366
+ ...state.collections,
1367
+ [id]: { ...col, nodeIds: col.nodeIds.filter((nodeId) => !removed.includes(nodeId)) },
1407
1368
  },
1369
+ nodes: mirrorItemMembership(state.nodes, id, removed, false),
1408
1370
  };
1409
- return { collections: nextCollections, nodes: nextNodes };
1410
1371
  });
1411
1372
  },
1412
1373
  // --- SCENE MATERIALS ---
@@ -1438,7 +1399,7 @@ const useScene = createSceneStore(temporal((set, get) => ({
1438
1399
  },
1439
1400
  }), {
1440
1401
  partialize: (state) => sceneHistorySnapshotFromState(state),
1441
- equality: (pastState, currentState) => areSceneSnapshotsEqual(pastState, currentState),
1402
+ equality: (pastState, currentState) => areSceneSnapshotsEqual({ ...pastState, nodes: withoutSceneAnnotations(pastState.nodes) }, { ...currentState, nodes: withoutSceneAnnotations(currentState.nodes) }),
1442
1403
  onSave: (pastState, currentState) => {
1443
1404
  notifySceneCommit({
1444
1405
  origin: 'local',
@@ -1450,8 +1411,14 @@ const useScene = createSceneStore(temporal((set, get) => ({
1450
1411
  const state = config(set, get, store);
1451
1412
  return {
1452
1413
  ...state,
1453
- undo: (steps = 1) => runTemporalJump(get().pastStates.slice().splice(-steps, steps)[0], () => state.undo(steps)),
1454
- redo: (steps = 1) => runTemporalJump(get().futureStates.slice().splice(-steps, steps)[0], () => state.redo(steps)),
1414
+ undo: (steps = 1) => {
1415
+ runSceneWriteGuards();
1416
+ return runTemporalJump(get().pastStates.slice().splice(-steps, steps)[0], () => state.undo(steps));
1417
+ },
1418
+ redo: (steps = 1) => {
1419
+ runSceneWriteGuards();
1420
+ return runTemporalJump(get().futureStates.slice().splice(-steps, steps)[0], () => state.redo(steps));
1421
+ },
1455
1422
  };
1456
1423
  },
1457
1424
  limit: 50, // Limit to last 50 actions
@@ -1467,6 +1434,23 @@ const invalidateForLiveState = () => {
1467
1434
  useLiveNodeOverrides.subscribe(invalidateForLiveState);
1468
1435
  useLiveTransforms.subscribe(invalidateForLiveState);
1469
1436
  useScene.subscribe(invalidateForLiveState);
1437
+ // Systems rebuild a node's geometry only when it is dirty, so a preview that
1438
+ // drops its override without marking the node left it drawn at the preview
1439
+ // (a cancelled wall move's floor still pushed out). Whoever clears an
1440
+ // override, or one of its fields, the node rebuilds from the scene.
1441
+ useLiveNodeOverrides.subscribe(function markClearedOverridesDirty(state, previous) {
1442
+ if (state.overrides === previous.overrides)
1443
+ return;
1444
+ let scene = null;
1445
+ for (const [id, before] of previous.overrides) {
1446
+ const after = state.overrides.get(id);
1447
+ if (after === before || (after && Object.keys(before).every((key) => key in after)))
1448
+ continue;
1449
+ scene ??= useScene.getState();
1450
+ if (scene.nodes[id])
1451
+ scene.markDirty(id);
1452
+ }
1453
+ });
1470
1454
  export default useScene;
1471
1455
  let sceneReadOnlyLeaseCount = 0;
1472
1456
  let sceneReadOnlyLeaseBaseline = false;
@@ -1523,7 +1507,8 @@ function sceneOperationPatchHasLiveConflict(beforeState, changes) {
1523
1507
  return false;
1524
1508
  }
1525
1509
  function areScenePatchValuesEqual(left, right) {
1526
- if (Object.is(left, right))
1510
+ // Compensation crosses JSON, which serializes both signed zeros as 0.
1511
+ if (left === right)
1527
1512
  return true;
1528
1513
  if (typeof left !== typeof right || left === null || right === null)
1529
1514
  return false;
@@ -1537,8 +1522,10 @@ function areScenePatchValuesEqual(left, right) {
1537
1522
  return false;
1538
1523
  const leftRecord = left;
1539
1524
  const rightRecord = right;
1540
- const leftKeys = Object.keys(leftRecord);
1541
- if (leftKeys.length !== Object.keys(rightRecord).length)
1525
+ // Recorded compensation nodes have crossed JSON, which omits undefined properties.
1526
+ const leftKeys = Object.keys(leftRecord).filter((key) => leftRecord[key] !== undefined);
1527
+ const rightKeys = Object.keys(rightRecord).filter((key) => rightRecord[key] !== undefined);
1528
+ if (leftKeys.length !== rightKeys.length)
1542
1529
  return false;
1543
1530
  return leftKeys.every((key) => Object.hasOwn(rightRecord, key) &&
1544
1531
  areScenePatchValuesEqual(leftRecord[key], rightRecord[key]));
@@ -1617,7 +1604,7 @@ function sceneOperationPatchNextState(beforeState, changes) {
1617
1604
  !Number.isSafeInteger(change.position) ||
1618
1605
  change.position < 0 ||
1619
1606
  siblings?.[change.position] !== id ||
1620
- !areScenePatchValuesEqual(current, change.node)) {
1607
+ !areScenePatchValuesEqual(withoutSceneNodeAnnotations(current), withoutSceneNodeAnnotations(change.node))) {
1621
1608
  return null;
1622
1609
  }
1623
1610
  deleteIds.add(id);
@@ -1626,11 +1613,6 @@ function sceneOperationPatchNextState(beforeState, changes) {
1626
1613
  if (deleteIds.has(id))
1627
1614
  return null;
1628
1615
  }
1629
- for (const node of Object.values(beforeState.nodes)) {
1630
- const parentId = node.parentId ?? null;
1631
- if (parentId && deleteIds.has(parentId) && !deleteIds.has(node.id))
1632
- return null;
1633
- }
1634
1616
  const nextNodes = { ...beforeState.nodes };
1635
1617
  let nextRootNodeIds = deleteIds.size > 0
1636
1618
  ? beforeState.rootNodeIds.filter((id) => !deleteIds.has(id))
@@ -1665,8 +1647,7 @@ function sceneOperationPatchNextState(beforeState, changes) {
1665
1647
  if (!parent)
1666
1648
  return null;
1667
1649
  if (createIds.has(parentId)) {
1668
- if (!('children' in parent) ||
1669
- !Array.isArray(parent.children) ||
1650
+ if (!('children' in parent && Array.isArray(parent.children)) ||
1670
1651
  parent.children[change.position] !== change.node.id) {
1671
1652
  return null;
1672
1653
  }
@@ -1676,6 +1657,66 @@ function sceneOperationPatchNextState(beforeState, changes) {
1676
1657
  placements.push(change);
1677
1658
  existingParentCreates.set(parentId, placements);
1678
1659
  }
1660
+ for (const { id, data, removeFields } of changes.nodeUpdates) {
1661
+ const node = nextNodes[id];
1662
+ if (!node ||
1663
+ createIds.has(id) ||
1664
+ deleteIds.has(id) ||
1665
+ updateIds.has(id) ||
1666
+ ('id' in data && data.id !== node.id) ||
1667
+ ('type' in data && data.type !== node.type) ||
1668
+ ('object' in data && data.object !== node.object) ||
1669
+ removeFields.some((field) => field === 'id' || field === 'object' || field === 'type' || Object.hasOwn(data, field))) {
1670
+ return null;
1671
+ }
1672
+ updateIds.add(id);
1673
+ let candidate = { ...node };
1674
+ for (const [field, value] of Object.entries(data)) {
1675
+ const written = writeSceneNodeField(candidate, field, value, true);
1676
+ if (!written)
1677
+ return null;
1678
+ candidate = written;
1679
+ }
1680
+ for (const field of removeFields) {
1681
+ const written = writeSceneNodeField(candidate, field, undefined, false);
1682
+ if (!written)
1683
+ return null;
1684
+ candidate = written;
1685
+ }
1686
+ const validated = parseSceneOperationPatchNode(candidate);
1687
+ if (!validated ||
1688
+ validated.id !== id ||
1689
+ validated.type !== node.type ||
1690
+ validated.object !== node.object) {
1691
+ return null;
1692
+ }
1693
+ nextNodes[id] = candidate;
1694
+ }
1695
+ for (const id of updateIds) {
1696
+ const previousParent = beforeState.nodes[id]?.parentId;
1697
+ const parentId = nextNodes[id]?.parentId;
1698
+ if (previousParent === parentId)
1699
+ continue;
1700
+ if (previousParent) {
1701
+ const parent = nextNodes[previousParent];
1702
+ if (parent && 'children' in parent && Array.isArray(parent.children))
1703
+ nextNodes[previousParent] = {
1704
+ ...parent,
1705
+ children: parent.children.filter((child) => child !== id),
1706
+ };
1707
+ }
1708
+ else
1709
+ nextRootNodeIds = nextRootNodeIds.filter((child) => child !== id);
1710
+ if (parentId) {
1711
+ const parent = nextNodes[parentId];
1712
+ if (!(parent && 'children' in parent && Array.isArray(parent.children)))
1713
+ return null;
1714
+ if (!parent.children.includes(id))
1715
+ nextNodes[parentId] = { ...parent, children: [...parent.children, id] };
1716
+ }
1717
+ else if (!nextRootNodeIds.includes(id))
1718
+ nextRootNodeIds = [...nextRootNodeIds, id];
1719
+ }
1679
1720
  const insertedRoots = insertSceneStructuralPlacements(nextRootNodeIds, rootCreates);
1680
1721
  if (!insertedRoots)
1681
1722
  return null;
@@ -1689,6 +1730,10 @@ function sceneOperationPatchNextState(beforeState, changes) {
1689
1730
  return null;
1690
1731
  nextNodes[parentId] = { ...parent, children };
1691
1732
  }
1733
+ for (const node of Object.values(nextNodes)) {
1734
+ if (node.parentId && deleteIds.has(node.parentId))
1735
+ return null;
1736
+ }
1692
1737
  for (const change of parsedCreates) {
1693
1738
  const parentId = change.node.parentId ?? null;
1694
1739
  const siblings = structuralSiblingIds(nextNodes, nextRootNodeIds, parentId);
@@ -1701,31 +1746,6 @@ function sceneOperationPatchNextState(beforeState, changes) {
1701
1746
  return null;
1702
1747
  }
1703
1748
  }
1704
- for (const { id, data, removeFields } of changes.nodeUpdates) {
1705
- const node = nextNodes[id];
1706
- if (!node ||
1707
- createIds.has(id) ||
1708
- deleteIds.has(id) ||
1709
- updateIds.has(id) ||
1710
- ('id' in data && data.id !== node.id) ||
1711
- ('type' in data && data.type !== node.type) ||
1712
- ('object' in data && data.object !== node.object) ||
1713
- removeFields.some((field) => field === 'id' || field === 'object' || field === 'type' || Object.hasOwn(data, field))) {
1714
- return null;
1715
- }
1716
- updateIds.add(id);
1717
- const candidate = { ...node, ...data };
1718
- for (const field of removeFields)
1719
- delete candidate[field];
1720
- const validated = parseSceneOperationPatchNode(candidate);
1721
- if (!validated ||
1722
- validated.id !== id ||
1723
- validated.type !== node.type ||
1724
- validated.object !== node.object) {
1725
- return null;
1726
- }
1727
- nextNodes[id] = candidate;
1728
- }
1729
1749
  const materials = changes.materialChanges.length > 0 ? { ...beforeState.materials } : beforeState.materials;
1730
1750
  for (const { id, material } of changes.materialChanges) {
1731
1751
  if (materialIds.has(id) ||
@@ -1738,16 +1758,88 @@ function sceneOperationPatchNextState(beforeState, changes) {
1738
1758
  else
1739
1759
  materials[id] = material;
1740
1760
  }
1741
- return { materials, nodes: nextNodes, rootNodeIds: nextRootNodeIds };
1761
+ const collectionChanges = changes.collectionChanges ?? [];
1762
+ const collections = collectionChanges.length > 0 ? { ...beforeState.collections } : beforeState.collections;
1763
+ const collectionIds = new Set();
1764
+ for (const { id, collection } of collectionChanges) {
1765
+ if (collectionIds.has(id) || (collection !== null && collection.id !== id))
1766
+ return null;
1767
+ collectionIds.add(id);
1768
+ if (collection === null)
1769
+ delete collections[id];
1770
+ else
1771
+ collections[id] = collection;
1772
+ }
1773
+ const pluginChanges = changes.pluginChanges ?? [];
1774
+ if (changes.pluginInstallState) {
1775
+ return {
1776
+ collections,
1777
+ materials,
1778
+ nodes: nextNodes,
1779
+ rootNodeIds: nextRootNodeIds,
1780
+ installedPlugins: [...changes.pluginInstallState.installedPlugins],
1781
+ hasExplicitPluginInstallState: changes.pluginInstallState.explicit,
1782
+ };
1783
+ }
1784
+ if (pluginChanges.length === 0) {
1785
+ return { collections, materials, nodes: nextNodes, rootNodeIds: nextRootNodeIds };
1786
+ }
1787
+ const installedPlugins = new Set(beforeState.installedPlugins);
1788
+ const pluginIds = new Set();
1789
+ for (const { id, installed } of pluginChanges) {
1790
+ if (!id || pluginIds.has(id))
1791
+ return null;
1792
+ pluginIds.add(id);
1793
+ if (installed)
1794
+ installedPlugins.add(id);
1795
+ else
1796
+ installedPlugins.delete(id);
1797
+ }
1798
+ return {
1799
+ collections,
1800
+ materials,
1801
+ nodes: nextNodes,
1802
+ rootNodeIds: nextRootNodeIds,
1803
+ installedPlugins: Array.from(installedPlugins),
1804
+ // A shared install list is a decision someone made, so hosts must not
1805
+ // re-add their default plugins on top of it.
1806
+ hasExplicitPluginInstallState: true,
1807
+ };
1742
1808
  }
1743
- export function applySceneOperationPatch(changes) {
1809
+ export function applySceneOperationPatch(changes, options = {}) {
1810
+ runSceneWriteGuards();
1744
1811
  const beforeState = useScene.getState();
1745
1812
  if (changes.nodeUpdates.length === 0 &&
1746
1813
  changes.materialChanges.length === 0 &&
1747
1814
  changes.nodeCreates.length === 0 &&
1748
- changes.nodeDeletes.length === 0) {
1815
+ changes.nodeDeletes.length === 0 &&
1816
+ !changes.pluginChanges?.length &&
1817
+ !changes.collectionChanges?.length &&
1818
+ !changes.pluginInstallState) {
1749
1819
  return false;
1750
1820
  }
1821
+ if (options.undoable &&
1822
+ !(useScene.temporal.getState().isTracking &&
1823
+ getSceneHistoryPauseDepth() === 0 &&
1824
+ !hasSceneHistoryDrafts())) {
1825
+ return false;
1826
+ }
1827
+ if (options.annotation &&
1828
+ (options.undoable ||
1829
+ beforeState.readOnly ||
1830
+ !useScene.temporal.getState().isTracking ||
1831
+ getSceneHistoryPauseDepth() > 0 ||
1832
+ hasSceneHistoryDrafts()))
1833
+ return false;
1834
+ if (options.annotation &&
1835
+ (changes.nodeCreates.length ||
1836
+ changes.nodeDeletes.length ||
1837
+ changes.materialChanges.length ||
1838
+ changes.pluginChanges?.length ||
1839
+ changes.collectionChanges?.length ||
1840
+ changes.pluginInstallState ||
1841
+ changes.nodeUpdates.some(({ data, removeFields }) => removeFields.length || Object.keys(data).some((field) => field !== 'source.images'))))
1842
+ return false;
1751
1843
  if (sceneOperationPatchHasLiveConflict(beforeState, changes))
1752
1844
  return false;
1753
1845
  const next = sceneOperationPatchNextState(beforeState, changes);
@@ -1758,7 +1850,7 @@ export function applySceneOperationPatch(changes) {
1758
1850
  if (shouldScopeHistoryPause)
1759
1851
  pauseSceneHistory(useScene);
1760
1852
  try {
1761
- useScene.setState(next);
1853
+ runAsRemoteSceneChange(() => useScene.setState(next));
1762
1854
  }
1763
1855
  finally {
1764
1856
  if (shouldScopeHistoryPause)
@@ -1777,6 +1869,12 @@ export function applySceneOperationPatch(changes) {
1777
1869
  }
1778
1870
  if (areSceneSnapshotsEqual(before, current))
1779
1871
  return false;
1872
+ if (options.undoable) {
1873
+ useScene.temporal.setState(({ pastStates }) => ({
1874
+ pastStates: [...pastStates, before],
1875
+ futureStates: [],
1876
+ }));
1877
+ }
1780
1878
  for (const id of touchedNodeIds) {
1781
1879
  if (current.nodes[id])
1782
1880
  currentState.markDirty(id);
@@ -1816,10 +1914,22 @@ export function applySceneOperationPatch(changes) {
1816
1914
  currentState.markDirty(node.parentId);
1817
1915
  }
1818
1916
  }
1917
+ if (changes.pluginChanges?.length || changes.pluginInstallState) {
1918
+ for (const node of Object.values(current.nodes)) {
1919
+ if (!getNodePluginId(node.type))
1920
+ continue;
1921
+ if (!isNodeKindEnabled(node.type, currentState.installedPlugins)) {
1922
+ currentState.clearDirty(node.id);
1923
+ }
1924
+ else if (!isNodeKindEnabled(node.type, beforeState.installedPlugins)) {
1925
+ currentState.markDirty(node.id);
1926
+ }
1927
+ }
1928
+ }
1819
1929
  for (const { node } of changes.nodeDeletes)
1820
1930
  currentState.clearDirty(node.id);
1821
1931
  notifySceneCommit({
1822
- origin: 'host',
1932
+ origin: options.annotation ? 'local' : 'host',
1823
1933
  before,
1824
1934
  current,
1825
1935
  });
@@ -1833,20 +1943,22 @@ export function applyScenePatch(changes) {
1833
1943
  });
1834
1944
  }
1835
1945
  export function applySceneSnapshot(snapshot, options) {
1946
+ runSceneWriteGuards();
1836
1947
  const before = sceneHistorySnapshotFromState(useScene.getState());
1837
1948
  const temporalState = useScene.temporal.getState();
1838
- if (!temporalState.isTracking || getSceneHistoryPauseDepth() > 0) {
1949
+ if (!temporalState.isTracking || getSceneHistoryPauseDepth() > 0 || hasSceneHistoryDrafts()) {
1839
1950
  throw new Error('Cannot replace the scene snapshot during an active interaction');
1840
1951
  }
1841
1952
  useLiveNodeOverrides.getState().clearAll();
1842
1953
  useLiveTransforms.getState().clearAll();
1843
1954
  pauseSceneHistory(useScene);
1844
1955
  try {
1845
- useScene.getState().setScene(snapshot.nodes, snapshot.rootNodeIds, {
1956
+ runAsRemoteSceneChange(() => useScene.getState().setScene(snapshot.nodes, snapshot.rootNodeIds, {
1846
1957
  collections: snapshot.collections,
1847
1958
  installedPlugins: snapshot.installedPlugins,
1959
+ hasExplicitPluginInstallState: options.explicitPluginInstallState,
1848
1960
  materials: snapshot.materials,
1849
- });
1961
+ }));
1850
1962
  useScene.temporal.getState().clear();
1851
1963
  }
1852
1964
  finally {
@@ -1861,8 +1973,37 @@ export function applySceneSnapshot(snapshot, options) {
1861
1973
  // Track previous temporal state lengths for identifying history jumps
1862
1974
  let prevPastLength = 0;
1863
1975
  let prevFutureLength = 0;
1976
+ /**
1977
+ * Runs one of a carry's own writes to its drafts (see history-drafts.ts) under a short pause,
1978
+ * and marks the adopted drafts' fields it changed as carry-owned.
1979
+ */
1980
+ export function runSceneHistoryDraftWrite(write) {
1981
+ const before = useScene.getState().nodes;
1982
+ const wasRawPaused = !useScene.temporal.getState().isTracking && getSceneHistoryPauseDepth() === 0;
1983
+ const pause = beginSceneHistoryPauseSession(useScene);
1984
+ try {
1985
+ return write();
1986
+ }
1987
+ finally {
1988
+ noteSceneHistoryDraftWrite(before, useScene.getState().nodes);
1989
+ pause.end();
1990
+ // Legacy movers can co-mount with the overlay without owning a counted pause.
1991
+ if (wasRawPaused && getSceneHistoryPauseDepth() === 0)
1992
+ useScene.temporal.getState().pause();
1993
+ }
1994
+ }
1995
+ /** Updates that revert the fields a carry still holds on `ids` (see history-drafts.ts). */
1996
+ export function sceneHistoryDraftRevertUpdates(ids) {
1997
+ return sceneHistoryDraftRevertUpdatesIn(useScene.getState().nodes, ids);
1998
+ }
1999
+ /** Registers a carried draft (see history-drafts.ts); returns the call that ends it. */
2000
+ export function beginSceneHistoryDraft(id, original) {
2001
+ return beginSceneHistoryDraftIn(id, original, useScene.getState().nodes);
2002
+ }
2003
+ export { settleSceneHistoryDrafts };
1864
2004
  export function clearSceneHistory() {
1865
2005
  resetSceneHistoryPauseDepth();
2006
+ clearSceneHistoryDrafts();
1866
2007
  // Resetting the pause-depth counter without resuming would strand the
1867
2008
  // temporal store in `isTracking: false` if a pause window was active when
1868
2009
  // the scene was (re)loaded — every edit after the load would then be
@@ -1882,10 +2023,13 @@ useScene.temporal.subscribe((state, previousState) => {
1882
2023
  return;
1883
2024
  const currentPastLength = state.pastStates.length;
1884
2025
  const currentFutureLength = state.futureStates.length;
2026
+ // Only the store's own undo / redo jump history: a new edit after an undo also
2027
+ // grows the past and drops the redo stack, and is not a redo.
1885
2028
  // Undo: futureStates increases (state moved from past to future)
1886
2029
  // Redo: pastStates increases while futureStates decreases (state moved from future to past)
1887
- const didUndo = currentFutureLength > prevFutureLength;
1888
- const didRedo = currentPastLength > prevPastLength && currentFutureLength < prevFutureLength;
2030
+ const jumping = isRestoringSceneHistory();
2031
+ const didUndo = jumping && currentFutureLength > prevFutureLength;
2032
+ const didRedo = jumping && currentPastLength > prevPastLength && currentFutureLength < prevFutureLength;
1889
2033
  if (didUndo || didRedo) {
1890
2034
  // Capture both layouts before another synchronous jump can replace them.
1891
2035
  // The state pushed onto the opposite stack includes history-paused derived