@pascal-app/core 1.0.6 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1003) hide show
  1. package/dist/agent-operations/__fixtures__/add-object-cases.d.ts +31 -0
  2. package/dist/agent-operations/__fixtures__/add-object-cases.d.ts.map +1 -1
  3. package/dist/agent-operations/__fixtures__/build-room-cases.d.ts.map +1 -1
  4. package/dist/agent-operations/__fixtures__/build-room-cases.js +27 -0
  5. package/dist/agent-operations/__fixtures__/cases.d.ts.map +1 -1
  6. package/dist/agent-operations/__fixtures__/cases.js +19 -11
  7. package/dist/agent-operations/__fixtures__/design-brief-cases.d.ts +25 -2
  8. package/dist/agent-operations/__fixtures__/design-brief-cases.d.ts.map +1 -1
  9. package/dist/agent-operations/__fixtures__/design-brief-cases.js +509 -66
  10. package/dist/agent-operations/__fixtures__/dressing-scenes.d.ts +30 -0
  11. package/dist/agent-operations/__fixtures__/dressing-scenes.d.ts.map +1 -0
  12. package/dist/agent-operations/__fixtures__/dressing-scenes.js +82 -0
  13. package/dist/agent-operations/__fixtures__/native-materials.d.ts +411 -9
  14. package/dist/agent-operations/__fixtures__/native-materials.d.ts.map +1 -1
  15. package/dist/agent-operations/__fixtures__/notation-cases.d.ts.map +1 -1
  16. package/dist/agent-operations/__fixtures__/notation-cases.js +14 -0
  17. package/dist/agent-operations/__fixtures__/roof-bearing-cases.d.ts +13804 -10600
  18. package/dist/agent-operations/__fixtures__/roof-bearing-cases.d.ts.map +1 -1
  19. package/dist/agent-operations/__fixtures__/room-cases.d.ts +1 -0
  20. package/dist/agent-operations/__fixtures__/room-cases.d.ts.map +1 -1
  21. package/dist/agent-operations/__fixtures__/room-cases.js +57 -1
  22. package/dist/agent-operations/__fixtures__/room-check-scenes.d.ts +51 -0
  23. package/dist/agent-operations/__fixtures__/room-check-scenes.d.ts.map +1 -0
  24. package/dist/agent-operations/__fixtures__/room-check-scenes.js +121 -0
  25. package/dist/agent-operations/__fixtures__/scene-check-cases.d.ts.map +1 -1
  26. package/dist/agent-operations/__fixtures__/scene-check-cases.js +152 -18
  27. package/dist/agent-operations/__fixtures__/search-assets-cases.d.ts.map +1 -1
  28. package/dist/agent-operations/__fixtures__/search-assets-cases.js +91 -0
  29. package/dist/agent-operations/__fixtures__/site-cases.d.ts +40 -1
  30. package/dist/agent-operations/__fixtures__/site-cases.d.ts.map +1 -1
  31. package/dist/agent-operations/__fixtures__/structure-cases.d.ts +3 -0
  32. package/dist/agent-operations/__fixtures__/structure-cases.d.ts.map +1 -1
  33. package/dist/agent-operations/__fixtures__/structure-cases.js +199 -18
  34. package/dist/agent-operations/__fixtures__/unit-cases.d.ts +6 -0
  35. package/dist/agent-operations/__fixtures__/unit-cases.d.ts.map +1 -0
  36. package/dist/agent-operations/__fixtures__/unit-cases.js +266 -0
  37. package/dist/agent-operations/__fixtures__/verify-scene-cases.d.ts +37 -1
  38. package/dist/agent-operations/__fixtures__/verify-scene-cases.d.ts.map +1 -1
  39. package/dist/agent-operations/add-column.d.ts.map +1 -1
  40. package/dist/agent-operations/add-column.js +32 -3
  41. package/dist/agent-operations/add-fence.d.ts.map +1 -1
  42. package/dist/agent-operations/add-fence.js +2 -1
  43. package/dist/agent-operations/add-level.d.ts.map +1 -1
  44. package/dist/agent-operations/add-level.js +4 -4
  45. package/dist/agent-operations/add-object.d.ts +32 -6
  46. package/dist/agent-operations/add-object.d.ts.map +1 -1
  47. package/dist/agent-operations/add-object.js +59 -12
  48. package/dist/agent-operations/add-wall.d.ts +3 -8
  49. package/dist/agent-operations/add-wall.d.ts.map +1 -1
  50. package/dist/agent-operations/add-wall.js +31 -8
  51. package/dist/agent-operations/apply-changes.d.ts.map +1 -1
  52. package/dist/agent-operations/apply-changes.js +2 -1
  53. package/dist/agent-operations/asset-catalog.d.ts +63 -0
  54. package/dist/agent-operations/asset-catalog.d.ts.map +1 -0
  55. package/dist/agent-operations/asset-catalog.js +182 -0
  56. package/dist/agent-operations/asset-views.d.ts +4 -2
  57. package/dist/agent-operations/asset-views.d.ts.map +1 -1
  58. package/dist/agent-operations/asset-views.js +1 -3
  59. package/dist/agent-operations/author-scene-checks.d.ts +38 -0
  60. package/dist/agent-operations/author-scene-checks.d.ts.map +1 -0
  61. package/dist/agent-operations/author-scene-checks.js +266 -0
  62. package/dist/agent-operations/author-scene.d.ts +54 -20
  63. package/dist/agent-operations/author-scene.d.ts.map +1 -1
  64. package/dist/agent-operations/author-scene.js +1163 -196
  65. package/dist/agent-operations/authored-scene-merge.d.ts.map +1 -1
  66. package/dist/agent-operations/authored-scene-merge.js +61 -3
  67. package/dist/agent-operations/batch.d.ts +1 -1
  68. package/dist/agent-operations/batch.d.ts.map +1 -1
  69. package/dist/agent-operations/batch.js +38 -39
  70. package/dist/agent-operations/ceiling-object-observations.d.ts.map +1 -1
  71. package/dist/agent-operations/ceiling-object-observations.js +5 -4
  72. package/dist/agent-operations/circulation-geometry.d.ts +14 -0
  73. package/dist/agent-operations/circulation-geometry.d.ts.map +1 -0
  74. package/dist/agent-operations/circulation-geometry.js +151 -0
  75. package/dist/agent-operations/circulation-graph.d.ts +72 -0
  76. package/dist/agent-operations/circulation-graph.d.ts.map +1 -0
  77. package/dist/agent-operations/circulation-graph.js +713 -0
  78. package/dist/agent-operations/circulation-non-spaces.d.ts +10 -0
  79. package/dist/agent-operations/circulation-non-spaces.d.ts.map +1 -0
  80. package/dist/agent-operations/circulation-non-spaces.js +88 -0
  81. package/dist/agent-operations/circulation-spaces.d.ts +5881 -0
  82. package/dist/agent-operations/circulation-spaces.d.ts.map +1 -0
  83. package/dist/agent-operations/circulation-spaces.js +368 -0
  84. package/dist/agent-operations/collections.d.ts.map +1 -1
  85. package/dist/agent-operations/collections.js +9 -7
  86. package/dist/agent-operations/corner-window.d.ts.map +1 -1
  87. package/dist/agent-operations/corner-window.js +2 -4
  88. package/dist/agent-operations/create-roof.d.ts.map +1 -1
  89. package/dist/agent-operations/create-roof.js +5 -7
  90. package/dist/agent-operations/create-room.d.ts +4 -1
  91. package/dist/agent-operations/create-room.d.ts.map +1 -1
  92. package/dist/agent-operations/create-room.js +7 -4
  93. package/dist/agent-operations/create-stair.js +2 -2
  94. package/dist/agent-operations/design-brief.d.ts +13 -7
  95. package/dist/agent-operations/design-brief.d.ts.map +1 -1
  96. package/dist/agent-operations/design-brief.js +172 -92
  97. package/dist/agent-operations/door-clearance.d.ts +68 -8
  98. package/dist/agent-operations/door-clearance.d.ts.map +1 -1
  99. package/dist/agent-operations/door-clearance.js +127 -20
  100. package/dist/agent-operations/dress-targets.d.ts +23 -0
  101. package/dist/agent-operations/dress-targets.d.ts.map +1 -0
  102. package/dist/agent-operations/dress-targets.js +34 -0
  103. package/dist/agent-operations/duplicate-node.d.ts +14 -0
  104. package/dist/agent-operations/duplicate-node.d.ts.map +1 -0
  105. package/dist/agent-operations/duplicate-node.js +173 -0
  106. package/dist/agent-operations/find-by-type.d.ts.map +1 -1
  107. package/dist/agent-operations/find-by-type.js +3 -0
  108. package/dist/agent-operations/furnish-room.d.ts +2 -0
  109. package/dist/agent-operations/furnish-room.d.ts.map +1 -1
  110. package/dist/agent-operations/furnish-room.js +15 -4
  111. package/dist/agent-operations/furniture-kind.d.ts +28 -1
  112. package/dist/agent-operations/furniture-kind.d.ts.map +1 -1
  113. package/dist/agent-operations/furniture-kind.js +105 -6
  114. package/dist/agent-operations/ground-reader.d.ts +10 -0
  115. package/dist/agent-operations/ground-reader.d.ts.map +1 -0
  116. package/dist/agent-operations/ground-reader.js +25 -0
  117. package/dist/agent-operations/index.d.ts +118 -12
  118. package/dist/agent-operations/index.d.ts.map +1 -1
  119. package/dist/agent-operations/index.js +26 -1
  120. package/dist/agent-operations/item-solids.d.ts +39 -0
  121. package/dist/agent-operations/item-solids.d.ts.map +1 -0
  122. package/dist/agent-operations/item-solids.js +128 -0
  123. package/dist/agent-operations/layout-clearance.d.ts +91 -11
  124. package/dist/agent-operations/layout-clearance.d.ts.map +1 -1
  125. package/dist/agent-operations/layout-clearance.js +280 -73
  126. package/dist/agent-operations/level-height-fill.d.ts.map +1 -1
  127. package/dist/agent-operations/level-height-fill.js +7 -1
  128. package/dist/agent-operations/level-reads.d.ts +5 -0
  129. package/dist/agent-operations/level-reads.d.ts.map +1 -1
  130. package/dist/agent-operations/level-reads.js +39 -3
  131. package/dist/agent-operations/list-levels.d.ts.map +1 -1
  132. package/dist/agent-operations/list-levels.js +2 -4
  133. package/dist/agent-operations/move-node.d.ts +12 -0
  134. package/dist/agent-operations/move-node.d.ts.map +1 -0
  135. package/dist/agent-operations/move-node.js +28 -0
  136. package/dist/agent-operations/move-plan.d.ts +28 -0
  137. package/dist/agent-operations/move-plan.d.ts.map +1 -0
  138. package/dist/agent-operations/move-plan.js +259 -0
  139. package/dist/agent-operations/node-patch.d.ts.map +1 -1
  140. package/dist/agent-operations/node-patch.js +15 -0
  141. package/dist/agent-operations/paint.d.ts +3 -1
  142. package/dist/agent-operations/paint.d.ts.map +1 -1
  143. package/dist/agent-operations/paint.js +14 -1
  144. package/dist/agent-operations/photo-elevation.d.ts.map +1 -1
  145. package/dist/agent-operations/photo-elevation.js +2 -1
  146. package/dist/agent-operations/place-in-room.d.ts.map +1 -1
  147. package/dist/agent-operations/place-in-room.js +1 -0
  148. package/dist/agent-operations/place-items.d.ts.map +1 -1
  149. package/dist/agent-operations/place-items.js +3 -4
  150. package/dist/agent-operations/plan-clearance.d.ts +28 -0
  151. package/dist/agent-operations/plan-clearance.d.ts.map +1 -0
  152. package/dist/agent-operations/plan-clearance.js +47 -0
  153. package/dist/agent-operations/plan-geometry.d.ts +2 -0
  154. package/dist/agent-operations/plan-geometry.d.ts.map +1 -1
  155. package/dist/agent-operations/plan-geometry.js +10 -0
  156. package/dist/agent-operations/project-files.d.ts +10 -0
  157. package/dist/agent-operations/project-files.d.ts.map +1 -1
  158. package/dist/agent-operations/reachability.d.ts +41 -0
  159. package/dist/agent-operations/reachability.d.ts.map +1 -0
  160. package/dist/agent-operations/reachability.js +199 -0
  161. package/dist/agent-operations/room-checks.d.ts +60 -0
  162. package/dist/agent-operations/room-checks.d.ts.map +1 -0
  163. package/dist/agent-operations/room-checks.js +226 -0
  164. package/dist/agent-operations/room-faces.d.ts +30 -0
  165. package/dist/agent-operations/room-faces.d.ts.map +1 -0
  166. package/dist/agent-operations/room-faces.js +31 -0
  167. package/dist/agent-operations/room-findings.d.ts +5 -2
  168. package/dist/agent-operations/room-findings.d.ts.map +1 -1
  169. package/dist/agent-operations/room-findings.js +30 -0
  170. package/dist/agent-operations/room-finishes.d.ts +87 -0
  171. package/dist/agent-operations/room-finishes.d.ts.map +1 -0
  172. package/dist/agent-operations/room-finishes.js +193 -0
  173. package/dist/agent-operations/room-floor-script.d.ts +3 -3
  174. package/dist/agent-operations/room-floor-script.js +3 -3
  175. package/dist/agent-operations/room-readings.d.ts +90 -0
  176. package/dist/agent-operations/room-readings.d.ts.map +1 -0
  177. package/dist/agent-operations/room-readings.js +369 -0
  178. package/dist/agent-operations/room-tile.d.ts +15 -0
  179. package/dist/agent-operations/room-tile.d.ts.map +1 -0
  180. package/dist/agent-operations/room-tile.js +30 -0
  181. package/dist/agent-operations/room-wet.d.ts +55 -0
  182. package/dist/agent-operations/room-wet.d.ts.map +1 -0
  183. package/dist/agent-operations/room-wet.js +203 -0
  184. package/dist/agent-operations/scene-check-policy.d.ts +5 -0
  185. package/dist/agent-operations/scene-check-policy.d.ts.map +1 -0
  186. package/dist/agent-operations/scene-check-policy.js +24 -0
  187. package/dist/agent-operations/scene-checkpoint.d.ts +10 -0
  188. package/dist/agent-operations/scene-checkpoint.d.ts.map +1 -1
  189. package/dist/agent-operations/scene-checkpoint.js +31 -0
  190. package/dist/agent-operations/scene-issue-groups.d.ts +17 -0
  191. package/dist/agent-operations/scene-issue-groups.d.ts.map +1 -0
  192. package/dist/agent-operations/scene-issue-groups.js +71 -0
  193. package/dist/agent-operations/scene-materials.d.ts +23 -0
  194. package/dist/agent-operations/scene-materials.d.ts.map +1 -1
  195. package/dist/agent-operations/scene-materials.js +41 -0
  196. package/dist/agent-operations/scene-queries.d.ts +2525 -1723
  197. package/dist/agent-operations/scene-queries.d.ts.map +1 -1
  198. package/dist/agent-operations/scene-queries.js +3 -3
  199. package/dist/agent-operations/scene-review.d.ts.map +1 -1
  200. package/dist/agent-operations/scene-review.js +3 -2
  201. package/dist/agent-operations/scene-view.d.ts.map +1 -1
  202. package/dist/agent-operations/scene-view.js +91 -21
  203. package/dist/agent-operations/search-assets.d.ts +10 -6
  204. package/dist/agent-operations/search-assets.d.ts.map +1 -1
  205. package/dist/agent-operations/search-assets.js +37 -22
  206. package/dist/agent-operations/set-checkpoint.d.ts.map +1 -1
  207. package/dist/agent-operations/set-checkpoint.js +1 -0
  208. package/dist/agent-operations/set-ground-level.d.ts +1 -1
  209. package/dist/agent-operations/set-ground-level.d.ts.map +1 -1
  210. package/dist/agent-operations/set-ground-level.js +3 -14
  211. package/dist/agent-operations/site.js +3 -2
  212. package/dist/agent-operations/slab-surface-script.d.ts +25 -0
  213. package/dist/agent-operations/slab-surface-script.d.ts.map +1 -0
  214. package/dist/agent-operations/slab-surface-script.js +60 -0
  215. package/dist/agent-operations/stair-plan-footprint.d.ts +9 -0
  216. package/dist/agent-operations/stair-plan-footprint.d.ts.map +1 -0
  217. package/dist/agent-operations/stair-plan-footprint.js +50 -0
  218. package/dist/agent-operations/types.d.ts +10 -5
  219. package/dist/agent-operations/types.d.ts.map +1 -1
  220. package/dist/agent-operations/units.d.ts +26 -0
  221. package/dist/agent-operations/units.d.ts.map +1 -0
  222. package/dist/agent-operations/units.js +110 -0
  223. package/dist/agent-operations/unreachable-rooms-check.d.ts +17 -0
  224. package/dist/agent-operations/unreachable-rooms-check.d.ts.map +1 -0
  225. package/dist/agent-operations/unreachable-rooms-check.js +35 -0
  226. package/dist/agent-operations/usage-checks.d.ts +2 -0
  227. package/dist/agent-operations/usage-checks.d.ts.map +1 -0
  228. package/dist/agent-operations/usage-checks.js +12 -0
  229. package/dist/agent-operations/verify-scene.d.ts +8 -11
  230. package/dist/agent-operations/verify-scene.d.ts.map +1 -1
  231. package/dist/agent-operations/verify-scene.js +59 -13
  232. package/dist/agent-operations/wall-face-defaults.d.ts +44 -0
  233. package/dist/agent-operations/wall-face-defaults.d.ts.map +1 -0
  234. package/dist/agent-operations/wall-face-defaults.js +229 -0
  235. package/dist/agent-operations/wall-joins.d.ts +119 -0
  236. package/dist/agent-operations/wall-joins.d.ts.map +1 -0
  237. package/dist/agent-operations/wall-joins.js +308 -0
  238. package/dist/agent-operations/wall-object-observations.d.ts.map +1 -1
  239. package/dist/agent-operations/wall-object-observations.js +5 -7
  240. package/dist/agent-operations/wall-skirting.d.ts.map +1 -1
  241. package/dist/agent-operations/wall-skirting.js +2 -0
  242. package/dist/agent-operations/wall-type.d.ts +49 -0
  243. package/dist/agent-operations/wall-type.d.ts.map +1 -0
  244. package/dist/agent-operations/wall-type.js +31 -0
  245. package/dist/agent-operations/zone-coverage.d.ts +85 -0
  246. package/dist/agent-operations/zone-coverage.d.ts.map +1 -0
  247. package/dist/agent-operations/zone-coverage.js +208 -0
  248. package/dist/agent-tools/add-object.d.ts +31 -0
  249. package/dist/agent-tools/add-object.d.ts.map +1 -1
  250. package/dist/agent-tools/add-object.js +44 -7
  251. package/dist/agent-tools/assets.d.ts +4 -0
  252. package/dist/agent-tools/assets.d.ts.map +1 -1
  253. package/dist/agent-tools/assets.js +11 -1
  254. package/dist/agent-tools/author-scene.d.ts +810 -15
  255. package/dist/agent-tools/author-scene.d.ts.map +1 -1
  256. package/dist/agent-tools/author-scene.js +275 -34
  257. package/dist/agent-tools/batch.d.ts +1 -1
  258. package/dist/agent-tools/batch.d.ts.map +1 -1
  259. package/dist/agent-tools/batch.js +5 -1
  260. package/dist/agent-tools/checkpoints.js +1 -1
  261. package/dist/agent-tools/columns.d.ts +14 -0
  262. package/dist/agent-tools/columns.d.ts.map +1 -1
  263. package/dist/agent-tools/columns.js +14 -2
  264. package/dist/agent-tools/contract.d.ts +10 -0
  265. package/dist/agent-tools/contract.d.ts.map +1 -1
  266. package/dist/agent-tools/contract.js +5 -1
  267. package/dist/agent-tools/corner-window.d.ts +1 -0
  268. package/dist/agent-tools/corner-window.d.ts.map +1 -1
  269. package/dist/agent-tools/corner-window.js +1 -1
  270. package/dist/agent-tools/create-room.d.ts +85 -0
  271. package/dist/agent-tools/create-room.d.ts.map +1 -1
  272. package/dist/agent-tools/create-room.js +8 -1
  273. package/dist/agent-tools/design-brief.d.ts +513 -7
  274. package/dist/agent-tools/design-brief.d.ts.map +1 -1
  275. package/dist/agent-tools/design-brief.js +192 -14
  276. package/dist/agent-tools/designs.js +1 -1
  277. package/dist/agent-tools/find-by-type.js +1 -1
  278. package/dist/agent-tools/index.d.ts +658 -10
  279. package/dist/agent-tools/index.d.ts.map +1 -1
  280. package/dist/agent-tools/index.js +9 -1
  281. package/dist/agent-tools/levels.js +4 -4
  282. package/dist/agent-tools/move-duplicate.d.ts +65 -0
  283. package/dist/agent-tools/move-duplicate.d.ts.map +1 -0
  284. package/dist/agent-tools/move-duplicate.js +68 -0
  285. package/dist/agent-tools/paint.d.ts +6 -0
  286. package/dist/agent-tools/paint.d.ts.map +1 -1
  287. package/dist/agent-tools/paint.js +7 -3
  288. package/dist/agent-tools/photo-elevation.js +1 -1
  289. package/dist/agent-tools/project-files.d.ts +2 -2
  290. package/dist/agent-tools/project-files.d.ts.map +1 -1
  291. package/dist/agent-tools/project-files.js +1 -1
  292. package/dist/agent-tools/refusal.d.ts +9 -1
  293. package/dist/agent-tools/refusal.d.ts.map +1 -1
  294. package/dist/agent-tools/refusal.js +5 -1
  295. package/dist/agent-tools/roofs.js +1 -1
  296. package/dist/agent-tools/room-structure.d.ts +60 -0
  297. package/dist/agent-tools/room-structure.d.ts.map +1 -1
  298. package/dist/agent-tools/room-structure.js +20 -1
  299. package/dist/agent-tools/search-materials.d.ts +1 -0
  300. package/dist/agent-tools/search-materials.d.ts.map +1 -1
  301. package/dist/agent-tools/site.js +1 -1
  302. package/dist/agent-tools/stairs.js +1 -1
  303. package/dist/agent-tools/units.d.ts +84 -0
  304. package/dist/agent-tools/units.d.ts.map +1 -0
  305. package/dist/agent-tools/units.js +54 -0
  306. package/dist/agent-tools/verify-scene-usage.d.ts +44 -0
  307. package/dist/agent-tools/verify-scene-usage.d.ts.map +1 -0
  308. package/dist/agent-tools/verify-scene-usage.js +146 -0
  309. package/dist/agent-tools/verify-scene.d.ts +12 -1
  310. package/dist/agent-tools/verify-scene.d.ts.map +1 -1
  311. package/dist/agent-tools/verify-scene.js +183 -3
  312. package/dist/agent-tools/view-scene.d.ts +3 -0
  313. package/dist/agent-tools/view-scene.d.ts.map +1 -1
  314. package/dist/agent-tools/view-scene.js +4 -1
  315. package/dist/agent-tools/wall-openings.d.ts +121 -2
  316. package/dist/agent-tools/wall-openings.d.ts.map +1 -1
  317. package/dist/agent-tools/wall-openings.js +123 -18
  318. package/dist/agent-tools/walls.d.ts +30 -0
  319. package/dist/agent-tools/walls.d.ts.map +1 -1
  320. package/dist/agent-tools/walls.js +54 -2
  321. package/dist/building/__fixtures__/wall-opening-cases.d.ts +181 -35
  322. package/dist/building/__fixtures__/wall-opening-cases.d.ts.map +1 -1
  323. package/dist/building/__fixtures__/wall-opening-cases.js +13 -0
  324. package/dist/building/code-profile.d.ts +231 -0
  325. package/dist/building/code-profile.d.ts.map +1 -0
  326. package/dist/building/code-profile.js +208 -0
  327. package/dist/building/corner-window.d.ts +2 -2
  328. package/dist/building/corner-window.d.ts.map +1 -1
  329. package/dist/building/corner-window.js +11 -2
  330. package/dist/building/door-types.d.ts +1 -0
  331. package/dist/building/door-types.d.ts.map +1 -1
  332. package/dist/building/door-types.js +2 -0
  333. package/dist/building/floor-item-fit.d.ts.map +1 -1
  334. package/dist/building/floor-item-fit.js +2 -4
  335. package/dist/building/ground-level.d.ts +1 -3
  336. package/dist/building/ground-level.d.ts.map +1 -1
  337. package/dist/building/ground-level.js +3 -5
  338. package/dist/building/index.d.ts +2 -0
  339. package/dist/building/index.d.ts.map +1 -1
  340. package/dist/building/index.js +2 -0
  341. package/dist/building/level-duplication.d.ts +4667 -3065
  342. package/dist/building/level-duplication.d.ts.map +1 -1
  343. package/dist/building/level-insertion.d.ts +1 -1
  344. package/dist/building/level-wall-copy.d.ts +24 -0
  345. package/dist/building/level-wall-copy.d.ts.map +1 -0
  346. package/dist/building/level-wall-copy.js +53 -0
  347. package/dist/building/merge-windows.d.ts.map +1 -1
  348. package/dist/building/merge-windows.js +5 -3
  349. package/dist/building/opening-style-presets.d.ts +2 -0
  350. package/dist/building/opening-style-presets.d.ts.map +1 -1
  351. package/dist/building/opening-style-presets.js +26 -5
  352. package/dist/building/room-use.d.ts +26 -0
  353. package/dist/building/room-use.d.ts.map +1 -0
  354. package/dist/building/room-use.js +102 -0
  355. package/dist/building/wall-openings.d.ts +134 -12
  356. package/dist/building/wall-openings.d.ts.map +1 -1
  357. package/dist/building/wall-openings.js +182 -41
  358. package/dist/building/window-types.d.ts +1 -0
  359. package/dist/building/window-types.d.ts.map +1 -1
  360. package/dist/building/window-types.js +3 -0
  361. package/dist/coherence/__fixtures__/enclosure-scenes.d.ts +84 -0
  362. package/dist/coherence/__fixtures__/enclosure-scenes.d.ts.map +1 -0
  363. package/dist/coherence/__fixtures__/enclosure-scenes.js +44 -0
  364. package/dist/commands/structure/attached-walls.d.ts +16 -0
  365. package/dist/commands/structure/attached-walls.d.ts.map +1 -0
  366. package/dist/commands/structure/attached-walls.js +53 -0
  367. package/dist/commands/structure/index.d.ts +3 -0
  368. package/dist/commands/structure/index.d.ts.map +1 -1
  369. package/dist/commands/structure/index.js +3 -0
  370. package/dist/commands/structure/move-separators.d.ts +62 -0
  371. package/dist/commands/structure/move-separators.d.ts.map +1 -0
  372. package/dist/commands/structure/move-separators.js +346 -0
  373. package/dist/commands/structure/set-floor-foundation.d.ts +5 -0
  374. package/dist/commands/structure/set-floor-foundation.d.ts.map +1 -1
  375. package/dist/commands/structure/set-wall-geometry.d.ts.map +1 -1
  376. package/dist/commands/structure/set-wall-geometry.js +44 -11
  377. package/dist/commands/structure/set-zone-intent.d.ts +26 -0
  378. package/dist/commands/structure/set-zone-intent.d.ts.map +1 -1
  379. package/dist/commands/structure/set-zone-intent.js +107 -2
  380. package/dist/commands/structure/shared.d.ts +889 -88
  381. package/dist/commands/structure/shared.d.ts.map +1 -1
  382. package/dist/commands/structure/wall-overlap.d.ts +45 -0
  383. package/dist/commands/structure/wall-overlap.d.ts.map +1 -0
  384. package/dist/commands/structure/wall-overlap.js +289 -0
  385. package/dist/commands/structure/zone-wall-merge.d.ts +2897 -1938
  386. package/dist/commands/structure/zone-wall-merge.d.ts.map +1 -1
  387. package/dist/contracts/reference-discovery.d.ts +2 -2
  388. package/dist/contracts/reference-discovery.d.ts.map +1 -1
  389. package/dist/contracts/reference-discovery.js +5 -3
  390. package/dist/contracts/reference-inventory.d.ts.map +1 -1
  391. package/dist/contracts/reference-inventory.js +75 -25
  392. package/dist/events/bus.d.ts +15 -2
  393. package/dist/events/bus.d.ts.map +1 -1
  394. package/dist/hooks/spatial-grid/built-in-floor-placed.d.ts +40 -0
  395. package/dist/hooks/spatial-grid/built-in-floor-placed.d.ts.map +1 -0
  396. package/dist/hooks/spatial-grid/built-in-floor-placed.js +220 -0
  397. package/dist/hooks/spatial-grid/floor-placed-elevation.d.ts.map +1 -1
  398. package/dist/hooks/spatial-grid/floor-placed-elevation.js +13 -7
  399. package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts +62 -2
  400. package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts.map +1 -1
  401. package/dist/hooks/spatial-grid/spatial-grid-manager.js +207 -36
  402. package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts +2915 -2114
  403. package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts.map +1 -1
  404. package/dist/hooks/spatial-grid/spatial-grid-sync.js +32 -5
  405. package/dist/hooks/spatial-grid/support-host-patch.js +10 -10
  406. package/dist/i18n/format.d.ts +41 -0
  407. package/dist/i18n/format.d.ts.map +1 -0
  408. package/dist/i18n/format.js +124 -0
  409. package/dist/i18n/index.d.ts +5 -0
  410. package/dist/i18n/index.d.ts.map +1 -0
  411. package/dist/i18n/index.js +3 -0
  412. package/dist/i18n/registry.d.ts +78 -0
  413. package/dist/i18n/registry.d.ts.map +1 -0
  414. package/dist/i18n/registry.js +252 -0
  415. package/dist/i18n/use-translate.d.ts +16 -0
  416. package/dist/i18n/use-translate.d.ts.map +1 -0
  417. package/dist/i18n/use-translate.js +23 -0
  418. package/dist/index.d.ts +43 -20
  419. package/dist/index.d.ts.map +1 -1
  420. package/dist/index.js +42 -19
  421. package/dist/lib/__fixtures__/mezzanine.d.ts +10900 -8225
  422. package/dist/lib/__fixtures__/mezzanine.d.ts.map +1 -1
  423. package/dist/lib/absorb-wall-separators.d.ts +1629 -828
  424. package/dist/lib/absorb-wall-separators.d.ts.map +1 -1
  425. package/dist/lib/beam.d.ts +137 -0
  426. package/dist/lib/beam.d.ts.map +1 -0
  427. package/dist/lib/beam.js +297 -0
  428. package/dist/lib/below-grade-footprints.d.ts +13 -5
  429. package/dist/lib/below-grade-footprints.d.ts.map +1 -1
  430. package/dist/lib/below-grade-footprints.js +53 -10
  431. package/dist/lib/build-mode.d.ts +11 -0
  432. package/dist/lib/build-mode.d.ts.map +1 -0
  433. package/dist/lib/build-mode.js +24 -0
  434. package/dist/lib/build-up.d.ts +89 -0
  435. package/dist/lib/build-up.d.ts.map +1 -0
  436. package/dist/lib/build-up.js +216 -0
  437. package/dist/lib/corner-pair.d.ts +207 -4
  438. package/dist/lib/corner-pair.d.ts.map +1 -1
  439. package/dist/lib/deck-boards.d.ts +80 -0
  440. package/dist/lib/deck-boards.d.ts.map +1 -0
  441. package/dist/lib/deck-boards.js +184 -0
  442. package/dist/lib/deck-framing.d.ts +150 -0
  443. package/dist/lib/deck-framing.d.ts.map +1 -0
  444. package/dist/lib/deck-framing.js +515 -0
  445. package/dist/lib/deepest-drawn.d.ts +3 -6
  446. package/dist/lib/deepest-drawn.d.ts.map +1 -1
  447. package/dist/lib/deepest-drawn.js +4 -8
  448. package/dist/lib/door-interaction.d.ts +14 -0
  449. package/dist/lib/door-interaction.d.ts.map +1 -0
  450. package/dist/lib/door-interaction.js +62 -0
  451. package/dist/lib/door-opening.d.ts +19 -0
  452. package/dist/lib/door-opening.d.ts.map +1 -0
  453. package/dist/lib/door-opening.js +27 -0
  454. package/dist/lib/door-operation.d.ts +2 -0
  455. package/dist/lib/door-operation.d.ts.map +1 -1
  456. package/dist/lib/door-operation.js +4 -0
  457. package/dist/lib/elevator-support.d.ts +15 -0
  458. package/dist/lib/elevator-support.d.ts.map +1 -0
  459. package/dist/lib/elevator-support.js +40 -0
  460. package/dist/lib/exterior-wall-loops.d.ts.map +1 -1
  461. package/dist/lib/exterior-wall-loops.js +2 -1
  462. package/dist/lib/finish-script.d.ts +5 -5
  463. package/dist/lib/finish-script.d.ts.map +1 -1
  464. package/dist/lib/finish-script.js +12 -5
  465. package/dist/lib/floor-footprint-name.d.ts +17 -0
  466. package/dist/lib/floor-footprint-name.d.ts.map +1 -1
  467. package/dist/lib/floor-footprint-name.js +17 -4
  468. package/dist/lib/floor-intent-changes.d.ts.map +1 -1
  469. package/dist/lib/floor-intent-changes.js +66 -39
  470. package/dist/lib/floor-opening-footprints.d.ts +1 -1
  471. package/dist/lib/floor-opening-footprints.d.ts.map +1 -1
  472. package/dist/lib/floor-opening-footprints.js +10 -4
  473. package/dist/lib/floor-plate-paint.d.ts +2 -0
  474. package/dist/lib/floor-plate-paint.d.ts.map +1 -1
  475. package/dist/lib/floor-plate-paint.js +12 -0
  476. package/dist/lib/floor-plates.d.ts +250 -0
  477. package/dist/lib/floor-plates.d.ts.map +1 -1
  478. package/dist/lib/floor-plates.js +43 -4
  479. package/dist/lib/floor-script.d.ts +35 -6
  480. package/dist/lib/floor-script.d.ts.map +1 -1
  481. package/dist/lib/floor-script.js +96 -16
  482. package/dist/lib/foundation-construction.d.ts +4 -13
  483. package/dist/lib/foundation-construction.d.ts.map +1 -1
  484. package/dist/lib/foundation-construction.js +4 -14
  485. package/dist/lib/foundation-standard.d.ts +2 -3
  486. package/dist/lib/foundation-standard.d.ts.map +1 -1
  487. package/dist/lib/foundation-standard.js +2 -3
  488. package/dist/lib/foundation-wall.d.ts +1 -2
  489. package/dist/lib/foundation-wall.d.ts.map +1 -1
  490. package/dist/lib/foundation-wall.js +1 -2
  491. package/dist/lib/framing-post.d.ts +91 -0
  492. package/dist/lib/framing-post.d.ts.map +1 -0
  493. package/dist/lib/framing-post.js +174 -0
  494. package/dist/lib/geometry-script-node.d.ts +11 -0
  495. package/dist/lib/geometry-script-node.d.ts.map +1 -1
  496. package/dist/lib/geometry-script-node.js +35 -0
  497. package/dist/lib/grade-standing.d.ts +16 -2
  498. package/dist/lib/grade-standing.d.ts.map +1 -1
  499. package/dist/lib/grade-standing.js +129 -9
  500. package/dist/lib/ground-seat.d.ts +2 -22
  501. package/dist/lib/ground-seat.d.ts.map +1 -1
  502. package/dist/lib/ground-seat.js +2 -17
  503. package/dist/lib/ground-window.d.ts +2 -1
  504. package/dist/lib/ground-window.d.ts.map +1 -1
  505. package/dist/lib/ground-window.js +5 -2
  506. package/dist/lib/hierarchy.d.ts +19 -0
  507. package/dist/lib/hierarchy.d.ts.map +1 -0
  508. package/dist/lib/hierarchy.js +53 -0
  509. package/dist/lib/level-footprints.d.ts +2 -0
  510. package/dist/lib/level-footprints.d.ts.map +1 -1
  511. package/dist/lib/level-footprints.js +7 -0
  512. package/dist/lib/opening-casing.d.ts +67 -0
  513. package/dist/lib/opening-casing.d.ts.map +1 -0
  514. package/dist/lib/opening-casing.js +131 -0
  515. package/dist/lib/opening-exterior-face.d.ts +6 -0
  516. package/dist/lib/opening-exterior-face.d.ts.map +1 -0
  517. package/dist/lib/opening-exterior-face.js +15 -0
  518. package/dist/lib/opening-floor-datum.d.ts +11 -5
  519. package/dist/lib/opening-floor-datum.d.ts.map +1 -1
  520. package/dist/lib/opening-floor-datum.js +40 -8
  521. package/dist/lib/opening-frame-depth.d.ts +18 -0
  522. package/dist/lib/opening-frame-depth.d.ts.map +1 -0
  523. package/dist/lib/opening-frame-depth.js +22 -0
  524. package/dist/lib/outdoor-room.d.ts +32 -0
  525. package/dist/lib/outdoor-room.d.ts.map +1 -0
  526. package/dist/lib/outdoor-room.js +66 -0
  527. package/dist/lib/own-floor-intent.d.ts.map +1 -1
  528. package/dist/lib/own-floor-intent.js +2 -2
  529. package/dist/lib/plate-surface.d.ts +8 -0
  530. package/dist/lib/plate-surface.d.ts.map +1 -1
  531. package/dist/lib/plate-surface.js +53 -3
  532. package/dist/lib/polygon-boolean.d.ts.map +1 -1
  533. package/dist/lib/polygon-boolean.js +2 -1
  534. package/dist/lib/porch-framing-sync.d.ts +46 -0
  535. package/dist/lib/porch-framing-sync.d.ts.map +1 -0
  536. package/dist/lib/porch-framing-sync.js +206 -0
  537. package/dist/lib/porch-framing.d.ts +44 -0
  538. package/dist/lib/porch-framing.d.ts.map +1 -0
  539. package/dist/lib/porch-framing.js +159 -0
  540. package/dist/lib/railing-rooms.d.ts +13 -0
  541. package/dist/lib/railing-rooms.d.ts.map +1 -0
  542. package/dist/lib/railing-rooms.js +37 -0
  543. package/dist/lib/roof-eave.d.ts +135 -0
  544. package/dist/lib/roof-eave.d.ts.map +1 -0
  545. package/dist/lib/roof-eave.js +186 -0
  546. package/dist/lib/room-floor-elevation.d.ts +12 -0
  547. package/dist/lib/room-floor-elevation.d.ts.map +1 -0
  548. package/dist/lib/room-floor-elevation.js +41 -0
  549. package/dist/lib/room-floor-feasibility.d.ts.map +1 -1
  550. package/dist/lib/room-floor-feasibility.js +1 -1
  551. package/dist/lib/room-floor-plate.d.ts +3 -1
  552. package/dist/lib/room-floor-plate.d.ts.map +1 -1
  553. package/dist/lib/room-floor-plate.js +7 -0
  554. package/dist/lib/space-detection.d.ts +13 -0
  555. package/dist/lib/space-detection.d.ts.map +1 -1
  556. package/dist/lib/space-detection.js +113 -24
  557. package/dist/lib/structure-kernel.d.ts +22 -9
  558. package/dist/lib/structure-kernel.d.ts.map +1 -1
  559. package/dist/lib/structure-kernel.js +146 -28
  560. package/dist/lib/structure-reconcile.d.ts +1 -1
  561. package/dist/lib/structure-reconcile.d.ts.map +1 -1
  562. package/dist/lib/structure-reconcile.js +7 -4
  563. package/dist/lib/surface-intent.d.ts +10 -0
  564. package/dist/lib/surface-intent.d.ts.map +1 -0
  565. package/dist/lib/surface-intent.js +18 -0
  566. package/dist/lib/terrain-source.d.ts.map +1 -1
  567. package/dist/lib/terrain-source.js +2 -1
  568. package/dist/lib/wall-face-script.d.ts.map +1 -1
  569. package/dist/lib/wall-face-script.js +8 -5
  570. package/dist/lib/window-interaction.d.ts +16 -0
  571. package/dist/lib/window-interaction.d.ts.map +1 -0
  572. package/dist/lib/window-interaction.js +82 -0
  573. package/dist/lib/zone-quantities.js +1 -1
  574. package/dist/material-kinds.d.ts +1 -1
  575. package/dist/material-kinds.d.ts.map +1 -1
  576. package/dist/material-kinds.js +1 -0
  577. package/dist/material-library.d.ts +15 -0
  578. package/dist/material-library.d.ts.map +1 -1
  579. package/dist/material-library.js +458 -59
  580. package/dist/node-slots/column.d.ts +5 -0
  581. package/dist/node-slots/column.d.ts.map +1 -1
  582. package/dist/node-slots/column.js +10 -0
  583. package/dist/node-slots/door.d.ts +3 -4
  584. package/dist/node-slots/door.d.ts.map +1 -1
  585. package/dist/node-slots/door.js +4 -3
  586. package/dist/node-slots/wall.d.ts.map +1 -1
  587. package/dist/node-slots/wall.js +21 -3
  588. package/dist/node-slots/window.d.ts +2 -2
  589. package/dist/node-slots/window.d.ts.map +1 -1
  590. package/dist/node-slots/window.js +6 -1
  591. package/dist/procedural-items/design.d.ts +8 -0
  592. package/dist/procedural-items/design.d.ts.map +1 -1
  593. package/dist/procedural-items/design.js +169 -21
  594. package/dist/procedural-items/motion-controller.d.ts +2 -0
  595. package/dist/procedural-items/motion-controller.d.ts.map +1 -1
  596. package/dist/procedural-items/motion-controller.js +2 -1
  597. package/dist/registry/index.d.ts +3 -3
  598. package/dist/registry/index.d.ts.map +1 -1
  599. package/dist/registry/index.js +2 -2
  600. package/dist/registry/mechanism.d.ts +4 -1
  601. package/dist/registry/mechanism.d.ts.map +1 -1
  602. package/dist/registry/mechanism.js +10 -0
  603. package/dist/registry/registry.d.ts +5 -0
  604. package/dist/registry/registry.d.ts.map +1 -1
  605. package/dist/registry/registry.js +10 -0
  606. package/dist/registry/types.d.ts +89 -23
  607. package/dist/registry/types.d.ts.map +1 -1
  608. package/dist/runtime/__fixtures__/live-scene.d.ts +14 -0
  609. package/dist/runtime/__fixtures__/live-scene.d.ts.map +1 -0
  610. package/dist/runtime/__fixtures__/live-scene.js +64 -0
  611. package/dist/runtime/apply.d.ts +42 -0
  612. package/dist/runtime/apply.d.ts.map +1 -0
  613. package/dist/runtime/apply.js +274 -0
  614. package/dist/runtime/dependencies.d.ts +97 -0
  615. package/dist/runtime/dependencies.d.ts.map +1 -0
  616. package/dist/runtime/dependencies.js +42 -0
  617. package/dist/runtime/ids.d.ts +11 -0
  618. package/dist/runtime/ids.d.ts.map +1 -0
  619. package/dist/runtime/ids.js +80 -0
  620. package/dist/runtime/index.d.ts +14 -0
  621. package/dist/runtime/index.d.ts.map +1 -0
  622. package/dist/runtime/index.js +11 -0
  623. package/dist/runtime/node-queries.d.ts +16 -0
  624. package/dist/runtime/node-queries.d.ts.map +1 -0
  625. package/dist/runtime/node-queries.js +30 -0
  626. package/dist/runtime/patch.d.ts +26 -0
  627. package/dist/runtime/patch.d.ts.map +1 -0
  628. package/dist/runtime/patch.js +165 -0
  629. package/dist/runtime/reader.d.ts +104 -0
  630. package/dist/runtime/reader.d.ts.map +1 -0
  631. package/dist/runtime/reader.js +455 -0
  632. package/dist/runtime/scene-runtime.d.ts +112 -0
  633. package/dist/runtime/scene-runtime.d.ts.map +1 -0
  634. package/dist/runtime/scene-runtime.js +302 -0
  635. package/dist/schema/__fixtures__/node-fixtures.d.ts.map +1 -1
  636. package/dist/schema/__fixtures__/node-fixtures.js +1 -0
  637. package/dist/schema/assembly.d.ts +3 -0
  638. package/dist/schema/assembly.d.ts.map +1 -1
  639. package/dist/schema/assembly.js +13 -0
  640. package/dist/schema/asset-url.d.ts +37 -2
  641. package/dist/schema/asset-url.d.ts.map +1 -1
  642. package/dist/schema/asset-url.js +80 -11
  643. package/dist/schema/base.d.ts +8 -0
  644. package/dist/schema/base.d.ts.map +1 -1
  645. package/dist/schema/base.js +19 -1
  646. package/dist/schema/build-up.d.ts +247 -0
  647. package/dist/schema/build-up.d.ts.map +1 -0
  648. package/dist/schema/build-up.js +83 -0
  649. package/dist/schema/geometry-source.d.ts +80 -0
  650. package/dist/schema/geometry-source.d.ts.map +1 -1
  651. package/dist/schema/geometry-source.js +38 -0
  652. package/dist/schema/index.d.ts +12 -7
  653. package/dist/schema/index.d.ts.map +1 -1
  654. package/dist/schema/index.js +12 -6
  655. package/dist/schema/material.d.ts +5 -0
  656. package/dist/schema/material.d.ts.map +1 -1
  657. package/dist/schema/material.js +6 -0
  658. package/dist/schema/nodes/beam.d.ts +264 -0
  659. package/dist/schema/nodes/beam.d.ts.map +1 -0
  660. package/dist/schema/nodes/beam.js +139 -0
  661. package/dist/schema/nodes/box-vent.d.ts +5 -0
  662. package/dist/schema/nodes/box-vent.d.ts.map +1 -1
  663. package/dist/schema/nodes/cabinet.d.ts +10 -0
  664. package/dist/schema/nodes/cabinet.d.ts.map +1 -1
  665. package/dist/schema/nodes/ceiling.d.ts +48 -0
  666. package/dist/schema/nodes/ceiling.d.ts.map +1 -1
  667. package/dist/schema/nodes/ceiling.js +5 -0
  668. package/dist/schema/nodes/chimney.d.ts +10 -0
  669. package/dist/schema/nodes/chimney.d.ts.map +1 -1
  670. package/dist/schema/nodes/column.d.ts +42 -0
  671. package/dist/schema/nodes/column.d.ts.map +1 -1
  672. package/dist/schema/nodes/column.js +11 -1
  673. package/dist/schema/nodes/cupola.d.ts +5 -0
  674. package/dist/schema/nodes/cupola.d.ts.map +1 -1
  675. package/dist/schema/nodes/door.d.ts +54 -3
  676. package/dist/schema/nodes/door.d.ts.map +1 -1
  677. package/dist/schema/nodes/door.js +41 -7
  678. package/dist/schema/nodes/dormer.d.ts +20 -0
  679. package/dist/schema/nodes/dormer.d.ts.map +1 -1
  680. package/dist/schema/nodes/downspout.d.ts +5 -0
  681. package/dist/schema/nodes/downspout.d.ts.map +1 -1
  682. package/dist/schema/nodes/elevator.d.ts +5 -0
  683. package/dist/schema/nodes/elevator.d.ts.map +1 -1
  684. package/dist/schema/nodes/eyebrow-vent.d.ts +5 -0
  685. package/dist/schema/nodes/eyebrow-vent.d.ts.map +1 -1
  686. package/dist/schema/nodes/fence.d.ts +5 -0
  687. package/dist/schema/nodes/fence.d.ts.map +1 -1
  688. package/dist/schema/nodes/guide.d.ts +14 -0
  689. package/dist/schema/nodes/guide.d.ts.map +1 -1
  690. package/dist/schema/nodes/guide.js +2 -0
  691. package/dist/schema/nodes/gutter.d.ts +5 -0
  692. package/dist/schema/nodes/gutter.d.ts.map +1 -1
  693. package/dist/schema/nodes/item.d.ts +71 -0
  694. package/dist/schema/nodes/item.d.ts.map +1 -1
  695. package/dist/schema/nodes/item.js +5 -1
  696. package/dist/schema/nodes/level.d.ts +1 -1
  697. package/dist/schema/nodes/level.d.ts.map +1 -1
  698. package/dist/schema/nodes/opening-types.d.ts +13 -0
  699. package/dist/schema/nodes/opening-types.d.ts.map +1 -1
  700. package/dist/schema/nodes/opening-types.js +8 -1
  701. package/dist/schema/nodes/railing-wall.d.ts +112 -0
  702. package/dist/schema/nodes/railing-wall.d.ts.map +1 -0
  703. package/dist/schema/nodes/railing-wall.js +160 -0
  704. package/dist/schema/nodes/ridge-vent.d.ts +5 -0
  705. package/dist/schema/nodes/ridge-vent.d.ts.map +1 -1
  706. package/dist/schema/nodes/roof-segment-resize.d.ts.map +1 -1
  707. package/dist/schema/nodes/roof-segment-resize.js +2 -2
  708. package/dist/schema/nodes/roof-segment.d.ts +226 -1
  709. package/dist/schema/nodes/roof-segment.d.ts.map +1 -1
  710. package/dist/schema/nodes/roof-segment.js +97 -12
  711. package/dist/schema/nodes/roof-types.d.ts +11 -0
  712. package/dist/schema/nodes/roof-types.d.ts.map +1 -1
  713. package/dist/schema/nodes/roof-types.js +6 -0
  714. package/dist/schema/nodes/roof.d.ts +60 -0
  715. package/dist/schema/nodes/roof.d.ts.map +1 -1
  716. package/dist/schema/nodes/roof.js +4 -0
  717. package/dist/schema/nodes/shelf.d.ts +5 -0
  718. package/dist/schema/nodes/shelf.d.ts.map +1 -1
  719. package/dist/schema/nodes/site.d.ts +80 -0
  720. package/dist/schema/nodes/site.d.ts.map +1 -1
  721. package/dist/schema/nodes/site.js +7 -0
  722. package/dist/schema/nodes/skylight.d.ts +10 -0
  723. package/dist/schema/nodes/skylight.d.ts.map +1 -1
  724. package/dist/schema/nodes/slab.d.ts +137 -0
  725. package/dist/schema/nodes/slab.d.ts.map +1 -1
  726. package/dist/schema/nodes/slab.js +3 -0
  727. package/dist/schema/nodes/solar-panel.d.ts +10 -0
  728. package/dist/schema/nodes/solar-panel.d.ts.map +1 -1
  729. package/dist/schema/nodes/stair-segment.d.ts +5 -0
  730. package/dist/schema/nodes/stair-segment.d.ts.map +1 -1
  731. package/dist/schema/nodes/stair-structure.d.ts +69 -0
  732. package/dist/schema/nodes/stair-structure.d.ts.map +1 -0
  733. package/dist/schema/nodes/stair-structure.js +39 -0
  734. package/dist/schema/nodes/stair.d.ts +46 -0
  735. package/dist/schema/nodes/stair.d.ts.map +1 -1
  736. package/dist/schema/nodes/stair.js +3 -0
  737. package/dist/schema/nodes/turbine-vent.d.ts +5 -0
  738. package/dist/schema/nodes/turbine-vent.d.ts.map +1 -1
  739. package/dist/schema/nodes/wall.d.ts +136 -2
  740. package/dist/schema/nodes/wall.d.ts.map +1 -1
  741. package/dist/schema/nodes/wall.js +48 -6
  742. package/dist/schema/nodes/window.d.ts +66 -1
  743. package/dist/schema/nodes/window.d.ts.map +1 -1
  744. package/dist/schema/nodes/window.js +50 -5
  745. package/dist/schema/nodes/zone.d.ts +68 -0
  746. package/dist/schema/nodes/zone.d.ts.map +1 -1
  747. package/dist/schema/nodes/zone.js +32 -0
  748. package/dist/schema/scene-material.d.ts +5 -0
  749. package/dist/schema/scene-material.d.ts.map +1 -1
  750. package/dist/schema/types.d.ts +1080 -4
  751. package/dist/schema/types.d.ts.map +1 -1
  752. package/dist/schema/types.js +2 -0
  753. package/dist/schema/wall-type.d.ts +95 -0
  754. package/dist/schema/wall-type.d.ts.map +1 -0
  755. package/dist/schema/wall-type.js +32 -0
  756. package/dist/services/index.d.ts +1 -1
  757. package/dist/services/index.d.ts.map +1 -1
  758. package/dist/services/index.js +1 -1
  759. package/dist/services/movement.d.ts +7 -0
  760. package/dist/services/movement.d.ts.map +1 -1
  761. package/dist/services/movement.js +13 -0
  762. package/dist/services/port-connectivity.d.ts +15 -6
  763. package/dist/services/port-connectivity.d.ts.map +1 -1
  764. package/dist/services/port-connectivity.js +83 -17
  765. package/dist/services/roof-bearing.d.ts.map +1 -1
  766. package/dist/services/roof-bearing.js +8 -4
  767. package/dist/services/roof-level.d.ts.map +1 -1
  768. package/dist/services/roof-level.js +4 -3
  769. package/dist/services/roof-move.d.ts.map +1 -1
  770. package/dist/services/roof-move.js +13 -7
  771. package/dist/services/storey.d.ts +6 -1
  772. package/dist/services/storey.d.ts.map +1 -1
  773. package/dist/services/storey.js +24 -10
  774. package/dist/spatial/usage-field/beds.d.ts +51 -0
  775. package/dist/spatial/usage-field/beds.d.ts.map +1 -0
  776. package/dist/spatial/usage-field/beds.js +346 -0
  777. package/dist/spatial/usage-field/blocked.d.ts +28 -0
  778. package/dist/spatial/usage-field/blocked.d.ts.map +1 -0
  779. package/dist/spatial/usage-field/blocked.js +185 -0
  780. package/dist/spatial/usage-field/boxes.d.ts +17 -0
  781. package/dist/spatial/usage-field/boxes.d.ts.map +1 -0
  782. package/dist/spatial/usage-field/boxes.js +82 -0
  783. package/dist/spatial/usage-field/catalogue-shapes.d.ts +3 -0
  784. package/dist/spatial/usage-field/catalogue-shapes.d.ts.map +1 -0
  785. package/dist/spatial/usage-field/catalogue-shapes.js +257 -0
  786. package/dist/spatial/usage-field/catalogue.d.ts +6 -0
  787. package/dist/spatial/usage-field/catalogue.d.ts.map +1 -0
  788. package/dist/spatial/usage-field/catalogue.js +11 -0
  789. package/dist/spatial/usage-field/clash.d.ts +40 -0
  790. package/dist/spatial/usage-field/clash.d.ts.map +1 -0
  791. package/dist/spatial/usage-field/clash.js +187 -0
  792. package/dist/spatial/usage-field/door-stairs.d.ts +18 -0
  793. package/dist/spatial/usage-field/door-stairs.d.ts.map +1 -0
  794. package/dist/spatial/usage-field/door-stairs.js +129 -0
  795. package/dist/spatial/usage-field/entry-way.d.ts +14 -0
  796. package/dist/spatial/usage-field/entry-way.d.ts.map +1 -0
  797. package/dist/spatial/usage-field/entry-way.js +219 -0
  798. package/dist/spatial/usage-field/fences.d.ts +18 -0
  799. package/dist/spatial/usage-field/fences.d.ts.map +1 -0
  800. package/dist/spatial/usage-field/fences.js +253 -0
  801. package/dist/spatial/usage-field/field.d.ts +44 -0
  802. package/dist/spatial/usage-field/field.d.ts.map +1 -0
  803. package/dist/spatial/usage-field/field.js +145 -0
  804. package/dist/spatial/usage-field/findings.d.ts +76 -0
  805. package/dist/spatial/usage-field/findings.d.ts.map +1 -0
  806. package/dist/spatial/usage-field/findings.js +252 -0
  807. package/dist/spatial/usage-field/fixtures.d.ts +18 -0
  808. package/dist/spatial/usage-field/fixtures.d.ts.map +1 -0
  809. package/dist/spatial/usage-field/fixtures.js +160 -0
  810. package/dist/spatial/usage-field/flag.d.ts +10 -0
  811. package/dist/spatial/usage-field/flag.d.ts.map +1 -0
  812. package/dist/spatial/usage-field/flag.js +12 -0
  813. package/dist/spatial/usage-field/floors.d.ts +13 -0
  814. package/dist/spatial/usage-field/floors.d.ts.map +1 -0
  815. package/dist/spatial/usage-field/floors.js +36 -0
  816. package/dist/spatial/usage-field/index.d.ts +7 -0
  817. package/dist/spatial/usage-field/index.d.ts.map +1 -0
  818. package/dist/spatial/usage-field/index.js +5 -0
  819. package/dist/spatial/usage-field/items.d.ts +38 -0
  820. package/dist/spatial/usage-field/items.d.ts.map +1 -0
  821. package/dist/spatial/usage-field/items.js +261 -0
  822. package/dist/spatial/usage-field/labels.d.ts +8 -0
  823. package/dist/spatial/usage-field/labels.d.ts.map +1 -0
  824. package/dist/spatial/usage-field/labels.js +14 -0
  825. package/dist/spatial/usage-field/level-field.d.ts +47 -0
  826. package/dist/spatial/usage-field/level-field.d.ts.map +1 -0
  827. package/dist/spatial/usage-field/level-field.js +96 -0
  828. package/dist/spatial/usage-field/measure.d.ts +324 -0
  829. package/dist/spatial/usage-field/measure.d.ts.map +1 -0
  830. package/dist/spatial/usage-field/measure.js +458 -0
  831. package/dist/spatial/usage-field/obstacles.d.ts +63 -0
  832. package/dist/spatial/usage-field/obstacles.d.ts.map +1 -0
  833. package/dist/spatial/usage-field/obstacles.js +215 -0
  834. package/dist/spatial/usage-field/openings.d.ts +12 -0
  835. package/dist/spatial/usage-field/openings.d.ts.map +1 -0
  836. package/dist/spatial/usage-field/openings.js +162 -0
  837. package/dist/spatial/usage-field/path.d.ts +48 -0
  838. package/dist/spatial/usage-field/path.d.ts.map +1 -0
  839. package/dist/spatial/usage-field/path.js +354 -0
  840. package/dist/spatial/usage-field/pieces.d.ts +27 -0
  841. package/dist/spatial/usage-field/pieces.d.ts.map +1 -0
  842. package/dist/spatial/usage-field/pieces.js +89 -0
  843. package/dist/spatial/usage-field/shapes.d.ts +18 -0
  844. package/dist/spatial/usage-field/shapes.d.ts.map +1 -0
  845. package/dist/spatial/usage-field/shapes.js +92 -0
  846. package/dist/spatial/usage-field/stairs.d.ts +23 -0
  847. package/dist/spatial/usage-field/stairs.d.ts.map +1 -0
  848. package/dist/spatial/usage-field/stairs.js +163 -0
  849. package/dist/spatial/usage-field/support.d.ts +24 -0
  850. package/dist/spatial/usage-field/support.d.ts.map +1 -0
  851. package/dist/spatial/usage-field/support.js +46 -0
  852. package/dist/spatial/usage-field/swings.d.ts +847 -0
  853. package/dist/spatial/usage-field/swings.d.ts.map +1 -0
  854. package/dist/spatial/usage-field/swings.js +427 -0
  855. package/dist/spatial/usage-field/types.d.ts +65 -0
  856. package/dist/spatial/usage-field/types.d.ts.map +1 -0
  857. package/dist/spatial/usage-field/types.js +1 -0
  858. package/dist/spatial/usage-field/walls.d.ts +1059 -0
  859. package/dist/spatial/usage-field/walls.d.ts.map +1 -0
  860. package/dist/spatial/usage-field/walls.js +180 -0
  861. package/dist/spatial/usage-field/way-in.d.ts +26 -0
  862. package/dist/spatial/usage-field/way-in.d.ts.map +1 -0
  863. package/dist/spatial/usage-field/way-in.js +113 -0
  864. package/dist/store/actions/node-actions.d.ts +1467 -664
  865. package/dist/store/actions/node-actions.d.ts.map +1 -1
  866. package/dist/store/actions/node-actions.js +65 -21
  867. package/dist/store/derived-node-guard.d.ts +10 -2
  868. package/dist/store/derived-node-guard.d.ts.map +1 -1
  869. package/dist/store/derived-node-guard.js +33 -12
  870. package/dist/store/document-settling.d.ts +9 -0
  871. package/dist/store/document-settling.d.ts.map +1 -0
  872. package/dist/store/document-settling.js +22 -0
  873. package/dist/store/history-control.d.ts +19 -10
  874. package/dist/store/history-control.d.ts.map +1 -1
  875. package/dist/store/history-control.js +176 -127
  876. package/dist/store/history-drafts.d.ts.map +1 -1
  877. package/dist/store/history-drafts.js +21 -17
  878. package/dist/store/live-previews.d.ts +9 -0
  879. package/dist/store/live-previews.d.ts.map +1 -0
  880. package/dist/store/live-previews.js +19 -0
  881. package/dist/store/scene-annotations.d.ts +5409 -3807
  882. package/dist/store/scene-annotations.d.ts.map +1 -1
  883. package/dist/store/scene-environment.d.ts +33 -0
  884. package/dist/store/scene-environment.d.ts.map +1 -0
  885. package/dist/store/scene-environment.js +54 -0
  886. package/dist/store/scene-hydration.d.ts.map +1 -1
  887. package/dist/store/scene-hydration.js +41 -30
  888. package/dist/store/use-interactive.d.ts +9 -3
  889. package/dist/store/use-interactive.d.ts.map +1 -1
  890. package/dist/store/use-interactive.js +43 -11
  891. package/dist/store/use-live-node-overrides.d.ts.map +1 -1
  892. package/dist/store/use-live-node-overrides.js +3 -0
  893. package/dist/store/use-scene.d.ts +25 -0
  894. package/dist/store/use-scene.d.ts.map +1 -1
  895. package/dist/store/use-scene.js +408 -336
  896. package/dist/systems/document-reconcile.d.ts +40 -0
  897. package/dist/systems/document-reconcile.d.ts.map +1 -0
  898. package/dist/systems/document-reconcile.js +159 -0
  899. package/dist/systems/elevator/elevator-geometry.d.ts +25 -0
  900. package/dist/systems/elevator/elevator-geometry.d.ts.map +1 -1
  901. package/dist/systems/elevator/elevator-geometry.js +40 -8
  902. package/dist/systems/elevator/elevator-opening-sync.d.ts.map +1 -1
  903. package/dist/systems/elevator/elevator-opening-sync.js +4 -35
  904. package/dist/systems/elevator/elevator-opening-system.d.ts.map +1 -1
  905. package/dist/systems/elevator/elevator-opening-system.js +9 -24
  906. package/dist/systems/elevator/elevator-runtime.d.ts.map +1 -1
  907. package/dist/systems/elevator/elevator-runtime.js +95 -18
  908. package/dist/systems/elevator/elevator-service.d.ts.map +1 -1
  909. package/dist/systems/elevator/elevator-service.js +24 -4
  910. package/dist/systems/fence/guard-layout.d.ts +69 -0
  911. package/dist/systems/fence/guard-layout.d.ts.map +1 -0
  912. package/dist/systems/fence/guard-layout.js +194 -0
  913. package/dist/systems/owned-floor-openings.d.ts +13 -1
  914. package/dist/systems/owned-floor-openings.d.ts.map +1 -1
  915. package/dist/systems/owned-floor-openings.js +58 -2
  916. package/dist/systems/reconcile-owned-floor-openings.d.ts +3 -1
  917. package/dist/systems/reconcile-owned-floor-openings.d.ts.map +1 -1
  918. package/dist/systems/reconcile-owned-floor-openings.js +4 -4
  919. package/dist/systems/roof/roof-elevation-system.d.ts.map +1 -1
  920. package/dist/systems/roof/roof-elevation-system.js +8 -26
  921. package/dist/systems/roof/roof-elevation.d.ts +16 -1
  922. package/dist/systems/roof/roof-elevation.d.ts.map +1 -1
  923. package/dist/systems/roof/roof-elevation.js +87 -5
  924. package/dist/systems/roof/roof-footprint.d.ts +42 -1
  925. package/dist/systems/roof/roof-footprint.d.ts.map +1 -1
  926. package/dist/systems/roof/roof-footprint.js +160 -4
  927. package/dist/systems/slab/__fixtures__/floor-step.d.ts +2714 -1481
  928. package/dist/systems/slab/__fixtures__/floor-step.d.ts.map +1 -1
  929. package/dist/systems/slab/__fixtures__/raised-room.d.ts +3815 -2565
  930. package/dist/systems/slab/__fixtures__/raised-room.d.ts.map +1 -1
  931. package/dist/systems/stair/stair-clearance.d.ts +7 -0
  932. package/dist/systems/stair/stair-clearance.d.ts.map +1 -1
  933. package/dist/systems/stair/stair-clearance.js +31 -11
  934. package/dist/systems/stair/stair-construction.d.ts +8 -3
  935. package/dist/systems/stair/stair-construction.d.ts.map +1 -1
  936. package/dist/systems/stair/stair-construction.js +55 -4
  937. package/dist/systems/stair/stair-opening-preview.d.ts +1630 -829
  938. package/dist/systems/stair/stair-opening-preview.d.ts.map +1 -1
  939. package/dist/systems/stair/stair-opening-system.d.ts.map +1 -1
  940. package/dist/systems/stair/stair-opening-system.js +18 -34
  941. package/dist/systems/stair/stair-presets.d.ts +36 -0
  942. package/dist/systems/stair/stair-presets.d.ts.map +1 -1
  943. package/dist/systems/stair/stair-rise-query.d.ts.map +1 -1
  944. package/dist/systems/stair/stair-rise-query.js +3 -2
  945. package/dist/systems/stair/stair-rise.d.ts.map +1 -1
  946. package/dist/systems/stair/stair-rise.js +6 -0
  947. package/dist/systems/stair/stair-sizing.d.ts +42 -11
  948. package/dist/systems/stair/stair-sizing.d.ts.map +1 -1
  949. package/dist/systems/stair/stair-sizing.js +10 -1
  950. package/dist/systems/stair/stair-structure.d.ts +277 -0
  951. package/dist/systems/stair/stair-structure.d.ts.map +1 -0
  952. package/dist/systems/stair/stair-structure.js +496 -0
  953. package/dist/systems/wall/wall-assembly.d.ts +84 -6
  954. package/dist/systems/wall/wall-assembly.d.ts.map +1 -1
  955. package/dist/systems/wall/wall-assembly.js +204 -5
  956. package/dist/systems/wall/wall-curve.d.ts +10 -0
  957. package/dist/systems/wall/wall-curve.d.ts.map +1 -1
  958. package/dist/systems/wall/wall-curve.js +38 -0
  959. package/dist/systems/wall/wall-finish.d.ts +38 -2
  960. package/dist/systems/wall/wall-finish.d.ts.map +1 -1
  961. package/dist/systems/wall/wall-finish.js +70 -2
  962. package/dist/systems/wall/wall-footprint.js +2 -2
  963. package/dist/systems/wall/wall-frame.d.ts.map +1 -1
  964. package/dist/systems/wall/wall-frame.js +8 -0
  965. package/dist/systems/wall/wall-merge.d.ts +9 -1
  966. package/dist/systems/wall/wall-merge.d.ts.map +1 -1
  967. package/dist/systems/wall/wall-merge.js +66 -13
  968. package/dist/systems/wall/wall-mitering.d.ts +1 -0
  969. package/dist/systems/wall/wall-mitering.d.ts.map +1 -1
  970. package/dist/systems/wall/wall-mitering.js +152 -52
  971. package/dist/systems/wall/wall-move.d.ts +23 -6
  972. package/dist/systems/wall/wall-move.d.ts.map +1 -1
  973. package/dist/systems/wall/wall-move.js +65 -0
  974. package/dist/systems/wall/wall-top.d.ts +11 -4
  975. package/dist/systems/wall/wall-top.d.ts.map +1 -1
  976. package/dist/systems/wall/wall-top.js +28 -7
  977. package/dist/systems/wall/wall-topology.d.ts +32 -1
  978. package/dist/systems/wall/wall-topology.d.ts.map +1 -1
  979. package/dist/systems/wall/wall-topology.js +137 -11
  980. package/dist/systems/wall/wall-trim-profiles.d.ts +12 -0
  981. package/dist/systems/wall/wall-trim-profiles.d.ts.map +1 -0
  982. package/dist/systems/wall/wall-trim-profiles.js +191 -0
  983. package/dist/utils/ensure-scene-openings.d.ts +4663 -3061
  984. package/dist/utils/ensure-scene-openings.d.ts.map +1 -1
  985. package/dist/utils/floor-piece-adoption.d.ts +5 -0
  986. package/dist/utils/floor-piece-adoption.d.ts.map +1 -1
  987. package/dist/utils/floor-plate-migration.d.ts +3372 -2571
  988. package/dist/utils/floor-plate-migration.d.ts.map +1 -1
  989. package/dist/utils/measurement-format.d.ts +27 -0
  990. package/dist/utils/measurement-format.d.ts.map +1 -0
  991. package/dist/utils/measurement-format.js +143 -0
  992. package/dist/utils/owned-floor-opening-migration.d.ts +1629 -828
  993. package/dist/utils/owned-floor-opening-migration.d.ts.map +1 -1
  994. package/dist/utils/reconcile-structure-on-load.d.ts +2308 -1507
  995. package/dist/utils/reconcile-structure-on-load.d.ts.map +1 -1
  996. package/dist/utils/structure-id.d.ts.map +1 -1
  997. package/dist/utils/structure-id.js +4 -0
  998. package/dist/validation/validate-build-json.d.ts.map +1 -1
  999. package/dist/validation/validate-build-json.js +3 -1
  1000. package/package.json +22 -5
  1001. package/dist/lib/generic-foundation.d.ts +0 -40
  1002. package/dist/lib/generic-foundation.d.ts.map +0 -1
  1003. package/dist/lib/generic-foundation.js +0 -200
