@pascal-app/core 1.0.3 → 1.0.4

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 (1098) hide show
  1. package/dist/agent-operations/__fixtures__/add-object-cases.d.ts +235 -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 +129 -0
  4. package/dist/agent-operations/__fixtures__/build-room-cases.d.ts +4 -0
  5. package/dist/agent-operations/__fixtures__/build-room-cases.d.ts.map +1 -0
  6. package/dist/agent-operations/__fixtures__/build-room-cases.js +635 -0
  7. package/dist/agent-operations/__fixtures__/cases.d.ts +52 -0
  8. package/dist/agent-operations/__fixtures__/cases.d.ts.map +1 -0
  9. package/dist/agent-operations/__fixtures__/cases.js +689 -0
  10. package/dist/agent-operations/__fixtures__/find-by-type-cases.d.ts +7 -0
  11. package/dist/agent-operations/__fixtures__/find-by-type-cases.d.ts.map +1 -0
  12. package/dist/agent-operations/__fixtures__/find-by-type-cases.js +21 -0
  13. package/dist/agent-operations/__fixtures__/place-items-cases.d.ts +17 -0
  14. package/dist/agent-operations/__fixtures__/place-items-cases.d.ts.map +1 -0
  15. package/dist/agent-operations/__fixtures__/place-items-cases.js +506 -0
  16. package/dist/agent-operations/__fixtures__/room-cases.d.ts +3 -0
  17. package/dist/agent-operations/__fixtures__/room-cases.d.ts.map +1 -0
  18. package/dist/agent-operations/__fixtures__/room-cases.js +338 -0
  19. package/dist/agent-operations/__fixtures__/search-assets-cases.d.ts +5 -0
  20. package/dist/agent-operations/__fixtures__/search-assets-cases.d.ts.map +1 -0
  21. package/dist/agent-operations/__fixtures__/search-assets-cases.js +137 -0
  22. package/dist/agent-operations/__fixtures__/structure-cases.d.ts +6 -0
  23. package/dist/agent-operations/__fixtures__/structure-cases.d.ts.map +1 -0
  24. package/dist/agent-operations/__fixtures__/structure-cases.js +588 -0
  25. package/dist/agent-operations/__fixtures__/verify-scene-cases.d.ts +3 -0
  26. package/dist/agent-operations/__fixtures__/verify-scene-cases.d.ts.map +1 -0
  27. package/dist/agent-operations/__fixtures__/verify-scene-cases.js +302 -0
  28. package/dist/agent-operations/achieved.d.ts +16 -0
  29. package/dist/agent-operations/achieved.d.ts.map +1 -0
  30. package/dist/agent-operations/achieved.js +28 -0
  31. package/dist/agent-operations/add-column.d.ts +23 -0
  32. package/dist/agent-operations/add-column.d.ts.map +1 -0
  33. package/dist/agent-operations/add-column.js +97 -0
  34. package/dist/agent-operations/add-level.d.ts +14 -0
  35. package/dist/agent-operations/add-level.d.ts.map +1 -0
  36. package/dist/agent-operations/add-level.js +94 -0
  37. package/dist/agent-operations/add-object.d.ts +114 -0
  38. package/dist/agent-operations/add-object.d.ts.map +1 -0
  39. package/dist/agent-operations/add-object.js +361 -0
  40. package/dist/agent-operations/add-wall.d.ts +15 -0
  41. package/dist/agent-operations/add-wall.d.ts.map +1 -0
  42. package/dist/agent-operations/add-wall.js +47 -0
  43. package/dist/agent-operations/apply-changes.d.ts +16 -0
  44. package/dist/agent-operations/apply-changes.d.ts.map +1 -0
  45. package/dist/agent-operations/apply-changes.js +93 -0
  46. package/dist/agent-operations/apply-outcome.d.ts +15 -0
  47. package/dist/agent-operations/apply-outcome.d.ts.map +1 -0
  48. package/dist/agent-operations/apply-outcome.js +18 -0
  49. package/dist/agent-operations/collections.d.ts +28 -0
  50. package/dist/agent-operations/collections.d.ts.map +1 -0
  51. package/dist/agent-operations/collections.js +130 -0
  52. package/dist/agent-operations/create-room.d.ts +36 -0
  53. package/dist/agent-operations/create-room.d.ts.map +1 -0
  54. package/dist/agent-operations/create-room.js +177 -0
  55. package/dist/agent-operations/create-stair.d.ts +33 -0
  56. package/dist/agent-operations/create-stair.d.ts.map +1 -0
  57. package/dist/agent-operations/create-stair.js +247 -0
  58. package/dist/agent-operations/delete-node.d.ts +6 -0
  59. package/dist/agent-operations/delete-node.d.ts.map +1 -0
  60. package/dist/agent-operations/delete-node.js +9 -0
  61. package/dist/agent-operations/door-clearance.d.ts +135 -0
  62. package/dist/agent-operations/door-clearance.d.ts.map +1 -0
  63. package/dist/agent-operations/door-clearance.js +334 -0
  64. package/dist/agent-operations/duplicate-level.d.ts +12 -0
  65. package/dist/agent-operations/duplicate-level.d.ts.map +1 -0
  66. package/dist/agent-operations/duplicate-level.js +54 -0
  67. package/dist/agent-operations/find-by-type.d.ts +11 -0
  68. package/dist/agent-operations/find-by-type.d.ts.map +1 -0
  69. package/dist/agent-operations/find-by-type.js +94 -0
  70. package/dist/agent-operations/furnish-room.d.ts +18 -0
  71. package/dist/agent-operations/furnish-room.d.ts.map +1 -0
  72. package/dist/agent-operations/furnish-room.js +259 -0
  73. package/dist/agent-operations/get-node.d.ts +9 -0
  74. package/dist/agent-operations/get-node.d.ts.map +1 -0
  75. package/dist/agent-operations/get-node.js +33 -0
  76. package/dist/agent-operations/hosted-services.d.ts +13 -0
  77. package/dist/agent-operations/hosted-services.d.ts.map +1 -0
  78. package/dist/agent-operations/hosted-services.js +22 -0
  79. package/dist/agent-operations/index.d.ts +277 -0
  80. package/dist/agent-operations/index.d.ts.map +1 -0
  81. package/dist/agent-operations/index.js +80 -0
  82. package/dist/agent-operations/layout-clearance.d.ts +108 -0
  83. package/dist/agent-operations/layout-clearance.d.ts.map +1 -0
  84. package/dist/agent-operations/layout-clearance.js +190 -0
  85. package/dist/agent-operations/level-reads.d.ts +33 -0
  86. package/dist/agent-operations/level-reads.d.ts.map +1 -0
  87. package/dist/agent-operations/level-reads.js +161 -0
  88. package/dist/agent-operations/level-target.d.ts +11 -0
  89. package/dist/agent-operations/level-target.d.ts.map +1 -0
  90. package/dist/agent-operations/level-target.js +29 -0
  91. package/dist/agent-operations/list-levels.d.ts +4 -0
  92. package/dist/agent-operations/list-levels.d.ts.map +1 -0
  93. package/dist/agent-operations/list-levels.js +31 -0
  94. package/dist/agent-operations/material-preset.d.ts +11 -0
  95. package/dist/agent-operations/material-preset.d.ts.map +1 -0
  96. package/dist/agent-operations/material-preset.js +74 -0
  97. package/dist/agent-operations/material-refs.d.ts +24 -0
  98. package/dist/agent-operations/material-refs.d.ts.map +1 -0
  99. package/dist/agent-operations/material-refs.js +100 -0
  100. package/dist/agent-operations/node-patch.d.ts +3 -0
  101. package/dist/agent-operations/node-patch.d.ts.map +1 -0
  102. package/dist/agent-operations/node-patch.js +114 -0
  103. package/dist/agent-operations/paint.d.ts +21 -0
  104. package/dist/agent-operations/paint.d.ts.map +1 -0
  105. package/dist/agent-operations/paint.js +219 -0
  106. package/dist/agent-operations/place-items.d.ts +20 -0
  107. package/dist/agent-operations/place-items.d.ts.map +1 -0
  108. package/dist/agent-operations/place-items.js +226 -0
  109. package/dist/agent-operations/plan-geometry.d.ts +24 -0
  110. package/dist/agent-operations/plan-geometry.d.ts.map +1 -0
  111. package/dist/agent-operations/plan-geometry.js +94 -0
  112. package/dist/agent-operations/room-structure.d.ts +87 -0
  113. package/dist/agent-operations/room-structure.d.ts.map +1 -0
  114. package/dist/agent-operations/room-structure.js +144 -0
  115. package/dist/agent-operations/scene-materials.d.ts +15 -0
  116. package/dist/agent-operations/scene-materials.d.ts.map +1 -0
  117. package/dist/agent-operations/scene-materials.js +62 -0
  118. package/dist/agent-operations/scene-measure.d.ts +73 -0
  119. package/dist/agent-operations/scene-measure.d.ts.map +1 -0
  120. package/dist/agent-operations/scene-measure.js +73 -0
  121. package/dist/agent-operations/scene-queries.d.ts +4510 -0
  122. package/dist/agent-operations/scene-queries.d.ts.map +1 -0
  123. package/dist/agent-operations/scene-queries.js +84 -0
  124. package/dist/agent-operations/scene-view.d.ts +98 -0
  125. package/dist/agent-operations/scene-view.d.ts.map +1 -0
  126. package/dist/agent-operations/scene-view.js +559 -0
  127. package/dist/agent-operations/search-assets.d.ts +14 -0
  128. package/dist/agent-operations/search-assets.d.ts.map +1 -0
  129. package/dist/agent-operations/search-assets.js +42 -0
  130. package/dist/agent-operations/search-materials.d.ts +12 -0
  131. package/dist/agent-operations/search-materials.d.ts.map +1 -0
  132. package/dist/agent-operations/search-materials.js +111 -0
  133. package/dist/agent-operations/stairs.d.ts +5 -0
  134. package/dist/agent-operations/stairs.d.ts.map +1 -0
  135. package/dist/agent-operations/stairs.js +70 -0
  136. package/dist/agent-operations/types.d.ts +59 -0
  137. package/dist/agent-operations/types.d.ts.map +1 -0
  138. package/dist/agent-operations/types.js +1 -0
  139. package/dist/agent-operations/verify-scene.d.ts +50 -0
  140. package/dist/agent-operations/verify-scene.d.ts.map +1 -0
  141. package/dist/agent-operations/verify-scene.js +369 -0
  142. package/dist/agent-operations/wall-opening.d.ts +65 -0
  143. package/dist/agent-operations/wall-opening.d.ts.map +1 -0
  144. package/dist/agent-operations/wall-opening.js +55 -0
  145. package/dist/agent-tools/achieved.d.ts +9 -0
  146. package/dist/agent-tools/achieved.d.ts.map +1 -0
  147. package/dist/agent-tools/achieved.js +8 -0
  148. package/dist/agent-tools/add-object.d.ts +43 -0
  149. package/dist/agent-tools/add-object.d.ts.map +1 -0
  150. package/dist/agent-tools/add-object.js +86 -0
  151. package/dist/agent-tools/assets.d.ts +13 -0
  152. package/dist/agent-tools/assets.d.ts.map +1 -0
  153. package/dist/agent-tools/assets.js +18 -0
  154. package/dist/agent-tools/clear-scene.d.ts +10 -0
  155. package/dist/agent-tools/clear-scene.d.ts.map +1 -0
  156. package/dist/agent-tools/clear-scene.js +9 -0
  157. package/dist/agent-tools/collections.d.ts +35 -0
  158. package/dist/agent-tools/collections.d.ts.map +1 -0
  159. package/dist/agent-tools/collections.js +31 -0
  160. package/dist/agent-tools/columns.d.ts +44 -0
  161. package/dist/agent-tools/columns.d.ts.map +1 -0
  162. package/dist/agent-tools/columns.js +59 -0
  163. package/dist/agent-tools/contract.d.ts +68 -0
  164. package/dist/agent-tools/contract.d.ts.map +1 -0
  165. package/dist/agent-tools/contract.js +1 -0
  166. package/dist/agent-tools/create-room.d.ts +63 -0
  167. package/dist/agent-tools/create-room.d.ts.map +1 -0
  168. package/dist/agent-tools/create-room.js +90 -0
  169. package/dist/agent-tools/find-by-type.d.ts +11 -0
  170. package/dist/agent-tools/find-by-type.d.ts.map +1 -0
  171. package/dist/agent-tools/find-by-type.js +14 -0
  172. package/dist/agent-tools/furnish-room.d.ts +26 -0
  173. package/dist/agent-tools/furnish-room.d.ts.map +1 -0
  174. package/dist/agent-tools/furnish-room.js +35 -0
  175. package/dist/agent-tools/hosted-services.d.ts +402 -0
  176. package/dist/agent-tools/hosted-services.d.ts.map +1 -0
  177. package/dist/agent-tools/hosted-services.js +148 -0
  178. package/dist/agent-tools/index.d.ts +864 -0
  179. package/dist/agent-tools/index.d.ts.map +1 -0
  180. package/dist/agent-tools/index.js +82 -0
  181. package/dist/agent-tools/levels.d.ts +72 -0
  182. package/dist/agent-tools/levels.d.ts.map +1 -0
  183. package/dist/agent-tools/levels.js +76 -0
  184. package/dist/agent-tools/measurement.d.ts +37 -0
  185. package/dist/agent-tools/measurement.d.ts.map +1 -0
  186. package/dist/agent-tools/measurement.js +94 -0
  187. package/dist/agent-tools/node-id.d.ts +3 -0
  188. package/dist/agent-tools/node-id.d.ts.map +1 -0
  189. package/dist/agent-tools/node-id.js +2 -0
  190. package/dist/agent-tools/nodes.d.ts +17 -0
  191. package/dist/agent-tools/nodes.d.ts.map +1 -0
  192. package/dist/agent-tools/nodes.js +13 -0
  193. package/dist/agent-tools/paint.d.ts +46 -0
  194. package/dist/agent-tools/paint.d.ts.map +1 -0
  195. package/dist/agent-tools/paint.js +29 -0
  196. package/dist/agent-tools/place-items.d.ts +19 -0
  197. package/dist/agent-tools/place-items.d.ts.map +1 -0
  198. package/dist/agent-tools/place-items.js +29 -0
  199. package/dist/agent-tools/refusal.d.ts +20 -0
  200. package/dist/agent-tools/refusal.d.ts.map +1 -0
  201. package/dist/agent-tools/refusal.js +29 -0
  202. package/dist/agent-tools/room-structure.d.ts +438 -0
  203. package/dist/agent-tools/room-structure.d.ts.map +1 -0
  204. package/dist/agent-tools/room-structure.js +207 -0
  205. package/dist/agent-tools/search-materials.d.ts +20 -0
  206. package/dist/agent-tools/search-materials.d.ts.map +1 -0
  207. package/dist/agent-tools/search-materials.js +32 -0
  208. package/dist/agent-tools/stairs.d.ts +86 -0
  209. package/dist/agent-tools/stairs.d.ts.map +1 -0
  210. package/dist/agent-tools/stairs.js +103 -0
  211. package/dist/agent-tools/verify-scene.d.ts +13 -0
  212. package/dist/agent-tools/verify-scene.d.ts.map +1 -0
  213. package/dist/agent-tools/verify-scene.js +21 -0
  214. package/dist/agent-tools/view-scene.d.ts +43 -0
  215. package/dist/agent-tools/view-scene.d.ts.map +1 -0
  216. package/dist/agent-tools/view-scene.js +80 -0
  217. package/dist/agent-tools/wall-openings.d.ts +163 -0
  218. package/dist/agent-tools/wall-openings.d.ts.map +1 -0
  219. package/dist/agent-tools/wall-openings.js +144 -0
  220. package/dist/agent-tools/walls.d.ts +21 -0
  221. package/dist/agent-tools/walls.d.ts.map +1 -0
  222. package/dist/agent-tools/walls.js +30 -0
  223. package/dist/agent-tools/write-target.d.ts +12 -0
  224. package/dist/agent-tools/write-target.d.ts.map +1 -0
  225. package/dist/agent-tools/write-target.js +10 -0
  226. package/dist/building/__fixtures__/wall-opening-cases.d.ts +736 -0
  227. package/dist/building/__fixtures__/wall-opening-cases.d.ts.map +1 -0
  228. package/dist/building/__fixtures__/wall-opening-cases.js +307 -0
  229. package/dist/building/door-types.d.ts +22 -0
  230. package/dist/building/door-types.d.ts.map +1 -0
  231. package/dist/building/door-types.js +167 -0
  232. package/dist/building/floor-item-fit.d.ts +38 -0
  233. package/dist/building/floor-item-fit.d.ts.map +1 -0
  234. package/dist/building/floor-item-fit.js +47 -0
  235. package/dist/building/index.d.ts +7 -0
  236. package/dist/building/index.d.ts.map +1 -0
  237. package/dist/building/index.js +6 -0
  238. package/dist/building/level-duplication.d.ts +8983 -0
  239. package/dist/building/level-duplication.d.ts.map +1 -0
  240. package/dist/building/level-duplication.js +314 -0
  241. package/dist/building/opening-style-presets.d.ts +46 -0
  242. package/dist/building/opening-style-presets.d.ts.map +1 -0
  243. package/dist/building/opening-style-presets.js +195 -0
  244. package/dist/building/wall-openings.d.ts +445 -0
  245. package/dist/building/wall-openings.d.ts.map +1 -0
  246. package/dist/building/wall-openings.js +231 -0
  247. package/dist/building/window-types.d.ts +17 -0
  248. package/dist/building/window-types.d.ts.map +1 -0
  249. package/dist/building/window-types.js +31 -0
  250. package/dist/commands/structure/apply-zone-transform.d.ts +23 -0
  251. package/dist/commands/structure/apply-zone-transform.d.ts.map +1 -0
  252. package/dist/commands/structure/apply-zone-transform.js +55 -0
  253. package/dist/commands/structure/create-mezzanine.d.ts +12 -0
  254. package/dist/commands/structure/create-mezzanine.d.ts.map +1 -0
  255. package/dist/commands/structure/create-mezzanine.js +46 -0
  256. package/dist/commands/structure/create-zone.d.ts +32 -0
  257. package/dist/commands/structure/create-zone.d.ts.map +1 -0
  258. package/dist/commands/structure/create-zone.js +126 -0
  259. package/dist/commands/structure/delete-zone.d.ts +51 -0
  260. package/dist/commands/structure/delete-zone.d.ts.map +1 -0
  261. package/dist/commands/structure/delete-zone.js +354 -0
  262. package/dist/commands/structure/divide-zone.d.ts +38 -0
  263. package/dist/commands/structure/divide-zone.d.ts.map +1 -0
  264. package/dist/commands/structure/divide-zone.js +186 -0
  265. package/dist/commands/structure/duplicate-zone.d.ts +7 -0
  266. package/dist/commands/structure/duplicate-zone.d.ts.map +1 -0
  267. package/dist/commands/structure/duplicate-zone.js +21 -0
  268. package/dist/commands/structure/floor-opening.d.ts +36 -0
  269. package/dist/commands/structure/floor-opening.d.ts.map +1 -0
  270. package/dist/commands/structure/floor-opening.js +124 -0
  271. package/dist/commands/structure/index.d.ts +22 -0
  272. package/dist/commands/structure/index.d.ts.map +1 -0
  273. package/dist/commands/structure/index.js +20 -0
  274. package/dist/commands/structure/lock-outside-faces.d.ts +12 -0
  275. package/dist/commands/structure/lock-outside-faces.d.ts.map +1 -0
  276. package/dist/commands/structure/lock-outside-faces.js +32 -0
  277. package/dist/commands/structure/merge-zones.d.ts +5 -0
  278. package/dist/commands/structure/merge-zones.d.ts.map +1 -0
  279. package/dist/commands/structure/merge-zones.js +22 -0
  280. package/dist/commands/structure/mezzanine-content.d.ts +16 -0
  281. package/dist/commands/structure/mezzanine-content.d.ts.map +1 -0
  282. package/dist/commands/structure/mezzanine-content.js +109 -0
  283. package/dist/commands/structure/plan-mezzanine-stair.d.ts +7 -0
  284. package/dist/commands/structure/plan-mezzanine-stair.d.ts.map +1 -0
  285. package/dist/commands/structure/plan-mezzanine-stair.js +127 -0
  286. package/dist/commands/structure/plan-wall-deletion.d.ts +9 -0
  287. package/dist/commands/structure/plan-wall-deletion.d.ts.map +1 -0
  288. package/dist/commands/structure/plan-wall-deletion.js +151 -0
  289. package/dist/commands/structure/rebase-floor-reference.d.ts +7 -0
  290. package/dist/commands/structure/rebase-floor-reference.d.ts.map +1 -0
  291. package/dist/commands/structure/rebase-floor-reference.js +90 -0
  292. package/dist/commands/structure/resize-mezzanine.d.ts +8 -0
  293. package/dist/commands/structure/resize-mezzanine.d.ts.map +1 -0
  294. package/dist/commands/structure/resize-mezzanine.js +43 -0
  295. package/dist/commands/structure/rotate-zone.d.ts +8 -0
  296. package/dist/commands/structure/rotate-zone.d.ts.map +1 -0
  297. package/dist/commands/structure/rotate-zone.js +28 -0
  298. package/dist/commands/structure/set-floor-foundation.d.ts +62 -0
  299. package/dist/commands/structure/set-floor-foundation.d.ts.map +1 -0
  300. package/dist/commands/structure/set-floor-foundation.js +162 -0
  301. package/dist/commands/structure/set-room-floor-construction.d.ts +8 -0
  302. package/dist/commands/structure/set-room-floor-construction.d.ts.map +1 -0
  303. package/dist/commands/structure/set-room-floor-construction.js +72 -0
  304. package/dist/commands/structure/set-wall-geometry.d.ts +10 -0
  305. package/dist/commands/structure/set-wall-geometry.d.ts.map +1 -0
  306. package/dist/commands/structure/set-wall-geometry.js +52 -0
  307. package/dist/commands/structure/set-zone-edges.d.ts +14 -0
  308. package/dist/commands/structure/set-zone-edges.d.ts.map +1 -0
  309. package/dist/commands/structure/set-zone-edges.js +143 -0
  310. package/dist/commands/structure/set-zone-intent.d.ts +39 -0
  311. package/dist/commands/structure/set-zone-intent.d.ts.map +1 -0
  312. package/dist/commands/structure/set-zone-intent.js +125 -0
  313. package/dist/commands/structure/shared.d.ts +4512 -0
  314. package/dist/commands/structure/shared.d.ts.map +1 -0
  315. package/dist/commands/structure/shared.js +102 -0
  316. package/dist/commands/structure/transform-zone.d.ts +23 -0
  317. package/dist/commands/structure/transform-zone.d.ts.map +1 -0
  318. package/dist/commands/structure/transform-zone.js +472 -0
  319. package/dist/commands/structure/validate-mezzanine.d.ts +5 -0
  320. package/dist/commands/structure/validate-mezzanine.d.ts.map +1 -0
  321. package/dist/commands/structure/validate-mezzanine.js +46 -0
  322. package/dist/commands/structure/zone-crossings.d.ts +8 -0
  323. package/dist/commands/structure/zone-crossings.d.ts.map +1 -0
  324. package/dist/commands/structure/zone-crossings.js +162 -0
  325. package/dist/commands/structure/zone-drop.d.ts +4 -0
  326. package/dist/commands/structure/zone-drop.d.ts.map +1 -0
  327. package/dist/commands/structure/zone-drop.js +68 -0
  328. package/dist/commands/structure/zone-insertion.d.ts +4 -0
  329. package/dist/commands/structure/zone-insertion.d.ts.map +1 -0
  330. package/dist/commands/structure/zone-insertion.js +200 -0
  331. package/dist/commands/structure/zone-transform-content.d.ts +6 -0
  332. package/dist/commands/structure/zone-transform-content.d.ts.map +1 -0
  333. package/dist/commands/structure/zone-transform-content.js +117 -0
  334. package/dist/commands/structure/zone-wall-merge.d.ts +4977 -0
  335. package/dist/commands/structure/zone-wall-merge.d.ts.map +1 -0
  336. package/dist/commands/structure/zone-wall-merge.js +135 -0
  337. package/dist/contracts/reference-discovery.d.ts +18 -0
  338. package/dist/contracts/reference-discovery.d.ts.map +1 -0
  339. package/dist/contracts/reference-discovery.js +100 -0
  340. package/dist/contracts/reference-inventory.d.ts +44 -0
  341. package/dist/contracts/reference-inventory.d.ts.map +1 -0
  342. package/dist/contracts/reference-inventory.js +872 -0
  343. package/dist/events/bus.d.ts +70 -9
  344. package/dist/events/bus.d.ts.map +1 -1
  345. package/dist/hooks/scene-registry/item-clip-registry.d.ts +6 -3
  346. package/dist/hooks/scene-registry/item-clip-registry.d.ts.map +1 -1
  347. package/dist/hooks/scene-registry/item-clip-registry.js +2 -1
  348. package/dist/hooks/spatial-grid/floor-placed-elevation.d.ts.map +1 -1
  349. package/dist/hooks/spatial-grid/floor-placed-elevation.js +15 -1
  350. package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts +3 -2
  351. package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts.map +1 -1
  352. package/dist/hooks/spatial-grid/spatial-grid-manager.js +53 -66
  353. package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts +1612 -127
  354. package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts.map +1 -1
  355. package/dist/hooks/spatial-grid/spatial-grid-sync.js +86 -83
  356. package/dist/hooks/spatial-grid/support-host-patch.d.ts +1 -0
  357. package/dist/hooks/spatial-grid/support-host-patch.d.ts.map +1 -1
  358. package/dist/hooks/spatial-grid/support-host-patch.js +12 -5
  359. package/dist/index.d.ts +80 -13
  360. package/dist/index.d.ts.map +1 -1
  361. package/dist/index.js +75 -11
  362. package/dist/lib/__bench__/near-linear-walls.d.ts +2 -0
  363. package/dist/lib/__bench__/near-linear-walls.d.ts.map +1 -0
  364. package/dist/lib/__bench__/near-linear-walls.js +24 -0
  365. package/dist/lib/__bench__/structure-preview.bench.d.ts +2 -0
  366. package/dist/lib/__bench__/structure-preview.bench.d.ts.map +1 -0
  367. package/dist/lib/__bench__/structure-preview.bench.js +72 -0
  368. package/dist/lib/__fixtures__/mezzanine.d.ts +13968 -0
  369. package/dist/lib/__fixtures__/mezzanine.d.ts.map +1 -0
  370. package/dist/lib/__fixtures__/mezzanine.js +43 -0
  371. package/dist/lib/absorb-wall-separators.d.ts +4483 -0
  372. package/dist/lib/absorb-wall-separators.d.ts.map +1 -0
  373. package/dist/lib/absorb-wall-separators.js +65 -0
  374. package/dist/lib/angle-accumulator.d.ts +3 -0
  375. package/dist/lib/angle-accumulator.d.ts.map +1 -0
  376. package/dist/lib/angle-accumulator.js +13 -0
  377. package/dist/lib/artifact-store.d.ts +31 -0
  378. package/dist/lib/artifact-store.d.ts.map +1 -0
  379. package/dist/lib/artifact-store.js +42 -0
  380. package/dist/lib/assembly-stack.d.ts +54 -0
  381. package/dist/lib/assembly-stack.d.ts.map +1 -0
  382. package/dist/lib/assembly-stack.js +52 -0
  383. package/dist/lib/asset-storage.d.ts.map +1 -1
  384. package/dist/lib/asset-storage.js +3 -0
  385. package/dist/lib/canonical-opening-ring.d.ts +3 -0
  386. package/dist/lib/canonical-opening-ring.d.ts.map +1 -0
  387. package/dist/lib/canonical-opening-ring.js +14 -0
  388. package/dist/lib/ceiling-children.d.ts +8 -0
  389. package/dist/lib/ceiling-children.d.ts.map +1 -0
  390. package/dist/lib/ceiling-children.js +36 -0
  391. package/dist/lib/ceiling-surface.d.ts +40 -0
  392. package/dist/lib/ceiling-surface.d.ts.map +1 -0
  393. package/dist/lib/ceiling-surface.js +65 -0
  394. package/dist/lib/cutter-host.d.ts +5 -0
  395. package/dist/lib/cutter-host.d.ts.map +1 -0
  396. package/dist/lib/cutter-host.js +30 -0
  397. package/dist/lib/floor-construction-lift.d.ts +4 -0
  398. package/dist/lib/floor-construction-lift.d.ts.map +1 -0
  399. package/dist/lib/floor-construction-lift.js +54 -0
  400. package/dist/lib/floor-footprint-key.d.ts +3 -0
  401. package/dist/lib/floor-footprint-key.d.ts.map +1 -0
  402. package/dist/lib/floor-footprint-key.js +9 -0
  403. package/dist/lib/floor-footprint-name.d.ts +11 -0
  404. package/dist/lib/floor-footprint-name.d.ts.map +1 -0
  405. package/dist/lib/floor-footprint-name.js +52 -0
  406. package/dist/lib/floor-foundation-datum.d.ts +31 -0
  407. package/dist/lib/floor-foundation-datum.d.ts.map +1 -0
  408. package/dist/lib/floor-foundation-datum.js +226 -0
  409. package/dist/lib/floor-foundation-stack.d.ts +16 -0
  410. package/dist/lib/floor-foundation-stack.d.ts.map +1 -0
  411. package/dist/lib/floor-foundation-stack.js +214 -0
  412. package/dist/lib/floor-intent-changes.d.ts +10 -0
  413. package/dist/lib/floor-intent-changes.d.ts.map +1 -0
  414. package/dist/lib/floor-intent-changes.js +461 -0
  415. package/dist/lib/floor-opening-footprints.d.ts +24 -0
  416. package/dist/lib/floor-opening-footprints.d.ts.map +1 -0
  417. package/dist/lib/floor-opening-footprints.js +127 -0
  418. package/dist/lib/floor-opening-intent.d.ts +16 -0
  419. package/dist/lib/floor-opening-intent.d.ts.map +1 -0
  420. package/dist/lib/floor-opening-intent.js +82 -0
  421. package/dist/lib/floor-plate-id.d.ts +5 -0
  422. package/dist/lib/floor-plate-id.d.ts.map +1 -0
  423. package/dist/lib/floor-plate-id.js +20 -0
  424. package/dist/lib/floor-plate-paint.d.ts +8 -0
  425. package/dist/lib/floor-plate-paint.d.ts.map +1 -0
  426. package/dist/lib/floor-plate-paint.js +11 -0
  427. package/dist/lib/floor-plates.d.ts +211 -0
  428. package/dist/lib/floor-plates.d.ts.map +1 -0
  429. package/dist/lib/floor-plates.js +729 -0
  430. package/dist/lib/floor-room-faces.d.ts +5 -0
  431. package/dist/lib/floor-room-faces.d.ts.map +1 -0
  432. package/dist/lib/floor-room-faces.js +29 -0
  433. package/dist/lib/floor-step-finish.d.ts +49 -0
  434. package/dist/lib/floor-step-finish.d.ts.map +1 -0
  435. package/dist/lib/floor-step-finish.js +128 -0
  436. package/dist/lib/geometry-script-node.d.ts +82 -0
  437. package/dist/lib/geometry-script-node.d.ts.map +1 -0
  438. package/dist/lib/geometry-script-node.js +147 -0
  439. package/dist/lib/geometry-surfaces.d.ts +61 -0
  440. package/dist/lib/geometry-surfaces.d.ts.map +1 -0
  441. package/dist/lib/geometry-surfaces.js +156 -0
  442. package/dist/lib/item-slab-support.d.ts +14 -0
  443. package/dist/lib/item-slab-support.d.ts.map +1 -0
  444. package/dist/lib/item-slab-support.js +40 -0
  445. package/dist/lib/level-footprints.d.ts +23 -0
  446. package/dist/lib/level-footprints.d.ts.map +1 -0
  447. package/dist/lib/level-footprints.js +398 -0
  448. package/dist/lib/level-name.d.ts +7 -0
  449. package/dist/lib/level-name.d.ts.map +1 -1
  450. package/dist/lib/level-name.js +11 -3
  451. package/dist/lib/new-zone.d.ts +10 -0
  452. package/dist/lib/new-zone.d.ts.map +1 -0
  453. package/dist/lib/new-zone.js +10 -0
  454. package/dist/lib/node-ancestry.d.ts +30 -0
  455. package/dist/lib/node-ancestry.d.ts.map +1 -0
  456. package/dist/lib/node-ancestry.js +76 -0
  457. package/dist/lib/object-cuts.d.ts +11 -0
  458. package/dist/lib/object-cuts.d.ts.map +1 -0
  459. package/dist/lib/object-cuts.js +63 -0
  460. package/dist/lib/opening-floor-datum.d.ts +24 -0
  461. package/dist/lib/opening-floor-datum.d.ts.map +1 -0
  462. package/dist/lib/opening-floor-datum.js +145 -0
  463. package/dist/lib/own-floor-intent.d.ts +15 -0
  464. package/dist/lib/own-floor-intent.d.ts.map +1 -0
  465. package/dist/lib/own-floor-intent.js +201 -0
  466. package/dist/lib/plate-reference.d.ts +3 -0
  467. package/dist/lib/plate-reference.d.ts.map +1 -0
  468. package/dist/lib/plate-reference.js +91 -0
  469. package/dist/lib/plate-surface.d.ts +120 -0
  470. package/dist/lib/plate-surface.d.ts.map +1 -0
  471. package/dist/lib/plate-surface.js +725 -0
  472. package/dist/lib/polygon-boolean.d.ts +17 -0
  473. package/dist/lib/polygon-boolean.d.ts.map +1 -0
  474. package/dist/lib/polygon-boolean.js +195 -0
  475. package/dist/lib/polygon-label.d.ts +7 -0
  476. package/dist/lib/polygon-label.d.ts.map +1 -0
  477. package/dist/lib/polygon-label.js +94 -0
  478. package/dist/lib/room-drawn-floor.d.ts +29 -0
  479. package/dist/lib/room-drawn-floor.d.ts.map +1 -0
  480. package/dist/lib/room-drawn-floor.js +88 -0
  481. package/dist/lib/room-floor-choices.d.ts +11 -0
  482. package/dist/lib/room-floor-choices.d.ts.map +1 -0
  483. package/dist/lib/room-floor-choices.js +60 -0
  484. package/dist/lib/room-floor-feasibility.d.ts +25 -0
  485. package/dist/lib/room-floor-feasibility.d.ts.map +1 -0
  486. package/dist/lib/room-floor-feasibility.js +293 -0
  487. package/dist/lib/room-floor-plate.d.ts +3 -0
  488. package/dist/lib/room-floor-plate.d.ts.map +1 -0
  489. package/dist/lib/room-floor-plate.js +4 -0
  490. package/dist/lib/room-graph.d.ts +79 -0
  491. package/dist/lib/room-graph.d.ts.map +1 -0
  492. package/dist/lib/room-graph.js +1265 -0
  493. package/dist/lib/room-name.d.ts +10 -0
  494. package/dist/lib/room-name.d.ts.map +1 -0
  495. package/dist/lib/room-name.js +22 -0
  496. package/dist/lib/room-topology-index.d.ts +53 -5
  497. package/dist/lib/room-topology-index.d.ts.map +1 -1
  498. package/dist/lib/room-topology-index.js +176 -30
  499. package/dist/lib/room-vertical-placement.d.ts +12 -0
  500. package/dist/lib/room-vertical-placement.d.ts.map +1 -0
  501. package/dist/lib/room-vertical-placement.js +28 -0
  502. package/dist/lib/room-zone-adoption.d.ts +74 -0
  503. package/dist/lib/room-zone-adoption.d.ts.map +1 -0
  504. package/dist/lib/room-zone-adoption.js +150 -0
  505. package/dist/lib/setback-envelope.d.ts +73 -0
  506. package/dist/lib/setback-envelope.d.ts.map +1 -0
  507. package/dist/lib/setback-envelope.js +506 -0
  508. package/dist/lib/slab-polygon.d.ts.map +1 -1
  509. package/dist/lib/slab-polygon.js +33 -12
  510. package/dist/lib/slots.d.ts +20 -0
  511. package/dist/lib/slots.d.ts.map +1 -1
  512. package/dist/lib/slots.js +44 -0
  513. package/dist/lib/space-detection.d.ts +14 -94
  514. package/dist/lib/space-detection.d.ts.map +1 -1
  515. package/dist/lib/space-detection.js +244 -1616
  516. package/dist/lib/structure-commit.d.ts +38 -0
  517. package/dist/lib/structure-commit.d.ts.map +1 -0
  518. package/dist/lib/structure-commit.js +52 -0
  519. package/dist/lib/structure-kernel.d.ts +66 -0
  520. package/dist/lib/structure-kernel.d.ts.map +1 -0
  521. package/dist/lib/structure-kernel.js +735 -0
  522. package/dist/lib/structure-reconcile.d.ts +15 -0
  523. package/dist/lib/structure-reconcile.d.ts.map +1 -0
  524. package/dist/lib/structure-reconcile.js +218 -0
  525. package/dist/lib/terrain-contours.d.ts +29 -0
  526. package/dist/lib/terrain-contours.d.ts.map +1 -0
  527. package/dist/lib/terrain-contours.js +199 -0
  528. package/dist/lib/terrain-source-persisted.d.ts +42 -0
  529. package/dist/lib/terrain-source-persisted.d.ts.map +1 -0
  530. package/dist/lib/terrain-source-persisted.js +68 -0
  531. package/dist/lib/terrain-source.d.ts +2 -40
  532. package/dist/lib/terrain-source.d.ts.map +1 -1
  533. package/dist/lib/terrain-source.js +2 -68
  534. package/dist/lib/terrain-support-query.d.ts +83 -0
  535. package/dist/lib/terrain-support-query.d.ts.map +1 -0
  536. package/dist/lib/terrain-support-query.js +187 -0
  537. package/dist/lib/terrain-support.d.ts +1 -77
  538. package/dist/lib/terrain-support.d.ts.map +1 -1
  539. package/dist/lib/terrain-support.js +3 -181
  540. package/dist/lib/unit-containment.js +2 -2
  541. package/dist/lib/unit-report.d.ts.map +1 -1
  542. package/dist/lib/unit-report.js +5 -4
  543. package/dist/lib/zone-colors.d.ts +11 -0
  544. package/dist/lib/zone-colors.d.ts.map +1 -0
  545. package/dist/lib/zone-colors.js +32 -0
  546. package/dist/lib/zone-quantities.d.ts.map +1 -1
  547. package/dist/lib/zone-quantities.js +113 -223
  548. package/dist/material-library.d.ts +9 -1
  549. package/dist/material-library.d.ts.map +1 -1
  550. package/dist/material-library.js +550 -1
  551. package/dist/node-slots/block.d.ts +7 -0
  552. package/dist/node-slots/block.d.ts.map +1 -0
  553. package/dist/node-slots/block.js +27 -0
  554. package/dist/node-slots/cabinet.d.ts +4 -0
  555. package/dist/node-slots/cabinet.d.ts.map +1 -0
  556. package/dist/node-slots/cabinet.js +24 -0
  557. package/dist/node-slots/ceiling.d.ts +6 -0
  558. package/dist/node-slots/ceiling.d.ts.map +1 -0
  559. package/dist/node-slots/ceiling.js +7 -0
  560. package/dist/node-slots/column.d.ts +9 -0
  561. package/dist/node-slots/column.d.ts.map +1 -0
  562. package/dist/node-slots/column.js +24 -0
  563. package/dist/node-slots/door.d.ts +9 -0
  564. package/dist/node-slots/door.d.ts.map +1 -0
  565. package/dist/node-slots/door.js +20 -0
  566. package/dist/node-slots/duct.d.ts +5 -0
  567. package/dist/node-slots/duct.d.ts.map +1 -0
  568. package/dist/node-slots/duct.js +5 -0
  569. package/dist/node-slots/elevator.d.ts +9 -0
  570. package/dist/node-slots/elevator.d.ts.map +1 -0
  571. package/dist/node-slots/elevator.js +17 -0
  572. package/dist/node-slots/fence.d.ts +10 -0
  573. package/dist/node-slots/fence.d.ts.map +1 -0
  574. package/dist/node-slots/fence.js +23 -0
  575. package/dist/node-slots/index.d.ts +25 -0
  576. package/dist/node-slots/index.d.ts.map +1 -0
  577. package/dist/node-slots/index.js +92 -0
  578. package/dist/node-slots/lean-to-extension.d.ts +5 -0
  579. package/dist/node-slots/lean-to-extension.d.ts.map +1 -0
  580. package/dist/node-slots/lean-to-extension.js +15 -0
  581. package/dist/node-slots/procedural-item.d.ts +4 -0
  582. package/dist/node-slots/procedural-item.d.ts.map +1 -0
  583. package/dist/node-slots/procedural-item.js +3 -0
  584. package/dist/node-slots/roof-accessories.d.ts +9 -0
  585. package/dist/node-slots/roof-accessories.d.ts.map +1 -0
  586. package/dist/node-slots/roof-accessories.js +34 -0
  587. package/dist/node-slots/shelf.d.ts +9 -0
  588. package/dist/node-slots/shelf.d.ts.map +1 -0
  589. package/dist/node-slots/shelf.js +30 -0
  590. package/dist/node-slots/slab.d.ts +7 -0
  591. package/dist/node-slots/slab.d.ts.map +1 -0
  592. package/dist/node-slots/slab.js +21 -0
  593. package/dist/node-slots/stair.d.ts +8 -0
  594. package/dist/node-slots/stair.d.ts.map +1 -0
  595. package/dist/node-slots/stair.js +17 -0
  596. package/dist/node-slots/wall.d.ts +12 -0
  597. package/dist/node-slots/wall.d.ts.map +1 -0
  598. package/dist/node-slots/wall.js +55 -0
  599. package/dist/node-slots/window.d.ts +5 -0
  600. package/dist/node-slots/window.d.ts.map +1 -0
  601. package/dist/node-slots/window.js +11 -0
  602. package/dist/procedural-items/design-placement.d.ts +49 -0
  603. package/dist/procedural-items/design-placement.d.ts.map +1 -0
  604. package/dist/procedural-items/design-placement.js +129 -0
  605. package/dist/procedural-items/design.d.ts +261 -0
  606. package/dist/procedural-items/design.d.ts.map +1 -0
  607. package/dist/procedural-items/design.js +707 -0
  608. package/dist/procedural-items/fixtures.d.ts +464 -24
  609. package/dist/procedural-items/fixtures.d.ts.map +1 -1
  610. package/dist/procedural-items/index.d.ts +5 -0
  611. package/dist/procedural-items/index.d.ts.map +1 -1
  612. package/dist/procedural-items/index.js +5 -0
  613. package/dist/procedural-items/integration.d.ts +127 -6
  614. package/dist/procedural-items/integration.d.ts.map +1 -1
  615. package/dist/procedural-items/joints.d.ts +56 -0
  616. package/dist/procedural-items/joints.d.ts.map +1 -0
  617. package/dist/procedural-items/joints.js +251 -0
  618. package/dist/procedural-items/library-colors.d.ts +12 -0
  619. package/dist/procedural-items/library-colors.d.ts.map +1 -1
  620. package/dist/procedural-items/library-colors.js +37 -3
  621. package/dist/procedural-items/motion-controller.d.ts +29 -0
  622. package/dist/procedural-items/motion-controller.d.ts.map +1 -0
  623. package/dist/procedural-items/motion-controller.js +130 -0
  624. package/dist/procedural-items/node.d.ts +490 -24
  625. package/dist/procedural-items/node.d.ts.map +1 -1
  626. package/dist/procedural-items/query.d.ts +18 -1
  627. package/dist/procedural-items/query.d.ts.map +1 -1
  628. package/dist/procedural-items/query.js +78 -39
  629. package/dist/procedural-items/recipe.d.ts +258 -14
  630. package/dist/procedural-items/recipe.d.ts.map +1 -1
  631. package/dist/procedural-items/recipe.js +933 -61
  632. package/dist/procedural-items/section.d.ts +27 -0
  633. package/dist/procedural-items/section.d.ts.map +1 -0
  634. package/dist/procedural-items/section.js +237 -0
  635. package/dist/procedural-items/spatial.d.ts +21 -0
  636. package/dist/procedural-items/spatial.d.ts.map +1 -1
  637. package/dist/procedural-items/spatial.js +90 -0
  638. package/dist/registry/handles.d.ts +2 -0
  639. package/dist/registry/handles.d.ts.map +1 -1
  640. package/dist/registry/index.d.ts +6 -4
  641. package/dist/registry/index.d.ts.map +1 -1
  642. package/dist/registry/index.js +4 -2
  643. package/dist/registry/mechanism.d.ts +9 -0
  644. package/dist/registry/mechanism.d.ts.map +1 -0
  645. package/dist/registry/mechanism.js +21 -0
  646. package/dist/registry/registry.d.ts +6 -3
  647. package/dist/registry/registry.d.ts.map +1 -1
  648. package/dist/registry/registry.js +59 -22
  649. package/dist/registry/scene-api.d.ts +20 -0
  650. package/dist/registry/scene-api.d.ts.map +1 -1
  651. package/dist/registry/scene-api.js +26 -13
  652. package/dist/registry/subtree.d.ts +8 -0
  653. package/dist/registry/subtree.d.ts.map +1 -1
  654. package/dist/registry/subtree.js +53 -0
  655. package/dist/registry/types.d.ts +340 -11
  656. package/dist/registry/types.d.ts.map +1 -1
  657. package/dist/schema/__fixtures__/node-fixtures.d.ts.map +1 -1
  658. package/dist/schema/__fixtures__/node-fixtures.js +2 -0
  659. package/dist/schema/assembly.d.ts +153 -0
  660. package/dist/schema/assembly.d.ts.map +1 -0
  661. package/dist/schema/assembly.js +155 -0
  662. package/dist/schema/asset-url.d.ts +2 -1
  663. package/dist/schema/asset-url.d.ts.map +1 -1
  664. package/dist/schema/asset-url.js +5 -2
  665. package/dist/schema/base.d.ts +26 -0
  666. package/dist/schema/base.d.ts.map +1 -1
  667. package/dist/schema/base.js +2 -0
  668. package/dist/schema/collection-templates.d.ts +46 -0
  669. package/dist/schema/collection-templates.d.ts.map +1 -0
  670. package/dist/schema/collection-templates.js +14 -0
  671. package/dist/schema/collections.d.ts +7 -0
  672. package/dist/schema/collections.d.ts.map +1 -1
  673. package/dist/schema/cut.d.ts +29 -0
  674. package/dist/schema/cut.d.ts.map +1 -0
  675. package/dist/schema/cut.js +50 -0
  676. package/dist/schema/geometry-metadata.d.ts +51 -0
  677. package/dist/schema/geometry-metadata.d.ts.map +1 -0
  678. package/dist/schema/geometry-metadata.js +57 -0
  679. package/dist/schema/geometry-source.d.ts +250 -0
  680. package/dist/schema/geometry-source.d.ts.map +1 -0
  681. package/dist/schema/geometry-source.js +130 -0
  682. package/dist/schema/index.d.ts +19 -7
  683. package/dist/schema/index.d.ts.map +1 -1
  684. package/dist/schema/index.js +21 -5
  685. package/dist/schema/nodes/block.d.ts +26 -0
  686. package/dist/schema/nodes/block.d.ts.map +1 -1
  687. package/dist/schema/nodes/block.js +1 -1
  688. package/dist/schema/nodes/box-vent.d.ts +26 -0
  689. package/dist/schema/nodes/box-vent.d.ts.map +1 -1
  690. package/dist/schema/nodes/building.d.ts +26 -0
  691. package/dist/schema/nodes/building.d.ts.map +1 -1
  692. package/dist/schema/nodes/cabinet.d.ts +61 -9
  693. package/dist/schema/nodes/cabinet.d.ts.map +1 -1
  694. package/dist/schema/nodes/ceiling.d.ts +37 -0
  695. package/dist/schema/nodes/ceiling.d.ts.map +1 -1
  696. package/dist/schema/nodes/ceiling.js +8 -0
  697. package/dist/schema/nodes/chimney.d.ts +26 -0
  698. package/dist/schema/nodes/chimney.d.ts.map +1 -1
  699. package/dist/schema/nodes/column.d.ts +126 -0
  700. package/dist/schema/nodes/column.d.ts.map +1 -1
  701. package/dist/schema/nodes/column.js +2 -0
  702. package/dist/schema/nodes/construction-dimension.d.ts +26 -0
  703. package/dist/schema/nodes/construction-dimension.d.ts.map +1 -1
  704. package/dist/schema/nodes/cupola.d.ts +26 -0
  705. package/dist/schema/nodes/cupola.d.ts.map +1 -1
  706. package/dist/schema/nodes/curtain-wall.d.ts +5 -5
  707. package/dist/schema/nodes/door.d.ts +139 -20
  708. package/dist/schema/nodes/door.d.ts.map +1 -1
  709. package/dist/schema/nodes/door.js +18 -33
  710. package/dist/schema/nodes/dormer.d.ts +28 -2
  711. package/dist/schema/nodes/dormer.d.ts.map +1 -1
  712. package/dist/schema/nodes/downspout.d.ts +27 -1
  713. package/dist/schema/nodes/downspout.d.ts.map +1 -1
  714. package/dist/schema/nodes/duct-fitting.d.ts +27 -1
  715. package/dist/schema/nodes/duct-fitting.d.ts.map +1 -1
  716. package/dist/schema/nodes/duct-segment.d.ts +27 -1
  717. package/dist/schema/nodes/duct-segment.d.ts.map +1 -1
  718. package/dist/schema/nodes/duct-terminal.d.ts +26 -0
  719. package/dist/schema/nodes/duct-terminal.d.ts.map +1 -1
  720. package/dist/schema/nodes/elevator.d.ts +26 -0
  721. package/dist/schema/nodes/elevator.d.ts.map +1 -1
  722. package/dist/schema/nodes/eyebrow-vent.d.ts +26 -0
  723. package/dist/schema/nodes/eyebrow-vent.d.ts.map +1 -1
  724. package/dist/schema/nodes/fence-feature.d.ts +141 -0
  725. package/dist/schema/nodes/fence-feature.d.ts.map +1 -0
  726. package/dist/schema/nodes/fence-feature.js +21 -0
  727. package/dist/schema/nodes/fence.d.ts +186 -0
  728. package/dist/schema/nodes/fence.d.ts.map +1 -1
  729. package/dist/schema/nodes/fence.js +92 -7
  730. package/dist/schema/nodes/floor-opening.d.ts +61 -0
  731. package/dist/schema/nodes/floor-opening.d.ts.map +1 -0
  732. package/dist/schema/nodes/floor-opening.js +17 -0
  733. package/dist/schema/nodes/guide.d.ts +26 -0
  734. package/dist/schema/nodes/guide.d.ts.map +1 -1
  735. package/dist/schema/nodes/gutter.d.ts +26 -0
  736. package/dist/schema/nodes/gutter.d.ts.map +1 -1
  737. package/dist/schema/nodes/hvac-equipment.d.ts +26 -0
  738. package/dist/schema/nodes/hvac-equipment.d.ts.map +1 -1
  739. package/dist/schema/nodes/imported-mesh.d.ts +26 -0
  740. package/dist/schema/nodes/imported-mesh.d.ts.map +1 -1
  741. package/dist/schema/nodes/item.d.ts +153 -2
  742. package/dist/schema/nodes/item.d.ts.map +1 -1
  743. package/dist/schema/nodes/item.js +13 -0
  744. package/dist/schema/nodes/lean-to-extension.d.ts +26 -0
  745. package/dist/schema/nodes/lean-to-extension.d.ts.map +1 -1
  746. package/dist/schema/nodes/level.d.ts +27 -1
  747. package/dist/schema/nodes/level.d.ts.map +1 -1
  748. package/dist/schema/nodes/lineset.d.ts +26 -0
  749. package/dist/schema/nodes/lineset.d.ts.map +1 -1
  750. package/dist/schema/nodes/liquid-line.d.ts +26 -0
  751. package/dist/schema/nodes/liquid-line.d.ts.map +1 -1
  752. package/dist/schema/nodes/measurement.d.ts +26 -0
  753. package/dist/schema/nodes/measurement.d.ts.map +1 -1
  754. package/dist/schema/nodes/opening-types.d.ts +41 -0
  755. package/dist/schema/nodes/opening-types.d.ts.map +1 -0
  756. package/dist/schema/nodes/opening-types.js +48 -0
  757. package/dist/schema/nodes/pipe-fitting.d.ts +26 -0
  758. package/dist/schema/nodes/pipe-fitting.d.ts.map +1 -1
  759. package/dist/schema/nodes/pipe-segment.d.ts +26 -0
  760. package/dist/schema/nodes/pipe-segment.d.ts.map +1 -1
  761. package/dist/schema/nodes/pipe-trap.d.ts +26 -0
  762. package/dist/schema/nodes/pipe-trap.d.ts.map +1 -1
  763. package/dist/schema/nodes/ridge-vent.d.ts +26 -0
  764. package/dist/schema/nodes/ridge-vent.d.ts.map +1 -1
  765. package/dist/schema/nodes/roof-segment-walls.d.ts.map +1 -1
  766. package/dist/schema/nodes/roof-segment-walls.js +2 -1
  767. package/dist/schema/nodes/roof-segment.d.ts +30 -2
  768. package/dist/schema/nodes/roof-segment.d.ts.map +1 -1
  769. package/dist/schema/nodes/roof-segment.js +9 -0
  770. package/dist/schema/nodes/roof.d.ts +101 -0
  771. package/dist/schema/nodes/roof.d.ts.map +1 -1
  772. package/dist/schema/nodes/roof.js +6 -0
  773. package/dist/schema/nodes/scan.d.ts +26 -0
  774. package/dist/schema/nodes/scan.d.ts.map +1 -1
  775. package/dist/schema/nodes/separator.d.ts +50 -0
  776. package/dist/schema/nodes/separator.d.ts.map +1 -0
  777. package/dist/schema/nodes/separator.js +8 -0
  778. package/dist/schema/nodes/shelf.d.ts +26 -0
  779. package/dist/schema/nodes/shelf.d.ts.map +1 -1
  780. package/dist/schema/nodes/site.d.ts +192 -0
  781. package/dist/schema/nodes/site.d.ts.map +1 -1
  782. package/dist/schema/nodes/site.js +178 -1
  783. package/dist/schema/nodes/skylight.d.ts +30 -4
  784. package/dist/schema/nodes/skylight.d.ts.map +1 -1
  785. package/dist/schema/nodes/slab.d.ts +84 -0
  786. package/dist/schema/nodes/slab.d.ts.map +1 -1
  787. package/dist/schema/nodes/slab.js +37 -2
  788. package/dist/schema/nodes/solar-panel.d.ts +26 -0
  789. package/dist/schema/nodes/solar-panel.d.ts.map +1 -1
  790. package/dist/schema/nodes/spawn.d.ts +26 -0
  791. package/dist/schema/nodes/spawn.d.ts.map +1 -1
  792. package/dist/schema/nodes/stair-construction.d.ts +21 -0
  793. package/dist/schema/nodes/stair-construction.d.ts.map +1 -0
  794. package/dist/schema/nodes/stair-construction.js +13 -0
  795. package/dist/schema/nodes/stair-design-targets.d.ts +9 -0
  796. package/dist/schema/nodes/stair-design-targets.d.ts.map +1 -0
  797. package/dist/schema/nodes/stair-design-targets.js +7 -0
  798. package/dist/schema/nodes/stair-segment.d.ts +72 -4
  799. package/dist/schema/nodes/stair-segment.d.ts.map +1 -1
  800. package/dist/schema/nodes/stair-segment.js +13 -0
  801. package/dist/schema/nodes/stair.d.ts +119 -2
  802. package/dist/schema/nodes/stair.d.ts.map +1 -1
  803. package/dist/schema/nodes/stair.js +59 -2
  804. package/dist/schema/nodes/structural-grid.d.ts +26 -0
  805. package/dist/schema/nodes/structural-grid.d.ts.map +1 -1
  806. package/dist/schema/nodes/surface-hole-metadata.d.ts +3 -0
  807. package/dist/schema/nodes/surface-hole-metadata.d.ts.map +1 -1
  808. package/dist/schema/nodes/surface-hole-metadata.js +2 -1
  809. package/dist/schema/nodes/surface-paint-region.d.ts +14 -0
  810. package/dist/schema/nodes/surface-paint-region.d.ts.map +1 -0
  811. package/dist/schema/nodes/surface-paint-region.js +12 -0
  812. package/dist/schema/nodes/turbine-vent.d.ts +26 -0
  813. package/dist/schema/nodes/turbine-vent.d.ts.map +1 -1
  814. package/dist/schema/nodes/unit.d.ts +26 -0
  815. package/dist/schema/nodes/unit.d.ts.map +1 -1
  816. package/dist/schema/nodes/wall.d.ts +352 -61
  817. package/dist/schema/nodes/wall.d.ts.map +1 -1
  818. package/dist/schema/nodes/wall.js +185 -186
  819. package/dist/schema/nodes/window.d.ts +139 -20
  820. package/dist/schema/nodes/window.d.ts.map +1 -1
  821. package/dist/schema/nodes/window.js +12 -14
  822. package/dist/schema/nodes/zone.d.ts +69 -1
  823. package/dist/schema/nodes/zone.d.ts.map +1 -1
  824. package/dist/schema/nodes/zone.js +46 -0
  825. package/dist/schema/provenance.d.ts +118 -0
  826. package/dist/schema/provenance.d.ts.map +1 -0
  827. package/dist/schema/provenance.js +76 -0
  828. package/dist/schema/source-ref.d.ts +23 -0
  829. package/dist/schema/source-ref.d.ts.map +1 -0
  830. package/dist/schema/source-ref.js +29 -0
  831. package/dist/schema/types.d.ts +3317 -68
  832. package/dist/schema/types.d.ts.map +1 -1
  833. package/dist/schema/types.js +7 -0
  834. package/dist/services/alignment-anchors.d.ts +2 -1
  835. package/dist/services/alignment-anchors.d.ts.map +1 -1
  836. package/dist/services/alignment-anchors.js +9 -6
  837. package/dist/services/index.d.ts +1 -1
  838. package/dist/services/index.d.ts.map +1 -1
  839. package/dist/services/index.js +1 -1
  840. package/dist/services/level-height.d.ts.map +1 -1
  841. package/dist/services/level-height.js +6 -4
  842. package/dist/services/storey.d.ts +21 -1
  843. package/dist/services/storey.d.ts.map +1 -1
  844. package/dist/services/storey.js +94 -8
  845. package/dist/services/surface-hosting.d.ts.map +1 -1
  846. package/dist/services/surface-hosting.js +4 -1
  847. package/dist/store/actions/node-actions.d.ts +4563 -8
  848. package/dist/store/actions/node-actions.d.ts.map +1 -1
  849. package/dist/store/actions/node-actions.js +495 -174
  850. package/dist/store/derived-node-guard.d.ts +84 -0
  851. package/dist/store/derived-node-guard.d.ts.map +1 -0
  852. package/dist/store/derived-node-guard.js +586 -0
  853. package/dist/store/history-control.d.ts +34 -0
  854. package/dist/store/history-control.d.ts.map +1 -1
  855. package/dist/store/history-control.js +99 -1
  856. package/dist/store/history-drafts.d.ts +48 -0
  857. package/dist/store/history-drafts.d.ts.map +1 -0
  858. package/dist/store/history-drafts.js +403 -0
  859. package/dist/store/history-invalidation.d.ts.map +1 -1
  860. package/dist/store/history-invalidation.js +1 -0
  861. package/dist/store/item-interaction.d.ts +28 -0
  862. package/dist/store/item-interaction.d.ts.map +1 -0
  863. package/dist/store/item-interaction.js +34 -0
  864. package/dist/store/registered-node-defaults.d.ts +11 -0
  865. package/dist/store/registered-node-defaults.d.ts.map +1 -0
  866. package/dist/store/registered-node-defaults.js +25 -0
  867. package/dist/store/scene-annotations.d.ts +8969 -0
  868. package/dist/store/scene-annotations.d.ts.map +1 -0
  869. package/dist/store/scene-annotations.js +107 -0
  870. package/dist/store/use-interactive.d.ts +23 -1
  871. package/dist/store/use-interactive.d.ts.map +1 -1
  872. package/dist/store/use-interactive.js +128 -5
  873. package/dist/store/use-scene.d.ts +68 -12
  874. package/dist/store/use-scene.d.ts.map +1 -1
  875. package/dist/store/use-scene.js +416 -305
  876. package/dist/systems/elevator/elevator-opening-sync.d.ts.map +1 -1
  877. package/dist/systems/elevator/elevator-opening-sync.js +4 -6
  878. package/dist/systems/elevator/elevator-opening-system.d.ts.map +1 -1
  879. package/dist/systems/elevator/elevator-opening-system.js +12 -6
  880. package/dist/systems/elevator/elevator-service.d.ts.map +1 -1
  881. package/dist/systems/elevator/elevator-service.js +8 -3
  882. package/dist/systems/fence/fence-centerline.d.ts.map +1 -1
  883. package/dist/systems/fence/fence-centerline.js +6 -5
  884. package/dist/systems/fence/fence-features.d.ts +36 -0
  885. package/dist/systems/fence/fence-features.d.ts.map +1 -0
  886. package/dist/systems/fence/fence-features.js +105 -0
  887. package/dist/systems/fence/fence-spline.d.ts +8 -5
  888. package/dist/systems/fence/fence-spline.d.ts.map +1 -1
  889. package/dist/systems/fence/fence-spline.js +51 -16
  890. package/dist/systems/owned-floor-openings.d.ts +9 -0
  891. package/dist/systems/owned-floor-openings.d.ts.map +1 -0
  892. package/dist/systems/owned-floor-openings.js +326 -0
  893. package/dist/systems/reconcile-owned-floor-openings.d.ts +3 -0
  894. package/dist/systems/reconcile-owned-floor-openings.d.ts.map +1 -0
  895. package/dist/systems/reconcile-owned-floor-openings.js +25 -0
  896. package/dist/systems/slab/__fixtures__/doorway-steps.d.ts +8 -0
  897. package/dist/systems/slab/__fixtures__/doorway-steps.d.ts.map +1 -0
  898. package/dist/systems/slab/__fixtures__/doorway-steps.js +62 -0
  899. package/dist/systems/slab/__fixtures__/floor-step.d.ts +5636 -0
  900. package/dist/systems/slab/__fixtures__/floor-step.d.ts.map +1 -0
  901. package/dist/systems/slab/__fixtures__/floor-step.js +66 -0
  902. package/dist/systems/slab/__fixtures__/raised-room.d.ts +5775 -0
  903. package/dist/systems/slab/__fixtures__/raised-room.d.ts.map +1 -0
  904. package/dist/systems/slab/__fixtures__/raised-room.js +54 -0
  905. package/dist/systems/slab/ensure-slab-openings.d.ts +9 -0
  906. package/dist/systems/slab/ensure-slab-openings.d.ts.map +1 -0
  907. package/dist/systems/slab/ensure-slab-openings.js +41 -0
  908. package/dist/systems/slab/slab-support.d.ts +25 -6
  909. package/dist/systems/slab/slab-support.d.ts.map +1 -1
  910. package/dist/systems/slab/slab-support.js +471 -54
  911. package/dist/systems/stair/stair-base-elevation.d.ts +3 -0
  912. package/dist/systems/stair/stair-base-elevation.d.ts.map +1 -0
  913. package/dist/systems/stair/stair-base-elevation.js +49 -0
  914. package/dist/systems/stair/stair-clearance.d.ts +39 -0
  915. package/dist/systems/stair/stair-clearance.d.ts.map +1 -0
  916. package/dist/systems/stair/stair-clearance.js +508 -0
  917. package/dist/systems/stair/stair-construction.d.ts +37 -0
  918. package/dist/systems/stair/stair-construction.d.ts.map +1 -0
  919. package/dist/systems/stair/stair-construction.js +314 -0
  920. package/dist/systems/stair/stair-detail-budget.d.ts +13 -0
  921. package/dist/systems/stair/stair-detail-budget.d.ts.map +1 -0
  922. package/dist/systems/stair/stair-detail-budget.js +64 -0
  923. package/dist/systems/stair/stair-flight.d.ts +2 -2
  924. package/dist/systems/stair/stair-flight.d.ts.map +1 -1
  925. package/dist/systems/stair/stair-flight.js +4 -3
  926. package/dist/systems/stair/stair-floor-footprints.d.ts +7 -0
  927. package/dist/systems/stair/stair-floor-footprints.d.ts.map +1 -0
  928. package/dist/systems/stair/stair-floor-footprints.js +113 -0
  929. package/dist/systems/stair/stair-footprint.d.ts +3 -1
  930. package/dist/systems/stair/stair-footprint.d.ts.map +1 -1
  931. package/dist/systems/stair/stair-footprint.js +97 -44
  932. package/dist/systems/stair/stair-layout.d.ts +39 -0
  933. package/dist/systems/stair/stair-layout.d.ts.map +1 -0
  934. package/dist/systems/stair/stair-layout.js +58 -0
  935. package/dist/systems/stair/stair-opening-preview.d.ts +1612 -80
  936. package/dist/systems/stair/stair-opening-preview.d.ts.map +1 -1
  937. package/dist/systems/stair/stair-opening-sync.d.ts +8 -2
  938. package/dist/systems/stair/stair-opening-sync.d.ts.map +1 -1
  939. package/dist/systems/stair/stair-opening-sync.js +136 -315
  940. package/dist/systems/stair/stair-opening-system.d.ts.map +1 -1
  941. package/dist/systems/stair/stair-opening-system.js +40 -8
  942. package/dist/systems/stair/stair-presets.d.ts +276 -0
  943. package/dist/systems/stair/stair-presets.d.ts.map +1 -0
  944. package/dist/systems/stair/stair-presets.js +151 -0
  945. package/dist/systems/stair/stair-rail-budget.d.ts +6 -0
  946. package/dist/systems/stair/stair-rail-budget.d.ts.map +1 -0
  947. package/dist/systems/stair/stair-rail-budget.js +36 -0
  948. package/dist/systems/stair/stair-rail-path.d.ts +22 -0
  949. package/dist/systems/stair/stair-rail-path.d.ts.map +1 -0
  950. package/dist/systems/stair/stair-rail-path.js +497 -0
  951. package/dist/systems/stair/stair-rise-edit.d.ts +9 -0
  952. package/dist/systems/stair/stair-rise-edit.d.ts.map +1 -0
  953. package/dist/systems/stair/stair-rise-edit.js +46 -0
  954. package/dist/systems/stair/stair-rise-query.d.ts +24 -0
  955. package/dist/systems/stair/stair-rise-query.d.ts.map +1 -0
  956. package/dist/systems/stair/stair-rise-query.js +125 -0
  957. package/dist/systems/stair/stair-rise.d.ts +4 -19
  958. package/dist/systems/stair/stair-rise.d.ts.map +1 -1
  959. package/dist/systems/stair/stair-rise.js +8 -71
  960. package/dist/systems/stair/stair-sizing.d.ts +414 -0
  961. package/dist/systems/stair/stair-sizing.d.ts.map +1 -0
  962. package/dist/systems/stair/stair-sizing.js +255 -0
  963. package/dist/systems/stair/stair-sweep-edit.d.ts +7 -0
  964. package/dist/systems/stair/stair-sweep-edit.d.ts.map +1 -0
  965. package/dist/systems/stair/stair-sweep-edit.js +8 -0
  966. package/dist/systems/stair/stair-walking-line.d.ts +5 -0
  967. package/dist/systems/stair/stair-walking-line.d.ts.map +1 -0
  968. package/dist/systems/stair/stair-walking-line.js +91 -0
  969. package/dist/systems/stair/stair-winder.d.ts +36 -0
  970. package/dist/systems/stair/stair-winder.d.ts.map +1 -0
  971. package/dist/systems/stair/stair-winder.js +173 -0
  972. package/dist/systems/wall/wall-assembly.d.ts +234 -0
  973. package/dist/systems/wall/wall-assembly.d.ts.map +1 -0
  974. package/dist/systems/wall/wall-assembly.js +854 -0
  975. package/dist/systems/wall/wall-curve.d.ts +2 -1
  976. package/dist/systems/wall/wall-curve.d.ts.map +1 -1
  977. package/dist/systems/wall/wall-curve.js +21 -5
  978. package/dist/systems/wall/wall-finish.d.ts +102 -0
  979. package/dist/systems/wall/wall-finish.d.ts.map +1 -0
  980. package/dist/systems/wall/wall-finish.js +264 -0
  981. package/dist/systems/wall/wall-footprint.d.ts +3 -0
  982. package/dist/systems/wall/wall-footprint.d.ts.map +1 -1
  983. package/dist/systems/wall/wall-footprint.js +15 -13
  984. package/dist/systems/wall/wall-frame.d.ts +45 -0
  985. package/dist/systems/wall/wall-frame.d.ts.map +1 -0
  986. package/dist/systems/wall/wall-frame.js +162 -0
  987. package/dist/systems/wall/wall-layer-bands.d.ts +38 -0
  988. package/dist/systems/wall/wall-layer-bands.d.ts.map +1 -0
  989. package/dist/systems/wall/wall-layer-bands.js +109 -0
  990. package/dist/systems/wall/wall-merge.d.ts +20 -1
  991. package/dist/systems/wall/wall-merge.d.ts.map +1 -1
  992. package/dist/systems/wall/wall-merge.js +189 -18
  993. package/dist/systems/wall/wall-mitering.d.ts +6 -5
  994. package/dist/systems/wall/wall-mitering.d.ts.map +1 -1
  995. package/dist/systems/wall/wall-mitering.js +70 -20
  996. package/dist/systems/wall/wall-operations.d.ts +1 -1
  997. package/dist/systems/wall/wall-operations.d.ts.map +1 -1
  998. package/dist/systems/wall/wall-operations.js +2 -1
  999. package/dist/systems/wall/wall-paint-plan.d.ts +30 -0
  1000. package/dist/systems/wall/wall-paint-plan.d.ts.map +1 -0
  1001. package/dist/systems/wall/wall-paint-plan.js +167 -0
  1002. package/dist/systems/wall/wall-room-sides.d.ts +6 -0
  1003. package/dist/systems/wall/wall-room-sides.d.ts.map +1 -0
  1004. package/dist/systems/wall/wall-room-sides.js +14 -0
  1005. package/dist/systems/wall/wall-step-openings.d.ts +17 -0
  1006. package/dist/systems/wall/wall-step-openings.d.ts.map +1 -0
  1007. package/dist/systems/wall/wall-step-openings.js +32 -0
  1008. package/dist/systems/wall/wall-top.d.ts +2 -6
  1009. package/dist/systems/wall/wall-top.d.ts.map +1 -1
  1010. package/dist/systems/wall/wall-top.js +3 -9
  1011. package/dist/systems/wall/wall-topology.d.ts +21 -0
  1012. package/dist/systems/wall/wall-topology.d.ts.map +1 -1
  1013. package/dist/systems/wall/wall-topology.js +405 -4
  1014. package/dist/utils/clone-scene-graph.d.ts +6 -0
  1015. package/dist/utils/clone-scene-graph.d.ts.map +1 -1
  1016. package/dist/utils/clone-scene-graph.js +123 -15
  1017. package/dist/utils/ensure-scene-openings.d.ts +8965 -0
  1018. package/dist/utils/ensure-scene-openings.d.ts.map +1 -0
  1019. package/dist/utils/ensure-scene-openings.js +29 -0
  1020. package/dist/utils/exterior-threshold-migration.d.ts +4 -0
  1021. package/dist/utils/exterior-threshold-migration.d.ts.map +1 -0
  1022. package/dist/utils/exterior-threshold-migration.js +114 -0
  1023. package/dist/utils/floor-follow-migration.d.ts +3 -0
  1024. package/dist/utils/floor-follow-migration.d.ts.map +1 -0
  1025. package/dist/utils/floor-follow-migration.js +29 -0
  1026. package/dist/utils/floor-opening-migration.d.ts +13 -0
  1027. package/dist/utils/floor-opening-migration.d.ts.map +1 -0
  1028. package/dist/utils/floor-opening-migration.js +148 -0
  1029. package/dist/utils/floor-piece-adoption.d.ts +50 -0
  1030. package/dist/utils/floor-piece-adoption.d.ts.map +1 -0
  1031. package/dist/utils/floor-piece-adoption.js +182 -0
  1032. package/dist/utils/floor-plate-migration.d.ts +4507 -0
  1033. package/dist/utils/floor-plate-migration.d.ts.map +1 -0
  1034. package/dist/utils/floor-plate-migration.js +1360 -0
  1035. package/dist/utils/heal-plan-coordinates.d.ts +2 -0
  1036. package/dist/utils/heal-plan-coordinates.d.ts.map +1 -0
  1037. package/dist/utils/heal-plan-coordinates.js +69 -0
  1038. package/dist/utils/heal-scene-graph.d.ts +20 -6
  1039. package/dist/utils/heal-scene-graph.d.ts.map +1 -1
  1040. package/dist/utils/heal-scene-graph.js +61 -16
  1041. package/dist/utils/legacy-material-slots.d.ts +23 -0
  1042. package/dist/utils/legacy-material-slots.d.ts.map +1 -0
  1043. package/dist/utils/legacy-material-slots.js +120 -0
  1044. package/dist/utils/legacy-opening-datums.d.ts +11 -0
  1045. package/dist/utils/legacy-opening-datums.d.ts.map +1 -0
  1046. package/dist/utils/legacy-opening-datums.js +92 -0
  1047. package/dist/utils/legacy-wall-datums.d.ts +6 -0
  1048. package/dist/utils/legacy-wall-datums.d.ts.map +1 -0
  1049. package/dist/utils/legacy-wall-datums.js +199 -0
  1050. package/dist/utils/load-migration.d.ts +28 -0
  1051. package/dist/utils/load-migration.d.ts.map +1 -0
  1052. package/dist/utils/load-migration.js +89 -0
  1053. package/dist/utils/node-defaults.d.ts +37 -0
  1054. package/dist/utils/node-defaults.d.ts.map +1 -0
  1055. package/dist/utils/node-defaults.js +96 -0
  1056. package/dist/utils/normalize-legacy-structure.d.ts +2 -0
  1057. package/dist/utils/normalize-legacy-structure.d.ts.map +1 -0
  1058. package/dist/utils/normalize-legacy-structure.js +61 -0
  1059. package/dist/utils/omit-undefined.d.ts +2 -0
  1060. package/dist/utils/omit-undefined.d.ts.map +1 -0
  1061. package/dist/utils/omit-undefined.js +17 -0
  1062. package/dist/utils/owned-floor-opening-migration.d.ts +4489 -0
  1063. package/dist/utils/owned-floor-opening-migration.d.ts.map +1 -0
  1064. package/dist/utils/owned-floor-opening-migration.js +365 -0
  1065. package/dist/utils/reconcile-structure-on-load.d.ts +8965 -0
  1066. package/dist/utils/reconcile-structure-on-load.d.ts.map +1 -0
  1067. package/dist/utils/reconcile-structure-on-load.js +307 -0
  1068. package/dist/utils/room-zone-migration.d.ts +18 -0
  1069. package/dist/utils/room-zone-migration.d.ts.map +1 -0
  1070. package/dist/utils/room-zone-migration.js +258 -0
  1071. package/dist/utils/scene-migrations.d.ts +16 -1
  1072. package/dist/utils/scene-migrations.d.ts.map +1 -1
  1073. package/dist/utils/scene-migrations.js +15 -1
  1074. package/dist/utils/structure-id.d.ts +4 -0
  1075. package/dist/utils/structure-id.d.ts.map +1 -0
  1076. package/dist/utils/structure-id.js +115 -0
  1077. package/dist/utils/vertical-scene-migration.d.ts +8 -8
  1078. package/dist/utils/vertical-scene-migration.d.ts.map +1 -1
  1079. package/dist/utils/vertical-scene-migration.js +18 -8
  1080. package/dist/utils/wall-assembly-migration.d.ts +14 -0
  1081. package/dist/utils/wall-assembly-migration.d.ts.map +1 -0
  1082. package/dist/utils/wall-assembly-migration.js +23 -0
  1083. package/dist/utils/wall-face-migration.d.ts +23 -0
  1084. package/dist/utils/wall-face-migration.d.ts.map +1 -0
  1085. package/dist/utils/wall-face-migration.js +246 -0
  1086. package/dist/validation/opening-bounds.d.ts +36 -0
  1087. package/dist/validation/opening-bounds.d.ts.map +1 -0
  1088. package/dist/validation/opening-bounds.js +34 -0
  1089. package/dist/validation/validate-build-json.d.ts +2 -0
  1090. package/dist/validation/validate-build-json.d.ts.map +1 -1
  1091. package/dist/validation/validate-build-json.js +36 -1
  1092. package/package.json +36 -3
  1093. package/dist/services/surface-hosting-procedural-parity.fixtures.d.ts +0 -13
  1094. package/dist/services/surface-hosting-procedural-parity.fixtures.d.ts.map +0 -1
  1095. package/dist/services/surface-hosting-procedural-parity.fixtures.js +0 -4691
  1096. package/dist/services/surface-hosting-shelf-parity.fixtures.d.ts +0 -1060
  1097. package/dist/services/surface-hosting-shelf-parity.fixtures.d.ts.map +0 -1
  1098. package/dist/services/surface-hosting-shelf-parity.fixtures.js +0 -3127
