@pascal-app/core 1.0.5 → 1.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (940) hide show
  1. package/dist/agent-operations/__fixtures__/add-object-cases.d.ts +31 -0
  2. package/dist/agent-operations/__fixtures__/add-object-cases.d.ts.map +1 -1
  3. package/dist/agent-operations/__fixtures__/build-room-cases.d.ts.map +1 -1
  4. package/dist/agent-operations/__fixtures__/build-room-cases.js +27 -0
  5. package/dist/agent-operations/__fixtures__/cases.d.ts.map +1 -1
  6. package/dist/agent-operations/__fixtures__/cases.js +19 -11
  7. package/dist/agent-operations/__fixtures__/design-brief-cases.d.ts +25 -2
  8. package/dist/agent-operations/__fixtures__/design-brief-cases.d.ts.map +1 -1
  9. package/dist/agent-operations/__fixtures__/design-brief-cases.js +509 -66
  10. package/dist/agent-operations/__fixtures__/dressing-scenes.d.ts +30 -0
  11. package/dist/agent-operations/__fixtures__/dressing-scenes.d.ts.map +1 -0
  12. package/dist/agent-operations/__fixtures__/dressing-scenes.js +82 -0
  13. package/dist/agent-operations/__fixtures__/native-materials.d.ts +407 -9
  14. package/dist/agent-operations/__fixtures__/native-materials.d.ts.map +1 -1
  15. package/dist/agent-operations/__fixtures__/notation-cases.d.ts.map +1 -1
  16. package/dist/agent-operations/__fixtures__/notation-cases.js +14 -0
  17. package/dist/agent-operations/__fixtures__/roof-bearing-cases.d.ts +7253 -4053
  18. package/dist/agent-operations/__fixtures__/roof-bearing-cases.d.ts.map +1 -1
  19. package/dist/agent-operations/__fixtures__/room-cases.d.ts +1 -0
  20. package/dist/agent-operations/__fixtures__/room-cases.d.ts.map +1 -1
  21. package/dist/agent-operations/__fixtures__/room-cases.js +57 -1
  22. package/dist/agent-operations/__fixtures__/room-check-scenes.d.ts +51 -0
  23. package/dist/agent-operations/__fixtures__/room-check-scenes.d.ts.map +1 -0
  24. package/dist/agent-operations/__fixtures__/room-check-scenes.js +121 -0
  25. package/dist/agent-operations/__fixtures__/scene-check-cases.d.ts.map +1 -1
  26. package/dist/agent-operations/__fixtures__/scene-check-cases.js +152 -18
  27. package/dist/agent-operations/__fixtures__/search-assets-cases.d.ts.map +1 -1
  28. package/dist/agent-operations/__fixtures__/search-assets-cases.js +91 -0
  29. package/dist/agent-operations/__fixtures__/site-cases.d.ts +40 -1
  30. package/dist/agent-operations/__fixtures__/site-cases.d.ts.map +1 -1
  31. package/dist/agent-operations/__fixtures__/structure-cases.d.ts +3 -0
  32. package/dist/agent-operations/__fixtures__/structure-cases.d.ts.map +1 -1
  33. package/dist/agent-operations/__fixtures__/structure-cases.js +199 -18
  34. package/dist/agent-operations/__fixtures__/unit-cases.d.ts +6 -0
  35. package/dist/agent-operations/__fixtures__/unit-cases.d.ts.map +1 -0
  36. package/dist/agent-operations/__fixtures__/unit-cases.js +266 -0
  37. package/dist/agent-operations/__fixtures__/verify-scene-cases.d.ts +109 -73
  38. package/dist/agent-operations/__fixtures__/verify-scene-cases.d.ts.map +1 -1
  39. package/dist/agent-operations/add-column.d.ts.map +1 -1
  40. package/dist/agent-operations/add-column.js +32 -3
  41. package/dist/agent-operations/add-fence.d.ts.map +1 -1
  42. package/dist/agent-operations/add-fence.js +2 -1
  43. package/dist/agent-operations/add-level.d.ts.map +1 -1
  44. package/dist/agent-operations/add-level.js +4 -4
  45. package/dist/agent-operations/add-object.d.ts +32 -6
  46. package/dist/agent-operations/add-object.d.ts.map +1 -1
  47. package/dist/agent-operations/add-object.js +59 -12
  48. package/dist/agent-operations/add-wall.d.ts +3 -8
  49. package/dist/agent-operations/add-wall.d.ts.map +1 -1
  50. package/dist/agent-operations/add-wall.js +31 -8
  51. package/dist/agent-operations/apply-changes.d.ts.map +1 -1
  52. package/dist/agent-operations/apply-changes.js +2 -1
  53. package/dist/agent-operations/asset-catalog.d.ts +63 -0
  54. package/dist/agent-operations/asset-catalog.d.ts.map +1 -0
  55. package/dist/agent-operations/asset-catalog.js +182 -0
  56. package/dist/agent-operations/asset-views.d.ts +4 -2
  57. package/dist/agent-operations/asset-views.d.ts.map +1 -1
  58. package/dist/agent-operations/asset-views.js +1 -3
  59. package/dist/agent-operations/author-scene-checks.d.ts +38 -0
  60. package/dist/agent-operations/author-scene-checks.d.ts.map +1 -0
  61. package/dist/agent-operations/author-scene-checks.js +266 -0
  62. package/dist/agent-operations/author-scene.d.ts +54 -20
  63. package/dist/agent-operations/author-scene.d.ts.map +1 -1
  64. package/dist/agent-operations/author-scene.js +1164 -196
  65. package/dist/agent-operations/authored-scene-merge.d.ts.map +1 -1
  66. package/dist/agent-operations/authored-scene-merge.js +61 -3
  67. package/dist/agent-operations/batch.d.ts +1 -1
  68. package/dist/agent-operations/batch.d.ts.map +1 -1
  69. package/dist/agent-operations/batch.js +38 -39
  70. package/dist/agent-operations/ceiling-object-observations.d.ts.map +1 -1
  71. package/dist/agent-operations/ceiling-object-observations.js +5 -4
  72. package/dist/agent-operations/circulation-geometry.d.ts +14 -0
  73. package/dist/agent-operations/circulation-geometry.d.ts.map +1 -0
  74. package/dist/agent-operations/circulation-geometry.js +151 -0
  75. package/dist/agent-operations/circulation-graph.d.ts +72 -0
  76. package/dist/agent-operations/circulation-graph.d.ts.map +1 -0
  77. package/dist/agent-operations/circulation-graph.js +713 -0
  78. package/dist/agent-operations/circulation-non-spaces.d.ts +10 -0
  79. package/dist/agent-operations/circulation-non-spaces.d.ts.map +1 -0
  80. package/dist/agent-operations/circulation-non-spaces.js +88 -0
  81. package/dist/agent-operations/circulation-spaces.d.ts +5880 -0
  82. package/dist/agent-operations/circulation-spaces.d.ts.map +1 -0
  83. package/dist/agent-operations/circulation-spaces.js +368 -0
  84. package/dist/agent-operations/collections.d.ts.map +1 -1
  85. package/dist/agent-operations/collections.js +9 -7
  86. package/dist/agent-operations/corner-window.d.ts.map +1 -1
  87. package/dist/agent-operations/corner-window.js +2 -4
  88. package/dist/agent-operations/create-roof.d.ts.map +1 -1
  89. package/dist/agent-operations/create-roof.js +5 -7
  90. package/dist/agent-operations/create-room.d.ts +4 -1
  91. package/dist/agent-operations/create-room.d.ts.map +1 -1
  92. package/dist/agent-operations/create-room.js +7 -4
  93. package/dist/agent-operations/create-stair.js +2 -2
  94. package/dist/agent-operations/design-brief.d.ts +13 -7
  95. package/dist/agent-operations/design-brief.d.ts.map +1 -1
  96. package/dist/agent-operations/design-brief.js +172 -92
  97. package/dist/agent-operations/door-clearance.d.ts +68 -8
  98. package/dist/agent-operations/door-clearance.d.ts.map +1 -1
  99. package/dist/agent-operations/door-clearance.js +127 -20
  100. package/dist/agent-operations/dress-targets.d.ts +23 -0
  101. package/dist/agent-operations/dress-targets.d.ts.map +1 -0
  102. package/dist/agent-operations/dress-targets.js +34 -0
  103. package/dist/agent-operations/duplicate-node.d.ts +14 -0
  104. package/dist/agent-operations/duplicate-node.d.ts.map +1 -0
  105. package/dist/agent-operations/duplicate-node.js +173 -0
  106. package/dist/agent-operations/find-by-type.d.ts.map +1 -1
  107. package/dist/agent-operations/find-by-type.js +3 -0
  108. package/dist/agent-operations/furnish-room.d.ts +2 -0
  109. package/dist/agent-operations/furnish-room.d.ts.map +1 -1
  110. package/dist/agent-operations/furnish-room.js +15 -4
  111. package/dist/agent-operations/furniture-kind.d.ts +28 -1
  112. package/dist/agent-operations/furniture-kind.d.ts.map +1 -1
  113. package/dist/agent-operations/furniture-kind.js +105 -6
  114. package/dist/agent-operations/ground-reader.d.ts +10 -0
  115. package/dist/agent-operations/ground-reader.d.ts.map +1 -0
  116. package/dist/agent-operations/ground-reader.js +25 -0
  117. package/dist/agent-operations/index.d.ts +118 -12
  118. package/dist/agent-operations/index.d.ts.map +1 -1
  119. package/dist/agent-operations/index.js +26 -1
  120. package/dist/agent-operations/item-solids.d.ts +39 -0
  121. package/dist/agent-operations/item-solids.d.ts.map +1 -0
  122. package/dist/agent-operations/item-solids.js +128 -0
  123. package/dist/agent-operations/layout-clearance.d.ts +91 -11
  124. package/dist/agent-operations/layout-clearance.d.ts.map +1 -1
  125. package/dist/agent-operations/layout-clearance.js +280 -73
  126. package/dist/agent-operations/level-height-fill.d.ts.map +1 -1
  127. package/dist/agent-operations/level-height-fill.js +7 -1
  128. package/dist/agent-operations/level-reads.d.ts +5 -0
  129. package/dist/agent-operations/level-reads.d.ts.map +1 -1
  130. package/dist/agent-operations/level-reads.js +38 -2
  131. package/dist/agent-operations/list-levels.d.ts.map +1 -1
  132. package/dist/agent-operations/list-levels.js +2 -4
  133. package/dist/agent-operations/move-node.d.ts +12 -0
  134. package/dist/agent-operations/move-node.d.ts.map +1 -0
  135. package/dist/agent-operations/move-node.js +28 -0
  136. package/dist/agent-operations/move-plan.d.ts +28 -0
  137. package/dist/agent-operations/move-plan.d.ts.map +1 -0
  138. package/dist/agent-operations/move-plan.js +257 -0
  139. package/dist/agent-operations/node-patch.d.ts.map +1 -1
  140. package/dist/agent-operations/node-patch.js +15 -0
  141. package/dist/agent-operations/paint.d.ts +3 -1
  142. package/dist/agent-operations/paint.d.ts.map +1 -1
  143. package/dist/agent-operations/paint.js +14 -1
  144. package/dist/agent-operations/photo-elevation.d.ts.map +1 -1
  145. package/dist/agent-operations/photo-elevation.js +2 -1
  146. package/dist/agent-operations/place-in-room.d.ts.map +1 -1
  147. package/dist/agent-operations/place-in-room.js +1 -0
  148. package/dist/agent-operations/place-items.d.ts.map +1 -1
  149. package/dist/agent-operations/place-items.js +3 -4
  150. package/dist/agent-operations/plan-clearance.d.ts +28 -0
  151. package/dist/agent-operations/plan-clearance.d.ts.map +1 -0
  152. package/dist/agent-operations/plan-clearance.js +47 -0
  153. package/dist/agent-operations/plan-geometry.d.ts +2 -0
  154. package/dist/agent-operations/plan-geometry.d.ts.map +1 -1
  155. package/dist/agent-operations/plan-geometry.js +10 -0
  156. package/dist/agent-operations/project-files.d.ts +10 -0
  157. package/dist/agent-operations/project-files.d.ts.map +1 -1
  158. package/dist/agent-operations/reachability.d.ts +41 -0
  159. package/dist/agent-operations/reachability.d.ts.map +1 -0
  160. package/dist/agent-operations/reachability.js +199 -0
  161. package/dist/agent-operations/room-checks.d.ts +60 -0
  162. package/dist/agent-operations/room-checks.d.ts.map +1 -0
  163. package/dist/agent-operations/room-checks.js +226 -0
  164. package/dist/agent-operations/room-faces.d.ts +30 -0
  165. package/dist/agent-operations/room-faces.d.ts.map +1 -0
  166. package/dist/agent-operations/room-faces.js +31 -0
  167. package/dist/agent-operations/room-findings.d.ts +5 -2
  168. package/dist/agent-operations/room-findings.d.ts.map +1 -1
  169. package/dist/agent-operations/room-findings.js +30 -0
  170. package/dist/agent-operations/room-finishes.d.ts +87 -0
  171. package/dist/agent-operations/room-finishes.d.ts.map +1 -0
  172. package/dist/agent-operations/room-finishes.js +193 -0
  173. package/dist/agent-operations/room-floor-script.d.ts +3 -3
  174. package/dist/agent-operations/room-floor-script.js +3 -3
  175. package/dist/agent-operations/room-readings.d.ts +90 -0
  176. package/dist/agent-operations/room-readings.d.ts.map +1 -0
  177. package/dist/agent-operations/room-readings.js +369 -0
  178. package/dist/agent-operations/room-tile.d.ts +15 -0
  179. package/dist/agent-operations/room-tile.d.ts.map +1 -0
  180. package/dist/agent-operations/room-tile.js +30 -0
  181. package/dist/agent-operations/room-wet.d.ts +55 -0
  182. package/dist/agent-operations/room-wet.d.ts.map +1 -0
  183. package/dist/agent-operations/room-wet.js +203 -0
  184. package/dist/agent-operations/scene-check-policy.d.ts +5 -0
  185. package/dist/agent-operations/scene-check-policy.d.ts.map +1 -0
  186. package/dist/agent-operations/scene-check-policy.js +24 -0
  187. package/dist/agent-operations/scene-checkpoint.d.ts +10 -0
  188. package/dist/agent-operations/scene-checkpoint.d.ts.map +1 -1
  189. package/dist/agent-operations/scene-checkpoint.js +31 -0
  190. package/dist/agent-operations/scene-issue-groups.d.ts +17 -0
  191. package/dist/agent-operations/scene-issue-groups.d.ts.map +1 -0
  192. package/dist/agent-operations/scene-issue-groups.js +71 -0
  193. package/dist/agent-operations/scene-materials.d.ts +23 -0
  194. package/dist/agent-operations/scene-materials.d.ts.map +1 -1
  195. package/dist/agent-operations/scene-materials.js +41 -0
  196. package/dist/agent-operations/scene-queries.d.ts +1667 -866
  197. package/dist/agent-operations/scene-queries.d.ts.map +1 -1
  198. package/dist/agent-operations/scene-queries.js +3 -3
  199. package/dist/agent-operations/scene-review.d.ts.map +1 -1
  200. package/dist/agent-operations/scene-review.js +3 -2
  201. package/dist/agent-operations/scene-view.d.ts.map +1 -1
  202. package/dist/agent-operations/scene-view.js +91 -21
  203. package/dist/agent-operations/search-assets.d.ts +10 -6
  204. package/dist/agent-operations/search-assets.d.ts.map +1 -1
  205. package/dist/agent-operations/search-assets.js +37 -22
  206. package/dist/agent-operations/set-checkpoint.d.ts.map +1 -1
  207. package/dist/agent-operations/set-checkpoint.js +1 -0
  208. package/dist/agent-operations/set-ground-level.d.ts +1 -1
  209. package/dist/agent-operations/set-ground-level.d.ts.map +1 -1
  210. package/dist/agent-operations/set-ground-level.js +3 -14
  211. package/dist/agent-operations/site.js +3 -2
  212. package/dist/agent-operations/slab-surface-script.d.ts +25 -0
  213. package/dist/agent-operations/slab-surface-script.d.ts.map +1 -0
  214. package/dist/agent-operations/slab-surface-script.js +60 -0
  215. package/dist/agent-operations/stair-plan-footprint.d.ts +9 -0
  216. package/dist/agent-operations/stair-plan-footprint.d.ts.map +1 -0
  217. package/dist/agent-operations/stair-plan-footprint.js +50 -0
  218. package/dist/agent-operations/types.d.ts +10 -5
  219. package/dist/agent-operations/types.d.ts.map +1 -1
  220. package/dist/agent-operations/units.d.ts +26 -0
  221. package/dist/agent-operations/units.d.ts.map +1 -0
  222. package/dist/agent-operations/units.js +110 -0
  223. package/dist/agent-operations/unreachable-rooms-check.d.ts +17 -0
  224. package/dist/agent-operations/unreachable-rooms-check.d.ts.map +1 -0
  225. package/dist/agent-operations/unreachable-rooms-check.js +35 -0
  226. package/dist/agent-operations/usage-checks.d.ts +2 -0
  227. package/dist/agent-operations/usage-checks.d.ts.map +1 -0
  228. package/dist/agent-operations/usage-checks.js +12 -0
  229. package/dist/agent-operations/verify-scene.d.ts +8 -11
  230. package/dist/agent-operations/verify-scene.d.ts.map +1 -1
  231. package/dist/agent-operations/verify-scene.js +55 -11
  232. package/dist/agent-operations/wall-face-defaults.d.ts +44 -0
  233. package/dist/agent-operations/wall-face-defaults.d.ts.map +1 -0
  234. package/dist/agent-operations/wall-face-defaults.js +229 -0
  235. package/dist/agent-operations/wall-joins.d.ts +119 -0
  236. package/dist/agent-operations/wall-joins.d.ts.map +1 -0
  237. package/dist/agent-operations/wall-joins.js +308 -0
  238. package/dist/agent-operations/wall-object-observations.d.ts.map +1 -1
  239. package/dist/agent-operations/wall-object-observations.js +4 -6
  240. package/dist/agent-operations/wall-skirting.d.ts.map +1 -1
  241. package/dist/agent-operations/wall-skirting.js +2 -0
  242. package/dist/agent-operations/wall-type.d.ts +49 -0
  243. package/dist/agent-operations/wall-type.d.ts.map +1 -0
  244. package/dist/agent-operations/wall-type.js +31 -0
  245. package/dist/agent-operations/zone-coverage.d.ts +85 -0
  246. package/dist/agent-operations/zone-coverage.d.ts.map +1 -0
  247. package/dist/agent-operations/zone-coverage.js +208 -0
  248. package/dist/agent-tools/add-object.d.ts +31 -0
  249. package/dist/agent-tools/add-object.d.ts.map +1 -1
  250. package/dist/agent-tools/add-object.js +44 -7
  251. package/dist/agent-tools/assets.d.ts +4 -0
  252. package/dist/agent-tools/assets.d.ts.map +1 -1
  253. package/dist/agent-tools/assets.js +11 -1
  254. package/dist/agent-tools/author-scene.d.ts +810 -15
  255. package/dist/agent-tools/author-scene.d.ts.map +1 -1
  256. package/dist/agent-tools/author-scene.js +275 -34
  257. package/dist/agent-tools/batch.d.ts +1 -1
  258. package/dist/agent-tools/batch.d.ts.map +1 -1
  259. package/dist/agent-tools/batch.js +5 -1
  260. package/dist/agent-tools/checkpoints.js +1 -1
  261. package/dist/agent-tools/columns.d.ts +14 -0
  262. package/dist/agent-tools/columns.d.ts.map +1 -1
  263. package/dist/agent-tools/columns.js +14 -2
  264. package/dist/agent-tools/contract.d.ts +10 -0
  265. package/dist/agent-tools/contract.d.ts.map +1 -1
  266. package/dist/agent-tools/contract.js +5 -1
  267. package/dist/agent-tools/corner-window.d.ts +1 -0
  268. package/dist/agent-tools/corner-window.d.ts.map +1 -1
  269. package/dist/agent-tools/corner-window.js +1 -1
  270. package/dist/agent-tools/create-room.d.ts +85 -0
  271. package/dist/agent-tools/create-room.d.ts.map +1 -1
  272. package/dist/agent-tools/create-room.js +8 -1
  273. package/dist/agent-tools/design-brief.d.ts +513 -7
  274. package/dist/agent-tools/design-brief.d.ts.map +1 -1
  275. package/dist/agent-tools/design-brief.js +192 -14
  276. package/dist/agent-tools/designs.js +1 -1
  277. package/dist/agent-tools/find-by-type.js +1 -1
  278. package/dist/agent-tools/index.d.ts +658 -10
  279. package/dist/agent-tools/index.d.ts.map +1 -1
  280. package/dist/agent-tools/index.js +9 -1
  281. package/dist/agent-tools/levels.js +4 -4
  282. package/dist/agent-tools/move-duplicate.d.ts +65 -0
  283. package/dist/agent-tools/move-duplicate.d.ts.map +1 -0
  284. package/dist/agent-tools/move-duplicate.js +68 -0
  285. package/dist/agent-tools/paint.d.ts +6 -0
  286. package/dist/agent-tools/paint.d.ts.map +1 -1
  287. package/dist/agent-tools/paint.js +7 -3
  288. package/dist/agent-tools/photo-elevation.js +1 -1
  289. package/dist/agent-tools/project-files.d.ts +2 -2
  290. package/dist/agent-tools/project-files.d.ts.map +1 -1
  291. package/dist/agent-tools/project-files.js +1 -1
  292. package/dist/agent-tools/refusal.d.ts +9 -1
  293. package/dist/agent-tools/refusal.d.ts.map +1 -1
  294. package/dist/agent-tools/refusal.js +5 -1
  295. package/dist/agent-tools/roofs.js +1 -1
  296. package/dist/agent-tools/room-structure.d.ts +60 -0
  297. package/dist/agent-tools/room-structure.d.ts.map +1 -1
  298. package/dist/agent-tools/room-structure.js +20 -1
  299. package/dist/agent-tools/search-materials.d.ts +1 -0
  300. package/dist/agent-tools/search-materials.d.ts.map +1 -1
  301. package/dist/agent-tools/site.js +1 -1
  302. package/dist/agent-tools/stairs.js +1 -1
  303. package/dist/agent-tools/units.d.ts +84 -0
  304. package/dist/agent-tools/units.d.ts.map +1 -0
  305. package/dist/agent-tools/units.js +54 -0
  306. package/dist/agent-tools/verify-scene-usage.d.ts +44 -0
  307. package/dist/agent-tools/verify-scene-usage.d.ts.map +1 -0
  308. package/dist/agent-tools/verify-scene-usage.js +146 -0
  309. package/dist/agent-tools/verify-scene.d.ts +12 -1
  310. package/dist/agent-tools/verify-scene.d.ts.map +1 -1
  311. package/dist/agent-tools/verify-scene.js +183 -3
  312. package/dist/agent-tools/view-scene.d.ts +3 -0
  313. package/dist/agent-tools/view-scene.d.ts.map +1 -1
  314. package/dist/agent-tools/view-scene.js +4 -1
  315. package/dist/agent-tools/wall-openings.d.ts +121 -2
  316. package/dist/agent-tools/wall-openings.d.ts.map +1 -1
  317. package/dist/agent-tools/wall-openings.js +123 -18
  318. package/dist/agent-tools/walls.d.ts +30 -0
  319. package/dist/agent-tools/walls.d.ts.map +1 -1
  320. package/dist/agent-tools/walls.js +54 -2
  321. package/dist/building/__fixtures__/wall-opening-cases.d.ts +340 -195
  322. package/dist/building/__fixtures__/wall-opening-cases.d.ts.map +1 -1
  323. package/dist/building/__fixtures__/wall-opening-cases.js +13 -0
  324. package/dist/building/code-profile.d.ts +231 -0
  325. package/dist/building/code-profile.d.ts.map +1 -0
  326. package/dist/building/code-profile.js +208 -0
  327. package/dist/building/corner-window.d.ts +2 -2
  328. package/dist/building/corner-window.d.ts.map +1 -1
  329. package/dist/building/corner-window.js +11 -2
  330. package/dist/building/door-types.d.ts +1 -0
  331. package/dist/building/door-types.d.ts.map +1 -1
  332. package/dist/building/door-types.js +2 -0
  333. package/dist/building/floor-item-fit.d.ts.map +1 -1
  334. package/dist/building/floor-item-fit.js +2 -4
  335. package/dist/building/ground-level.d.ts +1 -3
  336. package/dist/building/ground-level.d.ts.map +1 -1
  337. package/dist/building/ground-level.js +3 -5
  338. package/dist/building/index.d.ts +2 -0
  339. package/dist/building/index.d.ts.map +1 -1
  340. package/dist/building/index.js +2 -0
  341. package/dist/building/level-duplication.d.ts +5951 -4351
  342. package/dist/building/level-duplication.d.ts.map +1 -1
  343. package/dist/building/level-insertion.d.ts +1 -1
  344. package/dist/building/level-wall-copy.d.ts +24 -0
  345. package/dist/building/level-wall-copy.d.ts.map +1 -0
  346. package/dist/building/level-wall-copy.js +53 -0
  347. package/dist/building/merge-windows.d.ts.map +1 -1
  348. package/dist/building/merge-windows.js +1 -0
  349. package/dist/building/opening-style-presets.d.ts +2 -0
  350. package/dist/building/opening-style-presets.d.ts.map +1 -1
  351. package/dist/building/opening-style-presets.js +26 -5
  352. package/dist/building/room-use.d.ts +26 -0
  353. package/dist/building/room-use.d.ts.map +1 -0
  354. package/dist/building/room-use.js +102 -0
  355. package/dist/building/wall-openings.d.ts +115 -7
  356. package/dist/building/wall-openings.d.ts.map +1 -1
  357. package/dist/building/wall-openings.js +121 -29
  358. package/dist/building/window-types.d.ts +1 -0
  359. package/dist/building/window-types.d.ts.map +1 -1
  360. package/dist/building/window-types.js +3 -0
  361. package/dist/coherence/__fixtures__/enclosure-scenes.d.ts +84 -0
  362. package/dist/coherence/__fixtures__/enclosure-scenes.d.ts.map +1 -0
  363. package/dist/coherence/__fixtures__/enclosure-scenes.js +44 -0
  364. package/dist/commands/structure/attached-walls.d.ts +16 -0
  365. package/dist/commands/structure/attached-walls.d.ts.map +1 -0
  366. package/dist/commands/structure/attached-walls.js +53 -0
  367. package/dist/commands/structure/index.d.ts +3 -0
  368. package/dist/commands/structure/index.d.ts.map +1 -1
  369. package/dist/commands/structure/index.js +3 -0
  370. package/dist/commands/structure/move-separators.d.ts +62 -0
  371. package/dist/commands/structure/move-separators.d.ts.map +1 -0
  372. package/dist/commands/structure/move-separators.js +346 -0
  373. package/dist/commands/structure/set-floor-foundation.d.ts +5 -0
  374. package/dist/commands/structure/set-floor-foundation.d.ts.map +1 -1
  375. package/dist/commands/structure/set-wall-geometry.d.ts.map +1 -1
  376. package/dist/commands/structure/set-wall-geometry.js +44 -11
  377. package/dist/commands/structure/set-zone-intent.d.ts +26 -0
  378. package/dist/commands/structure/set-zone-intent.d.ts.map +1 -1
  379. package/dist/commands/structure/set-zone-intent.js +107 -2
  380. package/dist/commands/structure/shared.d.ts +888 -88
  381. package/dist/commands/structure/shared.d.ts.map +1 -1
  382. package/dist/commands/structure/wall-overlap.d.ts +45 -0
  383. package/dist/commands/structure/wall-overlap.d.ts.map +1 -0
  384. package/dist/commands/structure/wall-overlap.js +289 -0
  385. package/dist/commands/structure/zone-wall-merge.d.ts +3326 -2370
  386. package/dist/commands/structure/zone-wall-merge.d.ts.map +1 -1
  387. package/dist/contracts/reference-discovery.d.ts +2 -2
  388. package/dist/contracts/reference-discovery.d.ts.map +1 -1
  389. package/dist/contracts/reference-discovery.js +5 -3
  390. package/dist/contracts/reference-inventory.d.ts.map +1 -1
  391. package/dist/contracts/reference-inventory.js +75 -24
  392. package/dist/events/bus.d.ts +15 -2
  393. package/dist/events/bus.d.ts.map +1 -1
  394. package/dist/hooks/spatial-grid/built-in-floor-placed.d.ts +40 -0
  395. package/dist/hooks/spatial-grid/built-in-floor-placed.d.ts.map +1 -0
  396. package/dist/hooks/spatial-grid/built-in-floor-placed.js +220 -0
  397. package/dist/hooks/spatial-grid/floor-placed-elevation.d.ts.map +1 -1
  398. package/dist/hooks/spatial-grid/floor-placed-elevation.js +13 -7
  399. package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts +56 -1
  400. package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts.map +1 -1
  401. package/dist/hooks/spatial-grid/spatial-grid-manager.js +177 -27
  402. package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts +1631 -831
  403. package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts.map +1 -1
  404. package/dist/hooks/spatial-grid/spatial-grid-sync.js +24 -1
  405. package/dist/hooks/spatial-grid/support-host-patch.js +10 -10
  406. package/dist/i18n/format.d.ts +41 -0
  407. package/dist/i18n/format.d.ts.map +1 -0
  408. package/dist/i18n/format.js +124 -0
  409. package/dist/i18n/index.d.ts +5 -0
  410. package/dist/i18n/index.d.ts.map +1 -0
  411. package/dist/i18n/index.js +3 -0
  412. package/dist/i18n/registry.d.ts +78 -0
  413. package/dist/i18n/registry.d.ts.map +1 -0
  414. package/dist/i18n/registry.js +252 -0
  415. package/dist/i18n/use-translate.d.ts +16 -0
  416. package/dist/i18n/use-translate.d.ts.map +1 -0
  417. package/dist/i18n/use-translate.js +23 -0
  418. package/dist/index.d.ts +32 -16
  419. package/dist/index.d.ts.map +1 -1
  420. package/dist/index.js +31 -15
  421. package/dist/lib/__fixtures__/mezzanine.d.ts +6840 -4169
  422. package/dist/lib/__fixtures__/mezzanine.d.ts.map +1 -1
  423. package/dist/lib/absorb-wall-separators.d.ts +2128 -1328
  424. package/dist/lib/absorb-wall-separators.d.ts.map +1 -1
  425. package/dist/lib/beam.d.ts +137 -0
  426. package/dist/lib/beam.d.ts.map +1 -0
  427. package/dist/lib/beam.js +297 -0
  428. package/dist/lib/below-grade-footprints.d.ts +13 -5
  429. package/dist/lib/below-grade-footprints.d.ts.map +1 -1
  430. package/dist/lib/below-grade-footprints.js +53 -10
  431. package/dist/lib/build-up.d.ts +89 -0
  432. package/dist/lib/build-up.d.ts.map +1 -0
  433. package/dist/lib/build-up.js +216 -0
  434. package/dist/lib/corner-pair.d.ts +205 -4
  435. package/dist/lib/corner-pair.d.ts.map +1 -1
  436. package/dist/lib/deck-boards.d.ts +80 -0
  437. package/dist/lib/deck-boards.d.ts.map +1 -0
  438. package/dist/lib/deck-boards.js +184 -0
  439. package/dist/lib/deck-framing.d.ts +150 -0
  440. package/dist/lib/deck-framing.d.ts.map +1 -0
  441. package/dist/lib/deck-framing.js +515 -0
  442. package/dist/lib/deepest-drawn.d.ts +3 -6
  443. package/dist/lib/deepest-drawn.d.ts.map +1 -1
  444. package/dist/lib/deepest-drawn.js +4 -8
  445. package/dist/lib/door-opening.d.ts +19 -0
  446. package/dist/lib/door-opening.d.ts.map +1 -0
  447. package/dist/lib/door-opening.js +27 -0
  448. package/dist/lib/door-operation.d.ts +2 -0
  449. package/dist/lib/door-operation.d.ts.map +1 -1
  450. package/dist/lib/door-operation.js +4 -0
  451. package/dist/lib/exterior-wall-loops.d.ts.map +1 -1
  452. package/dist/lib/exterior-wall-loops.js +2 -1
  453. package/dist/lib/finish-script.d.ts +5 -5
  454. package/dist/lib/finish-script.d.ts.map +1 -1
  455. package/dist/lib/finish-script.js +12 -5
  456. package/dist/lib/floor-footprint-name.d.ts +17 -0
  457. package/dist/lib/floor-footprint-name.d.ts.map +1 -1
  458. package/dist/lib/floor-footprint-name.js +17 -4
  459. package/dist/lib/floor-intent-changes.d.ts.map +1 -1
  460. package/dist/lib/floor-intent-changes.js +60 -35
  461. package/dist/lib/floor-opening-footprints.d.ts +1 -1
  462. package/dist/lib/floor-opening-footprints.d.ts.map +1 -1
  463. package/dist/lib/floor-opening-footprints.js +10 -4
  464. package/dist/lib/floor-plate-paint.d.ts +2 -0
  465. package/dist/lib/floor-plate-paint.d.ts.map +1 -1
  466. package/dist/lib/floor-plate-paint.js +12 -0
  467. package/dist/lib/floor-plates.d.ts +250 -0
  468. package/dist/lib/floor-plates.d.ts.map +1 -1
  469. package/dist/lib/floor-plates.js +43 -4
  470. package/dist/lib/floor-script.d.ts +35 -6
  471. package/dist/lib/floor-script.d.ts.map +1 -1
  472. package/dist/lib/floor-script.js +96 -16
  473. package/dist/lib/foundation-construction.d.ts +4 -13
  474. package/dist/lib/foundation-construction.d.ts.map +1 -1
  475. package/dist/lib/foundation-construction.js +4 -14
  476. package/dist/lib/foundation-standard.d.ts +2 -3
  477. package/dist/lib/foundation-standard.d.ts.map +1 -1
  478. package/dist/lib/foundation-standard.js +2 -3
  479. package/dist/lib/foundation-wall.d.ts +1 -2
  480. package/dist/lib/foundation-wall.d.ts.map +1 -1
  481. package/dist/lib/foundation-wall.js +1 -2
  482. package/dist/lib/framing-post.d.ts +91 -0
  483. package/dist/lib/framing-post.d.ts.map +1 -0
  484. package/dist/lib/framing-post.js +174 -0
  485. package/dist/lib/geometry-script-node.d.ts +11 -0
  486. package/dist/lib/geometry-script-node.d.ts.map +1 -1
  487. package/dist/lib/geometry-script-node.js +35 -0
  488. package/dist/lib/grade-standing.d.ts +16 -2
  489. package/dist/lib/grade-standing.d.ts.map +1 -1
  490. package/dist/lib/grade-standing.js +129 -9
  491. package/dist/lib/ground-seat.d.ts +2 -22
  492. package/dist/lib/ground-seat.d.ts.map +1 -1
  493. package/dist/lib/ground-seat.js +2 -17
  494. package/dist/lib/ground-window.d.ts +2 -1
  495. package/dist/lib/ground-window.d.ts.map +1 -1
  496. package/dist/lib/ground-window.js +5 -2
  497. package/dist/lib/level-footprints.d.ts +2 -0
  498. package/dist/lib/level-footprints.d.ts.map +1 -1
  499. package/dist/lib/level-footprints.js +7 -0
  500. package/dist/lib/opening-casing.d.ts +67 -0
  501. package/dist/lib/opening-casing.d.ts.map +1 -0
  502. package/dist/lib/opening-casing.js +131 -0
  503. package/dist/lib/opening-exterior-face.d.ts +6 -0
  504. package/dist/lib/opening-exterior-face.d.ts.map +1 -0
  505. package/dist/lib/opening-exterior-face.js +15 -0
  506. package/dist/lib/opening-floor-datum.d.ts +11 -5
  507. package/dist/lib/opening-floor-datum.d.ts.map +1 -1
  508. package/dist/lib/opening-floor-datum.js +38 -6
  509. package/dist/lib/opening-frame-depth.d.ts +18 -0
  510. package/dist/lib/opening-frame-depth.d.ts.map +1 -0
  511. package/dist/lib/opening-frame-depth.js +22 -0
  512. package/dist/lib/outdoor-room.d.ts +32 -0
  513. package/dist/lib/outdoor-room.d.ts.map +1 -0
  514. package/dist/lib/outdoor-room.js +66 -0
  515. package/dist/lib/plate-surface.d.ts +8 -0
  516. package/dist/lib/plate-surface.d.ts.map +1 -1
  517. package/dist/lib/plate-surface.js +53 -3
  518. package/dist/lib/porch-framing-sync.d.ts +46 -0
  519. package/dist/lib/porch-framing-sync.d.ts.map +1 -0
  520. package/dist/lib/porch-framing-sync.js +206 -0
  521. package/dist/lib/porch-framing.d.ts +44 -0
  522. package/dist/lib/porch-framing.d.ts.map +1 -0
  523. package/dist/lib/porch-framing.js +159 -0
  524. package/dist/lib/railing-rooms.d.ts +13 -0
  525. package/dist/lib/railing-rooms.d.ts.map +1 -0
  526. package/dist/lib/railing-rooms.js +37 -0
  527. package/dist/lib/roof-eave.d.ts +135 -0
  528. package/dist/lib/roof-eave.d.ts.map +1 -0
  529. package/dist/lib/roof-eave.js +186 -0
  530. package/dist/lib/room-floor-plate.d.ts +3 -1
  531. package/dist/lib/room-floor-plate.d.ts.map +1 -1
  532. package/dist/lib/room-floor-plate.js +7 -0
  533. package/dist/lib/space-detection.d.ts +13 -0
  534. package/dist/lib/space-detection.d.ts.map +1 -1
  535. package/dist/lib/space-detection.js +112 -24
  536. package/dist/lib/structure-kernel.d.ts +22 -9
  537. package/dist/lib/structure-kernel.d.ts.map +1 -1
  538. package/dist/lib/structure-kernel.js +146 -28
  539. package/dist/lib/structure-reconcile.d.ts +1 -1
  540. package/dist/lib/structure-reconcile.d.ts.map +1 -1
  541. package/dist/lib/structure-reconcile.js +7 -4
  542. package/dist/lib/surface-intent.d.ts +10 -0
  543. package/dist/lib/surface-intent.d.ts.map +1 -0
  544. package/dist/lib/surface-intent.js +18 -0
  545. package/dist/lib/terrain-source.d.ts.map +1 -1
  546. package/dist/lib/terrain-source.js +2 -1
  547. package/dist/lib/wall-face-script.d.ts.map +1 -1
  548. package/dist/lib/wall-face-script.js +5 -2
  549. package/dist/material-kinds.d.ts +1 -1
  550. package/dist/material-kinds.d.ts.map +1 -1
  551. package/dist/material-kinds.js +1 -0
  552. package/dist/material-library.d.ts +15 -0
  553. package/dist/material-library.d.ts.map +1 -1
  554. package/dist/material-library.js +458 -59
  555. package/dist/node-slots/door.d.ts +3 -4
  556. package/dist/node-slots/door.d.ts.map +1 -1
  557. package/dist/node-slots/door.js +4 -3
  558. package/dist/node-slots/wall.d.ts.map +1 -1
  559. package/dist/node-slots/wall.js +21 -3
  560. package/dist/node-slots/window.d.ts +2 -2
  561. package/dist/node-slots/window.d.ts.map +1 -1
  562. package/dist/node-slots/window.js +6 -1
  563. package/dist/procedural-items/design.d.ts +8 -0
  564. package/dist/procedural-items/design.d.ts.map +1 -1
  565. package/dist/procedural-items/design.js +169 -21
  566. package/dist/procedural-items/motion-controller.d.ts +2 -0
  567. package/dist/procedural-items/motion-controller.d.ts.map +1 -1
  568. package/dist/procedural-items/motion-controller.js +2 -1
  569. package/dist/registry/index.d.ts +2 -2
  570. package/dist/registry/index.d.ts.map +1 -1
  571. package/dist/registry/index.js +1 -1
  572. package/dist/registry/mechanism.d.ts +4 -1
  573. package/dist/registry/mechanism.d.ts.map +1 -1
  574. package/dist/registry/mechanism.js +10 -0
  575. package/dist/registry/types.d.ts +65 -23
  576. package/dist/registry/types.d.ts.map +1 -1
  577. package/dist/runtime/__fixtures__/live-scene.d.ts +14 -0
  578. package/dist/runtime/__fixtures__/live-scene.d.ts.map +1 -0
  579. package/dist/runtime/__fixtures__/live-scene.js +64 -0
  580. package/dist/runtime/apply.d.ts +42 -0
  581. package/dist/runtime/apply.d.ts.map +1 -0
  582. package/dist/runtime/apply.js +274 -0
  583. package/dist/runtime/dependencies.d.ts +97 -0
  584. package/dist/runtime/dependencies.d.ts.map +1 -0
  585. package/dist/runtime/dependencies.js +42 -0
  586. package/dist/runtime/ids.d.ts +11 -0
  587. package/dist/runtime/ids.d.ts.map +1 -0
  588. package/dist/runtime/ids.js +80 -0
  589. package/dist/runtime/index.d.ts +14 -0
  590. package/dist/runtime/index.d.ts.map +1 -0
  591. package/dist/runtime/index.js +11 -0
  592. package/dist/runtime/node-queries.d.ts +16 -0
  593. package/dist/runtime/node-queries.d.ts.map +1 -0
  594. package/dist/runtime/node-queries.js +30 -0
  595. package/dist/runtime/patch.d.ts +26 -0
  596. package/dist/runtime/patch.d.ts.map +1 -0
  597. package/dist/runtime/patch.js +165 -0
  598. package/dist/runtime/reader.d.ts +104 -0
  599. package/dist/runtime/reader.d.ts.map +1 -0
  600. package/dist/runtime/reader.js +455 -0
  601. package/dist/runtime/scene-runtime.d.ts +112 -0
  602. package/dist/runtime/scene-runtime.d.ts.map +1 -0
  603. package/dist/runtime/scene-runtime.js +302 -0
  604. package/dist/schema/__fixtures__/node-fixtures.d.ts.map +1 -1
  605. package/dist/schema/__fixtures__/node-fixtures.js +1 -0
  606. package/dist/schema/assembly.d.ts +3 -0
  607. package/dist/schema/assembly.d.ts.map +1 -1
  608. package/dist/schema/assembly.js +13 -0
  609. package/dist/schema/asset-url.d.ts +37 -2
  610. package/dist/schema/asset-url.d.ts.map +1 -1
  611. package/dist/schema/asset-url.js +80 -11
  612. package/dist/schema/base.d.ts +8 -0
  613. package/dist/schema/base.d.ts.map +1 -1
  614. package/dist/schema/base.js +19 -1
  615. package/dist/schema/build-up.d.ts +247 -0
  616. package/dist/schema/build-up.d.ts.map +1 -0
  617. package/dist/schema/build-up.js +83 -0
  618. package/dist/schema/geometry-source.d.ts +80 -0
  619. package/dist/schema/geometry-source.d.ts.map +1 -1
  620. package/dist/schema/geometry-source.js +38 -0
  621. package/dist/schema/index.d.ts +12 -7
  622. package/dist/schema/index.d.ts.map +1 -1
  623. package/dist/schema/index.js +12 -6
  624. package/dist/schema/material.d.ts +5 -0
  625. package/dist/schema/material.d.ts.map +1 -1
  626. package/dist/schema/material.js +6 -0
  627. package/dist/schema/nodes/beam.d.ts +264 -0
  628. package/dist/schema/nodes/beam.d.ts.map +1 -0
  629. package/dist/schema/nodes/beam.js +139 -0
  630. package/dist/schema/nodes/box-vent.d.ts +5 -0
  631. package/dist/schema/nodes/box-vent.d.ts.map +1 -1
  632. package/dist/schema/nodes/cabinet.d.ts +10 -0
  633. package/dist/schema/nodes/cabinet.d.ts.map +1 -1
  634. package/dist/schema/nodes/ceiling.d.ts +48 -0
  635. package/dist/schema/nodes/ceiling.d.ts.map +1 -1
  636. package/dist/schema/nodes/ceiling.js +5 -0
  637. package/dist/schema/nodes/chimney.d.ts +10 -0
  638. package/dist/schema/nodes/chimney.d.ts.map +1 -1
  639. package/dist/schema/nodes/column.d.ts +42 -0
  640. package/dist/schema/nodes/column.d.ts.map +1 -1
  641. package/dist/schema/nodes/column.js +11 -1
  642. package/dist/schema/nodes/cupola.d.ts +5 -0
  643. package/dist/schema/nodes/cupola.d.ts.map +1 -1
  644. package/dist/schema/nodes/door.d.ts +54 -3
  645. package/dist/schema/nodes/door.d.ts.map +1 -1
  646. package/dist/schema/nodes/door.js +41 -7
  647. package/dist/schema/nodes/dormer.d.ts +20 -0
  648. package/dist/schema/nodes/dormer.d.ts.map +1 -1
  649. package/dist/schema/nodes/downspout.d.ts +5 -0
  650. package/dist/schema/nodes/downspout.d.ts.map +1 -1
  651. package/dist/schema/nodes/elevator.d.ts +5 -0
  652. package/dist/schema/nodes/elevator.d.ts.map +1 -1
  653. package/dist/schema/nodes/eyebrow-vent.d.ts +5 -0
  654. package/dist/schema/nodes/eyebrow-vent.d.ts.map +1 -1
  655. package/dist/schema/nodes/fence.d.ts +5 -0
  656. package/dist/schema/nodes/fence.d.ts.map +1 -1
  657. package/dist/schema/nodes/guide.d.ts +14 -0
  658. package/dist/schema/nodes/guide.d.ts.map +1 -1
  659. package/dist/schema/nodes/guide.js +2 -0
  660. package/dist/schema/nodes/gutter.d.ts +5 -0
  661. package/dist/schema/nodes/gutter.d.ts.map +1 -1
  662. package/dist/schema/nodes/item.d.ts +71 -0
  663. package/dist/schema/nodes/item.d.ts.map +1 -1
  664. package/dist/schema/nodes/item.js +5 -1
  665. package/dist/schema/nodes/level.d.ts +1 -1
  666. package/dist/schema/nodes/level.d.ts.map +1 -1
  667. package/dist/schema/nodes/opening-types.d.ts +13 -0
  668. package/dist/schema/nodes/opening-types.d.ts.map +1 -1
  669. package/dist/schema/nodes/opening-types.js +8 -1
  670. package/dist/schema/nodes/railing-wall.d.ts +112 -0
  671. package/dist/schema/nodes/railing-wall.d.ts.map +1 -0
  672. package/dist/schema/nodes/railing-wall.js +160 -0
  673. package/dist/schema/nodes/ridge-vent.d.ts +5 -0
  674. package/dist/schema/nodes/ridge-vent.d.ts.map +1 -1
  675. package/dist/schema/nodes/roof-segment.d.ts +224 -1
  676. package/dist/schema/nodes/roof-segment.d.ts.map +1 -1
  677. package/dist/schema/nodes/roof-segment.js +57 -10
  678. package/dist/schema/nodes/roof-types.d.ts +11 -0
  679. package/dist/schema/nodes/roof-types.d.ts.map +1 -1
  680. package/dist/schema/nodes/roof-types.js +6 -0
  681. package/dist/schema/nodes/roof.d.ts +60 -0
  682. package/dist/schema/nodes/roof.d.ts.map +1 -1
  683. package/dist/schema/nodes/roof.js +4 -0
  684. package/dist/schema/nodes/shelf.d.ts +5 -0
  685. package/dist/schema/nodes/shelf.d.ts.map +1 -1
  686. package/dist/schema/nodes/site.d.ts +80 -0
  687. package/dist/schema/nodes/site.d.ts.map +1 -1
  688. package/dist/schema/nodes/site.js +7 -0
  689. package/dist/schema/nodes/skylight.d.ts +10 -0
  690. package/dist/schema/nodes/skylight.d.ts.map +1 -1
  691. package/dist/schema/nodes/slab.d.ts +137 -0
  692. package/dist/schema/nodes/slab.d.ts.map +1 -1
  693. package/dist/schema/nodes/slab.js +3 -0
  694. package/dist/schema/nodes/solar-panel.d.ts +10 -0
  695. package/dist/schema/nodes/solar-panel.d.ts.map +1 -1
  696. package/dist/schema/nodes/stair-segment.d.ts +5 -0
  697. package/dist/schema/nodes/stair-segment.d.ts.map +1 -1
  698. package/dist/schema/nodes/stair-structure.d.ts +69 -0
  699. package/dist/schema/nodes/stair-structure.d.ts.map +1 -0
  700. package/dist/schema/nodes/stair-structure.js +39 -0
  701. package/dist/schema/nodes/stair.d.ts +46 -0
  702. package/dist/schema/nodes/stair.d.ts.map +1 -1
  703. package/dist/schema/nodes/stair.js +3 -0
  704. package/dist/schema/nodes/turbine-vent.d.ts +5 -0
  705. package/dist/schema/nodes/turbine-vent.d.ts.map +1 -1
  706. package/dist/schema/nodes/wall.d.ts +135 -2
  707. package/dist/schema/nodes/wall.d.ts.map +1 -1
  708. package/dist/schema/nodes/wall.js +42 -6
  709. package/dist/schema/nodes/window.d.ts +66 -1
  710. package/dist/schema/nodes/window.d.ts.map +1 -1
  711. package/dist/schema/nodes/window.js +50 -5
  712. package/dist/schema/nodes/zone.d.ts +68 -0
  713. package/dist/schema/nodes/zone.d.ts.map +1 -1
  714. package/dist/schema/nodes/zone.js +32 -0
  715. package/dist/schema/scene-material.d.ts +5 -0
  716. package/dist/schema/scene-material.d.ts.map +1 -1
  717. package/dist/schema/types.d.ts +1079 -4
  718. package/dist/schema/types.d.ts.map +1 -1
  719. package/dist/schema/types.js +2 -0
  720. package/dist/schema/wall-type.d.ts +95 -0
  721. package/dist/schema/wall-type.d.ts.map +1 -0
  722. package/dist/schema/wall-type.js +32 -0
  723. package/dist/services/roof-bearing.d.ts.map +1 -1
  724. package/dist/services/roof-bearing.js +6 -3
  725. package/dist/services/roof-level.d.ts.map +1 -1
  726. package/dist/services/roof-level.js +4 -3
  727. package/dist/services/roof-move.d.ts.map +1 -1
  728. package/dist/services/roof-move.js +13 -7
  729. package/dist/services/storey.d.ts.map +1 -1
  730. package/dist/services/storey.js +13 -8
  731. package/dist/spatial/usage-field/beds.d.ts +51 -0
  732. package/dist/spatial/usage-field/beds.d.ts.map +1 -0
  733. package/dist/spatial/usage-field/beds.js +346 -0
  734. package/dist/spatial/usage-field/blocked.d.ts +28 -0
  735. package/dist/spatial/usage-field/blocked.d.ts.map +1 -0
  736. package/dist/spatial/usage-field/blocked.js +185 -0
  737. package/dist/spatial/usage-field/boxes.d.ts +17 -0
  738. package/dist/spatial/usage-field/boxes.d.ts.map +1 -0
  739. package/dist/spatial/usage-field/boxes.js +82 -0
  740. package/dist/spatial/usage-field/catalogue-shapes.d.ts +3 -0
  741. package/dist/spatial/usage-field/catalogue-shapes.d.ts.map +1 -0
  742. package/dist/spatial/usage-field/catalogue-shapes.js +257 -0
  743. package/dist/spatial/usage-field/catalogue.d.ts +6 -0
  744. package/dist/spatial/usage-field/catalogue.d.ts.map +1 -0
  745. package/dist/spatial/usage-field/catalogue.js +11 -0
  746. package/dist/spatial/usage-field/clash.d.ts +40 -0
  747. package/dist/spatial/usage-field/clash.d.ts.map +1 -0
  748. package/dist/spatial/usage-field/clash.js +187 -0
  749. package/dist/spatial/usage-field/door-stairs.d.ts +18 -0
  750. package/dist/spatial/usage-field/door-stairs.d.ts.map +1 -0
  751. package/dist/spatial/usage-field/door-stairs.js +129 -0
  752. package/dist/spatial/usage-field/entry-way.d.ts +14 -0
  753. package/dist/spatial/usage-field/entry-way.d.ts.map +1 -0
  754. package/dist/spatial/usage-field/entry-way.js +219 -0
  755. package/dist/spatial/usage-field/fences.d.ts +18 -0
  756. package/dist/spatial/usage-field/fences.d.ts.map +1 -0
  757. package/dist/spatial/usage-field/fences.js +253 -0
  758. package/dist/spatial/usage-field/field.d.ts +44 -0
  759. package/dist/spatial/usage-field/field.d.ts.map +1 -0
  760. package/dist/spatial/usage-field/field.js +145 -0
  761. package/dist/spatial/usage-field/findings.d.ts +76 -0
  762. package/dist/spatial/usage-field/findings.d.ts.map +1 -0
  763. package/dist/spatial/usage-field/findings.js +252 -0
  764. package/dist/spatial/usage-field/fixtures.d.ts +18 -0
  765. package/dist/spatial/usage-field/fixtures.d.ts.map +1 -0
  766. package/dist/spatial/usage-field/fixtures.js +160 -0
  767. package/dist/spatial/usage-field/flag.d.ts +10 -0
  768. package/dist/spatial/usage-field/flag.d.ts.map +1 -0
  769. package/dist/spatial/usage-field/flag.js +12 -0
  770. package/dist/spatial/usage-field/floors.d.ts +13 -0
  771. package/dist/spatial/usage-field/floors.d.ts.map +1 -0
  772. package/dist/spatial/usage-field/floors.js +36 -0
  773. package/dist/spatial/usage-field/index.d.ts +7 -0
  774. package/dist/spatial/usage-field/index.d.ts.map +1 -0
  775. package/dist/spatial/usage-field/index.js +5 -0
  776. package/dist/spatial/usage-field/items.d.ts +38 -0
  777. package/dist/spatial/usage-field/items.d.ts.map +1 -0
  778. package/dist/spatial/usage-field/items.js +261 -0
  779. package/dist/spatial/usage-field/labels.d.ts +8 -0
  780. package/dist/spatial/usage-field/labels.d.ts.map +1 -0
  781. package/dist/spatial/usage-field/labels.js +14 -0
  782. package/dist/spatial/usage-field/level-field.d.ts +47 -0
  783. package/dist/spatial/usage-field/level-field.d.ts.map +1 -0
  784. package/dist/spatial/usage-field/level-field.js +96 -0
  785. package/dist/spatial/usage-field/measure.d.ts +324 -0
  786. package/dist/spatial/usage-field/measure.d.ts.map +1 -0
  787. package/dist/spatial/usage-field/measure.js +458 -0
  788. package/dist/spatial/usage-field/obstacles.d.ts +63 -0
  789. package/dist/spatial/usage-field/obstacles.d.ts.map +1 -0
  790. package/dist/spatial/usage-field/obstacles.js +215 -0
  791. package/dist/spatial/usage-field/openings.d.ts +12 -0
  792. package/dist/spatial/usage-field/openings.d.ts.map +1 -0
  793. package/dist/spatial/usage-field/openings.js +162 -0
  794. package/dist/spatial/usage-field/path.d.ts +48 -0
  795. package/dist/spatial/usage-field/path.d.ts.map +1 -0
  796. package/dist/spatial/usage-field/path.js +354 -0
  797. package/dist/spatial/usage-field/pieces.d.ts +27 -0
  798. package/dist/spatial/usage-field/pieces.d.ts.map +1 -0
  799. package/dist/spatial/usage-field/pieces.js +89 -0
  800. package/dist/spatial/usage-field/shapes.d.ts +18 -0
  801. package/dist/spatial/usage-field/shapes.d.ts.map +1 -0
  802. package/dist/spatial/usage-field/shapes.js +92 -0
  803. package/dist/spatial/usage-field/stairs.d.ts +23 -0
  804. package/dist/spatial/usage-field/stairs.d.ts.map +1 -0
  805. package/dist/spatial/usage-field/stairs.js +163 -0
  806. package/dist/spatial/usage-field/support.d.ts +24 -0
  807. package/dist/spatial/usage-field/support.d.ts.map +1 -0
  808. package/dist/spatial/usage-field/support.js +46 -0
  809. package/dist/spatial/usage-field/swings.d.ts +846 -0
  810. package/dist/spatial/usage-field/swings.d.ts.map +1 -0
  811. package/dist/spatial/usage-field/swings.js +427 -0
  812. package/dist/spatial/usage-field/types.d.ts +65 -0
  813. package/dist/spatial/usage-field/types.d.ts.map +1 -0
  814. package/dist/spatial/usage-field/types.js +1 -0
  815. package/dist/spatial/usage-field/walls.d.ts +1057 -0
  816. package/dist/spatial/usage-field/walls.d.ts.map +1 -0
  817. package/dist/spatial/usage-field/walls.js +166 -0
  818. package/dist/spatial/usage-field/way-in.d.ts +26 -0
  819. package/dist/spatial/usage-field/way-in.d.ts.map +1 -0
  820. package/dist/spatial/usage-field/way-in.js +113 -0
  821. package/dist/store/actions/node-actions.d.ts +2124 -1322
  822. package/dist/store/actions/node-actions.d.ts.map +1 -1
  823. package/dist/store/actions/node-actions.js +42 -16
  824. package/dist/store/derived-node-guard.d.ts +10 -2
  825. package/dist/store/derived-node-guard.d.ts.map +1 -1
  826. package/dist/store/derived-node-guard.js +31 -11
  827. package/dist/store/document-settling.d.ts +9 -0
  828. package/dist/store/document-settling.d.ts.map +1 -0
  829. package/dist/store/document-settling.js +22 -0
  830. package/dist/store/history-control.d.ts +19 -10
  831. package/dist/store/history-control.d.ts.map +1 -1
  832. package/dist/store/history-control.js +176 -127
  833. package/dist/store/history-drafts.d.ts.map +1 -1
  834. package/dist/store/history-drafts.js +21 -17
  835. package/dist/store/live-previews.d.ts +9 -0
  836. package/dist/store/live-previews.d.ts.map +1 -0
  837. package/dist/store/live-previews.js +19 -0
  838. package/dist/store/scene-annotations.d.ts +6751 -5151
  839. package/dist/store/scene-annotations.d.ts.map +1 -1
  840. package/dist/store/scene-environment.d.ts +33 -0
  841. package/dist/store/scene-environment.d.ts.map +1 -0
  842. package/dist/store/scene-environment.js +54 -0
  843. package/dist/store/scene-hydration.d.ts.map +1 -1
  844. package/dist/store/scene-hydration.js +41 -30
  845. package/dist/store/use-interactive.d.ts +9 -3
  846. package/dist/store/use-interactive.d.ts.map +1 -1
  847. package/dist/store/use-interactive.js +43 -11
  848. package/dist/store/use-live-node-overrides.d.ts.map +1 -1
  849. package/dist/store/use-live-node-overrides.js +3 -0
  850. package/dist/store/use-scene.d.ts +25 -0
  851. package/dist/store/use-scene.d.ts.map +1 -1
  852. package/dist/store/use-scene.js +408 -336
  853. package/dist/systems/document-reconcile.d.ts +40 -0
  854. package/dist/systems/document-reconcile.d.ts.map +1 -0
  855. package/dist/systems/document-reconcile.js +159 -0
  856. package/dist/systems/elevator/elevator-opening-system.d.ts.map +1 -1
  857. package/dist/systems/elevator/elevator-opening-system.js +9 -24
  858. package/dist/systems/fence/guard-layout.d.ts +69 -0
  859. package/dist/systems/fence/guard-layout.d.ts.map +1 -0
  860. package/dist/systems/fence/guard-layout.js +194 -0
  861. package/dist/systems/owned-floor-openings.d.ts +13 -1
  862. package/dist/systems/owned-floor-openings.d.ts.map +1 -1
  863. package/dist/systems/owned-floor-openings.js +58 -2
  864. package/dist/systems/reconcile-owned-floor-openings.d.ts +3 -1
  865. package/dist/systems/reconcile-owned-floor-openings.d.ts.map +1 -1
  866. package/dist/systems/reconcile-owned-floor-openings.js +4 -4
  867. package/dist/systems/roof/roof-elevation-system.d.ts.map +1 -1
  868. package/dist/systems/roof/roof-elevation-system.js +8 -26
  869. package/dist/systems/roof/roof-elevation.d.ts +16 -1
  870. package/dist/systems/roof/roof-elevation.d.ts.map +1 -1
  871. package/dist/systems/roof/roof-elevation.js +85 -4
  872. package/dist/systems/roof/roof-footprint.d.ts +42 -1
  873. package/dist/systems/roof/roof-footprint.d.ts.map +1 -1
  874. package/dist/systems/roof/roof-footprint.js +160 -4
  875. package/dist/systems/slab/__fixtures__/floor-step.d.ts +3163 -1934
  876. package/dist/systems/slab/__fixtures__/floor-step.d.ts.map +1 -1
  877. package/dist/systems/slab/__fixtures__/raised-room.d.ts +2495 -1249
  878. package/dist/systems/slab/__fixtures__/raised-room.d.ts.map +1 -1
  879. package/dist/systems/stair/stair-clearance.d.ts +7 -0
  880. package/dist/systems/stair/stair-clearance.d.ts.map +1 -1
  881. package/dist/systems/stair/stair-clearance.js +31 -11
  882. package/dist/systems/stair/stair-construction.d.ts +8 -3
  883. package/dist/systems/stair/stair-construction.d.ts.map +1 -1
  884. package/dist/systems/stair/stair-construction.js +55 -4
  885. package/dist/systems/stair/stair-opening-preview.d.ts +889 -89
  886. package/dist/systems/stair/stair-opening-preview.d.ts.map +1 -1
  887. package/dist/systems/stair/stair-opening-system.d.ts.map +1 -1
  888. package/dist/systems/stair/stair-opening-system.js +18 -34
  889. package/dist/systems/stair/stair-presets.d.ts +36 -0
  890. package/dist/systems/stair/stair-presets.d.ts.map +1 -1
  891. package/dist/systems/stair/stair-rise-query.d.ts.map +1 -1
  892. package/dist/systems/stair/stair-rise-query.js +3 -2
  893. package/dist/systems/stair/stair-rise.d.ts.map +1 -1
  894. package/dist/systems/stair/stair-rise.js +6 -0
  895. package/dist/systems/stair/stair-sizing.d.ts +42 -11
  896. package/dist/systems/stair/stair-sizing.d.ts.map +1 -1
  897. package/dist/systems/stair/stair-sizing.js +10 -1
  898. package/dist/systems/stair/stair-structure.d.ts +277 -0
  899. package/dist/systems/stair/stair-structure.d.ts.map +1 -0
  900. package/dist/systems/stair/stair-structure.js +496 -0
  901. package/dist/systems/wall/wall-assembly.d.ts +84 -6
  902. package/dist/systems/wall/wall-assembly.d.ts.map +1 -1
  903. package/dist/systems/wall/wall-assembly.js +204 -5
  904. package/dist/systems/wall/wall-finish.d.ts +38 -2
  905. package/dist/systems/wall/wall-finish.d.ts.map +1 -1
  906. package/dist/systems/wall/wall-finish.js +70 -2
  907. package/dist/systems/wall/wall-footprint.js +2 -2
  908. package/dist/systems/wall/wall-merge.d.ts.map +1 -1
  909. package/dist/systems/wall/wall-merge.js +28 -7
  910. package/dist/systems/wall/wall-mitering.d.ts +1 -0
  911. package/dist/systems/wall/wall-mitering.d.ts.map +1 -1
  912. package/dist/systems/wall/wall-mitering.js +152 -52
  913. package/dist/systems/wall/wall-move.d.ts +23 -6
  914. package/dist/systems/wall/wall-move.d.ts.map +1 -1
  915. package/dist/systems/wall/wall-move.js +65 -0
  916. package/dist/systems/wall/wall-top.d.ts +2 -2
  917. package/dist/systems/wall/wall-top.d.ts.map +1 -1
  918. package/dist/systems/wall/wall-top.js +6 -1
  919. package/dist/systems/wall/wall-topology.d.ts +32 -1
  920. package/dist/systems/wall/wall-topology.d.ts.map +1 -1
  921. package/dist/systems/wall/wall-topology.js +118 -10
  922. package/dist/systems/wall/wall-trim-profiles.d.ts +12 -0
  923. package/dist/systems/wall/wall-trim-profiles.d.ts.map +1 -0
  924. package/dist/systems/wall/wall-trim-profiles.js +191 -0
  925. package/dist/utils/ensure-scene-openings.d.ts +6523 -4923
  926. package/dist/utils/ensure-scene-openings.d.ts.map +1 -1
  927. package/dist/utils/floor-piece-adoption.d.ts +5 -0
  928. package/dist/utils/floor-piece-adoption.d.ts.map +1 -1
  929. package/dist/utils/floor-plate-migration.d.ts +1930 -1130
  930. package/dist/utils/floor-plate-migration.d.ts.map +1 -1
  931. package/dist/utils/owned-floor-opening-migration.d.ts +888 -88
  932. package/dist/utils/owned-floor-opening-migration.d.ts.map +1 -1
  933. package/dist/utils/reconcile-structure-on-load.d.ts +1930 -1130
  934. package/dist/utils/reconcile-structure-on-load.d.ts.map +1 -1
  935. package/dist/utils/structure-id.d.ts.map +1 -1
  936. package/dist/utils/structure-id.js +4 -0
  937. package/package.json +22 -5
  938. package/dist/lib/generic-foundation.d.ts +0 -40
  939. package/dist/lib/generic-foundation.d.ts.map +0 -1
  940. package/dist/lib/generic-foundation.js +0 -200
