@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
@@ -0,0 +1,515 @@
1
+ import { DEFAULT_DECK_BOARDS, deckJoistSpacingLimit } from './deck-boards.js';
2
+ import { floorPlateRoom } from './room-floor-plate.js';
3
+ /**
4
+ * A wood deck's frame, planned once for the engine, which draws it under the deck's boards, and
5
+ * for the framing plugin, which books, labels and cites it. Framed to IRC R507:
6
+ *
7
+ * - a LEDGER on the house edge (the deck edge along a house wall), the joist size;
8
+ * - JOISTS at the spacing (closer under diagonal boards, Table R507.7), sized from a span table:
9
+ * square to the house under boards that run along it or at 45°, along the house under boards
10
+ * that run out from it;
11
+ * - RIMS on every other edge, set in so the boards overhang them an inch (none at the house);
12
+ * - a BEAM under each edge the joists run out to that is no ledger: DROPPED 16 in in under the
13
+ * joists (a 4x8, the joists cantilevering past it) where the deck stands high enough for posts
14
+ * under it, else FLUSH, a second joist-size board doubled inside the rim, the joists hung on
15
+ * it; more beams between where the joists would span past the table. Joists along the house
16
+ * bear on beams square to it at both ends, as joists hung off a ledger cannot run that way;
17
+ * - 4x4 POSTS under each beam, at both ends and no more than 8 ft apart, down to the ground under
18
+ * each, unless posts already standing there to grade carry it (a porch cover's).
19
+ *
20
+ * Any outline frames along its edges: an L-shaped deck gets a rim on every edge and a beam under
21
+ * each outer edge. Everything is level-local metres; a `yaw` is three.js's (local +x → world
22
+ * (cos θ, −sin θ)), a piece's `dims` its length along its run, its height and its thickness.
23
+ */
24
+ const IN = 0.0254;
25
+ const FT = 12 * IN;
26
+ const EPS = 1e-9;
27
+ /** A dropped beam sits this far in from the edge it carries (16 in), the joists cantilevering past it. */
28
+ export const DECK_BEAM_INSET = 16 * IN;
29
+ /** Posts at both beam ends (2 in in) and no more than 8 ft apart. */
30
+ export const DECK_POST_SPACING = 96 * IN;
31
+ /** The shortest post worth a post base (Simpson ABU/ABA need it); below this the beam goes flush. */
32
+ export const DECK_MIN_POST_HEIGHT = 6 * IN;
33
+ /** A post's face stands this far in from its beam's end. */
34
+ export const DECK_POST_END_INSET = 2 * IN;
35
+ /** The boards overhang the rim this much on a free edge; at the house they stop at the wall. */
36
+ export const DECK_BOARD_OVERHANG = 1 * IN;
37
+ /** An edge whose midpoint is within this of a wall's face is on the house. */
38
+ const LEDGER_TOLERANCE = 0.3;
39
+ /** A post standing within this of a beam's line carries it. */
40
+ const CARRIER_REACH = 12 * IN;
41
+ const CARRIER_END_REACH = 6 * IN;
42
+ /** The narrowest deck framed. */
43
+ const MIN_DECK = 12 * IN;
44
+ /** A post shorter than this is not drawn: the beam sits on the ground there. */
45
+ const MIN_DRAWN_POST = 0.05;
46
+ /** A hanger's seat: this far along the joist from its end. */
47
+ const HANGER_SEAT = 0.375 * IN;
48
+ /**
49
+ * The joists a deck takes by the span they reach, first that spans: SPF #2 at 40 psf live, the
50
+ * floor table's arithmetic (R502.3.1(2); IRC R507.6 governs deck joists), as the framing plugin's
51
+ * default span table has them.
52
+ */
53
+ export const DECK_JOIST_SPANS = [
54
+ { size: '2x8', thickness: 1.5 * IN, depth: 7.25 * IN, span: 12.25 * FT },
55
+ { size: '2x10', thickness: 1.5 * IN, depth: 9.25 * IN, span: 15 * FT },
56
+ { size: '2x12', thickness: 1.5 * IN, depth: 11.25 * IN, span: 17.4 * FT },
57
+ ];
58
+ /** A dropped beam: a 4x8 (span per Table R507.5(1)). */
59
+ export const DECK_DROPPED_BEAM = { size: '4x8', thickness: 3.5 * IN, depth: 7.25 * IN };
60
+ /** A deck post (Table R507.4). */
61
+ export const DECK_POST = { size: '4x4', thickness: 3.5 * IN, depth: 3.5 * IN };
62
+ /** A deck room's dedicated floor plate, drawn as boards on a frame. */
63
+ export function isDeckSlab(slab, resolve) {
64
+ return !slab.recessed && floorPlateRoom(slab, resolve)?.roomType === 'deck';
65
+ }
66
+ const sub = (a, b) => [a[0] - b[0], a[1] - b[1]];
67
+ const dot = (a, b) => a[0] * b[0] + a[1] * b[1];
68
+ const cross = (a, b) => a[0] * b[1] - a[1] * b[0];
69
+ function distanceToWall(p, wall) {
70
+ const [dx, dz] = sub(wall.end, wall.start);
71
+ const dd = dx * dx + dz * dz;
72
+ if (dd < EPS)
73
+ return Math.hypot(p[0] - wall.start[0], p[1] - wall.start[1]);
74
+ const t = Math.max(0, Math.min(1, ((p[0] - wall.start[0]) * dx + (p[1] - wall.start[1]) * dz) / dd));
75
+ return Math.hypot(p[0] - (wall.start[0] + dx * t), p[1] - (wall.start[1] + dz * t));
76
+ }
77
+ /** How near edge `i` lies on a wall (parallel within 15°, its midpoint within the tolerance), or null. */
78
+ function wallDistance(polygon, i, walls) {
79
+ const a = polygon[i];
80
+ const b = polygon[(i + 1) % polygon.length];
81
+ const length = Math.hypot(b[0] - a[0], b[1] - a[1]);
82
+ if (length < EPS)
83
+ return null;
84
+ const along = [(b[0] - a[0]) / length, (b[1] - a[1]) / length];
85
+ const mid = [(a[0] + b[0]) / 2, (a[1] + b[1]) / 2];
86
+ let best = null;
87
+ for (const wall of walls) {
88
+ if (wall.curved)
89
+ continue;
90
+ const [dx, dz] = sub(wall.end, wall.start);
91
+ const wallLength = Math.hypot(dx, dz);
92
+ if (wallLength < EPS)
93
+ continue;
94
+ const d = distanceToWall(mid, wall);
95
+ if (d > LEDGER_TOLERANCE + wall.thickness / 2)
96
+ continue;
97
+ if (Math.abs(cross(along, [dx / wallLength, dz / wallLength])) > Math.sin((15 * Math.PI) / 180))
98
+ continue;
99
+ if (best === null || d < best)
100
+ best = d;
101
+ }
102
+ return best;
103
+ }
104
+ /** The deck edge that lies on a wall (the nearest such), where the ledger goes; null when none does. */
105
+ export function deckLedgerEdge(polygon, walls) {
106
+ let best = null;
107
+ for (let i = 0; i < polygon.length; i++) {
108
+ const d = wallDistance(polygon, i, walls);
109
+ if (d !== null && (!best || d < best.d))
110
+ best = { i, d };
111
+ }
112
+ return best ? best.i : null;
113
+ }
114
+ export function deckAxes(polygon, walls) {
115
+ if (polygon.length < 3)
116
+ return null;
117
+ const ledgerEdge = deckLedgerEdge(polygon, walls);
118
+ let base = ledgerEdge ?? 0;
119
+ if (ledgerEdge === null) {
120
+ let longest = 0;
121
+ for (let i = 0; i < polygon.length; i++) {
122
+ const [dx, dz] = sub(polygon[(i + 1) % polygon.length], polygon[i]);
123
+ const length = Math.hypot(dx, dz);
124
+ if (length > longest) {
125
+ longest = length;
126
+ base = i;
127
+ }
128
+ }
129
+ }
130
+ const a = polygon[base];
131
+ const [dx, dz] = sub(polygon[(base + 1) % polygon.length], a);
132
+ const length = Math.hypot(dx, dz);
133
+ if (length < EPS)
134
+ return null;
135
+ const u = [dx / length, dz / length];
136
+ // the vertex average decides which perpendicular points into the deck
137
+ let cx = 0;
138
+ let cz = 0;
139
+ for (const p of polygon) {
140
+ cx += p[0];
141
+ cz += p[1];
142
+ }
143
+ cx /= polygon.length;
144
+ cz /= polygon.length;
145
+ let v = [-u[1], u[0]];
146
+ if ((cx - a[0]) * v[0] + (cz - a[1]) * v[1] < 0)
147
+ v = [u[1], -u[0]];
148
+ return { ledgerEdge, baseEdge: base, origin: [a[0], a[1]], u, v };
149
+ }
150
+ /** The outline with each edge moved in by its offset (signed area kept), or null when that collapses it. */
151
+ function insetEdges(polygon, offsets) {
152
+ const n = polygon.length;
153
+ let twice = 0;
154
+ for (let i = 0; i < n; i++)
155
+ twice += cross(polygon[i], polygon[(i + 1) % n]);
156
+ const sign = twice > 0 ? 1 : -1;
157
+ const lines = polygon.map((a, i) => {
158
+ const [dx, dz] = sub(polygon[(i + 1) % n], a);
159
+ const length = Math.hypot(dx, dz) || 1;
160
+ const e = [dx / length, dz / length];
161
+ const inward = sign > 0 ? [-e[1], e[0]] : [e[1], -e[0]];
162
+ const d = offsets[i] ?? 0;
163
+ return { p: [a[0] + inward[0] * d, a[1] + inward[1] * d], e };
164
+ });
165
+ const inset = polygon.map((_, i) => {
166
+ const before = lines[(i - 1 + n) % n];
167
+ const after = lines[i];
168
+ const turn = cross(before.e, after.e);
169
+ if (Math.abs(turn) < 1e-9)
170
+ return after.p;
171
+ const t = cross(sub(after.p, before.p), after.e) / turn;
172
+ return [before.p[0] + before.e[0] * t, before.p[1] + before.e[1] * t];
173
+ });
174
+ let insetTwice = 0;
175
+ for (let i = 0; i < n; i++)
176
+ insetTwice += cross(inset[i], inset[(i + 1) % n]);
177
+ return insetTwice * sign > 0.5 * Math.abs(twice) ? inset : null;
178
+ }
179
+ /** The outline without repeated corners. */
180
+ function cleanOutline(polygon) {
181
+ const out = [];
182
+ for (const p of polygon) {
183
+ const last = out.at(-1);
184
+ if (!last || Math.hypot(p[0] - last[0], p[1] - last[1]) > 1e-6)
185
+ out.push([p[0], p[1]]);
186
+ }
187
+ while (out.length > 1 &&
188
+ Math.hypot(out[0][0] - out.at(-1)[0], out[0][1] - out.at(-1)[1]) <= 1e-6)
189
+ out.pop();
190
+ return out;
191
+ }
192
+ export function planDeckFraming(input) {
193
+ const boards = input.boards ?? DEFAULT_DECK_BOARDS;
194
+ const asked = input.joistSpacing ?? 16 * IN;
195
+ const spacing = Math.min(asked, deckJoistSpacingLimit(boards));
196
+ const joistsAlongHouse = boards.direction === 'perpendicular';
197
+ const ladder = input.joists?.length ? input.joists : DECK_JOIST_SPANS;
198
+ const joistTop = input.top - input.decking;
199
+ const plan = {
200
+ axes: null,
201
+ beam: 'unsupported',
202
+ joist: null,
203
+ spanPastTable: false,
204
+ joistSpacing: spacing,
205
+ spacingForBoards: spacing < asked - EPS,
206
+ joistsAlongHouse,
207
+ irregular: false,
208
+ beamLumber: null,
209
+ joistTop,
210
+ beamTop: joistTop,
211
+ postTop: joistTop,
212
+ postHeight: 0,
213
+ stationAxis: null,
214
+ stations: [],
215
+ ledger: null,
216
+ rims: [],
217
+ joists: [],
218
+ beams: [],
219
+ posts: [],
220
+ };
221
+ const outline = cleanOutline(input.polygon);
222
+ if (outline.length < 3)
223
+ return plan;
224
+ const axes = deckAxes(outline, input.walls);
225
+ if (!axes)
226
+ return plan;
227
+ plan.axes = axes;
228
+ const n = outline.length;
229
+ const ledgerEdge = axes.ledgerEdge;
230
+ // ---- the frame's outline: the free edges in by the boards' overhang ----
231
+ const overhang = input.overhang ?? DECK_BOARD_OVERHANG;
232
+ const offsets = outline.map((_, i) => wallDistance(outline, i, input.walls) === null ? overhang : 0);
233
+ const frame = insetEdges(outline, offsets) ?? outline;
234
+ // Frame coordinates: s along the joists' layout (stations), j along the joists.
235
+ const S = joistsAlongHouse ? axes.v : axes.u;
236
+ const J = joistsAlongHouse ? axes.u : axes.v;
237
+ const [ox, oz] = axes.origin;
238
+ const toFrame = (p) => [
239
+ (p[0] - ox) * S[0] + (p[1] - oz) * S[1],
240
+ (p[0] - ox) * J[0] + (p[1] - oz) * J[1],
241
+ ];
242
+ const toPlan = (s, j) => [ox + S[0] * s + J[0] * j, oz + S[1] * s + J[1] * j];
243
+ const yawOf = (s, j) => {
244
+ const x = S[0] * s + J[0] * j;
245
+ const z = S[1] * s + J[1] * j;
246
+ return Math.atan2(-z, x);
247
+ };
248
+ const yawS = yawOf(1, 0);
249
+ const yawJ = yawOf(0, 1);
250
+ const fq = frame.map(toFrame);
251
+ let twice = 0;
252
+ for (let i = 0; i < n; i++)
253
+ twice += cross(fq[i], fq[(i + 1) % n]);
254
+ const ccw = twice > 0;
255
+ const edges = fq.map((a, i) => {
256
+ const b = fq[(i + 1) % n];
257
+ const length = Math.hypot(b[0] - a[0], b[1] - a[1]);
258
+ const e = length > EPS ? [(b[0] - a[0]) / length, (b[1] - a[1]) / length] : [1, 0];
259
+ const inward = ccw ? [-e[1], e[0]] : [e[1], -e[0]];
260
+ // An 'end' edge runs across the joists: they run out to it. A 'side' edge runs with them.
261
+ const kind = Math.abs(e[0]) >= Math.abs(e[1]) ? 'end' : 'side';
262
+ return { a, b, e, inward, length, kind };
263
+ });
264
+ let sMin = Number.POSITIVE_INFINITY;
265
+ let sMax = Number.NEGATIVE_INFINITY;
266
+ let jMin = Number.POSITIVE_INFINITY;
267
+ let jMax = Number.NEGATIVE_INFINITY;
268
+ for (const [s, j] of fq) {
269
+ sMin = Math.min(sMin, s);
270
+ sMax = Math.max(sMax, s);
271
+ jMin = Math.min(jMin, j);
272
+ jMax = Math.max(jMax, j);
273
+ }
274
+ if (sMax - sMin < MIN_DECK || jMax - jMin < MIN_DECK)
275
+ return plan;
276
+ plan.irregular =
277
+ n !== 4 || edges.some((edge) => Math.min(Math.abs(edge.e[0]), Math.abs(edge.e[1])) > 1e-6);
278
+ // ---- the joists: sized for the span between their supports, beams between past the table ----
279
+ // A ledger carries the joists' house ends unless they run along it.
280
+ const hung = ledgerEdge !== null && !joistsAlongHouse;
281
+ const near = hung ? jMin : jMin + DECK_BEAM_INSET;
282
+ const far = jMax - DECK_BEAM_INSET;
283
+ const run = Math.max(far - near, 0);
284
+ const longest = ladder.at(-1);
285
+ const bays = Math.max(1, Math.ceil(run / longest.span - 1e-9));
286
+ const joist = ladder.find((size) => run / bays <= size.span + EPS) ?? longest;
287
+ plan.joist = joist;
288
+ plan.spanPastTable = run / bays > longest.span + EPS;
289
+ const t = joist.thickness;
290
+ const d = joist.depth;
291
+ const centerY = joistTop - d / 2;
292
+ // ---- the beam: dropped where a post fits under a 4x8 under the joists, else flush ----
293
+ const dropped = joistTop - d - DECK_DROPPED_BEAM.depth - input.gradeY >= DECK_MIN_POST_HEIGHT;
294
+ const beamLumber = dropped ? DECK_DROPPED_BEAM : joist;
295
+ const beamTop = dropped ? joistTop - d : joistTop;
296
+ const postTop = beamTop - beamLumber.depth;
297
+ const postHeight = postTop - input.gradeY;
298
+ const canPost = postHeight >= DECK_MIN_POST_HEIGHT;
299
+ plan.beam = dropped ? 'dropped' : canPost ? 'flush' : 'unsupported';
300
+ plan.beamLumber = beamLumber;
301
+ plan.beamTop = beamTop;
302
+ plan.postTop = postTop;
303
+ plan.postHeight = postHeight;
304
+ const pieceAt = (role, size, s, j, y, dims, yaw) => {
305
+ const [x, z] = toPlan(s, j);
306
+ return { role, size, position: [x, y, z], dims, yaw };
307
+ };
308
+ // A run along an edge direction, its yaw taken along +s or +j, as the frame's own axes are.
309
+ const runYaw = (e) => {
310
+ const flip = Math.abs(e[0]) >= Math.abs(e[1]) ? e[0] < 0 : e[1] < 0;
311
+ return flip ? yawOf(-e[0], -e[1]) : yawOf(e[0], e[1]);
312
+ };
313
+ const isConvex = (i) => {
314
+ const turn = cross(edges[(i - 1 + n) % n].e, edges[i].e);
315
+ return ccw ? turn > 1e-9 : turn < -1e-9;
316
+ };
317
+ const isReflex = (i) => {
318
+ const turn = cross(edges[(i - 1 + n) % n].e, edges[i].e);
319
+ return ccw ? turn < -1e-9 : turn > 1e-9;
320
+ };
321
+ // ---- the ledger and the rims: one along every edge, a board the joist size inside it ----
322
+ // Where an end edge meets a side edge, the end's board runs to the corner and the side's stops at
323
+ // it (at an inside corner the end's runs on past it), so the corners close.
324
+ for (let i = 0; i < n; i++) {
325
+ const edge = edges[i];
326
+ const prev = edges[(i - 1 + n) % n];
327
+ const next = edges[(i + 1) % n];
328
+ const startTrim = edge.kind === 'side' && prev.kind === 'end' && isConvex(i)
329
+ ? t
330
+ : edge.kind === 'end' && prev.kind === 'side' && isReflex(i)
331
+ ? -t
332
+ : 0;
333
+ const j1 = (i + 1) % n;
334
+ const endTrim = edge.kind === 'side' && next.kind === 'end' && isConvex(j1)
335
+ ? t
336
+ : edge.kind === 'end' && next.kind === 'side' && isReflex(j1)
337
+ ? -t
338
+ : 0;
339
+ const length = edge.length - startTrim - endTrim;
340
+ if (length < t)
341
+ continue;
342
+ const mid = startTrim + length / 2;
343
+ const s = edge.a[0] + edge.e[0] * mid + edge.inward[0] * (t / 2);
344
+ const j = edge.a[1] + edge.e[1] * mid + edge.inward[1] * (t / 2);
345
+ const piece = pieceAt(i === ledgerEdge ? 'ledger' : 'rim', joist.size, s, j, centerY, [length, d, t], runYaw(edge.e));
346
+ if (i === ledgerEdge)
347
+ plan.ledger = piece;
348
+ else
349
+ plan.rims.push(piece);
350
+ }
351
+ const lines = [];
352
+ const inset = dropped ? DECK_BEAM_INSET : t + t / 2;
353
+ edges.forEach((edge, i) => {
354
+ if (edge.kind !== 'end' || i === ledgerEdge)
355
+ return;
356
+ const offset = [edge.inward[0] * inset, edge.inward[1] * inset];
357
+ lines.push({
358
+ from: [edge.a[0] + offset[0], edge.a[1] + offset[1]],
359
+ to: [edge.b[0] + offset[0], edge.b[1] + offset[1]],
360
+ edge: i,
361
+ yaw: runYaw(edge.e),
362
+ thickness: dropped ? beamLumber.thickness : t,
363
+ });
364
+ });
365
+ // The beams between: lines across the frame at even spacing, where it lies across them.
366
+ const middles = [];
367
+ if (bays > 1) {
368
+ const first = hung ? jMin : jMin + inset;
369
+ const last = jMax - inset;
370
+ for (let k = 1; k < bays; k++)
371
+ middles.push(first + ((last - first) * k) / bays);
372
+ }
373
+ /** Where the frame lies across the line j = `j`: [s0, s1] runs, with the edges they end on. */
374
+ const across = (j) => {
375
+ const hits = [];
376
+ edges.forEach((edge, i) => {
377
+ const { a, b } = edge;
378
+ if ((a[1] <= j && j < b[1]) || (b[1] <= j && j < a[1]))
379
+ hits.push({ s: a[0] + ((j - a[1]) * (b[0] - a[0])) / (b[1] - a[1]), edge: i });
380
+ });
381
+ hits.sort((p, q) => p.s - q.s);
382
+ const runs = [];
383
+ for (let k = 0; k + 1 < hits.length; k += 2)
384
+ runs.push([hits[k].s, hits[k + 1].s]);
385
+ return runs;
386
+ };
387
+ for (const j of middles)
388
+ for (const [s0, s1] of across(j))
389
+ lines.push({
390
+ from: [s0, j],
391
+ to: [s1, j],
392
+ edge: null,
393
+ yaw: yawS,
394
+ thickness: dropped ? beamLumber.thickness : 2 * t,
395
+ });
396
+ const carriers = (input.carriers ?? []).map(toFrame);
397
+ const endInset = dropped ? DECK_POST_END_INSET : t;
398
+ for (const line of lines) {
399
+ const dir = sub(line.to, line.from);
400
+ const full = Math.hypot(dir[0], dir[1]);
401
+ if (full < EPS)
402
+ continue;
403
+ const e = [dir[0] / full, dir[1] / full];
404
+ const length = full - 2 * endInset;
405
+ if (length < DECK_POST.thickness)
406
+ continue;
407
+ const mid = [(line.from[0] + line.to[0]) / 2, (line.from[1] + line.to[1]) / 2];
408
+ const carried = carriers.filter((c) => {
409
+ const along = dot(sub(c, line.from), e);
410
+ return (Math.abs(cross(e, sub(c, line.from))) <= CARRIER_REACH &&
411
+ along >= -CARRIER_END_REACH &&
412
+ along <= full + CARRIER_END_REACH);
413
+ }).length >= 2;
414
+ const beam = pieceAt('beam', beamLumber.size, mid[0], mid[1], beamTop - beamLumber.depth / 2, [length, beamLumber.depth, line.thickness], line.yaw);
415
+ beam.carried = carried;
416
+ beam.between = line.edge === null;
417
+ plan.beams.push(beam);
418
+ if (!canPost || carried)
419
+ continue;
420
+ const count = Math.max(2, Math.ceil(length / DECK_POST_SPACING) + 1);
421
+ const span = length - 2 * DECK_POST_END_INSET;
422
+ for (let k = 0; k < count; k++) {
423
+ const along = -length / 2 + DECK_POST_END_INSET + (span * k) / (count - 1);
424
+ const s = mid[0] + e[0] * along;
425
+ const j = mid[1] + e[1] * along;
426
+ const [x, z] = toPlan(s, j);
427
+ const bottom = input.gradeAt ? input.gradeAt(x, z) : input.gradeY;
428
+ const height = postTop - bottom;
429
+ if (!(height >= MIN_DRAWN_POST))
430
+ continue;
431
+ plan.posts.push({
432
+ role: 'post',
433
+ size: DECK_POST.size,
434
+ position: [x, postTop - height / 2, z],
435
+ dims: [DECK_POST.thickness, height, DECK_POST.depth],
436
+ yaw: line.yaw,
437
+ bottom,
438
+ });
439
+ }
440
+ }
441
+ // ---- the joists: at the spacing from one side to the other, each run between its supports ----
442
+ const flushEdges = new Set(dropped ? [] : lines.flatMap((line) => (line.edge === null ? [] : [line.edge])));
443
+ const stations = [];
444
+ for (let k = 0;; k++) {
445
+ const s = sMin + t / 2 + k * spacing;
446
+ if (s > sMax - t / 2 + EPS)
447
+ break;
448
+ stations.push(s);
449
+ }
450
+ if ((stations.at(-1) ?? Number.NEGATIVE_INFINITY) < sMax - t / 2 - EPS)
451
+ stations.push(sMax - t / 2);
452
+ plan.stationAxis = [S[0], S[1]];
453
+ plan.stations = stations;
454
+ // A station on a side edge's board: the rim (or a ledger along the joists) is that joist.
455
+ const sideRims = edges.filter((edge) => edge.kind === 'side' && Math.abs(edge.e[0]) < 1e-6);
456
+ for (const s of stations) {
457
+ const hits = [];
458
+ edges.forEach((edge, i) => {
459
+ const { a, b } = edge;
460
+ if ((a[0] <= s && s < b[0]) || (b[0] <= s && s < a[0]))
461
+ hits.push({ j: a[1] + ((s - a[0]) * (b[1] - a[1])) / (b[0] - a[0]), edge: i });
462
+ });
463
+ hits.sort((p, q) => p.j - q.j);
464
+ for (let k = 0; k + 1 < hits.length; k += 2) {
465
+ const lo = hits[k];
466
+ const hi = hits[k + 1];
467
+ // in past the board on the edge each end meets: the rim, the ledger, a flush beam's two
468
+ const band = (edge) => {
469
+ const thick = flushEdges.has(edge) ? 2 * t : t;
470
+ return thick / Math.max(Math.abs(edges[edge].inward[1]), 0.3);
471
+ };
472
+ const hangsOn = (edge) => edge === ledgerEdge || flushEdges.has(edge);
473
+ const segments = [
474
+ {
475
+ j0: lo.j + band(lo.edge),
476
+ j1: hi.j - band(hi.edge),
477
+ hung0: hangsOn(lo.edge),
478
+ hung1: hangsOn(hi.edge),
479
+ yaw0: runYaw(edges[lo.edge].e),
480
+ yaw1: runYaw(edges[hi.edge].e),
481
+ },
482
+ ];
483
+ // a flush beam between cuts the run: the joists hang on both its faces
484
+ if (!dropped)
485
+ for (const j of middles) {
486
+ const at = segments.findIndex((seg) => j - t > seg.j0 + EPS && j + t < seg.j1 - EPS);
487
+ if (at < 0)
488
+ continue;
489
+ const seg = segments[at];
490
+ segments.splice(at, 1, { ...seg, j1: j - t, hung1: true, yaw1: yawS }, { ...seg, j0: j + t, hung0: true, yaw0: yawS });
491
+ }
492
+ const atRim = sideRims.some((edge) => Math.abs(s - edge.a[0]) < t - EPS &&
493
+ Math.max(edge.a[1], edge.b[1]) > lo.j + EPS &&
494
+ Math.min(edge.a[1], edge.b[1]) < hi.j - EPS);
495
+ for (const seg of segments) {
496
+ const length = seg.j1 - seg.j0;
497
+ if (length < t)
498
+ continue;
499
+ const piece = pieceAt('joist', joist.size, s, (seg.j0 + seg.j1) / 2, centerY, [length, d, t], yawJ);
500
+ piece.atRim = atRim;
501
+ piece.hangers = [];
502
+ const hanger = (j, yaw) => {
503
+ const [x, z] = toPlan(s, j);
504
+ piece.hangers.push({ position: [x, centerY, z], yaw });
505
+ };
506
+ if (seg.hung0)
507
+ hanger(seg.j0 + HANGER_SEAT, seg.yaw0);
508
+ if (seg.hung1)
509
+ hanger(seg.j1 - HANGER_SEAT, seg.yaw1);
510
+ plan.joists.push(piece);
511
+ }
512
+ }
513
+ }
514
+ return plan;
515
+ }
@@ -6,12 +6,9 @@ type Nodes = Record<AnyNodeId, AnyNode>;
6
6
  */
