@pascal-app/core 1.0.6 → 1.1.0

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 (1003) 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 +411 -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 +13804 -10600
  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 +37 -1
  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 +1163 -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 +5881 -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 +39 -3
  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 +259 -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 +2525 -1723
  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 +59 -13
  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 +5 -7
  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 +181 -35
  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 +4667 -3065
  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 +5 -3
  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 +134 -12
  356. package/dist/building/wall-openings.d.ts.map +1 -1
  357. package/dist/building/wall-openings.js +182 -41
  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 +889 -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 +2897 -1938
  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 -25
  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 +62 -2
  400. package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts.map +1 -1
  401. package/dist/hooks/spatial-grid/spatial-grid-manager.js +207 -36
  402. package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts +2915 -2114
  403. package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts.map +1 -1
  404. package/dist/hooks/spatial-grid/spatial-grid-sync.js +32 -5
  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 +43 -20
  419. package/dist/index.d.ts.map +1 -1
  420. package/dist/index.js +42 -19
  421. package/dist/lib/__fixtures__/mezzanine.d.ts +10900 -8225
  422. package/dist/lib/__fixtures__/mezzanine.d.ts.map +1 -1
  423. package/dist/lib/absorb-wall-separators.d.ts +1629 -828
  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-mode.d.ts +11 -0
  432. package/dist/lib/build-mode.d.ts.map +1 -0
  433. package/dist/lib/build-mode.js +24 -0
  434. package/dist/lib/build-up.d.ts +89 -0
  435. package/dist/lib/build-up.d.ts.map +1 -0
  436. package/dist/lib/build-up.js +216 -0
  437. package/dist/lib/corner-pair.d.ts +207 -4
  438. package/dist/lib/corner-pair.d.ts.map +1 -1
  439. package/dist/lib/deck-boards.d.ts +80 -0
  440. package/dist/lib/deck-boards.d.ts.map +1 -0
  441. package/dist/lib/deck-boards.js +184 -0
  442. package/dist/lib/deck-framing.d.ts +150 -0
  443. package/dist/lib/deck-framing.d.ts.map +1 -0
  444. package/dist/lib/deck-framing.js +515 -0
  445. package/dist/lib/deepest-drawn.d.ts +3 -6
  446. package/dist/lib/deepest-drawn.d.ts.map +1 -1
  447. package/dist/lib/deepest-drawn.js +4 -8
  448. package/dist/lib/door-interaction.d.ts +14 -0
  449. package/dist/lib/door-interaction.d.ts.map +1 -0
  450. package/dist/lib/door-interaction.js +62 -0
  451. package/dist/lib/door-opening.d.ts +19 -0
  452. package/dist/lib/door-opening.d.ts.map +1 -0
  453. package/dist/lib/door-opening.js +27 -0
  454. package/dist/lib/door-operation.d.ts +2 -0
  455. package/dist/lib/door-operation.d.ts.map +1 -1
  456. package/dist/lib/door-operation.js +4 -0
  457. package/dist/lib/elevator-support.d.ts +15 -0
  458. package/dist/lib/elevator-support.d.ts.map +1 -0
  459. package/dist/lib/elevator-support.js +40 -0
  460. package/dist/lib/exterior-wall-loops.d.ts.map +1 -1
  461. package/dist/lib/exterior-wall-loops.js +2 -1
  462. package/dist/lib/finish-script.d.ts +5 -5
  463. package/dist/lib/finish-script.d.ts.map +1 -1
  464. package/dist/lib/finish-script.js +12 -5
  465. package/dist/lib/floor-footprint-name.d.ts +17 -0
  466. package/dist/lib/floor-footprint-name.d.ts.map +1 -1
  467. package/dist/lib/floor-footprint-name.js +17 -4
  468. package/dist/lib/floor-intent-changes.d.ts.map +1 -1
  469. package/dist/lib/floor-intent-changes.js +66 -39
  470. package/dist/lib/floor-opening-footprints.d.ts +1 -1
  471. package/dist/lib/floor-opening-footprints.d.ts.map +1 -1
  472. package/dist/lib/floor-opening-footprints.js +10 -4
  473. package/dist/lib/floor-plate-paint.d.ts +2 -0
  474. package/dist/lib/floor-plate-paint.d.ts.map +1 -1
  475. package/dist/lib/floor-plate-paint.js +12 -0
  476. package/dist/lib/floor-plates.d.ts +250 -0
  477. package/dist/lib/floor-plates.d.ts.map +1 -1
  478. package/dist/lib/floor-plates.js +43 -4
  479. package/dist/lib/floor-script.d.ts +35 -6
  480. package/dist/lib/floor-script.d.ts.map +1 -1
  481. package/dist/lib/floor-script.js +96 -16
  482. package/dist/lib/foundation-construction.d.ts +4 -13
  483. package/dist/lib/foundation-construction.d.ts.map +1 -1
  484. package/dist/lib/foundation-construction.js +4 -14
  485. package/dist/lib/foundation-standard.d.ts +2 -3
  486. package/dist/lib/foundation-standard.d.ts.map +1 -1
  487. package/dist/lib/foundation-standard.js +2 -3
  488. package/dist/lib/foundation-wall.d.ts +1 -2
  489. package/dist/lib/foundation-wall.d.ts.map +1 -1
  490. package/dist/lib/foundation-wall.js +1 -2
  491. package/dist/lib/framing-post.d.ts +91 -0
  492. package/dist/lib/framing-post.d.ts.map +1 -0
  493. package/dist/lib/framing-post.js +174 -0
  494. package/dist/lib/geometry-script-node.d.ts +11 -0
  495. package/dist/lib/geometry-script-node.d.ts.map +1 -1
  496. package/dist/lib/geometry-script-node.js +35 -0
  497. package/dist/lib/grade-standing.d.ts +16 -2
  498. package/dist/lib/grade-standing.d.ts.map +1 -1
  499. package/dist/lib/grade-standing.js +129 -9
  500. package/dist/lib/ground-seat.d.ts +2 -22
  501. package/dist/lib/ground-seat.d.ts.map +1 -1
  502. package/dist/lib/ground-seat.js +2 -17
  503. package/dist/lib/ground-window.d.ts +2 -1
  504. package/dist/lib/ground-window.d.ts.map +1 -1
  505. package/dist/lib/ground-window.js +5 -2
  506. package/dist/lib/hierarchy.d.ts +19 -0
  507. package/dist/lib/hierarchy.d.ts.map +1 -0
  508. package/dist/lib/hierarchy.js +53 -0
  509. package/dist/lib/level-footprints.d.ts +2 -0
  510. package/dist/lib/level-footprints.d.ts.map +1 -1
  511. package/dist/lib/level-footprints.js +7 -0
  512. package/dist/lib/opening-casing.d.ts +67 -0
  513. package/dist/lib/opening-casing.d.ts.map +1 -0
  514. package/dist/lib/opening-casing.js +131 -0
  515. package/dist/lib/opening-exterior-face.d.ts +6 -0
  516. package/dist/lib/opening-exterior-face.d.ts.map +1 -0
  517. package/dist/lib/opening-exterior-face.js +15 -0
  518. package/dist/lib/opening-floor-datum.d.ts +11 -5
  519. package/dist/lib/opening-floor-datum.d.ts.map +1 -1
  520. package/dist/lib/opening-floor-datum.js +40 -8
  521. package/dist/lib/opening-frame-depth.d.ts +18 -0
  522. package/dist/lib/opening-frame-depth.d.ts.map +1 -0
  523. package/dist/lib/opening-frame-depth.js +22 -0
  524. package/dist/lib/outdoor-room.d.ts +32 -0
  525. package/dist/lib/outdoor-room.d.ts.map +1 -0
  526. package/dist/lib/outdoor-room.js +66 -0
  527. package/dist/lib/own-floor-intent.d.ts.map +1 -1
  528. package/dist/lib/own-floor-intent.js +2 -2
  529. package/dist/lib/plate-surface.d.ts +8 -0
  530. package/dist/lib/plate-surface.d.ts.map +1 -1
  531. package/dist/lib/plate-surface.js +53 -3
  532. package/dist/lib/polygon-boolean.d.ts.map +1 -1
  533. package/dist/lib/polygon-boolean.js +2 -1
  534. package/dist/lib/porch-framing-sync.d.ts +46 -0
  535. package/dist/lib/porch-framing-sync.d.ts.map +1 -0
  536. package/dist/lib/porch-framing-sync.js +206 -0
  537. package/dist/lib/porch-framing.d.ts +44 -0
  538. package/dist/lib/porch-framing.d.ts.map +1 -0
  539. package/dist/lib/porch-framing.js +159 -0
  540. package/dist/lib/railing-rooms.d.ts +13 -0
  541. package/dist/lib/railing-rooms.d.ts.map +1 -0
  542. package/dist/lib/railing-rooms.js +37 -0
  543. package/dist/lib/roof-eave.d.ts +135 -0
  544. package/dist/lib/roof-eave.d.ts.map +1 -0
  545. package/dist/lib/roof-eave.js +186 -0
  546. package/dist/lib/room-floor-elevation.d.ts +12 -0
  547. package/dist/lib/room-floor-elevation.d.ts.map +1 -0
  548. package/dist/lib/room-floor-elevation.js +41 -0
  549. package/dist/lib/room-floor-feasibility.d.ts.map +1 -1
  550. package/dist/lib/room-floor-feasibility.js +1 -1
  551. package/dist/lib/room-floor-plate.d.ts +3 -1
  552. package/dist/lib/room-floor-plate.d.ts.map +1 -1
  553. package/dist/lib/room-floor-plate.js +7 -0
  554. package/dist/lib/space-detection.d.ts +13 -0
  555. package/dist/lib/space-detection.d.ts.map +1 -1
  556. package/dist/lib/space-detection.js +113 -24
  557. package/dist/lib/structure-kernel.d.ts +22 -9
  558. package/dist/lib/structure-kernel.d.ts.map +1 -1
  559. package/dist/lib/structure-kernel.js +146 -28
  560. package/dist/lib/structure-reconcile.d.ts +1 -1
  561. package/dist/lib/structure-reconcile.d.ts.map +1 -1
  562. package/dist/lib/structure-reconcile.js +7 -4
  563. package/dist/lib/surface-intent.d.ts +10 -0
  564. package/dist/lib/surface-intent.d.ts.map +1 -0
  565. package/dist/lib/surface-intent.js +18 -0
  566. package/dist/lib/terrain-source.d.ts.map +1 -1
  567. package/dist/lib/terrain-source.js +2 -1
  568. package/dist/lib/wall-face-script.d.ts.map +1 -1
  569. package/dist/lib/wall-face-script.js +8 -5
  570. package/dist/lib/window-interaction.d.ts +16 -0
  571. package/dist/lib/window-interaction.d.ts.map +1 -0
  572. package/dist/lib/window-interaction.js +82 -0
  573. package/dist/lib/zone-quantities.js +1 -1
  574. package/dist/material-kinds.d.ts +1 -1
  575. package/dist/material-kinds.d.ts.map +1 -1
  576. package/dist/material-kinds.js +1 -0
  577. package/dist/material-library.d.ts +15 -0
  578. package/dist/material-library.d.ts.map +1 -1
  579. package/dist/material-library.js +458 -59
  580. package/dist/node-slots/column.d.ts +5 -0
  581. package/dist/node-slots/column.d.ts.map +1 -1
  582. package/dist/node-slots/column.js +10 -0
  583. package/dist/node-slots/door.d.ts +3 -4
  584. package/dist/node-slots/door.d.ts.map +1 -1
  585. package/dist/node-slots/door.js +4 -3
  586. package/dist/node-slots/wall.d.ts.map +1 -1
  587. package/dist/node-slots/wall.js +21 -3
  588. package/dist/node-slots/window.d.ts +2 -2
  589. package/dist/node-slots/window.d.ts.map +1 -1
  590. package/dist/node-slots/window.js +6 -1
  591. package/dist/procedural-items/design.d.ts +8 -0
  592. package/dist/procedural-items/design.d.ts.map +1 -1
  593. package/dist/procedural-items/design.js +169 -21
  594. package/dist/procedural-items/motion-controller.d.ts +2 -0
  595. package/dist/procedural-items/motion-controller.d.ts.map +1 -1
  596. package/dist/procedural-items/motion-controller.js +2 -1
  597. package/dist/registry/index.d.ts +3 -3
  598. package/dist/registry/index.d.ts.map +1 -1
  599. package/dist/registry/index.js +2 -2
  600. package/dist/registry/mechanism.d.ts +4 -1
  601. package/dist/registry/mechanism.d.ts.map +1 -1
  602. package/dist/registry/mechanism.js +10 -0
  603. package/dist/registry/registry.d.ts +5 -0
  604. package/dist/registry/registry.d.ts.map +1 -1
  605. package/dist/registry/registry.js +10 -0
  606. package/dist/registry/types.d.ts +89 -23
  607. package/dist/registry/types.d.ts.map +1 -1
  608. package/dist/runtime/__fixtures__/live-scene.d.ts +14 -0
  609. package/dist/runtime/__fixtures__/live-scene.d.ts.map +1 -0
  610. package/dist/runtime/__fixtures__/live-scene.js +64 -0
  611. package/dist/runtime/apply.d.ts +42 -0
  612. package/dist/runtime/apply.d.ts.map +1 -0
  613. package/dist/runtime/apply.js +274 -0
  614. package/dist/runtime/dependencies.d.ts +97 -0
  615. package/dist/runtime/dependencies.d.ts.map +1 -0
  616. package/dist/runtime/dependencies.js +42 -0
  617. package/dist/runtime/ids.d.ts +11 -0
  618. package/dist/runtime/ids.d.ts.map +1 -0
  619. package/dist/runtime/ids.js +80 -0
  620. package/dist/runtime/index.d.ts +14 -0
  621. package/dist/runtime/index.d.ts.map +1 -0
  622. package/dist/runtime/index.js +11 -0
  623. package/dist/runtime/node-queries.d.ts +16 -0
  624. package/dist/runtime/node-queries.d.ts.map +1 -0
  625. package/dist/runtime/node-queries.js +30 -0
  626. package/dist/runtime/patch.d.ts +26 -0
  627. package/dist/runtime/patch.d.ts.map +1 -0
  628. package/dist/runtime/patch.js +165 -0
  629. package/dist/runtime/reader.d.ts +104 -0
  630. package/dist/runtime/reader.d.ts.map +1 -0
  631. package/dist/runtime/reader.js +455 -0
  632. package/dist/runtime/scene-runtime.d.ts +112 -0
  633. package/dist/runtime/scene-runtime.d.ts.map +1 -0
  634. package/dist/runtime/scene-runtime.js +302 -0
  635. package/dist/schema/__fixtures__/node-fixtures.d.ts.map +1 -1
  636. package/dist/schema/__fixtures__/node-fixtures.js +1 -0
  637. package/dist/schema/assembly.d.ts +3 -0
  638. package/dist/schema/assembly.d.ts.map +1 -1
  639. package/dist/schema/assembly.js +13 -0
  640. package/dist/schema/asset-url.d.ts +37 -2
  641. package/dist/schema/asset-url.d.ts.map +1 -1
  642. package/dist/schema/asset-url.js +80 -11
  643. package/dist/schema/base.d.ts +8 -0
  644. package/dist/schema/base.d.ts.map +1 -1
  645. package/dist/schema/base.js +19 -1
  646. package/dist/schema/build-up.d.ts +247 -0
  647. package/dist/schema/build-up.d.ts.map +1 -0
  648. package/dist/schema/build-up.js +83 -0
  649. package/dist/schema/geometry-source.d.ts +80 -0
  650. package/dist/schema/geometry-source.d.ts.map +1 -1
  651. package/dist/schema/geometry-source.js +38 -0
  652. package/dist/schema/index.d.ts +12 -7
  653. package/dist/schema/index.d.ts.map +1 -1
  654. package/dist/schema/index.js +12 -6
  655. package/dist/schema/material.d.ts +5 -0
  656. package/dist/schema/material.d.ts.map +1 -1
  657. package/dist/schema/material.js +6 -0
  658. package/dist/schema/nodes/beam.d.ts +264 -0
  659. package/dist/schema/nodes/beam.d.ts.map +1 -0
  660. package/dist/schema/nodes/beam.js +139 -0
  661. package/dist/schema/nodes/box-vent.d.ts +5 -0
  662. package/dist/schema/nodes/box-vent.d.ts.map +1 -1
  663. package/dist/schema/nodes/cabinet.d.ts +10 -0
  664. package/dist/schema/nodes/cabinet.d.ts.map +1 -1
  665. package/dist/schema/nodes/ceiling.d.ts +48 -0
  666. package/dist/schema/nodes/ceiling.d.ts.map +1 -1
  667. package/dist/schema/nodes/ceiling.js +5 -0
  668. package/dist/schema/nodes/chimney.d.ts +10 -0
  669. package/dist/schema/nodes/chimney.d.ts.map +1 -1
  670. package/dist/schema/nodes/column.d.ts +42 -0
  671. package/dist/schema/nodes/column.d.ts.map +1 -1
  672. package/dist/schema/nodes/column.js +11 -1
  673. package/dist/schema/nodes/cupola.d.ts +5 -0
  674. package/dist/schema/nodes/cupola.d.ts.map +1 -1
  675. package/dist/schema/nodes/door.d.ts +54 -3
  676. package/dist/schema/nodes/door.d.ts.map +1 -1
  677. package/dist/schema/nodes/door.js +41 -7
  678. package/dist/schema/nodes/dormer.d.ts +20 -0
  679. package/dist/schema/nodes/dormer.d.ts.map +1 -1
  680. package/dist/schema/nodes/downspout.d.ts +5 -0
  681. package/dist/schema/nodes/downspout.d.ts.map +1 -1
  682. package/dist/schema/nodes/elevator.d.ts +5 -0
  683. package/dist/schema/nodes/elevator.d.ts.map +1 -1
  684. package/dist/schema/nodes/eyebrow-vent.d.ts +5 -0
  685. package/dist/schema/nodes/eyebrow-vent.d.ts.map +1 -1
  686. package/dist/schema/nodes/fence.d.ts +5 -0
  687. package/dist/schema/nodes/fence.d.ts.map +1 -1
  688. package/dist/schema/nodes/guide.d.ts +14 -0
  689. package/dist/schema/nodes/guide.d.ts.map +1 -1
  690. package/dist/schema/nodes/guide.js +2 -0
  691. package/dist/schema/nodes/gutter.d.ts +5 -0
  692. package/dist/schema/nodes/gutter.d.ts.map +1 -1
  693. package/dist/schema/nodes/item.d.ts +71 -0
  694. package/dist/schema/nodes/item.d.ts.map +1 -1
  695. package/dist/schema/nodes/item.js +5 -1
  696. package/dist/schema/nodes/level.d.ts +1 -1
  697. package/dist/schema/nodes/level.d.ts.map +1 -1
  698. package/dist/schema/nodes/opening-types.d.ts +13 -0
  699. package/dist/schema/nodes/opening-types.d.ts.map +1 -1
  700. package/dist/schema/nodes/opening-types.js +8 -1
  701. package/dist/schema/nodes/railing-wall.d.ts +112 -0
  702. package/dist/schema/nodes/railing-wall.d.ts.map +1 -0
  703. package/dist/schema/nodes/railing-wall.js +160 -0
  704. package/dist/schema/nodes/ridge-vent.d.ts +5 -0
  705. package/dist/schema/nodes/ridge-vent.d.ts.map +1 -1
  706. package/dist/schema/nodes/roof-segment-resize.d.ts.map +1 -1
  707. package/dist/schema/nodes/roof-segment-resize.js +2 -2
  708. package/dist/schema/nodes/roof-segment.d.ts +226 -1
  709. package/dist/schema/nodes/roof-segment.d.ts.map +1 -1
  710. package/dist/schema/nodes/roof-segment.js +97 -12
  711. package/dist/schema/nodes/roof-types.d.ts +11 -0
  712. package/dist/schema/nodes/roof-types.d.ts.map +1 -1
  713. package/dist/schema/nodes/roof-types.js +6 -0
  714. package/dist/schema/nodes/roof.d.ts +60 -0
  715. package/dist/schema/nodes/roof.d.ts.map +1 -1
  716. package/dist/schema/nodes/roof.js +4 -0
  717. package/dist/schema/nodes/shelf.d.ts +5 -0
  718. package/dist/schema/nodes/shelf.d.ts.map +1 -1
  719. package/dist/schema/nodes/site.d.ts +80 -0
  720. package/dist/schema/nodes/site.d.ts.map +1 -1
  721. package/dist/schema/nodes/site.js +7 -0
  722. package/dist/schema/nodes/skylight.d.ts +10 -0
  723. package/dist/schema/nodes/skylight.d.ts.map +1 -1
  724. package/dist/schema/nodes/slab.d.ts +137 -0
  725. package/dist/schema/nodes/slab.d.ts.map +1 -1
  726. package/dist/schema/nodes/slab.js +3 -0
  727. package/dist/schema/nodes/solar-panel.d.ts +10 -0
  728. package/dist/schema/nodes/solar-panel.d.ts.map +1 -1
  729. package/dist/schema/nodes/stair-segment.d.ts +5 -0
  730. package/dist/schema/nodes/stair-segment.d.ts.map +1 -1
  731. package/dist/schema/nodes/stair-structure.d.ts +69 -0
  732. package/dist/schema/nodes/stair-structure.d.ts.map +1 -0
  733. package/dist/schema/nodes/stair-structure.js +39 -0
  734. package/dist/schema/nodes/stair.d.ts +46 -0
  735. package/dist/schema/nodes/stair.d.ts.map +1 -1
  736. package/dist/schema/nodes/stair.js +3 -0
  737. package/dist/schema/nodes/turbine-vent.d.ts +5 -0
  738. package/dist/schema/nodes/turbine-vent.d.ts.map +1 -1
  739. package/dist/schema/nodes/wall.d.ts +136 -2
  740. package/dist/schema/nodes/wall.d.ts.map +1 -1
  741. package/dist/schema/nodes/wall.js +48 -6
  742. package/dist/schema/nodes/window.d.ts +66 -1
  743. package/dist/schema/nodes/window.d.ts.map +1 -1
  744. package/dist/schema/nodes/window.js +50 -5
  745. package/dist/schema/nodes/zone.d.ts +68 -0
  746. package/dist/schema/nodes/zone.d.ts.map +1 -1
  747. package/dist/schema/nodes/zone.js +32 -0
  748. package/dist/schema/scene-material.d.ts +5 -0
  749. package/dist/schema/scene-material.d.ts.map +1 -1
  750. package/dist/schema/types.d.ts +1080 -4
  751. package/dist/schema/types.d.ts.map +1 -1
  752. package/dist/schema/types.js +2 -0
  753. package/dist/schema/wall-type.d.ts +95 -0
  754. package/dist/schema/wall-type.d.ts.map +1 -0
  755. package/dist/schema/wall-type.js +32 -0
  756. package/dist/services/index.d.ts +1 -1
  757. package/dist/services/index.d.ts.map +1 -1
  758. package/dist/services/index.js +1 -1
  759. package/dist/services/movement.d.ts +7 -0
  760. package/dist/services/movement.d.ts.map +1 -1
  761. package/dist/services/movement.js +13 -0
  762. package/dist/services/port-connectivity.d.ts +15 -6
  763. package/dist/services/port-connectivity.d.ts.map +1 -1
  764. package/dist/services/port-connectivity.js +83 -17
  765. package/dist/services/roof-bearing.d.ts.map +1 -1
  766. package/dist/services/roof-bearing.js +8 -4
  767. package/dist/services/roof-level.d.ts.map +1 -1
  768. package/dist/services/roof-level.js +4 -3
  769. package/dist/services/roof-move.d.ts.map +1 -1
  770. package/dist/services/roof-move.js +13 -7
  771. package/dist/services/storey.d.ts +6 -1
  772. package/dist/services/storey.d.ts.map +1 -1
  773. package/dist/services/storey.js +24 -10
  774. package/dist/spatial/usage-field/beds.d.ts +51 -0
  775. package/dist/spatial/usage-field/beds.d.ts.map +1 -0
  776. package/dist/spatial/usage-field/beds.js +346 -0
  777. package/dist/spatial/usage-field/blocked.d.ts +28 -0
  778. package/dist/spatial/usage-field/blocked.d.ts.map +1 -0
  779. package/dist/spatial/usage-field/blocked.js +185 -0
  780. package/dist/spatial/usage-field/boxes.d.ts +17 -0
  781. package/dist/spatial/usage-field/boxes.d.ts.map +1 -0
  782. package/dist/spatial/usage-field/boxes.js +82 -0
  783. package/dist/spatial/usage-field/catalogue-shapes.d.ts +3 -0
  784. package/dist/spatial/usage-field/catalogue-shapes.d.ts.map +1 -0
  785. package/dist/spatial/usage-field/catalogue-shapes.js +257 -0
  786. package/dist/spatial/usage-field/catalogue.d.ts +6 -0
  787. package/dist/spatial/usage-field/catalogue.d.ts.map +1 -0
  788. package/dist/spatial/usage-field/catalogue.js +11 -0
  789. package/dist/spatial/usage-field/clash.d.ts +40 -0
  790. package/dist/spatial/usage-field/clash.d.ts.map +1 -0
  791. package/dist/spatial/usage-field/clash.js +187 -0
  792. package/dist/spatial/usage-field/door-stairs.d.ts +18 -0
  793. package/dist/spatial/usage-field/door-stairs.d.ts.map +1 -0
  794. package/dist/spatial/usage-field/door-stairs.js +129 -0
  795. package/dist/spatial/usage-field/entry-way.d.ts +14 -0
  796. package/dist/spatial/usage-field/entry-way.d.ts.map +1 -0
  797. package/dist/spatial/usage-field/entry-way.js +219 -0
  798. package/dist/spatial/usage-field/fences.d.ts +18 -0
  799. package/dist/spatial/usage-field/fences.d.ts.map +1 -0
  800. package/dist/spatial/usage-field/fences.js +253 -0
  801. package/dist/spatial/usage-field/field.d.ts +44 -0
  802. package/dist/spatial/usage-field/field.d.ts.map +1 -0
  803. package/dist/spatial/usage-field/field.js +145 -0
  804. package/dist/spatial/usage-field/findings.d.ts +76 -0
  805. package/dist/spatial/usage-field/findings.d.ts.map +1 -0
  806. package/dist/spatial/usage-field/findings.js +252 -0
  807. package/dist/spatial/usage-field/fixtures.d.ts +18 -0
  808. package/dist/spatial/usage-field/fixtures.d.ts.map +1 -0
  809. package/dist/spatial/usage-field/fixtures.js +160 -0
  810. package/dist/spatial/usage-field/flag.d.ts +10 -0
  811. package/dist/spatial/usage-field/flag.d.ts.map +1 -0
  812. package/dist/spatial/usage-field/flag.js +12 -0
  813. package/dist/spatial/usage-field/floors.d.ts +13 -0
  814. package/dist/spatial/usage-field/floors.d.ts.map +1 -0
  815. package/dist/spatial/usage-field/floors.js +36 -0
  816. package/dist/spatial/usage-field/index.d.ts +7 -0
  817. package/dist/spatial/usage-field/index.d.ts.map +1 -0
  818. package/dist/spatial/usage-field/index.js +5 -0
  819. package/dist/spatial/usage-field/items.d.ts +38 -0
  820. package/dist/spatial/usage-field/items.d.ts.map +1 -0
  821. package/dist/spatial/usage-field/items.js +261 -0
  822. package/dist/spatial/usage-field/labels.d.ts +8 -0
  823. package/dist/spatial/usage-field/labels.d.ts.map +1 -0
  824. package/dist/spatial/usage-field/labels.js +14 -0
  825. package/dist/spatial/usage-field/level-field.d.ts +47 -0
  826. package/dist/spatial/usage-field/level-field.d.ts.map +1 -0
  827. package/dist/spatial/usage-field/level-field.js +96 -0
  828. package/dist/spatial/usage-field/measure.d.ts +324 -0
  829. package/dist/spatial/usage-field/measure.d.ts.map +1 -0
  830. package/dist/spatial/usage-field/measure.js +458 -0
  831. package/dist/spatial/usage-field/obstacles.d.ts +63 -0
  832. package/dist/spatial/usage-field/obstacles.d.ts.map +1 -0
  833. package/dist/spatial/usage-field/obstacles.js +215 -0
  834. package/dist/spatial/usage-field/openings.d.ts +12 -0
  835. package/dist/spatial/usage-field/openings.d.ts.map +1 -0
  836. package/dist/spatial/usage-field/openings.js +162 -0
  837. package/dist/spatial/usage-field/path.d.ts +48 -0
  838. package/dist/spatial/usage-field/path.d.ts.map +1 -0
  839. package/dist/spatial/usage-field/path.js +354 -0
  840. package/dist/spatial/usage-field/pieces.d.ts +27 -0
  841. package/dist/spatial/usage-field/pieces.d.ts.map +1 -0
  842. package/dist/spatial/usage-field/pieces.js +89 -0
  843. package/dist/spatial/usage-field/shapes.d.ts +18 -0
  844. package/dist/spatial/usage-field/shapes.d.ts.map +1 -0
  845. package/dist/spatial/usage-field/shapes.js +92 -0
  846. package/dist/spatial/usage-field/stairs.d.ts +23 -0
  847. package/dist/spatial/usage-field/stairs.d.ts.map +1 -0
  848. package/dist/spatial/usage-field/stairs.js +163 -0
  849. package/dist/spatial/usage-field/support.d.ts +24 -0
  850. package/dist/spatial/usage-field/support.d.ts.map +1 -0
  851. package/dist/spatial/usage-field/support.js +46 -0
  852. package/dist/spatial/usage-field/swings.d.ts +847 -0
  853. package/dist/spatial/usage-field/swings.d.ts.map +1 -0
  854. package/dist/spatial/usage-field/swings.js +427 -0
  855. package/dist/spatial/usage-field/types.d.ts +65 -0
  856. package/dist/spatial/usage-field/types.d.ts.map +1 -0
  857. package/dist/spatial/usage-field/types.js +1 -0
  858. package/dist/spatial/usage-field/walls.d.ts +1059 -0
  859. package/dist/spatial/usage-field/walls.d.ts.map +1 -0
  860. package/dist/spatial/usage-field/walls.js +180 -0
  861. package/dist/spatial/usage-field/way-in.d.ts +26 -0
  862. package/dist/spatial/usage-field/way-in.d.ts.map +1 -0
  863. package/dist/spatial/usage-field/way-in.js +113 -0
  864. package/dist/store/actions/node-actions.d.ts +1467 -664
  865. package/dist/store/actions/node-actions.d.ts.map +1 -1
  866. package/dist/store/actions/node-actions.js +65 -21
  867. package/dist/store/derived-node-guard.d.ts +10 -2
  868. package/dist/store/derived-node-guard.d.ts.map +1 -1
  869. package/dist/store/derived-node-guard.js +33 -12
  870. package/dist/store/document-settling.d.ts +9 -0
  871. package/dist/store/document-settling.d.ts.map +1 -0
  872. package/dist/store/document-settling.js +22 -0
  873. package/dist/store/history-control.d.ts +19 -10
  874. package/dist/store/history-control.d.ts.map +1 -1
  875. package/dist/store/history-control.js +176 -127
  876. package/dist/store/history-drafts.d.ts.map +1 -1
  877. package/dist/store/history-drafts.js +21 -17
  878. package/dist/store/live-previews.d.ts +9 -0
  879. package/dist/store/live-previews.d.ts.map +1 -0
  880. package/dist/store/live-previews.js +19 -0
  881. package/dist/store/scene-annotations.d.ts +5409 -3807
  882. package/dist/store/scene-annotations.d.ts.map +1 -1
  883. package/dist/store/scene-environment.d.ts +33 -0
  884. package/dist/store/scene-environment.d.ts.map +1 -0
  885. package/dist/store/scene-environment.js +54 -0
  886. package/dist/store/scene-hydration.d.ts.map +1 -1
  887. package/dist/store/scene-hydration.js +41 -30
  888. package/dist/store/use-interactive.d.ts +9 -3
  889. package/dist/store/use-interactive.d.ts.map +1 -1
  890. package/dist/store/use-interactive.js +43 -11
  891. package/dist/store/use-live-node-overrides.d.ts.map +1 -1
  892. package/dist/store/use-live-node-overrides.js +3 -0
  893. package/dist/store/use-scene.d.ts +25 -0
  894. package/dist/store/use-scene.d.ts.map +1 -1
  895. package/dist/store/use-scene.js +408 -336
  896. package/dist/systems/document-reconcile.d.ts +40 -0
  897. package/dist/systems/document-reconcile.d.ts.map +1 -0
  898. package/dist/systems/document-reconcile.js +159 -0
  899. package/dist/systems/elevator/elevator-geometry.d.ts +25 -0
  900. package/dist/systems/elevator/elevator-geometry.d.ts.map +1 -1
  901. package/dist/systems/elevator/elevator-geometry.js +40 -8
  902. package/dist/systems/elevator/elevator-opening-sync.d.ts.map +1 -1
  903. package/dist/systems/elevator/elevator-opening-sync.js +4 -35
  904. package/dist/systems/elevator/elevator-opening-system.d.ts.map +1 -1
  905. package/dist/systems/elevator/elevator-opening-system.js +9 -24
  906. package/dist/systems/elevator/elevator-runtime.d.ts.map +1 -1
  907. package/dist/systems/elevator/elevator-runtime.js +95 -18
  908. package/dist/systems/elevator/elevator-service.d.ts.map +1 -1
  909. package/dist/systems/elevator/elevator-service.js +24 -4
  910. package/dist/systems/fence/guard-layout.d.ts +69 -0
  911. package/dist/systems/fence/guard-layout.d.ts.map +1 -0
  912. package/dist/systems/fence/guard-layout.js +194 -0
  913. package/dist/systems/owned-floor-openings.d.ts +13 -1
  914. package/dist/systems/owned-floor-openings.d.ts.map +1 -1
  915. package/dist/systems/owned-floor-openings.js +58 -2
  916. package/dist/systems/reconcile-owned-floor-openings.d.ts +3 -1
  917. package/dist/systems/reconcile-owned-floor-openings.d.ts.map +1 -1
  918. package/dist/systems/reconcile-owned-floor-openings.js +4 -4
  919. package/dist/systems/roof/roof-elevation-system.d.ts.map +1 -1
  920. package/dist/systems/roof/roof-elevation-system.js +8 -26
  921. package/dist/systems/roof/roof-elevation.d.ts +16 -1
  922. package/dist/systems/roof/roof-elevation.d.ts.map +1 -1
  923. package/dist/systems/roof/roof-elevation.js +87 -5
  924. package/dist/systems/roof/roof-footprint.d.ts +42 -1
  925. package/dist/systems/roof/roof-footprint.d.ts.map +1 -1
  926. package/dist/systems/roof/roof-footprint.js +160 -4
  927. package/dist/systems/slab/__fixtures__/floor-step.d.ts +2714 -1481
  928. package/dist/systems/slab/__fixtures__/floor-step.d.ts.map +1 -1
  929. package/dist/systems/slab/__fixtures__/raised-room.d.ts +3815 -2565
  930. package/dist/systems/slab/__fixtures__/raised-room.d.ts.map +1 -1
  931. package/dist/systems/stair/stair-clearance.d.ts +7 -0
  932. package/dist/systems/stair/stair-clearance.d.ts.map +1 -1
  933. package/dist/systems/stair/stair-clearance.js +31 -11
  934. package/dist/systems/stair/stair-construction.d.ts +8 -3
  935. package/dist/systems/stair/stair-construction.d.ts.map +1 -1
  936. package/dist/systems/stair/stair-construction.js +55 -4
  937. package/dist/systems/stair/stair-opening-preview.d.ts +1630 -829
  938. package/dist/systems/stair/stair-opening-preview.d.ts.map +1 -1
  939. package/dist/systems/stair/stair-opening-system.d.ts.map +1 -1
  940. package/dist/systems/stair/stair-opening-system.js +18 -34
  941. package/dist/systems/stair/stair-presets.d.ts +36 -0
  942. package/dist/systems/stair/stair-presets.d.ts.map +1 -1
  943. package/dist/systems/stair/stair-rise-query.d.ts.map +1 -1
  944. package/dist/systems/stair/stair-rise-query.js +3 -2
  945. package/dist/systems/stair/stair-rise.d.ts.map +1 -1
  946. package/dist/systems/stair/stair-rise.js +6 -0
  947. package/dist/systems/stair/stair-sizing.d.ts +42 -11
  948. package/dist/systems/stair/stair-sizing.d.ts.map +1 -1
  949. package/dist/systems/stair/stair-sizing.js +10 -1
  950. package/dist/systems/stair/stair-structure.d.ts +277 -0
  951. package/dist/systems/stair/stair-structure.d.ts.map +1 -0
  952. package/dist/systems/stair/stair-structure.js +496 -0
  953. package/dist/systems/wall/wall-assembly.d.ts +84 -6
  954. package/dist/systems/wall/wall-assembly.d.ts.map +1 -1
  955. package/dist/systems/wall/wall-assembly.js +204 -5
  956. package/dist/systems/wall/wall-curve.d.ts +10 -0
  957. package/dist/systems/wall/wall-curve.d.ts.map +1 -1
  958. package/dist/systems/wall/wall-curve.js +38 -0
  959. package/dist/systems/wall/wall-finish.d.ts +38 -2
  960. package/dist/systems/wall/wall-finish.d.ts.map +1 -1
  961. package/dist/systems/wall/wall-finish.js +70 -2
  962. package/dist/systems/wall/wall-footprint.js +2 -2
  963. package/dist/systems/wall/wall-frame.d.ts.map +1 -1
  964. package/dist/systems/wall/wall-frame.js +8 -0
  965. package/dist/systems/wall/wall-merge.d.ts +9 -1
  966. package/dist/systems/wall/wall-merge.d.ts.map +1 -1
  967. package/dist/systems/wall/wall-merge.js +66 -13
  968. package/dist/systems/wall/wall-mitering.d.ts +1 -0
  969. package/dist/systems/wall/wall-mitering.d.ts.map +1 -1
  970. package/dist/systems/wall/wall-mitering.js +152 -52
  971. package/dist/systems/wall/wall-move.d.ts +23 -6
  972. package/dist/systems/wall/wall-move.d.ts.map +1 -1
  973. package/dist/systems/wall/wall-move.js +65 -0
  974. package/dist/systems/wall/wall-top.d.ts +11 -4
  975. package/dist/systems/wall/wall-top.d.ts.map +1 -1
  976. package/dist/systems/wall/wall-top.js +28 -7
  977. package/dist/systems/wall/wall-topology.d.ts +32 -1
  978. package/dist/systems/wall/wall-topology.d.ts.map +1 -1
  979. package/dist/systems/wall/wall-topology.js +137 -11
  980. package/dist/systems/wall/wall-trim-profiles.d.ts +12 -0
  981. package/dist/systems/wall/wall-trim-profiles.d.ts.map +1 -0
  982. package/dist/systems/wall/wall-trim-profiles.js +191 -0
  983. package/dist/utils/ensure-scene-openings.d.ts +4663 -3061
  984. package/dist/utils/ensure-scene-openings.d.ts.map +1 -1
  985. package/dist/utils/floor-piece-adoption.d.ts +5 -0
  986. package/dist/utils/floor-piece-adoption.d.ts.map +1 -1
  987. package/dist/utils/floor-plate-migration.d.ts +3372 -2571
  988. package/dist/utils/floor-plate-migration.d.ts.map +1 -1
  989. package/dist/utils/measurement-format.d.ts +27 -0
  990. package/dist/utils/measurement-format.d.ts.map +1 -0
  991. package/dist/utils/measurement-format.js +143 -0
  992. package/dist/utils/owned-floor-opening-migration.d.ts +1629 -828
  993. package/dist/utils/owned-floor-opening-migration.d.ts.map +1 -1
  994. package/dist/utils/reconcile-structure-on-load.d.ts +2308 -1507
  995. package/dist/utils/reconcile-structure-on-load.d.ts.map +1 -1
  996. package/dist/utils/structure-id.d.ts.map +1 -1
  997. package/dist/utils/structure-id.js +4 -0
  998. package/dist/validation/validate-build-json.d.ts.map +1 -1
  999. package/dist/validation/validate-build-json.js +3 -1
  1000. package/package.json +22 -5
  1001. package/dist/lib/generic-foundation.d.ts +0 -40
  1002. package/dist/lib/generic-foundation.d.ts.map +0 -1
  1003. package/dist/lib/generic-foundation.js +0 -200
