@pascal-app/core 1.0.5 → 1.0.7

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 (940) hide show
  1. package/dist/agent-operations/__fixtures__/add-object-cases.d.ts +31 -0
  2. package/dist/agent-operations/__fixtures__/add-object-cases.d.ts.map +1 -1
  3. package/dist/agent-operations/__fixtures__/build-room-cases.d.ts.map +1 -1
  4. package/dist/agent-operations/__fixtures__/build-room-cases.js +27 -0
  5. package/dist/agent-operations/__fixtures__/cases.d.ts.map +1 -1
  6. package/dist/agent-operations/__fixtures__/cases.js +19 -11
  7. package/dist/agent-operations/__fixtures__/design-brief-cases.d.ts +25 -2
  8. package/dist/agent-operations/__fixtures__/design-brief-cases.d.ts.map +1 -1
  9. package/dist/agent-operations/__fixtures__/design-brief-cases.js +509 -66
  10. package/dist/agent-operations/__fixtures__/dressing-scenes.d.ts +30 -0
  11. package/dist/agent-operations/__fixtures__/dressing-scenes.d.ts.map +1 -0
  12. package/dist/agent-operations/__fixtures__/dressing-scenes.js +82 -0
  13. package/dist/agent-operations/__fixtures__/native-materials.d.ts +407 -9
  14. package/dist/agent-operations/__fixtures__/native-materials.d.ts.map +1 -1
  15. package/dist/agent-operations/__fixtures__/notation-cases.d.ts.map +1 -1
  16. package/dist/agent-operations/__fixtures__/notation-cases.js +14 -0
  17. package/dist/agent-operations/__fixtures__/roof-bearing-cases.d.ts +7253 -4053
  18. package/dist/agent-operations/__fixtures__/roof-bearing-cases.d.ts.map +1 -1
  19. package/dist/agent-operations/__fixtures__/room-cases.d.ts +1 -0
  20. package/dist/agent-operations/__fixtures__/room-cases.d.ts.map +1 -1
  21. package/dist/agent-operations/__fixtures__/room-cases.js +57 -1
  22. package/dist/agent-operations/__fixtures__/room-check-scenes.d.ts +51 -0
  23. package/dist/agent-operations/__fixtures__/room-check-scenes.d.ts.map +1 -0
  24. package/dist/agent-operations/__fixtures__/room-check-scenes.js +121 -0
  25. package/dist/agent-operations/__fixtures__/scene-check-cases.d.ts.map +1 -1
  26. package/dist/agent-operations/__fixtures__/scene-check-cases.js +152 -18
  27. package/dist/agent-operations/__fixtures__/search-assets-cases.d.ts.map +1 -1
  28. package/dist/agent-operations/__fixtures__/search-assets-cases.js +91 -0
  29. package/dist/agent-operations/__fixtures__/site-cases.d.ts +40 -1
  30. package/dist/agent-operations/__fixtures__/site-cases.d.ts.map +1 -1
  31. package/dist/agent-operations/__fixtures__/structure-cases.d.ts +3 -0
  32. package/dist/agent-operations/__fixtures__/structure-cases.d.ts.map +1 -1
  33. package/dist/agent-operations/__fixtures__/structure-cases.js +199 -18
  34. package/dist/agent-operations/__fixtures__/unit-cases.d.ts +6 -0
  35. package/dist/agent-operations/__fixtures__/unit-cases.d.ts.map +1 -0
  36. package/dist/agent-operations/__fixtures__/unit-cases.js +266 -0
  37. package/dist/agent-operations/__fixtures__/verify-scene-cases.d.ts +109 -73
  38. package/dist/agent-operations/__fixtures__/verify-scene-cases.d.ts.map +1 -1
  39. package/dist/agent-operations/add-column.d.ts.map +1 -1
  40. package/dist/agent-operations/add-column.js +32 -3
  41. package/dist/agent-operations/add-fence.d.ts.map +1 -1
  42. package/dist/agent-operations/add-fence.js +2 -1
  43. package/dist/agent-operations/add-level.d.ts.map +1 -1
  44. package/dist/agent-operations/add-level.js +4 -4
  45. package/dist/agent-operations/add-object.d.ts +32 -6
  46. package/dist/agent-operations/add-object.d.ts.map +1 -1
  47. package/dist/agent-operations/add-object.js +59 -12
  48. package/dist/agent-operations/add-wall.d.ts +3 -8
  49. package/dist/agent-operations/add-wall.d.ts.map +1 -1
  50. package/dist/agent-operations/add-wall.js +31 -8
  51. package/dist/agent-operations/apply-changes.d.ts.map +1 -1
  52. package/dist/agent-operations/apply-changes.js +2 -1
  53. package/dist/agent-operations/asset-catalog.d.ts +63 -0
  54. package/dist/agent-operations/asset-catalog.d.ts.map +1 -0
  55. package/dist/agent-operations/asset-catalog.js +182 -0
  56. package/dist/agent-operations/asset-views.d.ts +4 -2
  57. package/dist/agent-operations/asset-views.d.ts.map +1 -1
  58. package/dist/agent-operations/asset-views.js +1 -3
  59. package/dist/agent-operations/author-scene-checks.d.ts +38 -0
  60. package/dist/agent-operations/author-scene-checks.d.ts.map +1 -0
  61. package/dist/agent-operations/author-scene-checks.js +266 -0
  62. package/dist/agent-operations/author-scene.d.ts +54 -20
  63. package/dist/agent-operations/author-scene.d.ts.map +1 -1
  64. package/dist/agent-operations/author-scene.js +1164 -196
  65. package/dist/agent-operations/authored-scene-merge.d.ts.map +1 -1
  66. package/dist/agent-operations/authored-scene-merge.js +61 -3
  67. package/dist/agent-operations/batch.d.ts +1 -1
  68. package/dist/agent-operations/batch.d.ts.map +1 -1
  69. package/dist/agent-operations/batch.js +38 -39
  70. package/dist/agent-operations/ceiling-object-observations.d.ts.map +1 -1
  71. package/dist/agent-operations/ceiling-object-observations.js +5 -4
  72. package/dist/agent-operations/circulation-geometry.d.ts +14 -0
  73. package/dist/agent-operations/circulation-geometry.d.ts.map +1 -0
  74. package/dist/agent-operations/circulation-geometry.js +151 -0
  75. package/dist/agent-operations/circulation-graph.d.ts +72 -0
  76. package/dist/agent-operations/circulation-graph.d.ts.map +1 -0
  77. package/dist/agent-operations/circulation-graph.js +713 -0
  78. package/dist/agent-operations/circulation-non-spaces.d.ts +10 -0
  79. package/dist/agent-operations/circulation-non-spaces.d.ts.map +1 -0
  80. package/dist/agent-operations/circulation-non-spaces.js +88 -0
  81. package/dist/agent-operations/circulation-spaces.d.ts +5880 -0
  82. package/dist/agent-operations/circulation-spaces.d.ts.map +1 -0
  83. package/dist/agent-operations/circulation-spaces.js +368 -0
  84. package/dist/agent-operations/collections.d.ts.map +1 -1
  85. package/dist/agent-operations/collections.js +9 -7
  86. package/dist/agent-operations/corner-window.d.ts.map +1 -1
  87. package/dist/agent-operations/corner-window.js +2 -4
  88. package/dist/agent-operations/create-roof.d.ts.map +1 -1
  89. package/dist/agent-operations/create-roof.js +5 -7
  90. package/dist/agent-operations/create-room.d.ts +4 -1
  91. package/dist/agent-operations/create-room.d.ts.map +1 -1
  92. package/dist/agent-operations/create-room.js +7 -4
  93. package/dist/agent-operations/create-stair.js +2 -2
  94. package/dist/agent-operations/design-brief.d.ts +13 -7
  95. package/dist/agent-operations/design-brief.d.ts.map +1 -1
  96. package/dist/agent-operations/design-brief.js +172 -92
  97. package/dist/agent-operations/door-clearance.d.ts +68 -8
  98. package/dist/agent-operations/door-clearance.d.ts.map +1 -1
  99. package/dist/agent-operations/door-clearance.js +127 -20
  100. package/dist/agent-operations/dress-targets.d.ts +23 -0
  101. package/dist/agent-operations/dress-targets.d.ts.map +1 -0
  102. package/dist/agent-operations/dress-targets.js +34 -0
  103. package/dist/agent-operations/duplicate-node.d.ts +14 -0
  104. package/dist/agent-operations/duplicate-node.d.ts.map +1 -0
  105. package/dist/agent-operations/duplicate-node.js +173 -0
  106. package/dist/agent-operations/find-by-type.d.ts.map +1 -1
  107. package/dist/agent-operations/find-by-type.js +3 -0
  108. package/dist/agent-operations/furnish-room.d.ts +2 -0
  109. package/dist/agent-operations/furnish-room.d.ts.map +1 -1
  110. package/dist/agent-operations/furnish-room.js +15 -4
  111. package/dist/agent-operations/furniture-kind.d.ts +28 -1
  112. package/dist/agent-operations/furniture-kind.d.ts.map +1 -1
  113. package/dist/agent-operations/furniture-kind.js +105 -6
  114. package/dist/agent-operations/ground-reader.d.ts +10 -0
  115. package/dist/agent-operations/ground-reader.d.ts.map +1 -0
  116. package/dist/agent-operations/ground-reader.js +25 -0
  117. package/dist/agent-operations/index.d.ts +118 -12
  118. package/dist/agent-operations/index.d.ts.map +1 -1
  119. package/dist/agent-operations/index.js +26 -1
  120. package/dist/agent-operations/item-solids.d.ts +39 -0
  121. package/dist/agent-operations/item-solids.d.ts.map +1 -0
  122. package/dist/agent-operations/item-solids.js +128 -0
  123. package/dist/agent-operations/layout-clearance.d.ts +91 -11
  124. package/dist/agent-operations/layout-clearance.d.ts.map +1 -1
  125. package/dist/agent-operations/layout-clearance.js +280 -73
  126. package/dist/agent-operations/level-height-fill.d.ts.map +1 -1
  127. package/dist/agent-operations/level-height-fill.js +7 -1
  128. package/dist/agent-operations/level-reads.d.ts +5 -0
  129. package/dist/agent-operations/level-reads.d.ts.map +1 -1
  130. package/dist/agent-operations/level-reads.js +38 -2
  131. package/dist/agent-operations/list-levels.d.ts.map +1 -1
  132. package/dist/agent-operations/list-levels.js +2 -4
  133. package/dist/agent-operations/move-node.d.ts +12 -0
  134. package/dist/agent-operations/move-node.d.ts.map +1 -0
  135. package/dist/agent-operations/move-node.js +28 -0
  136. package/dist/agent-operations/move-plan.d.ts +28 -0
  137. package/dist/agent-operations/move-plan.d.ts.map +1 -0
  138. package/dist/agent-operations/move-plan.js +257 -0
  139. package/dist/agent-operations/node-patch.d.ts.map +1 -1
  140. package/dist/agent-operations/node-patch.js +15 -0
  141. package/dist/agent-operations/paint.d.ts +3 -1
  142. package/dist/agent-operations/paint.d.ts.map +1 -1
  143. package/dist/agent-operations/paint.js +14 -1
  144. package/dist/agent-operations/photo-elevation.d.ts.map +1 -1
  145. package/dist/agent-operations/photo-elevation.js +2 -1
  146. package/dist/agent-operations/place-in-room.d.ts.map +1 -1
  147. package/dist/agent-operations/place-in-room.js +1 -0
  148. package/dist/agent-operations/place-items.d.ts.map +1 -1
  149. package/dist/agent-operations/place-items.js +3 -4
  150. package/dist/agent-operations/plan-clearance.d.ts +28 -0
  151. package/dist/agent-operations/plan-clearance.d.ts.map +1 -0
  152. package/dist/agent-operations/plan-clearance.js +47 -0
  153. package/dist/agent-operations/plan-geometry.d.ts +2 -0
  154. package/dist/agent-operations/plan-geometry.d.ts.map +1 -1
  155. package/dist/agent-operations/plan-geometry.js +10 -0
  156. package/dist/agent-operations/project-files.d.ts +10 -0
  157. package/dist/agent-operations/project-files.d.ts.map +1 -1
  158. package/dist/agent-operations/reachability.d.ts +41 -0
  159. package/dist/agent-operations/reachability.d.ts.map +1 -0
  160. package/dist/agent-operations/reachability.js +199 -0
  161. package/dist/agent-operations/room-checks.d.ts +60 -0
  162. package/dist/agent-operations/room-checks.d.ts.map +1 -0
  163. package/dist/agent-operations/room-checks.js +226 -0
  164. package/dist/agent-operations/room-faces.d.ts +30 -0
  165. package/dist/agent-operations/room-faces.d.ts.map +1 -0
  166. package/dist/agent-operations/room-faces.js +31 -0
  167. package/dist/agent-operations/room-findings.d.ts +5 -2
  168. package/dist/agent-operations/room-findings.d.ts.map +1 -1
  169. package/dist/agent-operations/room-findings.js +30 -0
  170. package/dist/agent-operations/room-finishes.d.ts +87 -0
  171. package/dist/agent-operations/room-finishes.d.ts.map +1 -0
  172. package/dist/agent-operations/room-finishes.js +193 -0
  173. package/dist/agent-operations/room-floor-script.d.ts +3 -3
  174. package/dist/agent-operations/room-floor-script.js +3 -3
  175. package/dist/agent-operations/room-readings.d.ts +90 -0
  176. package/dist/agent-operations/room-readings.d.ts.map +1 -0
  177. package/dist/agent-operations/room-readings.js +369 -0
  178. package/dist/agent-operations/room-tile.d.ts +15 -0
  179. package/dist/agent-operations/room-tile.d.ts.map +1 -0
  180. package/dist/agent-operations/room-tile.js +30 -0
  181. package/dist/agent-operations/room-wet.d.ts +55 -0
  182. package/dist/agent-operations/room-wet.d.ts.map +1 -0
  183. package/dist/agent-operations/room-wet.js +203 -0
  184. package/dist/agent-operations/scene-check-policy.d.ts +5 -0
  185. package/dist/agent-operations/scene-check-policy.d.ts.map +1 -0
  186. package/dist/agent-operations/scene-check-policy.js +24 -0
  187. package/dist/agent-operations/scene-checkpoint.d.ts +10 -0
  188. package/dist/agent-operations/scene-checkpoint.d.ts.map +1 -1
  189. package/dist/agent-operations/scene-checkpoint.js +31 -0
  190. package/dist/agent-operations/scene-issue-groups.d.ts +17 -0
  191. package/dist/agent-operations/scene-issue-groups.d.ts.map +1 -0
  192. package/dist/agent-operations/scene-issue-groups.js +71 -0
  193. package/dist/agent-operations/scene-materials.d.ts +23 -0
  194. package/dist/agent-operations/scene-materials.d.ts.map +1 -1
  195. package/dist/agent-operations/scene-materials.js +41 -0
  196. package/dist/agent-operations/scene-queries.d.ts +1667 -866
  197. package/dist/agent-operations/scene-queries.d.ts.map +1 -1
  198. package/dist/agent-operations/scene-queries.js +3 -3
  199. package/dist/agent-operations/scene-review.d.ts.map +1 -1
  200. package/dist/agent-operations/scene-review.js +3 -2
  201. package/dist/agent-operations/scene-view.d.ts.map +1 -1
  202. package/dist/agent-operations/scene-view.js +91 -21
  203. package/dist/agent-operations/search-assets.d.ts +10 -6
  204. package/dist/agent-operations/search-assets.d.ts.map +1 -1
  205. package/dist/agent-operations/search-assets.js +37 -22
  206. package/dist/agent-operations/set-checkpoint.d.ts.map +1 -1
  207. package/dist/agent-operations/set-checkpoint.js +1 -0
  208. package/dist/agent-operations/set-ground-level.d.ts +1 -1
  209. package/dist/agent-operations/set-ground-level.d.ts.map +1 -1
  210. package/dist/agent-operations/set-ground-level.js +3 -14
  211. package/dist/agent-operations/site.js +3 -2
  212. package/dist/agent-operations/slab-surface-script.d.ts +25 -0
  213. package/dist/agent-operations/slab-surface-script.d.ts.map +1 -0
  214. package/dist/agent-operations/slab-surface-script.js +60 -0
  215. package/dist/agent-operations/stair-plan-footprint.d.ts +9 -0
  216. package/dist/agent-operations/stair-plan-footprint.d.ts.map +1 -0
  217. package/dist/agent-operations/stair-plan-footprint.js +50 -0
  218. package/dist/agent-operations/types.d.ts +10 -5
  219. package/dist/agent-operations/types.d.ts.map +1 -1
  220. package/dist/agent-operations/units.d.ts +26 -0
  221. package/dist/agent-operations/units.d.ts.map +1 -0
  222. package/dist/agent-operations/units.js +110 -0
  223. package/dist/agent-operations/unreachable-rooms-check.d.ts +17 -0
  224. package/dist/agent-operations/unreachable-rooms-check.d.ts.map +1 -0
  225. package/dist/agent-operations/unreachable-rooms-check.js +35 -0
  226. package/dist/agent-operations/usage-checks.d.ts +2 -0
  227. package/dist/agent-operations/usage-checks.d.ts.map +1 -0
  228. package/dist/agent-operations/usage-checks.js +12 -0
  229. package/dist/agent-operations/verify-scene.d.ts +8 -11
  230. package/dist/agent-operations/verify-scene.d.ts.map +1 -1
  231. package/dist/agent-operations/verify-scene.js +55 -11
  232. package/dist/agent-operations/wall-face-defaults.d.ts +44 -0
  233. package/dist/agent-operations/wall-face-defaults.d.ts.map +1 -0
  234. package/dist/agent-operations/wall-face-defaults.js +229 -0
  235. package/dist/agent-operations/wall-joins.d.ts +119 -0
  236. package/dist/agent-operations/wall-joins.d.ts.map +1 -0
  237. package/dist/agent-operations/wall-joins.js +308 -0
  238. package/dist/agent-operations/wall-object-observations.d.ts.map +1 -1
  239. package/dist/agent-operations/wall-object-observations.js +4 -6
  240. package/dist/agent-operations/wall-skirting.d.ts.map +1 -1
  241. package/dist/agent-operations/wall-skirting.js +2 -0
  242. package/dist/agent-operations/wall-type.d.ts +49 -0
  243. package/dist/agent-operations/wall-type.d.ts.map +1 -0
  244. package/dist/agent-operations/wall-type.js +31 -0
  245. package/dist/agent-operations/zone-coverage.d.ts +85 -0
  246. package/dist/agent-operations/zone-coverage.d.ts.map +1 -0
  247. package/dist/agent-operations/zone-coverage.js +208 -0
  248. package/dist/agent-tools/add-object.d.ts +31 -0
  249. package/dist/agent-tools/add-object.d.ts.map +1 -1
  250. package/dist/agent-tools/add-object.js +44 -7
  251. package/dist/agent-tools/assets.d.ts +4 -0
  252. package/dist/agent-tools/assets.d.ts.map +1 -1
  253. package/dist/agent-tools/assets.js +11 -1
  254. package/dist/agent-tools/author-scene.d.ts +810 -15
  255. package/dist/agent-tools/author-scene.d.ts.map +1 -1
  256. package/dist/agent-tools/author-scene.js +275 -34
  257. package/dist/agent-tools/batch.d.ts +1 -1
  258. package/dist/agent-tools/batch.d.ts.map +1 -1
  259. package/dist/agent-tools/batch.js +5 -1
  260. package/dist/agent-tools/checkpoints.js +1 -1
  261. package/dist/agent-tools/columns.d.ts +14 -0
  262. package/dist/agent-tools/columns.d.ts.map +1 -1
  263. package/dist/agent-tools/columns.js +14 -2
  264. package/dist/agent-tools/contract.d.ts +10 -0
  265. package/dist/agent-tools/contract.d.ts.map +1 -1
  266. package/dist/agent-tools/contract.js +5 -1
  267. package/dist/agent-tools/corner-window.d.ts +1 -0
  268. package/dist/agent-tools/corner-window.d.ts.map +1 -1
  269. package/dist/agent-tools/corner-window.js +1 -1
  270. package/dist/agent-tools/create-room.d.ts +85 -0
  271. package/dist/agent-tools/create-room.d.ts.map +1 -1
  272. package/dist/agent-tools/create-room.js +8 -1
  273. package/dist/agent-tools/design-brief.d.ts +513 -7
  274. package/dist/agent-tools/design-brief.d.ts.map +1 -1
  275. package/dist/agent-tools/design-brief.js +192 -14
  276. package/dist/agent-tools/designs.js +1 -1
  277. package/dist/agent-tools/find-by-type.js +1 -1
  278. package/dist/agent-tools/index.d.ts +658 -10
  279. package/dist/agent-tools/index.d.ts.map +1 -1
  280. package/dist/agent-tools/index.js +9 -1
  281. package/dist/agent-tools/levels.js +4 -4
  282. package/dist/agent-tools/move-duplicate.d.ts +65 -0
  283. package/dist/agent-tools/move-duplicate.d.ts.map +1 -0
  284. package/dist/agent-tools/move-duplicate.js +68 -0
  285. package/dist/agent-tools/paint.d.ts +6 -0
  286. package/dist/agent-tools/paint.d.ts.map +1 -1
  287. package/dist/agent-tools/paint.js +7 -3
  288. package/dist/agent-tools/photo-elevation.js +1 -1
  289. package/dist/agent-tools/project-files.d.ts +2 -2
  290. package/dist/agent-tools/project-files.d.ts.map +1 -1
  291. package/dist/agent-tools/project-files.js +1 -1
  292. package/dist/agent-tools/refusal.d.ts +9 -1
  293. package/dist/agent-tools/refusal.d.ts.map +1 -1
  294. package/dist/agent-tools/refusal.js +5 -1
  295. package/dist/agent-tools/roofs.js +1 -1
  296. package/dist/agent-tools/room-structure.d.ts +60 -0
  297. package/dist/agent-tools/room-structure.d.ts.map +1 -1
  298. package/dist/agent-tools/room-structure.js +20 -1
  299. package/dist/agent-tools/search-materials.d.ts +1 -0
  300. package/dist/agent-tools/search-materials.d.ts.map +1 -1
  301. package/dist/agent-tools/site.js +1 -1
  302. package/dist/agent-tools/stairs.js +1 -1
  303. package/dist/agent-tools/units.d.ts +84 -0
  304. package/dist/agent-tools/units.d.ts.map +1 -0
  305. package/dist/agent-tools/units.js +54 -0
  306. package/dist/agent-tools/verify-scene-usage.d.ts +44 -0
  307. package/dist/agent-tools/verify-scene-usage.d.ts.map +1 -0
  308. package/dist/agent-tools/verify-scene-usage.js +146 -0
  309. package/dist/agent-tools/verify-scene.d.ts +12 -1
  310. package/dist/agent-tools/verify-scene.d.ts.map +1 -1
  311. package/dist/agent-tools/verify-scene.js +183 -3
  312. package/dist/agent-tools/view-scene.d.ts +3 -0
  313. package/dist/agent-tools/view-scene.d.ts.map +1 -1
  314. package/dist/agent-tools/view-scene.js +4 -1
  315. package/dist/agent-tools/wall-openings.d.ts +121 -2
  316. package/dist/agent-tools/wall-openings.d.ts.map +1 -1
  317. package/dist/agent-tools/wall-openings.js +123 -18
  318. package/dist/agent-tools/walls.d.ts +30 -0
  319. package/dist/agent-tools/walls.d.ts.map +1 -1
  320. package/dist/agent-tools/walls.js +54 -2
  321. package/dist/building/__fixtures__/wall-opening-cases.d.ts +340 -195
  322. package/dist/building/__fixtures__/wall-opening-cases.d.ts.map +1 -1
  323. package/dist/building/__fixtures__/wall-opening-cases.js +13 -0
  324. package/dist/building/code-profile.d.ts +231 -0
  325. package/dist/building/code-profile.d.ts.map +1 -0
  326. package/dist/building/code-profile.js +208 -0
  327. package/dist/building/corner-window.d.ts +2 -2
  328. package/dist/building/corner-window.d.ts.map +1 -1
  329. package/dist/building/corner-window.js +11 -2
  330. package/dist/building/door-types.d.ts +1 -0
  331. package/dist/building/door-types.d.ts.map +1 -1
  332. package/dist/building/door-types.js +2 -0
  333. package/dist/building/floor-item-fit.d.ts.map +1 -1
  334. package/dist/building/floor-item-fit.js +2 -4
  335. package/dist/building/ground-level.d.ts +1 -3
  336. package/dist/building/ground-level.d.ts.map +1 -1
  337. package/dist/building/ground-level.js +3 -5
  338. package/dist/building/index.d.ts +2 -0
  339. package/dist/building/index.d.ts.map +1 -1
  340. package/dist/building/index.js +2 -0
  341. package/dist/building/level-duplication.d.ts +5951 -4351
  342. package/dist/building/level-duplication.d.ts.map +1 -1
  343. package/dist/building/level-insertion.d.ts +1 -1
  344. package/dist/building/level-wall-copy.d.ts +24 -0
  345. package/dist/building/level-wall-copy.d.ts.map +1 -0
  346. package/dist/building/level-wall-copy.js +53 -0
  347. package/dist/building/merge-windows.d.ts.map +1 -1
  348. package/dist/building/merge-windows.js +1 -0
  349. package/dist/building/opening-style-presets.d.ts +2 -0
  350. package/dist/building/opening-style-presets.d.ts.map +1 -1
  351. package/dist/building/opening-style-presets.js +26 -5
  352. package/dist/building/room-use.d.ts +26 -0
  353. package/dist/building/room-use.d.ts.map +1 -0
  354. package/dist/building/room-use.js +102 -0
  355. package/dist/building/wall-openings.d.ts +115 -7
  356. package/dist/building/wall-openings.d.ts.map +1 -1
  357. package/dist/building/wall-openings.js +121 -29
  358. package/dist/building/window-types.d.ts +1 -0
  359. package/dist/building/window-types.d.ts.map +1 -1
  360. package/dist/building/window-types.js +3 -0
  361. package/dist/coherence/__fixtures__/enclosure-scenes.d.ts +84 -0
  362. package/dist/coherence/__fixtures__/enclosure-scenes.d.ts.map +1 -0
  363. package/dist/coherence/__fixtures__/enclosure-scenes.js +44 -0
  364. package/dist/commands/structure/attached-walls.d.ts +16 -0
  365. package/dist/commands/structure/attached-walls.d.ts.map +1 -0
  366. package/dist/commands/structure/attached-walls.js +53 -0
  367. package/dist/commands/structure/index.d.ts +3 -0
  368. package/dist/commands/structure/index.d.ts.map +1 -1
  369. package/dist/commands/structure/index.js +3 -0
  370. package/dist/commands/structure/move-separators.d.ts +62 -0
  371. package/dist/commands/structure/move-separators.d.ts.map +1 -0
  372. package/dist/commands/structure/move-separators.js +346 -0
  373. package/dist/commands/structure/set-floor-foundation.d.ts +5 -0
  374. package/dist/commands/structure/set-floor-foundation.d.ts.map +1 -1
  375. package/dist/commands/structure/set-wall-geometry.d.ts.map +1 -1
  376. package/dist/commands/structure/set-wall-geometry.js +44 -11
  377. package/dist/commands/structure/set-zone-intent.d.ts +26 -0
  378. package/dist/commands/structure/set-zone-intent.d.ts.map +1 -1
  379. package/dist/commands/structure/set-zone-intent.js +107 -2
  380. package/dist/commands/structure/shared.d.ts +888 -88
  381. package/dist/commands/structure/shared.d.ts.map +1 -1
  382. package/dist/commands/structure/wall-overlap.d.ts +45 -0
  383. package/dist/commands/structure/wall-overlap.d.ts.map +1 -0
  384. package/dist/commands/structure/wall-overlap.js +289 -0
  385. package/dist/commands/structure/zone-wall-merge.d.ts +3326 -2370
  386. package/dist/commands/structure/zone-wall-merge.d.ts.map +1 -1
  387. package/dist/contracts/reference-discovery.d.ts +2 -2
  388. package/dist/contracts/reference-discovery.d.ts.map +1 -1
  389. package/dist/contracts/reference-discovery.js +5 -3
  390. package/dist/contracts/reference-inventory.d.ts.map +1 -1
  391. package/dist/contracts/reference-inventory.js +75 -24
  392. package/dist/events/bus.d.ts +15 -2
  393. package/dist/events/bus.d.ts.map +1 -1
  394. package/dist/hooks/spatial-grid/built-in-floor-placed.d.ts +40 -0
  395. package/dist/hooks/spatial-grid/built-in-floor-placed.d.ts.map +1 -0
  396. package/dist/hooks/spatial-grid/built-in-floor-placed.js +220 -0
  397. package/dist/hooks/spatial-grid/floor-placed-elevation.d.ts.map +1 -1
  398. package/dist/hooks/spatial-grid/floor-placed-elevation.js +13 -7
  399. package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts +56 -1
  400. package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts.map +1 -1
  401. package/dist/hooks/spatial-grid/spatial-grid-manager.js +177 -27
  402. package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts +1631 -831
  403. package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts.map +1 -1
  404. package/dist/hooks/spatial-grid/spatial-grid-sync.js +24 -1
  405. package/dist/hooks/spatial-grid/support-host-patch.js +10 -10
  406. package/dist/i18n/format.d.ts +41 -0
  407. package/dist/i18n/format.d.ts.map +1 -0
  408. package/dist/i18n/format.js +124 -0
  409. package/dist/i18n/index.d.ts +5 -0
  410. package/dist/i18n/index.d.ts.map +1 -0
  411. package/dist/i18n/index.js +3 -0
  412. package/dist/i18n/registry.d.ts +78 -0
  413. package/dist/i18n/registry.d.ts.map +1 -0
  414. package/dist/i18n/registry.js +252 -0
  415. package/dist/i18n/use-translate.d.ts +16 -0
  416. package/dist/i18n/use-translate.d.ts.map +1 -0
  417. package/dist/i18n/use-translate.js +23 -0
  418. package/dist/index.d.ts +32 -16
  419. package/dist/index.d.ts.map +1 -1
  420. package/dist/index.js +31 -15
  421. package/dist/lib/__fixtures__/mezzanine.d.ts +6840 -4169
  422. package/dist/lib/__fixtures__/mezzanine.d.ts.map +1 -1
  423. package/dist/lib/absorb-wall-separators.d.ts +2128 -1328
  424. package/dist/lib/absorb-wall-separators.d.ts.map +1 -1
  425. package/dist/lib/beam.d.ts +137 -0
  426. package/dist/lib/beam.d.ts.map +1 -0
  427. package/dist/lib/beam.js +297 -0
  428. package/dist/lib/below-grade-footprints.d.ts +13 -5
  429. package/dist/lib/below-grade-footprints.d.ts.map +1 -1
  430. package/dist/lib/below-grade-footprints.js +53 -10
  431. package/dist/lib/build-up.d.ts +89 -0
  432. package/dist/lib/build-up.d.ts.map +1 -0
  433. package/dist/lib/build-up.js +216 -0
  434. package/dist/lib/corner-pair.d.ts +205 -4
  435. package/dist/lib/corner-pair.d.ts.map +1 -1
  436. package/dist/lib/deck-boards.d.ts +80 -0
  437. package/dist/lib/deck-boards.d.ts.map +1 -0
  438. package/dist/lib/deck-boards.js +184 -0
  439. package/dist/lib/deck-framing.d.ts +150 -0
  440. package/dist/lib/deck-framing.d.ts.map +1 -0
  441. package/dist/lib/deck-framing.js +515 -0
  442. package/dist/lib/deepest-drawn.d.ts +3 -6
  443. package/dist/lib/deepest-drawn.d.ts.map +1 -1
  444. package/dist/lib/deepest-drawn.js +4 -8
  445. package/dist/lib/door-opening.d.ts +19 -0
  446. package/dist/lib/door-opening.d.ts.map +1 -0
  447. package/dist/lib/door-opening.js +27 -0
  448. package/dist/lib/door-operation.d.ts +2 -0
  449. package/dist/lib/door-operation.d.ts.map +1 -1
  450. package/dist/lib/door-operation.js +4 -0
  451. package/dist/lib/exterior-wall-loops.d.ts.map +1 -1
  452. package/dist/lib/exterior-wall-loops.js +2 -1
  453. package/dist/lib/finish-script.d.ts +5 -5
  454. package/dist/lib/finish-script.d.ts.map +1 -1
  455. package/dist/lib/finish-script.js +12 -5
  456. package/dist/lib/floor-footprint-name.d.ts +17 -0
  457. package/dist/lib/floor-footprint-name.d.ts.map +1 -1
  458. package/dist/lib/floor-footprint-name.js +17 -4
  459. package/dist/lib/floor-intent-changes.d.ts.map +1 -1
  460. package/dist/lib/floor-intent-changes.js +60 -35
  461. package/dist/lib/floor-opening-footprints.d.ts +1 -1
  462. package/dist/lib/floor-opening-footprints.d.ts.map +1 -1
  463. package/dist/lib/floor-opening-footprints.js +10 -4
  464. package/dist/lib/floor-plate-paint.d.ts +2 -0
  465. package/dist/lib/floor-plate-paint.d.ts.map +1 -1
  466. package/dist/lib/floor-plate-paint.js +12 -0
  467. package/dist/lib/floor-plates.d.ts +250 -0
  468. package/dist/lib/floor-plates.d.ts.map +1 -1
  469. package/dist/lib/floor-plates.js +43 -4
  470. package/dist/lib/floor-script.d.ts +35 -6
  471. package/dist/lib/floor-script.d.ts.map +1 -1
  472. package/dist/lib/floor-script.js +96 -16
  473. package/dist/lib/foundation-construction.d.ts +4 -13
  474. package/dist/lib/foundation-construction.d.ts.map +1 -1
  475. package/dist/lib/foundation-construction.js +4 -14
  476. package/dist/lib/foundation-standard.d.ts +2 -3
  477. package/dist/lib/foundation-standard.d.ts.map +1 -1
  478. package/dist/lib/foundation-standard.js +2 -3
  479. package/dist/lib/foundation-wall.d.ts +1 -2
  480. package/dist/lib/foundation-wall.d.ts.map +1 -1
  481. package/dist/lib/foundation-wall.js +1 -2
  482. package/dist/lib/framing-post.d.ts +91 -0
  483. package/dist/lib/framing-post.d.ts.map +1 -0
  484. package/dist/lib/framing-post.js +174 -0
  485. package/dist/lib/geometry-script-node.d.ts +11 -0
  486. package/dist/lib/geometry-script-node.d.ts.map +1 -1
  487. package/dist/lib/geometry-script-node.js +35 -0
  488. package/dist/lib/grade-standing.d.ts +16 -2
  489. package/dist/lib/grade-standing.d.ts.map +1 -1
  490. package/dist/lib/grade-standing.js +129 -9
  491. package/dist/lib/ground-seat.d.ts +2 -22
  492. package/dist/lib/ground-seat.d.ts.map +1 -1
  493. package/dist/lib/ground-seat.js +2 -17
  494. package/dist/lib/ground-window.d.ts +2 -1
  495. package/dist/lib/ground-window.d.ts.map +1 -1
  496. package/dist/lib/ground-window.js +5 -2
  497. package/dist/lib/level-footprints.d.ts +2 -0
  498. package/dist/lib/level-footprints.d.ts.map +1 -1
  499. package/dist/lib/level-footprints.js +7 -0
  500. package/dist/lib/opening-casing.d.ts +67 -0
  501. package/dist/lib/opening-casing.d.ts.map +1 -0
  502. package/dist/lib/opening-casing.js +131 -0
  503. package/dist/lib/opening-exterior-face.d.ts +6 -0
  504. package/dist/lib/opening-exterior-face.d.ts.map +1 -0
  505. package/dist/lib/opening-exterior-face.js +15 -0
  506. package/dist/lib/opening-floor-datum.d.ts +11 -5
  507. package/dist/lib/opening-floor-datum.d.ts.map +1 -1
  508. package/dist/lib/opening-floor-datum.js +38 -6
  509. package/dist/lib/opening-frame-depth.d.ts +18 -0
  510. package/dist/lib/opening-frame-depth.d.ts.map +1 -0
  511. package/dist/lib/opening-frame-depth.js +22 -0
  512. package/dist/lib/outdoor-room.d.ts +32 -0
  513. package/dist/lib/outdoor-room.d.ts.map +1 -0
  514. package/dist/lib/outdoor-room.js +66 -0
  515. package/dist/lib/plate-surface.d.ts +8 -0
  516. package/dist/lib/plate-surface.d.ts.map +1 -1
  517. package/dist/lib/plate-surface.js +53 -3
  518. package/dist/lib/porch-framing-sync.d.ts +46 -0
  519. package/dist/lib/porch-framing-sync.d.ts.map +1 -0
  520. package/dist/lib/porch-framing-sync.js +206 -0
  521. package/dist/lib/porch-framing.d.ts +44 -0
  522. package/dist/lib/porch-framing.d.ts.map +1 -0
  523. package/dist/lib/porch-framing.js +159 -0
  524. package/dist/lib/railing-rooms.d.ts +13 -0
  525. package/dist/lib/railing-rooms.d.ts.map +1 -0
  526. package/dist/lib/railing-rooms.js +37 -0
  527. package/dist/lib/roof-eave.d.ts +135 -0
  528. package/dist/lib/roof-eave.d.ts.map +1 -0
  529. package/dist/lib/roof-eave.js +186 -0
  530. package/dist/lib/room-floor-plate.d.ts +3 -1
  531. package/dist/lib/room-floor-plate.d.ts.map +1 -1
  532. package/dist/lib/room-floor-plate.js +7 -0
  533. package/dist/lib/space-detection.d.ts +13 -0
  534. package/dist/lib/space-detection.d.ts.map +1 -1
  535. package/dist/lib/space-detection.js +112 -24
  536. package/dist/lib/structure-kernel.d.ts +22 -9
  537. package/dist/lib/structure-kernel.d.ts.map +1 -1
  538. package/dist/lib/structure-kernel.js +146 -28
  539. package/dist/lib/structure-reconcile.d.ts +1 -1
  540. package/dist/lib/structure-reconcile.d.ts.map +1 -1
  541. package/dist/lib/structure-reconcile.js +7 -4
  542. package/dist/lib/surface-intent.d.ts +10 -0
  543. package/dist/lib/surface-intent.d.ts.map +1 -0
  544. package/dist/lib/surface-intent.js +18 -0
  545. package/dist/lib/terrain-source.d.ts.map +1 -1
  546. package/dist/lib/terrain-source.js +2 -1
  547. package/dist/lib/wall-face-script.d.ts.map +1 -1
  548. package/dist/lib/wall-face-script.js +5 -2
  549. package/dist/material-kinds.d.ts +1 -1
  550. package/dist/material-kinds.d.ts.map +1 -1
  551. package/dist/material-kinds.js +1 -0
  552. package/dist/material-library.d.ts +15 -0
  553. package/dist/material-library.d.ts.map +1 -1
  554. package/dist/material-library.js +458 -59
  555. package/dist/node-slots/door.d.ts +3 -4
  556. package/dist/node-slots/door.d.ts.map +1 -1
  557. package/dist/node-slots/door.js +4 -3
  558. package/dist/node-slots/wall.d.ts.map +1 -1
  559. package/dist/node-slots/wall.js +21 -3
  560. package/dist/node-slots/window.d.ts +2 -2
  561. package/dist/node-slots/window.d.ts.map +1 -1
  562. package/dist/node-slots/window.js +6 -1
  563. package/dist/procedural-items/design.d.ts +8 -0
  564. package/dist/procedural-items/design.d.ts.map +1 -1
  565. package/dist/procedural-items/design.js +169 -21
  566. package/dist/procedural-items/motion-controller.d.ts +2 -0
  567. package/dist/procedural-items/motion-controller.d.ts.map +1 -1
  568. package/dist/procedural-items/motion-controller.js +2 -1
  569. package/dist/registry/index.d.ts +2 -2
  570. package/dist/registry/index.d.ts.map +1 -1
  571. package/dist/registry/index.js +1 -1
  572. package/dist/registry/mechanism.d.ts +4 -1
  573. package/dist/registry/mechanism.d.ts.map +1 -1
  574. package/dist/registry/mechanism.js +10 -0
  575. package/dist/registry/types.d.ts +65 -23
  576. package/dist/registry/types.d.ts.map +1 -1
  577. package/dist/runtime/__fixtures__/live-scene.d.ts +14 -0
  578. package/dist/runtime/__fixtures__/live-scene.d.ts.map +1 -0
  579. package/dist/runtime/__fixtures__/live-scene.js +64 -0
  580. package/dist/runtime/apply.d.ts +42 -0
  581. package/dist/runtime/apply.d.ts.map +1 -0
  582. package/dist/runtime/apply.js +274 -0
  583. package/dist/runtime/dependencies.d.ts +97 -0
  584. package/dist/runtime/dependencies.d.ts.map +1 -0
  585. package/dist/runtime/dependencies.js +42 -0
  586. package/dist/runtime/ids.d.ts +11 -0
  587. package/dist/runtime/ids.d.ts.map +1 -0
  588. package/dist/runtime/ids.js +80 -0
  589. package/dist/runtime/index.d.ts +14 -0
  590. package/dist/runtime/index.d.ts.map +1 -0
  591. package/dist/runtime/index.js +11 -0
  592. package/dist/runtime/node-queries.d.ts +16 -0
  593. package/dist/runtime/node-queries.d.ts.map +1 -0
  594. package/dist/runtime/node-queries.js +30 -0
  595. package/dist/runtime/patch.d.ts +26 -0
  596. package/dist/runtime/patch.d.ts.map +1 -0
  597. package/dist/runtime/patch.js +165 -0
  598. package/dist/runtime/reader.d.ts +104 -0
  599. package/dist/runtime/reader.d.ts.map +1 -0
  600. package/dist/runtime/reader.js +455 -0
  601. package/dist/runtime/scene-runtime.d.ts +112 -0
  602. package/dist/runtime/scene-runtime.d.ts.map +1 -0
  603. package/dist/runtime/scene-runtime.js +302 -0
  604. package/dist/schema/__fixtures__/node-fixtures.d.ts.map +1 -1
  605. package/dist/schema/__fixtures__/node-fixtures.js +1 -0
  606. package/dist/schema/assembly.d.ts +3 -0
  607. package/dist/schema/assembly.d.ts.map +1 -1
  608. package/dist/schema/assembly.js +13 -0
  609. package/dist/schema/asset-url.d.ts +37 -2
  610. package/dist/schema/asset-url.d.ts.map +1 -1
  611. package/dist/schema/asset-url.js +80 -11
  612. package/dist/schema/base.d.ts +8 -0
  613. package/dist/schema/base.d.ts.map +1 -1
  614. package/dist/schema/base.js +19 -1
  615. package/dist/schema/build-up.d.ts +247 -0
  616. package/dist/schema/build-up.d.ts.map +1 -0
  617. package/dist/schema/build-up.js +83 -0
  618. package/dist/schema/geometry-source.d.ts +80 -0
  619. package/dist/schema/geometry-source.d.ts.map +1 -1
  620. package/dist/schema/geometry-source.js +38 -0
  621. package/dist/schema/index.d.ts +12 -7
  622. package/dist/schema/index.d.ts.map +1 -1
  623. package/dist/schema/index.js +12 -6
  624. package/dist/schema/material.d.ts +5 -0
  625. package/dist/schema/material.d.ts.map +1 -1
  626. package/dist/schema/material.js +6 -0
  627. package/dist/schema/nodes/beam.d.ts +264 -0
  628. package/dist/schema/nodes/beam.d.ts.map +1 -0
  629. package/dist/schema/nodes/beam.js +139 -0
  630. package/dist/schema/nodes/box-vent.d.ts +5 -0
  631. package/dist/schema/nodes/box-vent.d.ts.map +1 -1
  632. package/dist/schema/nodes/cabinet.d.ts +10 -0
  633. package/dist/schema/nodes/cabinet.d.ts.map +1 -1
  634. package/dist/schema/nodes/ceiling.d.ts +48 -0
  635. package/dist/schema/nodes/ceiling.d.ts.map +1 -1
  636. package/dist/schema/nodes/ceiling.js +5 -0
  637. package/dist/schema/nodes/chimney.d.ts +10 -0
  638. package/dist/schema/nodes/chimney.d.ts.map +1 -1
  639. package/dist/schema/nodes/column.d.ts +42 -0
  640. package/dist/schema/nodes/column.d.ts.map +1 -1
  641. package/dist/schema/nodes/column.js +11 -1
  642. package/dist/schema/nodes/cupola.d.ts +5 -0
  643. package/dist/schema/nodes/cupola.d.ts.map +1 -1
  644. package/dist/schema/nodes/door.d.ts +54 -3
  645. package/dist/schema/nodes/door.d.ts.map +1 -1
  646. package/dist/schema/nodes/door.js +41 -7
  647. package/dist/schema/nodes/dormer.d.ts +20 -0
  648. package/dist/schema/nodes/dormer.d.ts.map +1 -1
  649. package/dist/schema/nodes/downspout.d.ts +5 -0
  650. package/dist/schema/nodes/downspout.d.ts.map +1 -1
  651. package/dist/schema/nodes/elevator.d.ts +5 -0
  652. package/dist/schema/nodes/elevator.d.ts.map +1 -1
  653. package/dist/schema/nodes/eyebrow-vent.d.ts +5 -0
  654. package/dist/schema/nodes/eyebrow-vent.d.ts.map +1 -1
  655. package/dist/schema/nodes/fence.d.ts +5 -0
  656. package/dist/schema/nodes/fence.d.ts.map +1 -1
  657. package/dist/schema/nodes/guide.d.ts +14 -0
  658. package/dist/schema/nodes/guide.d.ts.map +1 -1
  659. package/dist/schema/nodes/guide.js +2 -0
  660. package/dist/schema/nodes/gutter.d.ts +5 -0
  661. package/dist/schema/nodes/gutter.d.ts.map +1 -1
  662. package/dist/schema/nodes/item.d.ts +71 -0
  663. package/dist/schema/nodes/item.d.ts.map +1 -1
  664. package/dist/schema/nodes/item.js +5 -1
  665. package/dist/schema/nodes/level.d.ts +1 -1
  666. package/dist/schema/nodes/level.d.ts.map +1 -1
  667. package/dist/schema/nodes/opening-types.d.ts +13 -0
  668. package/dist/schema/nodes/opening-types.d.ts.map +1 -1
  669. package/dist/schema/nodes/opening-types.js +8 -1
  670. package/dist/schema/nodes/railing-wall.d.ts +112 -0
  671. package/dist/schema/nodes/railing-wall.d.ts.map +1 -0
  672. package/dist/schema/nodes/railing-wall.js +160 -0
  673. package/dist/schema/nodes/ridge-vent.d.ts +5 -0
  674. package/dist/schema/nodes/ridge-vent.d.ts.map +1 -1
  675. package/dist/schema/nodes/roof-segment.d.ts +224 -1
  676. package/dist/schema/nodes/roof-segment.d.ts.map +1 -1
  677. package/dist/schema/nodes/roof-segment.js +57 -10
  678. package/dist/schema/nodes/roof-types.d.ts +11 -0
  679. package/dist/schema/nodes/roof-types.d.ts.map +1 -1
  680. package/dist/schema/nodes/roof-types.js +6 -0
  681. package/dist/schema/nodes/roof.d.ts +60 -0
  682. package/dist/schema/nodes/roof.d.ts.map +1 -1
  683. package/dist/schema/nodes/roof.js +4 -0
  684. package/dist/schema/nodes/shelf.d.ts +5 -0
  685. package/dist/schema/nodes/shelf.d.ts.map +1 -1
  686. package/dist/schema/nodes/site.d.ts +80 -0
  687. package/dist/schema/nodes/site.d.ts.map +1 -1
  688. package/dist/schema/nodes/site.js +7 -0
  689. package/dist/schema/nodes/skylight.d.ts +10 -0
  690. package/dist/schema/nodes/skylight.d.ts.map +1 -1
  691. package/dist/schema/nodes/slab.d.ts +137 -0
  692. package/dist/schema/nodes/slab.d.ts.map +1 -1
  693. package/dist/schema/nodes/slab.js +3 -0
  694. package/dist/schema/nodes/solar-panel.d.ts +10 -0
  695. package/dist/schema/nodes/solar-panel.d.ts.map +1 -1
  696. package/dist/schema/nodes/stair-segment.d.ts +5 -0
  697. package/dist/schema/nodes/stair-segment.d.ts.map +1 -1
  698. package/dist/schema/nodes/stair-structure.d.ts +69 -0
  699. package/dist/schema/nodes/stair-structure.d.ts.map +1 -0
  700. package/dist/schema/nodes/stair-structure.js +39 -0
  701. package/dist/schema/nodes/stair.d.ts +46 -0
  702. package/dist/schema/nodes/stair.d.ts.map +1 -1
  703. package/dist/schema/nodes/stair.js +3 -0
  704. package/dist/schema/nodes/turbine-vent.d.ts +5 -0
  705. package/dist/schema/nodes/turbine-vent.d.ts.map +1 -1
  706. package/dist/schema/nodes/wall.d.ts +135 -2
  707. package/dist/schema/nodes/wall.d.ts.map +1 -1
  708. package/dist/schema/nodes/wall.js +42 -6
  709. package/dist/schema/nodes/window.d.ts +66 -1
  710. package/dist/schema/nodes/window.d.ts.map +1 -1
  711. package/dist/schema/nodes/window.js +50 -5
  712. package/dist/schema/nodes/zone.d.ts +68 -0
  713. package/dist/schema/nodes/zone.d.ts.map +1 -1
  714. package/dist/schema/nodes/zone.js +32 -0
  715. package/dist/schema/scene-material.d.ts +5 -0
  716. package/dist/schema/scene-material.d.ts.map +1 -1
  717. package/dist/schema/types.d.ts +1079 -4
  718. package/dist/schema/types.d.ts.map +1 -1
  719. package/dist/schema/types.js +2 -0
  720. package/dist/schema/wall-type.d.ts +95 -0
  721. package/dist/schema/wall-type.d.ts.map +1 -0
  722. package/dist/schema/wall-type.js +32 -0
  723. package/dist/services/roof-bearing.d.ts.map +1 -1
  724. package/dist/services/roof-bearing.js +6 -3
  725. package/dist/services/roof-level.d.ts.map +1 -1
  726. package/dist/services/roof-level.js +4 -3
  727. package/dist/services/roof-move.d.ts.map +1 -1
  728. package/dist/services/roof-move.js +13 -7
  729. package/dist/services/storey.d.ts.map +1 -1
  730. package/dist/services/storey.js +13 -8
  731. package/dist/spatial/usage-field/beds.d.ts +51 -0
  732. package/dist/spatial/usage-field/beds.d.ts.map +1 -0
  733. package/dist/spatial/usage-field/beds.js +346 -0
  734. package/dist/spatial/usage-field/blocked.d.ts +28 -0
  735. package/dist/spatial/usage-field/blocked.d.ts.map +1 -0
  736. package/dist/spatial/usage-field/blocked.js +185 -0
  737. package/dist/spatial/usage-field/boxes.d.ts +17 -0
  738. package/dist/spatial/usage-field/boxes.d.ts.map +1 -0
  739. package/dist/spatial/usage-field/boxes.js +82 -0
  740. package/dist/spatial/usage-field/catalogue-shapes.d.ts +3 -0
  741. package/dist/spatial/usage-field/catalogue-shapes.d.ts.map +1 -0
  742. package/dist/spatial/usage-field/catalogue-shapes.js +257 -0
  743. package/dist/spatial/usage-field/catalogue.d.ts +6 -0
  744. package/dist/spatial/usage-field/catalogue.d.ts.map +1 -0
  745. package/dist/spatial/usage-field/catalogue.js +11 -0
  746. package/dist/spatial/usage-field/clash.d.ts +40 -0
  747. package/dist/spatial/usage-field/clash.d.ts.map +1 -0
  748. package/dist/spatial/usage-field/clash.js +187 -0
  749. package/dist/spatial/usage-field/door-stairs.d.ts +18 -0
  750. package/dist/spatial/usage-field/door-stairs.d.ts.map +1 -0
  751. package/dist/spatial/usage-field/door-stairs.js +129 -0
  752. package/dist/spatial/usage-field/entry-way.d.ts +14 -0
  753. package/dist/spatial/usage-field/entry-way.d.ts.map +1 -0
  754. package/dist/spatial/usage-field/entry-way.js +219 -0
  755. package/dist/spatial/usage-field/fences.d.ts +18 -0
  756. package/dist/spatial/usage-field/fences.d.ts.map +1 -0
  757. package/dist/spatial/usage-field/fences.js +253 -0
  758. package/dist/spatial/usage-field/field.d.ts +44 -0
  759. package/dist/spatial/usage-field/field.d.ts.map +1 -0
  760. package/dist/spatial/usage-field/field.js +145 -0
  761. package/dist/spatial/usage-field/findings.d.ts +76 -0
  762. package/dist/spatial/usage-field/findings.d.ts.map +1 -0
  763. package/dist/spatial/usage-field/findings.js +252 -0
  764. package/dist/spatial/usage-field/fixtures.d.ts +18 -0
  765. package/dist/spatial/usage-field/fixtures.d.ts.map +1 -0
  766. package/dist/spatial/usage-field/fixtures.js +160 -0
  767. package/dist/spatial/usage-field/flag.d.ts +10 -0
  768. package/dist/spatial/usage-field/flag.d.ts.map +1 -0
  769. package/dist/spatial/usage-field/flag.js +12 -0
  770. package/dist/spatial/usage-field/floors.d.ts +13 -0
  771. package/dist/spatial/usage-field/floors.d.ts.map +1 -0
  772. package/dist/spatial/usage-field/floors.js +36 -0
  773. package/dist/spatial/usage-field/index.d.ts +7 -0
  774. package/dist/spatial/usage-field/index.d.ts.map +1 -0
  775. package/dist/spatial/usage-field/index.js +5 -0
  776. package/dist/spatial/usage-field/items.d.ts +38 -0
  777. package/dist/spatial/usage-field/items.d.ts.map +1 -0
  778. package/dist/spatial/usage-field/items.js +261 -0
  779. package/dist/spatial/usage-field/labels.d.ts +8 -0
  780. package/dist/spatial/usage-field/labels.d.ts.map +1 -0
  781. package/dist/spatial/usage-field/labels.js +14 -0
  782. package/dist/spatial/usage-field/level-field.d.ts +47 -0
  783. package/dist/spatial/usage-field/level-field.d.ts.map +1 -0
  784. package/dist/spatial/usage-field/level-field.js +96 -0
  785. package/dist/spatial/usage-field/measure.d.ts +324 -0
  786. package/dist/spatial/usage-field/measure.d.ts.map +1 -0
  787. package/dist/spatial/usage-field/measure.js +458 -0
  788. package/dist/spatial/usage-field/obstacles.d.ts +63 -0
  789. package/dist/spatial/usage-field/obstacles.d.ts.map +1 -0
  790. package/dist/spatial/usage-field/obstacles.js +215 -0
  791. package/dist/spatial/usage-field/openings.d.ts +12 -0
  792. package/dist/spatial/usage-field/openings.d.ts.map +1 -0
  793. package/dist/spatial/usage-field/openings.js +162 -0
  794. package/dist/spatial/usage-field/path.d.ts +48 -0
  795. package/dist/spatial/usage-field/path.d.ts.map +1 -0
  796. package/dist/spatial/usage-field/path.js +354 -0
  797. package/dist/spatial/usage-field/pieces.d.ts +27 -0
  798. package/dist/spatial/usage-field/pieces.d.ts.map +1 -0
  799. package/dist/spatial/usage-field/pieces.js +89 -0
  800. package/dist/spatial/usage-field/shapes.d.ts +18 -0
  801. package/dist/spatial/usage-field/shapes.d.ts.map +1 -0
  802. package/dist/spatial/usage-field/shapes.js +92 -0
  803. package/dist/spatial/usage-field/stairs.d.ts +23 -0
  804. package/dist/spatial/usage-field/stairs.d.ts.map +1 -0
  805. package/dist/spatial/usage-field/stairs.js +163 -0
  806. package/dist/spatial/usage-field/support.d.ts +24 -0
  807. package/dist/spatial/usage-field/support.d.ts.map +1 -0
  808. package/dist/spatial/usage-field/support.js +46 -0
  809. package/dist/spatial/usage-field/swings.d.ts +846 -0
  810. package/dist/spatial/usage-field/swings.d.ts.map +1 -0
  811. package/dist/spatial/usage-field/swings.js +427 -0
  812. package/dist/spatial/usage-field/types.d.ts +65 -0
  813. package/dist/spatial/usage-field/types.d.ts.map +1 -0
  814. package/dist/spatial/usage-field/types.js +1 -0
  815. package/dist/spatial/usage-field/walls.d.ts +1057 -0
  816. package/dist/spatial/usage-field/walls.d.ts.map +1 -0
  817. package/dist/spatial/usage-field/walls.js +166 -0
  818. package/dist/spatial/usage-field/way-in.d.ts +26 -0
  819. package/dist/spatial/usage-field/way-in.d.ts.map +1 -0
  820. package/dist/spatial/usage-field/way-in.js +113 -0
  821. package/dist/store/actions/node-actions.d.ts +2124 -1322
  822. package/dist/store/actions/node-actions.d.ts.map +1 -1
  823. package/dist/store/actions/node-actions.js +42 -16
  824. package/dist/store/derived-node-guard.d.ts +10 -2
  825. package/dist/store/derived-node-guard.d.ts.map +1 -1
  826. package/dist/store/derived-node-guard.js +31 -11
  827. package/dist/store/document-settling.d.ts +9 -0
  828. package/dist/store/document-settling.d.ts.map +1 -0
  829. package/dist/store/document-settling.js +22 -0
  830. package/dist/store/history-control.d.ts +19 -10
  831. package/dist/store/history-control.d.ts.map +1 -1
  832. package/dist/store/history-control.js +176 -127
  833. package/dist/store/history-drafts.d.ts.map +1 -1
  834. package/dist/store/history-drafts.js +21 -17
  835. package/dist/store/live-previews.d.ts +9 -0
  836. package/dist/store/live-previews.d.ts.map +1 -0
  837. package/dist/store/live-previews.js +19 -0
  838. package/dist/store/scene-annotations.d.ts +6751 -5151
  839. package/dist/store/scene-annotations.d.ts.map +1 -1
  840. package/dist/store/scene-environment.d.ts +33 -0
  841. package/dist/store/scene-environment.d.ts.map +1 -0
  842. package/dist/store/scene-environment.js +54 -0
  843. package/dist/store/scene-hydration.d.ts.map +1 -1
  844. package/dist/store/scene-hydration.js +41 -30
  845. package/dist/store/use-interactive.d.ts +9 -3
  846. package/dist/store/use-interactive.d.ts.map +1 -1
  847. package/dist/store/use-interactive.js +43 -11
  848. package/dist/store/use-live-node-overrides.d.ts.map +1 -1
  849. package/dist/store/use-live-node-overrides.js +3 -0
  850. package/dist/store/use-scene.d.ts +25 -0
  851. package/dist/store/use-scene.d.ts.map +1 -1
  852. package/dist/store/use-scene.js +408 -336
  853. package/dist/systems/document-reconcile.d.ts +40 -0
  854. package/dist/systems/document-reconcile.d.ts.map +1 -0
  855. package/dist/systems/document-reconcile.js +159 -0
  856. package/dist/systems/elevator/elevator-opening-system.d.ts.map +1 -1
  857. package/dist/systems/elevator/elevator-opening-system.js +9 -24
  858. package/dist/systems/fence/guard-layout.d.ts +69 -0
  859. package/dist/systems/fence/guard-layout.d.ts.map +1 -0
  860. package/dist/systems/fence/guard-layout.js +194 -0
  861. package/dist/systems/owned-floor-openings.d.ts +13 -1
  862. package/dist/systems/owned-floor-openings.d.ts.map +1 -1
  863. package/dist/systems/owned-floor-openings.js +58 -2
  864. package/dist/systems/reconcile-owned-floor-openings.d.ts +3 -1
  865. package/dist/systems/reconcile-owned-floor-openings.d.ts.map +1 -1
  866. package/dist/systems/reconcile-owned-floor-openings.js +4 -4
  867. package/dist/systems/roof/roof-elevation-system.d.ts.map +1 -1
  868. package/dist/systems/roof/roof-elevation-system.js +8 -26
  869. package/dist/systems/roof/roof-elevation.d.ts +16 -1
  870. package/dist/systems/roof/roof-elevation.d.ts.map +1 -1
  871. package/dist/systems/roof/roof-elevation.js +85 -4
  872. package/dist/systems/roof/roof-footprint.d.ts +42 -1
  873. package/dist/systems/roof/roof-footprint.d.ts.map +1 -1
  874. package/dist/systems/roof/roof-footprint.js +160 -4
  875. package/dist/systems/slab/__fixtures__/floor-step.d.ts +3163 -1934
  876. package/dist/systems/slab/__fixtures__/floor-step.d.ts.map +1 -1
  877. package/dist/systems/slab/__fixtures__/raised-room.d.ts +2495 -1249
  878. package/dist/systems/slab/__fixtures__/raised-room.d.ts.map +1 -1
  879. package/dist/systems/stair/stair-clearance.d.ts +7 -0
  880. package/dist/systems/stair/stair-clearance.d.ts.map +1 -1
  881. package/dist/systems/stair/stair-clearance.js +31 -11
  882. package/dist/systems/stair/stair-construction.d.ts +8 -3
  883. package/dist/systems/stair/stair-construction.d.ts.map +1 -1
  884. package/dist/systems/stair/stair-construction.js +55 -4
  885. package/dist/systems/stair/stair-opening-preview.d.ts +889 -89
  886. package/dist/systems/stair/stair-opening-preview.d.ts.map +1 -1
  887. package/dist/systems/stair/stair-opening-system.d.ts.map +1 -1
  888. package/dist/systems/stair/stair-opening-system.js +18 -34
  889. package/dist/systems/stair/stair-presets.d.ts +36 -0
  890. package/dist/systems/stair/stair-presets.d.ts.map +1 -1
  891. package/dist/systems/stair/stair-rise-query.d.ts.map +1 -1
  892. package/dist/systems/stair/stair-rise-query.js +3 -2
  893. package/dist/systems/stair/stair-rise.d.ts.map +1 -1
  894. package/dist/systems/stair/stair-rise.js +6 -0
  895. package/dist/systems/stair/stair-sizing.d.ts +42 -11
  896. package/dist/systems/stair/stair-sizing.d.ts.map +1 -1
  897. package/dist/systems/stair/stair-sizing.js +10 -1
  898. package/dist/systems/stair/stair-structure.d.ts +277 -0
  899. package/dist/systems/stair/stair-structure.d.ts.map +1 -0
  900. package/dist/systems/stair/stair-structure.js +496 -0
  901. package/dist/systems/wall/wall-assembly.d.ts +84 -6
  902. package/dist/systems/wall/wall-assembly.d.ts.map +1 -1
  903. package/dist/systems/wall/wall-assembly.js +204 -5
  904. package/dist/systems/wall/wall-finish.d.ts +38 -2
  905. package/dist/systems/wall/wall-finish.d.ts.map +1 -1
  906. package/dist/systems/wall/wall-finish.js +70 -2
  907. package/dist/systems/wall/wall-footprint.js +2 -2
  908. package/dist/systems/wall/wall-merge.d.ts.map +1 -1
  909. package/dist/systems/wall/wall-merge.js +28 -7
  910. package/dist/systems/wall/wall-mitering.d.ts +1 -0
  911. package/dist/systems/wall/wall-mitering.d.ts.map +1 -1
  912. package/dist/systems/wall/wall-mitering.js +152 -52
  913. package/dist/systems/wall/wall-move.d.ts +23 -6
  914. package/dist/systems/wall/wall-move.d.ts.map +1 -1
  915. package/dist/systems/wall/wall-move.js +65 -0
  916. package/dist/systems/wall/wall-top.d.ts +2 -2
  917. package/dist/systems/wall/wall-top.d.ts.map +1 -1
  918. package/dist/systems/wall/wall-top.js +6 -1
  919. package/dist/systems/wall/wall-topology.d.ts +32 -1
  920. package/dist/systems/wall/wall-topology.d.ts.map +1 -1
  921. package/dist/systems/wall/wall-topology.js +118 -10
  922. package/dist/systems/wall/wall-trim-profiles.d.ts +12 -0
  923. package/dist/systems/wall/wall-trim-profiles.d.ts.map +1 -0
  924. package/dist/systems/wall/wall-trim-profiles.js +191 -0
  925. package/dist/utils/ensure-scene-openings.d.ts +6523 -4923
  926. package/dist/utils/ensure-scene-openings.d.ts.map +1 -1
  927. package/dist/utils/floor-piece-adoption.d.ts +5 -0
  928. package/dist/utils/floor-piece-adoption.d.ts.map +1 -1
  929. package/dist/utils/floor-plate-migration.d.ts +1930 -1130
  930. package/dist/utils/floor-plate-migration.d.ts.map +1 -1
  931. package/dist/utils/owned-floor-opening-migration.d.ts +888 -88
  932. package/dist/utils/owned-floor-opening-migration.d.ts.map +1 -1
  933. package/dist/utils/reconcile-structure-on-load.d.ts +1930 -1130
  934. package/dist/utils/reconcile-structure-on-load.d.ts.map +1 -1
  935. package/dist/utils/structure-id.d.ts.map +1 -1
  936. package/dist/utils/structure-id.js +4 -0
  937. package/package.json +22 -5
  938. package/dist/lib/generic-foundation.d.ts +0 -40
  939. package/dist/lib/generic-foundation.d.ts.map +0 -1
  940. package/dist/lib/generic-foundation.js +0 -200