@@ -1,8 +1,13 @@
1
+ import { planWallDeletion } from '../../commands/structure/plan-wall-deletion.js';
2
+ import { withoutFloorStepOverrideKeys } from '../../lib/floor-step-finish.js';
3
+ import { isSpaceDetectionPaused } from '../../lib/space-detection.js';
1
4
  import { nodeRegistry } from '../../registry/registry.js';
2
5
  import { validateNodeRelations } from '../../registry/validate-relations.js';
3
6
  import { AnyNode as AnyNodeSchema, createDefaultGuttersForSegment, createDefaultRidgeVentsForSegment, DownspoutNode as DownspoutNodeSchema, defaultDownspoutMetadata, generateId, getDefaultGutterSide, isAutoGutterEnabled, isAutoRidgeVentEnabled, isDefaultDownspoutNode, isDefaultGutterNode, isDefaultRidgeVentNode, parseNode, planAutomaticDownspouts, resolveAutomaticDownspoutLength, } from '../../schema/index.js';
7
+ import { Provenance } from '../../schema/provenance.js';
4
8
  import { constrainWallCurveOffsetToAvoidIntersections } from '../../systems/wall/wall-curve.js';
5
- import { areWallStylesCompatible, areWallsCollinearAcrossPoint, buildMergedWallAttachmentUpdates, getWallEndpointAtPoint, resolveMergedWallEndpoints, } from '../../systems/wall/wall-merge.js';
9
+ import { areWallStylesCompatible, areWallsCollinearAcrossPoint, buildMergedWallAttachmentUpdates, getWallEndpointAtPoint, mergeWallFaceRegions, planMergedZoneReferences, resolveMergedWallEndpoints, } from '../../systems/wall/wall-merge.js';
10
+ import { convertDerivedPlateHoleWrites, DERIVED_WRITER_TOKEN, derivedDeletionIntent, derivedDetachPatch, filterDerivedNodeWrites, isDerivedNode, } from '../derived-node-guard.js';
6
11
  import { activeSceneCommitNodeIds, addActiveSceneCommitNodeIds, runWithSceneCommitNodeIds, } from '../history-control.js';