@@ -1,4 +1,4 @@
1
- import type { AnyNode, AnyNodeId, WallNode } from '../schema/index.js';
1
+ import type { AnyNode, AnyNodeId, SeparatorNode, WallNode } from '../schema/index.js';
2
2
  import type { ZoneNode } from '../schema/nodes/zone.js';
3
3
  import { type FloorOpeningIndex } from './floor-opening-intent.js';
4
4
  import { type Polygon, type Ring } from './polygon-boolean.js';
@@ -33,31 +33,44 @@ export type LevelStructureSnapshot = {
33
33
  rooms: StructureRoom[];
34
34
  };
35
35
  /**
36
- * The rooms that are outside: without a ceiling, and left without crossing a wall, through a
37
- * separator no room stands behind or into another such room. A porch made a room for its floor
38
- * left its wall with no outside: the front door faced the hall. A room that only lost its
39
- * ceiling is walled in and a kitchen open to a terrace keeps its ceiling, so both stay inside; so
40
- * does a courtyard walled on every side, a limit of this rule.
36
+ * The rooms closed off outside the house, and what they are by default: open to the outside across
37
+ * invisible walls or railings nothing stands behind, along at least as much of their edge as walls
38
+ * close (a porch on the front, or in a corner of the house). Closed with invisible walls, a porch;
39
+ * fenced with railings alone, a deck. A room walled on three sides and open on the fourth (a
40
+ * kitchen open to a terrace, a recessed porch) is not one of them. `lengthOf` is a wall's or a
41
+ * separator's length; `railingIds` the railing walls.
42
+ */
43
+ export declare function outsideRoomTypes(rooms: readonly {
44
+ spans: readonly BoundarySpan[];
45
+ }[], lengthOf: (boundaryId: string) => number, railingIds?: ReadonlySet<string>): Map<string, 'porch' | 'deck'>;
46
+ /**
47
+ * The rooms that are outside: a porch, deck or patio (`roomType`, outdoors whatever covers it), and
48
+ * a room without a ceiling left without crossing a wall, through a separator no room stands behind
49
+ * or into another such room. A porch made a room for its floor left its wall with no outside: the
50
+ * front door faced the hall. A room that only lost its ceiling is walled in and a kitchen open to a
51
+ * terrace keeps its ceiling, so both stay inside; so does a courtyard walled on every side, a limit
52
+ * of this rule.
41
53
  */