@@ -15,13 +15,45 @@ import { boundsOf, boxCorners, frame, rotateVector, transformPoint, } from '../p
15
15
  import { getScaledDimensions } from '../schema/index.js';
16
16
  import { resolveCeilingHeight } from '../services/level-height.js';
17
17
  import { CEILING_DRAW_OFFSET } from '../services/storey.js';
18
- import { aabbsOverlap, findBlockedDoors, itemNodePlanAabb, itemPlanAabb, resolveNodeLevelId, } from './door-clearance.js';
19
- import { furnitureKind, isFloorUnderlay } from './furniture-kind.js';
20
- import { itemHosts, itemLevelHeightRange, itemPlanAabbInLevel } from './item-space.js';
21
- import { pointInPolygon } from './plan-geometry.js';
22
- export { aabbsOverlap, collectDoorKeepouts, findBlockedDoors, itemNodePlanAabb, itemPlanAabb, resolveNodeLevelId, } from './door-clearance.js';
18
+ import { aabbsOverlap, findBlockedDoors as findBlockedDoorsByBox, itemNodePlanAabb, itemNodePlanCorners, itemPlanAabb, resolveNodeLevelId, } from './door-clearance.js';
19
+ import { designedTogether, isFloorUnderlay, isWallDressing, wallBoundWord } from './furniture-kind.js';
20
+ import { manifestSolids, relateSolids } from './item-solids.js';
21
+ import { itemLevelHeightRange, itemLevelPose, itemPlanAabbInLevel } from './item-space.js';
22
+ import { axisOverlap, clearingMoves, describeMoves, metres, roundBox, roundMm, } from './plan-clearance.js';
23
+ import { distanceToSegment, pointInPolygon } from './plan-geometry.js';
24
+ export { aabbsOverlap, collectDoorKeepouts, itemNodePlanAabb, itemPlanAabb, resolveNodeLevelId, } from './door-clearance.js';
25
+ import { queryNodes } from './scene-queries.js';
23
26
  /** Minimum free space (m) required between item footprints. */
