@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
@@ -3,7 +3,9 @@ import { computeWallSlabSupport, } from '../systems/slab/slab-support.js';
3
3
  import { getWallCurveFrameAt, getWallCurveLength } from '../systems/wall/wall-curve.js';
4
4
  import { calculateLevelMiters, getWallPlanFootprint } from '../systems/wall/wall-footprint.js';
5
5
  import { getWallBodyCenterOffset } from '../systems/wall/wall-frame.js';
6
+ import { getDoorOpeningSize } from './door-opening.js';
6
7
  import { isFloorAnchoredOpening, openingAperture, wallOpeningBand, } from './floor-opening-footprints.js';
8
+ import { openingHostFacing } from './opening-casing.js';
7
9
  import { area, intersection, union } from './polygon-boolean.js';
8
10
  import { levelBaseElevationAt } from './terrain-support-query.js';
9
11
  const supportCache = new WeakMap();
@@ -47,8 +49,10 @@ export function openingDatumFromSupport(wall, opening, support) {
47
49
  if (!isFloorAnchoredOpening(opening))
48
50
  return support.elevation;
49
51
  const length = getWallCurveLength(wall);
50
- const from = Math.max(0, (opening.position[0] - opening.width / 2) / length);
51
- const to = Math.min(1, (opening.position[0] + opening.width / 2) / length);
52
+ const size = getDoorOpeningSize({ ...opening, height: opening.height ?? 0 });
53
+ const centerX = opening.position[0] - size.leafOffsetX * openingHostFacing(opening);
54
+ const from = Math.max(0, (centerX - size.width / 2) / length);
55
+ const to = Math.min(1, (centerX + size.width / 2) / length);
52
56
  const heights = [...support.faceDatum.a, ...support.faceDatum.b].flatMap((segment) => {
53
57
  const start = Math.max(from, segment.start), end = Math.min(to, segment.end);
54
58
  return end > start ? [supportSegmentAt(segment, start), supportSegmentAt(segment, end)] : [];
@@ -61,7 +65,31 @@ export function getOpeningFloorTarget(wall, opening, nodes) {
61
65
  }
62
66
  export function openingFitsAtDatum(wall, opening, datum, nodes, support = wallSupportForNodes(wall, nodes)) {
63
67
  const top = getWallTop(wall, wall.parentId, nodes, support.elevation);
64
- return datum + opening.position[1] + opening.height / 2 <= top + 1e-9;
68
+ return (datum +
69
+ opening.position[1] -
70
+ opening.height / 2 +
71
+ getDoorOpeningSize({ ...opening, width: 0 }).height <=
72
+ top + 1e-9);
73
+ }
74
+ /**
75
+ * The lowest the wall reaches under the opening's span, level-local, on its centreline or either
76
+ * face: where a face goes down beside a floor sunk under the one the wall stands on (a garage
77
+ * beside the house), lower than that floor.
78
+ */
79
+ export function wallBottomUnderOpening(wall, opening, support) {
80
+ const length = getWallCurveLength(wall);
81
+ if (length < 1e-9)
82
+ return support.baseElevation;
83
+ const size = getDoorOpeningSize({ ...opening, height: opening.height ?? 0 });
84
+ const centerX = opening.position[0] - size.leafOffsetX * openingHostFacing(opening);
85
+ const from = Math.max(0, (centerX - size.width / 2) / length);
86
+ const to = Math.min(1, (centerX + size.width / 2) / length);
87
+ const segments = [...support.baseSegments, ...support.faceBottom.a, ...support.faceBottom.b];
88
+ const heights = segments.flatMap((segment) => {
89
+ const start = Math.max(from, segment.start), end = Math.min(to, segment.end);
90
+ return end > start ? [supportSegmentAt(segment, start), supportSegmentAt(segment, end)] : [];
91
+ });
92
+ return heights.length ? Math.min(...heights) : support.baseElevation;
65
93
  }
66
94
  export function getOpeningFloorDatum(wall, opening, nodes, support = wallSupportForNodes(wall, nodes)) {
67
95
  const target = openingDatumFromSupport(wall, opening, support);
@@ -102,13 +130,17 @@ export function getOpeningWallCut(wall, opening, nodes, support = wallSupportFor
102
130
  covers.set(datum, cover);
103
131
  const covered = area(aperture) > 0 && area(intersection(aperture, cover)) >= area(aperture) - 0.00001;
104
132
  const length = getWallCurveLength(wall);
105
- const from = (opening.position[0] - opening.width / 2) / length, to = (opening.position[0] + opening.width / 2) / length;
133
+ const size = getDoorOpeningSize({ ...opening, height: opening.height ?? 0 });
134
+ const centerX = opening.position[0] - size.leafOffsetX * openingHostFacing(opening);
135
+ const from = (centerX - size.width / 2) / length, to = (centerX + size.width / 2) / length;
106
136
  const bottoms = [...support.faceBottom.a, ...support.faceBottom.b]
107
137
  .filter((s) => s.end > from && s.start < to)
108
138
  .map((s) => Math.min(s.elevation, s.endElevation ?? s.elevation));
139
+ // An opening may reach below its floor (a negative sill: a garage door down to the garage floor
140
+ // sunk beside the wall), never below the wall itself.
109
141
  const bottom = isFloorAnchoredOpening(opening) && covered
110
142
  ? Math.min(support.elevation, ...bottoms)
111
- : datum + opening.position[1] - opening.height / 2;
143
+ : Math.max(datum + opening.position[1] - opening.height / 2, Math.min(datum, wallBottomUnderOpening(wall, opening, support)));
112
144
  return {
113
145
  // The floor the doorway exposes: exactly the wall's own footprint.
114
146
  aperture,
@@ -116,7 +148,7 @@ export function getOpeningWallCut(wall, opening, nodes, support = wallSupportFor
116
148
  band: wallOpeningBand(wall, Math.max(0, from), Math.min(1, to)),
117
149
  datum,
118
150
  bottom,
119
- top: datum + opening.position[1] + opening.height / 2,
151
+ top: datum + opening.position[1] - opening.height / 2 + size.height,
120
152
  covered,
121
153
  };
122
154
  }
@@ -0,0 +1,18 @@
1
+ import type { AnyNode, DoorNode, WindowNode } from '../schema/index.js';
2
+ type FrameDepthOpening = Pick<DoorNode | WindowNode, 'frameDepth'>;
3
+ /** An opening without an explicit frame depth follows its host wall. */
4
+ export declare function isAutoFrameDepth(opening: FrameDepthOpening): boolean;
5
+ /**
6
+ * The depth a door's or window's frame runs through its wall. An explicit
7
+ * `frameDepth` is kept as stored; left out, the frame is the host wall's
8
+ * thickness exactly.
9
+ */
10
+ export declare function resolveOpeningFrameDepth(opening: FrameDepthOpening, wallThickness: number): number;
11
+ /**
12
+ * `resolveOpeningFrameDepth` against the opening's host in `nodes`: its parent
13
+ * wall's thickness, or the default wall thickness off a wall (a roof face, a
14
+ * dormer, an unparented preview).
15
+ */
16
+ export declare function resolveHostedOpeningFrameDepth(opening: Pick<DoorNode | WindowNode, 'frameDepth' | 'parentId'>, nodes: Readonly<Record<string, AnyNode | undefined>>): number;
17
+ export {};
18
+ //# sourceMappingURL=opening-frame-depth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opening-frame-depth.d.ts","sourceRoot":"","sources":["../../src/lib/opening-frame-depth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAG9D,KAAK,iBAAiB,GAAG,IAAI,CAAC,QAAQ,GAAG,UAAU,EAAE,YAAY,CAAC,CAAA;AAElE,wEAAwE;AACxE,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAEpE;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,iBAAiB,EAC1B,aAAa,EAAE,MAAM,GACpB,MAAM,CAER;AAED;;;;GAIG;AACH,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,IAAI,CAAC,QAAQ,GAAG,UAAU,EAAE,YAAY,GAAG,UAAU,CAAC,EAC/D,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,SAAS,CAAC,CAAC,GACnD,MAAM,CAMR"}
@@ -0,0 +1,22 @@
1
+ import { DEFAULT_WALL_THICKNESS, getWallThickness } from '../systems/wall/wall-footprint.js';
2
+ /** An opening without an explicit frame depth follows its host wall. */
3
+ export function isAutoFrameDepth(opening) {
4
+ return opening.frameDepth === undefined;
5
+ }
6
+ /**
7
+ * The depth a door's or window's frame runs through its wall. An explicit
8
+ * `frameDepth` is kept as stored; left out, the frame is the host wall's
9
+ * thickness exactly.
10
+ */
11
+ export function resolveOpeningFrameDepth(opening, wallThickness) {
12
+ return opening.frameDepth ?? wallThickness;
13
+ }
14
+ /**
15
+ * `resolveOpeningFrameDepth` against the opening's host in `nodes`: its parent
16
+ * wall's thickness, or the default wall thickness off a wall (a roof face, a
17
+ * dormer, an unparented preview).
18
+ */
19
+ export function resolveHostedOpeningFrameDepth(opening, nodes) {
20
+ const host = opening.parentId ? nodes[opening.parentId] : undefined;
21
+ return resolveOpeningFrameDepth(opening, host?.type === 'wall' ? getWallThickness(host) : DEFAULT_WALL_THICKNESS);
22
+ }
@@ -0,0 +1,32 @@
1
+ import type { ZoneNode } from '../schema/index.js';
2
+ export declare const OUTDOOR_ROOM_TYPES: readonly ['porch', 'deck', 'patio'];
3
+ export type OutdoorRoomType = (typeof OUTDOOR_ROOM_TYPES)[number];
4
+ /** A porch or patio slab steps down from the house's finish floor by 1.5 in at most. */
5
+ export declare const PORCH_FLOOR_DROP: number;
6
+ /** Deck boards ride 1 in under the threshold so water sheds away from the door. */
7
+ export declare const DECK_FLOOR_DROP: number;
8
+ /**
9
+ * The deck boards on a deck's floor unless its room says otherwise (5/4x6, 1 in: `lib/deck-boards`);
10
+ * the framing hangs under them.
11
+ */
12
+ export declare const DECKING_THICKNESS: number;
13
+ export type OutdoorRoomDefaults = {
14
+ /** The name a room of the type is given while it has a default name. */
15
+ name: string;
16
+ drop: number;
17
+ /** The floor finish it starts with. */
18
+ finish: string;
19
+ /** Whether it has a ceiling (a covered porch). */
20
+ covered: boolean;
21
+ /** How the framing plugin reads its floor plate (`metadata.floor`). */
22
+ floorTag: 'porch-slab' | 'deck';
23
+ };
24
+ export declare const OUTDOOR_ROOM_DEFAULTS: Record<OutdoorRoomType, OutdoorRoomDefaults>;
25
+ export declare function isOutdoorRoomType(value: unknown): value is OutdoorRoomType;
26
+ /** Whether a room is one of the outdoor room types. */
27
+ export declare function isOutdoorRoom(zone: Pick<ZoneNode, 'roomType'>): boolean;
28
+ /** "Porch", "Porch 2", …: the next free name for a room of `type` among `names`. */
29
+ export declare function nextOutdoorRoomName(type: OutdoorRoomType, names: Iterable<string>): string;
30
+ /** Whether `name` is a type's default name ("Deck", "Deck 3"), so a type change may rename it. */
31
+ export declare function isOutdoorRoomDefaultName(name: string | undefined): boolean;
32
+ //# sourceMappingURL=outdoor-room.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outdoor-room.d.ts","sourceRoot":"","sources":["../../src/lib/outdoor-room.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAezC,eAAO,MAAM,kBAAkB,YAAI,OAAO,EAAE,MAAM,EAAE,OAAO,CAAU,CAAA;AACrE,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAA;AAEjE,wFAAwF;AACxF,eAAO,MAAM,gBAAgB,QAAW,CAAA;AACxC,mFAAmF;AACnF,eAAO,MAAM,eAAe,QAAS,CAAA;AACrC;;;GAGG;AACH,eAAO,MAAM,iBAAiB,QAA0C,CAAA;AAExE,MAAM,MAAM,mBAAmB,GAAG;IAChC,wEAAwE;IACxE,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,uCAAuC;IACvC,MAAM,EAAE,MAAM,CAAA;IACd,kDAAkD;IAClD,OAAO,EAAE,OAAO,CAAA;IAChB,uEAAuE;IACvE,QAAQ,EAAE,YAAY,GAAG,MAAM,CAAA;CAChC,CAAA;AAED,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,eAAe,EAAE,mBAAmB,CAsB9E,CAAA;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,eAAe,CAE1E;AAED,uDAAuD;AACvD,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,GAAG,OAAO,CAEvE;AAED,oFAAoF;AACpF,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,MAAM,CAK1F;AAED,kGAAkG;AAClG,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAO1E"}
@@ -0,0 +1,66 @@
1
+ import { DEFAULT_DECK_BOARDS, deckBoardThickness } from './deck-boards.js';
2
+ /**
3
+ * Rooms outside the house, the outdoor room types: a porch (a covered floor a step
4
+ * down from the house), a deck (a framed floor of boards) and a patio (an uncovered slab). A room
5
+ * of one of these types is outdoors whatever covers it, so the house walls it faces are exterior
6
+ * walls even under a porch ceiling, and its floor steps down from the house's (`floor.drop`).
7
+ *
8
+ * A room closed off outside the house by invisible walls starts as a porch: its floor a concrete
9
+ * slab 1.5 in under the house's and its ceiling at the house's, both adjustable in its panel.
10
+ */
11
+ const IN = 0.0254;
12
+ export const OUTDOOR_ROOM_TYPES = ['porch', 'deck', 'patio'];
13
+ /** A porch or patio slab steps down from the house's finish floor by 1.5 in at most. */
14
+ export const PORCH_FLOOR_DROP = 1.5 * IN;
15
+ /** Deck boards ride 1 in under the threshold so water sheds away from the door. */
16
+ export const DECK_FLOOR_DROP = 1 * IN;
17
+ /**
18
+ * The deck boards on a deck's floor unless its room says otherwise (5/4x6, 1 in: `lib/deck-boards`);
19
+ * the framing hangs under them.
20
+ */
21
+ export const DECKING_THICKNESS = deckBoardThickness(DEFAULT_DECK_BOARDS);
22
+ export const OUTDOOR_ROOM_DEFAULTS = {
23
+ porch: {
24
+ name: 'Porch',
25
+ drop: PORCH_FLOOR_DROP,
26
+ finish: 'library:concrete-raw',
27
+ covered: true,
28
+ floorTag: 'porch-slab',
29
+ },
30
+ deck: {
31
+ name: 'Deck',
32
+ drop: DECK_FLOOR_DROP,
33
+ finish: 'library:wood-woodfine11',
34
+ covered: false,
35
+ floorTag: 'deck',
36
+ },
37
+ patio: {
38
+ name: 'Patio',
39
+ drop: PORCH_FLOOR_DROP,
40
+ finish: 'library:concrete-raw',
41
+ covered: false,
42
+ floorTag: 'porch-slab',
43
+ },
44
+ };
45
+ export function isOutdoorRoomType(value) {
46
+ return typeof value === 'string' && OUTDOOR_ROOM_TYPES.includes(value);
47
+ }
48
+ /** Whether a room is one of the outdoor room types. */
49
+ export function isOutdoorRoom(zone) {
50
+ return isOutdoorRoomType(zone.roomType);
51
+ }
52
+ /** "Porch", "Porch 2", …: the next free name for a room of `type` among `names`. */
53
+ export function nextOutdoorRoomName(type, names) {
54
+ const base = OUTDOOR_ROOM_DEFAULTS[type].name;
55
+ const taken = new Set(names);
56
+ if (!taken.has(base))
57
+ return base;
58
+ for (let n = 2;; n++)
59
+ if (!taken.has(`${base} ${n}`))
60
+ return `${base} ${n}`;
61
+ }
62
+ /** Whether `name` is a type's default name ("Deck", "Deck 3"), so a type change may rename it. */
63
+ export function isOutdoorRoomDefaultName(name) {
64
+ return (typeof name === 'string' &&
65
+ OUTDOOR_ROOM_TYPES.some((type) => new RegExp(`^${OUTDOOR_ROOM_DEFAULTS[type].name}( \\d+)?$`).test(name)));
66
+ }
@@ -92,6 +92,14 @@ export declare function plateOpeningLandings(context: PlateLevelContext): import
92
92
  * `platePartitionSignature`. Returns `null` for anything that is not an
93
93
  * unrecessed floor plate — manual slabs and pools keep the plain two-slot path.
94
94
  */
95
+ /**
96
+ * The doorways cut out of `plate`, each its wall's span past both faces (whole, so a cut never
97
+ * runs along the plate's own edge): those of the openings reaching below their floor (a negative
98
+ * sill: a garage door down to the garage floor sunk beside its wall) where the plate stands above
99
+ * the opening's bottom. The doorway is then open from its bottom to its head on both faces, with
100
+ * no strip of the floor the wall stands on left across it.
101
+ */
102
+ export declare function plateDoorwayCuts(plate: SlabNode, context: PlateLevelContext): MultiPolygon;
95
103
  export declare function computePlateSurfacePartition(plate: SlabNode, context: PlateLevelContext): PlateSurfacePartition | null;
96
104
  /**
97
105
  * The doorway keys of every step `zoneId` owns on its level — what the room
@@ -1 +1 @@
1
- {"version":3,"file":"plate-surface.d.ts","sourceRoot":"","sources":["../../src/lib/plate-surface.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plate-surface.d.ts","sourceRoot":"","sources":["../../src/lib/plate-surface.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import { DEFAULT_SLAB_ELEVATION } from '../schema/nodes/slab.js';
2
- import { getWallCurveFrameAt, getWallCurveStationAtPoint } from '../systems/wall/wall-curve.js';
2
+ import { getWallCurveFrameAt, getWallCurveLength, getWallCurveStationAtPoint, isCurvedWall, } from '../systems/wall/wall-curve.js';
3
3
  import { calculateLevelMiters, getWallPlanFootprint } from '../systems/wall/wall-footprint.js';
4
+ import { getWallFaceOffsets } from '../systems/wall/wall-frame.js';
4
5
  import { openingLandings } from './floor-opening-footprints.js';
5
6
  import { floorRoomFaces } from './floor-room-faces.js';
6
7
  import { exposedIntervals } from './level-footprints.js';
@@ -566,7 +567,13 @@ function classifySides(plate, top, context, prepared) {
566
567
  ...(hi < b ? [[hi, b]] : []),
567
568
  ]);
568
569
  const role = adjacent || neighbour ? 'riser' : 'edge';
569
- const owner = role === 'riser' || plate.plateRole !== 'base' ? ownerId : undefined;
570
+ // A base plate's side facing into one of its own holes (a void, a stairwell) belongs to the
571
+ // room around the hole, so it can wear that room's floor edge rather than the facade's.
572
+ const holeOwner = plate.plateRole === 'base' &&
573
+ top.some(({ outer }) => containsPoint([{ outer, holes: [] }], outside))
574
+ ? zones.find((entry) => containsPoint(entry.polygon, inside))?.zone.id
575
+ : undefined;
576
+ const owner = role === 'riser' || plate.plateRole !== 'base' ? ownerId : holeOwner;
570
577
  // A door jamb's side of the step meets the aperture only at its edge, so
571
578
  // the doorway is looked for on both sides of the face too.
572
579
  const doorway = opening ??
@@ -600,6 +607,48 @@ const partitionCache = new Map();
600
607
  * `platePartitionSignature`. Returns `null` for anything that is not an
601
608
  * unrecessed floor plate — manual slabs and pools keep the plain two-slot path.
602
609
  */
610
+ /**
611
+ * The doorways cut out of `plate`, each its wall's span past both faces (whole, so a cut never
612
+ * runs along the plate's own edge): those of the openings reaching below their floor (a negative
613
+ * sill: a garage door down to the garage floor sunk beside its wall) where the plate stands above
614
+ * the opening's bottom. The doorway is then open from its bottom to its head on both faces, with
615
+ * no strip of the floor the wall stands on left across it.
616
+ */
617
+ export function plateDoorwayCuts(plate, context) {
618
+ if (!isFloorPlate(plate) || plate.recessed || plate.polygon.length < 3)
619
+ return [];
620
+ const elevation = plate.elevation ?? DEFAULT_SLAB_ELEVATION;
621
+ const top = slabTop(plate);
622
+ return union(levelInputs(context).openings.flatMap(({ opening, wall, cut }) => {
623
+ if (opening.position[1] - opening.height / 2 >= -BELOW_FLOOR_SILL)
624
+ return [];
625
+ if (cut.bottom >= elevation - 1e-3)
626
+ return [];
627
+ const band = doorwayBand(wall, opening);
628
+ return area(intersection(band, top)) > 0 ? [band] : [];
629
+ }));
630
+ }
631
+ /**
632
+ * The doorway's span of the wall, past both faces by {@link DOORWAY_OVERSHOOT}: a plate edge a few
633
+ * millimetres off the face (a plate drawn to the wall's line, a wall a hair out of square) would
634
+ * otherwise leave a sliver whose side face shows as a bar across the doorway.
635
+ */
636
+ function doorwayBand(wall, opening) {
637
+ const length = getWallCurveLength(wall);
638
+ const from = Math.max(0, (opening.position[0] - opening.width / 2) / length);
639
+ const to = Math.min(1, (opening.position[0] + opening.width / 2) / length);
640
+ const faces = getWallFaceOffsets(wall);
641
+ const count = isCurvedWall(wall) ? Math.max(2, Math.ceil((to - from) * 96)) : 1;
642
+ const side = (offset) => Array.from({ length: count + 1 }, (_, i) => {
643
+ const frame = getWallCurveFrameAt(wall, from + ((to - from) * i) / count);
644
+ return [frame.point.x + frame.normal.x * offset, frame.point.y + frame.normal.y * offset];
645
+ });
646
+ return [...side(faces.a + DOORWAY_OVERSHOOT), ...side(faces.b - DOORWAY_OVERSHOOT).reverse()];
647
+ }
648
+ /** How far past each wall face a doorway is cut out of the plates it crosses. */
649
+ const DOORWAY_OVERSHOOT = 0.02;
650
+ /** A sill this far under its floor reaches below it; nearer is the floor (rounding). */
651
+ const BELOW_FLOOR_SILL = 1e-3;
603
652
  export function computePlateSurfacePartition(plate, context) {
604
653
  if (!isFloorPlate(plate) || plate.recessed || plate.polygon.length < 3)
605
654
  return null;
@@ -607,7 +656,8 @@ export function computePlateSurfacePartition(plate, context) {
607
656
  const cached = partitionCache.get(signature);
608
657
  if (cached)
609
658
  return cached;
610
- const top = slabTop(plate);
659
+ const doorways = plateDoorwayCuts(plate, context);
660
+ const top = doorways.length ? difference(slabTop(plate), doorways) : slabTop(plate);
611
661
  if (!top.length)
612
662
  return null;
613
663
  const wallCover = levelWallCover(context.walls);
@@ -0,0 +1,46 @@
1
+ import type { AnyNode, AnyNodeId, SlabNode, ZoneNode } from '../schema/index.js';
2
+ /**
3
+ * A porch's posts and beams (`lib/porch-framing`), kept by the structure kernel as it keeps a
4
+ * room's floor and ceiling: made when a covered porch has an open side, moved with the porch,
5
+ * rebuilt when its framing settings change, removed when it stops being a covered porch. A deck
6
+ * or patio gets the same once they are switched on, to carry a roof over it. They are ordinary
7
+ * post and beam nodes. Moving, resizing or deleting one hands the room's framing to the user
8
+ * (`porchFraming.auto: false`): framing edited by hand stops rebuilding; turning it back on
9
+ * rebuilds it.
10
+ */
11
+ type Nodes = Readonly<Record<string, AnyNode>>;
12
+ /** What the kernel stamps on a porch part: the porch, which part, and what it made it as. */
13
+ export type PorchPartMetadata = {
14
+ porchOf: string;
15
+ porchPart: string;
16
+ porchSeed: string;
17
+ };
18
+ /** The porch a post or beam was made for, when the kernel made it. */
19
+ export declare function porchPartOf(node: AnyNode | null | undefined): PorchPartMetadata | null;
20
+ /** Keep generated parts linked when reconciliation assigns their room its stable ID. */
21
+ export declare function remapPorchOwner(metadata: Record<string, unknown> | undefined, ids: ReadonlyMap<string, string>): Record<string, unknown> | undefined;
22
+ /**
23
+ * A porch part's id and shape, for the structure sync to notice a hand edit or a delete (and run
24
+ * the kernel, which hands the porch's framing over); null for any other node.
25
+ */
26
+ export declare function porchPartSignature(node: AnyNode | null | undefined): string | null;
27
+ /**
28
+ * The kernel's porch framing pass over one level: which posts and beams to put and delete, and
29
+ * the porches whose framing a hand edit has handed to the user. `zones` are the level's rooms as
30
+ * the pass leaves them, `plates` its floor plates, `current` a node as the pass has it so far;
31
+ * `previousNodes` (the scene before the edit) tells a deleted part from one never made.
32
+ */
33
+ export declare function reconcilePorchFraming({ levelId, nodes, previousNodes, zones, plates, current, mintId, }: {
34
+ levelId: string;
35
+ nodes: Nodes;
36
+ previousNodes?: Nodes;
37
+ zones: readonly ZoneNode[];
38
+ plates: readonly SlabNode[];
39
+ current: (id: string) => AnyNode | undefined;
40
+ mintId: (kind: 'column' | 'beam') => string;
41
+ }): {
42
+ put: AnyNode[];
43
+ delete: AnyNodeId[];
44
+ };
45
+ export {};
46
+ //# sourceMappingURL=porch-framing-sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"porch-framing-sync.d.ts","sourceRoot":"","sources":["../../src/lib/porch-framing-sync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAYvE;;;;;;;;GAQG;AAEH,KAAK,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;AAG9C,6FAA6F;AAC7F,MAAM,MAAM,iBAAiB,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAA;AAEzF,sEAAsE;AACtE,wBAAgB,WAAW,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS,GAAG,iBAAiB,GAAG,IAAI,CAMtF;AAED,wFAAwF;AACxF,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAC7C,GAAG,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAIrC;AAmBD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAElF;AA0HD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,EACpC,OAAO,EACP,KAAK,EACL,aAAa,EACb,KAAK,EACL,MAAM,EACN,OAAO,EACP,MAAM,GACP,EAAE;IACD,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,KAAK,CAAA;IACZ,aAAa,CAAC,EAAE,KAAK,CAAA;IACrB,KAAK,EAAE,SAAS,QAAQ,EAAE,CAAA;IAC1B,MAAM,EAAE,SAAS,QAAQ,EAAE,CAAA;IAC3B,OAAO,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,GAAG,SAAS,CAAA;IAC5C,MAAM,EAAE,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,KAAK,MAAM,CAAA;CAC5C,GAAG;IAAE,GAAG,EAAE,OAAO,EAAE,CAAC;IAAC,MAAM,EAAE,SAAS,EAAE,CAAA;CAAE,CAmE1C"}
@@ -0,0 +1,206 @@
1
+ import { beamBottomElevation, createBeam } from './beam.js';
2
+ import { createFramingPost, FRAMING_POST_MIN_HEIGHT, framingPostFields, framingPostSize, } from './framing-post.js';
3
+ import { planPorchFraming, porchFramingSettings } from './porch-framing.js';
4
+ /** The porch a post or beam was made for, when the kernel made it. */
5
+ export function porchPartOf(node) {
6
+ if (node?.type !== 'column' && node?.type !== 'beam')
7
+ return null;
8
+ const metadata = node.metadata;
9
+ return typeof metadata?.porchOf === 'string' && typeof metadata.porchPart === 'string'
10
+ ? metadata
11
+ : null;
12
+ }
13
+ /** Keep generated parts linked when reconciliation assigns their room its stable ID. */
14
+ export function remapPorchOwner(metadata, ids) {
15
+ return typeof metadata?.porchOf === 'string' && ids.has(metadata.porchOf)
16
+ ? { ...metadata, porchOf: ids.get(metadata.porchOf) }
17
+ : undefined;
18
+ }
19
+ const round = (value) => Math.round(value * 1e6) / 1e6;
20
+ /** A part's shape, as it was made: anything else is a hand edit. */
21
+ function seedOf(part) {
22
+ if (part.type === 'column')
23
+ return JSON.stringify([part.position[0], part.position[2], part.width, part.depth, part.height, part.rotation].map(round));
24
+ return JSON.stringify([
25
+ ...[...part.start, ...part.end, part.width, part.depth].map(round),
26
+ part.topElevation === undefined ? null : round(part.topElevation),
27
+ part.placement,
28
+ ]);
29
+ }
30
+ /**
31
+ * A porch part's id and shape, for the structure sync to notice a hand edit or a delete (and run
32
+ * the kernel, which hands the porch's framing over); null for any other node.
33
+ */
34
+ export function porchPartSignature(node) {
35
+ return porchPartOf(node) ? JSON.stringify([node.id, seedOf(node)]) : null;
36
+ }
37
+ function edited(part) {
38
+ return seedOf(part) !== porchPartOf(part)?.porchSeed;
39
+ }
40
+ /**
41
+ * A room the kernel frames, still closed and its framing automatic: a covered porch (automatic
42
+ * unless switched off), or a deck or patio whose posts and beam are switched on (`auto: true`, to
43
+ * carry a roof over it; off by default).
44
+ */
45
+ function framedPorch(zone) {
46
+ if (!zone || zone.enclosureStatus === 'open')
47
+ return false;
48
+ if (zone.roomType === 'porch')
49
+ return zone.hasCeiling !== false && zone.porchFraming?.auto !== false;
50
+ return coverOptional(zone) && zone.porchFraming?.auto === true;
51
+ }
52
+ /** A deck or patio: its posts and beam are off until switched on. */
53
+ function coverOptional(zone) {
54
+ return zone.roomType === 'deck' || zone.roomType === 'patio';
55
+ }
56
+ /** The floor plate a porch's posts stand on: its own step-down plate, else the one it shares. */
57
+ function porchPlate(zone, plates) {
58
+ const holding = plates.filter((plate) => plate.zoneIds?.includes(zone.id));
59
+ return holding.find((plate) => plate.plateRole !== 'base') ?? holding[0];
60
+ }
61
+ const yawOf = (start, end) => Math.atan2(-(end[1] - start[1]), end[0] - start[0]);
62
+ function withPorch(node, zone, key) {
63
+ const metadata = { porchOf: zone.id, porchPart: key, porchSeed: '' };
64
+ const tagged = { ...node, metadata: { ...node.metadata, ...metadata } };
65
+ tagged.metadata.porchSeed = seedOf(tagged);
66
+ return tagged;
67
+ }
68
+ /** The porch's planned parts as nodes, reusing the ids (and the touches) of the ones it has. */
69
+ function buildParts(zone, plan, owned, plate, levelId, nodes, mintId) {
70
+ const settings = porchFramingSettings(zone);
71
+ const byKey = new Map(owned.map((part) => [porchPartOf(part).porchPart, part]));
72
+ const beams = new Map();
73
+ for (const planned of plan.beams) {
74
+ const existing = byKey.get(planned.key);
75
+ const fresh = createBeam({
76
+ start: planned.start,
77
+ end: planned.end,
78
+ preset: settings.beamSize,
79
+ levelId,
80
+ supportSlabId: plate?.id,
81
+ name: `${zone.name} beam`,
82
+ });
83
+ const beam = existing?.type === 'beam'
84
+ ? {
85
+ ...existing,
86
+ start: fresh.start,
87
+ end: fresh.end,
88
+ width: fresh.width,
89
+ depth: fresh.depth,
90
+ size: fresh.size,
91
+ plies: fresh.plies,
92
+ material: fresh.material,
93
+ placement: 'dropped',
94
+ topElevation: undefined,
95
+ supportSlabId: plate?.id,
96
+ }
97
+ : { ...fresh, id: mintId('beam') };
98
+ beams.set(planned.key, withPorch(beam, zone, planned.key));
99
+ }
100
+ const foot = plate?.elevation ?? 0;
101
+ const posts = plan.posts.map((planned) => {
102
+ // Up to the underside of the beam it carries (the lower of two at a corner).
103
+ const bottoms = planned.beams.flatMap((key) => {
104
+ const beam = beams.get(key);
105
+ return beam ? [beamBottomElevation(nodes, beam)] : [];
106
+ });
107
+ const height = Math.max(FRAMING_POST_MIN_HEIGHT, Math.min(...bottoms) - foot);
108
+ const run = plan.beams.find((beam) => beam.key === planned.beams.at(-1));
109
+ const rotation = run ? yawOf(run.start, run.end) : 0;
110
+ const existing = byKey.get(planned.key);
111
+ const position = [planned.position[0], 0, planned.position[1]];
112
+ const post = existing?.type === 'column'
113
+ ? {
114
+ ...existing,
115
+ ...(framingPostSize(existing) === settings.postSize
116
+ ? {}
117
+ : framingPostFields(settings.postSize, existing.postBase ?? 'post-base')),
118
+ position,
119
+ rotation,
120
+ height,
121
+ supportSlabId: plate?.id,
122
+ }
123
+ : {
124
+ ...createFramingPost({
125
+ position: planned.position,
126
+ size: settings.postSize,
127
+ base: 'post-base',
128
+ height,
129
+ levelId,
130
+ supportSlabId: plate?.id,
131
+ rotation,
132
+ name: `${zone.name} post`,
133
+ }),
134
+ id: mintId('column'),
135
+ };
136
+ return withPorch(post, zone, planned.key);
137
+ });
138
+ return [...beams.values(), ...posts];
139
+ }
140
+ /**
141
+ * The kernel's porch framing pass over one level: which posts and beams to put and delete, and
142
+ * the porches whose framing a hand edit has handed to the user. `zones` are the level's rooms as
143
+ * the pass leaves them, `plates` its floor plates, `current` a node as the pass has it so far;
144
+ * `previousNodes` (the scene before the edit) tells a deleted part from one never made.
145
+ */
146
+ export function reconcilePorchFraming({ levelId, nodes, previousNodes, zones, plates, current, mintId, }) {
147
+ const put = [];
148
+ const remove = [];
149
+ const owned = new Map();
150
+ for (const node of Object.values(nodes)) {
151
+ const part = porchPartOf(node);
152
+ if (!part || node.parentId !== levelId)
153
+ continue;
154
+ const latest = (current(node.id) ?? node);
155
+ owned.set(part.porchOf, [...(owned.get(part.porchOf) ?? []), latest]);
156
+ }
157
+ const zonesById = new Map(zones.map((zone) => [zone.id, zone]));
158
+ // A porch gone, or no longer a covered one: what it made goes with it; a part edited by hand
159
+ // stays, the user's own. A deck's or patio's switched off goes whole, edited or not.
160
+ for (const [zoneId, parts] of owned) {
161
+ const zone = zonesById.get(zoneId);
162
+ if (framedPorch(zone) || zone?.porchFraming?.auto === false)
163
+ continue;
164
+ const switchedOff = !!zone && coverOptional(zone) && zone.porchFraming?.auto === undefined;
165
+ for (const part of parts) {
166
+ if (switchedOff || !edited(part))
167
+ remove.push(part.id);
168
+ else {
169
+ const { porchOf: _porchOf, porchPart: _porchPart, porchSeed: _seed, ...metadata } = part.metadata;
170
+ put.push({ ...part, metadata });
171
+ }
172
+ }
173
+ }
174
+ for (const zone of zones) {
175
+ if (!framedPorch(zone))
176
+ continue;
177
+ const parts = owned.get(zone.id) ?? [];
178
+ const before = previousNodes?.[zone.id];
179
+ const settingsChanged = before?.type !== 'zone' ||
180
+ before.roomType !== zone.roomType ||
181
+ JSON.stringify(before.porchFraming ?? null) !== JSON.stringify(zone.porchFraming ?? null);
182
+ const plan = planPorchFraming(zone, nodes);
183
+ if (!settingsChanged) {
184
+ // A part of the plan gone since the edit before: deleted by hand. (One the plan dropped
185
+ // went with an earlier pass.)
186
+ const planned = new Set([...plan.posts, ...plan.beams].map((part) => part.key));
187
+ const deleted = Object.values(previousNodes ?? {}).some((node) => {
188
+ const part = porchPartOf(node);
189
+ return part?.porchOf === zone.id && planned.has(part.porchPart) && !nodes[node.id];
190
+ });
191
+ if (deleted || parts.some(edited)) {
192
+ put.push({ ...zone, porchFraming: { ...zone.porchFraming, auto: false } });
193
+ continue;
194
+ }
195
+ }
196
+ const built = buildParts(zone, plan,
197
+ // Settings changed: what a hand made goes too; the porch is rebuilt from its settings.
198
+ parts, porchPlate(zone, plates), levelId, nodes, mintId);
199
+ const kept = new Set(built.map((part) => part.id));
200
+ for (const part of parts)
201
+ if (!kept.has(part.id))
202
+ remove.push(part.id);
203
+ put.push(...built);
204
+ }
205
+ return { put, delete: remove };
206
+ }