@@ -1,6 +1,10 @@
1
1
  import { BELOW_GRADE_TOLERANCE, getLevelElevations, isLevelBelowGrade, levelPlaneWorldY, } from '../services/storey.js';
2
2
  import { pointInPolygon } from '../systems/slab/slab-support.js';
3
+ import { getWallCurveFrameAt, getWallCurveLength } from '../systems/wall/wall-curve.js';
4
+ import { getWallFaceOffsets } from '../systems/wall/wall-frame.js';
3
5
  import { levelUnderNamedGround } from './ground-level.js';
6
+ import { getOpeningFloorDatum } from './opening-floor-datum.js';
7
+ import { area, intersection, union } from './polygon-boolean.js';
4
8
  import { isSiteFlatwork } from './site-flatwork.js';
5
9
  import { heightAt } from './terrain-field.js';
6
10
  import { terrainFieldOf } from './terrain-source.js';
@@ -58,7 +62,7 @@ function flatFloorsStanding(nodes, level, fallback) {
58
62
  const slabs = floorSlabsOf(nodes, level);
59
63
  if (slabs.length === 0)
60
64
  return fallback;
61
- const buried = slabs.filter((slab) => floorBuriedOnFlatSite(plane + slab.elevation)).length;
65
+ const buried = slabs.filter((slab) => floorBuriedOnFlatSite(plane + slabGradeElevation(nodes, level, slab))).length;
62
66
  if (buried === 0)
63
67
  return 'at-grade';
64
68
  return buried === slabs.length ? 'below-grade' : 'partly-below-grade';
@@ -67,18 +71,134 @@ function flatFloorsStanding(nodes, level, fallback) {
67
71
  export function floorBuriedOnFlatSite(floorY) {
68
72
  return SITE_DATUM_Y - floorY > BELOW_GRADE_TOLERANCE;
69
73
  }
70
- /** The floor slabs of the house on a level: not a basin, not site flatwork, with a plan. */
74
+ const floorSlabsMemo = new WeakMap();
75
+ /**
76
+ * The floor slabs of the house on a level: not a basin, not site flatwork, with a plan, and on a
77
+ * level with rooms, under one of them. A slab outside every room (an entry pad, a stoop) is the
78
+ * site's, as flatwork is, not a floor the ground can bury.
79
+ */
71
80
  function floorSlabsOf(nodes, level) {
81
+ let levels = floorSlabsMemo.get(nodes);
82
+ if (!levels) {
83
+ levels = new Map();
84
+ floorSlabsMemo.set(nodes, levels);
85
+ }
86
+ const hit = levels.get(level.id);
87
+ if (hit)
88
+ return hit;
72
89
  const slabs = [];
90
+ const rooms = [];
73
91
  for (const childId of level.children) {
74
- const slab = nodes[childId];
75
- if (slab?.type !== 'slab' || slab.recessed === true || slab.polygon.length < 3)
92
+ const child = nodes[childId];
93
+ if (child?.type === 'zone' && child.spaceRole === 'room' && child.polygon.length >= 3)
94
+ rooms.push({ outer: child.polygon, holes: child.holes ?? [] });
95
+ if (child?.type !== 'slab' || child.recessed === true || child.polygon.length < 3)
76
96
  continue;
77
- if (isSiteFlatwork(slab))
97
+ if (isSiteFlatwork(child))
78
98
  continue;
79
- slabs.push(slab);
99
+ slabs.push(child);
100
+ }
101
+ const indoors = rooms.length ? union(rooms) : null;
102
+ const floors = indoors
103
+ ? slabs.filter((slab) => area(intersection(slab.polygon, indoors)) > OUTDOOR_SLAB_AREA)
104
+ : slabs;
105
+ levels.set(level.id, floors);
106
+ return floors;
107
+ }
108
+ /** A slab sharing less than this with the level's rooms (m²) stands outside them. */
109
+ const OUTDOOR_SLAB_AREA = 1e-3;
110
+ /** How far past a wall's face a door's two sides are looked at. */
111
+ const DOOR_SIDE_REACH = 0.1;
112
+ const gradeElevationsMemo = new WeakMap();
113
+ /**
114
+ * The level-local elevation the ground is judged against over a floor slab: its own top, except
115
+ * for a floor sunk under its level's floor that opens to the outside through a door reaching down
116
+ * to it (a garage below the house, its door onto the drive). The ground outside that door comes
117
+ * down to it, so it is no basement: it is judged at its level's floor, and does not leave the
118
+ * level partly below grade.
119
+ */
120
+ export function slabGradeElevation(nodes, level, slab) {
121
+ let levels = gradeElevationsMemo.get(nodes);
122
+ if (!levels) {
123
+ levels = new Map();
124
+ gradeElevationsMemo.set(nodes, levels);
125
+ }
126
+ let walkOuts = levels.get(level.id);
127
+ if (!walkOuts) {
128
+ walkOuts = sunkenFloorsOpeningOut(nodes, level);
129
+ levels.set(level.id, walkOuts);
130
+ }
131
+ return walkOuts.get(slab.id) ?? slab.elevation;
132
+ }
133
+ /**
134
+ * The world Y of `level`'s lowest floor as the ground judges it ({@link slabGradeElevation}): a
135
+ * garage sunk under the floor and opening out to the drive leaves it at the level's floor. `null`
136
+ * for a level with no floor slab, or no plane.
137
+ */
138
+ export function levelGradeFloorWorldY(nodes, level) {
139
+ const plane = levelPlaneWorldY(nodes, level.id);
140
+ const slabs = floorSlabsOf(nodes, level);
141
+ if (plane === null || slabs.length === 0)
142
+ return null;
143
+ return plane + Math.min(...slabs.map((slab) => slabGradeElevation(nodes, level, slab)));
144
+ }
145
+ /** {@link slabGradeElevation}'s exceptions on `level`: slab id to the level floor it is judged at. */
146
+ function sunkenFloorsOpeningOut(nodes, level) {
147
+ const walkOuts = new Map();
148
+ const slabs = floorSlabsOf(nodes, level);
149
+ if (slabs.length < 2)
150
+ return walkOuts;
151
+ const floor = Math.max(...slabs.map((slab) => slab.elevation));
152
+ const floorsAt = ([x, z]) => slabs.filter((slab) => pointInPolygon(x, z, slab.polygon));
153
+ for (const wallId of level.children) {
154
+ const wall = nodes[wallId];
155
+ if (wall?.type !== 'wall')
156
+ continue;
157
+ const length = getWallCurveLength(wall);
158
+ if (length < 1e-9)
159
+ continue;
160
+ const faces = getWallFaceOffsets(wall);
161
+ for (const doorId of wall.children ?? []) {
162
+ const door = nodes[doorId];
163
+ if (door?.type !== 'door')
164
+ continue;
165
+ const { position, height } = door;
166
+ // A raw legacy door places itself by `offset` until it is loaded.
167
+ if (!Array.isArray(position))
168
+ continue;
169
+ const bottom = getOpeningFloorDatum(wall, door, nodes) + position[1] - height / 2;
170
+ const frame = getWallCurveFrameAt(wall, position[0] / length);
171
+ const side = (offset) => [
172
+ frame.point.x + frame.normal.x * offset,
173
+ frame.point.y + frame.normal.y * offset,
174
+ ];
175
+ const a = floorsAt(side(faces.a + DOOR_SIDE_REACH));
176
+ const b = floorsAt(side(faces.b - DOOR_SIDE_REACH));
177
+ // A door between a floor and no floor at all opens to the outside.
178
+ const inside = a.length === 0 ? b : b.length === 0 ? a : [];
179
+ for (const slab of inside)
180
+ if (slab.elevation < floor && bottom <= slab.elevation + BELOW_GRADE_TOLERANCE)
181
+ walkOuts.set(slab.id, floor);
182
+ }
183
+ }
184
+ // The rest of that floor: a garage's floor may be several plates at its height (of its room, or
185
+ // joining the one the door is on).
186
+ for (let grown = walkOuts.size > 0; grown;) {
187
+ grown = false;
188
+ for (const slab of slabs) {
189
+ if (walkOuts.has(slab.id))
190
+ continue;
191
+ const joined = slabs.some((other) => walkOuts.has(other.id) &&
192
+ Math.abs(other.elevation - slab.elevation) < 1e-3 &&
193
+ ((slab.zoneIds ?? []).some((id) => other.zoneIds?.includes(id)) ||
194
+ union([slab.polygon, other.polygon]).length === 1));
195
+ if (joined) {
196
+ walkOuts.set(slab.id, floor);
197
+ grown = true;
198
+ }
199
+ }
80
200
  }
81
- return slabs;
201
+ return walkOuts;
82
202
  }
83
203
  /** The site's terrain field for the site this level stands on, or null on a flat site. */
84
204
  export function terrainFieldOverLevel(nodes, level) {
@@ -91,7 +211,7 @@ export function terrainFieldOverLevel(nodes, level) {
91
211
  /**
92
212
  * World XZ samples over the level's floor slabs: each slab's corners plus a grid across it no
93
213
  * coarser than the terrain's own spacing, capped so a big plate stays cheap. Slabs are the
94
- * footprint the grade ring already trusts (`belowGradeFootprints`).
214
+ * footprint the ground's hole already trusts (`belowGradeFootprints`).
95
215
  */
96
216
  export function footprintSamples(nodes, level, field) {
97
217
  return footprintFloorSamples(nodes, level, field).map(([x, z]) => [x, z]);
@@ -112,7 +232,7 @@ export function footprintFloorSamples(nodes, level, field) {
112
232
  for (const slab of floorSlabsOf(nodes, level)) {
113
233
  for (const [x, z] of slabSamples(slab.polygon, field.spacing)) {
114
234
  const [worldX, worldZ] = levelLocalToWorldXZ(placed, x, z);
115
- samples.push([worldX, worldZ, plane + slab.elevation]);
235
+ samples.push([worldX, worldZ, plane + slabGradeElevation(nodes, level, slab)]);
116
236
  }
117
237
  }
118
238
  return samples;
@@ -1,15 +1,6 @@
1
1
  import type { AnyNode, AnyNodeId, LevelNode } from '../schema/index.js';
2
- import { type FoundationReading } from './foundation-construction.js';
3
- /** How far the ground floor's datum may stand from its seat and still count as seated on it. */
2
+ /** How far the ground floor's datum may stand from grade and still count as seated on it. */
4
3
  export declare const GROUND_SEAT_TOLERANCE = 0.05;
5
- /**
6
- * Where "Set as ground floor" and `set_ground_level` stand the ground floor over finished grade
7
- * on the generic (block) foundation: the top of the foundation, where the wood framing starts, 8
8
- * in (0.203 m) above the ground. IRC R317.1 keeps wood framing resting on a foundation wall at
9
- * least 8 in from exposed ground. A building's region and style can choose another construction
10
- * and its own seat (`GroundSeat.aboveGrade`, `FOUNDATION_CONSTRUCTIONS`).
11
- */
12
- export declare const GROUND_FLOOR_ABOVE_GRADE: number;
13
4
  /**
14
5
  * The grade a level's floor is seated against: the flat datum on a flat site, and on shaped
15
6
  * terrain the ground's mean height over the level's floor slabs (the building's own origin when it
@@ -28,19 +19,8 @@ export type GroundSeat = {
28
19
  gradeElevation: number;
29
20
  /** How far the floor datum stands over grade: negative when it is sunk. */
30
21
  offset: number;
31
- /** How far the building's foundation construction stands the ground floor over grade, metres. */
32
- aboveGrade: number;
33
- /** The construction, the region and style it was read from. */
34
- foundation: FoundationReading;
35
- /**
36
- * The floor datum stands between grade and the foundation's top (`aboveGrade`, or the block's
37
- * 8 in where that is higher), within {@link GROUND_SEAT_TOLERANCE}: what a scene seated before
38
- * the 8 in rule, one seated by it and one seated by its own region's construction all satisfy,
39
- * so a check has nothing to say about any of them.
40
- */
22
+ /** The floor datum stands on grade, within {@link GROUND_SEAT_TOLERANCE}. */
41
23
  seated: boolean;
42
- /** The floor datum stands at `aboveGrade` over grade, within the tolerance. */
43
- atFoundationTop: boolean;
44
24
  };
45
25
  /** `null` for an id that is no building, or a building with no level at or over the ground. */
46
26
  export declare function groundSeat(nodes: Record<AnyNodeId, AnyNode>, buildingId: string): GroundSeat | null;
@@ -1 +1 @@
1
- {"version":3,"file":"ground-seat.d.ts","sourceRoot":"","sources":["../../src/lib/ground-seat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAgB,SAAS,EAAE,MAAM,WAAW,CAAA;AAE5E,OAAO,EAEL,KAAK,iBAAiB,EAEvB,MAAM,2BAA2B,CAAA;AAMlC,gGAAgG;AAChG,eAAO,MAAM,qBAAqB,OAAO,CAAA;AAEzC;;;;;;GAMG;AACH,eAAO,MAAM,wBAAwB,QAA8C,CAAA;AAEnF;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,GAAG,MAAM,CAa3F;AAED,4DAA4D;AAC5D,MAAM,MAAM,UAAU,GAAG;IACvB,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,MAAM,CAAA;IACf,uEAAuE;IACvE,QAAQ,EAAE,OAAO,CAAA;IACjB,oEAAoE;IACpE,cAAc,EAAE,MAAM,CAAA;IACtB,qCAAqC;IACrC,cAAc,EAAE,MAAM,CAAA;IACtB,2EAA2E;IAC3E,MAAM,EAAE,MAAM,CAAA;IACd,iGAAiG;IACjG,UAAU,EAAE,MAAM,CAAA;IAClB,+DAA+D;IAC/D,UAAU,EAAE,iBAAiB,CAAA;IAC7B;;;;;OAKG;IACH,MAAM,EAAE,OAAO,CAAA;IACf,+EAA+E;IAC/E,eAAe,EAAE,OAAO,CAAA;CACzB,CAAA;AAED,+FAA+F;AAC/F,wBAAgB,UAAU,CACxB,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,EACjC,UAAU,EAAE,MAAM,GACjB,UAAU,GAAG,IAAI,CAsBnB"}
1
+ {"version":3,"file":"ground-seat.d.ts","sourceRoot":"","sources":["../../src/lib/ground-seat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAgB,SAAS,EAAE,MAAM,WAAW,CAAA;AAO5E,6FAA6F;AAC7F,eAAO,MAAM,qBAAqB,OAAO,CAAA;AAEzC;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,GAAG,MAAM,CAa3F;AAED,4DAA4D;AAC5D,MAAM,MAAM,UAAU,GAAG;IACvB,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,MAAM,CAAA;IACf,uEAAuE;IACvE,QAAQ,EAAE,OAAO,CAAA;IACjB,oEAAoE;IACpE,cAAc,EAAE,MAAM,CAAA;IACtB,qCAAqC;IACrC,cAAc,EAAE,MAAM,CAAA;IACtB,2EAA2E;IAC3E,MAAM,EAAE,MAAM,CAAA;IACd,6EAA6E;IAC7E,MAAM,EAAE,OAAO,CAAA;CAChB,CAAA;AAED,+FAA+F;AAC/F,wBAAgB,UAAU,CACxB,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,EACjC,UAAU,EAAE,MAAM,GACjB,UAAU,GAAG,IAAI,CAenB"}
@@ -1,19 +1,10 @@
1
1
  import { getStoreyDatum } from '../services/storey-datum.js';
2
- import { FOUNDATION_CONSTRUCTIONS, foundationReadingOf, } from './foundation-construction.js';
3
2
  import { footprintSamples, terrainFieldOverLevel } from './grade-standing.js';
4
3
  import { groundLevelOf } from './ground-level.js';
5
4
  import { heightAt } from './terrain-field.js';
6
5
  import { levelLocalToWorldXZ, SITE_DATUM_Y } from './terrain-support-query.js';
7
- /** How far the ground floor's datum may stand from its seat and still count as seated on it. */
6
+ /** How far the ground floor's datum may stand from grade and still count as seated on it. */
8
7
  export const GROUND_SEAT_TOLERANCE = 0.05;
9
- /**
10
- * Where "Set as ground floor" and `set_ground_level` stand the ground floor over finished grade
11
- * on the generic (block) foundation: the top of the foundation, where the wood framing starts, 8
12
- * in (0.203 m) above the ground. IRC R317.1 keeps wood framing resting on a foundation wall at
13
- * least 8 in from exposed ground. A building's region and style can choose another construction
14
- * and its own seat (`GroundSeat.aboveGrade`, `FOUNDATION_CONSTRUCTIONS`).
15
- */
16
- export const GROUND_FLOOR_ABOVE_GRADE = FOUNDATION_CONSTRUCTIONS.cmu.seatAboveGrade;
17
8
  /**
18
9
  * The grade a level's floor is seated against: the flat datum on a flat site, and on shaped
19
10
  * terrain the ground's mean height over the level's floor slabs (the building's own origin when it
@@ -43,8 +34,6 @@ export function groundSeat(nodes, buildingId) {
43
34
  return null;
44
35
  const gradeElevation = gradeUnderLevel(nodes, ground.level);
45
36
  const offset = datum.floorElevation - gradeElevation;
46
- const foundation = foundationReadingOf(nodes, buildingId);
47
- const aboveGrade = foundation.construction.seatAboveGrade;
48
37
  return {
49
38
  buildingId,
50
39
  levelId: ground.level.id,
@@ -52,10 +41,6 @@ export function groundSeat(nodes, buildingId) {
52
41
  floorElevation: datum.floorElevation,
53
42
  gradeElevation,
54
43
  offset,
55
- aboveGrade,
56
- foundation,
57
- seated: offset >= -GROUND_SEAT_TOLERANCE &&
58
- offset <= Math.max(aboveGrade, GROUND_FLOOR_ABOVE_GRADE) + GROUND_SEAT_TOLERANCE,
59
- atFoundationTop: Math.abs(offset - aboveGrade) <= GROUND_SEAT_TOLERANCE,
44
+ seated: Math.abs(offset) <= GROUND_SEAT_TOLERANCE,
60
45
  };
61
46
  }
@@ -11,7 +11,8 @@ export type GroundBox = {
11
11
  };
12
12
  /**
13
13
  * The world box of one level: its floor slabs' extent (its walls' if it has no slab), from its
14
- * lowest floor (the sunken room of a split level) to the height of its highest floor's ceiling.
14
+ * lowest floor (the sunken room of a split level; not a garage sunk under the floor that opens out
15
+ * to the drive, whose ground comes down to it) to the height of its highest floor's ceiling.
15
16
  */
16
17
  export declare function levelGroundBox(nodes: Record<AnyNodeId, AnyNode>, levelId: string): GroundBox | null;
17
18
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"ground-window.d.ts","sourceRoot":"","sources":["../../src/lib/ground-window.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAA2B,MAAM,WAAW,CAAA;AAO5E;;;;;GAKG;AACH,MAAM,MAAM,SAAS,GAAG;IAAE,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,CAAA;AAExF;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,EACjC,OAAO,EAAE,MAAM,GACd,SAAS,GAAG,IAAI,CAQlB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,EACjC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,GACzB,SAAS,GAAG,IAAI,CASlB;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,EACjC,OAAO,EAAE,MAAM,GACd,SAAS,GAAG,IAAI,CAUlB;AAOD;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,EACjC,GAAG,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EACtC,GAAG,EAAE,SAAS,GACb,OAAO,CAwBT"}
1
+ {"version":3,"file":"ground-window.d.ts","sourceRoot":"","sources":["../../src/lib/ground-window.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAA2B,MAAM,WAAW,CAAA;AAQ5E;;;;;GAKG;AACH,MAAM,MAAM,SAAS,GAAG;IAAE,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,CAAA;AAExF;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,EACjC,OAAO,EAAE,MAAM,GACd,SAAS,GAAG,IAAI,CASlB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,EACjC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,GACzB,SAAS,GAAG,IAAI,CASlB;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,EACjC,OAAO,EAAE,MAAM,GACd,SAAS,GAAG,IAAI,CAUlB;AAOD;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,EACjC,GAAG,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EACtC,GAAG,EAAE,SAAS,GACb,OAAO,CAwBT"}
@@ -1,11 +1,13 @@
1
1
  import { getLevelElevations, levelFloorWorldY, levelLowestFloorWorldY } from '../services/storey.js';
2
+ import { levelGradeFloorWorldY } from './grade-standing.js';
2
3
  import { isSiteFlatwork } from './site-flatwork.js';
3
4
  import { heightAt } from './terrain-field.js';
4
5
  import { terrainFieldOf } from './terrain-source.js';
5
6
  import { levelLocalToWorldXZ } from './terrain-support-query.js';
6
7
  /**
7
8
  * The world box of one level: its floor slabs' extent (its walls' if it has no slab), from its
8
- * lowest floor (the sunken room of a split level) to the height of its highest floor's ceiling.
9
+ * lowest floor (the sunken room of a split level; not a garage sunk under the floor that opens out
10
+ * to the drive, whose ground comes down to it) to the height of its highest floor's ceiling.
9
11
  */
10
12
  export function levelGroundBox(nodes, levelId) {
11
13
  const level = nodes[levelId];
@@ -16,7 +18,8 @@ export function levelGroundBox(nodes, levelId) {
16
18
  const points = footprintPoints(nodes, level);
17
19
  if (points.length === 0)
18
20
  return null;
19
- return boxOf(points, levelLowestFloorWorldY(nodes, levelId) ?? floorY, floorY + height);
21
+ const lowest = levelGradeFloorWorldY(nodes, level) ?? levelLowestFloorWorldY(nodes, levelId);
22
+ return boxOf(points, lowest ?? floorY, floorY + height);
20
23
  }
21
24
  /**
22
25
  * The world box of a building (every building, with no id): the union of its levels' boxes.
@@ -2,6 +2,8 @@ import type { WallNode } from '../schema/index.js';
2
2
  import { type MultiPolygon } from './polygon-boolean.js';
3
3
  import type { LevelFootprintContext, TopologyRoom } from './room-topology-index.js';
4
4
  export declare function roomWallFootprints(rooms: readonly TopologyRoom[]): MultiPolygon;
5
+ /** The footprints of the railings round `room` (a deck's guard): no house wall among them. */
6
+ export declare function roomRailingFootprints(room: TopologyRoom): MultiPolygon;
5
7
  export declare function roomClearPolygon(room: TopologyRoom): MultiPolygon;
6
8
  /** Rooms must belong to the same immutable level topology revision. */
7
9
  export declare function plateFootprint(rooms: readonly TopologyRoom[]): MultiPolygon;
@@ -1 +1 @@
1
- {"version":3,"file":"level-footprints.d.ts","sourceRoot":"","sources":["../../src/lib/level-footprints.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAKzC,OAAO,EAIL,KAAK,YAAY,EAGlB,MAAM,mBAAmB,CAAA;AAE1B,OAAO,KAAK,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAmLhF,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,SAAS,YAAY,EAAE,GAAG,YAAY,CAE/E;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,YAAY,GAAG,YAAY,CASjE;AAED,uEAAuE;AACvE,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,YAAY,EAAE,GAAG,YAAY,CA8F3E;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;IACjB,EAAE,EAAE,MAAM,CAAA;IACV,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACvB,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACtB,CAAA;AA2ED,mGAAmG;AACnG,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,YAAY,EACnB,KAAK,EAAE,SAAS,QAAQ,EAAE,GAAG,qBAAqB,EAClD,KAAK,CAAC,EAAE,YAAY,EACpB,OAAO,CAAC,EAAE;IAAE,cAAc,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,YAAY,CAAA;CAAE,GAC7D,eAAe,EAAE,CA2EnB;AAED,wBAAgB,yBAAyB,IAAI,IAAI,CAEhD"}
1
+ {"version":3,"file":"level-footprints.d.ts","sourceRoot":"","sources":["../../src/lib/level-footprints.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAMzC,OAAO,EAIL,KAAK,YAAY,EAGlB,MAAM,mBAAmB,CAAA;AAE1B,OAAO,KAAK,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAmLhF,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,SAAS,YAAY,EAAE,GAAG,YAAY,CAE/E;AAED,8FAA8F;AAC9F,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,YAAY,GAAG,YAAY,CAMtE;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,YAAY,GAAG,YAAY,CASjE;AAED,uEAAuE;AACvE,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,YAAY,EAAE,GAAG,YAAY,CA8F3E;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;IACjB,EAAE,EAAE,MAAM,CAAA;IACV,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACvB,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACtB,CAAA;AA2ED,mGAAmG;AACnG,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,YAAY,EACnB,KAAK,EAAE,SAAS,QAAQ,EAAE,GAAG,qBAAqB,EAClD,KAAK,CAAC,EAAE,YAAY,EACpB,OAAO,CAAC,EAAE;IAAE,cAAc,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,YAAY,CAAA;CAAE,GAC7D,eAAe,EAAE,CA2EnB;AAED,wBAAgB,yBAAyB,IAAI,IAAI,CAEhD"}
@@ -1,3 +1,4 @@
1
+ import { isRailingWall } from '../schema/nodes/railing-wall.js';
1
2
  import { getWallSurfacePolygon, isCurvedWall } from '../systems/wall/wall-curve.js';
2
3
  import { calculateLevelMiters, getWallPlanFootprint } from '../systems/wall/wall-footprint.js';
3
4
  import { getWallFaceLine } from '../systems/wall/wall-frame.js';
@@ -165,6 +166,12 @@ function recoverWallFootprint(plate, footprint, context) {
165
166
  export function roomWallFootprints(rooms) {
166
167
  return union(boundaryFootprints(rooms).map(({ polygon }) => polygon));
167
168
  }
169
+ /** The footprints of the railings round `room` (a deck's guard): no house wall among them. */
170
+ export function roomRailingFootprints(room) {
171
+ return union(boundaryFootprints([room])
172
+ .filter(({ id }) => isRailingWall(room.context.walls.get(id)))
173
+ .map(({ polygon }) => polygon));
174
+ }
168
175
  export function roomClearPolygon(room) {
169
176
  const cached = clearCache.get(room);
170
177
  if (cached)
@@ -0,0 +1,67 @@
1
+ import type { AnyNode, DoorNode, WallFace, WindowNode } from '../schema/index.js';
2
+ import { DEFAULT_OPENING_CASING_WIDTH, OPENING_CASING_PROUD } from '../schema/nodes/opening-types.js';
3
+ /**
4
+ * Door and window casing: flat boards on the finished faces of the host wall
5
+ * around the opening, over the drywall or siding. The wall cutout is the unit's
6
+ * own width × height and the casing never reaches into it: each board starts at
7
+ * the cutout's edge and runs outward, `OPENING_CASING_PROUD` off the face. A
8
+ * window gets a picture frame (head, two legs, bottom), a door a head and two
9
+ * legs, butted at the corners: the head and bottom run the full width over the
10
+ * legs' ends.
11
+ *
12
+ * Everything here is in the host frame, centred on the opening: x along the
13
+ * host toward its end, y up, z across it toward face `a`. The 3D builders turn
14
+ * that into the unit's own frame (a unit facing the back is turned half round,
15
+ * see `openingHostFacing`); the plan draws it as it is.
16
+ */
17
+ export { DEFAULT_OPENING_CASING_WIDTH, OPENING_CASING_PROUD };
18
+ type CasedOpening = DoorNode | WindowNode;
19
+ export type OpeningCasingHost = {
20
+ /** The host's total thickness with its finishes: each face is half of it off the mid-plane (m). */
21
+ thickness: number;
22
+ /** Room side, when known, for a window's interior stool. */
23
+ interiorFace?: WallFace;
24
+ exteriorFace?: WallFace;
25
+ /** The host end a corner window runs to: no leg there; the head and bottom stop at the opening. */
26
+ cornerEnd?: 'start' | 'end';
27
+ };
28
+ export type OpeningCasingFace = {
29
+ face: WallFace;
30
+ /** Across the host, from the opening's centre plane to the finished face (m). */
31
+ plane: number;
32
+ /** The way the face looks across the host: +1 for `a`, -1 for `b`. */
33
+ out: 1 | -1;
34
+ };
35
+ export type OpeningCasingBoard = {
36
+ face: WallFace;
37
+ /**
38
+ * `leg` boards stand beside the opening, the part a plan cut shows. A `foot` carries a leg on
39
+ * down past a window's sill to the bottom board, which sits under the sill on that face.
40
+ */
41
+ part: 'head' | 'leg' | 'foot' | 'bottom';
42
+ /** Centre, from the opening's centre in the host frame (m). */
43
+ center: [number, number, number];
44
+ /** Along the host, up, across it (m). */
45
+ size: [number, number, number];
46
+ };
47
+ /** The face width of an opening's casing boards; a save from before casing has the default. */
48
+ export declare function openingCasingWidth(opening: Pick<CasedOpening, 'casingWidth'>): number;
49
+ /**
50
+ * +1 when the unit faces the host's front (its own +z is face `a`), -1 when it is turned half
51
+ * round to face the back, which mirrors its x and z against the host's.
52
+ */
53
+ export declare function openingHostFacing(opening: Partial<Pick<CasedOpening, 'rotation'>>): 1 | -1;
54
+ /** Roof face a is outside; an unbounded wall follows the same a/outside, b/inside convention. */
55
+ export declare function openingInteriorFace(opening: Pick<CasedOpening, 'parentId' | 'roofSegmentId'>, nodes: Readonly<Record<string, AnyNode>>): WallFace;
56
+ /**
57
+ * The host an opening is cased on: its wall, or the roof-segment face it is cut into (a gable
58
+ * end, whose face `a` is the outside). Null where casing has nowhere to go: a curtain wall, a
59
+ * railing (its openings are gaps in the guard), a dormer face, a unit built from a script (its
60
+ * script draws its own trim).
61
+ */
62
+ export declare function resolveOpeningCasingHost(opening: CasedOpening, nodes: Readonly<Record<string, AnyNode>>, host?: AnyNode | undefined): OpeningCasingHost | null;
63
+ /** The host faces an opening is cased on: both unless turned off (a save from before has both). */
64
+ export declare function openingCasingFaces(opening: Pick<CasedOpening, 'position' | 'casingFaceA' | 'casingFaceB'>, host: OpeningCasingHost): OpeningCasingFace[];
65
+ /** The casing boards of a rectangular opening on each face it is cased on, in the host frame. */
66
+ export declare function openingCasingBoards(opening: CasedOpening, host: OpeningCasingHost): OpeningCasingBoard[];
67
+ //# sourceMappingURL=opening-casing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opening-casing.d.ts","sourceRoot":"","sources":["../../src/lib/opening-casing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AACxE,OAAO,EAAE,4BAA4B,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAA;AAOlG;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,4BAA4B,EAAE,oBAAoB,EAAE,CAAA;AAE7D,KAAK,YAAY,GAAG,QAAQ,GAAG,UAAU,CAAA;AAIzC,MAAM,MAAM,iBAAiB,GAAG;IAC9B,mGAAmG;IACnG,SAAS,EAAE,MAAM,CAAA;IACjB,4DAA4D;IAC5D,YAAY,CAAC,EAAE,QAAQ,CAAA;IACvB,YAAY,CAAC,EAAE,QAAQ,CAAA;IACvB,mGAAmG;IACnG,SAAS,CAAC,EAAE,OAAO,GAAG,KAAK,CAAA;CAC5B,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,QAAQ,CAAA;IACd,iFAAiF;IACjF,KAAK,EAAE,MAAM,CAAA;IACb,sEAAsE;IACtE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;CACZ,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,QAAQ,CAAA;IACd;;;OAGG;IACH,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAA;IACxC,+DAA+D;IAC/D,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,yCAAyC;IACzC,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;CAC/B,CAAA;AAED,+FAA+F;AAC/F,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,GAAG,MAAM,CAGrF;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAE1F;AAED,iGAAiG;AACjG,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,UAAU,GAAG,eAAe,CAAC,EACzD,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACvC,QAAQ,CAKV;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,YAAY,EACrB,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,IAAI,GAAE,OAAO,GAAG,SAAkE,GACjF,iBAAiB,GAAG,IAAI,CA2B1B;AAED,mGAAmG;AACnG,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,UAAU,GAAG,aAAa,GAAG,aAAa,CAAC,EACvE,IAAI,EAAE,iBAAiB,GACtB,iBAAiB,EAAE,CAOrB;AAcD,iGAAiG;AACjG,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,YAAY,EACrB,IAAI,EAAE,iBAAiB,GACtB,kBAAkB,EAAE,CAoCtB"}
@@ -0,0 +1,131 @@
1
+ import { DEFAULT_OPENING_CASING_WIDTH, OPENING_CASING_PROUD } from '../schema/nodes/opening-types.js';
2
+ import { DEFAULT_WALL_THICKNESS, getWallThickness } from '../systems/wall/wall-footprint.js';
3
+ import { roomSideFaces } from '../systems/wall/wall-room-sides.js';
4
+ import { cornerPair } from './corner-pair.js';
5
+ import { getDoorOpeningSize } from './door-opening.js';
6
+ import { openingExteriorFace } from './opening-exterior-face.js';
7
+ /**
8
+ * Door and window casing: flat boards on the finished faces of the host wall
9
+ * around the opening, over the drywall or siding. The wall cutout is the unit's
10
+ * own width × height and the casing never reaches into it: each board starts at
11
+ * the cutout's edge and runs outward, `OPENING_CASING_PROUD` off the face. A
12
+ * window gets a picture frame (head, two legs, bottom), a door a head and two
13
+ * legs, butted at the corners: the head and bottom run the full width over the
14
+ * legs' ends.
15
+ *
16
+ * Everything here is in the host frame, centred on the opening: x along the
17
+ * host toward its end, y up, z across it toward face `a`. The 3D builders turn
18
+ * that into the unit's own frame (a unit facing the back is turned half round,
19
+ * see `openingHostFacing`); the plan draws it as it is.
20
+ */
21
+ export { DEFAULT_OPENING_CASING_WIDTH, OPENING_CASING_PROUD };
22
+ /** The face width of an opening's casing boards; a save from before casing has the default. */
23
+ export function openingCasingWidth(opening) {
24
+ const width = opening.casingWidth;
25
+ return typeof width === 'number' && width > 0 ? width : DEFAULT_OPENING_CASING_WIDTH;
26
+ }
27
+ /**
28
+ * +1 when the unit faces the host's front (its own +z is face `a`), -1 when it is turned half
29
+ * round to face the back, which mirrors its x and z against the host's.
30
+ */
31
+ export function openingHostFacing(opening) {
32
+ return Math.cos(opening.rotation?.[1] ?? 0) >= 0 ? 1 : -1;
33
+ }
34
+ /** Roof face a is outside; an unbounded wall follows the same a/outside, b/inside convention. */
35
+ export function openingInteriorFace(opening, nodes) {
36
+ if (!opening.roofSegmentId && opening.parentId && nodes[opening.parentId]?.type === 'wall') {
37
+ return roomSideFaces(nodes, opening.parentId).inside ?? 'b';
38
+ }
39
+ return 'b';
40
+ }
41
+ /**
42
+ * The host an opening is cased on: its wall, or the roof-segment face it is cut into (a gable
43
+ * end, whose face `a` is the outside). Null where casing has nowhere to go: a curtain wall, a
44
+ * railing (its openings are gaps in the guard), a dormer face, a unit built from a script (its
45
+ * script draws its own trim).
46
+ */
47
+ export function resolveOpeningCasingHost(opening, nodes, host = nodes[opening.roofSegmentId ?? opening.parentId ?? '']) {
48
+ if (opening.source)
49
+ return null;
50
+ const exteriorFace = opening.type === 'window' ? openingExteriorFace(opening, nodes) : undefined;
51
+ const interior = opening.type === 'window'
52
+ ? {
53
+ exteriorFace,
54
+ ...(opening.sillInterior
55
+ ? {
56
+ interiorFace: exteriorFace === 'a' ? 'b' : 'a',
57
+ }
58
+ : {}),
59
+ }
60
+ : {};
61
+ if (opening.roofSegmentId) {
62
+ return host?.type === 'roof-segment'
63
+ ? { thickness: host.wallThickness ?? DEFAULT_WALL_THICKNESS, ...interior }
64
+ : null;
65
+ }
66
+ if (host?.type !== 'wall' || host.wallType === 'curtain' || host.wallType === 'railing')
67
+ return null;
68
+ const pair = opening.type === 'window' ? cornerPair(nodes, opening) : null;
69
+ return {
70
+ thickness: getWallThickness(host),
71
+ ...interior,
72
+ ...(pair ? { cornerEnd: pair.end } : {}),
73
+ };
74
+ }
75
+ /** The host faces an opening is cased on: both unless turned off (a save from before has both). */
76
+ export function openingCasingFaces(opening, host) {
77
+ const offset = opening.position[2] ?? 0;
78
+ const half = host.thickness / 2;
79
+ const faces = [];
80
+ if (opening.casingFaceA === true)
81
+ faces.push({ face: 'a', plane: half - offset, out: 1 });
82
+ if (opening.casingFaceB === true)
83
+ faces.push({ face: 'b', plane: -half - offset, out: -1 });
84
+ return faces;
85
+ }
86
+ /** The casing bottom clears whichever sill is on this host face. */
87
+ function sillDrop(opening, face, host) {
88
+ if (opening.type !== 'window' || opening.openingKind === 'opening')
89
+ return 0;
90
+ const front = host.exteriorFace ?? (openingHostFacing(opening) === 1 ? 'a' : 'b');
91
+ return Math.max(opening.sill && face === front ? Math.max(opening.sillThickness ?? 0, 0) : 0, opening.sillInterior && face === (host.interiorFace ?? 'b')
92
+ ? (opening.sillInteriorThickness ?? 0.03)
93
+ : 0);
94
+ }
95
+ /** The casing boards of a rectangular opening on each face it is cased on, in the host frame. */
96
+ export function openingCasingBoards(opening, host) {
97
+ const width = openingCasingWidth(opening);
98
+ const proud = OPENING_CASING_PROUD;
99
+ const size = getDoorOpeningSize(opening);
100
+ const halfWidth = size.width / 2;
101
+ const halfHeight = size.height / 2;
102
+ const offsetX = -size.leafOffsetX * openingHostFacing(opening);
103
+ const offsetY = (size.height - opening.height) / 2;
104
+ const corner = host.cornerEnd === 'start' ? -1 : host.cornerEnd === 'end' ? 1 : 0;
105
+ const left = -halfWidth - (corner === -1 ? 0 : width);
106
+ const right = halfWidth + (corner === 1 ? 0 : width);
107
+ const legs = [-1, 1]
108
+ .filter((side) => side !== corner)
109
+ .map((side) => side < 0 ? [-halfWidth - width, -halfWidth] : [halfWidth, halfWidth + width]);
110
+ const boards = [];
111
+ for (const { face, plane, out } of openingCasingFaces(opening, host)) {
112
+ const z = plane + (out * proud) / 2;
113
+ const board = (part, [x0, x1], [y0, y1]) => boards.push({
114
+ face,
115
+ part,
116
+ center: [(x0 + x1) / 2 + offsetX, (y0 + y1) / 2 + offsetY, z],
117
+ size: [x1 - x0, y1 - y0, proud],
118
+ });
119
+ board('head', [left, right], [halfHeight, halfHeight + width]);
120
+ for (const along of legs)
121
+ board('leg', along, [-halfHeight, halfHeight]);
122
+ if (opening.type !== 'window')
123
+ continue;
124
+ const drop = sillDrop(opening, face, host);
125
+ if (drop > 1e-6)
126
+ for (const along of legs)
127
+ board('foot', along, [-halfHeight - drop, -halfHeight]);
128
+ board('bottom', [left, right], [-halfHeight - drop - width, -halfHeight - drop]);
129
+ }
130
+ return boards;
131
+ }
@@ -0,0 +1,6 @@
1
+ import type { AnyNode, WallFace, WindowNode } from '../schema/index.js';
2
+ type Opening = Pick<WindowNode, 'parentId' | 'wallId' | 'roofSegmentId' | 'dormerId' | 'side' | 'rotation'>;
3
+ /** The unoccupied face; ambiguous walls retain the placement face. Generated roof faces face out on a. */
4
+ export declare function openingExteriorFace(opening: Opening, nodes: Readonly<Record<string, AnyNode>>): WallFace;
5
+ export {};
6
+ //# sourceMappingURL=opening-exterior-face.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opening-exterior-face.d.ts","sourceRoot":"","sources":["../../src/lib/opening-exterior-face.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAG9D,KAAK,OAAO,GAAG,IAAI,CACjB,UAAU,EACV,UAAU,GAAG,QAAQ,GAAG,eAAe,GAAG,UAAU,GAAG,MAAM,GAAG,UAAU,CAC3E,CAAA;AAED,0GAA0G;AAC1G,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACvC,QAAQ,CASV"}
@@ -0,0 +1,15 @@
1
+ import { roomSideFaces } from '../systems/wall/wall-room-sides.js';
2
+ /** The unoccupied face; ambiguous walls retain the placement face. Generated roof faces face out on a. */
3
+ export function openingExteriorFace(opening, nodes) {
4
+ if (opening.roofSegmentId || opening.dormerId)
5
+ return 'a';
6
+ const wallId = opening.wallId ?? opening.parentId;
7
+ if (wallId && nodes[wallId]?.type === 'wall') {
8
+ const outside = roomSideFaces(nodes, wallId).outside;
9
+ if (outside)
10
+ return outside;
11
+ }
12
+ if (opening.side)
13
+ return opening.side === 'front' ? 'a' : 'b';
14
+ return Math.cos(opening.rotation?.[1] ?? 0) >= 0 ? 'a' : 'b';
15
+ }
@@ -2,11 +2,17 @@ import type { AnyNode, DoorNode, WallNode, WindowNode } from '../schema/index.js
2
2
  import { type WallSlabSupport, type WallSlabSupportSegment } from '../systems/slab/slab-support.js';
3
3
  export declare function wallSupportForNodes(wall: WallNode, nodes: Readonly<Record<string, AnyNode>>): WallSlabSupport;
4
4
  export declare function supportSegmentAt(segment: WallSlabSupportSegment, t: number): number;
5
- export declare function openingDatumFromSupport(wall: WallNode, opening: Pick<DoorNode | WindowNode, 'position' | 'width' | 'height'>, support: WallSlabSupport): number;
5
+ export declare function openingDatumFromSupport(wall: WallNode, opening: Pick<DoorNode | WindowNode, 'position' | 'width' | 'height'> & Partial<Pick<DoorNode, 'rotation' | 'sidelightLeft' | 'sidelightRight' | 'transomHeight' | 'doorType'>>, support: WallSlabSupport): number;
6
6
  /** Unclamped floor intent, used by authoring feasibility and legacy migration. */
7
- export declare function getOpeningFloorTarget(wall: WallNode, opening: Pick<DoorNode | WindowNode, 'position' | 'width' | 'height'>, nodes: Readonly<Record<string, AnyNode>>): number;
8
- export declare function openingFitsAtDatum(wall: WallNode, opening: Pick<DoorNode | WindowNode, 'position' | 'height'>, datum: number, nodes: Readonly<Record<string, AnyNode>>, support?: WallSlabSupport): boolean;
9
- export declare function getOpeningFloorDatum(wall: WallNode, opening: Pick<DoorNode | WindowNode, 'position' | 'width' | 'height'>, nodes: Readonly<Record<string, AnyNode>>, support?: WallSlabSupport): number;
7
+ export declare function getOpeningFloorTarget(wall: WallNode, opening: Pick<DoorNode | WindowNode, 'position' | 'width' | 'height'> & Partial<Pick<DoorNode, 'rotation' | 'sidelightLeft' | 'sidelightRight' | 'transomHeight' | 'doorType'>>, nodes: Readonly<Record<string, AnyNode>>): number;
8
+ export declare function openingFitsAtDatum(wall: WallNode, opening: Pick<DoorNode | WindowNode, 'position' | 'height'> & Partial<Pick<DoorNode, 'transomHeight' | 'doorType'>>, datum: number, nodes: Readonly<Record<string, AnyNode>>, support?: WallSlabSupport): boolean;
9
+ /**
10
+ * The lowest the wall reaches under the opening's span, level-local, on its centreline or either
11
+ * face: where a face goes down beside a floor sunk under the one the wall stands on (a garage
12
+ * beside the house), lower than that floor.
13
+ */
14
+ export declare function wallBottomUnderOpening(wall: WallNode, opening: Pick<DoorNode | WindowNode, 'position' | 'width'> & Partial<Pick<DoorNode, 'height' | 'rotation' | 'sidelightLeft' | 'sidelightRight' | 'transomHeight' | 'doorType'>>, support: WallSlabSupport): number;
15
+ export declare function getOpeningFloorDatum(wall: WallNode, opening: Pick<DoorNode | WindowNode, 'position' | 'width' | 'height'> & Partial<Pick<DoorNode, 'rotation' | 'sidelightLeft' | 'sidelightRight' | 'transomHeight' | 'doorType'>>, nodes: Readonly<Record<string, AnyNode>>, support?: WallSlabSupport): number;
10
16
  export declare function getOpeningWallCut(wall: WallNode, opening: DoorNode | WindowNode, nodes: Readonly<Record<string, AnyNode>>, support?: WallSlabSupport): {
11
17
  aperture: import("./polygon-boolean.js").MultiPolygon;
12
18
  band: import("./polygon-boolean.js").Ring;
@@ -15,7 +21,7 @@ export declare function getOpeningWallCut(wall: WallNode, opening: DoorNode | Wi
15
21
  top: number;
16
22
  covered: boolean;
17
23
  };
18
- export declare function getOpeningWallPlacement(wall: WallNode, opening: Pick<DoorNode | WindowNode, 'position' | 'width' | 'height' | 'rotation'> & {
24
+ export declare function getOpeningWallPlacement(wall: WallNode, opening: Pick<DoorNode | WindowNode, 'position' | 'width' | 'height' | 'rotation'> & Partial<Pick<DoorNode, 'sidelightLeft' | 'sidelightRight' | 'transomHeight' | 'doorType'>> & {
19
25
  metadata?: Record<string, unknown>;
20
26
  }, nodes: Readonly<Record<string, AnyNode>>): {
21
27
  position: [number, number, number];
@@ -1 +1 @@
1
- {"version":3,"file":"opening-floor-datum.d.ts","sourceRoot":"","sources":["../../src/lib/opening-floor-datum.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAY,QAAQ,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAElF,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,sBAAsB,EAC5B,MAAM,8BAA8B,CAAA;AAqBrC,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACvC,eAAe,CAoCjB;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,sBAAsB,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAMnF;AAED,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,IAAI,CAAC,QAAQ,GAAG,UAAU,EAAE,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAC,EACrE,OAAO,EAAE,eAAe,GACvB,MAAM,CAWR;AAED,kFAAkF;AAClF,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,IAAI,CAAC,QAAQ,GAAG,UAAU,EAAE,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAC,EACrE,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACvC,MAAM,CAER;AAED,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,IAAI,CAAC,QAAQ,GAAG,UAAU,EAAE,UAAU,GAAG,QAAQ,CAAC,EAC3D,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,OAAO,kBAAmC,GACzC,OAAO,CAGT;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,IAAI,CAAC,QAAQ,GAAG,UAAU,EAAE,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAC,EACrE,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,OAAO,kBAAmC,GACzC,MAAM,CAIR;AAUD,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,QAAQ,GAAG,UAAU,EAC9B,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,OAAO,kBAAmC;;;;;;;EA6D3C;AAED,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,IAAI,CAAC,QAAQ,GAAG,UAAU,EAAE,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,CAAC,GAAG;IACnF,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACnC,EACD,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;;;EAyBzC"}
1
+ {"version":3,"file":"opening-floor-datum.d.ts","sourceRoot":"","sources":["../../src/lib/opening-floor-datum.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAY,QAAQ,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAElF,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,sBAAsB,EAC5B,MAAM,8BAA8B,CAAA;AAuBrC,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACvC,eAAe,CAoCjB;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,sBAAsB,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAMnF;AAED,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,IAAI,CAAC,QAAQ,GAAG,UAAU,EAAE,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAC,GACnE,OAAO,CACL,IAAI,CAAC,QAAQ,EAAE,UAAU,GAAG,eAAe,GAAG,gBAAgB,GAAG,eAAe,GAAG,UAAU,CAAC,CAC/F,EACH,OAAO,EAAE,eAAe,GACvB,MAAM,CAaR;AAED,kFAAkF;AAClF,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,IAAI,CAAC,QAAQ,GAAG,UAAU,EAAE,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAC,GACnE,OAAO,CACL,IAAI,CAAC,QAAQ,EAAE,UAAU,GAAG,eAAe,GAAG,gBAAgB,GAAG,eAAe,GAAG,UAAU,CAAC,CAC/F,EACH,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACvC,MAAM,CAER;AAED,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,IAAI,CAAC,QAAQ,GAAG,UAAU,EAAE,UAAU,GAAG,QAAQ,CAAC,GACzD,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,eAAe,GAAG,UAAU,CAAC,CAAC,EACvD,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,OAAO,kBAAmC,GACzC,OAAO,CAST;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,IAAI,CAAC,QAAQ,GAAG,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,GACxD,OAAO,CACL,IAAI,CACF,QAAQ,EACR,QAAQ,GAAG,UAAU,GAAG,eAAe,GAAG,gBAAgB,GAAG,eAAe,GAAG,UAAU,CAC1F,CACF,EACH,OAAO,EAAE,eAAe,GACvB,MAAM,CAcR;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,IAAI,CAAC,QAAQ,GAAG,UAAU,EAAE,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAC,GACnE,OAAO,CACL,IAAI,CAAC,QAAQ,EAAE,UAAU,GAAG,eAAe,GAAG,gBAAgB,GAAG,eAAe,GAAG,UAAU,CAAC,CAC/F,EACH,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,OAAO,kBAAmC,GACzC,MAAM,CAIR;AAUD,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,QAAQ,GAAG,UAAU,EAC9B,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,OAAO,kBAAmC;;;;;;;EAoE3C;AAED,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,IAAI,CAAC,QAAQ,GAAG,UAAU,EAAE,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,CAAC,GAChF,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,eAAe,GAAG,gBAAgB,GAAG,eAAe,GAAG,UAAU,CAAC,CAAC,GAAG;IAC3F,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACnC,EACH,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;;;EAyBzC"}