@pascal-app/core 1.0.3 → 1.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1485) hide show
  1. package/dist/agent-operations/__fixtures__/add-object-cases.d.ts +247 -0
  2. package/dist/agent-operations/__fixtures__/add-object-cases.d.ts.map +1 -0
  3. package/dist/agent-operations/__fixtures__/add-object-cases.js +429 -0
  4. package/dist/agent-operations/__fixtures__/add-stair-cases.d.ts +3 -0
  5. package/dist/agent-operations/__fixtures__/add-stair-cases.d.ts.map +1 -0
  6. package/dist/agent-operations/__fixtures__/add-stair-cases.js +176 -0
  7. package/dist/agent-operations/__fixtures__/build-room-cases.d.ts +4 -0
  8. package/dist/agent-operations/__fixtures__/build-room-cases.d.ts.map +1 -0
  9. package/dist/agent-operations/__fixtures__/build-room-cases.js +1005 -0
  10. package/dist/agent-operations/__fixtures__/cases.d.ts +67 -0
  11. package/dist/agent-operations/__fixtures__/cases.d.ts.map +1 -0
  12. package/dist/agent-operations/__fixtures__/cases.js +868 -0
  13. package/dist/agent-operations/__fixtures__/corner-window-cases.d.ts +3 -0
  14. package/dist/agent-operations/__fixtures__/corner-window-cases.d.ts.map +1 -0
  15. package/dist/agent-operations/__fixtures__/corner-window-cases.js +155 -0
  16. package/dist/agent-operations/__fixtures__/design-brief-cases.d.ts +14 -0
  17. package/dist/agent-operations/__fixtures__/design-brief-cases.d.ts.map +1 -0
  18. package/dist/agent-operations/__fixtures__/design-brief-cases.js +709 -0
  19. package/dist/agent-operations/__fixtures__/find-by-type-cases.d.ts +7 -0
  20. package/dist/agent-operations/__fixtures__/find-by-type-cases.d.ts.map +1 -0
  21. package/dist/agent-operations/__fixtures__/find-by-type-cases.js +21 -0
  22. package/dist/agent-operations/__fixtures__/finish-cases.d.ts +7 -0
  23. package/dist/agent-operations/__fixtures__/finish-cases.d.ts.map +1 -0
  24. package/dist/agent-operations/__fixtures__/finish-cases.js +758 -0
  25. package/dist/agent-operations/__fixtures__/lot-info-cases.d.ts +3 -0
  26. package/dist/agent-operations/__fixtures__/lot-info-cases.d.ts.map +1 -0
  27. package/dist/agent-operations/__fixtures__/lot-info-cases.js +370 -0
  28. package/dist/agent-operations/__fixtures__/merge-windows-cases.d.ts +3 -0
  29. package/dist/agent-operations/__fixtures__/merge-windows-cases.d.ts.map +1 -0
  30. package/dist/agent-operations/__fixtures__/merge-windows-cases.js +321 -0
  31. package/dist/agent-operations/__fixtures__/native-materials.d.ts +2237 -0
  32. package/dist/agent-operations/__fixtures__/native-materials.d.ts.map +1 -0
  33. package/dist/agent-operations/__fixtures__/native-materials.js +82 -0
  34. package/dist/agent-operations/__fixtures__/node-read-cases.d.ts +4 -0
  35. package/dist/agent-operations/__fixtures__/node-read-cases.d.ts.map +1 -0
  36. package/dist/agent-operations/__fixtures__/node-read-cases.js +639 -0
  37. package/dist/agent-operations/__fixtures__/notation-cases.d.ts +24 -0
  38. package/dist/agent-operations/__fixtures__/notation-cases.d.ts.map +1 -0
  39. package/dist/agent-operations/__fixtures__/notation-cases.js +356 -0
  40. package/dist/agent-operations/__fixtures__/place-items-cases.d.ts +17 -0
  41. package/dist/agent-operations/__fixtures__/place-items-cases.d.ts.map +1 -0
  42. package/dist/agent-operations/__fixtures__/place-items-cases.js +584 -0
  43. package/dist/agent-operations/__fixtures__/roof-bearing-cases.d.ts +19726 -0
  44. package/dist/agent-operations/__fixtures__/roof-bearing-cases.d.ts.map +1 -0
  45. package/dist/agent-operations/__fixtures__/roof-bearing-cases.js +106 -0
  46. package/dist/agent-operations/__fixtures__/roof-cases.d.ts +9 -0
  47. package/dist/agent-operations/__fixtures__/roof-cases.d.ts.map +1 -0
  48. package/dist/agent-operations/__fixtures__/roof-cases.js +382 -0
  49. package/dist/agent-operations/__fixtures__/room-cases.d.ts +4 -0
  50. package/dist/agent-operations/__fixtures__/room-cases.d.ts.map +1 -0
  51. package/dist/agent-operations/__fixtures__/room-cases.js +473 -0
  52. package/dist/agent-operations/__fixtures__/scene-check-cases.d.ts +4 -0
  53. package/dist/agent-operations/__fixtures__/scene-check-cases.d.ts.map +1 -0
  54. package/dist/agent-operations/__fixtures__/scene-check-cases.js +417 -0
  55. package/dist/agent-operations/__fixtures__/search-assets-cases.d.ts +5 -0
  56. package/dist/agent-operations/__fixtures__/search-assets-cases.d.ts.map +1 -0
  57. package/dist/agent-operations/__fixtures__/search-assets-cases.js +149 -0
  58. package/dist/agent-operations/__fixtures__/site-cases.d.ts +290 -0
  59. package/dist/agent-operations/__fixtures__/site-cases.d.ts.map +1 -0
  60. package/dist/agent-operations/__fixtures__/site-cases.js +780 -0
  61. package/dist/agent-operations/__fixtures__/structure-cases.d.ts +7 -0
  62. package/dist/agent-operations/__fixtures__/structure-cases.d.ts.map +1 -0
  63. package/dist/agent-operations/__fixtures__/structure-cases.js +1215 -0
  64. package/dist/agent-operations/__fixtures__/verify-scene-cases.d.ts +313 -0
  65. package/dist/agent-operations/__fixtures__/verify-scene-cases.d.ts.map +1 -0
  66. package/dist/agent-operations/__fixtures__/verify-scene-cases.js +350 -0
  67. package/dist/agent-operations/__fixtures__/view-assets-cases.d.ts +3 -0
  68. package/dist/agent-operations/__fixtures__/view-assets-cases.d.ts.map +1 -0
  69. package/dist/agent-operations/__fixtures__/view-assets-cases.js +155 -0
  70. package/dist/agent-operations/__fixtures__/view-scene-cases.d.ts +50 -0
  71. package/dist/agent-operations/__fixtures__/view-scene-cases.d.ts.map +1 -0
  72. package/dist/agent-operations/__fixtures__/view-scene-cases.js +425 -0
  73. package/dist/agent-operations/achieved.d.ts +21 -0
  74. package/dist/agent-operations/achieved.d.ts.map +1 -0
  75. package/dist/agent-operations/achieved.js +48 -0
  76. package/dist/agent-operations/add-column.d.ts +23 -0
  77. package/dist/agent-operations/add-column.d.ts.map +1 -0
  78. package/dist/agent-operations/add-column.js +99 -0
  79. package/dist/agent-operations/add-fence.d.ts +18 -0
  80. package/dist/agent-operations/add-fence.d.ts.map +1 -0
  81. package/dist/agent-operations/add-fence.js +48 -0
  82. package/dist/agent-operations/add-level.d.ts +17 -0
  83. package/dist/agent-operations/add-level.d.ts.map +1 -0
  84. package/dist/agent-operations/add-level.js +130 -0
  85. package/dist/agent-operations/add-object.d.ts +143 -0
  86. package/dist/agent-operations/add-object.d.ts.map +1 -0
  87. package/dist/agent-operations/add-object.js +522 -0
  88. package/dist/agent-operations/add-wall.d.ts +13 -0
  89. package/dist/agent-operations/add-wall.d.ts.map +1 -0
  90. package/dist/agent-operations/add-wall.js +73 -0
  91. package/dist/agent-operations/apply-changes.d.ts +22 -0
  92. package/dist/agent-operations/apply-changes.d.ts.map +1 -0
  93. package/dist/agent-operations/apply-changes.js +125 -0
  94. package/dist/agent-operations/apply-outcome.d.ts +21 -0
  95. package/dist/agent-operations/apply-outcome.d.ts.map +1 -0
  96. package/dist/agent-operations/apply-outcome.js +33 -0
  97. package/dist/agent-operations/asset-views.d.ts +75 -0
  98. package/dist/agent-operations/asset-views.d.ts.map +1 -0
  99. package/dist/agent-operations/asset-views.js +234 -0
  100. package/dist/agent-operations/author-scene.d.ts +157 -0
  101. package/dist/agent-operations/author-scene.d.ts.map +1 -0
  102. package/dist/agent-operations/author-scene.js +1076 -0
  103. package/dist/agent-operations/authored-scene-merge.d.ts +4 -0
  104. package/dist/agent-operations/authored-scene-merge.d.ts.map +1 -0
  105. package/dist/agent-operations/authored-scene-merge.js +96 -0
  106. package/dist/agent-operations/batch.d.ts +22 -0
  107. package/dist/agent-operations/batch.d.ts.map +1 -0
  108. package/dist/agent-operations/batch.js +104 -0
  109. package/dist/agent-operations/ceiling-object-observations.d.ts +31 -0
  110. package/dist/agent-operations/ceiling-object-observations.d.ts.map +1 -0
  111. package/dist/agent-operations/ceiling-object-observations.js +111 -0
  112. package/dist/agent-operations/collections.d.ts +28 -0
  113. package/dist/agent-operations/collections.d.ts.map +1 -0
  114. package/dist/agent-operations/collections.js +130 -0
  115. package/dist/agent-operations/corner-window.d.ts +19 -0
  116. package/dist/agent-operations/corner-window.d.ts.map +1 -0
  117. package/dist/agent-operations/corner-window.js +84 -0
  118. package/dist/agent-operations/create-roof.d.ts +32 -0
  119. package/dist/agent-operations/create-roof.d.ts.map +1 -0
  120. package/dist/agent-operations/create-roof.js +304 -0
  121. package/dist/agent-operations/create-room.d.ts +38 -0
  122. package/dist/agent-operations/create-room.d.ts.map +1 -0
  123. package/dist/agent-operations/create-room.js +245 -0
  124. package/dist/agent-operations/create-stair.d.ts +11 -0
  125. package/dist/agent-operations/create-stair.d.ts.map +1 -0
  126. package/dist/agent-operations/create-stair.js +330 -0
  127. package/dist/agent-operations/delete-node.d.ts +6 -0
  128. package/dist/agent-operations/delete-node.d.ts.map +1 -0
  129. package/dist/agent-operations/delete-node.js +9 -0
  130. package/dist/agent-operations/design-brief.d.ts +38 -0
  131. package/dist/agent-operations/design-brief.d.ts.map +1 -0
  132. package/dist/agent-operations/design-brief.js +300 -0
  133. package/dist/agent-operations/designs.d.ts +24 -0
  134. package/dist/agent-operations/designs.d.ts.map +1 -0
  135. package/dist/agent-operations/designs.js +48 -0
  136. package/dist/agent-operations/door-clearance.d.ts +150 -0
  137. package/dist/agent-operations/door-clearance.d.ts.map +1 -0
  138. package/dist/agent-operations/door-clearance.js +391 -0
  139. package/dist/agent-operations/duplicate-level.d.ts +12 -0
  140. package/dist/agent-operations/duplicate-level.d.ts.map +1 -0
  141. package/dist/agent-operations/duplicate-level.js +55 -0
  142. package/dist/agent-operations/find-by-type.d.ts +18 -0
  143. package/dist/agent-operations/find-by-type.d.ts.map +1 -0
  144. package/dist/agent-operations/find-by-type.js +317 -0
  145. package/dist/agent-operations/furnish-room.d.ts +39 -0
  146. package/dist/agent-operations/furnish-room.d.ts.map +1 -0
  147. package/dist/agent-operations/furnish-room.js +306 -0
  148. package/dist/agent-operations/furniture-kind.d.ts +22 -0
  149. package/dist/agent-operations/furniture-kind.d.ts.map +1 -0
  150. package/dist/agent-operations/furniture-kind.js +69 -0
  151. package/dist/agent-operations/get-node.d.ts +12 -0
  152. package/dist/agent-operations/get-node.d.ts.map +1 -0
  153. package/dist/agent-operations/get-node.js +105 -0
  154. package/dist/agent-operations/hosted-services.d.ts +14 -0
  155. package/dist/agent-operations/hosted-services.d.ts.map +1 -0
  156. package/dist/agent-operations/hosted-services.js +22 -0
  157. package/dist/agent-operations/index.d.ts +489 -0
  158. package/dist/agent-operations/index.d.ts.map +1 -0
  159. package/dist/agent-operations/index.js +141 -0
  160. package/dist/agent-operations/item-space.d.ts +22 -0
  161. package/dist/agent-operations/item-space.d.ts.map +1 -0
  162. package/dist/agent-operations/item-space.js +69 -0
  163. package/dist/agent-operations/layout-clearance.d.ts +157 -0
  164. package/dist/agent-operations/layout-clearance.d.ts.map +1 -0
  165. package/dist/agent-operations/layout-clearance.js +500 -0
  166. package/dist/agent-operations/level-height-fill.d.ts +12 -0
  167. package/dist/agent-operations/level-height-fill.d.ts.map +1 -0
  168. package/dist/agent-operations/level-height-fill.js +59 -0
  169. package/dist/agent-operations/level-reads.d.ts +37 -0
  170. package/dist/agent-operations/level-reads.d.ts.map +1 -0
  171. package/dist/agent-operations/level-reads.js +168 -0
  172. package/dist/agent-operations/level-target.d.ts +11 -0
  173. package/dist/agent-operations/level-target.d.ts.map +1 -0
  174. package/dist/agent-operations/level-target.js +29 -0
  175. package/dist/agent-operations/list-levels.d.ts +4 -0
  176. package/dist/agent-operations/list-levels.d.ts.map +1 -0
  177. package/dist/agent-operations/list-levels.js +54 -0
  178. package/dist/agent-operations/material-preset.d.ts +11 -0
  179. package/dist/agent-operations/material-preset.d.ts.map +1 -0
  180. package/dist/agent-operations/material-preset.js +68 -0
  181. package/dist/agent-operations/material-refs.d.ts +30 -0
  182. package/dist/agent-operations/material-refs.d.ts.map +1 -0
  183. package/dist/agent-operations/material-refs.js +105 -0
  184. package/dist/agent-operations/merge-windows.d.ts +6 -0
  185. package/dist/agent-operations/merge-windows.d.ts.map +1 -0
  186. package/dist/agent-operations/merge-windows.js +27 -0
  187. package/dist/agent-operations/move-roofs.d.ts +9 -0
  188. package/dist/agent-operations/move-roofs.d.ts.map +1 -0
  189. package/dist/agent-operations/move-roofs.js +29 -0
  190. package/dist/agent-operations/node-patch.d.ts +3 -0
  191. package/dist/agent-operations/node-patch.d.ts.map +1 -0
  192. package/dist/agent-operations/node-patch.js +114 -0
  193. package/dist/agent-operations/paint.d.ts +22 -0
  194. package/dist/agent-operations/paint.d.ts.map +1 -0
  195. package/dist/agent-operations/paint.js +329 -0
  196. package/dist/agent-operations/photo-elevation.d.ts +155 -0
  197. package/dist/agent-operations/photo-elevation.d.ts.map +1 -0
  198. package/dist/agent-operations/photo-elevation.js +761 -0
  199. package/dist/agent-operations/place-in-room.d.ts +29 -0
  200. package/dist/agent-operations/place-in-room.d.ts.map +1 -0
  201. package/dist/agent-operations/place-in-room.js +403 -0
  202. package/dist/agent-operations/place-items.d.ts +20 -0
  203. package/dist/agent-operations/place-items.d.ts.map +1 -0
  204. package/dist/agent-operations/place-items.js +239 -0
  205. package/dist/agent-operations/plan-geometry.d.ts +24 -0
  206. package/dist/agent-operations/plan-geometry.d.ts.map +1 -0
  207. package/dist/agent-operations/plan-geometry.js +97 -0
  208. package/dist/agent-operations/point-context.d.ts +139 -0
  209. package/dist/agent-operations/point-context.d.ts.map +1 -0
  210. package/dist/agent-operations/point-context.js +1 -0
  211. package/dist/agent-operations/project-files.d.ts +9 -0
  212. package/dist/agent-operations/project-files.d.ts.map +1 -0
  213. package/dist/agent-operations/project-files.js +25 -0
  214. package/dist/agent-operations/record-made.d.ts +18 -0
  215. package/dist/agent-operations/record-made.d.ts.map +1 -0
  216. package/dist/agent-operations/record-made.js +28 -0
  217. package/dist/agent-operations/roof-footprint.d.ts +24 -0
  218. package/dist/agent-operations/roof-footprint.d.ts.map +1 -0
  219. package/dist/agent-operations/roof-footprint.js +242 -0
  220. package/dist/agent-operations/roof-writes.d.ts +20 -0
  221. package/dist/agent-operations/roof-writes.d.ts.map +1 -0
  222. package/dist/agent-operations/roof-writes.js +165 -0
  223. package/dist/agent-operations/room-findings.d.ts +54 -0
  224. package/dist/agent-operations/room-findings.d.ts.map +1 -0
  225. package/dist/agent-operations/room-findings.js +143 -0
  226. package/dist/agent-operations/room-floor-script.d.ts +23 -0
  227. package/dist/agent-operations/room-floor-script.d.ts.map +1 -0
  228. package/dist/agent-operations/room-floor-script.js +54 -0
  229. package/dist/agent-operations/room-structure.d.ts +87 -0
  230. package/dist/agent-operations/room-structure.d.ts.map +1 -0
  231. package/dist/agent-operations/room-structure.js +144 -0
  232. package/dist/agent-operations/scene-checkpoint.d.ts +94 -0
  233. package/dist/agent-operations/scene-checkpoint.d.ts.map +1 -0
  234. package/dist/agent-operations/scene-checkpoint.js +176 -0
  235. package/dist/agent-operations/scene-materials.d.ts +15 -0
  236. package/dist/agent-operations/scene-materials.d.ts.map +1 -0
  237. package/dist/agent-operations/scene-materials.js +62 -0
  238. package/dist/agent-operations/scene-measure.d.ts +73 -0
  239. package/dist/agent-operations/scene-measure.d.ts.map +1 -0
  240. package/dist/agent-operations/scene-measure.js +73 -0
  241. package/dist/agent-operations/scene-queries.d.ts +4941 -0
  242. package/dist/agent-operations/scene-queries.d.ts.map +1 -0
  243. package/dist/agent-operations/scene-queries.js +74 -0
  244. package/dist/agent-operations/scene-review.d.ts +52 -0
  245. package/dist/agent-operations/scene-review.d.ts.map +1 -0
  246. package/dist/agent-operations/scene-review.js +106 -0
  247. package/dist/agent-operations/scene-view.d.ts +165 -0
  248. package/dist/agent-operations/scene-view.d.ts.map +1 -0
  249. package/dist/agent-operations/scene-view.js +916 -0
  250. package/dist/agent-operations/search-assets.d.ts +14 -0
  251. package/dist/agent-operations/search-assets.d.ts.map +1 -0
  252. package/dist/agent-operations/search-assets.js +43 -0
  253. package/dist/agent-operations/search-materials.d.ts +18 -0
  254. package/dist/agent-operations/search-materials.d.ts.map +1 -0
  255. package/dist/agent-operations/search-materials.js +165 -0
  256. package/dist/agent-operations/set-checkpoint.d.ts +9 -0
  257. package/dist/agent-operations/set-checkpoint.d.ts.map +1 -0
  258. package/dist/agent-operations/set-checkpoint.js +31 -0
  259. package/dist/agent-operations/set-ground-level.d.ts +12 -0
  260. package/dist/agent-operations/set-ground-level.d.ts.map +1 -0
  261. package/dist/agent-operations/set-ground-level.js +61 -0
  262. package/dist/agent-operations/site.d.ts +21 -0
  263. package/dist/agent-operations/site.d.ts.map +1 -0
  264. package/dist/agent-operations/site.js +123 -0
  265. package/dist/agent-operations/stairs.d.ts +5 -0
  266. package/dist/agent-operations/stairs.d.ts.map +1 -0
  267. package/dist/agent-operations/stairs.js +70 -0
  268. package/dist/agent-operations/types.d.ts +118 -0
  269. package/dist/agent-operations/types.d.ts.map +1 -0
  270. package/dist/agent-operations/types.js +1 -0
  271. package/dist/agent-operations/verify-scene.d.ts +84 -0
  272. package/dist/agent-operations/verify-scene.d.ts.map +1 -0
  273. package/dist/agent-operations/verify-scene.js +548 -0
  274. package/dist/agent-operations/wall-face-script.d.ts +28 -0
  275. package/dist/agent-operations/wall-face-script.d.ts.map +1 -0
  276. package/dist/agent-operations/wall-face-script.js +62 -0
  277. package/dist/agent-operations/wall-object-observations.d.ts +41 -0
  278. package/dist/agent-operations/wall-object-observations.d.ts.map +1 -0
  279. package/dist/agent-operations/wall-object-observations.js +249 -0
  280. package/dist/agent-operations/wall-opening.d.ts +65 -0
  281. package/dist/agent-operations/wall-opening.d.ts.map +1 -0
  282. package/dist/agent-operations/wall-opening.js +55 -0
  283. package/dist/agent-operations/wall-skirting.d.ts +24 -0
  284. package/dist/agent-operations/wall-skirting.d.ts.map +1 -0
  285. package/dist/agent-operations/wall-skirting.js +85 -0
  286. package/dist/agent-tools/achieved.d.ts +9 -0
  287. package/dist/agent-tools/achieved.d.ts.map +1 -0
  288. package/dist/agent-tools/achieved.js +8 -0
  289. package/dist/agent-tools/add-object.d.ts +47 -0
  290. package/dist/agent-tools/add-object.d.ts.map +1 -0
  291. package/dist/agent-tools/add-object.js +92 -0
  292. package/dist/agent-tools/assets.d.ts +21 -0
  293. package/dist/agent-tools/assets.d.ts.map +1 -0
  294. package/dist/agent-tools/assets.js +30 -0
  295. package/dist/agent-tools/author-scene.d.ts +651 -0
  296. package/dist/agent-tools/author-scene.d.ts.map +1 -0
  297. package/dist/agent-tools/author-scene.js +252 -0
  298. package/dist/agent-tools/batch.d.ts +25 -0
  299. package/dist/agent-tools/batch.d.ts.map +1 -0
  300. package/dist/agent-tools/batch.js +61 -0
  301. package/dist/agent-tools/checkpoints.d.ts +13 -0
  302. package/dist/agent-tools/checkpoints.d.ts.map +1 -0
  303. package/dist/agent-tools/checkpoints.js +16 -0
  304. package/dist/agent-tools/clear-scene.d.ts +10 -0
  305. package/dist/agent-tools/clear-scene.d.ts.map +1 -0
  306. package/dist/agent-tools/clear-scene.js +9 -0
  307. package/dist/agent-tools/collections.d.ts +35 -0
  308. package/dist/agent-tools/collections.d.ts.map +1 -0
  309. package/dist/agent-tools/collections.js +31 -0
  310. package/dist/agent-tools/columns.d.ts +44 -0
  311. package/dist/agent-tools/columns.d.ts.map +1 -0
  312. package/dist/agent-tools/columns.js +59 -0
  313. package/dist/agent-tools/contract.d.ts +68 -0
  314. package/dist/agent-tools/contract.d.ts.map +1 -0
  315. package/dist/agent-tools/contract.js +1 -0
  316. package/dist/agent-tools/corner-window.d.ts +46 -0
  317. package/dist/agent-tools/corner-window.d.ts.map +1 -0
  318. package/dist/agent-tools/corner-window.js +47 -0
  319. package/dist/agent-tools/create-room.d.ts +64 -0
  320. package/dist/agent-tools/create-room.d.ts.map +1 -0
  321. package/dist/agent-tools/create-room.js +97 -0
  322. package/dist/agent-tools/design-brief.d.ts +408 -0
  323. package/dist/agent-tools/design-brief.d.ts.map +1 -0
  324. package/dist/agent-tools/design-brief.js +149 -0
  325. package/dist/agent-tools/designs.d.ts +34 -0
  326. package/dist/agent-tools/designs.d.ts.map +1 -0
  327. package/dist/agent-tools/designs.js +50 -0
  328. package/dist/agent-tools/fences.d.ts +28 -0
  329. package/dist/agent-tools/fences.d.ts.map +1 -0
  330. package/dist/agent-tools/fences.js +31 -0
  331. package/dist/agent-tools/find-by-type.d.ts +18 -0
  332. package/dist/agent-tools/find-by-type.d.ts.map +1 -0
  333. package/dist/agent-tools/find-by-type.js +35 -0
  334. package/dist/agent-tools/furnish-room.d.ts +28 -0
  335. package/dist/agent-tools/furnish-room.d.ts.map +1 -0
  336. package/dist/agent-tools/furnish-room.js +37 -0
  337. package/dist/agent-tools/hosted-services.d.ts +438 -0
  338. package/dist/agent-tools/hosted-services.d.ts.map +1 -0
  339. package/dist/agent-tools/hosted-services.js +181 -0
  340. package/dist/agent-tools/index.d.ts +1543 -0
  341. package/dist/agent-tools/index.d.ts.map +1 -0
  342. package/dist/agent-tools/index.js +126 -0
  343. package/dist/agent-tools/levels.d.ts +80 -0
  344. package/dist/agent-tools/levels.d.ts.map +1 -0
  345. package/dist/agent-tools/levels.js +87 -0
  346. package/dist/agent-tools/measurement.d.ts +55 -0
  347. package/dist/agent-tools/measurement.d.ts.map +1 -0
  348. package/dist/agent-tools/measurement.js +144 -0
  349. package/dist/agent-tools/merge-windows.d.ts +10 -0
  350. package/dist/agent-tools/merge-windows.d.ts.map +1 -0
  351. package/dist/agent-tools/merge-windows.js +12 -0
  352. package/dist/agent-tools/node-id.d.ts +3 -0
  353. package/dist/agent-tools/node-id.d.ts.map +1 -0
  354. package/dist/agent-tools/node-id.js +2 -0
  355. package/dist/agent-tools/nodes.d.ts +17 -0
  356. package/dist/agent-tools/nodes.d.ts.map +1 -0
  357. package/dist/agent-tools/nodes.js +13 -0
  358. package/dist/agent-tools/notation-inventory.d.ts +16 -0
  359. package/dist/agent-tools/notation-inventory.d.ts.map +1 -0
  360. package/dist/agent-tools/notation-inventory.js +105 -0
  361. package/dist/agent-tools/paint.d.ts +46 -0
  362. package/dist/agent-tools/paint.d.ts.map +1 -0
  363. package/dist/agent-tools/paint.js +29 -0
  364. package/dist/agent-tools/photo-elevation.d.ts +32 -0
  365. package/dist/agent-tools/photo-elevation.d.ts.map +1 -0
  366. package/dist/agent-tools/photo-elevation.js +73 -0
  367. package/dist/agent-tools/place-in-room.d.ts +35 -0
  368. package/dist/agent-tools/place-in-room.d.ts.map +1 -0
  369. package/dist/agent-tools/place-in-room.js +61 -0
  370. package/dist/agent-tools/place-items.d.ts +19 -0
  371. package/dist/agent-tools/place-items.d.ts.map +1 -0
  372. package/dist/agent-tools/place-items.js +29 -0
  373. package/dist/agent-tools/project-files.d.ts +189 -0
  374. package/dist/agent-tools/project-files.d.ts.map +1 -0
  375. package/dist/agent-tools/project-files.js +99 -0
  376. package/dist/agent-tools/refusal.d.ts +20 -0
  377. package/dist/agent-tools/refusal.d.ts.map +1 -0
  378. package/dist/agent-tools/refusal.js +29 -0
  379. package/dist/agent-tools/retired.d.ts +21 -0
  380. package/dist/agent-tools/retired.d.ts.map +1 -0
  381. package/dist/agent-tools/retired.js +29 -0
  382. package/dist/agent-tools/roofs.d.ts +100 -0
  383. package/dist/agent-tools/roofs.d.ts.map +1 -0
  384. package/dist/agent-tools/roofs.js +96 -0
  385. package/dist/agent-tools/room-structure.d.ts +446 -0
  386. package/dist/agent-tools/room-structure.d.ts.map +1 -0
  387. package/dist/agent-tools/room-structure.js +210 -0
  388. package/dist/agent-tools/search-materials.d.ts +39 -0
  389. package/dist/agent-tools/search-materials.d.ts.map +1 -0
  390. package/dist/agent-tools/search-materials.js +31 -0
  391. package/dist/agent-tools/site.d.ts +27 -0
  392. package/dist/agent-tools/site.d.ts.map +1 -0
  393. package/dist/agent-tools/site.js +40 -0
  394. package/dist/agent-tools/sources.d.ts +12 -0
  395. package/dist/agent-tools/sources.d.ts.map +1 -0
  396. package/dist/agent-tools/sources.js +11 -0
  397. package/dist/agent-tools/stairs.d.ts +106 -0
  398. package/dist/agent-tools/stairs.d.ts.map +1 -0
  399. package/dist/agent-tools/stairs.js +146 -0
  400. package/dist/agent-tools/verify-scene.d.ts +13 -0
  401. package/dist/agent-tools/verify-scene.d.ts.map +1 -0
  402. package/dist/agent-tools/verify-scene.js +21 -0
  403. package/dist/agent-tools/view-scene.d.ts +81 -0
  404. package/dist/agent-tools/view-scene.d.ts.map +1 -0
  405. package/dist/agent-tools/view-scene.js +123 -0
  406. package/dist/agent-tools/wall-openings.d.ts +167 -0
  407. package/dist/agent-tools/wall-openings.d.ts.map +1 -0
  408. package/dist/agent-tools/wall-openings.js +148 -0
  409. package/dist/agent-tools/walls.d.ts +21 -0
  410. package/dist/agent-tools/walls.d.ts.map +1 -0
  411. package/dist/agent-tools/walls.js +35 -0
  412. package/dist/agent-tools/write-target.d.ts +12 -0
  413. package/dist/agent-tools/write-target.d.ts.map +1 -0
  414. package/dist/agent-tools/write-target.js +10 -0
  415. package/dist/building/__fixtures__/wall-opening-cases.d.ts +940 -0
  416. package/dist/building/__fixtures__/wall-opening-cases.d.ts.map +1 -0
  417. package/dist/building/__fixtures__/wall-opening-cases.js +367 -0
  418. package/dist/building/corner-window.d.ts +56 -0
  419. package/dist/building/corner-window.d.ts.map +1 -0
  420. package/dist/building/corner-window.js +179 -0
  421. package/dist/building/door-types.d.ts +22 -0
  422. package/dist/building/door-types.d.ts.map +1 -0
  423. package/dist/building/door-types.js +167 -0
  424. package/dist/building/floor-item-fit.d.ts +38 -0
  425. package/dist/building/floor-item-fit.d.ts.map +1 -0
  426. package/dist/building/floor-item-fit.js +47 -0
  427. package/dist/building/ground-level.d.ts +26 -0
  428. package/dist/building/ground-level.d.ts.map +1 -0
  429. package/dist/building/ground-level.js +58 -0
  430. package/dist/building/index.d.ts +12 -0
  431. package/dist/building/index.d.ts.map +1 -0
  432. package/dist/building/index.js +11 -0
  433. package/dist/building/level-duplication.d.ts +9842 -0
  434. package/dist/building/level-duplication.d.ts.map +1 -0
  435. package/dist/building/level-duplication.js +328 -0
  436. package/dist/building/level-insertion.d.ts +55 -0
  437. package/dist/building/level-insertion.d.ts.map +1 -0
  438. package/dist/building/level-insertion.js +35 -0
  439. package/dist/building/merge-windows.d.ts +58 -0
  440. package/dist/building/merge-windows.d.ts.map +1 -0
  441. package/dist/building/merge-windows.js +189 -0
  442. package/dist/building/opening-style-presets.d.ts +46 -0
  443. package/dist/building/opening-style-presets.d.ts.map +1 -0
  444. package/dist/building/opening-style-presets.js +195 -0
  445. package/dist/building/photo-elevation.d.ts +125 -0
  446. package/dist/building/photo-elevation.d.ts.map +1 -0
  447. package/dist/building/photo-elevation.js +404 -0
  448. package/dist/building/wall-gaps.d.ts +13 -0
  449. package/dist/building/wall-gaps.d.ts.map +1 -0
  450. package/dist/building/wall-gaps.js +158 -0
  451. package/dist/building/wall-openings.d.ts +480 -0
  452. package/dist/building/wall-openings.d.ts.map +1 -0
  453. package/dist/building/wall-openings.js +259 -0
  454. package/dist/building/window-types.d.ts +17 -0
  455. package/dist/building/window-types.d.ts.map +1 -0
  456. package/dist/building/window-types.js +31 -0
  457. package/dist/capture/schema.d.ts +22 -22
  458. package/dist/capture/source.d.ts.map +1 -1
  459. package/dist/capture/source.js +1 -1
  460. package/dist/commands/structure/apply-zone-transform.d.ts +23 -0
  461. package/dist/commands/structure/apply-zone-transform.d.ts.map +1 -0
  462. package/dist/commands/structure/apply-zone-transform.js +55 -0
  463. package/dist/commands/structure/create-mezzanine.d.ts +12 -0
  464. package/dist/commands/structure/create-mezzanine.d.ts.map +1 -0
  465. package/dist/commands/structure/create-mezzanine.js +46 -0
  466. package/dist/commands/structure/create-zone.d.ts +43 -0
  467. package/dist/commands/structure/create-zone.d.ts.map +1 -0
  468. package/dist/commands/structure/create-zone.js +175 -0
  469. package/dist/commands/structure/delete-zone.d.ts +51 -0
  470. package/dist/commands/structure/delete-zone.d.ts.map +1 -0
  471. package/dist/commands/structure/delete-zone.js +354 -0
  472. package/dist/commands/structure/divide-zone.d.ts +38 -0
  473. package/dist/commands/structure/divide-zone.d.ts.map +1 -0
  474. package/dist/commands/structure/divide-zone.js +186 -0
  475. package/dist/commands/structure/duplicate-zone.d.ts +7 -0
  476. package/dist/commands/structure/duplicate-zone.d.ts.map +1 -0
  477. package/dist/commands/structure/duplicate-zone.js +21 -0
  478. package/dist/commands/structure/floor-opening.d.ts +36 -0
  479. package/dist/commands/structure/floor-opening.d.ts.map +1 -0
  480. package/dist/commands/structure/floor-opening.js +124 -0
  481. package/dist/commands/structure/index.d.ts +22 -0
  482. package/dist/commands/structure/index.d.ts.map +1 -0
  483. package/dist/commands/structure/index.js +20 -0
  484. package/dist/commands/structure/lock-outside-faces.d.ts +12 -0
  485. package/dist/commands/structure/lock-outside-faces.d.ts.map +1 -0
  486. package/dist/commands/structure/lock-outside-faces.js +32 -0
  487. package/dist/commands/structure/merge-zones.d.ts +5 -0
  488. package/dist/commands/structure/merge-zones.d.ts.map +1 -0
  489. package/dist/commands/structure/merge-zones.js +22 -0
  490. package/dist/commands/structure/mezzanine-content.d.ts +16 -0
  491. package/dist/commands/structure/mezzanine-content.d.ts.map +1 -0
  492. package/dist/commands/structure/mezzanine-content.js +109 -0
  493. package/dist/commands/structure/plan-mezzanine-stair.d.ts +7 -0
  494. package/dist/commands/structure/plan-mezzanine-stair.d.ts.map +1 -0
  495. package/dist/commands/structure/plan-mezzanine-stair.js +127 -0
  496. package/dist/commands/structure/plan-wall-deletion.d.ts +9 -0
  497. package/dist/commands/structure/plan-wall-deletion.d.ts.map +1 -0
  498. package/dist/commands/structure/plan-wall-deletion.js +151 -0
  499. package/dist/commands/structure/rebase-floor-reference.d.ts +7 -0
  500. package/dist/commands/structure/rebase-floor-reference.d.ts.map +1 -0
  501. package/dist/commands/structure/rebase-floor-reference.js +90 -0
  502. package/dist/commands/structure/resize-mezzanine.d.ts +8 -0
  503. package/dist/commands/structure/resize-mezzanine.d.ts.map +1 -0
  504. package/dist/commands/structure/resize-mezzanine.js +43 -0
  505. package/dist/commands/structure/rotate-zone.d.ts +8 -0
  506. package/dist/commands/structure/rotate-zone.d.ts.map +1 -0
  507. package/dist/commands/structure/rotate-zone.js +28 -0
  508. package/dist/commands/structure/set-floor-foundation.d.ts +62 -0
  509. package/dist/commands/structure/set-floor-foundation.d.ts.map +1 -0
  510. package/dist/commands/structure/set-floor-foundation.js +162 -0
  511. package/dist/commands/structure/set-room-floor-construction.d.ts +8 -0
  512. package/dist/commands/structure/set-room-floor-construction.d.ts.map +1 -0
  513. package/dist/commands/structure/set-room-floor-construction.js +72 -0
  514. package/dist/commands/structure/set-wall-geometry.d.ts +10 -0
  515. package/dist/commands/structure/set-wall-geometry.d.ts.map +1 -0
  516. package/dist/commands/structure/set-wall-geometry.js +52 -0
  517. package/dist/commands/structure/set-zone-edges.d.ts +14 -0
  518. package/dist/commands/structure/set-zone-edges.d.ts.map +1 -0
  519. package/dist/commands/structure/set-zone-edges.js +143 -0
  520. package/dist/commands/structure/set-zone-intent.d.ts +43 -0
  521. package/dist/commands/structure/set-zone-intent.d.ts.map +1 -0
  522. package/dist/commands/structure/set-zone-intent.js +144 -0
  523. package/dist/commands/structure/shared.d.ts +4941 -0
  524. package/dist/commands/structure/shared.d.ts.map +1 -0
  525. package/dist/commands/structure/shared.js +102 -0
  526. package/dist/commands/structure/transform-zone.d.ts +23 -0
  527. package/dist/commands/structure/transform-zone.d.ts.map +1 -0
  528. package/dist/commands/structure/transform-zone.js +472 -0
  529. package/dist/commands/structure/validate-mezzanine.d.ts +5 -0
  530. package/dist/commands/structure/validate-mezzanine.d.ts.map +1 -0
  531. package/dist/commands/structure/validate-mezzanine.js +46 -0
  532. package/dist/commands/structure/zone-crossings.d.ts +8 -0
  533. package/dist/commands/structure/zone-crossings.d.ts.map +1 -0
  534. package/dist/commands/structure/zone-crossings.js +162 -0
  535. package/dist/commands/structure/zone-drop.d.ts +4 -0
  536. package/dist/commands/structure/zone-drop.d.ts.map +1 -0
  537. package/dist/commands/structure/zone-drop.js +68 -0
  538. package/dist/commands/structure/zone-insertion.d.ts +4 -0
  539. package/dist/commands/structure/zone-insertion.d.ts.map +1 -0
  540. package/dist/commands/structure/zone-insertion.js +200 -0
  541. package/dist/commands/structure/zone-transform-content.d.ts +6 -0
  542. package/dist/commands/structure/zone-transform-content.d.ts.map +1 -0
  543. package/dist/commands/structure/zone-transform-content.js +117 -0
  544. package/dist/commands/structure/zone-wall-merge.d.ts +5792 -0
  545. package/dist/commands/structure/zone-wall-merge.d.ts.map +1 -0
  546. package/dist/commands/structure/zone-wall-merge.js +135 -0
  547. package/dist/contracts/reference-discovery.d.ts +18 -0
  548. package/dist/contracts/reference-discovery.d.ts.map +1 -0
  549. package/dist/contracts/reference-discovery.js +100 -0
  550. package/dist/contracts/reference-inventory.d.ts +44 -0
  551. package/dist/contracts/reference-inventory.d.ts.map +1 -0
  552. package/dist/contracts/reference-inventory.js +952 -0
  553. package/dist/events/bus.d.ts +90 -10
  554. package/dist/events/bus.d.ts.map +1 -1
  555. package/dist/events/capture-sessions.d.ts +5 -0
  556. package/dist/events/capture-sessions.d.ts.map +1 -0
  557. package/dist/events/capture-sessions.js +31 -0
  558. package/dist/hooks/scene-registry/item-clip-registry.d.ts +6 -3
  559. package/dist/hooks/scene-registry/item-clip-registry.d.ts.map +1 -1
  560. package/dist/hooks/scene-registry/item-clip-registry.js +2 -1
  561. package/dist/hooks/scene-registry/scene-registry.d.ts.map +1 -1
  562. package/dist/hooks/spatial-grid/floor-placed-elevation.d.ts.map +1 -1
  563. package/dist/hooks/spatial-grid/floor-placed-elevation.js +15 -1
  564. package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts +4 -4
  565. package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts.map +1 -1
  566. package/dist/hooks/spatial-grid/spatial-grid-manager.js +56 -71
  567. package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts +3948 -2034
  568. package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts.map +1 -1
  569. package/dist/hooks/spatial-grid/spatial-grid-sync.js +86 -83
  570. package/dist/hooks/spatial-grid/spatial-grid.d.ts.map +1 -1
  571. package/dist/hooks/spatial-grid/support-host-patch.d.ts +1 -0
  572. package/dist/hooks/spatial-grid/support-host-patch.d.ts.map +1 -1
  573. package/dist/hooks/spatial-grid/support-host-patch.js +21 -5
  574. package/dist/hooks/spatial-grid/use-spatial-query.d.ts +3 -3
  575. package/dist/hooks/spatial-grid/wall-spatial-grid.d.ts.map +1 -1
  576. package/dist/index.d.ts +109 -14
  577. package/dist/index.d.ts.map +1 -1
  578. package/dist/index.js +103 -12
  579. package/dist/lib/__bench__/near-linear-walls.d.ts +2 -0
  580. package/dist/lib/__bench__/near-linear-walls.d.ts.map +1 -0
  581. package/dist/lib/__bench__/near-linear-walls.js +24 -0
  582. package/dist/lib/__bench__/structure-preview.bench.d.ts +2 -0
  583. package/dist/lib/__bench__/structure-preview.bench.d.ts.map +1 -0
  584. package/dist/lib/__bench__/structure-preview.bench.js +72 -0
  585. package/dist/lib/__fixtures__/mezzanine.d.ts +15636 -0
  586. package/dist/lib/__fixtures__/mezzanine.d.ts.map +1 -0
  587. package/dist/lib/__fixtures__/mezzanine.js +43 -0
  588. package/dist/lib/absorb-wall-separators.d.ts +4912 -0
  589. package/dist/lib/absorb-wall-separators.d.ts.map +1 -0
  590. package/dist/lib/absorb-wall-separators.js +65 -0
  591. package/dist/lib/angle-accumulator.d.ts +3 -0
  592. package/dist/lib/angle-accumulator.d.ts.map +1 -0
  593. package/dist/lib/angle-accumulator.js +13 -0
  594. package/dist/lib/artifact-store.d.ts +31 -0
  595. package/dist/lib/artifact-store.d.ts.map +1 -0
  596. package/dist/lib/artifact-store.js +42 -0
  597. package/dist/lib/assembly-stack.d.ts +54 -0
  598. package/dist/lib/assembly-stack.d.ts.map +1 -0
  599. package/dist/lib/assembly-stack.js +52 -0
  600. package/dist/lib/asset-storage.d.ts.map +1 -1
  601. package/dist/lib/asset-storage.js +3 -0
  602. package/dist/lib/below-grade-footprints.d.ts +65 -0
  603. package/dist/lib/below-grade-footprints.d.ts.map +1 -0
  604. package/dist/lib/below-grade-footprints.js +181 -0
  605. package/dist/lib/building-footprint.d.ts +33 -0
  606. package/dist/lib/building-footprint.d.ts.map +1 -0
  607. package/dist/lib/building-footprint.js +89 -0
  608. package/dist/lib/canonical-opening-ring.d.ts +3 -0
  609. package/dist/lib/canonical-opening-ring.d.ts.map +1 -0
  610. package/dist/lib/canonical-opening-ring.js +14 -0
  611. package/dist/lib/ceiling-children.d.ts +8 -0
  612. package/dist/lib/ceiling-children.d.ts.map +1 -0
  613. package/dist/lib/ceiling-children.js +36 -0
  614. package/dist/lib/ceiling-surface.d.ts +40 -0
  615. package/dist/lib/ceiling-surface.d.ts.map +1 -0
  616. package/dist/lib/ceiling-surface.js +65 -0
  617. package/dist/lib/corner-pair.d.ts +1129 -0
  618. package/dist/lib/corner-pair.d.ts.map +1 -0
  619. package/dist/lib/corner-pair.js +130 -0
  620. package/dist/lib/corner-snap.d.ts +54 -0
  621. package/dist/lib/corner-snap.d.ts.map +1 -0
  622. package/dist/lib/corner-snap.js +125 -0
  623. package/dist/lib/critically-damped.d.ts +11 -0
  624. package/dist/lib/critically-damped.d.ts.map +1 -0
  625. package/dist/lib/critically-damped.js +14 -0
  626. package/dist/lib/cutter-host.d.ts +5 -0
  627. package/dist/lib/cutter-host.d.ts.map +1 -0
  628. package/dist/lib/cutter-host.js +30 -0
  629. package/dist/lib/deepest-drawn.d.ts +18 -0
  630. package/dist/lib/deepest-drawn.d.ts.map +1 -0
  631. package/dist/lib/deepest-drawn.js +65 -0
  632. package/dist/lib/door-operation.d.ts +1 -1
  633. package/dist/lib/exterior-wall-loops.d.ts +17 -0
  634. package/dist/lib/exterior-wall-loops.d.ts.map +1 -0
  635. package/dist/lib/exterior-wall-loops.js +334 -0
  636. package/dist/lib/finish-script.d.ts +61 -0
  637. package/dist/lib/finish-script.d.ts.map +1 -0
  638. package/dist/lib/finish-script.js +86 -0
  639. package/dist/lib/floor-construction-lift.d.ts +4 -0
  640. package/dist/lib/floor-construction-lift.d.ts.map +1 -0
  641. package/dist/lib/floor-construction-lift.js +54 -0
  642. package/dist/lib/floor-footprint-key.d.ts +3 -0
  643. package/dist/lib/floor-footprint-key.d.ts.map +1 -0
  644. package/dist/lib/floor-footprint-key.js +9 -0
  645. package/dist/lib/floor-footprint-name.d.ts +11 -0
  646. package/dist/lib/floor-footprint-name.d.ts.map +1 -0
  647. package/dist/lib/floor-footprint-name.js +52 -0
  648. package/dist/lib/floor-foundation-datum.d.ts +31 -0
  649. package/dist/lib/floor-foundation-datum.d.ts.map +1 -0
  650. package/dist/lib/floor-foundation-datum.js +226 -0
  651. package/dist/lib/floor-foundation-stack.d.ts +16 -0
  652. package/dist/lib/floor-foundation-stack.d.ts.map +1 -0
  653. package/dist/lib/floor-foundation-stack.js +214 -0
  654. package/dist/lib/floor-intent-changes.d.ts +10 -0
  655. package/dist/lib/floor-intent-changes.d.ts.map +1 -0
  656. package/dist/lib/floor-intent-changes.js +461 -0
  657. package/dist/lib/floor-opening-footprints.d.ts +24 -0
  658. package/dist/lib/floor-opening-footprints.d.ts.map +1 -0
  659. package/dist/lib/floor-opening-footprints.js +127 -0
  660. package/dist/lib/floor-opening-intent.d.ts +16 -0
  661. package/dist/lib/floor-opening-intent.d.ts.map +1 -0
  662. package/dist/lib/floor-opening-intent.js +82 -0
  663. package/dist/lib/floor-plate-id.d.ts +5 -0
  664. package/dist/lib/floor-plate-id.d.ts.map +1 -0
  665. package/dist/lib/floor-plate-id.js +20 -0
  666. package/dist/lib/floor-plate-paint.d.ts +10 -0
  667. package/dist/lib/floor-plate-paint.d.ts.map +1 -0
  668. package/dist/lib/floor-plate-paint.js +31 -0
  669. package/dist/lib/floor-plates.d.ts +211 -0
  670. package/dist/lib/floor-plates.d.ts.map +1 -0
  671. package/dist/lib/floor-plates.js +729 -0
  672. package/dist/lib/floor-room-faces.d.ts +5 -0
  673. package/dist/lib/floor-room-faces.d.ts.map +1 -0
  674. package/dist/lib/floor-room-faces.js +29 -0
  675. package/dist/lib/floor-script.d.ts +24 -0
  676. package/dist/lib/floor-script.d.ts.map +1 -0
  677. package/dist/lib/floor-script.js +51 -0
  678. package/dist/lib/floor-step-finish.d.ts +49 -0
  679. package/dist/lib/floor-step-finish.d.ts.map +1 -0
  680. package/dist/lib/floor-step-finish.js +128 -0
  681. package/dist/lib/foundation-construction.d.ts +73 -0
  682. package/dist/lib/foundation-construction.d.ts.map +1 -0
  683. package/dist/lib/foundation-construction.js +242 -0
  684. package/dist/lib/foundation-standard.d.ts +30 -0
  685. package/dist/lib/foundation-standard.d.ts.map +1 -0
  686. package/dist/lib/foundation-standard.js +30 -0
  687. package/dist/lib/foundation-wall.d.ts +36 -0
  688. package/dist/lib/foundation-wall.d.ts.map +1 -0
  689. package/dist/lib/foundation-wall.js +66 -0
  690. package/dist/lib/generic-foundation.d.ts +40 -0
  691. package/dist/lib/generic-foundation.d.ts.map +1 -0
  692. package/dist/lib/generic-foundation.js +200 -0
  693. package/dist/lib/geometry-script-node.d.ts +111 -0
  694. package/dist/lib/geometry-script-node.d.ts.map +1 -0
  695. package/dist/lib/geometry-script-node.js +173 -0
  696. package/dist/lib/geometry-surfaces.d.ts +61 -0
  697. package/dist/lib/geometry-surfaces.d.ts.map +1 -0
  698. package/dist/lib/geometry-surfaces.js +156 -0
  699. package/dist/lib/grade-standing.d.ts +38 -0
  700. package/dist/lib/grade-standing.d.ts.map +1 -0
  701. package/dist/lib/grade-standing.js +137 -0
  702. package/dist/lib/ground-level.d.ts +20 -0
  703. package/dist/lib/ground-level.d.ts.map +1 -0
  704. package/dist/lib/ground-level.js +49 -0
  705. package/dist/lib/ground-over-part.d.ts +13 -0
  706. package/dist/lib/ground-over-part.d.ts.map +1 -0
  707. package/dist/lib/ground-over-part.js +94 -0
  708. package/dist/lib/ground-seat.d.ts +47 -0
  709. package/dist/lib/ground-seat.d.ts.map +1 -0
  710. package/dist/lib/ground-seat.js +61 -0
  711. package/dist/lib/ground-window.d.ts +39 -0
  712. package/dist/lib/ground-window.d.ts.map +1 -0
  713. package/dist/lib/ground-window.js +147 -0
  714. package/dist/lib/item-slab-support.d.ts +14 -0
  715. package/dist/lib/item-slab-support.d.ts.map +1 -0
  716. package/dist/lib/item-slab-support.js +40 -0
  717. package/dist/lib/level-footprints.d.ts +23 -0
  718. package/dist/lib/level-footprints.d.ts.map +1 -0
  719. package/dist/lib/level-footprints.js +398 -0
  720. package/dist/lib/level-name.d.ts +7 -0
  721. package/dist/lib/level-name.d.ts.map +1 -1
  722. package/dist/lib/level-name.js +11 -3
  723. package/dist/lib/new-zone.d.ts +10 -0
  724. package/dist/lib/new-zone.d.ts.map +1 -0
  725. package/dist/lib/new-zone.js +10 -0
  726. package/dist/lib/node-ancestry.d.ts +30 -0
  727. package/dist/lib/node-ancestry.d.ts.map +1 -0
  728. package/dist/lib/node-ancestry.js +76 -0
  729. package/dist/lib/object-cuts.d.ts +11 -0
  730. package/dist/lib/object-cuts.d.ts.map +1 -0
  731. package/dist/lib/object-cuts.js +63 -0
  732. package/dist/lib/opening-floor-datum.d.ts +24 -0
  733. package/dist/lib/opening-floor-datum.d.ts.map +1 -0
  734. package/dist/lib/opening-floor-datum.js +144 -0
  735. package/dist/lib/own-floor-intent.d.ts +15 -0
  736. package/dist/lib/own-floor-intent.d.ts.map +1 -0
  737. package/dist/lib/own-floor-intent.js +201 -0
  738. package/dist/lib/plate-reference.d.ts +3 -0
  739. package/dist/lib/plate-reference.d.ts.map +1 -0
  740. package/dist/lib/plate-reference.js +91 -0
  741. package/dist/lib/plate-surface.d.ts +120 -0
  742. package/dist/lib/plate-surface.d.ts.map +1 -0
  743. package/dist/lib/plate-surface.js +727 -0
  744. package/dist/lib/point-ask.d.ts +9 -0
  745. package/dist/lib/point-ask.d.ts.map +1 -0
  746. package/dist/lib/point-ask.js +36 -0
  747. package/dist/lib/polygon-boolean.d.ts +17 -0
  748. package/dist/lib/polygon-boolean.d.ts.map +1 -0
  749. package/dist/lib/polygon-boolean.js +195 -0
  750. package/dist/lib/polygon-label.d.ts +7 -0
  751. package/dist/lib/polygon-label.d.ts.map +1 -0
  752. package/dist/lib/polygon-label.js +94 -0
  753. package/dist/lib/room-drawn-floor.d.ts +29 -0
  754. package/dist/lib/room-drawn-floor.d.ts.map +1 -0
  755. package/dist/lib/room-drawn-floor.js +88 -0
  756. package/dist/lib/room-floor-choices.d.ts +11 -0
  757. package/dist/lib/room-floor-choices.d.ts.map +1 -0
  758. package/dist/lib/room-floor-choices.js +60 -0
  759. package/dist/lib/room-floor-feasibility.d.ts +25 -0
  760. package/dist/lib/room-floor-feasibility.d.ts.map +1 -0
  761. package/dist/lib/room-floor-feasibility.js +293 -0
  762. package/dist/lib/room-floor-plate.d.ts +3 -0
  763. package/dist/lib/room-floor-plate.d.ts.map +1 -0
  764. package/dist/lib/room-floor-plate.js +4 -0
  765. package/dist/lib/room-graph.d.ts +79 -0
  766. package/dist/lib/room-graph.d.ts.map +1 -0
  767. package/dist/lib/room-graph.js +1267 -0
  768. package/dist/lib/room-name.d.ts +12 -0
  769. package/dist/lib/room-name.d.ts.map +1 -0
  770. package/dist/lib/room-name.js +24 -0
  771. package/dist/lib/room-topology-index.d.ts +53 -5
  772. package/dist/lib/room-topology-index.d.ts.map +1 -1
  773. package/dist/lib/room-topology-index.js +176 -30
  774. package/dist/lib/room-vertical-placement.d.ts +12 -0
  775. package/dist/lib/room-vertical-placement.d.ts.map +1 -0
  776. package/dist/lib/room-vertical-placement.js +28 -0
  777. package/dist/lib/room-zone-adoption.d.ts +74 -0
  778. package/dist/lib/room-zone-adoption.d.ts.map +1 -0
  779. package/dist/lib/room-zone-adoption.js +150 -0
  780. package/dist/lib/script-inputs-key.d.ts +3 -0
  781. package/dist/lib/script-inputs-key.d.ts.map +1 -0
  782. package/dist/lib/script-inputs-key.js +13 -0
  783. package/dist/lib/setback-envelope.d.ts +163 -0
  784. package/dist/lib/setback-envelope.d.ts.map +1 -0
  785. package/dist/lib/setback-envelope.js +822 -0
  786. package/dist/lib/site-flatwork.d.ts +11 -0
  787. package/dist/lib/site-flatwork.d.ts.map +1 -0
  788. package/dist/lib/site-flatwork.js +11 -0
  789. package/dist/lib/site-ground-height.d.ts +13 -0
  790. package/dist/lib/site-ground-height.d.ts.map +1 -0
  791. package/dist/lib/site-ground-height.js +16 -0
  792. package/dist/lib/site-placement.d.ts +362 -0
  793. package/dist/lib/site-placement.d.ts.map +1 -0
  794. package/dist/lib/site-placement.js +942 -0
  795. package/dist/lib/slab-polygon.d.ts.map +1 -1
  796. package/dist/lib/slab-polygon.js +33 -12
  797. package/dist/lib/slots.d.ts +20 -0
  798. package/dist/lib/slots.d.ts.map +1 -1
  799. package/dist/lib/slots.js +44 -0
  800. package/dist/lib/snap-ease.d.ts +20 -0
  801. package/dist/lib/snap-ease.d.ts.map +1 -0
  802. package/dist/lib/snap-ease.js +50 -0
  803. package/dist/lib/space-detection.d.ts +14 -94
  804. package/dist/lib/space-detection.d.ts.map +1 -1
  805. package/dist/lib/space-detection.js +244 -1616
  806. package/dist/lib/structure-commit.d.ts +38 -0
  807. package/dist/lib/structure-commit.d.ts.map +1 -0
  808. package/dist/lib/structure-commit.js +52 -0
  809. package/dist/lib/structure-kernel.d.ts +66 -0
  810. package/dist/lib/structure-kernel.d.ts.map +1 -0
  811. package/dist/lib/structure-kernel.js +737 -0
  812. package/dist/lib/structure-reconcile.d.ts +15 -0
  813. package/dist/lib/structure-reconcile.d.ts.map +1 -0
  814. package/dist/lib/structure-reconcile.js +218 -0
  815. package/dist/lib/surface-support-references.d.ts +4 -0
  816. package/dist/lib/surface-support-references.d.ts.map +1 -0
  817. package/dist/lib/surface-support-references.js +19 -0
  818. package/dist/lib/terrain-contours.d.ts +29 -0
  819. package/dist/lib/terrain-contours.d.ts.map +1 -0
  820. package/dist/lib/terrain-contours.js +199 -0
  821. package/dist/lib/terrain-source-persisted.d.ts +42 -0
  822. package/dist/lib/terrain-source-persisted.d.ts.map +1 -0
  823. package/dist/lib/terrain-source-persisted.js +68 -0
  824. package/dist/lib/terrain-source.d.ts +2 -40
  825. package/dist/lib/terrain-source.d.ts.map +1 -1
  826. package/dist/lib/terrain-source.js +2 -68
  827. package/dist/lib/terrain-support-query.d.ts +93 -0
  828. package/dist/lib/terrain-support-query.d.ts.map +1 -0
  829. package/dist/lib/terrain-support-query.js +187 -0
  830. package/dist/lib/terrain-support.d.ts +1 -77
  831. package/dist/lib/terrain-support.d.ts.map +1 -1
  832. package/dist/lib/terrain-support.js +3 -181
  833. package/dist/lib/unit-containment.js +2 -2
  834. package/dist/lib/unit-report.d.ts.map +1 -1
  835. package/dist/lib/unit-report.js +5 -4
  836. package/dist/lib/wall-face-script.d.ts +66 -0
  837. package/dist/lib/wall-face-script.d.ts.map +1 -0
  838. package/dist/lib/wall-face-script.js +235 -0
  839. package/dist/lib/zone-colors.d.ts +11 -0
  840. package/dist/lib/zone-colors.d.ts.map +1 -0
  841. package/dist/lib/zone-colors.js +32 -0
  842. package/dist/lib/zone-quantities.d.ts.map +1 -1
  843. package/dist/lib/zone-quantities.js +117 -228
  844. package/dist/material-kinds.d.ts +9 -0
  845. package/dist/material-kinds.d.ts.map +1 -0
  846. package/dist/material-kinds.js +30 -0
  847. package/dist/material-library.d.ts +13 -5
  848. package/dist/material-library.d.ts.map +1 -1
  849. package/dist/material-library.js +622 -27
  850. package/dist/node-slots/block.d.ts +7 -0
  851. package/dist/node-slots/block.d.ts.map +1 -0
  852. package/dist/node-slots/block.js +27 -0
  853. package/dist/node-slots/cabinet.d.ts +4 -0
  854. package/dist/node-slots/cabinet.d.ts.map +1 -0
  855. package/dist/node-slots/cabinet.js +24 -0
  856. package/dist/node-slots/ceiling.d.ts +6 -0
  857. package/dist/node-slots/ceiling.d.ts.map +1 -0
  858. package/dist/node-slots/ceiling.js +7 -0
  859. package/dist/node-slots/column.d.ts +9 -0
  860. package/dist/node-slots/column.d.ts.map +1 -0
  861. package/dist/node-slots/column.js +24 -0
  862. package/dist/node-slots/door.d.ts +9 -0
  863. package/dist/node-slots/door.d.ts.map +1 -0
  864. package/dist/node-slots/door.js +20 -0
  865. package/dist/node-slots/duct.d.ts +5 -0
  866. package/dist/node-slots/duct.d.ts.map +1 -0
  867. package/dist/node-slots/duct.js +5 -0
  868. package/dist/node-slots/elevator.d.ts +9 -0
  869. package/dist/node-slots/elevator.d.ts.map +1 -0
  870. package/dist/node-slots/elevator.js +17 -0
  871. package/dist/node-slots/fence.d.ts +10 -0
  872. package/dist/node-slots/fence.d.ts.map +1 -0
  873. package/dist/node-slots/fence.js +23 -0
  874. package/dist/node-slots/index.d.ts +26 -0
  875. package/dist/node-slots/index.d.ts.map +1 -0
  876. package/dist/node-slots/index.js +98 -0
  877. package/dist/node-slots/lean-to-extension.d.ts +5 -0
  878. package/dist/node-slots/lean-to-extension.d.ts.map +1 -0
  879. package/dist/node-slots/lean-to-extension.js +15 -0
  880. package/dist/node-slots/procedural-item.d.ts +4 -0
  881. package/dist/node-slots/procedural-item.d.ts.map +1 -0
  882. package/dist/node-slots/procedural-item.js +3 -0
  883. package/dist/node-slots/roof-accessories.d.ts +9 -0
  884. package/dist/node-slots/roof-accessories.d.ts.map +1 -0
  885. package/dist/node-slots/roof-accessories.js +34 -0
  886. package/dist/node-slots/roof.d.ts +5 -0
  887. package/dist/node-slots/roof.d.ts.map +1 -0
  888. package/dist/node-slots/roof.js +12 -0
  889. package/dist/node-slots/shelf.d.ts +9 -0
  890. package/dist/node-slots/shelf.d.ts.map +1 -0
  891. package/dist/node-slots/shelf.js +30 -0
  892. package/dist/node-slots/slab.d.ts +7 -0
  893. package/dist/node-slots/slab.d.ts.map +1 -0
  894. package/dist/node-slots/slab.js +21 -0
  895. package/dist/node-slots/stair.d.ts +10 -0
  896. package/dist/node-slots/stair.d.ts.map +1 -0
  897. package/dist/node-slots/stair.js +21 -0
  898. package/dist/node-slots/wall.d.ts +12 -0
  899. package/dist/node-slots/wall.d.ts.map +1 -0
  900. package/dist/node-slots/wall.js +55 -0
  901. package/dist/node-slots/window.d.ts +5 -0
  902. package/dist/node-slots/window.d.ts.map +1 -0
  903. package/dist/node-slots/window.js +11 -0
  904. package/dist/procedural-items/design-placement.d.ts +49 -0
  905. package/dist/procedural-items/design-placement.d.ts.map +1 -0
  906. package/dist/procedural-items/design-placement.js +129 -0
  907. package/dist/procedural-items/design.d.ts +261 -0
  908. package/dist/procedural-items/design.d.ts.map +1 -0
  909. package/dist/procedural-items/design.js +707 -0
  910. package/dist/procedural-items/fixtures.d.ts +515 -75
  911. package/dist/procedural-items/fixtures.d.ts.map +1 -1
  912. package/dist/procedural-items/index.d.ts +5 -0
  913. package/dist/procedural-items/index.d.ts.map +1 -1
  914. package/dist/procedural-items/index.js +5 -0
  915. package/dist/procedural-items/integration.d.ts +156 -35
  916. package/dist/procedural-items/integration.d.ts.map +1 -1
  917. package/dist/procedural-items/joints.d.ts +56 -0
  918. package/dist/procedural-items/joints.d.ts.map +1 -0
  919. package/dist/procedural-items/joints.js +251 -0
  920. package/dist/procedural-items/library-colors.d.ts +34 -22
  921. package/dist/procedural-items/library-colors.d.ts.map +1 -1
  922. package/dist/procedural-items/library-colors.js +37 -3
  923. package/dist/procedural-items/motion-controller.d.ts +29 -0
  924. package/dist/procedural-items/motion-controller.d.ts.map +1 -0
  925. package/dist/procedural-items/motion-controller.js +130 -0
  926. package/dist/procedural-items/node.d.ts +528 -62
  927. package/dist/procedural-items/node.d.ts.map +1 -1
  928. package/dist/procedural-items/query.d.ts +19 -2
  929. package/dist/procedural-items/query.d.ts.map +1 -1
  930. package/dist/procedural-items/query.js +78 -39
  931. package/dist/procedural-items/recipe.d.ts +260 -16
  932. package/dist/procedural-items/recipe.d.ts.map +1 -1
  933. package/dist/procedural-items/recipe.js +933 -61
  934. package/dist/procedural-items/section.d.ts +27 -0
  935. package/dist/procedural-items/section.d.ts.map +1 -0
  936. package/dist/procedural-items/section.js +237 -0
  937. package/dist/procedural-items/spatial.d.ts +21 -0
  938. package/dist/procedural-items/spatial.d.ts.map +1 -1
  939. package/dist/procedural-items/spatial.js +90 -0
  940. package/dist/registry/handles.d.ts +2 -0
  941. package/dist/registry/handles.d.ts.map +1 -1
  942. package/dist/registry/index.d.ts +6 -4
  943. package/dist/registry/index.d.ts.map +1 -1
  944. package/dist/registry/index.js +4 -2
  945. package/dist/registry/mechanism.d.ts +9 -0
  946. package/dist/registry/mechanism.d.ts.map +1 -0
  947. package/dist/registry/mechanism.js +21 -0
  948. package/dist/registry/registry.d.ts +6 -3
  949. package/dist/registry/registry.d.ts.map +1 -1
  950. package/dist/registry/registry.js +59 -22
  951. package/dist/registry/scene-api.d.ts +21 -0
  952. package/dist/registry/scene-api.d.ts.map +1 -1
  953. package/dist/registry/scene-api.js +29 -13
  954. package/dist/registry/subtree.d.ts +8 -0
  955. package/dist/registry/subtree.d.ts.map +1 -1
  956. package/dist/registry/subtree.js +55 -0
  957. package/dist/registry/types.d.ts +460 -12
  958. package/dist/registry/types.d.ts.map +1 -1
  959. package/dist/schema/__fixtures__/node-fixtures.d.ts.map +1 -1
  960. package/dist/schema/__fixtures__/node-fixtures.js +2 -0
  961. package/dist/schema/assembly.d.ts +153 -0
  962. package/dist/schema/assembly.d.ts.map +1 -0
  963. package/dist/schema/assembly.js +155 -0
  964. package/dist/schema/asset-url.d.ts +2 -1
  965. package/dist/schema/asset-url.d.ts.map +1 -1
  966. package/dist/schema/asset-url.js +5 -2
  967. package/dist/schema/base.d.ts +28 -2
  968. package/dist/schema/base.d.ts.map +1 -1
  969. package/dist/schema/base.js +2 -0
  970. package/dist/schema/camera.d.ts +1 -1
  971. package/dist/schema/collection-templates.d.ts +46 -0
  972. package/dist/schema/collection-templates.d.ts.map +1 -0
  973. package/dist/schema/collection-templates.js +14 -0
  974. package/dist/schema/collections.d.ts +7 -0
  975. package/dist/schema/collections.d.ts.map +1 -1
  976. package/dist/schema/cut.d.ts +29 -0
  977. package/dist/schema/cut.d.ts.map +1 -0
  978. package/dist/schema/cut.js +50 -0
  979. package/dist/schema/geometry-metadata.d.ts +51 -0
  980. package/dist/schema/geometry-metadata.d.ts.map +1 -0
  981. package/dist/schema/geometry-metadata.js +57 -0
  982. package/dist/schema/geometry-source.d.ts +260 -0
  983. package/dist/schema/geometry-source.d.ts.map +1 -0
  984. package/dist/schema/geometry-source.js +144 -0
  985. package/dist/schema/index.d.ts +27 -12
  986. package/dist/schema/index.d.ts.map +1 -1
  987. package/dist/schema/index.js +29 -10
  988. package/dist/schema/material.d.ts +33 -33
  989. package/dist/schema/nodes/barrel-roof.d.ts +3 -0
  990. package/dist/schema/nodes/barrel-roof.d.ts.map +1 -0
  991. package/dist/schema/nodes/barrel-roof.js +11 -0
  992. package/dist/schema/nodes/block.d.ts +27 -1
  993. package/dist/schema/nodes/block.d.ts.map +1 -1
  994. package/dist/schema/nodes/block.js +1 -1
  995. package/dist/schema/nodes/box-vent.d.ts +32 -6
  996. package/dist/schema/nodes/box-vent.d.ts.map +1 -1
  997. package/dist/schema/nodes/building.d.ts +28 -1
  998. package/dist/schema/nodes/building.d.ts.map +1 -1
  999. package/dist/schema/nodes/building.js +2 -0
  1000. package/dist/schema/nodes/cabinet.d.ts +167 -114
  1001. package/dist/schema/nodes/cabinet.d.ts.map +1 -1
  1002. package/dist/schema/nodes/cabinet.js +1 -1
  1003. package/dist/schema/nodes/ceiling.d.ts +44 -7
  1004. package/dist/schema/nodes/ceiling.d.ts.map +1 -1
  1005. package/dist/schema/nodes/ceiling.js +8 -0
  1006. package/dist/schema/nodes/chimney.d.ts +42 -16
  1007. package/dist/schema/nodes/chimney.d.ts.map +1 -1
  1008. package/dist/schema/nodes/column.d.ts +321 -187
  1009. package/dist/schema/nodes/column.d.ts.map +1 -1
  1010. package/dist/schema/nodes/column.js +4 -0
  1011. package/dist/schema/nodes/construction-dimension.d.ts +53 -27
  1012. package/dist/schema/nodes/construction-dimension.d.ts.map +1 -1
  1013. package/dist/schema/nodes/cupola.d.ts +34 -8
  1014. package/dist/schema/nodes/cupola.d.ts.map +1 -1
  1015. package/dist/schema/nodes/curtain-wall.d.ts +21 -20
  1016. package/dist/schema/nodes/curtain-wall.d.ts.map +1 -1
  1017. package/dist/schema/nodes/curtain-wall.js +23 -0
  1018. package/dist/schema/nodes/door.d.ts +170 -44
  1019. package/dist/schema/nodes/door.d.ts.map +1 -1
  1020. package/dist/schema/nodes/door.js +37 -33
  1021. package/dist/schema/nodes/dormer.d.ts +56 -29
  1022. package/dist/schema/nodes/dormer.d.ts.map +1 -1
  1023. package/dist/schema/nodes/downspout.d.ts +36 -10
  1024. package/dist/schema/nodes/downspout.d.ts.map +1 -1
  1025. package/dist/schema/nodes/duct-fitting.d.ts +44 -18
  1026. package/dist/schema/nodes/duct-fitting.d.ts.map +1 -1
  1027. package/dist/schema/nodes/duct-segment.d.ts +34 -8
  1028. package/dist/schema/nodes/duct-segment.d.ts.map +1 -1
  1029. package/dist/schema/nodes/duct-terminal.d.ts +31 -5
  1030. package/dist/schema/nodes/duct-terminal.d.ts.map +1 -1
  1031. package/dist/schema/nodes/elevator.d.ts +34 -8
  1032. package/dist/schema/nodes/elevator.d.ts.map +1 -1
  1033. package/dist/schema/nodes/eyebrow-vent.d.ts +32 -6
  1034. package/dist/schema/nodes/eyebrow-vent.d.ts.map +1 -1
  1035. package/dist/schema/nodes/fence-feature.d.ts +141 -0
  1036. package/dist/schema/nodes/fence-feature.d.ts.map +1 -0
  1037. package/dist/schema/nodes/fence-feature.js +21 -0
  1038. package/dist/schema/nodes/fence-types.d.ts +32 -0
  1039. package/dist/schema/nodes/fence-types.d.ts.map +1 -0
  1040. package/dist/schema/nodes/fence-types.js +22 -0
  1041. package/dist/schema/nodes/fence.d.ts +175 -18
  1042. package/dist/schema/nodes/fence.d.ts.map +1 -1
  1043. package/dist/schema/nodes/fence.js +76 -7
  1044. package/dist/schema/nodes/floor-opening.d.ts +61 -0
  1045. package/dist/schema/nodes/floor-opening.d.ts.map +1 -0
  1046. package/dist/schema/nodes/floor-opening.js +17 -0
  1047. package/dist/schema/nodes/guide.d.ts +27 -1
  1048. package/dist/schema/nodes/guide.d.ts.map +1 -1
  1049. package/dist/schema/nodes/gutter.d.ts +33 -7
  1050. package/dist/schema/nodes/gutter.d.ts.map +1 -1
  1051. package/dist/schema/nodes/gutter.js +6 -5
  1052. package/dist/schema/nodes/hvac-equipment.d.ts +32 -6
  1053. package/dist/schema/nodes/hvac-equipment.d.ts.map +1 -1
  1054. package/dist/schema/nodes/imported-mesh.d.ts +27 -1
  1055. package/dist/schema/nodes/imported-mesh.d.ts.map +1 -1
  1056. package/dist/schema/nodes/item.d.ts +169 -13
  1057. package/dist/schema/nodes/item.d.ts.map +1 -1
  1058. package/dist/schema/nodes/item.js +13 -0
  1059. package/dist/schema/nodes/lean-to-extension.d.ts +55 -29
  1060. package/dist/schema/nodes/lean-to-extension.d.ts.map +1 -1
  1061. package/dist/schema/nodes/level.d.ts +28 -2
  1062. package/dist/schema/nodes/level.d.ts.map +1 -1
  1063. package/dist/schema/nodes/lineset.d.ts +27 -1
  1064. package/dist/schema/nodes/lineset.d.ts.map +1 -1
  1065. package/dist/schema/nodes/liquid-line.d.ts +27 -1
  1066. package/dist/schema/nodes/liquid-line.d.ts.map +1 -1
  1067. package/dist/schema/nodes/measurement.d.ts +27 -1
  1068. package/dist/schema/nodes/measurement.d.ts.map +1 -1
  1069. package/dist/schema/nodes/opening-types.d.ts +41 -0
  1070. package/dist/schema/nodes/opening-types.d.ts.map +1 -0
  1071. package/dist/schema/nodes/opening-types.js +48 -0
  1072. package/dist/schema/nodes/pipe-fitting.d.ts +34 -8
  1073. package/dist/schema/nodes/pipe-fitting.d.ts.map +1 -1
  1074. package/dist/schema/nodes/pipe-segment.d.ts +30 -4
  1075. package/dist/schema/nodes/pipe-segment.d.ts.map +1 -1
  1076. package/dist/schema/nodes/pipe-trap.d.ts +28 -2
  1077. package/dist/schema/nodes/pipe-trap.d.ts.map +1 -1
  1078. package/dist/schema/nodes/ridge-vent.d.ts +33 -7
  1079. package/dist/schema/nodes/ridge-vent.d.ts.map +1 -1
  1080. package/dist/schema/nodes/ridge-vent.js +3 -1
  1081. package/dist/schema/nodes/roof-glazing-config.d.ts +90 -0
  1082. package/dist/schema/nodes/roof-glazing-config.d.ts.map +1 -0
  1083. package/dist/schema/nodes/roof-glazing-config.js +34 -0
  1084. package/dist/schema/nodes/roof-glazing.d.ts +57 -0
  1085. package/dist/schema/nodes/roof-glazing.d.ts.map +1 -0
  1086. package/dist/schema/nodes/roof-glazing.js +514 -0
  1087. package/dist/schema/nodes/roof-segment-resize.d.ts +4 -0
  1088. package/dist/schema/nodes/roof-segment-resize.d.ts.map +1 -0
  1089. package/dist/schema/nodes/roof-segment-resize.js +21 -0
  1090. package/dist/schema/nodes/roof-segment-shape.d.ts +5 -0
  1091. package/dist/schema/nodes/roof-segment-shape.d.ts.map +1 -1
  1092. package/dist/schema/nodes/roof-segment-shape.js +44 -0
  1093. package/dist/schema/nodes/roof-segment-walls.d.ts +1 -1
  1094. package/dist/schema/nodes/roof-segment-walls.d.ts.map +1 -1
  1095. package/dist/schema/nodes/roof-segment-walls.js +26 -1
  1096. package/dist/schema/nodes/roof-segment.d.ts +175 -40
  1097. package/dist/schema/nodes/roof-segment.d.ts.map +1 -1
  1098. package/dist/schema/nodes/roof-segment.js +100 -20
  1099. package/dist/schema/nodes/roof-types.d.ts +14 -0
  1100. package/dist/schema/nodes/roof-types.d.ts.map +1 -0
  1101. package/dist/schema/nodes/roof-types.js +14 -0
  1102. package/dist/schema/nodes/roof.d.ts +122 -21
  1103. package/dist/schema/nodes/roof.d.ts.map +1 -1
  1104. package/dist/schema/nodes/roof.js +6 -0
  1105. package/dist/schema/nodes/scan.d.ts +27 -1
  1106. package/dist/schema/nodes/scan.d.ts.map +1 -1
  1107. package/dist/schema/nodes/separator.d.ts +50 -0
  1108. package/dist/schema/nodes/separator.d.ts.map +1 -0
  1109. package/dist/schema/nodes/separator.js +8 -0
  1110. package/dist/schema/nodes/shelf.d.ts +35 -9
  1111. package/dist/schema/nodes/shelf.d.ts.map +1 -1
  1112. package/dist/schema/nodes/site-facts.d.ts +64 -0
  1113. package/dist/schema/nodes/site-facts.d.ts.map +1 -0
  1114. package/dist/schema/nodes/site-facts.js +73 -0
  1115. package/dist/schema/nodes/site.d.ts +235 -1
  1116. package/dist/schema/nodes/site.d.ts.map +1 -1
  1117. package/dist/schema/nodes/site.js +115 -1
  1118. package/dist/schema/nodes/skylight.d.ts +64 -38
  1119. package/dist/schema/nodes/skylight.d.ts.map +1 -1
  1120. package/dist/schema/nodes/slab.d.ts +91 -7
  1121. package/dist/schema/nodes/slab.d.ts.map +1 -1
  1122. package/dist/schema/nodes/slab.js +37 -2
  1123. package/dist/schema/nodes/solar-panel.d.ts +40 -14
  1124. package/dist/schema/nodes/solar-panel.d.ts.map +1 -1
  1125. package/dist/schema/nodes/spawn.d.ts +27 -1
  1126. package/dist/schema/nodes/spawn.d.ts.map +1 -1
  1127. package/dist/schema/nodes/stair-construction.d.ts +21 -0
  1128. package/dist/schema/nodes/stair-construction.d.ts.map +1 -0
  1129. package/dist/schema/nodes/stair-construction.js +13 -0
  1130. package/dist/schema/nodes/stair-defaults.d.ts +16 -0
  1131. package/dist/schema/nodes/stair-defaults.d.ts.map +1 -0
  1132. package/dist/schema/nodes/stair-defaults.js +15 -0
  1133. package/dist/schema/nodes/stair-design-targets.d.ts +9 -0
  1134. package/dist/schema/nodes/stair-design-targets.d.ts.map +1 -0
  1135. package/dist/schema/nodes/stair-design-targets.js +7 -0
  1136. package/dist/schema/nodes/stair-segment.d.ts +78 -10
  1137. package/dist/schema/nodes/stair-segment.d.ts.map +1 -1
  1138. package/dist/schema/nodes/stair-segment.js +13 -0
  1139. package/dist/schema/nodes/stair-types.d.ts +29 -0
  1140. package/dist/schema/nodes/stair-types.d.ts.map +1 -0
  1141. package/dist/schema/nodes/stair-types.js +23 -0
  1142. package/dist/schema/nodes/stair.d.ts +131 -38
  1143. package/dist/schema/nodes/stair.d.ts.map +1 -1
  1144. package/dist/schema/nodes/stair.js +46 -3
  1145. package/dist/schema/nodes/structural-grid.d.ts +27 -1
  1146. package/dist/schema/nodes/structural-grid.d.ts.map +1 -1
  1147. package/dist/schema/nodes/surface-hole-metadata.d.ts +4 -1
  1148. package/dist/schema/nodes/surface-hole-metadata.d.ts.map +1 -1
  1149. package/dist/schema/nodes/surface-hole-metadata.js +2 -1
  1150. package/dist/schema/nodes/surface-paint-region.d.ts +14 -0
  1151. package/dist/schema/nodes/surface-paint-region.d.ts.map +1 -0
  1152. package/dist/schema/nodes/surface-paint-region.js +12 -0
  1153. package/dist/schema/nodes/turbine-vent.d.ts +32 -6
  1154. package/dist/schema/nodes/turbine-vent.d.ts.map +1 -1
  1155. package/dist/schema/nodes/unit.d.ts +29 -3
  1156. package/dist/schema/nodes/unit.d.ts.map +1 -1
  1157. package/dist/schema/nodes/wall.d.ts +771 -147
  1158. package/dist/schema/nodes/wall.d.ts.map +1 -1
  1159. package/dist/schema/nodes/wall.js +204 -186
  1160. package/dist/schema/nodes/window.d.ts +173 -38
  1161. package/dist/schema/nodes/window.d.ts.map +1 -1
  1162. package/dist/schema/nodes/window.js +22 -14
  1163. package/dist/schema/nodes/zone.d.ts +291 -4
  1164. package/dist/schema/nodes/zone.d.ts.map +1 -1
  1165. package/dist/schema/nodes/zone.js +56 -0
  1166. package/dist/schema/provenance.d.ts +118 -0
  1167. package/dist/schema/provenance.d.ts.map +1 -0
  1168. package/dist/schema/provenance.js +76 -0
  1169. package/dist/schema/scene-material.d.ts +5 -5
  1170. package/dist/schema/site-presentation.d.ts +100 -0
  1171. package/dist/schema/site-presentation.d.ts.map +1 -0
  1172. package/dist/schema/site-presentation.js +83 -0
  1173. package/dist/schema/source-ref.d.ts +23 -0
  1174. package/dist/schema/source-ref.d.ts.map +1 -0
  1175. package/dist/schema/source-ref.js +29 -0
  1176. package/dist/schema/types.d.ts +4442 -653
  1177. package/dist/schema/types.d.ts.map +1 -1
  1178. package/dist/schema/types.js +7 -0
  1179. package/dist/services/__fixtures__/wall-plane-top-boundary-repro.d.ts.map +1 -1
  1180. package/dist/services/alignment-anchors.d.ts +2 -1
  1181. package/dist/services/alignment-anchors.d.ts.map +1 -1
  1182. package/dist/services/alignment-anchors.js +9 -6
  1183. package/dist/services/index.d.ts +5 -1
  1184. package/dist/services/index.d.ts.map +1 -1
  1185. package/dist/services/index.js +5 -1
  1186. package/dist/services/level-height.d.ts.map +1 -1
  1187. package/dist/services/level-height.js +10 -4
  1188. package/dist/services/port-connectivity.d.ts +4 -0
  1189. package/dist/services/port-connectivity.d.ts.map +1 -1
  1190. package/dist/services/port-connectivity.js +35 -0
  1191. package/dist/services/project-file-sink.d.ts +9 -0
  1192. package/dist/services/project-file-sink.d.ts.map +1 -0
  1193. package/dist/services/project-file-sink.js +13 -0
  1194. package/dist/services/roof-bearing.d.ts +62 -0
  1195. package/dist/services/roof-bearing.d.ts.map +1 -0
  1196. package/dist/services/roof-bearing.js +234 -0
  1197. package/dist/services/roof-level.d.ts +121 -0
  1198. package/dist/services/roof-level.d.ts.map +1 -0
  1199. package/dist/services/roof-level.js +280 -0
  1200. package/dist/services/roof-move.d.ts +83 -0
  1201. package/dist/services/roof-move.d.ts.map +1 -0
  1202. package/dist/services/roof-move.js +316 -0
  1203. package/dist/services/stair-surface-snap.d.ts +14 -0
  1204. package/dist/services/stair-surface-snap.d.ts.map +1 -0
  1205. package/dist/services/stair-surface-snap.js +116 -0
  1206. package/dist/services/storey-datum.d.ts +12 -0
  1207. package/dist/services/storey-datum.d.ts.map +1 -0
  1208. package/dist/services/storey-datum.js +18 -0
  1209. package/dist/services/storey.d.ts +72 -6
  1210. package/dist/services/storey.d.ts.map +1 -1
  1211. package/dist/services/storey.js +215 -12
  1212. package/dist/services/surface-hosting.d.ts.map +1 -1
  1213. package/dist/services/surface-hosting.js +4 -1
  1214. package/dist/solar-panel-presets.d.ts +2 -2
  1215. package/dist/store/actions/node-actions.d.ts +4994 -8
  1216. package/dist/store/actions/node-actions.d.ts.map +1 -1
  1217. package/dist/store/actions/node-actions.js +541 -175
  1218. package/dist/store/derived-node-guard.d.ts +84 -0
  1219. package/dist/store/derived-node-guard.d.ts.map +1 -0
  1220. package/dist/store/derived-node-guard.js +586 -0
  1221. package/dist/store/history-control.d.ts +73 -0
  1222. package/dist/store/history-control.d.ts.map +1 -1
  1223. package/dist/store/history-control.js +183 -5
  1224. package/dist/store/history-drafts.d.ts +48 -0
  1225. package/dist/store/history-drafts.d.ts.map +1 -0
  1226. package/dist/store/history-drafts.js +403 -0
  1227. package/dist/store/history-invalidation.d.ts.map +1 -1
  1228. package/dist/store/history-invalidation.js +1 -0
  1229. package/dist/store/item-interaction.d.ts +28 -0
  1230. package/dist/store/item-interaction.d.ts.map +1 -0
  1231. package/dist/store/item-interaction.js +34 -0
  1232. package/dist/store/registered-node-defaults.d.ts +11 -0
  1233. package/dist/store/registered-node-defaults.d.ts.map +1 -0
  1234. package/dist/store/registered-node-defaults.js +25 -0
  1235. package/dist/store/scene-annotations.d.ts +9827 -0
  1236. package/dist/store/scene-annotations.d.ts.map +1 -0
  1237. package/dist/store/scene-annotations.js +107 -0
  1238. package/dist/store/scene-preview.d.ts +16 -0
  1239. package/dist/store/scene-preview.d.ts.map +1 -0
  1240. package/dist/store/scene-preview.js +144 -0
  1241. package/dist/store/use-interactive.d.ts +23 -1
  1242. package/dist/store/use-interactive.d.ts.map +1 -1
  1243. package/dist/store/use-interactive.js +128 -5
  1244. package/dist/store/use-live-node-overrides.d.ts.map +1 -1
  1245. package/dist/store/use-live-terrain.d.ts.map +1 -1
  1246. package/dist/store/use-live-transforms.d.ts.map +1 -1
  1247. package/dist/store/use-scene.d.ts +68 -12
  1248. package/dist/store/use-scene.d.ts.map +1 -1
  1249. package/dist/store/use-scene.js +452 -308
  1250. package/dist/systems/elevator/elevator-dispatch.js +1 -1
  1251. package/dist/systems/elevator/elevator-opening-sync.d.ts.map +1 -1
  1252. package/dist/systems/elevator/elevator-opening-sync.js +4 -6
  1253. package/dist/systems/elevator/elevator-opening-system.d.ts.map +1 -1
  1254. package/dist/systems/elevator/elevator-opening-system.js +12 -6
  1255. package/dist/systems/elevator/elevator-service.d.ts.map +1 -1
  1256. package/dist/systems/elevator/elevator-service.js +8 -3
  1257. package/dist/systems/fence/fence-centerline.d.ts.map +1 -1
  1258. package/dist/systems/fence/fence-centerline.js +6 -5
  1259. package/dist/systems/fence/fence-features.d.ts +36 -0
  1260. package/dist/systems/fence/fence-features.d.ts.map +1 -0
  1261. package/dist/systems/fence/fence-features.js +105 -0
  1262. package/dist/systems/fence/fence-spline.d.ts +8 -5
  1263. package/dist/systems/fence/fence-spline.d.ts.map +1 -1
  1264. package/dist/systems/fence/fence-spline.js +51 -16
  1265. package/dist/systems/owned-floor-openings.d.ts +9 -0
  1266. package/dist/systems/owned-floor-openings.d.ts.map +1 -0
  1267. package/dist/systems/owned-floor-openings.js +347 -0
  1268. package/dist/systems/reconcile-owned-floor-openings.d.ts +3 -0
  1269. package/dist/systems/reconcile-owned-floor-openings.d.ts.map +1 -0
  1270. package/dist/systems/reconcile-owned-floor-openings.js +25 -0
  1271. package/dist/systems/roof/roof-elevation-system.d.ts.map +1 -1
  1272. package/dist/systems/roof/roof-elevation-system.js +9 -3
  1273. package/dist/systems/roof/roof-elevation.d.ts +5 -0
  1274. package/dist/systems/roof/roof-elevation.d.ts.map +1 -1
  1275. package/dist/systems/roof/roof-elevation.js +91 -62
  1276. package/dist/systems/slab/__fixtures__/doorway-steps.d.ts +8 -0
  1277. package/dist/systems/slab/__fixtures__/doorway-steps.d.ts.map +1 -0
  1278. package/dist/systems/slab/__fixtures__/doorway-steps.js +62 -0
  1279. package/dist/systems/slab/__fixtures__/floor-step.d.ts +6743 -0
  1280. package/dist/systems/slab/__fixtures__/floor-step.d.ts.map +1 -0
  1281. package/dist/systems/slab/__fixtures__/floor-step.js +66 -0
  1282. package/dist/systems/slab/__fixtures__/raised-room.d.ts +6848 -0
  1283. package/dist/systems/slab/__fixtures__/raised-room.d.ts.map +1 -0
  1284. package/dist/systems/slab/__fixtures__/raised-room.js +54 -0
  1285. package/dist/systems/slab/ensure-slab-openings.d.ts +9 -0
  1286. package/dist/systems/slab/ensure-slab-openings.d.ts.map +1 -0
  1287. package/dist/systems/slab/ensure-slab-openings.js +41 -0
  1288. package/dist/systems/slab/slab-support.d.ts +30 -8
  1289. package/dist/systems/slab/slab-support.d.ts.map +1 -1
  1290. package/dist/systems/slab/slab-support.js +547 -62
  1291. package/dist/systems/stair/stair-base-elevation.d.ts +3 -0
  1292. package/dist/systems/stair/stair-base-elevation.d.ts.map +1 -0
  1293. package/dist/systems/stair/stair-base-elevation.js +49 -0
  1294. package/dist/systems/stair/stair-clearance.d.ts +39 -0
  1295. package/dist/systems/stair/stair-clearance.d.ts.map +1 -0
  1296. package/dist/systems/stair/stair-clearance.js +508 -0
  1297. package/dist/systems/stair/stair-construction.d.ts +37 -0
  1298. package/dist/systems/stair/stair-construction.d.ts.map +1 -0
  1299. package/dist/systems/stair/stair-construction.js +314 -0
  1300. package/dist/systems/stair/stair-detail-budget.d.ts +13 -0
  1301. package/dist/systems/stair/stair-detail-budget.d.ts.map +1 -0
  1302. package/dist/systems/stair/stair-detail-budget.js +64 -0
  1303. package/dist/systems/stair/stair-flight.d.ts +2 -2
  1304. package/dist/systems/stair/stair-flight.d.ts.map +1 -1
  1305. package/dist/systems/stair/stair-flight.js +4 -3
  1306. package/dist/systems/stair/stair-floor-footprints.d.ts +7 -0
  1307. package/dist/systems/stair/stair-floor-footprints.d.ts.map +1 -0
  1308. package/dist/systems/stair/stair-floor-footprints.js +113 -0
  1309. package/dist/systems/stair/stair-footprint.d.ts +9 -1
  1310. package/dist/systems/stair/stair-footprint.d.ts.map +1 -1
  1311. package/dist/systems/stair/stair-footprint.js +123 -57
  1312. package/dist/systems/stair/stair-layout.d.ts +39 -0
  1313. package/dist/systems/stair/stair-layout.d.ts.map +1 -0
  1314. package/dist/systems/stair/stair-layout.js +58 -0
  1315. package/dist/systems/stair/stair-opening-preview.d.ts +4022 -2061
  1316. package/dist/systems/stair/stair-opening-preview.d.ts.map +1 -1
  1317. package/dist/systems/stair/stair-opening-sync.d.ts +8 -2
  1318. package/dist/systems/stair/stair-opening-sync.d.ts.map +1 -1
  1319. package/dist/systems/stair/stair-opening-sync.js +136 -315
  1320. package/dist/systems/stair/stair-opening-system.d.ts.map +1 -1
  1321. package/dist/systems/stair/stair-opening-system.js +40 -8
  1322. package/dist/systems/stair/stair-presets.d.ts +284 -0
  1323. package/dist/systems/stair/stair-presets.d.ts.map +1 -0
  1324. package/dist/systems/stair/stair-presets.js +158 -0
  1325. package/dist/systems/stair/stair-rail-budget.d.ts +6 -0
  1326. package/dist/systems/stair/stair-rail-budget.d.ts.map +1 -0
  1327. package/dist/systems/stair/stair-rail-budget.js +36 -0
  1328. package/dist/systems/stair/stair-rail-path.d.ts +22 -0
  1329. package/dist/systems/stair/stair-rail-path.d.ts.map +1 -0
  1330. package/dist/systems/stair/stair-rail-path.js +497 -0
  1331. package/dist/systems/stair/stair-rise-edit.d.ts +9 -0
  1332. package/dist/systems/stair/stair-rise-edit.d.ts.map +1 -0
  1333. package/dist/systems/stair/stair-rise-edit.js +46 -0
  1334. package/dist/systems/stair/stair-rise-query.d.ts +40 -0
  1335. package/dist/systems/stair/stair-rise-query.d.ts.map +1 -0
  1336. package/dist/systems/stair/stair-rise-query.js +175 -0
  1337. package/dist/systems/stair/stair-rise.d.ts +4 -19
  1338. package/dist/systems/stair/stair-rise.d.ts.map +1 -1
  1339. package/dist/systems/stair/stair-rise.js +8 -71
  1340. package/dist/systems/stair/stair-sizing.d.ts +416 -0
  1341. package/dist/systems/stair/stair-sizing.d.ts.map +1 -0
  1342. package/dist/systems/stair/stair-sizing.js +255 -0
  1343. package/dist/systems/stair/stair-sweep-edit.d.ts +7 -0
  1344. package/dist/systems/stair/stair-sweep-edit.d.ts.map +1 -0
  1345. package/dist/systems/stair/stair-sweep-edit.js +8 -0
  1346. package/dist/systems/stair/stair-walking-line.d.ts +5 -0
  1347. package/dist/systems/stair/stair-walking-line.d.ts.map +1 -0
  1348. package/dist/systems/stair/stair-walking-line.js +91 -0
  1349. package/dist/systems/stair/stair-winder.d.ts +36 -0
  1350. package/dist/systems/stair/stair-winder.d.ts.map +1 -0
  1351. package/dist/systems/stair/stair-winder.js +173 -0
  1352. package/dist/systems/wall/wall-assembly.d.ts +245 -0
  1353. package/dist/systems/wall/wall-assembly.d.ts.map +1 -0
  1354. package/dist/systems/wall/wall-assembly.js +875 -0
  1355. package/dist/systems/wall/wall-curve.d.ts +7 -1
  1356. package/dist/systems/wall/wall-curve.d.ts.map +1 -1
  1357. package/dist/systems/wall/wall-curve.js +34 -5
  1358. package/dist/systems/wall/wall-finish.d.ts +102 -0
  1359. package/dist/systems/wall/wall-finish.d.ts.map +1 -0
  1360. package/dist/systems/wall/wall-finish.js +264 -0
  1361. package/dist/systems/wall/wall-footprint.d.ts +3 -0
  1362. package/dist/systems/wall/wall-footprint.d.ts.map +1 -1
  1363. package/dist/systems/wall/wall-footprint.js +15 -13
  1364. package/dist/systems/wall/wall-frame.d.ts +45 -0
  1365. package/dist/systems/wall/wall-frame.d.ts.map +1 -0
  1366. package/dist/systems/wall/wall-frame.js +170 -0
  1367. package/dist/systems/wall/wall-layer-bands.d.ts +38 -0
  1368. package/dist/systems/wall/wall-layer-bands.d.ts.map +1 -0
  1369. package/dist/systems/wall/wall-layer-bands.js +109 -0
  1370. package/dist/systems/wall/wall-merge.d.ts +20 -1
  1371. package/dist/systems/wall/wall-merge.d.ts.map +1 -1
  1372. package/dist/systems/wall/wall-merge.js +189 -18
  1373. package/dist/systems/wall/wall-mitering.d.ts +6 -5
  1374. package/dist/systems/wall/wall-mitering.d.ts.map +1 -1
  1375. package/dist/systems/wall/wall-mitering.js +70 -20
  1376. package/dist/systems/wall/wall-operations.d.ts +1 -1
  1377. package/dist/systems/wall/wall-operations.d.ts.map +1 -1
  1378. package/dist/systems/wall/wall-operations.js +2 -1
  1379. package/dist/systems/wall/wall-paint-plan.d.ts +30 -0
  1380. package/dist/systems/wall/wall-paint-plan.d.ts.map +1 -0
  1381. package/dist/systems/wall/wall-paint-plan.js +167 -0
  1382. package/dist/systems/wall/wall-room-sides.d.ts +14 -0
  1383. package/dist/systems/wall/wall-room-sides.d.ts.map +1 -0
  1384. package/dist/systems/wall/wall-room-sides.js +67 -0
  1385. package/dist/systems/wall/wall-step-openings.d.ts +17 -0
  1386. package/dist/systems/wall/wall-step-openings.d.ts.map +1 -0
  1387. package/dist/systems/wall/wall-step-openings.js +32 -0
  1388. package/dist/systems/wall/wall-top.d.ts +7 -8
  1389. package/dist/systems/wall/wall-top.d.ts.map +1 -1
  1390. package/dist/systems/wall/wall-top.js +15 -13
  1391. package/dist/systems/wall/wall-topology.d.ts +25 -0
  1392. package/dist/systems/wall/wall-topology.d.ts.map +1 -1
  1393. package/dist/systems/wall/wall-topology.js +408 -5
  1394. package/dist/systems/wall/wall-trim.d.ts +7 -0
  1395. package/dist/systems/wall/wall-trim.d.ts.map +1 -0
  1396. package/dist/systems/wall/wall-trim.js +10 -0
  1397. package/dist/utils/clone-scene-graph.d.ts +6 -0
  1398. package/dist/utils/clone-scene-graph.d.ts.map +1 -1
  1399. package/dist/utils/clone-scene-graph.js +131 -15
  1400. package/dist/utils/ensure-scene-openings.d.ts +9823 -0
  1401. package/dist/utils/ensure-scene-openings.d.ts.map +1 -0
  1402. package/dist/utils/ensure-scene-openings.js +29 -0
  1403. package/dist/utils/exterior-threshold-migration.d.ts +4 -0
  1404. package/dist/utils/exterior-threshold-migration.d.ts.map +1 -0
  1405. package/dist/utils/exterior-threshold-migration.js +114 -0
  1406. package/dist/utils/floor-follow-migration.d.ts +3 -0
  1407. package/dist/utils/floor-follow-migration.d.ts.map +1 -0
  1408. package/dist/utils/floor-follow-migration.js +29 -0
  1409. package/dist/utils/floor-opening-migration.d.ts +13 -0
  1410. package/dist/utils/floor-opening-migration.d.ts.map +1 -0
  1411. package/dist/utils/floor-opening-migration.js +148 -0
  1412. package/dist/utils/floor-piece-adoption.d.ts +50 -0
  1413. package/dist/utils/floor-piece-adoption.d.ts.map +1 -0
  1414. package/dist/utils/floor-piece-adoption.js +182 -0
  1415. package/dist/utils/floor-plate-migration.d.ts +4936 -0
  1416. package/dist/utils/floor-plate-migration.d.ts.map +1 -0
  1417. package/dist/utils/floor-plate-migration.js +1360 -0
  1418. package/dist/utils/heal-plan-coordinates.d.ts +2 -0
  1419. package/dist/utils/heal-plan-coordinates.d.ts.map +1 -0
  1420. package/dist/utils/heal-plan-coordinates.js +69 -0
  1421. package/dist/utils/heal-scene-graph.d.ts +32 -6
  1422. package/dist/utils/heal-scene-graph.d.ts.map +1 -1
  1423. package/dist/utils/heal-scene-graph.js +78 -16
  1424. package/dist/utils/legacy-material-slots.d.ts +23 -0
  1425. package/dist/utils/legacy-material-slots.d.ts.map +1 -0
  1426. package/dist/utils/legacy-material-slots.js +120 -0
  1427. package/dist/utils/legacy-opening-datums.d.ts +11 -0
  1428. package/dist/utils/legacy-opening-datums.d.ts.map +1 -0
  1429. package/dist/utils/legacy-opening-datums.js +92 -0
  1430. package/dist/utils/legacy-wall-datums.d.ts +6 -0
  1431. package/dist/utils/legacy-wall-datums.d.ts.map +1 -0
  1432. package/dist/utils/legacy-wall-datums.js +199 -0
  1433. package/dist/utils/load-migration.d.ts +28 -0
  1434. package/dist/utils/load-migration.d.ts.map +1 -0
  1435. package/dist/utils/load-migration.js +89 -0
  1436. package/dist/utils/node-defaults.d.ts +37 -0
  1437. package/dist/utils/node-defaults.d.ts.map +1 -0
  1438. package/dist/utils/node-defaults.js +96 -0
  1439. package/dist/utils/normalize-legacy-structure.d.ts +2 -0
  1440. package/dist/utils/normalize-legacy-structure.d.ts.map +1 -0
  1441. package/dist/utils/normalize-legacy-structure.js +61 -0
  1442. package/dist/utils/omit-undefined.d.ts +2 -0
  1443. package/dist/utils/omit-undefined.d.ts.map +1 -0
  1444. package/dist/utils/omit-undefined.js +17 -0
  1445. package/dist/utils/owned-floor-opening-migration.d.ts +4918 -0
  1446. package/dist/utils/owned-floor-opening-migration.d.ts.map +1 -0
  1447. package/dist/utils/owned-floor-opening-migration.js +365 -0
  1448. package/dist/utils/reconcile-structure-on-load.d.ts +4918 -0
  1449. package/dist/utils/reconcile-structure-on-load.d.ts.map +1 -0
  1450. package/dist/utils/reconcile-structure-on-load.js +307 -0
  1451. package/dist/utils/room-zone-migration.d.ts +18 -0
  1452. package/dist/utils/room-zone-migration.d.ts.map +1 -0
  1453. package/dist/utils/room-zone-migration.js +258 -0
  1454. package/dist/utils/scene-migrations.d.ts +16 -1
  1455. package/dist/utils/scene-migrations.d.ts.map +1 -1
  1456. package/dist/utils/scene-migrations.js +15 -1
  1457. package/dist/utils/semantic-equal.d.ts +3 -0
  1458. package/dist/utils/semantic-equal.d.ts.map +1 -0
  1459. package/dist/utils/semantic-equal.js +26 -0
  1460. package/dist/utils/structure-id.d.ts +4 -0
  1461. package/dist/utils/structure-id.d.ts.map +1 -0
  1462. package/dist/utils/structure-id.js +115 -0
  1463. package/dist/utils/types.d.ts.map +1 -1
  1464. package/dist/utils/vertical-scene-migration.d.ts +8 -8
  1465. package/dist/utils/vertical-scene-migration.d.ts.map +1 -1
  1466. package/dist/utils/vertical-scene-migration.js +18 -8
  1467. package/dist/utils/wall-assembly-migration.d.ts +14 -0
  1468. package/dist/utils/wall-assembly-migration.d.ts.map +1 -0
  1469. package/dist/utils/wall-assembly-migration.js +23 -0
  1470. package/dist/utils/wall-face-migration.d.ts +23 -0
  1471. package/dist/utils/wall-face-migration.d.ts.map +1 -0
  1472. package/dist/utils/wall-face-migration.js +246 -0
  1473. package/dist/validation/opening-bounds.d.ts +36 -0
  1474. package/dist/validation/opening-bounds.d.ts.map +1 -0
  1475. package/dist/validation/opening-bounds.js +34 -0
  1476. package/dist/validation/validate-build-json.d.ts +2 -0
  1477. package/dist/validation/validate-build-json.d.ts.map +1 -1
  1478. package/dist/validation/validate-build-json.js +36 -1
  1479. package/package.json +69 -10
  1480. package/dist/services/surface-hosting-procedural-parity.fixtures.d.ts +0 -13
  1481. package/dist/services/surface-hosting-procedural-parity.fixtures.d.ts.map +0 -1
  1482. package/dist/services/surface-hosting-procedural-parity.fixtures.js +0 -4691
  1483. package/dist/services/surface-hosting-shelf-parity.fixtures.d.ts +0 -1060
  1484. package/dist/services/surface-hosting-shelf-parity.fixtures.d.ts.map +0 -1
  1485. package/dist/services/surface-hosting-shelf-parity.fixtures.js +0 -3127