24
27
  export const DEFAULT_ITEM_GAP = 0.08;
28
+ function boxReading(a, b, gap) {
29
+ const shared = axisOverlap(a, b);
30
+ const depth = Math.min(shared.x, shared.z);
31
+ const clearBy = clearingMoves(a, b, gap);
32
+ return depth > 0
33
+ ? {
34
+ overlapM: roundMm(depth),
35
+ overlapAlongM: { x: roundMm(shared.x), z: roundMm(shared.z) },
36
+ clearBy,
37
+ }
38
+ : { gapM: roundMm(-depth), clearBy };
39
+ }
40
+ function collisionMessage(violation, gap, [a, b], reading) {
41
+ const [first, second] = [a.name ?? a.id, b.name ?? b.id];
42
+ const pair = `${first} (${a.id}) and ${second} (${b.id})`;
43
+ const how = 'overlapAreaM2' in reading
44
+ ? `share ${metres(reading.overlapAreaM2)} m²`
45
+ : 'overlapAlongM' in reading
46
+ ? `by ${metres(reading.overlapAlongM.x)} m along x and ${metres(reading.overlapAlongM.z)} m along z`
47
+ : `are ${metres(reading.gapM)} m apart`;
48
+ const lead = violation === 'overlap'
49
+ ? `Items overlap: ${pair} ${how}`
50
+ : `Items are closer than ${gap} m: ${pair} ${how}`;
51
+ const shapes = 'clearBy' in reading ? 'footprint boxes' : 'real shapes';
52
+ const moves = 'clearBy' in reading
53
+ ? ` ${first} is ${gap} m clear of ${second}, the gap the check keeps, after ${describeMoves(reading.clearBy)}.`
54
+ : '';
55
+ return `${lead} (${shapes}).${moves}`;
56
+ }
25
57
  export function nodeItemAabb(node) {
26
58
  return itemNodePlanAabb(node);
27
59
  }