42
54
  export declare function outdoorRoomIds(rooms: readonly {
43
55
  spans: readonly BoundarySpan[];
44
56
  hasCeiling: boolean;
57
+ outdoor?: boolean;
45
58
  }[]): Set<string>;
46
59
  /** A wall face is inside when an indoor room stands on it; an outdoor room's face is outside. */
47
60
  export declare function classifyWallSides(wall: WallNode, spans: readonly BoundarySpan[], outdoor?: ReadonlySet<string>): Pick<WallNode, 'frontSide' | 'backSide'>;
48
61
  export declare function reconcileLevelStructure(input: Parameters<typeof planLevelStructure>[0]): ReturnType<typeof planLevelStructure>;
49
- declare function planLevelStructure({ levelId, nodes, mintId, openingIndex, }: {
62
+ declare function planLevelStructure({ levelId, nodes, previousNodes, mintId, openingIndex, }: {
50
63
  levelId: string;
51
64
  nodes: SceneNodes;
52
65
  previousNodes?: SceneNodes;
53
- mintId: (kind: 'zone' | 'ceiling' | 'slab' | 'separator') => string;
66
+ mintId: (kind: 'zone' | 'ceiling' | 'slab' | 'separator' | 'column' | 'beam') => string;
54
67
  openingIndex?: FloorOpeningIndex;
55
68
  }): {
56
69
  patches: NodePatch[];
57
70
  snapshot: LevelStructureSnapshot;
58
71
  events: StructureEvent[];
59
72
  };
60
- export declare function createLevelStructurePreview(levelId: string, nodes: SceneNodes): (walls: readonly WallNode[]) => {
73
+ export declare function createLevelStructurePreview(levelId: string, nodes: SceneNodes): (walls: readonly WallNode[], separators?: readonly SeparatorNode[]) => {
61
74
  op: 'update';
62
75
  id: AnyNodeId;
63
76
  data: Partial<AnyNode>;
@@ -1 +1 @@
1
- {"version":3,"file":"structure-kernel.d.ts","sourceRoot":"","sources":["../../src/lib/structure-kernel.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"structure-kernel.d.ts","sourceRoot":"","sources":["../../src/lib/structure-kernel.ts"],"names":[],"mappings":"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"}
@@ -12,9 +12,12 @@ import { buildFloorPlates, warnPlateFailure } from './floor-plates.js';
12
12
  import { floorRoomFaces } from './floor-room-faces.js';
13
13
  import { remapFloorStepOverrideKeys } from './floor-step-finish.js';
14
14
  import { newZone } from './new-zone.js';
15
+ import { isOutdoorRoom, nextOutdoorRoomName, OUTDOOR_ROOM_DEFAULTS } from './outdoor-room.js';
15
16
  import { replacementPlateFor } from './plate-reference.js';
16
17
  import { area, containsPoint, difference, intersection, union, } from './polygon-boolean.js';
17
18
  import { polygonInteriorPoint } from './polygon-label.js';
19
+ import { reconcilePorchFraming } from './porch-framing-sync.js';
20
+ import { railingFencedRoomIds, railingWallIds } from './railing-rooms.js';
18
21
  import { pointFromTuple } from './room-graph.js';
19
22
  import { roomNameAllocator } from './room-name.js';
20
23
  import { adoptableFace, compareAdoptionFits, compareExistingRooms, existingRoomFace, zoneFaceFits, } from './room-zone-adoption.js';
@@ -61,14 +64,42 @@ function equal(a, b) {
61
64
  /** Span overlap below this (a fraction of the boundary) is a shared endpoint, not a shared edge. */
62
65
  const SPAN_OVERLAP = 1e-6;
63
66
  /**
64
- * The rooms that are outside: without a ceiling, and left without crossing a wall, through a
65
- * separator no room stands behind or into another such room. A porch made a room for its floor
66
- * left its wall with no outside: the front door faced the hall. A room that only lost its
67
- * ceiling is walled in and a kitchen open to a terrace keeps its ceiling, so both stay inside; so
68
- * does a courtyard walled on every side, a limit of this rule.
67
+ * The rooms closed off outside the house, and what they are by default: open to the outside across
68
+ * invisible walls or railings nothing stands behind, along at least as much of their edge as walls
69
+ * close (a porch on the front, or in a corner of the house). Closed with invisible walls, a porch;
70
+ * fenced with railings alone, a deck. A room walled on three sides and open on the fourth (a
71
+ * kitchen open to a terrace, a recessed porch) is not one of them. `lengthOf` is a wall's or a
72
+ * separator's length; `railingIds` the railing walls.
69
73
  */
70
- export function outdoorRoomIds(rooms) {
71
- const separatorSpans = rooms.flatMap((room) => room.spans.filter((span) => span.kind === 'separator'));
74
+ export function outsideRoomTypes(rooms, lengthOf, railingIds = new Set()) {
75
+ const railing = (span) => span.kind === 'wall' && railingIds.has(span.boundaryId);
76
+ const { exposed } = openLineExposure(rooms, (span) => span.kind === 'separator' || railing(span));
77
+ const spanLength = (span) => (span.t1 - span.t0) * lengthOf(span.boundaryId);
78
+ const types = new Map();
79
+ for (const room of rooms) {
80
+ let open = 0;
81
+ let walled = 0;
82
+ let invisible = false;
83
+ for (const span of room.spans) {
84
+ if (span.kind === 'wall' && !railing(span))
85
+ walled += spanLength(span);
86
+ else if (exposed(span)) {
87
+ open += spanLength(span);
88
+ invisible ||= span.kind === 'separator';
89
+ }
90
+ }
91
+ if (room.spans[0] && open > 0 && open >= walled - 1e-6)
92
+ types.set(room.spans[0].roomId, invisible ? 'porch' : 'deck');
93
+ }
94
+ return types;
95
+ }
96
+ /** Each separator span's spans across it, and whether any stretch of it has none. */
97
+ function separatorExposure(rooms) {
98
+ return openLineExposure(rooms, (span) => span.kind === 'separator');
99
+ }
100
+ /** Each open line's span (`isOpen`): the spans across it, and whether any stretch of it has none. */
101
+ function openLineExposure(rooms, isOpen) {
102
+ const separatorSpans = rooms.flatMap((room) => room.spans.filter(isOpen));
72
103
  const across = (span) => separatorSpans
73
104
  .filter((other) => other.boundaryId === span.boundaryId &&
74
105
  other.face !== span.face &&
@@ -83,8 +114,25 @@ export function outdoorRoomIds(rooms) {
83
114
  }
84
115
  return reach < span.t1 - SPAN_OVERLAP;
85
116
  };
86
- const open = new Map(rooms.flatMap((room) => !room.hasCeiling && room.spans[0] ? [[room.spans[0].roomId, room.spans]] : []));
87
- const queue = [...open].flatMap(([id, spans]) => spans.some((span) => span.kind === 'separator' && exposed(span)) ? [id] : []);
117
+ return { across, exposed };
118
+ }
119
+ /**
120
+ * The rooms that are outside: a porch, deck or patio (`roomType`, outdoors whatever covers it), and
121
+ * a room without a ceiling left without crossing a wall, through a separator no room stands behind
122
+ * or into another such room. A porch made a room for its floor left its wall with no outside: the
123
+ * front door faced the hall. A room that only lost its ceiling is walled in and a kitchen open to a
124
+ * terrace keeps its ceiling, so both stay inside; so does a courtyard walled on every side, a limit
125
+ * of this rule.
126
+ */
127
+ export function outdoorRoomIds(rooms) {
128
+ const { across, exposed } = separatorExposure(rooms);
129
+ const open = new Map(rooms.flatMap((room) => (!room.hasCeiling || room.outdoor) && room.spans[0]
130
+ ? [[room.spans[0].roomId, room.spans]]
131
+ : []));
132
+ const declared = new Set(rooms.flatMap((room) => (room.outdoor && room.spans[0] ? [room.spans[0].roomId] : [])));
133
+ const queue = [...open].flatMap(([id, spans]) => declared.has(id) || spans.some((span) => span.kind === 'separator' && exposed(span))
134
+ ? [id]
135
+ : []);
88
136
  const outdoor = new Set(queue);
89
137
  for (let id = queue.pop(); id !== undefined; id = queue.pop())
90
138
  for (const span of open.get(id))
@@ -122,7 +170,7 @@ export function reconcileLevelStructure(input) {
122
170
  return { patches: [], snapshot: { levelId: input.levelId, rooms: [] }, events: [] };
123
171
  }
124
172
  }
125
- function planLevelStructure({ levelId, nodes, mintId, openingIndex, }) {
173
+ function planLevelStructure({ levelId, nodes, previousNodes, mintId, openingIndex, }) {
126
174
  const snapshot = { levelId, rooms: [] };
127
175
  const events = [];
128
176
  const level = nodes[levelId];
@@ -200,6 +248,14 @@ function planLevelStructure({ levelId, nodes, mintId, openingIndex, }) {
200
248
  const zoneByFace = new Map();
201
249
  const retiredTo = new Map();
202
250
  const nextRoomName = roomNameAllocator(allZones);
251
+ // A new room closed off outside the house is a porch, or a deck when railings fence it
252
+ // (`lib/outdoor-room`).
253
+ const boundaryLengths = new Map([...walls, ...separators].map((boundary) => [
254
+ boundary.id,
255
+ Math.hypot(boundary.end[0] - boundary.start[0], boundary.end[1] - boundary.start[1]),
256
+ ]));
257
+ const outsideTypes = outsideRoomTypes(faces, (id) => boundaryLengths.get(id) ?? 0, railingWallIds(walls));
258
+ const roomNames = allZones.map((zone) => zone.name);
203
259
  faces.forEach((face, index) => {
204
260
  const rooms = zones
205
261
  .filter((zone) => preferred.get(zone.id) === index && !adoptionFits.has(zone.id))
@@ -219,20 +275,37 @@ function planLevelStructure({ levelId, nodes, mintId, openingIndex, }) {
219
275
  .sort((a, b) => scores.get(b.id)[index] - scores.get(a.id)[index] || compareIds(a.id, b.id))[0];
220
276
  if (source)
221
277
  sourceByFace.set(index, source);
278
+ const outside = !survivor && !source && face.spans[0] ? outsideTypes.get(face.spans[0].roomId) : undefined;
222
279
  const zone = survivor ??
223
- newZone({
224
- id: mintId('zone'),
225
- parentId: levelId,
226
- name: nextRoomName(),
227
- polygon: face.polygon.outer,
228
- floor: source?.floor,
229
- wallMaterial: source?.wallMaterial,
230
- floorStepFinish: source?.floorStepFinish,
231
- floorStepOverrides: source?.floorStepOverrides,
232
- floorEdgeFinish: source?.floorEdgeFinish,
233
- hasFloor: source?.hasFloor,
234
- hasCeiling: source?.hasCeiling,
235
- });
280
+ (outside
281
+ ? newZone({
282
+ id: mintId('zone'),
283
+ parentId: levelId,
284
+ name: nextOutdoorRoomName(outside, roomNames),
285
+ polygon: face.polygon.outer,
286
+ roomType: outside,
287
+ floor: {
288
+ drop: OUTDOOR_ROOM_DEFAULTS[outside].drop,
289
+ finish: OUTDOOR_ROOM_DEFAULTS[outside].finish,
290
+ },
291
+ ...(OUTDOOR_ROOM_DEFAULTS[outside].covered ? {} : { hasCeiling: false }),
292
+ })
293
+ : newZone({
294
+ id: mintId('zone'),
295
+ parentId: levelId,
296
+ name: nextRoomName(),
297
+ polygon: face.polygon.outer,
298
+ floor: source?.floor,
299
+ wallMaterial: source?.wallMaterial,
300
+ floorStepFinish: source?.floorStepFinish,
301
+ floorStepOverrides: source?.floorStepOverrides,
302
+ floorEdgeFinish: source?.floorEdgeFinish,
303
+ hasFloor: source?.hasFloor,
304
+ hasCeiling: source?.hasCeiling,
305
+ roomType: source?.roomType,
306
+ }));
307
+ if (outside)
308
+ roomNames.push(zone.name);
236
309
  const seed = zone.seed && containsPoint([face.polygon], zone.seed)
237
310
  ? zone.seed
238
311
  : polygonInteriorPoint({ polygon: face.polygon.outer, holes: face.polygon.holes }, !zone.seed);
@@ -447,6 +520,7 @@ function planLevelStructure({ levelId, nodes, mintId, openingIndex, }) {
447
520
  material: template?.material,
448
521
  materialPreset: template?.materialPreset,
449
522
  slots: template?.slots,
523
+ buildUp: template?.buildUp,
450
524
  visible: template?.visible,
451
525
  });
452
526
  const updated = {
@@ -594,11 +668,36 @@ function planLevelStructure({ levelId, nodes, mintId, openingIndex, }) {
594
668
  for (const components of ceilingComponentsByFace.values())
595
669
  for (const ceiling of components)
596
670
  ceiling.children = [...new Set(ceiling.children)].sort();
671
+ // A covered porch's posts and beam (`lib/porch-framing-sync`).
672
+ const porchFraming = reconcilePorchFraming({
673
+ levelId,
674
+ nodes,
675
+ previousNodes,
676
+ zones: [
677
+ ...new Map([...allZones, ...next.values()].flatMap((zone) => zone.type === 'zone' && !deleted.has(zone.id)
678
+ ? [[zone.id, (next.get(zone.id) ?? zone)]]
679
+ : [])).values(),
680
+ ],
681
+ plates: floorPlan.plates,
682
+ current: (id) => next.get(id) ?? nodes[id],
683
+ mintId,
684
+ });
685
+ for (const node of porchFraming.put)
686
+ put(node);
687
+ for (const id of porchFraming.delete)
688
+ deleted.add(id);
597
689
  const spans = snapshot.rooms.flatMap((room) => room.spans);
598
- const outdoor = outdoorRoomIds([...zoneByFace].map(([index, zone]) => ({
599
- spans: faces[index].spans,
600
- hasCeiling: (next.get(zone.id) ?? zone).hasCeiling !== false,
601
- })));
690
+ const outdoor = outdoorRoomIds([...zoneByFace].map(([index, zone]) => {
691
+ const current = (next.get(zone.id) ?? zone);
692
+ return {
693
+ spans: faces[index].spans,
694
+ hasCeiling: current.hasCeiling !== false,
695
+ outdoor: isOutdoorRoom(current),
696
+ };
697
+ }));
698
+ // A room a railing fences off from the outside (a deck's guard) is outside too.
699
+ for (const id of railingFencedRoomIds(spans, railingWallIds(walls)))
700
+ outdoor.add(id);
602
701
  for (const wall of walls)
603
702
  put({ ...wall, ...next.get(wall.id), ...classifyWallSides(wall, spans, outdoor) });
604
703
  for (const ceiling of allCeilings) {
@@ -706,7 +805,12 @@ export function createLevelStructurePreview(levelId, nodes) {
706
805
  let wallIds = new Set(Object.values(draft)
707
806
  .filter((node) => node.type === 'wall' && node.parentId === levelId)
708
807
  .map((node) => node.id));
709
- return (walls) => {
808
+ let separatorIds = new Set(Object.values(draft)
809
+ .filter((node) => node.type === 'separator' && node.parentId === levelId)
810
+ .map((node) => node.id));
811
+ // `separators`, when given, are the level's invisible walls as the gesture
812
+ // leaves them (an invisible-wall push); left out, the stored ones stand.
813
+ return (walls, separators) => {
710
814
  const currentIds = new Set();
711
815
  for (const wall of walls) {
712
816
  if (wall.parentId !== levelId)
@@ -720,6 +824,20 @@ export function createLevelStructurePreview(levelId, nodes) {
720
824
  if (!currentIds.has(id))
721
825
  delete draft[id];
722
826
  wallIds = currentIds;
827
+ if (separators) {
828
+ const current = new Set();
829
+ for (const separator of separators) {
830
+ if (separator.parentId !== levelId)
831
+ continue;
832
+ current.add(separator.id);
833
+ if (draft[separator.id] !== separator)
834
+ draft[separator.id] = separator;
835
+ }
836
+ for (const id of separatorIds)
837
+ if (!current.has(id))
838
+ delete draft[id];
839
+ separatorIds = current;
840
+ }
723
841
  let id = 0;
724
842
  // The stored surfaces are the committed reconciliation; only what the
725
843
  // moved walls reshape differs from them.
@@ -1,5 +1,5 @@
1
1
  import { type NodePatch, type SceneNodes, type StructureEvent } from './structure-kernel.js';
2
- export type StructureIdFactory = (kind: 'zone' | 'ceiling' | 'slab' | 'separator') => string;
2
+ export type StructureIdFactory = (kind: 'zone' | 'ceiling' | 'slab' | 'separator' | 'column' | 'beam') => string;
3
3
  export type SceneStructureInput = {
4
4
  nodes: SceneNodes;
5
5
  levelIds?: string[];
@@ -1 +1 @@
1
- {"version":3,"file":"structure-reconcile.d.ts","sourceRoot":"","sources":["../../src/lib/structure-reconcile.ts"],"names":[],"mappings":"AAWA,OAAO,EACL,KAAK,SAAS,EAEd,KAAK,UAAU,EACf,KAAK,cAAc,EACpB,MAAM,oBAAoB,CAAA;AAE3B,MAAM,MAAM,kBAAkB,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,WAAW,KAAK,MAAM,CAAA;AAC5F,MAAM,MAAM,mBAAmB,GAAG;IAChC,KAAK,EAAE,UAAU,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;IACnB,MAAM,EAAE,kBAAkB,CAAA;IAC1B,aAAa,CAAC,EAAE,UAAU,CAAA;CAC3B,CAAA;AACD,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,EAAE,UAAU,CAAA;IACjB,OAAO,EAAE,SAAS,EAAE,CAAA;IACpB,MAAM,EAAE,cAAc,EAAE,CAAA;CACzB,CAAA;AAyED,wBAAgB,uBAAuB,CAAC,EACtC,KAAK,EACL,QAAQ,EACR,MAAM,EACN,aAAa,GACd,EAAE,mBAAmB,GAAG,oBAAoB,CA+K5C"}
1
+ {"version":3,"file":"structure-reconcile.d.ts","sourceRoot":"","sources":["../../src/lib/structure-reconcile.ts"],"names":[],"mappings":"AAWA,OAAO,EACL,KAAK,SAAS,EAEd,KAAK,UAAU,EACf,KAAK,cAAc,EACpB,MAAM,oBAAoB,CAAA;AAG3B,MAAM,MAAM,kBAAkB,GAAG,CAC/B,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,WAAW,GAAG,QAAQ,GAAG,MAAM,KAChE,MAAM,CAAA;AACX,MAAM,MAAM,mBAAmB,GAAG;IAChC,KAAK,EAAE,UAAU,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;IACnB,MAAM,EAAE,kBAAkB,CAAA;IAC1B,aAAa,CAAC,EAAE,UAAU,CAAA;CAC3B,CAAA;AACD,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,EAAE,UAAU,CAAA;IACjB,OAAO,EAAE,SAAS,EAAE,CAAA;IACpB,MAAM,EAAE,cAAc,EAAE,CAAA;CACzB,CAAA;AAyED,wBAAgB,uBAAuB,CAAC,EACtC,KAAK,EACL,QAAQ,EACR,MAAM,EACN,aAAa,GACd,EAAE,mBAAmB,GAAG,oBAAoB,CAiL5C"}
@@ -3,6 +3,7 @@ import { createFloorOpeningIndex } from './floor-opening-intent.js';
3
3
  import { extractRooms, pointToTuple, sampleWallPointsForRoomDetection, WALL_JUNCTION_TOLERANCE, } from './room-graph.js';
4
4
  import { RoomTopologyIndex } from './room-topology-index.js';
5
5
  import { reconcileLevelStructure, } from './structure-kernel.js';
6
+ import { surfaceIntentZoneIds } from './surface-intent.js';
6
7
  function levelChildren(nodes, levelId) {
7
8
  return Object.values(nodes)
8
9
  .filter((node) => node.parentId === levelId)
@@ -79,13 +80,14 @@ export function reconcileSceneStructure({ nodes, levelIds, mintId, previousNodes
79
80
  return;
80
81
  const children = levelChildren(draft, levelId);
81
82
  const previousChildren = previousNodes ? levelChildren(previousNodes, levelId) : [];
83
+ const plates = children.filter((node) => node.type === 'slab');
82
84
  for (const surface of previousChildren) {
83
85
  if ((surface.type !== 'ceiling' && surface.type !== 'slab') ||
84
86
  surface.boundary !== 'auto' ||
85
87
  draft[surface.id])
86
88
  continue;
87
- const ids = surface.type === 'ceiling' ? [surface.zoneId] : (surface.zoneIds ?? []);
88
- for (const id of ids) {
89
+ // The rooms it was the floor or ceiling of: a porch on a plate of its own keeps its floor.
90
+ for (const id of surfaceIntentZoneIds(surface, plates)) {
89
91
  const zone = id ? draft[id] : undefined;
90
92
  if (zone?.type === 'zone')
91
93
  draft[zone.id] = {
@@ -169,9 +171,10 @@ export function reconcileSceneStructure({ nodes, levelIds, mintId, previousNodes
169
171
  if (metadata?.source !== 'floor-opening')
170
172
  return [{ hole, metadata: metadata ?? { source: 'manual' } }];
171
173
  const opening = metadata.openingId ? draft[metadata.openingId] : undefined;
174
+ // An owner's cut map is complete: a surface it no longer names must heal.
172
175
  return opening?.type === 'floor-opening' &&
173
- !opening.legacyPlateCuts?.[surface.id] &&
174
- !opening.legacyCeilingCuts?.[surface.id]
176
+ !opening.legacyPlateCuts &&
177
+ !opening.legacyCeilingCuts
175
178
  ? [{ hole, metadata }]
176
179
  : [];
177
180
  });
@@ -0,0 +1,10 @@
1
+ import type { AnyNode, CeilingNode, SlabNode } from '../schema/index.js';
2
+ /**
3
+ * The rooms whose construction a derived surface IS, among `plates` (the level's floor plates as
4
+ * they stand after the edit): a ceiling's room, and the rooms a plate is the floor of. A shared base
5
+ * plate also lists the rooms that stand on plates of their own (a porch or deck a step down, a raised
6
+ * platform), but it is not their floor, so losing it leaves theirs. Without this, deleting the house's
7
+ * plate took every porch and deck floor on the level with it.
8
+ */
9
+ export declare function surfaceIntentZoneIds(node: SlabNode | CeilingNode, plates: readonly AnyNode[]): string[];
10
+ //# sourceMappingURL=surface-intent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"surface-intent.d.ts","sourceRoot":"","sources":["../../src/lib/surface-intent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAE/D;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,QAAQ,GAAG,WAAW,EAC5B,MAAM,EAAE,SAAS,OAAO,EAAE,GACzB,MAAM,EAAE,CAaV"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * The rooms whose construction a derived surface IS, among `plates` (the level's floor plates as
3
+ * they stand after the edit): a ceiling's room, and the rooms a plate is the floor of. A shared base
4
+ * plate also lists the rooms that stand on plates of their own (a porch or deck a step down, a raised
5
+ * platform), but it is not their floor, so losing it leaves theirs. Without this, deleting the house's
6
+ * plate took every porch and deck floor on the level with it.
7
+ */
8
+ export function surfaceIntentZoneIds(node, plates) {
9
+ const ids = [
10
+ ...new Set(node.type === 'slab' ? (node.zoneIds ?? []) : node.zoneId ? [node.zoneId] : []),
11
+ ];
12
+ if (node.type !== 'slab' || node.plateRole !== 'base')
13
+ return ids;
14
+ const own = new Set(plates.flatMap((plate) => plate.type === 'slab' && plate.id !== node.id && plate.plateRole && plate.plateRole !== 'base'
15
+ ? (plate.zoneIds ?? [])
16
+ : []));
17
+ return ids.filter((id) => !own.has(id));
18
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"terrain-source.d.ts","sourceRoot":"","sources":["../../src/lib/terrain-source.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAEpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAGnD,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,4BAA4B,CAAA;AAEnC;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,GAAG;IAAE,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,IAAI,GAAG,SAAS,GACrE,YAAY,GAAG,IAAI,CAMrB"}
1
+ {"version":3,"file":"terrain-source.d.ts","sourceRoot":"","sources":["../../src/lib/terrain-source.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAGpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAGnD,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,4BAA4B,CAAA;AAEnC;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,GAAG;IAAE,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,IAAI,GAAG,SAAS,GACrE,YAAY,GAAG,IAAI,CAMrB"}
@@ -1,3 +1,4 @@
1
+ import { livePreviewsVisible } from '../store/live-previews.js';
1
2
  import useLiveTerrain from '../store/use-live-terrain.js';
2
3
  import { persistedTerrainFieldOf } from './terrain-source-persisted.js';
3
4
  export { commitTerrainField, persistedTerrainFieldOf, terrainFieldForEdit, } from './terrain-source-persisted.js';
@@ -18,7 +19,7 @@ export { commitTerrainField, persistedTerrainFieldOf, terrainFieldForEdit, } fro
18
19
  * showing a hill the raycast cannot hit.
19
20
  */
20
21
  export function terrainFieldOf(site) {
21
- if (site?.id) {
22
+ if (site?.id && livePreviewsVisible()) {
22
23
  const live = useLiveTerrain.getState().fieldOf(site.id);
23
24
  if (live)
24
25
  return live;
@@ -1 +1 @@
1
- {"version":3,"file":"wall-face-script.d.ts","sourceRoot":"","sources":["../../src/lib/wall-face-script.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EACP,sBAAsB,EAEtB,cAAc,EAGf,MAAM,WAAW,CAAA;AAClB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAEpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAenE,KAAK,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;AAEnD,kEAAkE;AAClE,MAAM,MAAM,YAAY,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAAA;AAE7E;;;;;;;GAOG;AACH,MAAM,MAAM,oBAAoB,GAAG;IACjC,OAAO,EAAE,YAAY,CAAA;IACrB,KAAK,EAAE,YAAY,EAAE,CAAA;IACrB,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAA;IACxB,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAKD,iGAAiG;AACjG,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,GAAG,MAAM,CAOnF;AAgID;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,QAAQ,EACd,QAAQ,CAAC,EAAE,MAAM,GAChB,oBAAoB,GAAG,IAAI,CAgC7B;AAED,0FAA0F;AAC1F,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,oBAAoB,GAAG,MAAM,CAI5E;AAED,mGAAmG;AACnG,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,sBAAsB,EAChC,MAAM,EAAE,oBAAoB,EAC5B,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,QAAQ,CAAC,EAAE,cAAc,GACxB,cAAc,CAMhB;AAKD;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,QAAQ,GACb;IAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GAAG,IAAI,CAYhF;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,MAAM,GACd,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAGzB;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,MAAM,EAAE,SAAS,CAAA;IACjB,IAAI,EAAE,2BAA2B,CAAA;IACjC,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,OAAO,GAAG,SAAS,EACzB,IAAI,EAAE,MAAM,GACX,oBAAoB,GAAG,SAAS,CAkBlC"}
1
+ {"version":3,"file":"wall-face-script.d.ts","sourceRoot":"","sources":["../../src/lib/wall-face-script.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EACP,sBAAsB,EAEtB,cAAc,EAGf,MAAM,WAAW,CAAA;AAClB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAEpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAenE,KAAK,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;AAEnD,kEAAkE;AAClE,MAAM,MAAM,YAAY,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAAA;AAE7E;;;;;;;GAOG;AACH,MAAM,MAAM,oBAAoB,GAAG;IACjC,OAAO,EAAE,YAAY,CAAA;IACrB,KAAK,EAAE,YAAY,EAAE,CAAA;IACrB,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAA;IACxB,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAKD,iGAAiG;AACjG,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,GAAG,MAAM,CAOnF;AA0ID;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,QAAQ,EACd,QAAQ,CAAC,EAAE,MAAM,GAChB,oBAAoB,GAAG,IAAI,CAgC7B;AAED,0FAA0F;AAC1F,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,oBAAoB,GAAG,MAAM,CAI5E;AAED,mGAAmG;AACnG,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,sBAAsB,EAChC,MAAM,EAAE,oBAAoB,EAC5B,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,QAAQ,CAAC,EAAE,cAAc,GACxB,cAAc,CAMhB;AAKD;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,QAAQ,GACb;IAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GAAG,IAAI,CAYhF;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,MAAM,GACd,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAGzB;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,MAAM,EAAE,SAAS,CAAA;IACjB,IAAI,EAAE,2BAA2B,CAAA;IACjC,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,OAAO,GAAG,SAAS,EACzB,IAAI,EAAE,MAAM,GACX,oBAAoB,GAAG,SAAS,CAkBlC"}
@@ -1,5 +1,5 @@
1
- import { getWallTop } from '../services/storey.js';
2
- import { isCurvedWall } from '../systems/wall/wall-curve.js';
1
+ import { getWallTopOver } from '../services/storey.js';
2
+ import { getWallCurveLength, isCurvedWall } from '../systems/wall/wall-curve.js';
3
3
  import { parseWallPaintRole } from '../systems/wall/wall-finish.js';
4
4
  import { getWallThickness } from '../systems/wall/wall-footprint.js';
5
5
  import { getWallLocalFaceZ } from '../systems/wall/wall-frame.js';
@@ -35,12 +35,15 @@ function levelMiters(nodes, levelId) {
35
35
  }
36
36
  return miters;
37
37
  }
38
- /** A wall whose faces a script can build on: straight, not a curtain wall, standing on a level. */
38
+ /**
39
+ * A wall whose faces a script can build on: straight, not a curtain wall or a railing (neither has
40
+ * faces), standing on a level.
41
+ */
39
42
  function scriptableWall(nodes, wallId) {
40
43
  const wall = nodes[wallId];
41
44
  if (wall?.type !== 'wall' || !wall.parentId)
42
45
  return null;
43
- if (wall.wallType === 'curtain' || isCurvedWall(wall))
46
+ if (wall.wallType === 'curtain' || wall.wallType === 'railing' || isCurvedWall(wall))
44
47
  return null;
45
48
  return Math.hypot(wall.end[0] - wall.start[0], wall.end[1] - wall.start[1]) < EPS ? null : wall;
46
49
  }
@@ -53,7 +56,7 @@ function faceFrame(nodes, wallId, face) {
53
56
  const length = Math.hypot(dx, dz);
54
57
  const support = wallSupportForNodes(wall, nodes);
55
58
  const offset = wallFaceBaseOffset(support, face);
56
- const top = getWallTop(wall, wall.parentId, nodes, support.elevation) -
59
+ const top = getWallTopOver(wall, wall.parentId, nodes, support.elevation, 0, getWallCurveLength(wall)) -
57
60
  support.elevation -
58
61
  offset;
59
62
  const station = (point) => ((point.x - wall.start[0]) * dx + (point.y - wall.start[1]) * dz) / length;
@@ -0,0 +1,16 @@
1
+ import type { AnyNodeId } from '../schema/types.js';
2
+ import { type InteractiveState, type WindowInteractiveState } from '../store/use-interactive.js';
3
+ export declare const WINDOW_TOGGLE_ANIMATION_MS = 520;
4
+ export type WindowOpenAnimationOptions = {
5
+ persist?: boolean;
6
+ };
7
+ export declare function isOperableWindowType(windowType: string | undefined): windowType is "awning" | "casement" | "double-hung" | "hopper" | "louvered" | "single-hung" | "sliding" | "tilt-turn";
8
+ export declare function getDisplayedWindowValue(windowId: AnyNodeId, nodeValue: number | undefined, field?: keyof WindowInteractiveState, interactive?: InteractiveState): number;
9
+ export declare function toggleWindowOpenState(windowId: AnyNodeId, options?: WindowOpenAnimationOptions): void;
10
+ export declare function closeWindowOpenState(windowId: AnyNodeId, options?: WindowOpenAnimationOptions): void;
11
+ export declare function openWindowOpenState(windowId: AnyNodeId, options?: WindowOpenAnimationOptions): void;
12
+ export type WindowShutterField = 'shutterOpen' | 'rollerShutterOpen';
13
+ export declare function getDisplayedWindowShutterValue(windowId: AnyNodeId, field: WindowShutterField, nodeValue: number | undefined, state?: InteractiveState): number;
14
+ /** Preview both shutter styles together, independently of the sash. */
15
+ export declare function setWindowShuttersOpenState(windowId: AnyNodeId, on: boolean, options?: WindowOpenAnimationOptions): void;
16
+ //# sourceMappingURL=window-interaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"window-interaction.d.ts","sourceRoot":"","sources":["../../src/lib/window-interaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAChD,OAAO,EACL,KAAK,gBAAgB,EAErB,KAAK,sBAAsB,EAC5B,MAAM,0BAA0B,CAAA;AAGjC,eAAO,MAAM,0BAA0B,MAAM,CAAA;AAE7C,MAAM,MAAM,0BAA0B,GAAG;IACvC,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB,CAAA;AAED,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,yHAWlE;AAED,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,SAAS,EACnB,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,KAAK,GAAE,MAAM,sBAAyC,EACtD,WAAW,GAAE,gBAA4C,UAS1D;AAmBD,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,0BAA0B,QAkB9F;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,0BAA0B,QAY7F;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,0BAA0B,QAY5F;AAED,MAAM,MAAM,kBAAkB,GAAG,aAAa,GAAG,mBAAmB,CAAA;AAEpE,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,SAAS,EACnB,KAAK,EAAE,kBAAkB,EACzB,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,KAAK,GAAE,gBAA4C,GAClD,MAAM,CAER;AAED,uEAAuE;AACvE,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,SAAS,EACnB,EAAE,EAAE,OAAO,EACX,OAAO,CAAC,EAAE,0BAA0B,GACnC,IAAI,CAkBN"}
@@ -0,0 +1,82 @@
1
+ import { useInteractive, } from '../store/use-interactive.js';
2
+ import useScene from '../store/use-scene.js';
3
+ export const WINDOW_TOGGLE_ANIMATION_MS = 520;
4
+ export function isOperableWindowType(windowType) {
5
+ return (windowType === 'sliding' ||
6
+ windowType === 'casement' ||
7
+ windowType === 'awning' ||
8
+ windowType === 'hopper' ||
9
+ windowType === 'tilt-turn' ||
10
+ windowType === 'single-hung' ||
11
+ windowType === 'double-hung' ||
12
+ windowType === 'louvered');
13
+ }
14
+ export function getDisplayedWindowValue(windowId, nodeValue, field = 'operationState', interactive = useInteractive.getState()) {
15
+ const runtimeValue = interactive.windows[windowId]?.[field];
16
+ if (runtimeValue !== undefined)
17
+ return runtimeValue;
18
+ const queuedValue = interactive.windowAnimations[windowId]?.[field]?.from;
19
+ if (queuedValue !== undefined)
20
+ return queuedValue;
21
+ return nodeValue ?? 0;
22
+ }
23
+ function startWindowOpenAnimation(windowId, field, from, to, options) {
24
+ useInteractive.getState().startWindowAnimation(windowId, {
25
+ field,
26
+ from,
27
+ to,
28
+ startedAt: null,
29
+ durationMs: WINDOW_TOGGLE_ANIMATION_MS,
30
+ persist: options?.persist ?? true,
31
+ });
32
+ }
33
+ export function toggleWindowOpenState(windowId, options) {
34
+ const node = useScene.getState().nodes[windowId];
35
+ if (node?.type !== 'window' ||
36
+ node.openingKind === 'opening' ||
37
+ !isOperableWindowType(node.windowType)) {
38
+ return;
39
+ }
40
+ const currentOpenAmount = getDisplayedWindowValue(windowId, node.operationState);
41
+ startWindowOpenAnimation(windowId, 'operationState', currentOpenAmount, currentOpenAmount >= 0.5 ? 0 : 1, options);
42
+ }
43
+ export function closeWindowOpenState(windowId, options) {
44
+ const node = useScene.getState().nodes[windowId];
45
+ if (node?.type !== 'window' ||
46
+ node.openingKind === 'opening' ||
47
+ !isOperableWindowType(node.windowType)) {
48
+ return;
49
+ }
50
+ const currentOpenAmount = getDisplayedWindowValue(windowId, node.operationState);
51
+ startWindowOpenAnimation(windowId, 'operationState', currentOpenAmount, 0, options);
52
+ }
53
+ export function openWindowOpenState(windowId, options) {
54
+ const node = useScene.getState().nodes[windowId];
55
+ if (node?.type !== 'window' ||
56
+ node.openingKind === 'opening' ||
57
+ !isOperableWindowType(node.windowType)) {
58
+ return;
59
+ }
60
+ const currentOpenAmount = getDisplayedWindowValue(windowId, node.operationState);
61
+ startWindowOpenAnimation(windowId, 'operationState', currentOpenAmount, 1, options);
62
+ }
63
+ export function getDisplayedWindowShutterValue(windowId, field, nodeValue, state = useInteractive.getState()) {
64
+ return getDisplayedWindowValue(windowId, nodeValue ?? 1, field, state);
65
+ }
66
+ /** Preview both shutter styles together, independently of the sash. */
67
+ export function setWindowShuttersOpenState(windowId, on, options) {
68
+ const node = useScene.getState().nodes[windowId];
69
+ if (node?.type !== 'window' || node.source)
70
+ return;
71
+ const fields = [];
72
+ if (node.shutters && node.shutters !== 'none')
73
+ fields.push('shutterOpen');
74
+ if (node.rollerShutter === 'box' || node.rollerShutter === 'concealed')
75
+ fields.push('rollerShutterOpen');
76
+ if (!fields.length)
77
+ return;
78
+ useInteractive.getState().setMechanismPart(windowId, 'shutters', on);
79
+ for (const field of fields) {
80
+ startWindowOpenAnimation(windowId, field, getDisplayedWindowShutterValue(windowId, field, node[field]), on ? 1 : 0, options);
81
+ }
82
+ }
@@ -233,7 +233,7 @@ export function deriveZoneQuantityReport(zone, sceneNodes) {
233
233
  const slabs = levelNodes.filter((node) => node.type === 'slab');
234
234
  const wallEffectiveHeight = (wall) => {
235
235
  const support = computeWallSlabSupport(wall, slabs, walls, wall.supportSlabId, undefined, 0, sceneNodes);
236
- return getWallTop(wall, levelId ?? '', sceneNodes, support.elevation) - support.elevation;
236
+ return getWallTop(wall, levelId ?? '', sceneNodes, support.elevation, 0.5) - support.elevation;
237
237
  };
238
238
  const edgeLengths = [zone.polygon, ...(zone.holes ?? [])].flatMap((ring) => ring.map((start, index) => {
239
239
  const end = ring[(index + 1) % ring.length];
@@ -2,7 +2,7 @@
2
2
  * The material library's kinds and the surfaces its materials suit, apart from the catalog: an
3
3
  * agent tool's contract names them without loading the library it searches.
4
4
  */
5
- export declare const MATERIAL_CATEGORIES: readonly ['colors', 'wood', 'stone', 'brick', 'tile', 'wallpaper', 'concrete', 'metal', 'plastic', 'fabric', 'carpet', 'leather', 'roofing', 'ground', 'glass', 'other'];
5
+ export declare const MATERIAL_CATEGORIES: readonly ['colors', 'wood', 'siding', 'stone', 'brick', 'tile', 'wallpaper', 'concrete', 'metal', 'plastic', 'fabric', 'carpet', 'leather', 'roofing', 'ground', 'glass', 'other'];
6
6
  export type MaterialCategory = (typeof MATERIAL_CATEGORIES)[number];
7
7
  export declare const MATERIAL_SURFACES: readonly ['floor', 'wall', 'ceiling', 'roof', 'furniture', 'outdoor'];
8
8
  export type MaterialSurface = (typeof MATERIAL_SURFACES)[number];
@@ -1 +1 @@
1
- {"version":3,"file":"material-kinds.d.ts","sourceRoot":"","sources":["../src/material-kinds.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,mBAAmB,YAC9B,QAAQ,EACR,MAAM,EACN,OAAO,EACP,OAAO,EACP,MAAM,EACN,WAAW,EACX,UAAU,EACV,OAAO,EACP,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,SAAS,EACT,QAAQ,EACR,OAAO,EACP,OAAO,CACC,CAAA;AACV,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAA;AAEnE,eAAO,MAAM,iBAAiB,YAC5B,OAAO,EACP,MAAM,EACN,SAAS,EACT,MAAM,EACN,WAAW,EACX,SAAS,CACD,CAAA;AACV,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAA"}
1
+ {"version":3,"file":"material-kinds.d.ts","sourceRoot":"","sources":["../src/material-kinds.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,mBAAmB,YAC9B,QAAQ,EACR,MAAM,EACN,QAAQ,EACR,OAAO,EACP,OAAO,EACP,MAAM,EACN,WAAW,EACX,UAAU,EACV,OAAO,EACP,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,SAAS,EACT,QAAQ,EACR,OAAO,EACP,OAAO,CACC,CAAA;AACV,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAA;AAEnE,eAAO,MAAM,iBAAiB,YAC5B,OAAO,EACP,MAAM,EACN,SAAS,EACT,MAAM,EACN,WAAW,EACX,SAAS,CACD,CAAA;AACV,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAA"}
@@ -5,6 +5,7 @@
5
5
  export const MATERIAL_CATEGORIES = [
6
6
  'colors',
7
7
  'wood',
8
+ 'siding',
8
9
  'stone',
9
10
  'brick',
10
11
  'tile',