@@ -43,7 +43,9 @@
43
43
  * `exterior` nor `sheathing`, whose interior finish is then applied to BOTH
44
44
  * faces and no cladding or sheathing is drawn (see `resolveWallAssembly`).
45
45
  */
46
+ import { getLibraryMaterialIdFromRef, getMaterialsForCategory, } from '../../material-library.js';
46
47
  import { WallAssembly } from '../../schema/nodes/wall.js';
48
+ import { WallTypeDefinition } from '../../schema/wall-type.js';
47
49
  import { DEFAULT_WALL_THICKNESS } from './wall-footprint.js';
48
50
  import { pointToKey } from './wall-mitering.js';
49
51
  // ============================================================================
@@ -67,6 +69,19 @@ export const GYPSUM_SHEATHING = inches(0.5);
67
69
  export const STUD_2X4 = inches(3.5);
68
70
  /** 2x6 stud, actual 5-1/2 in. Same source as STUD_2X4. */
69
71
  export const STUD_2X6 = inches(5.5);
72
+ /** 2x8 stud, actual 7-1/4 in: the PS 20 dressed size the IRC lumber tables assume. */
73
+ export const STUD_2X8 = inches(7.25);
74
+ /**
75
+ * Steel stud webs, 3-1/2, 5-1/2 and 8 in: members 350S162, 550S162 and 800S162, whose designation
76
+ * leads with the web depth in hundredths of an inch (AISI S201, the designations 2021 IRC R603
77
+ * uses).
78
+ */
79
+ export const LGS_STUD_350 = inches(3.5);
80
+ export const LGS_STUD_550 = inches(5.5);
81
+ export const LGS_STUD_800 = inches(8);
82
+ /** Stud spacings the 2021 IRC stud tables are written for, 16 and 24 in on centre (Table R602.3(5)). */
83
+ export const STUD_SPACING_16 = inches(16);
84
+ export const STUD_SPACING_24 = inches(24);
70
85
  /** Vinyl / wood lap siding bounding depth, 3/4 in. 2021 IRC R703.11 / R703.5 + Table R703.3(1). */