7
12
  const DEFAULT_RIDGE_VENT_REFRESH_FIELDS = new Set([
8
13
  'roofType',
@@ -367,12 +372,42 @@ function warnSanitizedNodeMutation(mutation, nodeId, issues) {
367
372
  // A broken diagnostic sink must not interrupt a node mutation either.
368
373
  }
369
374
  }
375
+ /**
376
+ * Source ids cannot be repaired the way the numeric fallback repairs a value:
377
+ * any fix would drop or rewrite them (D5). A write that sets an invalid
378
+ * `provenance` throws, whatever the node's kind (a plain plugin kind never
379
+ * reaches a schema that knows the field), so the mutation applies nothing.
380
+ */
381
+ function assertProvenanceWrite(nodeId, value) {
382
+ if (value === undefined)
383
+ return;
384
+ const parsed = Provenance.safeParse(value);
385
+ if (parsed.success)
386
+ return;
387
+ const issue = parsed.error.issues[0];
388
+ const at = ['provenance', ...(issue?.path ?? [])].join('.');
389
+ throw new Error(`Node "${nodeId}": provenance refused at ${at}: ${issue?.message}`);
390
+ }
391
+ /**
392
+ * A strict kind parses everything but `provenance`, which core checks on write
393
+ * and carries verbatim: a stored over-cap value (kept at load) must not make
394
+ * the node uneditable, and a schema that never declared the base field must
395
+ * not drop it.
396
+ */
397
+ function parseStrict(schema, candidate) {
398
+ if (!Object.hasOwn(candidate, 'provenance'))
399
+ return schema.parse(candidate);
400
+ const { provenance, ...rest } = candidate;
401
+ const parsed = schema.parse(rest);
402
+ return provenance === undefined ? parsed : { ...parsed, provenance };
403
+ }
370
404
  function parseCreatedNode(node, parentId) {
371
405
  const candidate = { ...node, parentId };
406
+ assertProvenanceWrite(candidate.id, candidate.provenance);
372
407
  const registered = nodeRegistry.get(candidate.type)?.schema;
373
408
  // Generated definitions must reject invalid geometry instead of retaining a failed parse.
374
409
  if (registered?.meta?.()?.strictMutations === true)
375
- return registered.parse(candidate);
410
+ return parseStrict(registered, candidate);
376
411
  const parsed = parseNode(candidate);
377
412
  if (parsed.success)
378
413
  return parsed.data;
@@ -398,6 +433,9 @@ function mergeNodeUpdate(currentNode, patch) {
398
433
  return merged;
399
434
  }
400
435
  function parseUpdatedNode(currentNode, data) {
436
+ // Only a write of the field is checked: a stored over-cap value stays editable.
437
+ if (Object.hasOwn(data, 'provenance'))
438
+ assertProvenanceWrite(currentNode.id, data.provenance);
401
439
  const candidate = mergeNodeUpdate(currentNode, data);
402
440
  // Graph links survive schemas that omit children; only an explicit patch may change them.
403
441
  const preserveChildren = (updated) => !Object.hasOwn(data, 'children') &&
@@ -408,7 +446,7 @@ function parseUpdatedNode(currentNode, data) {
408
446
  const registered = nodeRegistry.get(currentNode.type)?.schema;
409
447
  // Generated definitions must reject invalid geometry instead of retaining a failed parse.
410
448
  if (registered?.meta?.()?.strictMutations === true)
411
- return preserveChildren(registered.parse(candidate));
449
+ return preserveChildren(parseStrict(registered, candidate));
412
450
  const parsed = parseNode(candidate);
413
451
  if (parsed.success)
414
452
  return preserveChildren(parsed.data);
@@ -788,6 +826,11 @@ function buildWallMergePlans(nodes, idsToDelete) {
788
826
  continue;
789
827
  }
790
828
  const { start, end } = resolveMergedWallEndpoints(primary, secondary, junction);
829
+ // A heal that would repaint a room or overflow a side's regions leaves the walls split.
830
+ const mergedFaceRegions = mergeWallFaceRegions([primary, secondary], start, end);
831
+ const zoneUpdates = planMergedZoneReferences(nodes, primary, secondary, start, end);
832
+ if (!(mergedFaceRegions && zoneUpdates))
833
+ continue;
791
834
  const mergedChildren = Array.from(new Set([...(primary.children ?? []), ...(secondary.children ?? [])]));
792
835
  const attachmentUpdates = buildMergedWallAttachmentUpdates(primary, secondary, primary.id, start, end, nodes);
793
836
  mergePlans.push({
@@ -796,7 +839,9 @@ function buildWallMergePlans(nodes, idsToDelete) {
796
839
  mergedStart: start,
797
840
  mergedEnd: end,
798
841
  mergedChildren,
842
+ mergedFaceRegions: mergedFaceRegions.length > 0 ? mergedFaceRegions : undefined,
799
843
  attachmentUpdates,
844
+ zoneUpdates,
800
845
  });
801
846
  usedWallIds.add(primary.id);
802
847
  usedWallIds.add(secondary.id);
@@ -804,17 +849,21 @@ function buildWallMergePlans(nodes, idsToDelete) {
804
849
  }
805
850
  return mergePlans;
806
851
  }
807
- const createNodesActionImpl = (set, get, ops) => {
852
+ const createNodesActionImpl = (set, get, ops, options) => {
808
853
  if (get().readOnly)
809
854
  return;
855
+ ops = filterDerivedNodeWrites(get().nodes, { create: ops }, options).create;
856
+ if (!ops.length)
857
+ return;
810
858
  const extraNodesToMarkDirty = new Set();
811
859
  const extraNodesToClearDirty = new Set();
812
860
  set((state) => {
813
861
  const nextNodes = { ...state.nodes };
814
862
  const nextRootIds = [...state.rootNodeIds];
815
- for (const { node, parentId } of ops) {
863
+ const nextCollections = { ...state.collections };
864
+ for (const { node, parentId, collectionIds } of ops) {
816
865
  const effectiveParentId = parentId ?? node.parentId ?? null;
817
- const newNode = parseCreatedNode(node, effectiveParentId);
866
+ const newNode = joinCollections(nextCollections, parseCreatedNode(node, effectiveParentId), collectionIds);
818
867
  nextNodes[newNode.id] = newNode;
819
868
  // 2. Update the Parent's children list. We append to ANY container
820
869
  // parent (kind has `children` in its schema) — if the field is
@@ -853,7 +902,12 @@ const createNodesActionImpl = (set, get, ops) => {
853
902
  }
854
903
  refreshDefaultGuttersForRoofIds(nextNodes, refreshedRoofIds, extraNodesToMarkDirty, extraNodesToClearDirty);
855
904
  addActiveSceneCommitNodeIds([...extraNodesToMarkDirty, ...extraNodesToClearDirty]);
856
- return { nodes: nextNodes, rootNodeIds: nextRootIds };
905
+ const joined = Object.entries(nextCollections).some(([id, collection]) => state.collections[id] !== collection);
906
+ return {
907
+ nodes: nextNodes,
908
+ rootNodeIds: nextRootIds,
909
+ ...(joined && { collections: nextCollections }),
910
+ };
857
911
  });
858
912
  // 4. System Sync
859
913
  ops.forEach(({ node, parentId }) => {
@@ -868,11 +922,55 @@ const createNodesActionImpl = (set, get, ops) => {
868
922
  for (const id of extraNodesToClearDirty)
869
923
  get().clearDirty(id);
870
924
  };
871
- const applyNodeChangesActionImpl = (set, get, changes) => {
925
+ /**
926
+ * A created node joins the collections it is given, or an item those its mirror
927
+ * names, so a duplicate or a same-project paste stays a member; ids of
928
+ * collections this scene lacks (a paste from another project) are dropped.
929
+ * Writes the joined collections into `collections` and returns the node, an
930
+ * item with its mirror set to what it joined.
931
+ */
932
+ export function joinCollections(collections, node, requested = node.type === 'item' ? node.collectionIds : undefined) {
933
+ const collectionIds = (requested ?? []).filter((id) => collections[id]);
934
+ for (const id of collectionIds) {
935
+ const collection = collections[id];
936
+ if (!collection.nodeIds.includes(node.id))
937
+ collections[id] = { ...collection, nodeIds: [...collection.nodeIds, node.id] };
938
+ }
939
+ if (node.type !== 'item' || sameIds(node.collectionIds ?? [], collectionIds))
940
+ return node;
941
+ return { ...node, collectionIds };
942
+ }
943
+ function sameIds(left, right) {
944
+ return left.length === right.length && left.every((id, index) => right[index] === id);
945
+ }
946
+ /** The collections `id` belongs to: membership lives on the collection for every kind. */
947
+ export function collectionIdsOf(collections, id) {
948
+ return Object.values(collections)
949
+ .filter((collection) => collection.nodeIds.includes(id))
950
+ .map((collection) => collection.id);
951
+ }
952
+ /** Membership lives on the collection; only items mirror it, so every collection is checked. */
953
+ function removeFromCollections(collections, id) {
954
+ for (const [collectionId, collection] of Object.entries(collections)) {
955
+ if (collection.nodeIds.includes(id))
956
+ collections[collectionId] = {
957
+ ...collection,
958
+ nodeIds: collection.nodeIds.filter((nodeId) => nodeId !== id),
959
+ };
960
+ }
961
+ }
962
+ const applyNodeChangesActionImpl = (set, get, changes, options) => {
872
963
  if (get().readOnly)
873
964
  return;
965
+ changes = convertDerivedPlateHoleWrites(get().nodes, changes, options);
966
+ changes = filterDerivedNodeWrites(get().nodes, changes, options);
967
+ if (!changes.create?.length && !changes.update?.length && !changes.delete?.length)
968
+ return;
874
969
  const createOps = changes.create ?? [];
875
- const updateOps = changes.update ?? [];
970
+ const deletionIntent = options?.derivedWriter === DERIVED_WRITER_TOKEN
971
+ ? []
972
+ : derivedDeletionIntent(get().nodes, changes.delete ?? []);
973
+ const updateOps = [...(changes.update ?? []), ...deletionIntent];
876
974
  const deleteOps = changes.delete ?? [];
877
975
  const nodesToMarkDirty = new Set();
878
976
  const nodesToClearDirty = new Set();
@@ -923,9 +1021,9 @@ const applyNodeChangesActionImpl = (set, get, changes) => {
923
1021
  }
924
1022
  nodesToMarkDirty.add(id);
925
1023
  }
926
- for (const { node, parentId } of createOps) {
1024
+ for (const { node, parentId, collectionIds } of createOps) {
927
1025
  const effectiveParentId = parentId ?? node.parentId ?? null;
928
- const newNode = parseCreatedNode(node, effectiveParentId);
1026
+ const newNode = joinCollections(nextCollections, parseCreatedNode(node, effectiveParentId), collectionIds);
929
1027
  nextNodes[newNode.id] = newNode;
930
1028
  nodesToMarkDirty.add(newNode.id);
931
1029
  if (newNode.type === 'roof-segment' && effectiveParentId) {
@@ -984,17 +1082,7 @@ const applyNodeChangesActionImpl = (set, get, changes) => {
984
1082
  }
985
1083
  }
986
1084
  resolvedRootIds = resolvedRootIds.filter((rootId) => rootId !== id);
987
- if ('collectionIds' in node && node.collectionIds) {
988
- for (const collectionId of node.collectionIds) {
989
- const collection = nextCollections[collectionId];
990
- if (collection) {
991
- nextCollections[collectionId] = {
992
- ...collection,
993
- nodeIds: collection.nodeIds.filter((nodeId) => nodeId !== id),
994
- };
995
- }
996
- }
997
- }
1085
+ removeFromCollections(nextCollections, id);
998
1086
  delete nextNodes[id];
999
1087
  }
1000
1088
  refreshDefaultGuttersForRoofIds(nextNodes, roofsToRefresh, nodesToMarkDirty, nodesToClearDirty);
@@ -1022,9 +1110,17 @@ const applyNodeChangesActionImpl = (set, get, changes) => {
1022
1110
  }
1023
1111
  }
1024
1112
  };
1025
- const updateNodesActionImpl = (set, get, updates) => {
1113
+ const updateNodesActionImpl = (set, get, updates, options, deferDirty = true) => {
1026
1114
  if (get().readOnly)
1027
1115
  return;
1116
+ const converted = convertDerivedPlateHoleWrites(get().nodes, { update: updates }, options);
1117
+ if (converted.create?.length || converted.delete?.length) {
1118
+ applyNodeChangesActionImpl(set, get, converted, options);
1119
+ return;
1120
+ }
1121
+ updates = filterDerivedNodeWrites(get().nodes, { update: converted.update ?? [] }, options).update;
1122
+ if (!updates.length)
1123
+ return;
1028
1124
  const parentsToUpdate = new Set();
1029
1125
  const extraNodesToUpdate = new Set();
1030
1126
  const extraNodesToDelete = new Set();
@@ -1101,6 +1197,13 @@ const updateNodesActionImpl = (set, get, updates) => {
1101
1197
  ]);
1102
1198
  return { nodes: nextNodes };
1103
1199
  });
1200
+ if (!deferDirty) {
1201
+ for (const id of [...updates.map((u) => u.id), ...parentsToUpdate, ...extraNodesToUpdate])
1202
+ get().markDirty(id);
1203
+ for (const id of extraNodesToDelete)
1204
+ get().clearDirty(id);
1205
+ return;
1206
+ }
1104
1207
  // Batch dirty-marking into a single RAF to avoid redundant callbacks during rapid updates
1105
1208
  for (const u of updates) {
1106
1209
  // Visibility is applied by React before the deferred dirty callback. Mark
@@ -1130,175 +1233,309 @@ const updateNodesActionImpl = (set, get, updates) => {
1130
1233
  pendingRafId = null;
1131
1234
  });
1132
1235
  };
1133
- const deleteNodesActionImpl = (set, get, ids) => {
1134
- if (get().readOnly)
1135
- return;
1236
+ /**
1237
+ * The delete store action's planner, without committing: the requested ids,
1238
+ * their `children` subtrees and kind `onDeleteCascade` companions, collinear
1239
+ * walls merged across a deleted junction, the separators that keep two rooms
1240
+ * apart when the wall between them goes, derived-construction deletion intent,
1241
+ * neighbour patches, support and unit cleanup, and the default gutter and
1242
+ * downspout refresh.
1243
+ *
1244
+ * The refresh mints gutters, downspouts and outlets with random ids, and which
1245
+ * existing defaults it keeps can depend on them. With `mintDefaults: false`
1246
+ * (a preview, such as the MCP patch dry run) the refresh does not run: the
1247
+ * existing defaults it would touch are listed in `unsettledIds`, and the plan
1248
+ * is deterministic and equals the commit for every other existing id. The
1249
+ * delete action mints.
1250
+ */
1251
+ export function planNodeDeletion(scene, ids, { mintDefaults = true, options, wallDeletionPlan, } = {}) {
1136
1252
  const parentsToMarkDirty = new Set();
1137
1253
  const nodesToMarkDirty = new Set();
1138
1254
  const deletedIds = new Set();
1139
- const mergePlans = buildWallMergePlans(get().nodes, ids);
1255
+ const mergePlans = buildWallMergePlans(scene.nodes, ids);
1140
1256
  const requestedDeleteIds = new Set(ids);
1141
- set((state) => {
1142
- const nextNodes = { ...state.nodes };
1143
- const nextCollections = { ...state.collections };
1144
- let nextRootIds = [...state.rootNodeIds];
1145
- // Collect all ids to delete (the requested ids + all their descendants) before
1146
- // mutating anything, so the recursive walk reads consistent state.
1147
- const allIds = new Set();
1148
- const collect = (id) => {
1149
- if (allIds.has(id))
1150
- return;
1151
- allIds.add(id);
1152
- const node = nextNodes[id];
1153
- const cascadeDeletes = node
1154
- ? nodeRegistry
1155
- .get(node.type)
1156
- ?.parametrics?.onDeleteCascade?.(node, nextNodes, allIds, requestedDeleteIds)
1157
- : null;
1158
- if (cascadeDeletes) {
1159
- for (const companionId of cascadeDeletes)
1160
- collect(companionId);
1257
+ // Deleting derived construction is an intent edit ("this room has no
1258
+ // ceiling"), not a refusal — the reconciler must not rebuild it.
1259
+ const deletionIntent = options?.derivedWriter === DERIVED_WRITER_TOKEN ? [] : derivedDeletionIntent(scene.nodes, ids);
1260
+ // A preview names the separators a room-preserving delete adds without random ids.
1261
+ let previewCount = 0;
1262
+ const previewId = (kind) => {
1263
+ let id;
1264
+ do
1265
+ id = `${kind}_preview${++previewCount}`;
1266
+ while (id in scene.nodes);
1267
+ return id;
1268
+ };
1269
+ const nextNodes = { ...scene.nodes };
1270
+ const nextCollections = { ...scene.collections };
1271
+ let nextRootIds = [...scene.rootNodeIds];
1272
+ // Collect all ids to delete (the requested ids + all their descendants) before
1273
+ // mutating anything, so the recursive walk reads consistent state.
1274
+ const allIds = new Set();
1275
+ const collect = (id) => {
1276
+ if (allIds.has(id))
1277
+ return;
1278
+ allIds.add(id);
1279
+ const node = nextNodes[id];
1280
+ const cascadeDeletes = node
1281
+ ? nodeRegistry
1282
+ .get(node.type)
1283
+ ?.parametrics?.onDeleteCascade?.(node, nextNodes, allIds, requestedDeleteIds)
1284
+ : null;
1285
+ if (cascadeDeletes) {
1286
+ for (const companionId of cascadeDeletes)
1287
+ collect(companionId);
1288
+ }
1289
+ if (node && 'children' in node) {
1290
+ for (const cid of node.children)
1291
+ collect(cid);
1292
+ }
1293
+ };
1294
+ for (const id of ids)
1295
+ collect(id);
1296
+ if (wallDeletionPlan ||
1297
+ (options?.derivedWriter !== DERIVED_WRITER_TOKEN && !isSpaceDetectionPaused())) {
1298
+ const plan = wallDeletionPlan ??
1299
+ planWallDeletion(scene.nodes, {
1300
+ nodeIds: [...allIds],
1301
+ mintId: mintDefaults ? generateId : previewId,
1302
+ });
1303
+ for (const change of plan.changes) {
1304
+ if (change.op === 'delete')
1305
+ collect(change.id);
1306
+ else if (change.op === 'update') {
1307
+ const current = nextNodes[change.id];
1308
+ if (current)
1309
+ nextNodes[change.id] = parseUpdatedNode(current, change.data);
1310
+ nodesToMarkDirty.add(change.id);
1161
1311
  }
1162
- if (node && 'children' in node) {
1163
- for (const cid of node.children)
1164
- collect(cid);
1312
+ else {
1313
+ const node = change.node;
1314
+ nextNodes[node.id] = node;
1315
+ nodesToMarkDirty.add(node.id);
1316
+ const parent = node.parentId ? nextNodes[node.parentId] : undefined;
1317
+ if (parent && 'children' in parent && Array.isArray(parent.children)) {
1318
+ nextNodes[parent.id] = { ...parent, children: [...parent.children, node.id] };
1319
+ parentsToMarkDirty.add(parent.id);
1320
+ }
1165
1321
  }
1166
- };
1167
- for (const id of ids)
1168
- collect(id);
1169
- for (const plan of mergePlans) {
1170
- allIds.add(plan.secondaryWallId);
1171
1322
  }
1172
- const affectedRoofIds = new Set();
1173
- for (const id of allIds) {
1174
- const node = nextNodes[id];
1175
- addLeanToHostRoofId(node, nextNodes, affectedRoofIds);
1176
- if (node?.type === 'roof-segment' && node.parentId) {
1177
- affectedRoofIds.add(node.parentId);
1178
- }
1323
+ }
1324
+ for (const plan of mergePlans) {
1325
+ allIds.add(plan.secondaryWallId);
1326
+ }
1327
+ const affectedRoofIds = new Set();
1328
+ for (const id of allIds) {
1329
+ const node = nextNodes[id];
1330
+ addLeanToHostRoofId(node, nextNodes, affectedRoofIds);
1331
+ if (node?.type === 'roof-segment' && node.parentId) {
1332
+ affectedRoofIds.add(node.parentId);
1179
1333
  }
1180
- for (const id of allIds)
1181
- deletedIds.add(id);
1182
- // Let each deleted kind undo what it imposed on its neighbours (e.g. an
1183
- // auto-inserted elbow re-extends the duct runs it trimmed back onto the
1184
- // corner it replaced). Read against pre-deletion `nextNodes`; skip
1185
- // patches that target a node also being deleted.
1186
- for (const id of allIds) {
1187
- const node = nextNodes[id];
1188
- if (!node)
1334
+ }
1335
+ for (const id of allIds)
1336
+ deletedIds.add(id);
1337
+ // Let each deleted kind undo what it imposed on its neighbours (e.g. an
1338
+ // auto-inserted elbow re-extends the duct runs it trimmed back onto the
1339
+ // corner it replaced). Read against pre-deletion `nextNodes`; skip
1340
+ // patches that target a node also being deleted.
1341
+ for (const id of allIds) {
1342
+ const node = nextNodes[id];
1343
+ if (!node)
1344
+ continue;
1345
+ const onDelete = nodeRegistry.get(node.type)?.parametrics?.onDelete;
1346
+ if (!onDelete)
1347
+ continue;
1348
+ for (const { id: targetId, data } of onDelete(node, nextNodes, allIds, requestedDeleteIds)) {
1349
+ if (allIds.has(targetId))
1189
1350
  continue;
1190
- const onDelete = nodeRegistry.get(node.type)?.parametrics?.onDelete;
1191
- if (!onDelete)
1351
+ const target = nextNodes[targetId];
1352
+ if (!target)
1192
1353
  continue;
1193
- for (const { id: targetId, data } of onDelete(node, nextNodes, allIds, requestedDeleteIds)) {
1194
- if (allIds.has(targetId))
1195
- continue;
1196
- const target = nextNodes[targetId];
1197
- if (!target)
1198
- continue;
1199
- nextNodes[targetId] = { ...target, ...data };
1200
- nodesToMarkDirty.add(targetId);
1201
- }
1354
+ nextNodes[targetId] = { ...target, ...data };
1355
+ nodesToMarkDirty.add(targetId);
1202
1356
  }
1203
- for (const plan of mergePlans) {
1204
- const primaryWall = nextNodes[plan.primaryWallId];
1205
- if (!(primaryWall && primaryWall.type === 'wall') || allIds.has(plan.primaryWallId)) {
1357
+ }
1358
+ for (const plan of mergePlans) {
1359
+ const primaryWall = nextNodes[plan.primaryWallId];
1360
+ if (!(primaryWall && primaryWall.type === 'wall') || allIds.has(plan.primaryWallId)) {
1361
+ continue;
1362
+ }
1363
+ const { faceRegions: _regions, ...keptWall } = primaryWall;
1364
+ nextNodes[plan.primaryWallId] = {
1365
+ ...keptWall,
1366
+ ...(plan.mergedFaceRegions ? { faceRegions: plan.mergedFaceRegions } : {}),
1367
+ start: plan.mergedStart,
1368
+ end: plan.mergedEnd,
1369
+ children: plan.mergedChildren,
1370
+ };
1371
+ nodesToMarkDirty.add(plan.primaryWallId);
1372
+ for (const update of plan.zoneUpdates) {
1373
+ if (allIds.has(update.id))
1206
1374
  continue;
1207
- }
1208
- nextNodes[plan.primaryWallId] = {
1209
- ...primaryWall,
1210
- start: plan.mergedStart,
1211
- end: plan.mergedEnd,
1212
- children: plan.mergedChildren,
1213
- };
1214
- nodesToMarkDirty.add(plan.primaryWallId);
1215
- for (const update of plan.attachmentUpdates) {
1216
- if (allIds.has(update.id))
1217
- continue;
1218
- const child = nextNodes[update.id];
1219
- if (!child)
1220
- continue;
1221
- nextNodes[update.id] = { ...child, ...update.data };
1222
- nodesToMarkDirty.add(update.id);
1223
- }
1375
+ const zone = nextNodes[update.id];
1376
+ if (zone)
1377
+ nextNodes[update.id] = { ...zone, ...update.data };
1224
1378
  }
1225
- // Deleting a slab strips `supportSlabId` / `deckSlabId` references from
1226
- // surviving nodes in the same undo commit (mirrors the collectionIds
1227
- // cleanup below), so those nodes re-elect their support / re-derive
1228
- // their rise. Deletion is the ONLY writer — a host merely reshaped away
1229
- // keeps the field and the read path falls back, letting hosting resume
1230
- // if the slab returns.
1231
- const deletedSlabIds = new Set();
1232
- for (const id of allIds) {
1233
- if (nextNodes[id]?.type === 'slab')
1234
- deletedSlabIds.add(id);
1379
+ for (const update of plan.attachmentUpdates) {
1380
+ if (allIds.has(update.id))
1381
+ continue;
1382
+ const child = nextNodes[update.id];
1383
+ if (!child)
1384
+ continue;
1385
+ nextNodes[update.id] = { ...child, ...update.data };
1386
+ nodesToMarkDirty.add(update.id);
1235
1387
  }
1236
- if (deletedSlabIds.size > 0) {
1237
- for (const [nodeId, node] of Object.entries(nextNodes)) {
1238
- if (allIds.has(nodeId))
1239
- continue;
1240
- const patch = {};
1241
- const hostId = node.supportSlabId;
1242
- if (hostId && deletedSlabIds.has(hostId))
1243
- patch.supportSlabId = undefined;
1244
- const deckId = node.deckSlabId;
1245
- if (deckId && deletedSlabIds.has(deckId))
1246
- patch.deckSlabId = undefined;
1247
- if (Object.keys(patch).length > 0) {
1248
- nextNodes[nodeId] = { ...node, ...patch };
1249
- nodesToMarkDirty.add(nodeId);
1250
- }
1388
+ }
1389
+ // Deleting a slab strips `supportSlabId` / `deckSlabId` references from
1390
+ // surviving nodes in the same undo commit (mirrors the collectionIds
1391
+ // cleanup below), so those nodes re-elect their support / re-derive
1392
+ // their rise. Deletion is the ONLY writer — a host merely reshaped away
1393
+ // keeps the field and the read path falls back, letting hosting resume
1394
+ // if the slab returns.
1395
+ const deletedSlabIds = new Set();
1396
+ for (const id of allIds) {
1397
+ if (nextNodes[id]?.type === 'slab')
1398
+ deletedSlabIds.add(id);
1399
+ }
1400
+ if (deletedSlabIds.size > 0) {
1401
+ for (const [nodeId, node] of Object.entries(nextNodes)) {
1402
+ if (allIds.has(nodeId))
1403
+ continue;
1404
+ const patch = {};
1405
+ const hostId = node.supportSlabId;
1406
+ if (hostId && deletedSlabIds.has(hostId))
1407
+ patch.supportSlabId = undefined;
1408
+ const deckId = node.deckSlabId;
1409
+ if (deckId && deletedSlabIds.has(deckId))
1410
+ patch.deckSlabId = undefined;
1411
+ if (Object.keys(patch).length > 0) {
1412
+ nextNodes[nodeId] = { ...node, ...patch };
1413
+ nodesToMarkDirty.add(nodeId);
1251
1414
  }
1252
1415
  }
1253
- const deletedZoneIds = new Set();
1254
- for (const id of allIds) {
1255
- if (nextNodes[id]?.type === 'zone')
1256
- deletedZoneIds.add(id);
1416
+ }
1417
+ // A deleted door takes its step paint with it, in the same undo step; every
1418
+ // other doorway keeps its own.
1419
+ for (const node of Object.values(nextNodes)) {
1420
+ if (node.type !== 'zone' || allIds.has(node.id))
1421
+ continue;
1422
+ const pruned = withoutFloorStepOverrideKeys(node, allIds);
1423
+ if (!pruned)
1424
+ continue;
1425
+ nextNodes[node.id] = pruned;
1426
+ nodesToMarkDirty.add(node.id);
1427
+ }
1428
+ const deletedZoneIds = new Set();
1429
+ for (const id of allIds) {
1430
+ if (nextNodes[id]?.type === 'zone')
1431
+ deletedZoneIds.add(id);
1432
+ }
1433
+ if (deletedZoneIds.size > 0) {
1434
+ for (const node of Object.values(nextNodes)) {
1435
+ if (node.type !== 'unit' || allIds.has(node.id))
1436
+ continue;
1437
+ const members = node.members.filter((id) => !deletedZoneIds.has(id));
1438
+ if (members.length === node.members.length)
1439
+ continue;
1440
+ nextNodes[node.id] = { ...node, members };
1441
+ nodesToMarkDirty.add(node.id);
1257
1442
  }
1258
- if (deletedZoneIds.size > 0) {
1259
- for (const node of Object.values(nextNodes)) {
1260
- if (node.type !== 'unit' || allIds.has(node.id))
1261
- continue;
1262
- const members = node.members.filter((id) => !deletedZoneIds.has(id));
1263
- if (members.length === node.members.length)
1264
- continue;
1265
- nextNodes[node.id] = { ...node, members };
1266
- nodesToMarkDirty.add(node.id);
1443
+ }
1444
+ for (const id of allIds) {
1445
+ const node = nextNodes[id];
1446
+ if (!node)
1447
+ continue;
1448
+ // Legacy graphs can link children without a reciprocal parentId.
1449
+ const parentId = (node.parentId ??
1450
+ Object.values(nextNodes).find((candidate) => 'children' in candidate && candidate.children?.some((childId) => childId === id))?.id);
1451
+ if (parentId && nextNodes[parentId] && !allIds.has(parentId)) {
1452
+ const parent = nextNodes[parentId];
1453
+ if (parent.children) {
1454
+ nextNodes[parent.id] = {
1455
+ ...parent,
1456
+ children: parent.children.filter((cid) => cid !== id),
1457
+ };
1458
+ parentsToMarkDirty.add(parent.id);
1267
1459
  }
1268
1460
  }
1269
- for (const id of allIds) {
1270
- const node = nextNodes[id];
1271
- if (!node)
1461
+ // 2. Remove from root list
1462
+ nextRootIds = nextRootIds.filter((rid) => rid !== id);
1463
+ // 3. Remove from any collections it belongs to
1464
+ removeFromCollections(nextCollections, id);
1465
+ // 4. Delete the node itself
1466
+ delete nextNodes[id];
1467
+ }
1468
+ for (const { id, data } of deletionIntent) {
1469
+ const zone = nextNodes[id];
1470
+ if (!zone)
1471
+ continue;
1472
+ nextNodes[id] = { ...zone, ...data };
1473
+ nodesToMarkDirty.add(id);
1474
+ }
1475
+ const unsettledIds = new Set();
1476
+ const regeneratedHostIds = new Set();
1477
+ if (mintDefaults) {
1478
+ refreshDefaultGuttersForRoofIds(nextNodes, affectedRoofIds, nodesToMarkDirty, deletedIds);
1479
+ }
1480
+ else {
1481
+ collectRefreshedDefaults(nextNodes, affectedRoofIds, unsettledIds, regeneratedHostIds);
1482
+ }
1483
+ return {
1484
+ nodes: nextNodes,
1485
+ rootNodeIds: nextRootIds,
1486
+ collections: nextCollections,
1487
+ deletedIds,
1488
+ parentsToMarkDirty,
1489
+ nodesToMarkDirty,
1490
+ unsettledIds,
1491
+ regeneratedHostIds,
1492
+ };
1493
+ }
1494
+ /**
1495
+ * The existing nodes the default gutter refresh of `roofIds` may keep, move or
1496
+ * replace: each roof's default gutters and the downspouts on them. Which of
1497
+ * them survive depends on the gutters the refresh mints, whose ids are random.
1498
+ * `hosts` receives the roof segments whose `children` the refresh rewrites.
1499
+ */
1500
+ function collectRefreshedDefaults(nodes, roofIds, out, hosts) {
1501
+ const gutterIds = new Set();
1502
+ for (const roofId of new Set(roofIds)) {
1503
+ const roof = nodes[roofId];
1504
+ if (roof?.type !== 'roof')
1505
+ continue;
1506
+ for (const segmentId of roof.children ?? []) {
1507
+ const segment = nodes[segmentId];
1508
+ if (segment?.type !== 'roof-segment')
1272
1509
  continue;
1273
- // 1. Remove reference from parent — only if the parent itself is NOT also being deleted
1274
- const parentId = node.parentId;
1275
- if (parentId && nextNodes[parentId] && !allIds.has(parentId)) {
1276
- const parent = nextNodes[parentId];
1277
- if (parent.children) {
1278
- nextNodes[parent.id] = {
1279
- ...parent,
1280
- children: parent.children.filter((cid) => cid !== id),
1281
- };
1282
- parentsToMarkDirty.add(parent.id);
1283
- }
1284
- }
1285
- // 2. Remove from root list
1286
- nextRootIds = nextRootIds.filter((rid) => rid !== id);
1287
- // 3. Remove from any collections it belongs to
1288
- if ('collectionIds' in node && node.collectionIds) {
1289
- for (const cid of node.collectionIds) {
1290
- const col = nextCollections[cid];
1291
- if (col) {
1292
- nextCollections[cid] = { ...col, nodeIds: col.nodeIds.filter((nid) => nid !== id) };
1293
- }
1510
+ hosts.add(segment.id);
1511
+ for (const childId of segment.children ?? []) {
1512
+ if (isDefaultGutterNode(nodes[childId], segment.id)) {
1513
+ gutterIds.add(childId);
1294
1514
  }
1295
1515
  }
1296
- // 4. Delete the node itself
1297
- delete nextNodes[id];
1298
1516
  }
1299
- refreshDefaultGuttersForRoofIds(nextNodes, affectedRoofIds, nodesToMarkDirty, deletedIds);
1517
+ }
1518
+ for (const id of gutterIds)
1519
+ out.add(id);
1520
+ for (const node of Object.values(nodes)) {
1521
+ if (node?.type === 'downspout' && node.gutterId && gutterIds.has(node.gutterId)) {
1522
+ out.add(node.id);
1523
+ }
1524
+ }
1525
+ }
1526
+ const deleteNodesActionImpl = (set, get, ids, options, wallDeletionPlan) => {
1527
+ if (get().readOnly)
1528
+ return;
1529
+ let deletedIds = new Set();
1530
+ let parentsToMarkDirty = new Set();
1531
+ let nodesToMarkDirty = new Set();
1532
+ set((state) => {
1533
+ const plan = planNodeDeletion(state, ids, { options, wallDeletionPlan });
1534
+ deletedIds = plan.deletedIds;
1535
+ parentsToMarkDirty = plan.parentsToMarkDirty;
1536
+ nodesToMarkDirty = plan.nodesToMarkDirty;
1300
1537
  addActiveSceneCommitNodeIds([...deletedIds, ...parentsToMarkDirty, ...nodesToMarkDirty]);
1301
- return { nodes: nextNodes, rootNodeIds: nextRootIds, collections: nextCollections };
1538
+ return { nodes: plan.nodes, rootNodeIds: plan.rootNodeIds, collections: plan.collections };
1302
1539
  });
1303
1540
  // Deleted ids must leave the dirty set: every consumer skips missing
1304
1541
  // nodes without clearing them, so a mark on a deleted node would sit in
@@ -1328,17 +1565,101 @@ function validatedSet(set) {
1328
1565
  return patch;
1329
1566
  });
1330
1567
  }
1331
- export const createNodesAction = (set, get, ops) => runWithSceneCommitNodeIds(ops.flatMap(({ node, parentId }) => {
1568
+ /** Runs the same deletion hooks and update constraints for headless scene owners. */
1569
+ export function planSceneNodeChanges(snapshot, changes) {
1570
+ const dirtyIds = new Set();
1571
+ let state = {
1572
+ ...snapshot,
1573
+ readOnly: false,
1574
+ markDirty: (id) => {
1575
+ dirtyIds.add(id);
1576
+ },
1577
+ clearDirty: (id) => {
1578
+ dirtyIds.delete(id);
1579
+ },
1580
+ };
1581
+ const set = (update) => {
1582
+ state = { ...state, ...update(state) };
1583
+ };
1584
+ if (changes.update?.length)
1585
+ updateNodesActionImpl(set, () => state, changes.update, undefined, false);
1586
+ if (changes.delete?.length)
1587
+ deleteNodesActionImpl(set, () => state, changes.delete, undefined, changes.wallDeletionPlan);
1588
+ return {
1589
+ nodes: state.nodes,
1590
+ rootNodeIds: state.rootNodeIds,
1591
+ collections: state.collections,
1592
+ dirtyIds: [...dirtyIds],
1593
+ };
1594
+ }
1595
+ export const createNodesAction = (set, get, ops, options) => runWithSceneCommitNodeIds(ops.flatMap(({ node, parentId }) => {
1332
1596
  const effectiveParentId = parentId ?? node.parentId;
1333
1597
  return effectiveParentId ? [node.id, effectiveParentId] : [node.id];
1334
- }), () => createNodesActionImpl(validatedSet(set), get, ops));
1335
- export const applyNodeChangesAction = (set, get, changes) => runWithSceneCommitNodeIds([
1598
+ }), () => createNodesActionImpl(validatedSet(set), get, ops, options));
1599
+ export const applyNodeChangesAction = (set, get, changes, options) => runWithSceneCommitNodeIds([
1336
1600
  ...(changes.create ?? []).flatMap(({ node, parentId }) => {
1337
1601
  const effectiveParentId = parentId ?? node.parentId;
1338
1602
  return effectiveParentId ? [node.id, effectiveParentId] : [node.id];
1339
1603
  }),
1340
1604
  ...(changes.update ?? []).map(({ id }) => id),
1341
1605
  ...(changes.delete ?? []),
1342
- ], () => applyNodeChangesActionImpl(validatedSet(set), get, changes));
1343
- export const updateNodesAction = (set, get, updates) => runWithSceneCommitNodeIds(updates.map(({ id }) => id), () => updateNodesActionImpl(validatedSet(set), get, updates));
1344
- export const deleteNodesAction = (set, get, ids) => runWithSceneCommitNodeIds(ids, () => deleteNodesActionImpl(validatedSet(set), get, ids));
1606
+ ], () => applyNodeChangesActionImpl(validatedSet(set), get, changes, options));
1607
+ export const updateNodesAction = (set, get, updates, options) => runWithSceneCommitNodeIds(updates.map(({ id }) => id), () => updateNodesActionImpl(validatedSet(set), get, updates, options));
1608
+ export const deleteNodesAction = (set, get, ids, options) => runWithSceneCommitNodeIds(ids, () => deleteNodesActionImpl(validatedSet(set), get, ids, options));
1609
+ /**
1610
+ * The sanctioned conversion from derived construction to an authored surface:
1611
+ * the boundary editors' polygon edit, a 2D reshape, a manual move. Clears the
1612
+ * derived markers (and the zone link) in the same update that carries the
1613
+ * caller's own change, so the reconciler stops owning the surface from this
1614
+ * commit on.
1615
+ */
1616
+ export const detachDerivedNodeAction = (set, get, id, data) => {
1617
+ const node = get().nodes[id];
1618
+ if (!node)
1619
+ return;
1620
+ // An automatic ceiling draws its room's paint regions; once it is its own it
1621
+ // keeps them on itself.
1622
+ const zone = node.type === 'ceiling' && node.zoneId ? get().nodes[node.zoneId] : null;
1623
+ const keptRegions = node.type === 'ceiling' &&
1624
+ isDerivedNode(node) &&
1625
+ zone?.type === 'zone' &&
1626
+ zone.ceiling?.regions?.length &&
1627
+ !(data && 'regions' in data)
1628
+ ? { regions: zone.ceiling.regions }
1629
+ : {};
1630
+ // Spread through a plain record: merging two `Partial<AnyNode>` unions
1631
+ // explodes into a union TypeScript cannot represent.
1632
+ const patch = {
1633
+ ...data,
1634
+ ...keptRegions,
1635
+ ...(isDerivedNode(node) ? derivedDetachPatch(node) : {}),
1636
+ ...(node.type === 'slab' && isDerivedNode(node)
1637
+ ? { associatedZoneIds: node.zoneIds ?? [] }
1638
+ : {}),
1639
+ };
1640
+ if (Object.keys(patch).length === 0)
1641
+ return;
1642
+ const ownerUpdates = node.type === 'slab' && isDerivedNode(node)
1643
+ ? (node.zoneIds ?? []).flatMap((zoneId) => {
1644
+ const zone = get().nodes[zoneId];
1645
+ return zone?.type === 'zone'
1646
+ ? [{ id: zone.id, data: { floor: { ...zone.floor, sourceSlabId: node.id } } }]
1647
+ : [];
1648
+ })
1649
+ : [];
1650
+ runWithSceneCommitNodeIds([id, ...ownerUpdates.map(({ id }) => id)], () => updateNodesActionImpl(validatedSet(set), get, [{ id, data: patch }, ...ownerUpdates], {
1651
+ derivedWriter: DERIVED_WRITER_TOKEN,
1652
+ }));
1653
+ };
1654
+ /**
1655
+ * What the default gutter refresh of `roofIds` would touch, without running
1656
+ * it: the existing default gutters and downspouts it may keep or replace, and
1657
+ * the roof segments whose `children` it rewrites. For previews of edits that
1658
+ * trigger the refresh (a roof segment update, a delete).
1659
+ */
1660
+ export function previewDefaultGutterRefresh(nodes, roofIds) {
1661
+ const unsettledIds = new Set();
1662
+ const regeneratedHostIds = new Set();
1663
+ collectRefreshedDefaults(nodes, roofIds, unsettledIds, regeneratedHostIds);
1664
+ return { unsettledIds, regeneratedHostIds };
1665
+ }