@@ -92,7 +124,7 @@ function itemFloorLift(node, nodes) {
92
124
  floorConstructionLift(nodes, node);
93
125
  if (node.supportSlabId === 'ground')
94
126
  return ground();
95
- const list = Object.values(nodes);
127
+ const list = queryNodes(nodes, { type: ['slab', 'wall'] });
96
128
  const slabs = list
97
129
  .filter((other) => other.type === 'slab' && other.parentId === levelId)
98
130
  .map((slab) => liftedManualSlab(nodes, slab));
@@ -161,6 +193,26 @@ export function scriptItemBoundsInLevel(node, nodes) {
161
193
  // Malformed or unsupported support geometry is not evidence of separation.
162
194
  }
163
195
  }
196
+ /**
197
+ * Where a script item's own model space stands in its level: maps a point of its manifest (its
198
+ * bounds, parts, surfaces) to the level's frame, through the corrective asset pose and the item's
199
+ * node pose the renderer applies. Undefined where the bounds cannot be resolved.
200
+ */
201
+ export function scriptItemToLevel(node, nodes) {
202
+ const resolved = scriptItemBoundsInLevel(node, nodes);
203
+ const origin = node.source?.manifest.bounds.min;
204
+ const corner = resolved?.corners[0];
205
+ if (!(origin && corner))
206
+ return;
207
+ const corrected = (point) => {
208
+ const asset = rotateVector(point.map((value, axis) => value * (node.asset.scale?.[axis] ?? 1)), node.asset.rotation);
209
+ return rotateVector(asset.map((value, axis) => (value + (node.asset.offset[axis] ?? 0)) * (node.scale[axis] ?? 1)), node.rotation);
210
+ };
211
+ // The elected attachment translation comes from the shared bounds resolver, not a guessed floor Y.
212
+ const first = corrected(origin);
213
+ const shift = corner.map((value, axis) => value - (first[axis] ?? 0));
214
+ return (point) => corrected(point).map((value, axis) => value + shift[axis]);
215
+ }
164
216
  function itemVerticalInterval(node, nodes) {
165
217
  // Keep the existing plan-layout evidence limited to yaw-only model poses.
166
218
  if (node?.type !== 'item' ||
@@ -175,6 +227,114 @@ function itemVerticalInterval(node, nodes) {
175
227
  max: resolved.bounds.max[1],
176
228
  };
177
229
  }
230
+ /**
231
+ * An item's real shape in its level's frame (see `item-solids`), or null where there is none to read:
232
+ * a script with no faces, a catalogue model, a tilted or animated one. A thing hosted by another item
233
+ * stands at its host chain's pose, on the floor construction under the item at the chain's root.
234
+ */
235
+ export function itemSolidsInLevel(node, nodes) {
236
+ const manifest = node.source?.manifest;
237
+ if (!manifest ||
238
+ manifest.animations?.length ||
239
+ !planarRotation(node.rotation) ||
240
+ !planarRotation(node.asset.rotation))
241
+ return null;
242
+ const direct = scriptItemToLevel(node, nodes);
243
+ const toLevel = direct ?? hostedToLevel(node, nodes);
244
+ if (!toLevel)
245
+ return null;
246
+ try {
247
+ const solids = manifestSolids(manifest, toLevel);
248
+ return solids?.every((solid) => Number.isFinite(solid.y0) && Number.isFinite(solid.y1))
249
+ ? solids
250
+ : null;
251
+ }
252
+ catch {
253
+ // A malformed outline is not evidence of separation: the box reads instead.
254
+ return null;
255
+ }
256
+ }
257
+ /** The map of a manifest point to the level for an item hosted by other items, or undefined. */
258
+ function hostedToLevel(node, nodes) {
259
+ // biome-ignore lint/plugin: an item hosted by other items resolves each parent through the whole scene
260
+ const byId = new Map(Object.entries(nodes));
261
+ const pose = itemLevelPose(node, byId);
262
+ if (!pose ||
263
+ !node.scale.every((value) => value > 0) ||
264
+ !(node.asset.scale ?? [1, 1, 1]).every((value) => value > 0))
265
+ return;
266
+ let root = node;
267
+ for (let depth = 0; depth < 16; depth++) {
268
+ const parent = root.parentId ? nodes[root.parentId] : undefined;
269
+ if (parent?.type !== 'item')
270
+ break;
271
+ root = parent;
272
+ }
273
+ const rootParent = root.parentId ? nodes[root.parentId] : undefined;
274
+ if (rootParent?.type !== 'level')
275
+ return;
276
+ const lift = itemFloorLift(root, nodes);
277
+ if (!Number.isFinite(lift))
278
+ return;
279
+ const assetScale = node.asset.scale ?? [1, 1, 1];
280
+ const turn = [node.rotation[0], pose.yawDeg, node.rotation[2]];
281
+ return (point) => {
282
+ const asset = rotateVector(point.map((value, axis) => value * assetScale[axis]), node.asset.rotation);
283
+ const placed = rotateVector(asset.map((value, axis) => (value + node.asset.offset[axis]) * node.scale[axis]), turn);
284
+ return [
285
+ placed[0] + pose.position[0],
286
+ placed[1] + pose.position[1] + lift,
287
+ placed[2] + pose.position[2],
288
+ ];
289
+ };
290
+ }
291
+ /**
292
+ * Doors blocked by furniture. An item is its box, as tall as its heights say (a pendant over the door
293
+ * is above its leaf); wall panelling alone is its real strips (see `findItemItemCollisions`).
294
+ */
295
+ export function findBlockedDoors(args) {
296
+ const list = [...args.nodes];
297
+ const nodes = Object.fromEntries(list.map((node) => [node.id, node]));
298
+ const byId = new Map(list.map((node) => [node.id, node]));
299
+ const finite = list.every((node) => node.type === 'item' || finiteNumbers(node));
300
+ return findBlockedDoorsByBox({
301
+ ...args,
302
+ nodes: list,
303
+ solidsOf: (node) => (finite && isWallDressing(node) ? itemSolidsInLevel(node, nodes) : null),
304
+ heightsOf: (node) => itemHeightsInLevel(node, nodes, byId, finite) ?? null,
305
+ });
306
+ }
307
+ /** Plan overlap, in square metres, from which two real shapes are overlapping: a touching edge or a boolean's sliver is not. */
308
+ export const MIN_OVERLAP_AREA = 0.001;
309
+ /**
310
+ * An item's bottom and top in the level's frame, as the renderer stands it: the model's own bounds
311
+ * through the floor construction under it (measured) or, where it has none, its pose and its height
312
+ * above its host, lifted by the floor construction under the item at the root of its host chain. A
313
+ * thing hosted by a ceiling or a wall, or one whose heights are unknown, has none.
314
+ */
315
+ export function itemHeightsInLevel(node, nodes, byId, finiteContext = true) {
316
+ const measured = finiteContext ? itemVerticalInterval(node, nodes) : undefined;
317
+ if (measured)
318
+ return measured;
319
+ const range = itemLevelHeightRange(node, byId);
320
+ let root = node;
321
+ for (let depth = 0; depth < 16; depth++) {
322
+ const parent = root.parentId ? nodes[root.parentId] : undefined;
323
+ if (parent?.type !== 'item')
324
+ break;
325
+ root = parent;
326
+ }
327
+ const rootParent = root.parentId ? nodes[root.parentId] : undefined;
328
+ const levelId = resolveNodeLevelId(node.id, byId);
329
+ if (!(range && levelId && finiteContext && rootParent?.type === 'level'))
330
+ return undefined;
331
+ const lift = itemFloorLift(root, nodes);
332
+ return Number.isFinite(lift)
333
+ ? { levelId, min: range.min + lift, max: range.max + lift }
334
+ : undefined;
335
+ }
336
+ /** How far an item may sink into what it stands on and still be resting on it, in metres. */
337
+ export const STACK_TOLERANCE = 0.02;
178
338
  export function findItemItemCollisions(args) {
179
339
  const gap = args.gap ?? DEFAULT_ITEM_GAP;
180
340
  const list = [...args.nodes];
@@ -183,28 +343,37 @@ export function findItemItemCollisions(args) {
183
343
  // Drawing fallbacks on invalid support heights cannot prove collision separation.
184
344
  const finiteContext = list.every((node) => node.type === 'item' || finiteNumbers(node));
185
345
  const byId = new Map(list.map((node) => [node.id, node]));
186
- // The measured interval when the model's bounds allow it, else the node's own height above its
187
- // floor. A measured contact stays a collision (roundoff); a lamp standing on a table top by its
188
- // own height is stacked.
189
- const intervals = new Map(footprints.map(({ id }) => {
346
+ const heights = new Map();
347
+ for (const { id } of footprints)
348
+ heights.set(id, itemHeightsInLevel(nodes[id], nodes, byId, finiteContext));
349
+ // A box is as tall as its heights say; a real shape is read for wall panelling only.
350
+ const solids = new Map();
351
+ const solidsOf = (id) => {
352
+ if (!solids.has(id))
353
+ solids.set(id, finiteContext ? itemSolidsInLevel(nodes[id], nodes) : null);
354
+ return solids.get(id) ?? null;
355
+ };
356
+ const boxSolid = (id) => {
190
357
  const node = nodes[id];
191
- const measured = finiteContext ? itemVerticalInterval(node, nodes) : undefined;
192
- if (measured)
193
- return [id, { ...measured, measured: true }];
194
- const range = itemLevelHeightRange(node, byId);
358
+ const pose = itemLevelPose(node, byId);
359
+ if (!pose)
360
+ return null;
361
+ const corners = itemNodePlanCorners({
362
+ ...node,
363
+ position: pose.position,
364
+ rotation: [node.rotation[0], pose.yawDeg, node.rotation[2]],
365
+ });
366
+ if (!corners.every((corner) => corner.every(Number.isFinite)))
367
+ return null;
368
+ const interval = heights.get(id);
195
369
  return [
196
- id,
197
- range
198
- ? {
199
- levelId: resolveNodeLevelId(id, byId) ?? '',
200
- min: range.min,
201
- max: range.max,
202
- measured: false,
203
- }
204
- : undefined,
370
+ {
371
+ polygons: [{ outer: corners.map(([x, z]) => [x, z]), holes: [] }],
372
+ y0: interval?.min ?? Number.NEGATIVE_INFINITY,
373
+ y1: interval?.max ?? Number.POSITIVE_INFINITY,
374
+ },
205
375
  ];
206
- }));
207
- const hosts = new Map(footprints.map(({ id }) => [id, itemHosts(nodes[id], byId)]));
376
+ };
208
377
  const collisions = [];
209
378
  for (let i = 0; i < footprints.length; i++) {
210
379
  for (let j = i + 1; j < footprints.length; j++) {
@@ -212,29 +381,47 @@ export function findItemItemCollisions(args) {
212
381
  const b = footprints[j];
213
382
  if (a.levelId && b.levelId && a.levelId !== b.levelId)
214
383
  continue;
215
- // A thing resting on top of its host is stacked by design: its bottom at the host's top. A
216
- // child sunk into its host, or one whose height is unknown, is still a collision.
217
- const [child, host] = hosts.get(a.id)?.has(b.id)
218
- ? [a, b]
219
- : hosts.get(b.id)?.has(a.id)
220
- ? [b, a]
221
- : [];
222
- if (child && host) {
223
- const cY = intervals.get(child.id);
224
- const hY = intervals.get(host.id);
225
- if (cY && hY && cY.min >= hY.max - 0.02)
226
- continue;
227
- }
228
384
  if (!aabbsOverlap(a.aabb, b.aabb, gap))
229
385
  continue;
230
- const aY = intervals.get(a.id);
231
- const bY = intervals.get(b.id);
232
- // Contact and sub-micrometre separation remain conservative against roundoff.
233
- if (aY && bY && aY.levelId === bY.levelId) {
234
- const touch = aY.measured && bY.measured ? 1e-6 : -1e-6;
235
- if (bY.min - aY.max > touch || aY.min - bY.max > touch)
386
+ const aY = heights.get(a.id);
387
+ const bY = heights.get(b.id);
388
+ let violation;
389
+ let reading;
390
+ if (isWallDressing(nodes[a.id]) || isWallDressing(nodes[b.id])) {
391
+ // Wall panelling is thin strips along the walls, and its box is the room's: it is read by its
392
+ // strips, a piece beside it by its footprint. Nothing else is: a script's horizontal faces leave
393
+ // out its rails, backs and foliage, so the box stays the shape of the rest.
394
+ const left = solidsOf(a.id) ?? boxSolid(a.id);
395
+ const right = solidsOf(b.id) ?? boxSolid(b.id);
396
+ if (!(left && right))
397
+ continue;
398
+ const relation = relateSolids(left, right, {
399
+ stack: STACK_TOLERANCE,
400
+ minArea: MIN_OVERLAP_AREA,
401
+ });
402
+ if (relation.overlapArea > 0) {
403
+ violation = 'overlap';
404
+ reading = { overlapAreaM2: roundMm(relation.overlapArea) };
405
+ }
406
+ else if (relation.gap < gap) {
407
+ violation = 'clearance';
408
+ reading = { gapM: roundMm(relation.gap) };
409
+ }
410
+ else
236
411
  continue;
237
412
  }
413
+ else {
414
+ // Two boxes. One standing on the other (a lamp on a table, a vase on a console) is stacked,
415
+ // whether it is the other's child or a sibling in the scene: its bottom is at or above the
416
+ // other's top, to within what a model sinks into it. Unknown heights waive nothing.
417
+ if (aY &&
418
+ bY &&
419
+ aY.levelId === bY.levelId &&
420
+ (aY.min >= bY.max - STACK_TOLERANCE - 1e-9 || bY.min >= aY.max - STACK_TOLERANCE - 1e-9))
421
+ continue;
422
+ violation = aabbsOverlap(a.aabb, b.aabb, 0) ? 'overlap' : 'clearance';
423
+ reading = boxReading(a.aabb, b.aabb, gap);
424
+ }
238
425
  collisions.push({
239
426
  aId: a.id,
240
427
  bId: b.id,
@@ -242,11 +429,11 @@ export function findItemItemCollisions(args) {
242
429
  bName: b.name,
243
430
  levelId: a.levelId ?? b.levelId,
244
431
  kind: 'item-aabb',
245
- violation: aabbsOverlap(a.aabb, b.aabb, 0) ? 'overlap' : 'clearance',
432
+ violation,
246
433
  minimumClearanceMeters: gap,
247
- message: aabbsOverlap(a.aabb, b.aabb, 0)
248
- ? `Items overlap: ${a.name ?? a.id} (${a.id}) and ${b.name ?? b.id} (${b.id})`
249
- : `Items are closer than ${gap} m: ${a.name ?? a.id} (${a.id}) and ${b.name ?? b.id} (${b.id})`,
434
+ footprints: [roundBox(a.aabb), roundBox(b.aabb)],
435
+ reading,
436
+ message: collisionMessage(violation, gap, [a, b], reading),
250
437
  });
251
438
  }
252
439
  }
@@ -387,15 +574,6 @@ export const MID_ROOM_DISTANCE_M = 0.4;
387
574
  const OUTLINE_CONTACT_M = 1e-3;
388
575
  const DEFAULT_WALL_THICKNESS_M = 0.1;
389
576
  const cross = (o, p, q) => (p[0] - o[0]) * (q[1] - o[1]) - (p[1] - o[1]) * (q[0] - o[0]);
390
- function distanceToSegment(point, a, b) {
391
- const dx = b[0] - a[0];
392
- const dz = b[1] - a[1];
393
- const length2 = dx * dx + dz * dz;
394
- const t = length2 === 0
395
- ? 0
396
- : Math.max(0, Math.min(1, ((point[0] - a[0]) * dx + (point[1] - a[1]) * dz) / length2));
397
- return Math.hypot(point[0] - (a[0] + t * dx), point[1] - (a[1] + t * dz));
398
- }
399
577
  /** The shortest distance from a footprint box to a wall's centre line (0 when the line passes through it). */
400
578
  function boxToSegment(box, a, b) {
401
579
  const corners = [
@@ -414,17 +592,20 @@ function boxToSegment(box, a, b) {
414
592
  }
415
593
  return nearest;
416
594
  }
417
- /** The walls of a level (resolved through `byId`), as the mid-room check reads them. */
595
+ /**
596
+ * The walls of a level (resolved through `byId`), as the mid-room check reads them: its wall nodes.
597
+ */
418
598
  export function wallFacesOn(nodes, levelId, byId = new Map([...nodes].map((node) => [node.id, node]))) {
419
599
  const walls = [];
420
600
  for (const node of nodes) {
421
- if (node.type !== 'wall' || resolveNodeLevelId(node.id, byId) !== levelId)
601
+ if (resolveNodeLevelId(node.id, byId) !== levelId)
422
602
  continue;
423
- walls.push({
424
- a: [node.start[0], node.start[1]],
425
- b: [node.end[0], node.end[1]],
426
- halfThickness: (node.thickness ?? DEFAULT_WALL_THICKNESS_M) / 2,
427
- });
603
+ if (node.type === 'wall')
604
+ walls.push({
605
+ a: [node.start[0], node.start[1]],
606
+ b: [node.end[0], node.end[1]],
607
+ halfThickness: (node.thickness ?? DEFAULT_WALL_THICKNESS_M) / 2,
608
+ });
428
609
  }
429
610
  return walls;
430
611
  }
@@ -434,8 +615,10 @@ export function gapToWalls(box, walls) {
434
615
  }
435
616
  /**
436
617
  * Wall-bound pieces (a fridge, a counter, a bed, a sofa) that stand in a room but away from every
437
- * wall: further than {@link MID_ROOM_DISTANCE_M} from the face of each wall of their level. Pieces
438
- * outside every room, free-standing kinds, and levels with no walls are not judged.
618
+ * wall: further than {@link MID_ROOM_DISTANCE_M} from the face of each wall of their level. A roof
619
+ * on the level stands walls of its own (knee walls, gable ends) where no wall node does, so a loft
620
+ * bounded by its roof is measured to them. Pieces outside every room, free-standing kinds, and
621
+ * levels with neither walls nor a roof shell are not judged.
439
622
  */
440
623
  export function findItemsMidRoom(args) {
441
624
  const list = [...args.nodes];
@@ -450,7 +633,8 @@ export function findItemsMidRoom(args) {
450
633
  ...(args.levelId === undefined ? {} : { levelId: args.levelId }),
451
634
  })) {
452
635
  const node = byId.get(footprint.id);
453
- if (node?.type !== 'item' || furnitureKind(node.asset) !== 'wall')
636
+ const word = node?.type === 'item' ? wallBoundWord(node.asset) : null;
637
+ if (node?.type !== 'item' || !word)
454
638
  continue;
455
639
  const room = zones.find((zone) => pointInPolygon([node.position[0], node.position[2]], zone.polygon, true));
456
640
  if (!room)
@@ -460,13 +644,14 @@ export function findItemsMidRoom(args) {
460
644
  continue;
461
645
  found.push({
462
646
  id: node.id,
463
- message: `${footprint.name ?? node.asset.id} (${node.id}) stands in the middle of ${room.name || room.id}, ${gap.toFixed(1)} m from the nearest wall: a ${node.asset.id} belongs against a wall (place_in_room puts it there).`,
647
+ message: `${footprint.name ?? node.asset.id} (${node.id}) stands in the middle of ${room.name || room.id}, ${gap.toFixed(1)} m from the nearest wall: a ${word} belongs against a wall (place_in_room puts it there).`,
464
648
  });
465
649
  }
466
650
  return found;
467
651
  }
468
652
  /**
469
- * Collect layout issues, scoped per level so stacked floors do not false-positive.
653
+ * Collect layout issues, scoped per level so stacked floors do not false-positive. A blocked door and
654
+ * a pair of items carry the numbers of the finding: what stands where, how deep, and the way clear.
470
655
  */
471
656
  export function layoutIssuesFromScene(nodes) {
472
657
  const list = [...nodes];
@@ -484,17 +669,39 @@ export function layoutIssuesFromScene(nodes) {
484
669
  }
485
670
  const issues = new Map();
486
671
  const levels = levelIds.size > 0 ? [...levelIds] : [undefined];
672
+ const itemById = new Map(list.map((n) => [n.id, n]));
487
673
  for (const levelId of levels) {
488
674
  for (const b of findBlockedDoors({ nodes: list, levelId })) {
489
- issues.set(b.message, 'door_blocked');
675
+ issues.set(b.message, {
676
+ type: 'door_blocked',
677
+ message: b.message,
678
+ nodeIds: [b.doorId, b.itemId, b.wallId],
679
+ obstacle: { nodeId: b.itemId, name: b.itemName, footprint: b.footprint, side: b.side },
680
+ clearZone: b.clearZone,
681
+ ...b.reading,
682
+ });
490
683
  }
491
684
  for (const c of findItemItemCollisions({ nodes: list, levelId })) {
492
- issues.set(c.message, c.violation === 'overlap' ? 'item_overlap' : 'item_too_close');
685
+ // Close is the design for a nightstand beside its bed, a chair at its table: not a finding.
686
+ const [a, b] = [itemById.get(c.aId), itemById.get(c.bId)];
687
+ if (c.violation === 'clearance' &&
688
+ a?.type === 'item' &&
689
+ b?.type === 'item' &&
690
+ designedTogether(a, b))
691
+ continue;
692
+ issues.set(c.message, {
693
+ type: c.violation === 'overlap' ? 'item_overlap' : 'item_too_close',
694
+ message: c.message,
695
+ nodeIds: [c.aId, c.bId],
696
+ footprints: c.footprints,
697
+ minimumClearanceMeters: c.minimumClearanceMeters,
698
+ ...c.reading,
699
+ });
493
700
  }
494
701
  for (const m of findItemsMidRoom({ nodes: list, levelId })) {
495
- issues.set(m.message, 'item_mid_room');
702
+ issues.set(m.message, { type: 'item_mid_room', message: m.message, nodeIds: [m.id] });
496
703
  }
497
704
  }
498
705
  // Deduplicate (node may appear under multiple walks)
499
- return [...issues].map(([message, type]) => ({ type, message }));
706
+ return [...issues.values()];
500
707
  }
@@ -1 +1 @@
1
- {"version":3,"file":"level-height-fill.d.ts","sourceRoot":"","sources":["../../src/agent-operations/level-height-fill.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAa,MAAM,WAAW,CAAA;AAEnD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAIxC;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,SAAS,EAAE,EAChB,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACvC,MAAM,EAAE,CA4CV"}
1
+ {"version":3,"file":"level-height-fill.d.ts","sourceRoot":"","sources":["../../src/agent-operations/level-height-fill.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAa,MAAM,WAAW,CAAA;AAEnD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAIxC;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,SAAS,EAAE,EAChB,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACvC,MAAM,EAAE,CAqDV"}
@@ -1,3 +1,4 @@
1
+ import { draftOf } from '../runtime/reader.js';
1
2
  import { deriveLegacyLevelHeight } from '../services/level-height.js';
2
3
  const round = (value) => Math.round(value * 100) / 100;
3
4
  /**
@@ -9,7 +10,12 @@ const round = (value) => Math.round(value * 100) / 100;
9
10
  * per level filled, for the write's answer.
10
11
  */
11
12
  export function fillLevelHeights(ops, scene) {
12
- const after = { ...scene };
13
+ // Only a level written without a height reads the scene as the write leaves it.
14
+ if (!ops.some((op) => op.op === 'create'
15
+ ? op.node.type === 'level' && op.node.height == null
16
+ : op.op === 'update' && 'height' in op.data && op.data.height == null))
17
+ return [];
18
+ const after = draftOf(scene);
13
19
  for (const op of ops) {
14
20
  // A create's own parentId wins over its node's, as the write applies it.
15
21
  if (op.op === 'create')
@@ -16,6 +16,11 @@ export declare function wallSummary(nodes: SceneNodes, wall: WallNode): {
16
16
  resolvedHeight: number;
17
17
  heightIsExplicit: boolean;
18
18
  thickness: number | undefined;
19
+ wallType: "curtain" | "railing" | "standard";
20
+ type: {
21
+ id: string;
22
+ label: string;
23
+ } | null;
19
24
  wallFaceChains: {
20
25
  a: import("../index.js").WallFaceChainFinish;
21
26
  b: import("../index.js").WallFaceChainFinish;
@@ -1 +1 @@
1
- {"version":3,"file":"level-reads.d.ts","sourceRoot":"","sources":["../../src/agent-operations/level-reads.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAA2C,QAAQ,EAAY,MAAM,WAAW,CAAA;AAM5F,OAAO,EAAE,KAAK,gBAAgB,EAAe,MAAM,gBAAgB,CAAA;AAEnE,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAQzD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,GAAG,MAAM,CAiB5E;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ;IAEzD,EAAE;IACF,IAAI;IACJ,KAAK;IACL,GAAG;IACH,MAAM;IACN,MAAM;IACN,cAAc;IACd,gBAAgB;IAChB,SAAS;IACT,cAAc;QACZ,CAAC;QACD,CAAC;;IAEH,QAAQ;;;;;;;EAOX;AA6GD,2BAA2B;AAC3B,eAAO,MAAM,eAAe,EAAE,cAAc,CAAC,gBAAgB,CAE3D,CAAA;AAEF,mBAAmB;AACnB,eAAO,MAAM,QAAQ,EAAE,cAAc,CAAC,gBAAgB,CAIrD,CAAA;AAED,mBAAmB;AACnB,eAAO,MAAM,QAAQ,EAAE,cAAc,CAAC,gBAAgB,CAIrD,CAAA"}
1
+ {"version":3,"file":"level-reads.d.ts","sourceRoot":"","sources":["../../src/agent-operations/level-reads.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAMV,QAAQ,EAET,MAAM,WAAW,CAAA;AAMlB,OAAO,EAAE,KAAK,gBAAgB,EAAe,MAAM,gBAAgB,CAAA;AAEnE,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AASzD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,GAAG,MAAM,CAiB5E;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ;IAKzD,EAAE;IACF,IAAI;IACJ,KAAK;IACL,GAAG;IACH,MAAM;IACN,MAAM;IACN,cAAc;IACd,gBAAgB;IAChB,SAAS;IACT,QAAQ;IACR,IAAI;;;;IACJ,cAAc;QACZ,CAAC;QACD,CAAC;;IAEH,QAAQ;;;;;;;EAOX;AAuID,2BAA2B;AAC3B,eAAO,MAAM,eAAe,EAAE,cAAc,CAAC,gBAAgB,CAE3D,CAAA;AAEF,mBAAmB;AACnB,eAAO,MAAM,QAAQ,EAAE,cAAc,CAAC,gBAAgB,CAUrD,CAAA;AAED,mBAAmB;AACnB,eAAO,MAAM,QAAQ,EAAE,cAAc,CAAC,gBAAgB,CAIrD,CAAA"}
@@ -1,4 +1,7 @@
1
+ import { deckBoardSettings } from '../lib/deck-boards.js';
1
2
  import { area } from '../lib/polygon-boolean.js';
3
+ import { porchFramingSettings } from '../lib/porch-framing.js';
4
+ import { porchPartOf } from '../lib/porch-framing-sync.js';
2
5
  import { roomFloorChoices } from '../lib/room-floor-choices.js';
3
6
  import { DEFAULT_LEVEL_HEIGHT } from '../services/level-height.js';
4
7
  import { getWallTop } from '../services/storey.js';
@@ -6,7 +9,8 @@ import { computeWallSlabSupport } from '../systems/slab/slab-support.js';
6
9
  import { resolveWallFaceChain } from '../systems/wall/wall-finish.js';
7
10
  import { resolveWallEffectiveHeight } from '../systems/wall/wall-top.js';
8
11
  import { targetLevel } from './level-target.js';
9
- import { contentCounts, levelIdOf, levelRole, nodesOnLevel } from './scene-queries.js';
12
+ import { contentCounts, levelIdOf, levelRole, nodesOnLevel, queryNodes } from './scene-queries.js';
13
+ import { wallTypeChoices } from './wall-type.js';
10
14
  const round2 = (value) => Math.round(value * 100) / 100;
11
15
  function ofType(content, type) {
12
16
  return content.filter((node) => node.type === type);
@@ -25,6 +29,9 @@ export function wallResolvedHeight(nodes, wall) {
25
29
  support.elevation);
26
30
  }
27
31
  export function wallSummary(nodes, wall) {
32
+ const type = wall.assembly?.presetId
33
+ ? wallTypeChoices(nodes).find((entry) => entry.id === wall.assembly?.presetId)
34
+ : undefined;
28
35
  return {
29
36
  id: wall.id,
30
37
  name: wall.name,
@@ -35,6 +42,8 @@ export function wallSummary(nodes, wall) {
35
42
  resolvedHeight: wallResolvedHeight(nodes, wall),
36
43
  heightIsExplicit: wall.height !== undefined,
37
44
  thickness: wall.thickness,
45
+ wallType: wall.wallType ?? 'standard',
46
+ type: type ? { id: type.id, label: type.label } : null,
38
47
  wallFaceChains: {
39
48
  a: resolveWallFaceChain(wall, 'a'),
40
49
  b: resolveWallFaceChain(wall, 'b'),
@@ -59,14 +68,35 @@ function zoneSize(zone) {
59
68
  },
60
69
  };
61
70
  }
71
+ /** The unit a zone belongs to; none is common area. */
72
+ const unitOf = (nodes, zoneId) => {
73
+ const unit = queryNodes(nodes, { type: 'unit' }).find((node) => node.members.includes(zoneId));
74
+ return { unitId: unit?.id ?? null, unit: unit?.name ?? null };
75
+ };
76
+ function zoneFraming(nodes, zone) {
77
+ const parts = queryNodes(nodes, { type: ['column', 'beam'], parentId: zone.parentId }).filter((node) => porchPartOf(node)?.porchOf === zone.id);
78
+ if (!zone.roomType && !zone.porchFraming && parts.length === 0)
79
+ return null;
80
+ return {
81
+ ...porchFramingSettings(zone),
82
+ auto: zone.porchFraming?.auto ?? (zone.roomType === 'porch' && zone.hasCeiling !== false),
83
+ postCount: parts.filter((node) => node.type === 'column').length,
84
+ beamCount: parts.filter((node) => node.type === 'beam').length,
85
+ };
86
+ }
62
87
  const zoneSummary = (nodes, zone) => ({
63
88
  id: zone.id,
64
89
  name: zone.name,
65
90
  color: zone.color,
66
91
  polygon: zone.polygon,
67
92
  holes: zone.holes ?? [],
93
+ roomType: zone.roomType ?? 'room',
94
+ floor: { drop: zone.floor?.drop ?? 0 },
95
+ porchFraming: zoneFraming(nodes, zone),
96
+ ...(zone.roomType === 'deck' || zone.decking ? { decking: deckBoardSettings(zone) } : {}),
68
97
  wallMaterial: zone.wallMaterial ?? null,
69
98
  wallOverrides: zone.wallOverrides ?? [],
99
+ ...unitOf(nodes, zone.id),
70
100
  ...zoneSize(zone),
71
101
  floor_choices: roomFloorChoices(nodes, zone.id),
72
102
  });
@@ -158,7 +188,13 @@ export const getLevelSummary = (nodes, input, context) => ({
158
188
  export const getWalls = (nodes, input, context) => {
159
189
  const level = targetLevel(nodes, input, context);
160
190
  const walls = ofType(nodesOnLevel(nodes, level.id), 'wall');
161
- return { result: { levelId: level.id, walls: walls.map((wall) => wallSummary(nodes, wall)) } };
191
+ return {
192
+ result: {
193
+ levelId: level.id,
194
+ walls: walls.map((wall) => wallSummary(nodes, wall)),
195
+ wallTypes: wallTypeChoices(nodes).map(({ id, label }) => ({ id, label })),
196
+ },
197
+ };
162
198
  };
163
199
  /** `get_zones`. */
164
200
  export const getZones = (nodes, input, context) => {
@@ -1 +1 @@
1
- {"version":3,"file":"list-levels.d.ts","sourceRoot":"","sources":["../../src/agent-operations/list-levels.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAE7C,mFAAmF;AACnF,eAAO,MAAM,UAAU,EAAE,cAiDxB,CAAA"}
1
+ {"version":3,"file":"list-levels.d.ts","sourceRoot":"","sources":["../../src/agent-operations/list-levels.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAE7C,mFAAmF;AACnF,eAAO,MAAM,UAAU,EAAE,cA+CxB,CAAA"}
@@ -1,11 +1,9 @@
1
1
  import { levelGradeStanding } from '../lib/grade-standing.js';
2
2
  import { groundSeat } from '../lib/ground-seat.js';
3
- import { levelRole, levelsOf } from './scene-queries.js';
3
+ import { levelRole, levelsOf, queryNodes } from './scene-queries.js';
4
4
  /** `list_levels`: every level of every building, in floor order, with its role. */
5
5
  export const listLevels = (nodes, _input, context) => {
6
- const groundLevels = Object.values(nodes)
7
- .filter((node) => node.type === 'building')
8
- .flatMap((building) => {
6
+ const groundLevels = queryNodes(nodes, { type: 'building' }).flatMap((building) => {
9
7
  const seat = groundSeat(nodes, building.id);
10
8
  return seat
11
9
  ? [
@@ -0,0 +1,12 @@
1
+ import { type MoveTarget } from './move-plan.js';
2
+ import type { AgentOperation } from './types.js';
3
+ type MoveNodeInput = MoveTarget & {
4
+ id: string;
5
+ };
6
+ /**
7
+ * `move_node`: the editor's move tool for one node — re-seated on its host by `planNodeMove`,
8
+ * so the node the agent leaves is the node the editor's drag would leave.
9
+ */
10
+ export declare const moveNode: AgentOperation<MoveNodeInput>;
11
+ export {};
12
+ //# sourceMappingURL=move-node.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"move-node.d.ts","sourceRoot":"","sources":["../../src/agent-operations/move-node.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,UAAU,EAAgB,MAAM,aAAa,CAAA;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAE7C,KAAK,aAAa,GAAG,UAAU,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CAAA;AAEhD;;;GAGG;AACH,eAAO,MAAM,QAAQ,EAAE,cAAc,CAAC,aAAa,CAmBlD,CAAA"}