7
7
  export declare function lowestGroundY(nodes: Nodes): number;
8
8
  /**
9
- * The world Y of the deepest thing the scene draws: the bottom of the footing under the lowest floor
10
- * slab (its underside less a footing's thickness; never above the walls' base, as the footing
11
- * itself is). A recessed slab (a basin) is drawn down to its own underside, with no footing under
12
- * it. Site flatwork (a lawn, a driveway) is not a floor of the house and counts for nothing. A
13
- * footing under a floor at or over grade sits about as deep, and never nearer the dive's own floor,
14
- * so the floors alone decide. `null` for a scene with no floor.
9
+ * The world Y of the deepest thing the scene draws: the underside of the lowest floor slab. A
10
+ * recessed slab (a basin) is drawn down to its own underside. Site flatwork (a lawn, a driveway)
11
+ * is not a floor of the house and counts for nothing. `null` for a scene with no floor.
15
12
  */
16
13
  export declare function deepestDrawnY(nodes: Nodes): number | null;
17
14
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"deepest-drawn.d.ts","sourceRoot":"","sources":["../../src/lib/deepest-drawn.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAQnD,KAAK,KAAK,GAAG,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;AAIvC;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAclD;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,IAAI,CAsBzD"}
1
+ {"version":3,"file":"deepest-drawn.d.ts","sourceRoot":"","sources":["../../src/lib/deepest-drawn.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAOnD,KAAK,KAAK,GAAG,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;AAIvC;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAclD;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,IAAI,CAsBzD"}
@@ -1,5 +1,4 @@
1
1
  import { getLevelElevations } from '../services/storey.js';
2
- import { FOUNDATION_STANDARD } from './foundation-standard.js';
3
2
  import { isSiteFlatwork } from './site-flatwork.js';
4
3
  import { FLAT_GROUND_Y } from './site-ground-height.js';
5
4
  import { heightAtSample } from './terrain-field.js';
@@ -27,12 +26,9 @@ export function lowestGroundY(nodes) {
27
26
  return lowest;
28
27
  }
29
28
  /**
30
- * The world Y of the deepest thing the scene draws: the bottom of the footing under the lowest floor
31
- * slab (its underside less a footing's thickness; never above the walls' base, as the footing
32
- * itself is). A recessed slab (a basin) is drawn down to its own underside, with no footing under
33
- * it. Site flatwork (a lawn, a driveway) is not a floor of the house and counts for nothing. A
34
- * footing under a floor at or over grade sits about as deep, and never nearer the dive's own floor,
35
- * so the floors alone decide. `null` for a scene with no floor.
29
+ * The world Y of the deepest thing the scene draws: the underside of the lowest floor slab. A
30
+ * recessed slab (a basin) is drawn down to its own underside. Site flatwork (a lawn, a driveway)
31
+ * is not a floor of the house and counts for nothing. `null` for a scene with no floor.
36
32
  */
37
33
  export function deepestDrawnY(nodes) {
38
34
  const elevations = getLevelElevations(nodes);
@@ -57,7 +53,7 @@ export function deepestDrawnY(nodes) {
57
53
  else
58
54
  floorUnderside = Math.min(floorUnderside, underside);
59
55
  }
60
- const bottom = Math.min(floorUnderside - FOUNDATION_STANDARD.footingThickness, basinUnderside);
56
+ const bottom = Math.min(floorUnderside, basinUnderside);
61
57
  if (deepest === null || bottom < deepest)
62
58
  deepest = bottom;
63
59
  }
@@ -0,0 +1,14 @@
1
+ import type { AnyNodeId } from '../schema/types.js';
2
+ import { type DoorInteractiveState } from '../store/use-interactive.js';
3
+ import { isOperationDoorType } from './door-operation.js';
4
+ export declare const DOOR_SWING_OPEN_ANGLE: number;
5
+ export declare const DOOR_TOGGLE_ANIMATION_MS = 520;
6
+ export { isOperationDoorType };
7
+ type DoorOpenAnimationOptions = {
8
+ persist?: boolean;
9
+ };
10
+ export declare function getDisplayedDoorValue(doorId: AnyNodeId, field: keyof DoorInteractiveState, nodeValue: number | undefined): number;
11
+ export declare function toggleDoorOpenState(doorId: AnyNodeId, options?: DoorOpenAnimationOptions): void;
12
+ export declare function closeDoorOpenState(doorId: AnyNodeId, options?: DoorOpenAnimationOptions): void;
13
+ export declare function openDoorOpenState(doorId: AnyNodeId, options?: DoorOpenAnimationOptions): void;
14
+ //# sourceMappingURL=door-interaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"door-interaction.d.ts","sourceRoot":"","sources":["../../src/lib/door-interaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAChD,OAAO,EAAE,KAAK,oBAAoB,EAAkB,MAAM,0BAA0B,CAAA;AAEpF,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAEtD,eAAO,MAAM,qBAAqB,QAAc,CAAA;AAChD,eAAO,MAAM,wBAAwB,MAAM,CAAA;AAE3C,OAAO,EAAE,mBAAmB,EAAE,CAAA;AAE9B,KAAK,wBAAwB,GAAG;IAC9B,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB,CAAA;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,MAAM,oBAAoB,EACjC,SAAS,EAAE,MAAM,GAAG,SAAS,UAU9B;AAmBD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,wBAAwB,QAwBxF;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,wBAAwB,QAYvF;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,wBAAwB,QAYtF"}
@@ -0,0 +1,62 @@
1
+ import { useInteractive } from '../store/use-interactive.js';
2
+ import useScene from '../store/use-scene.js';
3
+ import { isOperationDoorType } from './door-operation.js';
4
+ export const DOOR_SWING_OPEN_ANGLE = Math.PI / 2;
5
+ export const DOOR_TOGGLE_ANIMATION_MS = 520;
6
+ export { isOperationDoorType };
7
+ export function getDisplayedDoorValue(doorId, field, nodeValue) {
8
+ const interactive = useInteractive.getState();
9
+ const runtimeValue = interactive.doors[doorId]?.[field];
10
+ if (runtimeValue !== undefined)
11
+ return runtimeValue;
12
+ const queuedValue = interactive.doorAnimations[doorId]?.from;
13
+ if (queuedValue !== undefined)
14
+ return queuedValue;
15
+ return nodeValue ?? 0;
16
+ }
17
+ function startDoorOpenAnimation(doorId, field, from, to, options) {
18
+ useInteractive.getState().startDoorAnimation(doorId, {
19
+ field,
20
+ from,
21
+ to,
22
+ startedAt: null,
23
+ durationMs: DOOR_TOGGLE_ANIMATION_MS,
24
+ persist: options?.persist ?? true,
25
+ });
26
+ }
27
+ export function toggleDoorOpenState(doorId, options) {
28
+ const node = useScene.getState().nodes[doorId];
29
+ if (node?.type !== 'door' || node.openingKind === 'opening')
30
+ return;
31
+ if (isOperationDoorType(node.doorType)) {
32
+ const currentOpenAmount = getDisplayedDoorValue(doorId, 'operationState', node.operationState);
33
+ startDoorOpenAnimation(doorId, 'operationState', currentOpenAmount, currentOpenAmount >= 0.5 ? 0 : 1, options);
34
+ return;
35
+ }
36
+ const currentSwingAngle = getDisplayedDoorValue(doorId, 'swingAngle', node.swingAngle);
37
+ startDoorOpenAnimation(doorId, 'swingAngle', currentSwingAngle, currentSwingAngle >= DOOR_SWING_OPEN_ANGLE / 2 ? 0 : DOOR_SWING_OPEN_ANGLE, options);
38
+ }
39
+ export function closeDoorOpenState(doorId, options) {
40
+ const node = useScene.getState().nodes[doorId];
41
+ if (node?.type !== 'door' || node.openingKind === 'opening')
42
+ return;
43
+ if (isOperationDoorType(node.doorType)) {
44
+ const currentOpenAmount = getDisplayedDoorValue(doorId, 'operationState', node.operationState);
45
+ startDoorOpenAnimation(doorId, 'operationState', currentOpenAmount, 0, options);
46
+ return;
47
+ }
48
+ const currentSwingAngle = getDisplayedDoorValue(doorId, 'swingAngle', node.swingAngle);
49
+ startDoorOpenAnimation(doorId, 'swingAngle', currentSwingAngle, 0, options);
50
+ }
51
+ export function openDoorOpenState(doorId, options) {
52
+ const node = useScene.getState().nodes[doorId];
53
+ if (node?.type !== 'door' || node.openingKind === 'opening')
54
+ return;
55
+ if (isOperationDoorType(node.doorType)) {
56
+ const currentOpenAmount = getDisplayedDoorValue(doorId, 'operationState', node.operationState);
57
+ startDoorOpenAnimation(doorId, 'operationState', currentOpenAmount, 1, options);
58
+ return;
59
+ }
60
+ const currentSwingAngle = getDisplayedDoorValue(doorId, 'swingAngle', node.swingAngle);
61
+ startDoorOpenAnimation(doorId, 'swingAngle', currentSwingAngle, DOOR_SWING_OPEN_ANGLE, options);
62
+ }
@@ -0,0 +1,19 @@
1
+ import type { DoorNode } from '../schema/index.js';
2
+ /** Leaf centre relative to the full opening centre, in the door's own frame (metres). */
3
+ export declare function getDoorOpeningSize(door: {
4
+ width: number;
5
+ height: number;
6
+ doorType?: string;
7
+ openingKind?: string;
8
+ source?: unknown;
9
+ sidelightLeft?: number;
10
+ sidelightRight?: number;
11
+ transomHeight?: number;
12
+ }): {
13
+ width: number;
14
+ height: number;
15
+ leafOffsetX: number;
16
+ };
17
+ /** Keep the host cutout fixed when the leaf's facing changes. */
18
+ export declare function doorPositionForFacing(door: Pick<DoorNode, 'position' | 'rotation'> & Parameters<typeof getDoorOpeningSize>[0], nextRotation: DoorNode['rotation']): DoorNode['position'];
19
+ //# sourceMappingURL=door-opening.d.ts.map