71
86
  export const SIDING_LAP = inches(0.75);
72
87
  /** Fiber cement lap board, 5/16 in board. 2021 IRC R703.10.2 + Table R703.3(1). */
@@ -182,6 +197,7 @@ export function wallAssemblyFromLegacy(legacy) {
182
197
  core: true,
183
198
  material: legacy.framing.kind,
184
199
  thickness: legacy.framing.depth,
200
+ ...(legacy.framing.spacing !== undefined ? { spacing: legacy.framing.spacing } : {}),
185
201
  });
186
202
  if (interior)
187
203
  layers.push({ id: 'interior', ...interior });
@@ -242,6 +258,7 @@ export function wallAssemblyToLegacy(assembly) {
242
258
  legacy.framing = {
243
259
  kind: framing.material,
244
260
  depth: framing.thickness,
261
+ ...(framing.spacing !== undefined ? { spacing: framing.spacing } : {}),
245
262
  };
246
263
  const lining = take('lining');
247
264
  if (layers.length > 0)
@@ -270,6 +287,7 @@ export function wallAssemblyToLegacy(assembly) {
270
287
  restored.role === layer.role &&
271
288
  restored.core === layer.core &&
272
289
  restored.material === layer.material &&
290
+ restored.spacing === layer.spacing &&
273
291
  Math.abs(restored.thickness - layer.thickness) < 1e-12);
274
292
  });
