@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,206 @@
1
+ import { beamBottomElevation, createBeam } from './beam.js';
2
+ import { createFramingPost, FRAMING_POST_MIN_HEIGHT, framingPostFields, framingPostSize, } from './framing-post.js';
3
+ import { planPorchFraming, porchFramingSettings } from './porch-framing.js';
4
+ /** The porch a post or beam was made for, when the kernel made it. */
5
+ export function porchPartOf(node) {
6
+ if (node?.type !== 'column' && node?.type !== 'beam')
7
+ return null;
8
+ const metadata = node.metadata;
9
+ return typeof metadata?.porchOf === 'string' && typeof metadata.porchPart === 'string'
10
+ ? metadata
11
+ : null;
12
+ }
13
+ /** Keep generated parts linked when reconciliation assigns their room its stable ID. */
14
+ export function remapPorchOwner(metadata, ids) {
15
+ return typeof metadata?.porchOf === 'string' && ids.has(metadata.porchOf)
16
+ ? { ...metadata, porchOf: ids.get(metadata.porchOf) }
17
+ : undefined;
18
+ }
19
+ const round = (value) => Math.round(value * 1e6) / 1e6;
20
+ /** A part's shape, as it was made: anything else is a hand edit. */
21
+ function seedOf(part) {
22
+ if (part.type === 'column')
23
+ return JSON.stringify([part.position[0], part.position[2], part.width, part.depth, part.height, part.rotation].map(round));
24
+ return JSON.stringify([
25
+ ...[...part.start, ...part.end, part.width, part.depth].map(round),
26
+ part.topElevation === undefined ? null : round(part.topElevation),
27
+ part.placement,
28
+ ]);
29
+ }
30
+ /**
31
+ * A porch part's id and shape, for the structure sync to notice a hand edit or a delete (and run
32
+ * the kernel, which hands the porch's framing over); null for any other node.
33
+ */
34
+ export function porchPartSignature(node) {
35
+ return porchPartOf(node) ? JSON.stringify([node.id, seedOf(node)]) : null;
36
+ }
37
+ function edited(part) {
38
+ return seedOf(part) !== porchPartOf(part)?.porchSeed;
39
+ }
40
+ /**
41
+ * A room the kernel frames, still closed and its framing automatic: a covered porch (automatic
42
+ * unless switched off), or a deck or patio whose posts and beam are switched on (`auto: true`, to
43
+ * carry a roof over it; off by default).
44
+ */
45
+ function framedPorch(zone) {
46
+ if (!zone || zone.enclosureStatus === 'open')
47
+ return false;
48
+ if (zone.roomType === 'porch')
49
+ return zone.hasCeiling !== false && zone.porchFraming?.auto !== false;
50
+ return coverOptional(zone) && zone.porchFraming?.auto === true;
51
+ }
52
+ /** A deck or patio: its posts and beam are off until switched on. */
53
+ function coverOptional(zone) {
54
+ return zone.roomType === 'deck' || zone.roomType === 'patio';
55
+ }
56
+ /** The floor plate a porch's posts stand on: its own step-down plate, else the one it shares. */
57
+ function porchPlate(zone, plates) {
58
+ const holding = plates.filter((plate) => plate.zoneIds?.includes(zone.id));
59
+ return holding.find((plate) => plate.plateRole !== 'base') ?? holding[0];
60
+ }
61
+ const yawOf = (start, end) => Math.atan2(-(end[1] - start[1]), end[0] - start[0]);
62
+ function withPorch(node, zone, key) {
63
+ const metadata = { porchOf: zone.id, porchPart: key, porchSeed: '' };
64
+ const tagged = { ...node, metadata: { ...node.metadata, ...metadata } };
65
+ tagged.metadata.porchSeed = seedOf(tagged);
66
+ return tagged;
67
+ }
68
+ /** The porch's planned parts as nodes, reusing the ids (and the touches) of the ones it has. */
69
+ function buildParts(zone, plan, owned, plate, levelId, nodes, mintId) {
70
+ const settings = porchFramingSettings(zone);
71
+ const byKey = new Map(owned.map((part) => [porchPartOf(part).porchPart, part]));
72
+ const beams = new Map();
73
+ for (const planned of plan.beams) {
74
+ const existing = byKey.get(planned.key);
75
+ const fresh = createBeam({
76
+ start: planned.start,
77
+ end: planned.end,
78
+ preset: settings.beamSize,
79
+ levelId,
80
+ supportSlabId: plate?.id,
81
+ name: `${zone.name} beam`,
82
+ });
83
+ const beam = existing?.type === 'beam'
84
+ ? {
85
+ ...existing,
86
+ start: fresh.start,
87
+ end: fresh.end,
88
+ width: fresh.width,
89
+ depth: fresh.depth,
90
+ size: fresh.size,
91
+ plies: fresh.plies,
92
+ material: fresh.material,
93
+ placement: 'dropped',
94
+ topElevation: undefined,
95
+ supportSlabId: plate?.id,
96
+ }
97
+ : { ...fresh, id: mintId('beam') };
98
+ beams.set(planned.key, withPorch(beam, zone, planned.key));
99
+ }
100
+ const foot = plate?.elevation ?? 0;
101
+ const posts = plan.posts.map((planned) => {
102
+ // Up to the underside of the beam it carries (the lower of two at a corner).
103
+ const bottoms = planned.beams.flatMap((key) => {
104
+ const beam = beams.get(key);
105
+ return beam ? [beamBottomElevation(nodes, beam)] : [];
106
+ });
107
+ const height = Math.max(FRAMING_POST_MIN_HEIGHT, Math.min(...bottoms) - foot);
108
+ const run = plan.beams.find((beam) => beam.key === planned.beams.at(-1));
109
+ const rotation = run ? yawOf(run.start, run.end) : 0;
110
+ const existing = byKey.get(planned.key);
111
+ const position = [planned.position[0], 0, planned.position[1]];
112
+ const post = existing?.type === 'column'
113
+ ? {
114
+ ...existing,
115
+ ...(framingPostSize(existing) === settings.postSize
116
+ ? {}
117
+ : framingPostFields(settings.postSize, existing.postBase ?? 'post-base')),
118
+ position,
119
+ rotation,
120
+ height,
121
+ supportSlabId: plate?.id,
122
+ }
123
+ : {
124
+ ...createFramingPost({
125
+ position: planned.position,
126
+ size: settings.postSize,
127
+ base: 'post-base',
128
+ height,
129
+ levelId,
130
+ supportSlabId: plate?.id,
131
+ rotation,
132
+ name: `${zone.name} post`,
133
+ }),
134
+ id: mintId('column'),
135
+ };
136
+ return withPorch(post, zone, planned.key);
137
+ });
138
+ return [...beams.values(), ...posts];
139
+ }
140
+ /**
141
+ * The kernel's porch framing pass over one level: which posts and beams to put and delete, and
142
+ * the porches whose framing a hand edit has handed to the user. `zones` are the level's rooms as
143
+ * the pass leaves them, `plates` its floor plates, `current` a node as the pass has it so far;
144
+ * `previousNodes` (the scene before the edit) tells a deleted part from one never made.
145
+ */
146
+ export function reconcilePorchFraming({ levelId, nodes, previousNodes, zones, plates, current, mintId, }) {
147
+ const put = [];
148
+ const remove = [];
149
+ const owned = new Map();
150
+ for (const node of Object.values(nodes)) {
151
+ const part = porchPartOf(node);
152
+ if (!part || node.parentId !== levelId)
153
+ continue;
154
+ const latest = (current(node.id) ?? node);
155
+ owned.set(part.porchOf, [...(owned.get(part.porchOf) ?? []), latest]);
156
+ }
157
+ const zonesById = new Map(zones.map((zone) => [zone.id, zone]));
158
+ // A porch gone, or no longer a covered one: what it made goes with it; a part edited by hand
159
+ // stays, the user's own. A deck's or patio's switched off goes whole, edited or not.
160
+ for (const [zoneId, parts] of owned) {
161
+ const zone = zonesById.get(zoneId);
162
+ if (framedPorch(zone) || zone?.porchFraming?.auto === false)
163
+ continue;
164
+ const switchedOff = !!zone && coverOptional(zone) && zone.porchFraming?.auto === undefined;
165
+ for (const part of parts) {
166
+ if (switchedOff || !edited(part))
167
+ remove.push(part.id);
168
+ else {
169
+ const { porchOf: _porchOf, porchPart: _porchPart, porchSeed: _seed, ...metadata } = part.metadata;
170
+ put.push({ ...part, metadata });
171
+ }
172
+ }
173
+ }
174
+ for (const zone of zones) {
175
+ if (!framedPorch(zone))
176
+ continue;
177
+ const parts = owned.get(zone.id) ?? [];
178
+ const before = previousNodes?.[zone.id];
179
+ const settingsChanged = before?.type !== 'zone' ||
180
+ before.roomType !== zone.roomType ||
181
+ JSON.stringify(before.porchFraming ?? null) !== JSON.stringify(zone.porchFraming ?? null);
182
+ const plan = planPorchFraming(zone, nodes);
183
+ if (!settingsChanged) {
184
+ // A part of the plan gone since the edit before: deleted by hand. (One the plan dropped
185
+ // went with an earlier pass.)
186
+ const planned = new Set([...plan.posts, ...plan.beams].map((part) => part.key));
187
+ const deleted = Object.values(previousNodes ?? {}).some((node) => {
188
+ const part = porchPartOf(node);
189
+ return part?.porchOf === zone.id && planned.has(part.porchPart) && !nodes[node.id];
190
+ });
191
+ if (deleted || parts.some(edited)) {
192
+ put.push({ ...zone, porchFraming: { ...zone.porchFraming, auto: false } });
193
+ continue;
194
+ }
195
+ }
196
+ const built = buildParts(zone, plan,
197
+ // Settings changed: what a hand made goes too; the porch is rebuilt from its settings.
198
+ parts, porchPlate(zone, plates), levelId, nodes, mintId);
199
+ const kept = new Set(built.map((part) => part.id));
200
+ for (const part of parts)
201
+ if (!kept.has(part.id))
202
+ remove.push(part.id);
203
+ put.push(...built);
204
+ }
205
+ return { put, delete: remove };
206
+ }
@@ -0,0 +1,44 @@
1
+ import type { AnyNode, ZoneNode } from '../schema/index.js';
2
+ import { type FramingPostSize } from './framing-post.js';
3
+ /** Post faces sit this far in from the slab edge. */
4
+ export declare const PORCH_POST_SETBACK: number;
5
+ /** Posts no more than 8 ft apart (the porch generator's and DCA 6's limit). */
6
+ export declare const PORCH_POST_SPACING: number;
7
+ export type PorchFramingSettings = {
8
+ /** A framing post size (`FRAMING_POST_SIZES`). */
9
+ postSize: FramingPostSize;
10
+ postSpacing: number;
11
+ /** A stock beam size id (`BEAM_SIZE_PRESETS`). */
12
+ beamSize: string;
13
+ };
14
+ export declare const DEFAULT_PORCH_FRAMING: PorchFramingSettings;
15
+ /** A porch's framing settings: its own, else the defaults (an unknown size is the default). */
16
+ export declare function porchFramingSettings(zone: Pick<ZoneNode, 'porchFraming'>): PorchFramingSettings;
17
+ type P = [number, number];
18
+ export type PorchPostPlan = {
19
+ /** Stable within the porch: which corner or side, and which bay. */
20
+ key: string;
21
+ position: P;
22
+ /** Actual post width (square). */
23
+ size: number;
24
+ /** The beams (their keys) it stands under: two at a corner, one along a side. */
25
+ beams: string[];
26
+ };
27
+ export type PorchBeamPlan = {
28
+ key: string;
29
+ start: P;
30
+ end: P;
31
+ width: number;
32
+ depth: number;
33
+ };
34
+ export type PorchFramingPlan = {
35
+ posts: PorchPostPlan[];
36
+ beams: PorchBeamPlan[];
37
+ };
38
+ /**
39
+ * The posts and beams for porch `zone` among `nodes` (its level's walls decide which sides are
40
+ * open). Empty when no side is open.
41
+ */
42
+ export declare function planPorchFraming(zone: Pick<ZoneNode, 'polygon' | 'parentId' | 'porchFraming'>, nodes: Readonly<Record<string, AnyNode>>): PorchFramingPlan;
43
+ export {};
44
+ //# sourceMappingURL=porch-framing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"porch-framing.d.ts","sourceRoot":"","sources":["../../src/lib/porch-framing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAY,QAAQ,EAAE,MAAM,WAAW,CAAA;AAG5D,OAAO,EAAiD,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAepG,qDAAqD;AACrD,eAAO,MAAM,kBAAkB,QAAW,CAAA;AAC1C,+EAA+E;AAC/E,eAAO,MAAM,kBAAkB,QAAS,CAAA;AAExC,MAAM,MAAM,oBAAoB,GAAG;IACjC,kDAAkD;IAClD,QAAQ,EAAE,eAAe,CAAA;IACzB,WAAW,EAAE,MAAM,CAAA;IACnB,kDAAkD;IAClD,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,eAAO,MAAM,qBAAqB,EAAE,oBAInC,CAAA;AAKD,+FAA+F;AAC/F,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,GAAG,oBAAoB,CAU/F;AAED,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAEzB,MAAM,MAAM,aAAa,GAAG;IAC1B,oEAAoE;IACpE,GAAG,EAAE,MAAM,CAAA;IACX,QAAQ,EAAE,CAAC,CAAA;IACX,kCAAkC;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ,iFAAiF;IACjF,KAAK,EAAE,MAAM,EAAE,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,CAAC,CAAA;IACR,GAAG,EAAE,CAAC,CAAA;IACN,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAAE,KAAK,EAAE,aAAa,EAAE,CAAC;IAAC,KAAK,EAAE,aAAa,EAAE,CAAA;CAAE,CAAA;AAkCjF;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,SAAS,GAAG,UAAU,GAAG,cAAc,CAAC,EAC7D,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACvC,gBAAgB,CAqFlB"}
@@ -0,0 +1,159 @@
1
+ import { DEFAULT_BEAM_SIZE_PRESET_ID } from '../schema/nodes/beam.js';
2
+ import { beamSizePreset } from './beam.js';
3
+ import { DEFAULT_FRAMING_POST_SIZE, FRAMING_POST_SIZES } from './framing-post.js';
4
+ /**
5
+ * Where a porch's posts and beam go (a porch room, `lib/outdoor-room`): a post on each outside
6
+ * corner, where two open sides meet (a porch in a corner of the house gets its one corner post),
7
+ * more along each open side at most `postSpacing` apart, evenly; none where a side meets the house,
8
+ * whose wall carries the beam's end. The beam runs along each open side on the posts, dropped
9
+ * under the porch ceiling. Pure geometry: the structure kernel turns it into post and beam nodes.
10
+ *
11
+ * A side is open when no wall stands on it (an invisible wall) or the wall on it is a railing.
12
+ */
13
+ const IN = 0.0254;
14
+ const FT = 0.3048;
15
+ /** Post faces sit this far in from the slab edge. */
16
+ export const PORCH_POST_SETBACK = 1.5 * IN;
17
+ /** Posts no more than 8 ft apart (the porch generator's and DCA 6's limit). */
18
+ export const PORCH_POST_SPACING = 8 * FT;
19
+ export const DEFAULT_PORCH_FRAMING = {
20
+ postSize: DEFAULT_FRAMING_POST_SIZE,
21
+ postSpacing: PORCH_POST_SPACING,
22
+ beamSize: DEFAULT_BEAM_SIZE_PRESET_ID,
23
+ };
24
+ const isPostSize = (size) => !!size && Object.hasOwn(FRAMING_POST_SIZES, size);
25
+ /** A porch's framing settings: its own, else the defaults (an unknown size is the default). */
26
+ export function porchFramingSettings(zone) {
27
+ const own = zone.porchFraming;
28
+ return {
29
+ postSize: isPostSize(own?.postSize) ? own.postSize : DEFAULT_PORCH_FRAMING.postSize,
30
+ postSpacing: own?.postSpacing ?? DEFAULT_PORCH_FRAMING.postSpacing,
31
+ beamSize: own?.beamSize && beamSizePreset(own.beamSize)
32
+ ? beamSizePreset(own.beamSize).id
33
+ : DEFAULT_PORCH_FRAMING.beamSize,
34
+ };
35
+ }
36
+ const sub = (a, b) => [a[0] - b[0], a[1] - b[1]];
37
+ const add = (a, b) => [a[0] + b[0], a[1] + b[1]];
38
+ const scale = (a, s) => [a[0] * s, a[1] * s];
39
+ const len = (a) => Math.hypot(a[0], a[1]);
40
+ const unit = (a) => {
41
+ const l = len(a);
42
+ return l > 1e-12 ? [a[0] / l, a[1] / l] : [0, 0];
43
+ };
44
+ /** The wall standing along `a` → `b` (its reference line on the segment), if any. */
45
+ function wallAlong(a, b, walls) {
46
+ const dir = unit(sub(b, a));
47
+ const mid = scale(add(a, b), 0.5);
48
+ return walls.find((wall) => {
49
+ if ((wall.curveOffset ?? 0) !== 0)
50
+ return false;
51
+ const w = sub(wall.end, wall.start);
52
+ const length = len(w);
53
+ if (length < 1e-6)
54
+ return false;
55
+ const u = scale(w, 1 / length);
56
+ if (Math.abs(u[0] * dir[1] - u[1] * dir[0]) > 1e-3)
57
+ return false;
58
+ const rel = sub(mid, wall.start);
59
+ const across = Math.abs(rel[0] * u[1] - rel[1] * u[0]);
60
+ const along = rel[0] * u[0] + rel[1] * u[1];
61
+ return across < 1e-3 && along > -1e-3 && along < length + 1e-3;
62
+ });
63
+ }
64
+ /** Whether a wall is a railing, which a porch's posts and beam still stand along. */
65
+ function isRailing(wall) {
66
+ return wall.wallType === 'railing';
67
+ }
68
+ /**
69
+ * The posts and beams for porch `zone` among `nodes` (its level's walls decide which sides are
70
+ * open). Empty when no side is open.
71
+ */
72
+ export function planPorchFraming(zone, nodes) {
73
+ const settings = porchFramingSettings(zone);
74
+ const postSize = FRAMING_POST_SIZES[settings.postSize];
75
+ const beam = beamSizePreset(settings.beamSize);
76
+ const spacing = Math.max(0.6, settings.postSpacing);
77
+ const walls = Object.values(nodes).filter((node) => node.type === 'wall' && node.parentId === zone.parentId);
78
+ const polygon = zone.polygon;
79
+ const n = polygon.length;
80
+ if (n < 3)
81
+ return { posts: [], beams: [] };
82
+ // Inward normals: the polygon's winding decides which side of each edge is inside.
83
+ let area = 0;
84
+ for (let i = 0; i < n; i++) {
85
+ const a = polygon[i];
86
+ const b = polygon[(i + 1) % n];
87
+ area += a[0] * b[1] - b[0] * a[1];
88
+ }
89
+ const turn = area > 0 ? 1 : -1;
90
+ const edges = polygon.map((a, i) => {
91
+ const b = polygon[(i + 1) % n];
92
+ const wall = wallAlong(a, b, walls);
93
+ const dir = unit(sub(b, a));
94
+ const inward = [-dir[1] * turn, dir[0] * turn];
95
+ return { a, b, dir, inward, open: !wall || isRailing(wall), wall };
96
+ });
97
+ const inset = postSize / 2 + PORCH_POST_SETBACK;
98
+ const posts = [];
99
+ const beams = [];
100
+ // The post line of an edge: the edge moved in by the inset.
101
+ const onLine = (edge, p) => add(p, scale(edge.inward, inset));
102
+ // The outside corner where open edge i-1 meets open edge i: the two post lines' crossing.
103
+ const corner = (i) => {
104
+ const prev = edges[(i - 1 + n) % n];
105
+ const next = edges[i];
106
+ const p = onLine(prev, prev.b);
107
+ const q = onLine(next, next.a);
108
+ const denom = prev.dir[0] * next.dir[1] - prev.dir[1] * next.dir[0];
109
+ if (Math.abs(denom) < 1e-9)
110
+ return q;
111
+ const t = ((q[0] - p[0]) * next.dir[1] - (q[1] - p[1]) * next.dir[0]) / denom;
112
+ return add(p, scale(prev.dir, t));
113
+ };
114
+ edges.forEach((edge, i) => {
115
+ if (!edge.open)
116
+ return;
117
+ const prev = edges[(i - 1 + n) % n];
118
+ const next = edges[(i + 1) % n];
119
+ const startCorner = prev.open;
120
+ const endCorner = next.open;
121
+ // A side meeting the house starts at the wall's face, where the beam bears.
122
+ const startFace = startCorner ? 0 : (prev.wall?.thickness ?? 0.15) / 2;
123
+ const endFace = endCorner ? 0 : (next.wall?.thickness ?? 0.15) / 2;
124
+ const start = startCorner ? corner(i) : add(onLine(edge, edge.a), scale(edge.dir, startFace));
125
+ const end = endCorner
126
+ ? corner((i + 1) % n)
127
+ : sub(onLine(edge, edge.b), scale(edge.dir, endFace));
128
+ if (startCorner)
129
+ posts.push({
130
+ key: `corner:${i}`,
131
+ position: start,
132
+ size: postSize,
133
+ beams: [`beam:${(i - 1 + n) % n}`, `beam:${i}`],
134
+ });
135
+ const run = sub(end, start);
136
+ const length = len(run);
137
+ if (length < postSize)
138
+ return;
139
+ const bays = Math.max(1, Math.ceil(length / spacing - 1e-9));
140
+ for (let k = 1; k < bays; k++)
141
+ posts.push({
142
+ key: `side:${i}:${k}`,
143
+ position: add(start, scale(run, k / bays)),
144
+ size: postSize,
145
+ beams: [`beam:${i}`],
146
+ });
147
+ // The beam reaches the corner posts' outside faces, so two sides' beams meet over a corner.
148
+ const reachStart = startCorner ? postSize / 2 : 0;
149
+ const reachEnd = endCorner ? postSize / 2 : 0;
150
+ beams.push({
151
+ key: `beam:${i}`,
152
+ start: sub(start, scale(edge.dir, reachStart)),
153
+ end: add(end, scale(edge.dir, reachEnd)),
154
+ width: beam.width,
155
+ depth: beam.depth,
156
+ });
157
+ });
158
+ return { posts, beams };
159
+ }
@@ -0,0 +1,13 @@
1
+ import type { WallNode } from '../schema/index.js';
2
+ import type { BoundarySpan } from './room-topology-index.js';
3
+ /** The ids of the railing walls among `walls`. */
4
+ export declare function railingWallIds(walls: readonly WallNode[]): Set<string>;
5
+ /**
6
+ * The rooms a railing fences off from the outside: a railing on the room's edge with no room
7
+ * standing behind some stretch of it (a deck's or a porch's guard on the storey's outline). A
8
+ * railing is a guard, not an enclosure, so such a room is outside whatever covers it, and a wall
9
+ * it shares with the house faces outdoors. A railing with rooms on both faces (round a stair well,
10
+ * along a loft) leaves them inside.
11
+ */
12
+ export declare function railingFencedRoomIds(spans: readonly BoundarySpan[], railingIds: ReadonlySet<string>): Set<string>;
13
+ //# sourceMappingURL=railing-rooms.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"railing-rooms.d.ts","sourceRoot":"","sources":["../../src/lib/railing-rooms.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEzC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAKzD,kDAAkD;AAClD,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CAEtE;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,SAAS,YAAY,EAAE,EAC9B,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,GAC9B,GAAG,CAAC,MAAM,CAAC,CAwBb"}
@@ -0,0 +1,37 @@
1
+ import { isRailingWall } from '../schema/nodes/railing-wall.js';
2
+ /** Span overlap below this (a fraction of the boundary) is a shared endpoint, not a shared edge. */
3
+ const SPAN_OVERLAP = 1e-6;
4
+ /** The ids of the railing walls among `walls`. */
5
+ export function railingWallIds(walls) {
6
+ return new Set(walls.flatMap((wall) => (isRailingWall(wall) ? [wall.id] : [])));
7
+ }
8
+ /**
9
+ * The rooms a railing fences off from the outside: a railing on the room's edge with no room
10
+ * standing behind some stretch of it (a deck's or a porch's guard on the storey's outline). A
11
+ * railing is a guard, not an enclosure, so such a room is outside whatever covers it, and a wall
12
+ * it shares with the house faces outdoors. A railing with rooms on both faces (round a stair well,
13
+ * along a loft) leaves them inside.
14
+ */
15
+ export function railingFencedRoomIds(spans, railingIds) {
16
+ const railings = spans.filter((span) => span.kind === 'wall' && railingIds.has(span.boundaryId));
17
+ const fenced = new Set();
18
+ for (const span of railings) {
19
+ const behind = railings
20
+ .filter((other) => other.boundaryId === span.boundaryId &&
21
+ other.face !== span.face &&
22
+ Math.min(span.t1, other.t1) - Math.max(span.t0, other.t0) > SPAN_OVERLAP)
23
+ .sort((a, b) => a.t0 - b.t0);
24
+ let reach = span.t0;
25
+ let open = false;
26
+ for (const other of behind) {
27
+ if (other.t0 > reach + SPAN_OVERLAP) {
28
+ open = true;
29
+ break;
30
+ }
31
+ reach = Math.max(reach, other.t1);
32
+ }
33
+ if (open || reach < span.t1 - SPAN_OVERLAP)
34
+ fenced.add(span.roomId);
35
+ }
36
+ return fenced;
37
+ }
@@ -0,0 +1,135 @@
1
+ import { type RoofSegmentNode } from '../schema/nodes/roof-segment.js';
2
+ import type { RoofEaveCut } from '../schema/nodes/roof-types.js';
3
+ /** A 1x board's actual thickness: every fascia and rake board is nominal 1x. */
4
+ export declare const FASCIA_THICKNESS: number;
5
+ /** How far a fascia or rake board drops below the tails' lowest point, past a soffit's edge. */
6
+ export declare const FASCIA_DROP: number;
7
+ /** The run of a plumb-and-level tail's level cut: a 2x4's width for the soffit's edge to nail to. */
8
+ export declare const LEVEL_CUT_RUN: number;
9
+ /** A boxed eave's soffit: a 1/2 in panel nailed up to the level cuts. */
10
+ export declare const SOFFIT_THICKNESS: number;
11
+ export type FasciaStock = '1x6' | '1x8' | '1x10' | '1x12';
12
+ /** The 1x boards a fascia or rake board is cut from, narrowest first, at their actual widths. */
13
+ export declare const FASCIA_STOCK: readonly {
14
+ size: FasciaStock;
15
+ width: number;
16
+ }[];
17
+ /**
18
+ * The 1x a board `width` wide is cut from: the narrowest stock as wide, ripped down to it when
19
+ * wider. Past a 1x12 no 1x is wide enough: a ripped width of wider stock (`stock` null).
20
+ */
21
+ export declare function fasciaStockFor(width: number): {
22
+ stock: FasciaStock | null;
23
+ ripped: boolean;
24
+ };
25
+ /** A point of an eave's section: `s` out from the plate line in plan, `y` up from the plate's plane there. */
26
+ export type EavePoint = readonly [number, number];
27
+ /** The numbers an eave is cut from (`roofEaveProfile`), the roof shell's and Bones' alike. */
28
+ export type RoofEaveInput = {
29
+ /** The slope's tangent, falling outward; 0 for a flat roof, negative where it rises (a shed's high edge). */
30
+ tan: number;
31
+ /** Out from the plate line (the wall's centre line), in plan, to the overhang's end: where the tails are cut. */
32
+ reach: number;
33
+ /** Out from the plate line to the wall's outer face. */
34
+ wallOut: number;
35
+ /** The tails' depth square to the slope: a rafter's, or a truss's top chord. */
36
+ tailDepth: number;
37
+ /**
38
+ * How far the tails' underside stands over the plate's plane, plumb: 0 for a rafter, its bottom
39
+ * chord's depth for a truss's top chord, which rides it at the heel.
40
+ */
41
+ tailLift: number;
42
+ /** The deck's depth square to the slope, from the plate's plane to the sheathing's top. */
43
+ deckDepth: number;
44
+ /** Absent, plumb. */
45
+ cut?: RoofEaveCut;
46
+ /** The fascia's own height (its width as a board) and thickness, where the plane sets them. */
47
+ fasciaHeight?: number;
48
+ fasciaThickness?: number;
49
+ /** How far the fascia's top stands over the sheathing's: a flat roof's coping band over its membrane. */
50
+ fasciaRise?: number;
51
+ };
52
+ /**
53
+ * One eave's section, the rule the roof shell's eave edge, fascia and soffit and Bones' rafter tails
54
+ * and fascia are all cut by, so the frame never hangs below the shell nor pokes out of it.
55
+ */
56
+ export type RoofEaveProfile = {
57
+ /** The cut drawn: a flat eave, or an edge rising outward, is plumb whatever the plane asks. */
58
+ cut: RoofEaveCut;
59
+ tan: number;
60
+ cos: number;
61
+ sin: number;
62
+ reach: number;
63
+ wallOut: number;
64
+ /** The sheathing's top at `s`. */
65
+ top: (s: number) => number;
66
+ /** The tails' underside at `s`. */
67
+ under: (s: number) => number;
68
+ /**
69
+ * The tails' end, from its top corner on the sheathing's top down: a plumb or square cut's two
70
+ * ends, or a plumb cut's and then its level cut's inner end.
71
+ */
72
+ end: readonly EavePoint[];
73
+ /** The tails' lowest point's height. */
74
+ low: number;
75
+ fascia: {
76
+ /** Its section: back top, front top, front bottom, back bottom. */
77
+ corners: readonly [EavePoint, EavePoint, EavePoint, EavePoint];
78
+ /** Its width as a board: plumb, its height; square to the slope, its depth along its face. */
79
+ height: number;
80
+ thickness: number;
81
+ /** Square to the slope (a `square` cut's), else plumb. */
82
+ square: boolean;
83
+ stock: FasciaStock | null;
84
+ ripped: boolean;
85
+ };
86
+ /** A boxed eave's soffit: its top (on the level cuts) and thickness, from the wall's outer face out to the fascia's back. */
87
+ soffit: {
88
+ y: number;
89
+ thickness: number;
90
+ from: number;
91
+ to: number;
92
+ } | null;
93
+ /**
94
+ * The rake board over a barge rafter on this slope: plumb, its top on the sheathing's top, as deep
95
+ * plumb (`height`) as the fascia is at the corner, or over a boxed eave as the barge with the
96
+ * fascia's drop; `width` is square to its edges, as a board.
97
+ */
98
+ rake: {
99
+ height: number;
100
+ width: number;
101
+ stock: FasciaStock | null;
102
+ ripped: boolean;
103
+ };
104
+ };
105
+ /**
106
+ * An eave cut to its plane's rule. The tails reach `reach` out from the plate line along the
107
+ * sheathing's top, the deck's full depth under it:
108
+ * - plumb: the tails cut plumb there; a plumb 1x fascia covers their face, its top flush with the
109
+ * sheathing's top (under the drip edge), its bottom about `FASCIA_DROP` below their lowest point;
110
+ * - square: the tails cut square to the slope through the sheathing's outer edge, the fascia square
111
+ * to the slope on them, its top face in the sheathing's plane;
112
+ * - plumb-level: the plumb cut, and under it a level cut `LEVEL_CUT_RUN` long (at most half the tail's
113
+ * plumb depth deep) that a soffit nails up to, run level from the fascia's back to the wall.
114
+ * The fascia is as deep as that takes (a whole 1x where one drops at least 1/4 in under the tails,
115
+ * else one ripped to it), unless the plane sets its own.
116
+ */
117
+ export declare function roofEaveProfile(input: RoofEaveInput): RoofEaveProfile;
118
+ /**
119
+ * Whether a point of an eave's section, out past the wall's outer face, lies in the shell's eave
120
+ * (`tolerance` either way): under the sheathing's top, inside the tails' end cut, and over their
121
+ * underside or a boxed eave's soffit.
122
+ */
123
+ export declare function eaveContains(profile: RoofEaveProfile, [s, y]: EavePoint, tolerance?: number): boolean;
124
+ type EaveSegment = Pick<RoofSegmentNode, 'roofType' | 'pitch' | 'width' | 'depth' | 'wallThickness' | 'overhang' | 'deckThickness'> & Partial<Pick<RoofSegmentNode, 'gableOverhang' | 'buildUp' | 'eaveCut' | 'fasciaHeight' | 'fasciaDepth' | 'shingleThickness' | 'barrelRise' | 'barrelSegments'>>;
125
+ /**
126
+ * The numbers a roof plane's eaves are cut from (`roofEaveProfile`): its reach and wall, its layers'
127
+ * structure and deck, its eave cut and fascia. Its rafters sit on the plate; a truss's top chord on
128
+ * its bottom chord at the heel. A plane without layers is taken as rafters under a 7/16 in sheet,
129
+ * as deep as its deck. `high`: a shed's high edge, rising outward, cut plumb.
130
+ */
131
+ export declare function roofSegmentEaveInput(node: EaveSegment, edge?: 'eave' | 'high'): RoofEaveInput;
132
+ /** A roof plane's eave (`roofSegmentEaveInput`, `roofEaveProfile`). */
133
+ export declare function roofSegmentEaveProfile(node: EaveSegment, edge?: 'eave' | 'high'): RoofEaveProfile;
134
+ export {};
135
+ //# sourceMappingURL=roof-eave.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"roof-eave.d.ts","sourceRoot":"","sources":["../../src/lib/roof-eave.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,8BAA8B,CAAA;AACrC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAK7D,gFAAgF;AAChF,eAAO,MAAM,gBAAgB,QAAe,CAAA;AAC5C,gGAAgG;AAChG,eAAO,MAAM,WAAW,QAAe,CAAA;AAGvC,qGAAqG;AACrG,eAAO,MAAM,aAAa,QAAc,CAAA;AACxC,yEAAyE;AACzE,eAAO,MAAM,gBAAgB,QAAc,CAAA;AAI3C,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,CAAA;AAEzD,iGAAiG;AACjG,eAAO,MAAM,YAAY,EAAE,SAAS;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAKvE,CAAA;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,CAI5F;AAeD,8GAA8G;AAC9G,MAAM,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAEjD,8FAA8F;AAC9F,MAAM,MAAM,aAAa,GAAG;IAC1B,6GAA6G;IAC7G,GAAG,EAAE,MAAM,CAAA;IACX,iHAAiH;IACjH,KAAK,EAAE,MAAM,CAAA;IACb,wDAAwD;IACxD,OAAO,EAAE,MAAM,CAAA;IACf,gFAAgF;IAChF,SAAS,EAAE,MAAM,CAAA;IACjB;;;OAGG;IACH,QAAQ,EAAE,MAAM,CAAA;IAChB,2FAA2F;IAC3F,SAAS,EAAE,MAAM,CAAA;IACjB,qBAAqB;IACrB,GAAG,CAAC,EAAE,WAAW,CAAA;IACjB,+FAA+F;IAC/F,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,yGAAyG;IACzG,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,CAAA;AAED;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,+FAA+F;IAC/F,GAAG,EAAE,WAAW,CAAA;IAChB,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,kCAAkC;IAClC,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAA;IAC1B,mCAAmC;IACnC,KAAK,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAA;IAC5B;;;OAGG;IACH,GAAG,EAAE,SAAS,SAAS,EAAE,CAAA;IACzB,wCAAwC;IACxC,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE;QACN,mEAAmE;QACnE,OAAO,EAAE,SAAS,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAA;QAC9D,8FAA8F;QAC9F,MAAM,EAAE,MAAM,CAAA;QACd,SAAS,EAAE,MAAM,CAAA;QACjB,0DAA0D;QAC1D,MAAM,EAAE,OAAO,CAAA;QACf,KAAK,EAAE,WAAW,GAAG,IAAI,CAAA;QACzB,MAAM,EAAE,OAAO,CAAA;KAChB,CAAA;IACD,6HAA6H;IAC7H,MAAM,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;IACzE;;;;OAIG;IACH,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,CAAA;CACpF,CAAA;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,aAAa,GAAG,eAAe,CAsFrE;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,eAAe,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,SAAI,GAAG,OAAO,CAQhG;AAED,KAAK,WAAW,GAAG,IAAI,CACrB,eAAe,EACf,UAAU,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,eAAe,GAAG,UAAU,GAAG,eAAe,CAC1F,GACC,OAAO,CACL,IAAI,CACF,eAAe,EACb,eAAe,GACf,SAAS,GACT,SAAS,GACT,cAAc,GACd,aAAa,GACb,kBAAkB,GAClB,YAAY,GACZ,gBAAgB,CACnB,CACF,CAAA;AAEH;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,WAAW,EACjB,IAAI,GAAE,MAAM,GAAG,MAAe,GAC7B,aAAa,CAqBf;AAED,uEAAuE;AACvE,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,WAAW,EACjB,IAAI,GAAE,MAAM,GAAG,MAAe,GAC7B,eAAe,CAEjB"}