@@ -0,0 +1,1076 @@
1
+ import { refuse } from '../agent-tools/refusal.js';
2
+ import { doorTypeFields } from '../building/door-types.js';
3
+ import { DOOR_STYLES, doorStyleLook, getWindowStyleOverrides, WINDOW_STYLES, } from '../building/opening-style-presets.js';
4
+ import { windowTakesStyle, windowTypeFields } from '../building/window-types.js';
5
+ import { floorRoomFaces } from '../lib/floor-room-faces.js';
6
+ import { matchScriptSlotsToLibrary, requireMeasured, scriptedSize, scriptSource, } from '../lib/geometry-script-node.js';
7
+ import { detectSpacesForLevel } from '../lib/space-detection.js';
8
+ import { reconcileSceneStructure } from '../lib/structure-reconcile.js';
9
+ import { wallFaceScriptInputs } from '../lib/wall-face-script.js';
10
+ import { nearestLibraryColorRef } from '../procedural-items/library-colors.js';
11
+ import { ColumnNode, DoorNode, LevelNode, SlabNode, WallNode, WindowNode, ZoneNode, } from '../schema/index.js';
12
+ import { DoorType, WindowType } from '../schema/nodes/opening-types.js';
13
+ import { resolveCeilingHeight } from '../services/level-height.js';
14
+ import { CEILING_DRAW_OFFSET } from '../services/storey.js';
15
+ import { getWallLocalFaceZ } from '../systems/wall/wall-frame.js';
16
+ import { roomFaceCover } from '../systems/wall/wall-room-sides.js';
17
+ import { migrateRoomZones } from '../utils/room-zone-migration.js';
18
+ import { addObject } from './add-object.js';
19
+ import { authoredSceneChanges } from './authored-scene-merge.js';
20
+ import { paint } from './paint.js';
21
+ import { pointInPolygon, projectWorldPointToWallLocalX } from './plan-geometry.js';
22
+ import { resolveInlinePaintMaterial } from './scene-materials.js';
23
+ import { setWallSkirting } from './wall-skirting.js';
24
+ const JOIN_REACH = 0.3;
25
+ const THIN_SLAB = 0.02;
26
+ const MANY_SLABS = 20;
27
+ const MANY_REGIONS = 24;
28
+ const HEX = /^#[0-9a-f]{6}$/i;
29
+ const GLASS = 'library:preset-glass';
30
+ /**
31
+ * Explicit payload keys retain their identities across revisions; derived nodes use the
32
+ * conversion's retained seed. A changed payload never remints every existing wall or item.
33
+ */
34
+ function idFactory(seed, previous = {}) {
35
+ const counts = new Map();
36
+ return (kind, key) => {
37
+ const n = (counts.get(kind) ?? 0) + 1;
38
+ counts.set(kind, n);
39
+ if (key && previous[key]?.startsWith(`${kind}_`))
40
+ return previous[key];
41
+ let hash = 0x811c9dc5;
42
+ for (const ch of `${seed}:${kind}:${key ?? n}`)
43
+ hash = Math.imul(hash ^ ch.charCodeAt(0), 0x01000193) >>> 0;
44
+ return `${kind}_as${hash.toString(16).padStart(8, '0')}`;
45
+ };
46
+ }
47
+ function payloadSeed(payload) {
48
+ let hash = 0x811c9dc5;
49
+ for (const ch of JSON.stringify(payload))
50
+ hash = Math.imul(hash ^ ch.charCodeAt(0), 0x01000193) >>> 0;
51
+ return hash.toString(16);
52
+ }
53
+ const dist = (a, b) => Math.hypot(a[0] - b[0], a[1] - b[1]);
54
+ const metres = (value) => `${value.toFixed(2)} m`;
55
+ /**
56
+ * Where a wall end meets another wall's centerline: the projection onto that line, as long as it
57
+ * lands on the wall or within reach past its ends. The line, not the segment, so a partition
58
+ * stopping short of a wall extends to it, and the wall it meets does not slide to the partition.
59
+ */
60
+ function nearestOnSegment(p, a, b) {
61
+ const len = Math.hypot(b[0] - a[0], b[1] - a[1]) || 1;
62
+ const t = ((p[0] - a[0]) * (b[0] - a[0]) + (p[1] - a[1]) * (b[1] - a[1])) / (len * len);
63
+ if (t * len < -JOIN_REACH || (t - 1) * len > JOIN_REACH)
64
+ return { point: [p[0], p[1]], distance: Number.POSITIVE_INFINITY };
65
+ const q = [a[0] + t * (b[0] - a[0]), a[1] + t * (b[1] - a[1])];
66
+ return { point: q, distance: dist(p, q) };
67
+ }
68
+ const cross = (o, a, b) => (a[0] - o[0]) * (b[1] - o[1]) - (a[1] - o[1]) * (b[0] - o[0]);
69
+ /** Whether two segments cross each other's interior (touching ends and shared edges do not). */
70
+ function segmentsCross(a, b, c, d) {
71
+ const [d1, d2, d3, d4] = [cross(c, d, a), cross(c, d, b), cross(a, b, c), cross(a, b, d)];
72
+ return d1 * d2 < 0 && d3 * d4 < 0;
73
+ }
74
+ /** Whether two polygons share interior area: a slab flush against a wall's face does not. */
75
+ function polygonsOverlap(a, b) {
76
+ if (a.some((p) => pointInPolygon(p, b, false)) || b.some((p) => pointInPolygon(p, a, false)))
77
+ return true;
78
+ for (let i = 0; i < a.length; i++)
79
+ for (let j = 0; j < b.length; j++)
80
+ if (segmentsCross(a[i], a[(i + 1) % a.length], b[j], b[(j + 1) % b.length]))
81
+ return true;
82
+ return false;
83
+ }
84
+ /** A wall's footprint, pulled in by a few millimetres so a slab meeting its face is not on it. */
85
+ function wallFootprint(wall) {
86
+ const inset = 0.005;
87
+ const [dx, dz] = [wall.end[0] - wall.start[0], wall.end[1] - wall.start[1]];
88
+ const len = Math.hypot(dx, dz) || 1;
89
+ const [ux, uz] = [dx / len, dz / len];
90
+ const half = Math.max(wall.thickness / 2 - inset, 0.001);
91
+ const s = [wall.start[0] + ux * inset, wall.start[1] + uz * inset];
92
+ const e = [wall.end[0] - ux * inset, wall.end[1] - uz * inset];
93
+ return [
94
+ [s[0] - uz * half, s[1] + ux * half],
95
+ [e[0] - uz * half, e[1] + ux * half],
96
+ [e[0] + uz * half, e[1] - ux * half],
97
+ [s[0] + uz * half, s[1] - ux * half],
98
+ ];
99
+ }
100
+ function toLocal(frame, world) {
101
+ const [dx, dy, dz] = [
102
+ world[0] - frame.position[0],
103
+ world[1] - frame.position[1],
104
+ world[2] - frame.position[2],
105
+ ];
106
+ const [c, s] = [Math.cos(frame.yaw), Math.sin(frame.yaw)];
107
+ return [c * dx - s * dz, dy, s * dx + c * dz];
108
+ }
109
+ const MATTE = { roughness: 0.9, metalness: 0 };
110
+ /**
111
+ * The finish a payload value writes. A library or scene ref passes through; a hex colour is kept
112
+ * as an exact native material, one scene material per distinct colour and surface across the
113
+ * payload, named by them. A host that keeps no scene materials gets the nearest library colour,
114
+ * said once.
115
+ */
116
+ function finishPool(context, say) {
117
+ const materials = context.materials
118
+ ? { ...context.materials }
119
+ : undefined;
120
+ const created = [];
121
+ let snapped = false;
122
+ return {
123
+ materials,
124
+ created,
125
+ ref(value, surface = MATTE) {
126
+ if (value.startsWith('library:') || value.startsWith('scene:'))
127
+ return { ref: value };
128
+ if (!HEX.test(value))
129
+ return { error: `${value} is no colour: give #rrggbb or library:<id>.` };
130
+ const hex = value.toLowerCase();
131
+ if (!materials) {
132
+ if (!snapped)
133
+ say('this host keeps no scene materials: colours written as the nearest library colour');
134
+ snapped = true;
135
+ return { ref: nearestLibraryColorRef(hex).ref };
136
+ }
137
+ const resolved = resolveInlinePaintMaterial(materials, {
138
+ properties: {
139
+ color: hex,
140
+ roughness: surface.roughness,
141
+ metalness: surface.metalness,
142
+ opacity: 1,
143
+ transparent: false,
144
+ side: 'front',
145
+ },
146
+ }, surface.roughness === MATTE.roughness && surface.metalness === MATTE.metalness
147
+ ? hex
148
+ : `${hex}, roughness ${+surface.roughness.toFixed(2)}, metalness ${+surface.metalness.toFixed(2)}`);
149
+ if (resolved.created) {
150
+ materials[resolved.sceneMaterial.id] = resolved.sceneMaterial;
151
+ created.push(resolved.sceneMaterial);
152
+ }
153
+ return { ref: resolved.ref };
154
+ },
155
+ };
156
+ }
157
+ const isDoorType = (type) => DoorType.options.includes(type);
158
+ const isWindowType = (type) => WindowType.options.includes(type);
159
+ const isDoorStyle = (style) => DOOR_STYLES.includes(style);
160
+ const isWindowStyle = (style) => WINDOW_STYLES.includes(style);
161
+ const CEILING_POINT_CODE = `export const mount = 'ceiling'
162
+ export default function build({ THREE }) {
163
+ const material = new THREE.MeshStandardMaterial({ color: '#ffffff' })
164
+ material.name = 'slot_body'
165
+ return new THREE.Mesh(new THREE.CylinderGeometry(0.03, 0.03, 0.008, 24), material)
166
+ }`;
167
+ /** Candidate modules, compiled by the host before room derivation decides which points are used. */
168
+ export function authorSceneCeilingPoints(payload) {
169
+ return payload.levels.flatMap((level, index) => level.lights.flatMap((light, i) => light.fixture ? [] : [{ id: `light/${index}/${i}`, code: CEILING_POINT_CODE }]));
170
+ }
171
+ /**
172
+ * The rooms whose floor finish is a module, by their zone once the write made it: the host reads
173
+ * each room's floor (`floorScriptInputs`), compiles the module for it and writes it with
174
+ * `setRoomFloorScript`, which core cannot do without a three.js runtime. A room whose seed found
175
+ * no enclosure has no zone and is already a defect.
176
+ */
177
+ export function authorSceneFloorScripts(payload, report) {
178
+ return payload.levels.flatMap((level, index) => level.rooms.flatMap((room, i) => {
179
+ const roomId = `room/${index}/${i}`;
180
+ const zoneId = report.ids[roomId];
181
+ return room.floorCode && zoneId ? [{ roomId, zoneId, code: room.floorCode }] : [];
182
+ }));
183
+ }
184
+ /**
185
+ * Which faces the payload's face modules build on, and why the others cannot be: a wall's own
186
+ * `faceLeft` (face a) and `faceRight` (face b), then each room's `wallCode` on the faces its floor
187
+ * meets (the spans of the room the zone was derived from, the faces `setWallSkirting` runs along),
188
+ * where a wall's own module wins. A face with nothing to build on (a curved or curtain wall) or
189
+ * that no room looks into is a `no_face` defect.
190
+ */
191
+ function resolveFaceScripts(payload, ids, nodes) {
192
+ const scripts = [];
193
+ const defects = [];
194
+ const warnings = [];
195
+ const side = (face) => (face === 'a' ? 'left' : 'right');
196
+ const add = (wallId, face, nodeId, code, toHeight) => scripts.push({ wallId, face, nodeId, code, ...(toHeight === undefined ? {} : { toHeight }) });
197
+ const flat = 'is curved, a curtain wall or has no height';
198
+ payload.levels.forEach((level, index) => {
199
+ const walls = (level.walls ?? []).flatMap((spec) => {
200
+ const nodeId = ids[spec.id];
201
+ return nodeId && nodes[nodeId]?.type === 'wall' ? [{ spec, nodeId }] : [];
202
+ });
203
+ const owned = new Set();
204
+ for (const { spec, nodeId } of walls) {
205
+ for (const [face, module] of [
206
+ ['a', spec.faceLeft],
207
+ ['b', spec.faceRight],
208
+ ]) {
209
+ if (!module)
210
+ continue;
211
+ owned.add(`${nodeId}/${face}`);
212
+ const id = `${spec.id}/${face}`;
213
+ if (!wallFaceScriptInputs(nodes, nodeId, face, module.toHeight))
214
+ defects.push({
215
+ id,
216
+ code: 'no_face',
217
+ message: `Wall ${spec.id} ${flat}: its ${side(face)} face has nothing a script can build on and keeps its paint.`,
218
+ });
219
+ else if (roomFaceCover(nodes, nodeId)[face] === 'none')
220
+ defects.push({
221
+ id,
222
+ code: 'no_face',
223
+ message: `No room looks into the ${side(face)} face of wall ${spec.id} (left and right as seen from its start to its end): its face script was not written.`,
224
+ });
225
+ else
226
+ add(spec.id, face, nodeId, module.code, module.toHeight);
227
+ }
228
+ }
229
+ const byRoom = new Map();
230
+ for (const [i, room] of level.rooms.entries()) {
231
+ const roomId = `room/${index}/${i}`;
232
+ const zone = nodes[ids[roomId] ?? ''];
233
+ if (!room.wallCode || zone?.type !== 'zone')
234
+ continue;
235
+ const boundaries = Object.values(nodes).filter((n) => n.parentId === zone.parentId && (n.type === 'wall' || n.type === 'separator'));
236
+ const zoneWalls = [...zone.boundaryWallIds].sort().join();
237
+ const derived = floorRoomFaces(boundaries).find((r) => [...new Set(r.spans.filter((s) => s.kind === 'wall').map((s) => s.boundaryId))]
238
+ .sort()
239
+ .join() === zoneWalls && pointInPolygon(room.seed, r.referencePolygon));
240
+ const faces = new Set((derived?.spans ?? [])
241
+ .filter((s) => s.kind === 'wall' && s.t1 > s.t0)
242
+ .map((s) => `${s.boundaryId}/${s.face}`));
243
+ if (!faces.size) {
244
+ defects.push({
245
+ id: roomId,
246
+ code: 'no_face',
247
+ message: `No wall face looks into "${room.name}": its wallCode was not written.`,
248
+ });
249
+ continue;
250
+ }
251
+ for (const { spec, nodeId } of walls) {
252
+ for (const face of ['a', 'b']) {
253
+ const key = `${nodeId}/${face}`;
254
+ if (!faces.has(key) || owned.has(key))
255
+ continue;
256
+ const other = byRoom.get(key);
257
+ if (other) {
258
+ if (other.code !== room.wallCode || other.toHeight !== room.wallToHeight)
259
+ warnings.push({
260
+ id: `${spec.id}/${face}`,
261
+ code: 'face_shared',
262
+ message: `The ${side(face)} face of wall ${spec.id} looks into "${other.name}" and "${room.name}": it is built by "${other.name}"'s wallCode.`,
263
+ });
264
+ continue;
265
+ }
266
+ byRoom.set(key, { name: room.name, code: room.wallCode, toHeight: room.wallToHeight });
267
+ if (!wallFaceScriptInputs(nodes, nodeId, face, room.wallToHeight))
268
+ defects.push({
269
+ id: `${spec.id}/${face}`,
270
+ code: 'no_face',
271
+ message: `Wall ${spec.id} ${flat}: "${room.name}"'s wallCode was not written on its ${side(face)} face, which keeps its paint.`,
272
+ });
273
+ else
274
+ add(spec.id, face, nodeId, room.wallCode, room.wallToHeight);
275
+ }
276
+ }
277
+ }
278
+ });
279
+ return { scripts, defects, warnings };
280
+ }
281
+ /** Below this share a floor or face finish leaves enough of its host bare to be worth a warning. */
282
+ const FINISH_COVERED = 0.98;
283
+ const figure = (value) => String(Math.round(value * 100) / 100);
284
+ /** A bare patch on a floor, by the edges of the floor's bounds it runs along, and its extent. */
285
+ function floorPatch({ min, max }, polygon) {
286
+ const reach = 0.05;
287
+ const xs = polygon.map(([x]) => x);
288
+ const zs = polygon.map(([, z]) => z);
289
+ const touches = {
290
+ north: min[1] <= Math.min(...zs) + reach,
291
+ south: max[1] >= Math.max(...zs) - reach,
292
+ west: min[0] <= Math.min(...xs) + reach,
293
+ east: max[0] >= Math.max(...xs) - reach,
294
+ };
295
+ const sides = Object.keys(touches).filter((side) => touches[side]);
296
+ const ns = sides.filter((side) => side === 'north' || side === 'south');
297
+ const ew = sides.filter((side) => side === 'west' || side === 'east');
298
+ const where = sides.length === 0
299
+ ? 'inside the floor'
300
+ : sides.length === 1
301
+ ? `along the ${sides[0]} edge`
302
+ : sides.length > 2
303
+ ? 'over most of the floor'
304
+ : ns.length === 1
305
+ ? `in the ${ns[0]}-${ew[0]} corner`
306
+ : `across the floor from ${sides[0]} to ${sides[1]}`;
307
+ return `${where} (${figure(max[0] - min[0])} × ${figure(max[1] - min[1])} m, x ${figure(min[0])} to ${figure(max[0])}, z ${figure(min[1])} to ${figure(max[1])})`;
308
+ }
309
+ /**
310
+ * The `finish_gaps` warning for a floor or face script whose build leaves part of its host bare:
311
+ * its `coverage` under FINISH_COVERED with at least one bare patch, each named by where it lies.
312
+ * Joints make no patch, so a tiled finish is never warned for its joints alone. Null otherwise.
313
+ */
314
+ export function authorSceneFinishGaps(id, manifest, host) {
315
+ const { coverage, uncovered } = manifest;
316
+ if (coverage === undefined || coverage >= FINISH_COVERED || !uncovered?.length)
317
+ return null;
318
+ const share = `${Math.round(coverage * 100)}%`;
319
+ const message = 'room' in host
320
+ ? `The floor finish of "${host.room}" covers ${share} of its floor: uncovered ${uncovered.map((patch) => floorPatch(patch, host.polygon)).join('; ')}.`
321
+ : `The finish on the ${host.face === 'a' ? 'left' : 'right'} face of wall ${host.wall} covers ${share} of the face: uncovered ${uncovered
322
+ .map(({ min, max }) => `${figure(min[0])} to ${figure(max[0])} m along the wall from its start, ${figure(min[1])} to ${figure(max[1])} m up (${figure(max[0] - min[0])} × ${figure(max[1] - min[1])} m)`)
323
+ .join('; ')}.`;
324
+ return { id, code: 'finish_gaps', message };
325
+ }
326
+ /**
327
+ * The wall faces whose finish is a module, once the write made the walls and the rooms: the host
328
+ * reads each face (`wallFaceScriptInputs`), compiles the module for it and writes it with
329
+ * `setWallFaceScript`, which core cannot do without a three.js runtime. The faces that cannot take
330
+ * one are already `no_face` defects in the operation's report.
331
+ */
332
+ export function authorSceneFaceScripts(payload, report, nodes) {
333
+ return resolveFaceScripts(payload, report.ids, nodes).scripts;
334
+ }
335
+ export function authorScene(scene, input, context) {
336
+ const { payload } = input;
337
+ const sourceKeys = new Set();
338
+ const claimSourceKey = (key) => {
339
+ if (sourceKeys.has(key))
340
+ refuse('duplicate_source_id', `Source id "${key}" is repeated. Give every wall and item a unique id across all levels; opening and generated-part keys must also remain distinct.`, { id: key, mutationApplied: false });
341
+ sourceKeys.add(key);
342
+ };
343
+ payload.levels.forEach((level, index) => {
344
+ claimSourceKey(`level/${index}`);
345
+ for (const [kind, parts] of [
346
+ ['room', level.rooms],
347
+ ['slab', level.slabs],
348
+ ['column', level.columns],
349
+ ['light', level.lights],
350
+ ])
351
+ parts?.forEach((_, i) => {
352
+ claimSourceKey(`${kind}/${index}/${i}`);
353
+ });
354
+ for (const wall of level.walls ?? []) {
355
+ claimSourceKey(wall.id);
356
+ wall.openings?.forEach((_, i) => {
357
+ claimSourceKey(`${wall.id}/${i}`);
358
+ });
359
+ }
360
+ for (const item of level.items ?? [])
361
+ claimSourceKey(item.id);
362
+ });
363
+ const buildings = Object.values(scene).filter((n) => n.type === 'building');
364
+ const selected = input.buildingId ?? (context.activeLevelId ? scene[context.activeLevelId]?.parentId : undefined);
365
+ const building = selected
366
+ ? buildings.find((node) => node.id === selected)
367
+ : buildings.length === 1
368
+ ? buildings[0]
369
+ : undefined;
370
+ if (!building)
371
+ refuse('no_building', 'The scene has no building to put the levels in.');
372
+ const existingLevels = Object.values(scene).filter((n) => n.type === 'level' && n.parentId === building.id);
373
+ const saved = building.metadata?.authorSceneState;
374
+ const previous = saved?.version === 1 &&
375
+ saved.buildingId === building.id &&
376
+ saved.nodes &&
377
+ saved.ids &&
378
+ typeof saved.seed === 'string'
379
+ ? saved
380
+ : undefined;
381
+ const converted = Boolean(previous) || existingLevels.some((l) => l.metadata?.authorScene);
382
+ if (converted && !input.replace)
383
+ refuse('conversion_exists', 'This scene already holds a conversion. Pass replace: true to write over it.');
384
+ if (!previous &&
385
+ (converted ||
386
+ existingLevels.some((level) => Object.values(scene).some((node) => node.parentId === level.id))))
387
+ refuse('existing_design', 'This building already contains work without a retained conversion baseline. Use its native edit tools or convert into a separate building; existing geometry will not be replaced.', { mutationApplied: false });
388
+ const seed = previous?.seed ?? `${building.id}:${payloadSeed(payload)}`;
389
+ const mint = idFactory(seed, previous?.ids);
390
+ const report = {
391
+ levels: 0,
392
+ walls: 0,
393
+ doors: 0,
394
+ windows: 0,
395
+ rooms: 0,
396
+ roomsNamed: 0,
397
+ slabs: 0,
398
+ columns: 0,
399
+ items: 0,
400
+ lights: 0,
401
+ floorScripts: 0,
402
+ faceScripts: 0,
403
+ snapped: [],
404
+ defaults: [],
405
+ warnings: [],
406
+ defects: [],
407
+ notes: [...payload.notes],
408
+ ids: {},
409
+ };
410
+ const defect = (id, code, message) => report.defects.push({ id, code, message });
411
+ const warn = (id, code, message) => report.warnings.push({ id, code, message });
412
+ const say = (sentence) => report.defaults.push(sentence);
413
+ const finishes = finishPool(context, say);
414
+ const finishRef = (value, id, surface) => {
415
+ if (!value)
416
+ return undefined;
417
+ const got = finishes.ref(value, surface);
418
+ if ('error' in got) {
419
+ defect(id, 'invalid_color', got.error);
420
+ return undefined;
421
+ }
422
+ return got.ref;
423
+ };
424
+ const exactSlots = (compiled, id) => {
425
+ const slots = matchScriptSlotsToLibrary(compiled.manifest);
426
+ for (const slot of compiled.manifest.slots) {
427
+ // Glass keeps the glass add_object writes, drawn see-through and letting light pass. A
428
+ // scene material carries no emission, so an emissive slot keeps the module's own material
429
+ // (the library match leaves it alone) and a bulb stays lit.
430
+ if (!slot.color || slot.emissive || slots[slot.id] === GLASS)
431
+ continue;
432
+ const ref = finishRef(slot.color, id, {
433
+ roughness: slot.roughness ?? MATTE.roughness,
434
+ metalness: slot.metalness ?? MATTE.metalness,
435
+ });
436
+ if (ref)
437
+ slots[slot.id] = ref;
438
+ }
439
+ return slots;
440
+ };
441
+ const paintContext = (levelId) => ({
442
+ ...context,
443
+ activeLevelId: levelId,
444
+ ...(finishes.materials ? { materials: finishes.materials } : {}),
445
+ });
446
+ // A separate candidate contains only its building and ancestors, never another building's work.
447
+ const draft = {};
448
+ let ancestor = building;
449
+ while (ancestor && !draft[ancestor.id]) {
450
+ draft[ancestor.id] = { ...ancestor, children: [] };
451
+ ancestor = ancestor.parentId ? scene[ancestor.parentId] : undefined;
452
+ }
453
+ const scaffoldIds = new Set(Object.keys(draft));
454
+ const levelNodes = [];
455
+ const itemNodeIds = new Map();
456
+ const itemFrames = new Map();
457
+ const skirtings = [];
458
+ let untypedWindows = 0;
459
+ payload.levels.forEach((level, index) => {
460
+ const levelNode = LevelNode.parse({
461
+ object: 'node',
462
+ type: 'level',
463
+ id: mint('level', `level/${index}`),
464
+ parentId: building.id,
465
+ visible: true,
466
+ metadata: { authorScene: { elevation: level.elevation } },
467
+ name: level.name,
468
+ level: index,
469
+ children: [],
470
+ });
471
+ draft[levelNode.id] = levelNode;
472
+ report.ids[`level/${index}`] = levelNode.id;
473
+ levelNodes.push(levelNode);
474
+ const place = (node) => {
475
+ draft[node.id] = node;
476
+ levelNode.children.push(node.id);
477
+ };
478
+ // ---------- walls, joined ----------
479
+ const walls = (level.walls ?? []).map((w) => ({
480
+ spec: w,
481
+ start: [...w.start],
482
+ end: [...w.end],
483
+ }));
484
+ for (const w of walls) {
485
+ for (const end of ['start', 'end']) {
486
+ const pt = w[end];
487
+ let best = null;
488
+ for (const o of walls) {
489
+ if (o === w)
490
+ continue;
491
+ const near = nearestOnSegment(pt, o.start, o.end);
492
+ if (near.distance < JOIN_REACH && (!best || near.distance < best.distance))
493
+ best = near;
494
+ }
495
+ if (best && best.distance > 0.001) {
496
+ report.snapped.push({
497
+ id: w.spec.id,
498
+ end,
499
+ movedM: Math.round(best.distance * 1000) / 1000,
500
+ });
501
+ w[end] = best.point;
502
+ }
503
+ }
504
+ }
505
+ const wallNodes = new Map();
506
+ for (const w of walls) {
507
+ if (dist(w.start, w.end) < 0.05) {
508
+ defect(w.spec.id, 'wall_too_short', 'The wall is shorter than 5 cm after joining.');
509
+ continue;
510
+ }
511
+ const node = WallNode.parse({
512
+ object: 'node',
513
+ type: 'wall',
514
+ id: mint('wall', w.spec.id),
515
+ parentId: levelNode.id,
516
+ visible: true,
517
+ metadata: { authorScene: { id: w.spec.id } },
518
+ children: [],
519
+ start: w.start,
520
+ end: w.end,
521
+ height: w.spec.height,
522
+ thickness: w.spec.thickness,
523
+ });
524
+ place(node);
525
+ wallNodes.set(w.spec.id, { ...w, node });
526
+ if (w.spec.skirting)
527
+ skirtings.push({
528
+ id: w.spec.id,
529
+ nodeId: node.id,
530
+ levelId: levelNode.id,
531
+ skirting: w.spec.skirting,
532
+ });
533
+ report.ids[w.spec.id] = node.id;
534
+ report.walls++;
535
+ // ---------- its openings ----------
536
+ const length = dist(w.start, w.end);
537
+ (w.spec.openings ?? []).forEach((o, i) => {
538
+ const id = `${w.spec.id}/${i}`;
539
+ // A module supplies geometry; the declared type still describes how the opening works.
540
+ let compiled;
541
+ if (o.code) {
542
+ compiled = input.compiled[id];
543
+ if (!compiled) {
544
+ defect(id, 'compile_failed', input.compileErrors?.[id] ?? 'The module did not compile.');
545
+ return;
546
+ }
547
+ if (compiled.mount !== 'wall') {
548
+ defect(id, 'wrong_mount', `A ${o.kind}'s module uses mount 'wall', not '${compiled.mount}'.`);
549
+ return;
550
+ }
551
+ try {
552
+ requireMeasured(compiled, { label: o.name ?? id, tool: 'author_scene' });
553
+ }
554
+ catch (error) {
555
+ const e = error;
556
+ defect(id, e.code ?? 'unmeasurable_object', e.message ?? String(error));
557
+ return;
558
+ }
559
+ if (o.style)
560
+ say(`${o.kind} ${id}: style ignored, its module builds it`);
561
+ }
562
+ const [width, height] = compiled ? scriptedSize(compiled.manifest) : [o.width, o.height];
563
+ if (width > length + 0.01) {
564
+ defect(id, 'opening_wider_than_wall', `${o.kind} ${width.toFixed(2)} m wide on a ${length.toFixed(2)} m wall.`);
565
+ return;
566
+ }
567
+ const x = Math.min(Math.max(o.along, width / 2), length - width / 2);
568
+ if (Math.abs(x - o.along) > 0.01)
569
+ say(`${o.kind} ${id}: moved ${Math.abs(x - o.along).toFixed(2)} m along the wall to fit inside it`);
570
+ const common = {
571
+ object: 'node',
572
+ id: mint(o.kind, id),
573
+ parentId: node.id,
574
+ visible: true,
575
+ metadata: { authorScene: { id, color: o.color ?? null } },
576
+ wallId: node.id,
577
+ width,
578
+ height,
579
+ rotation: [0, 0, 0],
580
+ ...(o.name ? { name: o.name } : {}),
581
+ ...(compiled
582
+ ? {
583
+ source: scriptSource(compiled, { category: o.kind }),
584
+ slots: exactSlots(compiled, id),
585
+ }
586
+ : {}),
587
+ };
588
+ let opening;
589
+ if (o.kind === 'door') {
590
+ const type = o.type;
591
+ if (type && !isDoorType(type))
592
+ defect(id, 'type_mismatch', `${type} is a window type; the door is written hinged.`);
593
+ const style = o.style && !compiled ? o.style : undefined;
594
+ if (style && !isDoorStyle(style))
595
+ defect(id, 'style_mismatch', `${style} is a window style; the door keeps its panel leaf.`);
596
+ const hingesSide = o.hinge === 'end' ? 'right' : 'left';
597
+ const handleSide = hingesSide === 'right' ? 'left' : 'right';
598
+ if (o.hinge)
599
+ say(`door ${id}: handle set opposite the hinge (${handleSide})`);
600
+ opening = DoorNode.parse({
601
+ ...common,
602
+ type: 'door',
603
+ position: [x, height / 2, 0],
604
+ ...(type && isDoorType(type) ? doorTypeFields(type) : {}),
605
+ ...(style && isDoorStyle(style) ? doorStyleLook(style) : {}),
606
+ ...(o.leaves ? { leafCount: o.leaves } : {}),
607
+ hingesSide,
608
+ handleSide,
609
+ ...(o.swing ? { swingDirection: o.swing === 'back' ? 'outward' : 'inward' } : {}),
610
+ });
611
+ report.doors++;
612
+ }
613
+ else {
614
+ const type = o.type;
615
+ if (type && !isWindowType(type))
616
+ defect(id, 'type_mismatch', `${type} is a door type; the window is written fixed.`);
617
+ const windowType = type && isWindowType(type) ? type : undefined;
618
+ if (!windowType && !compiled)
619
+ untypedWindows++;
620
+ const style = o.style && !compiled ? o.style : undefined;
621
+ if (style && !isWindowStyle(style))
622
+ defect(id, 'style_mismatch', `${style} is a door style; the window keeps a single pane.`);
623
+ const takesStyle = windowTakesStyle(windowType ?? 'fixed');
624
+ if (style && isWindowStyle(style) && !takesStyle)
625
+ say(`window ${id}: style ${style} dropped, a ${windowType} window draws its own sashes`);
626
+ opening = WindowNode.parse({
627
+ ...common,
628
+ type: 'window',
629
+ position: [x, o.sill + height / 2, 0],
630
+ ...(windowType ? windowTypeFields(windowType) : {}),
631
+ ...(style && isWindowStyle(style) && takesStyle ? getWindowStyleOverrides(style) : {}),
632
+ });
633
+ report.windows++;
634
+ }
635
+ const panel = o.kind === 'door' ? finishRef(o.color, id) : undefined;
636
+ const frame = finishRef(o.frameColor ?? o.color, id);
637
+ if (panel || frame)
638
+ opening = {
639
+ ...opening,
640
+ slots: {
641
+ ...('slots' in opening ? opening.slots : {}),
642
+ ...(panel ? { panel } : {}),
643
+ ...(frame ? { frame } : {}),
644
+ },
645
+ };
646
+ draft[opening.id] = opening;
647
+ report.ids[id] = opening.id;
648
+ node.children.push(opening.id);
649
+ });
650
+ }
651
+ // ---------- slabs and columns ----------
652
+ const slabs = level.slabs ?? [];
653
+ if (slabs.length > MANY_SLABS)
654
+ warn(`level/${index}`, 'many_slabs', `${slabs.length} slabs on "${level.name}": Pascal builds floor plates, caps and ceilings itself; a slab is a terrace, a platform, a balcony.`);
655
+ slabs.forEach((s, i) => {
656
+ const id = `slab/${index}/${i}`;
657
+ const label = s.name ? `"${s.name}"` : `slab ${i}`;
658
+ const polygon = s.polygon;
659
+ // A slab over a wall's footprint, higher than half the wall: a cap, which would lift the
660
+ // wall onto it. Pascal caps its walls itself.
661
+ const lifted = [...wallNodes.values()].find((w) => s.top > w.spec.height / 2 &&
662
+ polygonsOverlap(polygon, wallFootprint({ ...w, thickness: w.spec.thickness })));
663
+ if (lifted) {
664
+ defect(id, 'slab_over_wall', `${label} overlaps wall ${lifted.spec.id} with its top at ${metres(s.top)}, above half the wall's ${metres(lifted.spec.height)}: it would lift the wall onto it. Pascal builds a wall's cap itself; fold it into the wall.`);
665
+ return;
666
+ }
667
+ if (s.thickness < THIN_SLAB)
668
+ warn(id, 'thin_slab', `${label} is ${(s.thickness * 1000).toFixed(0)} mm thick: a slab is a terrace, a platform, a balcony; a finish goes on the room's floor.`);
669
+ const finish = finishRef(s.finish, id);
670
+ const node = SlabNode.parse({
671
+ object: 'node',
672
+ type: 'slab',
673
+ id: mint('slab', id),
674
+ parentId: levelNode.id,
675
+ visible: true,
676
+ metadata: { authorScene: { finish: s.finish ?? null } },
677
+ ...(s.name ? { name: s.name } : {}),
678
+ polygon: s.polygon,
679
+ elevation: s.top,
680
+ thickness: s.thickness,
681
+ ...(finish ? { slots: { surface: finish } } : {}),
682
+ ...(s.railing?.length
683
+ ? { railing: s.railing.map((r) => ({ start: r.start, end: r.end })) }
684
+ : {}),
685
+ });
686
+ place(node);
687
+ report.ids[id] = node.id;
688
+ report.slabs++;
689
+ });
690
+ (level.columns ?? []).forEach((c, i) => {
691
+ const node = ColumnNode.parse({
692
+ object: 'node',
693
+ type: 'column',
694
+ id: mint('column', `column/${index}/${i}`),
695
+ parentId: levelNode.id,
696
+ visible: true,
697
+ metadata: { authorScene: { color: c.color ?? null } },
698
+ ...(c.name ? { name: c.name } : {}),
699
+ position: [c.position[0], 0, c.position[1]],
700
+ crossSection: 'square',
701
+ width: c.width,
702
+ depth: c.depth,
703
+ height: c.height,
704
+ baseHeight: 0,
705
+ capitalHeight: 0,
706
+ });
707
+ place(node);
708
+ report.ids[`column/${index}/${i}`] = node.id;
709
+ report.columns++;
710
+ });
711
+ // ---------- items, hosts first ----------
712
+ const pending = [...(level.items ?? [])];
713
+ let progress = true;
714
+ while (pending.length && progress) {
715
+ progress = false;
716
+ for (const item of [...pending]) {
717
+ const hostItemId = item.host ? itemNodeIds.get(item.host) : undefined;
718
+ const hostWall = item.host && !hostItemId ? wallNodes.get(item.host) : undefined;
719
+ if (item.host && !hostItemId && !hostWall)
720
+ continue;
721
+ pending.splice(pending.indexOf(item), 1);
722
+ progress = true;
723
+ const compiled = input.compiled[item.id];
724
+ if (!compiled) {
725
+ defect(item.id, 'compile_failed', input.compileErrors?.[item.id] ?? 'The module did not compile.');
726
+ continue;
727
+ }
728
+ const world = [item.position[0], item.position[1], item.position[2]];
729
+ const yaw = (item.rotation * Math.PI) / 180;
730
+ let placed;
731
+ if (hostWall) {
732
+ // On the wall as place_items puts a wall-side item there: along it from its start, the
733
+ // payload's height for its bottom, on the face nearest the point, facing the room.
734
+ const [width, height] = scriptedSize(compiled.manifest);
735
+ const wallHeight = hostWall.spec.height;
736
+ if (height > wallHeight) {
737
+ defect(item.id, 'item_too_tall', `"${item.name}" is ${metres(height)} tall; wall ${item.host} is ${metres(wallHeight)}.`);
738
+ continue;
739
+ }
740
+ const length = dist(hostWall.start, hostWall.end);
741
+ const along = projectWorldPointToWallLocalX(hostWall, world);
742
+ const x = Math.max(width / 2, Math.min(length - width / 2, along));
743
+ const y = Math.max(0, Math.min(wallHeight - height, world[1]));
744
+ const [dx, dz] = [
745
+ hostWall.end[0] - hostWall.start[0],
746
+ hostWall.end[1] - hostWall.start[1],
747
+ ];
748
+ // The wall's left (its local +z) is its front.
749
+ const localZ = (-dz * (world[0] - hostWall.start[0]) + dx * (world[2] - hostWall.start[1])) / length;
750
+ const left = localZ >= 0;
751
+ const faceZ = getWallLocalFaceZ(hostWall.node, left ? 'a' : 'b');
752
+ const offset = (localZ - faceZ) * (left ? 1 : -1);
753
+ const z = faceZ + (left ? 1 : -1) * Math.max(0, offset);
754
+ if (offset < -1e-9)
755
+ say(`${item.id}: point inside wall ${item.host}, moved to its nearest face`);
756
+ if (item.rotation)
757
+ say(`${item.id}: rotation ignored on wall ${item.host}, it faces the room`);
758
+ const [ux, uz] = [dx / length, dz / length];
759
+ placed = {
760
+ compiled: { ...compiled, mount: 'wall-side' },
761
+ parentId: hostWall.node.id,
762
+ position: [x, y, z],
763
+ rotation: left ? 0 : 180,
764
+ side: left ? 'front' : 'back',
765
+ wallT: x / length,
766
+ frame: {
767
+ position: [
768
+ hostWall.start[0] + ux * x - uz * z,
769
+ y,
770
+ hostWall.start[1] + uz * x + ux * z,
771
+ ],
772
+ yaw: -Math.atan2(dz, dx) + (left ? 0 : Math.PI),
773
+ },
774
+ };
775
+ }
776
+ else {
777
+ const host = hostItemId ? itemFrames.get(item.host) : undefined;
778
+ placed = {
779
+ compiled,
780
+ parentId: hostItemId ?? levelNode.id,
781
+ position: host ? toLocal(host, world) : world,
782
+ rotation: host ? item.rotation - (host.yaw * 180) / Math.PI : item.rotation,
783
+ frame: { position: world, yaw },
784
+ };
785
+ }
786
+ try {
787
+ const outcome = addObject(draft, {
788
+ compiled: { ...placed.compiled, nodeId: mint('item', item.id) },
789
+ name: item.name,
790
+ category: item.category,
791
+ reason: `author_scene: ${item.name}`,
792
+ position: placed.position,
793
+ rotation: placed.rotation,
794
+ parentId: placed.parentId,
795
+ ...(placed.side ? { side: placed.side } : {}),
796
+ }, { ...context, activeLevelId: levelNode.id });
797
+ for (const { node, parentId } of outcome.changes?.create ?? []) {
798
+ draft[node.id] = {
799
+ ...node,
800
+ slots: exactSlots(compiled, item.id),
801
+ ...(placed.wallT === undefined ? {} : { wallT: placed.wallT }),
802
+ };
803
+ const parent = draft[parentId ?? levelNode.id];
804
+ parent.children = [...(parent.children ?? []), node.id];
805
+ itemNodeIds.set(item.id, node.id);
806
+ itemFrames.set(item.id, placed.frame);
807
+ report.ids[item.id] = node.id;
808
+ report.items++;
809
+ }
810
+ }
811
+ catch (error) {
812
+ const e = error;
813
+ defect(item.id, e.code ?? 'item_refused', e.message ?? String(error));
814
+ }
815
+ }
816
+ }
817
+ for (const item of pending)
818
+ defect(item.id, 'host_missing', `Its host ${item.host} was not placed.`);
819
+ // ---------- wall paint, through the editor's paint: both faces, or each its own ----------
820
+ for (const w of walls) {
821
+ const node = wallNodes.get(w.spec.id)?.node;
822
+ if (!node)
823
+ continue;
824
+ const faces = {
825
+ a: w.spec.colorLeft ?? w.spec.color,
826
+ b: w.spec.colorRight ?? w.spec.color,
827
+ };
828
+ const coats = [];
829
+ if (faces.a && faces.a === faces.b) {
830
+ const ref = finishRef(faces.a, w.spec.id);
831
+ if (ref)
832
+ coats.push({ material: ref });
833
+ }
834
+ else
835
+ for (const face of ['a', 'b']) {
836
+ const ref = finishRef(faces[face], w.spec.id);
837
+ if (ref)
838
+ coats.push({ role: face, material: ref });
839
+ }
840
+ for (const coat of coats) {
841
+ try {
842
+ const { changes } = paint(draft, { targets: [node.id], ...coat }, paintContext(levelNode.id));
843
+ for (const u of changes?.update ?? [])
844
+ draft[u.id] = { ...draft[u.id], ...u.data };
845
+ }
846
+ catch (error) {
847
+ defect(w.spec.id, 'paint_refused', error.message);
848
+ }
849
+ }
850
+ }
851
+ });
852
+ report.levels = levelNodes.length;
853
+ if (untypedWindows)
854
+ say(`${untypedWindows} window${untypedWindows === 1 ? ' has' : 's have'} no type: written fixed (cannot open); give type`);
855
+ // ---------- which face of each wall looks into a room: read from the plan, as the editor does ----------
856
+ for (const levelNode of levelNodes) {
857
+ const boundaries = Object.values(draft).filter((n) => n.parentId === levelNode.id && (n.type === 'wall' || n.type === 'separator'));
858
+ for (const { wallId, ...sides } of detectSpacesForLevel(levelNode.id, boundaries).wallUpdates)
859
+ draft[wallId] = { ...draft[wallId], ...sides };
860
+ }
861
+ // ---------- rooms: Pascal's own derivation, then the payload's names and floors ----------
862
+ const { nodes: withZones, createdZoneIds } = migrateRoomZones(draft);
863
+ const zones = createdZoneIds.map((id) => ZoneNode.parse(withZones[id]));
864
+ for (const zone of zones) {
865
+ draft[zone.id] = zone;
866
+ const level = draft[zone.parentId];
867
+ draft[zone.parentId] = { ...level, children: [...level.children, zone.id] };
868
+ report.rooms++;
869
+ }
870
+ const claimed = new Map();
871
+ payload.levels.forEach((level, index) => {
872
+ const levelNode = levelNodes[index];
873
+ for (const [i, room] of level.rooms.entries()) {
874
+ const id = `room/${index}/${i}`;
875
+ const zone = zones.find((z) => z.parentId === levelNode.id && pointInPolygon(room.seed, z.polygon));
876
+ // Two seeds in one enclosure: the walls do not separate the rooms the payload names.
877
+ if (zone && claimed.has(zone.id)) {
878
+ defect(id, 'room_shares_enclosure', `"${room.name}" and "${claimed.get(zone.id)}" are one enclosure: no wall separates them.`);
879
+ continue;
880
+ }
881
+ if (!zone) {
882
+ defect(id, 'room_not_enclosed', `No closed room around (${room.seed[0]}, ${room.seed[1]}) "${room.name}": its walls do not meet.`);
883
+ continue;
884
+ }
885
+ if (room.floorRegions.length > MANY_REGIONS)
886
+ warn(id, 'many_regions', `"${room.name}" has ${room.floorRegions.length} floor regions: regions are fixed polygons that do not follow a resize; use one floor finish.`);
887
+ const finish = finishRef(room.floor, id);
888
+ const regions = room.floorRegions.map((r, k) => ({
889
+ id: `region_${k}`,
890
+ polygon: r.polygon,
891
+ finish: finishRef(r.finish, id) ?? r.finish,
892
+ }));
893
+ draft[zone.id] = ZoneNode.parse({
894
+ ...zone,
895
+ name: room.name,
896
+ spaceRole: 'room',
897
+ ...(finish || regions.length
898
+ ? {
899
+ floor: {
900
+ ...zone.floor,
901
+ ...(finish ? { finish } : {}),
902
+ ...(regions.length ? { regions } : {}),
903
+ },
904
+ }
905
+ : {}),
906
+ metadata: { ...zone.metadata, authorScene: { seed: room.seed } },
907
+ });
908
+ claimed.set(zone.id, room.name);
909
+ report.ids[id] = zone.id;
910
+ report.roomsNamed++;
911
+ }
912
+ });
913
+ // ---------- floors and ceilings, as the editor derives them on load ----------
914
+ const structure = reconcileSceneStructure({
915
+ nodes: draft,
916
+ levelIds: levelNodes.map((l) => l.id),
917
+ mintId: (kind) => mint(kind),
918
+ });
919
+ const written = { ...structure.nodes };
920
+ // ---------- skirting, native on each wall, along the faces its rooms stand on ----------
921
+ for (const { id, nodeId, levelId, skirting } of skirtings) {
922
+ const finish = finishRef(skirting.color, id);
923
+ try {
924
+ const { changes } = setWallSkirting(written, {
925
+ wallIds: [nodeId],
926
+ height: skirting.height,
927
+ depth: skirting.depth,
928
+ ...(finish ? { finish } : {}),
929
+ }, paintContext(levelId));
930
+ for (const u of changes?.update ?? [])
931
+ written[u.id] = { ...written[u.id], ...u.data };
932
+ }
933
+ catch (error) {
934
+ const e = error;
935
+ defect(id, 'skirting_refused', e.code === 'side_unknown'
936
+ ? `No room stands on either face of wall ${id}: its skirting was not written.`
937
+ : `Wall ${id}: ${e.message ?? String(error)}`);
938
+ }
939
+ }
940
+ // ---------- face modules: which faces they build on is known now; the host compiles them ----------
941
+ const faces = resolveFaceScripts(payload, report.ids, written);
942
+ report.defects.push(...faces.defects);
943
+ report.warnings.push(...faces.warnings);
944
+ // Ceilings exist only after structure reconciliation; lights can now use their room's host.
945
+ payload.levels.forEach((level, index) => {
946
+ const levelNode = levelNodes[index];
947
+ for (const [i, light] of level.lights.entries()) {
948
+ const id = `light/${index}/${i}`;
949
+ const at = [light.position[0], light.position[1], light.position[2]];
950
+ let hostId = light.fixture ? itemNodeIds.get(light.fixture) : undefined;
951
+ let hostFrame = light.fixture ? itemFrames.get(light.fixture) : undefined;
952
+ const room = !light.fixture
953
+ ? Object.values(written).find((node) => node.type === 'zone' &&
954
+ node.spaceRole === 'room' &&
955
+ node.parentId === levelNode.id &&
956
+ pointInPolygon([at[0], at[2]], node.polygon) &&
957
+ !node.holes.some((hole) => pointInPolygon([at[0], at[2]], hole)))
958
+ : undefined;
959
+ const ceiling = room
960
+ ? Object.values(written).find((node) => node.type === 'ceiling' && node.zoneId === room.id && node.parentId === levelNode.id)
961
+ : undefined;
962
+ if (ceiling) {
963
+ const compiled = input.compiled[id];
964
+ if (!compiled) {
965
+ defect(id, 'compile_failed', input.compileErrors?.[id] ?? 'The ceiling point module did not compile.');
966
+ continue;
967
+ }
968
+ try {
969
+ const outcome = addObject(written, {
970
+ compiled: { ...compiled, nodeId: mint('item', id) },
971
+ name: `Ceiling point in ${room.name}`,
972
+ category: 'light',
973
+ reason: 'author_scene: ceiling point for a light without a fixture',
974
+ parentId: ceiling.id,
975
+ position: [at[0], 0, at[2]],
976
+ rotation: 0,
977
+ }, { ...context, activeLevelId: levelNode.id });
978
+ const node = outcome.changes.create[0].node;
979
+ written[node.id] = { ...node, slots: exactSlots(compiled, id) };
980
+ written[ceiling.id] = { ...ceiling, children: [...ceiling.children, node.id] };
981
+ hostId = node.id;
982
+ hostFrame = {
983
+ position: [at[0], resolveCeilingHeight(ceiling, written) - CEILING_DRAW_OFFSET, at[2]],
984
+ yaw: 0,
985
+ };
986
+ report.ids[id] = node.id;
987
+ report.items++;
988
+ say(`light at [${at.join(', ')}] has no fixture: a ceiling point in ${room.name}`);
989
+ }
990
+ catch (error) {
991
+ const e = error;
992
+ defect(id, e.code ?? 'item_refused', e.message ?? String(error));
993
+ continue;
994
+ }
995
+ }
996
+ if (!hostId) {
997
+ let best = null;
998
+ for (const item of level.items ?? []) {
999
+ const frame = itemFrames.get(item.id);
1000
+ if (!frame)
1001
+ continue;
1002
+ const d = Math.hypot(frame.position[0] - at[0], frame.position[2] - at[2]);
1003
+ if (!best || d < best.d)
1004
+ best = { key: item.id, d };
1005
+ }
1006
+ if (!best) {
1007
+ defect(id, 'light_unhosted', 'No item on this level to hold the light; Pascal keeps lights inside objects.');
1008
+ continue;
1009
+ }
1010
+ hostId = itemNodeIds.get(best.key);
1011
+ hostFrame = itemFrames.get(best.key);
1012
+ say(`light at [${at.join(', ')}] has no fixture: ${!light.fixture ? 'no room contains its point; ' : ''}hosted on the nearest item ${best.key} (${best.d.toFixed(2)} m away); moving that item moves the light`);
1013
+ }
1014
+ const hostNode = written[hostId];
1015
+ const interactive = hostNode.asset.interactive ?? { controls: [], effects: [] };
1016
+ const controls = interactive.controls.some((c) => c.kind === 'toggle')
1017
+ ? interactive.controls
1018
+ : [...interactive.controls, { kind: 'toggle', label: 'Lights', default: true }];
1019
+ const effects = [
1020
+ ...interactive.effects,
1021
+ {
1022
+ kind: 'light',
1023
+ color: light.color,
1024
+ intensityRange: [0, light.intensity],
1025
+ offset: toLocal(hostFrame, at),
1026
+ },
1027
+ ];
1028
+ written[hostNode.id] = {
1029
+ ...hostNode,
1030
+ asset: { ...hostNode.asset, interactive: { controls, effects } },
1031
+ };
1032
+ report.lights++;
1033
+ }
1034
+ });
1035
+ const nodes = Object.fromEntries(Object.entries(written).filter(([id]) => !scaffoldIds.has(id)));
1036
+ const candidate = {
1037
+ version: 1,
1038
+ buildingId: building.id,
1039
+ seed,
1040
+ ids: report.ids,
1041
+ nodes,
1042
+ };
1043
+ const outcome = {
1044
+ result: report,
1045
+ candidate,
1046
+ buildingId: building.id,
1047
+ changes: finishes.created.length ? { materials: finishes.created } : {},
1048
+ };
1049
+ return input.prepareOnly ? outcome : finalizeAuthorScene(scene, outcome);
1050
+ }
1051
+ /** Commit the complete candidate after the host has compiled all of its finishes. */
1052
+ export function finalizeAuthorScene(scene, outcome) {
1053
+ const building = scene[outcome.buildingId];
1054
+ if (building?.type !== 'building')
1055
+ refuse('no_building', 'The target building no longer exists.');
1056
+ const previous = building.metadata?.authorSceneState;
1057
+ const base = previous?.nodes ??
1058
+ Object.fromEntries(Object.values(scene)
1059
+ .filter((node) => node.type === 'level' && node.parentId === building.id)
1060
+ .map((node) => [node.id, node]));
1061
+ const changes = authoredSceneChanges(scene, base, outcome.candidate.nodes);
1062
+ return {
1063
+ ...outcome,
1064
+ changes: {
1065
+ ...changes,
1066
+ ...(outcome.changes?.materials ? { materials: outcome.changes.materials } : {}),
1067
+ update: [
1068
+ ...(changes.update ?? []),
1069
+ {
1070
+ id: building.id,
1071
+ data: { metadata: { ...building.metadata, authorSceneState: outcome.candidate } },
1072
+ },
1073
+ ],
1074
+ },
1075
+ };
1076
+ }