275
293
  if (!sameLayers)
@@ -305,6 +323,10 @@ const INTERIOR_FINISH_LABEL = {
305
323
  plaster: 'plaster',
306
324
  none: 'none',
307
325
  };
326
+ const INSULATION_LABEL = {
327
+ 'rigid-foam': 'rigid foam insulation',
328
+ 'mineral-wool': 'mineral wool board',
329
+ };
308
330
  /** An F2 layer as the WS5 drawing role and its inspector / poché label. */
309
331
  function drawnLayer(layer) {
310
332
  const material = layer.material;
@@ -325,9 +347,13 @@ function drawnLayer(layer) {
325
347
  case 'substrate':
326
348
  case 'membrane':
327
349
  case 'underlay':
350
+ // Continuous insulation is a board on the face of the frame, drawn as one.
351
+ case 'insulation':
328
352
  return {
329
353
  role: 'sheathing',
330
- material: (material && SHEATHING_LABEL[material]) ?? material ?? layer.role,
354
+ material: (material && (SHEATHING_LABEL[material] ?? INSULATION_LABEL[material])) ??
355
+ material ??
356
+ layer.role,
331
357
  };
332
358
  default:
333
359
  return {
@@ -542,20 +568,193 @@ export function wallAssemblyFraming(wall) {
542
568
  return undefined;
543
569
  return { depth: core.thickness, ...(core.material ? { kind: core.material } : {}) };
544
570
  }
545
- /** `library:` ref for the wall's assembly cladding, or null when it has none. */
571
+ /**
572
+ * `library:` ref for the wall's assembly cladding, or null when it has none: the product picked
573
+ * for its cladding layer while drafting (`wallAssemblyFinishSlots`), else the kind's own
574
+ * (`WALL_FINISH_LIBRARY_REF`). A picked product that no longer dresses the cladding (the layer
575
+ * changed from siding to stucco since) gives way to the kind's own.
576
+ */
546
577
  export function wallAssemblyFinishRef(wall) {
547
- const finish = wallAssemblyExteriorFinish(wall);
548
- if (!finish)
578
+ const layer = layersOutsideIn(wall).layers.find((layer) => layer.role === 'finish');
579
+ const finish = layer?.material;
580
+ if (!(layer && finish))
549
581
  return null;
582
+ const picked = wall.slots?.[assemblyLayerSlotKey(layer)];
583
+ if (isWallCladdingProduct(finish, picked))
584
+ return picked;
550
585
  return WALL_FINISH_LIBRARY_REF[finish] ?? null;
551
586
  }
587
+ /**
588
+ * The finish the wall's assembly gives one geometric face (`a` is the +normal face) where the
589
+ * face has no paint of its own: on the exterior face its cladding (`wallAssemblyFinishRef`), on a
590
+ * lined face the paint picked for that lining while drafting. Null where the assembly says
591
+ * nothing, and the face shows the wall's slot default.
592
+ */
593
+ export function wallAssemblyFaceFinish(wall, face) {
594
+ const { layers, exteriorSideResolved } = layersOutsideIn(wall);
595
+ const exterior = face === (exteriorSideResolved === 1 ? 'a' : 'b');
596
+ if (exterior) {
597
+ const cladding = wallAssemblyFinishRef(wall);
598
+ if (cladding)
599
+ return cladding;
600
+ }
601
+ const drawn = layers.filter((layer) => layer.thickness > 0);
602
+ const outer = exterior ? drawn[0] : drawn[drawn.length - 1];
603
+ if (outer?.role !== 'lining')
604
+ return null;
605
+ return wall.slots?.[assemblyLayerSlotKey(outer)] ?? null;
606
+ }
607
+ // ============================================================================
608
+ // FINISHES PICKED WHILE DRAFTING
609
+ // ============================================================================
610
+ /** The `slots` key a layer's look is kept under: its own `slot`, else `layer:<id>` (`AssemblyLayer.slot`). */
611
+ export function assemblyLayerSlotKey(layer) {
612
+ return layer.slot ?? `layer:${layer.id}`;
613
+ }
614
+ /** An outdoor wall finish: a brick or stone made for a wall outside, not a floor tile. */
615
+ const outdoorWall = (item) => !!item.surfaces?.includes('wall') && item.surfaces.includes('outdoor');
616
+ /** Which catalog finishes dress each cladding kind. */
617
+ const CLADDING_PRODUCTS = {
618
+ siding: () => getMaterialsForCategory('siding'),
619
+ 'fiber-cement': () => getMaterialsForCategory('siding'),
620
+ // The textured coat, then the flat colours of an integrally coloured or painted finish coat.
621
+ stucco: () => [
622
+ ...getMaterialsForCategory('concrete').filter((item) => item.id.includes('stucco')),
623
+ ...getMaterialsForCategory('colors'),
624
+ ],
625
+ brick: () => getMaterialsForCategory('brick').filter(outdoorWall),
626
+ stone: () => getMaterialsForCategory('stone').filter(outdoorWall),
627
+ };
628
+ /**
629
+ * The catalog products a cladding kind (`siding`, `stucco`, `brick`, …) can be finished with,
630
+ * the kind's own (`WALL_FINISH_LIBRARY_REF`) among them: what the drafting finish picker offers
631
+ * for a wall type with that cladding. Empty for a kind with none (`none`, an unknown kind).
632
+ */
633
+ export function wallCladdingProducts(kind) {
634
+ return (kind && CLADDING_PRODUCTS[kind]?.()) || [];
635
+ }
636
+ /** Whether `ref` is a `library:` product `wallCladdingProducts(kind)` lists. */
637
+ export function isWallCladdingProduct(kind, ref) {
638
+ const id = getLibraryMaterialIdFromRef(ref);
639
+ return !!id && wallCladdingProducts(kind).some((item) => item.id === id);
640
+ }
641
+ /**
642
+ * Whether a stack builds an exterior wall, read from its own layers: it has a cladding side — a
643
+ * finish or sheathing layer, or a lining on one face only (block or framing left bare outside).
644
+ * A stack lined on both faces, or bare on both, is a partition.
645
+ */
646
+ export function isExteriorWallAssembly(assembly) {
647
+ const layers = [...assembly.layers, ...(assembly.backing ?? [])].filter((layer) => layer.thickness > 0);
648
+ if (layers.some((layer) => layer.role === 'finish' || layer.role === 'sheathing'))
649
+ return true;
650
+ return (layers[0]?.role === 'lining') !== (layers[layers.length - 1]?.role === 'lining');
651
+ }
652
+ /**
653
+ * The framing cores a project wall type is built around: wood studs (2x4, 2x6, 2x8) and steel
654
+ * studs (the 3-1/2, 5-1/2 and 8 in webs the framers size steel walls by) at 16 or 24 in on
655
+ * centre, or an 8 in block. The core's depth and spacing are what a framer studs the wall at.
656
+ */
657
+ export const WALL_TYPE_CORES = [
658
+ ...[
659
+ ['2x4', STUD_2X4],
660
+ ['2x6', STUD_2X6],
661
+ ['2x8', STUD_2X8],
662
+ ].flatMap(([size, thickness]) => [16, 24].map((oc) => ({
663
+ id: `wood-${size}-${oc}`,
664
+ label: `${size} wood studs @ ${oc}" o.c.`,
665
+ material: 'wood',
666
+ thickness,
667
+ spacing: oc === 16 ? STUD_SPACING_16 : STUD_SPACING_24,
668
+ }))),
669
+ ...[
670
+ ['3-1/2"', '350', LGS_STUD_350],
671
+ ['5-1/2"', '550', LGS_STUD_550],
672
+ ['8"', '800', LGS_STUD_800],
673
+ ].flatMap(([depth, web, thickness]) => [16, 24].map((oc) => ({
674
+ id: `lgs-${web}-${oc}`,
675
+ label: `${depth} steel studs @ ${oc}" o.c.`,
676
+ material: 'lgs',
677
+ thickness,
678
+ spacing: oc === 16 ? STUD_SPACING_16 : STUD_SPACING_24,
679
+ }))),
680
+ { id: 'cmu-8', label: 'CMU 8" block', material: 'cmu', thickness: CMU_8_ACTUAL },
681
+ ];
682
+ const near = (a, b) => Math.abs(a - b) < 1e-6;
683
+ /**
684
+ * The listed core a stack is built around, or undefined for one off the list. A core with no
685
+ * spacing of its own (every preset's: the framer's default) reads as the 16 in one.
686
+ */
687
+ export function wallTypeCoreOf(assembly) {
688
+ const core = assembly.layers.find((layer) => layer.core);
689
+ if (!core)
690
+ return undefined;
691
+ const spacing = core.spacing ?? STUD_SPACING_16;
692
+ return WALL_TYPE_CORES.find((option) => option.material === core.material &&
693
+ near(option.thickness, core.thickness) &&
694
+ (option.spacing === undefined || near(option.spacing, spacing)));
695
+ }
696
+ /** The id each layer role takes in a project wall type, as the presets name them. */
697
+ const WALL_TYPE_LAYER_ID = {
698
+ finish: 'exterior',
699
+ air: 'air-space',
700
+ sheathing: 'sheathing',
701
+ structure: 'framing',
702
+ };
703
+ /**
704
+ * A project wall type's stack from its layers listed outside-in, with ids as the presets give
705
+ * them (`exterior`, `sheathing`, `framing`, `interior`, a lining outside the core
706
+ * `interior-back`, a repeat numbered `-2`, `-3`…), so a stack the inspector's cladding /
707
+ * sheathing / framing / interior rows can express stays editable there.
708
+ */
709
+ export function wallTypeAssembly(id, layers) {
710
+ const coreIndex = layers.findIndex((layer) => layer.core);
711
+ const used = new Set();
712
+ return {
713
+ layers: layers.map((layer, index) => {
714
+ const base = layer.role === 'lining'
715
+ ? index < coreIndex
716
+ ? 'interior-back'
717
+ : 'interior'
718
+ : (WALL_TYPE_LAYER_ID[layer.role] ?? layer.role);
719
+ let layerId = base;
720
+ for (let n = 2; used.has(layerId); n += 1)
721
+ layerId = `${base}-${n}`;
722
+ used.add(layerId);
723
+ return { id: layerId, ...layer };
724
+ }),
725
+ face: 'exterior',
726
+ presetId: id,
727
+ };
728
+ }
729
+ /**
730
+ * The project's own wall types: those saved on its site (`SiteNode.wallTypes`), in their saved
731
+ * order. A scene is loaded without parsing, so an entry that does not parse, or repeats an id, is
732
+ * skipped rather than trusted.
733
+ */
734
+ export function projectWallTypes(nodes, rootNodeIds) {
735
+ const site = rootNodeIds.map((id) => nodes[id]).find((node) => node?.type === 'site');
736
+ return parseWallTypes(site?.type === 'site' ? site.wallTypes : undefined);
737
+ }
738
+ /** A saved `SiteNode.wallTypes` list as `projectWallTypes` reads it: parsed, first id wins. */
739
+ export function parseWallTypes(saved) {
740
+ const seen = new Set();
741
+ const types = [];
742
+ for (const entry of Array.isArray(saved) ? saved : []) {
743
+ const parsed = WallTypeDefinition.safeParse(entry);
744
+ if (!parsed.success || seen.has(parsed.data.id))
745
+ continue;
746
+ seen.add(parsed.data.id);
747
+ types.push(parsed.data);
748
+ }
749
+ return types;
750
+ }
552
751
  /**
553
752
  * What the wall's exterior face shows when its assembly declares no cladding and no lining over
554
753
  * the core and the core is masonry or concrete: the structure itself, exposed. A foundation wall's
555
754
  * block or cast concrete above grade, and from under the ground, is what it is. `null` for a wall
556
755
  * with a cladding (`wallAssemblyFinishRef` speaks for it), a lining outside the core (a
557
756
  * partition), a framed or foam core (`wood`, `lgs`, `icf`), and a wall whose exterior side is not
558
- * yet resolved. The viewer draws it as the generic foundation draws the same structure.
757
+ * yet resolved.
559
758
  */
560
759
  export function wallAssemblyExposedStructure(wall) {
561
760
  if (resolveWallExteriorSide(wall) === null)
@@ -54,6 +54,16 @@ export declare function sampleWallCenterline(wall: WallCurveLike, segments?: num
54
54
  export declare function getWallCenterlineSegments(wall: WallCurveLike, segments?: number): [Point2D, Point2D][];
55
55
  export declare function constrainWallCurveOffsetToAvoidIntersections(wall: WallNode, proposedOffset: number, walls: readonly WallNode[]): number;
56
56
  export declare function getWallCurveLength(wall: WallCurveLike, segments?: number): number;
57
+ /**
58
+ * Where arc-length `station` (m along the centreline, the frame openings are placed in) projects
59
+ * onto the chord, as a fraction of it: the frame the wall body is extruded and its top sloped in.
60
+ */
61
+ export declare function getWallChordFractionAt(wall: WallCurveLike, station: number): number;
62
+ /**
63
+ * The arc-length station that projects onto chord `fraction`: the inverse of
64
+ * {@link getWallChordFractionAt}. A wall arc is at most a semicircle, so the projection only grows.
65
+ */
66
+ export declare function getWallStationAtChordFraction(wall: WallCurveLike, fraction: number): number;
57
67
  export declare function getWallSurfacePolygon(wall: Pick<WallNode | FenceNode, 'start' | 'end' | 'curveOffset' | 'thickness'> & Pick<WallNode, 'justification'>, segments?: number, miterOverrides?: WallSurfaceMiterOverrides): Point2D[];
58
68
  export declare function getWallCurveStationAtPoint(wall: WallCurveLike, point: readonly [number, number]): number;
59
69
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"wall-curve.d.ts","sourceRoot":"","sources":["../../../src/systems/wall/wall-curve.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAEvD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAO9C,KAAK,aAAa,GAAG,IAAI,CAAC,QAAQ,GAAG,SAAS,EAAE,OAAO,GAAG,KAAK,GAAG,aAAa,CAAC,CAAA;AAEhF,KAAK,UAAU,GAAG;IAChB,KAAK,EAAE,OAAO,CAAA;IACd,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,OAAO,CAAA;CAChB,CAAA;AAED,KAAK,yBAAyB,GAAG;IAC/B,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,CAAA;AAcD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAE9D;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAE5D;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,aAAa,UAErD;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,aAAa,UAExD;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,aAAa,UAE5D;AAWD,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,UAG3E;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,aAAa,UAI5D;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,aAAa,WAE/C;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,aAAa;;;;;QAYpC,CAAC;QAAK,CAAC;;;QACR,CAAC;QAAK,CAAC;;;EAgBtB;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,aAAa;;;;;;;;;SA2BjD;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,aAAa,EAAE,CAAC,EAAE,MAAM,GAAG,UAAU,CAwC9E;AAED,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,aAAa,WAE7D;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,aAAa,EAAE,QAAQ,SAA0B,aAM3F;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,aAAa,EACnB,QAAQ,SAA0B,GACjC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAOtB;AAgED,wBAAgB,4CAA4C,CAC1D,IAAI,EAAE,QAAQ,EACd,cAAc,EAAE,MAAM,EACtB,KAAK,EAAE,SAAS,QAAQ,EAAE,UAoB3B;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,aAAa,EAAE,QAAQ,SAA0B,UASzF;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,IAAI,CAAC,QAAQ,GAAG,SAAS,EAAE,OAAO,GAAG,KAAK,GAAG,aAAa,GAAG,WAAW,CAAC,GAC7E,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,EACjC,QAAQ,SAA0B,EAClC,cAAc,CAAC,EAAE,yBAAyB,aA2B3C;AAED,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,aAAa,EACnB,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,MAAM,CAcR"}
1
+ {"version":3,"file":"wall-curve.d.ts","sourceRoot":"","sources":["../../../src/systems/wall/wall-curve.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAEvD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAO9C,KAAK,aAAa,GAAG,IAAI,CAAC,QAAQ,GAAG,SAAS,EAAE,OAAO,GAAG,KAAK,GAAG,aAAa,CAAC,CAAA;AAEhF,KAAK,UAAU,GAAG;IAChB,KAAK,EAAE,OAAO,CAAA;IACd,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,OAAO,CAAA;CAChB,CAAA;AAED,KAAK,yBAAyB,GAAG;IAC/B,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,CAAA;AAcD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAE9D;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAE5D;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,aAAa,UAErD;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,aAAa,UAExD;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,aAAa,UAE5D;AAWD,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,UAG3E;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,aAAa,UAI5D;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,aAAa,WAE/C;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,aAAa;;;;;QAYpC,CAAC;QAAK,CAAC;;;QACR,CAAC;QAAK,CAAC;;;EAgBtB;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,aAAa;;;;;;;;;SA2BjD;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,aAAa,EAAE,CAAC,EAAE,MAAM,GAAG,UAAU,CAwC9E;AAED,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,aAAa,WAE7D;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,aAAa,EAAE,QAAQ,SAA0B,aAM3F;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,aAAa,EACnB,QAAQ,SAA0B,GACjC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAOtB;AAgED,wBAAgB,4CAA4C,CAC1D,IAAI,EAAE,QAAQ,EACd,cAAc,EAAE,MAAM,EACtB,KAAK,EAAE,SAAS,QAAQ,EAAE,UAoB3B;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,aAAa,EAAE,QAAQ,SAA0B,UASzF;AAYD;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAKnF;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAW3F;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,IAAI,CAAC,QAAQ,GAAG,SAAS,EAAE,OAAO,GAAG,KAAK,GAAG,aAAa,GAAG,WAAW,CAAC,GAC7E,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,EACjC,QAAQ,SAA0B,EAClC,cAAc,CAAC,EAAE,yBAAyB,aA2B3C;AAED,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,aAAa,EACnB,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,MAAM,CAcR"}
@@ -237,6 +237,44 @@ export function getWallCurveLength(wall, segments = DEFAULT_SAMPLE_SEGMENTS) {
237
237
  }
238
238
  return totalLength;
239
239
  }
240
+ function chordFractionAtParam(wall, u) {
241
+ const chord = getWallChordFrame(wall);
242
+ const { point } = getWallCurveFrameAt(wall, u);
243
+ const dx = chord.end.x - chord.start.x;
244
+ const dy = chord.end.y - chord.start.y;
245
+ return clamp01(((point.x - chord.start.x) * dx + (point.y - chord.start.y) * dy) / chord.length ** 2);
246
+ }
247
+ /**
248
+ * Where arc-length `station` (m along the centreline, the frame openings are placed in) projects
249
+ * onto the chord, as a fraction of it: the frame the wall body is extruded and its top sloped in.
250
+ */
251
+ export function getWallChordFractionAt(wall, station) {
252
+ const chord = getWallChordLength(wall);
253
+ if (chord < CURVE_EPSILON)
254
+ return 0;
255
+ if (!isCurvedWall(wall))
256
+ return clamp01(station / chord);
257
+ return chordFractionAtParam(wall, station / getWallCurveLength(wall));
258
+ }
259
+ /**
260
+ * The arc-length station that projects onto chord `fraction`: the inverse of
261
+ * {@link getWallChordFractionAt}. A wall arc is at most a semicircle, so the projection only grows.
262
+ */
263
+ export function getWallStationAtChordFraction(wall, fraction) {
264
+ const chord = getWallChordLength(wall);
265
+ if (!isCurvedWall(wall) || chord < CURVE_EPSILON)
266
+ return clamp01(fraction) * chord;
267
+ let lo = 0;
268
+ let hi = 1;
269
+ for (let step = 0; step < 40; step += 1) {
270
+ const mid = (lo + hi) / 2;
271
+ if (chordFractionAtParam(wall, mid) < fraction)
272
+ lo = mid;
273
+ else
274
+ hi = mid;
275
+ }
276
+ return ((lo + hi) / 2) * getWallCurveLength(wall);
277
+ }
240
278
  export function getWallSurfacePolygon(wall, segments = DEFAULT_SAMPLE_SEGMENTS, miterOverrides) {
241
279
  const { a, b } = getWallFaceOffsets(wall);
242
280
  const count = Math.max(1, segments);
@@ -66,7 +66,8 @@ export declare function wallFinishMaterialIndex(layout: WallFinishLayout, face:
66
66
  /**
67
67
  * The wall's own chain for one face, in the order the renderer walks it:
68
68
  * `slots[face]` ref → legacy inline finish (per-face, then wall-wide) → the
69
- * declared default. A dangling ref renders the declared default.
69
+ * face's default (`getWallFaceDefault`: the interior paint, or raw drywall on
70
+ * the exterior side). A dangling ref renders the face's default.
70
71
  */
71
72
  export type WallFaceChainFinish = {
72
73
  kind: 'ref';
@@ -78,7 +79,42 @@ export type WallFaceChainFinish = {
78
79
  kind: 'default';
79
80
  ref: string;
80
81
  };
81
- export declare function resolveWallFaceChain(wall: Pick<WallNode, 'slots' | 'legacyFaceMaterials' | 'material' | 'materialPreset'>, face: WallFace): WallFaceChainFinish;
82
+ export declare function resolveWallFaceChain(wall: Pick<WallNode, 'slots' | 'legacyFaceMaterials' | 'material' | 'materialPreset'> & Partial<Pick<WallNode, 'frontSide' | 'backSide'>>, face: WallFace): WallFaceChainFinish;
83
+ export type WallFaceStretchSource = 'room_face_override' | 'room_wall_material' | 'wall_face';
84
+ /** A stretch of one wall face that shows one finish. */
85
+ export type WallFaceStretch = {
86
+ /** Metres from the wall's start, along its reference line. */
87
+ u0: number;
88
+ u1: number;
89
+ source: WallFaceStretchSource;
90
+ /** The finish ref that shows; null when the wall's own finish is an inline spec naming no preset. */
91
+ ref: string | null;
92
+ /** The room that gives the finish (a room source only). */
93
+ roomId?: string;
94
+ roomName?: string;
95
+ /** How the wall's own face reached `ref` (a `wall_face` source only): chosen, legacy or default. */
96
+ chain?: WallFaceChainFinish['kind'];
97
+ };
98
+ /** A paint region on a face: it shows over the stretches it covers (`v` is metres above the face's base). */
99
+ export type WallFacePaintRegion = {
100
+ id: string;
101
+ ref: string;
102
+ u0?: number;
103
+ u1?: number;
104
+ v0?: number;
105
+ v1?: number;
106
+ };
107
+ export type WallFaceFinishes = Record<WallFace, {
108
+ stretches: WallFaceStretch[];
109
+ paintRegions: WallFacePaintRegion[];
110
+ }>;
111
+ /**
112
+ * What each face of a wall shows, for a reader that cannot render it: the resolution order above run
113
+ * along the face, with the room that gives each stretch. The renderer and the paint tool resolve a
114
+ * face through the same layout, so this agrees with both. Paint regions sit over the stretches and
115
+ * are listed apart; what is not modelled here: exterior assembly cladding, a ref that does not resolve.
116
+ */
117
+ export declare function describeWallFaceFinishes(wall: WallNode, nodes: Readonly<Record<string, AnyNode | undefined>>): WallFaceFinishes;
82
118
  export type WallPaintRole = {
83
119
  kind: 'slot';
84
120
  slotId: string;
@@ -1 +1 @@
1
- {"version":3,"file":"wall-finish.d.ts","sourceRoot":"","sources":["../../../src/systems/wall/wall-finish.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wall-finish.d.ts","sourceRoot":"","sources":["../../../src/systems/wall/wall-finish.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { containsPoint } from '../../lib/polygon-boolean.js';
2
2
  import { sampleWallPointsForRoomDetection, WALL_JUNCTION_TOLERANCE } from '../../lib/room-graph.js';
3
- import { getEffectiveWallFaceMaterial, WALL_FACE_REGION_LIMIT, WALL_SLOT_DEFAULT, } from '../../schema/nodes/wall.js';
3
+ import { getEffectiveWallFaceMaterial, getWallFaceDefault, WALL_FACE_REGION_LIMIT, } from '../../schema/nodes/wall.js';
4
4
  import { isCurvedWall } from './wall-curve.js';
5
5
  const FACE_PROBE = 0.01;
6
6
  const SPLIT_EPSILON = 1e-6;
@@ -232,7 +232,75 @@ export function resolveWallFaceChain(wall, face) {
232
232
  const spec = getEffectiveWallFaceMaterial(wall, face);
233
233
  if (spec.materialPreset || spec.material)
234
234
  return { kind: 'legacy', spec };
235
- return { kind: 'default', ref: WALL_SLOT_DEFAULT[face] };
235
+ return { kind: 'default', ref: getWallFaceDefault(wall, face) };
236
+ }
237
+ const toMillimetre = (value) => Math.round(value * 1000) / 1000;
238
+ /**
239
+ * What each face of a wall shows, for a reader that cannot render it: the resolution order above run
240
+ * along the face, with the room that gives each stretch. The renderer and the paint tool resolve a
241
+ * face through the same layout, so this agrees with both. Paint regions sit over the stretches and
242
+ * are listed apart; what is not modelled here: exterior assembly cladding, a ref that does not resolve.
243
+ */
244
+ export function describeWallFaceFinishes(wall, nodes) {
245
+ const layout = buildWallFinishLayout(wall, getWallLevelZones(wall, nodes));
246
+ const underRegions = { ...layout, regions: { a: [], b: [] } };
247
+ const read = (face) => {
248
+ const cuts = new Set([0, layout.length]);
249
+ for (const span of layout.spans[face])
250
+ for (const u of [span.u0, span.u1])
251
+ if (u > SPLIT_EPSILON && u < layout.length - SPLIT_EPSILON)
252
+ cuts.add(u);
253
+ const stations = [...cuts].sort((x, y) => x - y);
254
+ const own = resolveWallFaceChain(wall, face);
255
+ const ownRef = own.kind === 'legacy' ? (own.spec.materialPreset ?? null) : own.ref;
256
+ const stretches = [];
257
+ const push = (stretch) => {
258
+ const last = stretches.at(-1);
259
+ if (last &&
260
+ last.source === stretch.source &&
261
+ last.ref === stretch.ref &&
262
+ last.roomId === stretch.roomId &&
263
+ last.chain === stretch.chain &&
264
+ stretch.u0 - last.u1 < SPLIT_EPSILON)
265
+ last.u1 = stretch.u1;
266
+ else
267
+ stretches.push(stretch);
268
+ };
269
+ for (let index = 0; index + 1 < stations.length; index += 1) {
270
+ const u0 = toMillimetre(stations[index]);
271
+ const u1 = toMillimetre(stations[index + 1]);
272
+ if (u1 - u0 < SPLIT_EPSILON)
273
+ continue;
274
+ const hit = resolveWallFinish(underRegions, face, (u0 + u1) / 2, 0);
275
+ if (hit.source === 'override' || hit.source === 'zone') {
276
+ const zone = nodes[hit.zoneId];
277
+ const roomName = zone?.type === 'zone' ? zone.name : undefined;
278
+ push({
279
+ u0,
280
+ u1,
281
+ source: hit.source === 'override' ? 'room_face_override' : 'room_wall_material',
282
+ ref: hit.ref,
283
+ roomId: hit.zoneId,
284
+ ...(roomName ? { roomName } : {}),
285
+ });
286
+ }
287
+ else
288
+ push({ u0, u1, source: 'wall_face', ref: ownRef, chain: own.kind });
289
+ }
290
+ // A wall with no length has no stretch to read; its own face is what it would show.
291
+ if (stretches.length === 0)
292
+ stretches.push({ u0: 0, u1: 0, source: 'wall_face', ref: ownRef, chain: own.kind });
293
+ const paintRegions = layout.regions[face].map((region) => ({
294
+ id: region.id,
295
+ ref: region.finish,
296
+ ...(region.u0 !== undefined ? { u0: toMillimetre(region.u0) } : {}),
297
+ ...(region.u1 !== undefined ? { u1: toMillimetre(region.u1) } : {}),
298
+ ...(region.v0 !== undefined ? { v0: toMillimetre(region.v0) } : {}),
299
+ ...(region.v1 !== undefined ? { v1: toMillimetre(region.v1) } : {}),
300
+ }));
301
+ return { stretches, paintRegions };
302
+ };
303
+ return { a: read('a'), b: read('b') };
236
304
  }
237
305
  export function wallRegionRole(regionId) {
238
306
  return `region:${regionId}`;
@@ -56,11 +56,11 @@ export function getWallPlanFootprint(wallNode, miterData) {
56
56
  };
57
57
  const polygon = [pStartRight, pEndRight];
58
58
  if (endJunction) {
59
- polygon.push(endJunction.closing ?? wallEnd);
59
+ polygon.push(...(endJunction.closingPath ?? [endJunction.closing ?? wallEnd]));
60
60
  }
61
61
  polygon.push(pEndLeft, pStartLeft);
62
62
  if (startJunction) {
63
- polygon.push(startJunction.closing ?? wallStart);
63
+ polygon.push(...(startJunction.closingPath ?? [startJunction.closing ?? wallStart]));
64
64
  }
65
65
  return polygon;
66
66
  }
@@ -1 +1 @@
1
- {"version":3,"file":"wall-frame.d.ts","sourceRoot":"","sources":["../../../src/systems/wall/wall-frame.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAEvD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAK9C,MAAM,MAAM,iBAAiB,GAAG,GAAG,GAAG,GAAG,CAAA;AACzC,MAAM,MAAM,eAAe,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAEtD,KAAK,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,WAAW,GAAG,eAAe,CAAC,CAAA;AAC9D,KAAK,QAAQ,GAAG,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,OAAO,GAAG,KAAK,CAAC,CAAA;AAE3D,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,SAAS,GAAG,eAAe,CAKnE;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAG/D;AAiBD,wBAAgB,eAAe,CAAC,IAAI,EAAE,QAAQ,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,OAAO,CAAA;CAAE,CAEhF;AAED,wBAAgB,eAAe,CAC7B,IAAI,EAAE,QAAQ,EACd,IAAI,EAAE,iBAAiB,GACtB;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,OAAO,CAAA;CAAE,CAElC;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,iBAAiB,GAAG,MAAM,CAGlF;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,EAC9C,aAAa,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAChD,WAAW,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAC9C,iBAAiB,GAAG,IAAI,CAkC1B;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,QAAQ,CAEtF;AAED,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG,QAAQ,GACzB,iBAAiB,GAAG,SAAS,CAE/B;AAED,wBAAgB,2BAA2B,CACzC,aAAa,EAAE,iBAAiB,GAAG,SAAS,GAC3C,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,CAEjC;AAmBD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAiDtE;AAED,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,iBAAiB,GAAG,SAAS,GAC3C,KAAK,CAAC;IAAE,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;IAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAA;CAAE,CAAC,CAKtE"}
1
+ {"version":3,"file":"wall-frame.d.ts","sourceRoot":"","sources":["../../../src/systems/wall/wall-frame.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAEvD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAK9C,MAAM,MAAM,iBAAiB,GAAG,GAAG,GAAG,GAAG,CAAA;AACzC,MAAM,MAAM,eAAe,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAEtD,KAAK,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,WAAW,GAAG,eAAe,CAAC,CAAA;AAC9D,KAAK,QAAQ,GAAG,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,OAAO,GAAG,KAAK,CAAC,CAAA;AAE3D,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,SAAS,GAAG,eAAe,CAKnE;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAG/D;AAiBD,wBAAgB,eAAe,CAAC,IAAI,EAAE,QAAQ,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,OAAO,CAAA;CAAE,CAEhF;AAED,wBAAgB,eAAe,CAC7B,IAAI,EAAE,QAAQ,EACd,IAAI,EAAE,iBAAiB,GACtB;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,OAAO,CAAA;CAAE,CAElC;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,iBAAiB,GAAG,MAAM,CAGlF;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,EAC9C,aAAa,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAChD,WAAW,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAC9C,iBAAiB,GAAG,IAAI,CAkC1B;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,QAAQ,CAEtF;AAED,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG,QAAQ,GACzB,iBAAiB,GAAG,SAAS,CAE/B;AAED,wBAAgB,2BAA2B,CACzC,aAAa,EAAE,iBAAiB,GAAG,SAAS,GAC3C,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,CAEjC;AAmBD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAyDtE;AAED,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,iBAAiB,GAAG,SAAS,GAC3C,KAAK,CAAC;IAAE,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;IAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAA;CAAE,CAAC,CAKtE"}
@@ -124,6 +124,14 @@ export function reverseWallDirection(wall) {
124
124
  ? {}
125
125
  : { justification: wall.justification === 'a' ? 'b' : 'a' }),
126
126
  ...(wall.curveOffset === undefined ? {} : { curveOffset: -wall.curveOffset }),
127
+ // The old end's top becomes the start. A storey-bound start has no stored height to lift, so
128
+ // only the slope turns; readers that need its heights resolve them (`mergedWallTop`).
129
+ ...(wall.endHeightOffset
130
+ ? {
131
+ endHeightOffset: -wall.endHeightOffset,
132
+ ...(wall.height === undefined ? {} : { height: wall.height + wall.endHeightOffset }),
133
+ }
134
+ : {}),
127
135
  ...(wall.slots === undefined
128
136
  ? {}
129
137
  : {
@@ -10,7 +10,8 @@ export declare function getWallEndpointAtPoint(wall: Pick<WallNode, 'start' | 'e
10
10
  * The delete heal is strict: room sides must match, and a wall following the
11
11
  * storey never joins one with an explicit height. An explicit merge compares
12
12
  * what is visible instead — `heightOf` resolves each wall's actual height — and
13
- * leaves the sides to room detection, which reclassifies the merged wall.
13
+ * leaves the sides to room detection, which reclassifies the merged wall. Sloped
14
+ * tops are matched by `mergedWallTop`, which also builds the merged top.
14
15
  */
15
16
  export declare function wallStyleMismatch(a: WallNode, b: WallNode, options: {
16
17
  sides: boolean;
@@ -36,6 +37,13 @@ export declare function planMergedZoneReferences(nodes: Record<AnyNodeId, AnyNod
36
37
  data: Partial<ZoneNode>;
37
38
  }> | null;
38
39
  export declare function areWallStylesCompatible(a: WallNode, b: WallNode): boolean;
40
+ /**
41
+ * The kept wall's top once `secondary` joins it at `joint`: nothing changes between flat walls;
42
+ * sloped ones take the start height and the summed end offset along the kept wall. Null when the
43
+ * tops don't continue one line — a step at the joint or a different rise per metre.
44
+ * `heightAt` reads a wall's body height at a chord fraction.
45
+ */
46
+ export declare function mergedWallTop(primary: WallNode, secondary: WallNode, joint: [number, number], heightAt: (wall: WallNode, t: number) => number): Pick<WallNode, 'height' | 'endHeightOffset'> | null;
39
47
  export declare function areWallsCollinearAcrossPoint(a: WallNode, b: WallNode, sharedPoint: [number, number]): boolean;
40
48
  export declare function resolveMergedWallEndpoints(primary: WallNode, secondary: WallNode, sharedPoint: [number, number]): {
41
49
  start: [number, number];
@@ -1 +1 @@
1
- {"version":3,"file":"wall-merge.d.ts","sourceRoot":"","sources":["../../../src/systems/wall/wall-merge.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,SAAS,EAMd,KAAK,cAAc,EACnB,KAAK,QAAQ,EACb,KAAK,QAAQ,EACd,MAAM,cAAc,CAAA;AAGrB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AAK1D,MAAM,MAAM,oBAAoB,GAAG;IAAE,EAAE,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;CAAE,CAAA;AAY5E,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,GAAG,KAAK,CAAC,EACrC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,GACtB,OAAO,GAAG,KAAK,GAAG,IAAI,CAIxB;AAMD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,CAAC,EAAE,QAAQ,EACX,CAAC,EAAE,QAAQ,EACX,OAAO,EAAE;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,MAAM,CAAA;CAAE,GACjE,MAAM,GAAG,IAAI,CA+Bf;AA4CD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,SAAS,QAAQ,EAAE,EAC1B,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,GAC1B,cAAc,EAAE,GAAG,IAAI,CAqEzB;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,EACjC,OAAO,EAAE,QAAQ,EACjB,SAAS,EAAE,QAAQ,EACnB,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,GAC1B,KAAK,CAAC;IAAE,EAAE,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAA;CAAE,CAAC,GAAG,IAAI,CA+C1D;AAED,wBAAgB,uBAAuB,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,WAE/D;AAED,wBAAgB,4BAA4B,CAC1C,CAAC,EAAE,QAAQ,EACX,CAAC,EAAE,QAAQ,EACX,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,WAgB9B;AAED,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,QAAQ,EACjB,SAAS,EAAE,QAAQ,EACnB,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,GAC5B;IAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,CAkBpD;AAyBD,wBAAgB,gCAAgC,CAC9C,OAAO,EAAE,QAAQ,EACjB,SAAS,EAAE,QAAQ,EACnB,YAAY,EAAE,SAAS,EACvB,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAC3B,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,GAChC,oBAAoB,EAAE,CAyDxB;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,EACjC,OAAO,EAAE,SAAS,SAAS,EAAE,GAC5B;IAAE,OAAO,EAAE,mBAAmB,CAAC;IAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAA;CAAE,CA8F1D"}
1
+ {"version":3,"file":"wall-merge.d.ts","sourceRoot":"","sources":["../../../src/systems/wall/wall-merge.ts"],"names":[],"mappings":"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"}