@pascal-app/nodes 1.0.1 → 1.0.4

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 (867) hide show
  1. package/dist/block/definition.d.ts.map +1 -1
  2. package/dist/block/definition.js +22 -4
  3. package/dist/block/face-host.d.ts.map +1 -1
  4. package/dist/block/face-host.js +19 -2
  5. package/dist/block/floorplan.d.ts +11 -1
  6. package/dist/block/floorplan.d.ts.map +1 -1
  7. package/dist/block/floorplan.js +81 -13
  8. package/dist/block/geometry.d.ts +2 -2
  9. package/dist/block/geometry.d.ts.map +1 -1
  10. package/dist/block/geometry.js +39 -24
  11. package/dist/block/hosted-edit.d.ts +13 -0
  12. package/dist/block/hosted-edit.d.ts.map +1 -0
  13. package/dist/block/hosted-edit.js +230 -0
  14. package/dist/block/last-operation.d.ts +1 -1
  15. package/dist/block/last-operation.d.ts.map +1 -1
  16. package/dist/block/last-operation.js +6 -4
  17. package/dist/block/material-slots.d.ts +1 -3
  18. package/dist/block/material-slots.d.ts.map +1 -1
  19. package/dist/block/material-slots.js +1 -11
  20. package/dist/block/modal-session.d.ts +2 -1
  21. package/dist/block/modal-session.d.ts.map +1 -1
  22. package/dist/block/modal-session.js +2 -2
  23. package/dist/block/paint.d.ts.map +1 -1
  24. package/dist/block/paint.js +4 -10
  25. package/dist/block/panel.d.ts.map +1 -1
  26. package/dist/block/panel.js +8 -3
  27. package/dist/block/selection.d.ts.map +1 -1
  28. package/dist/block/selection.js +83 -25
  29. package/dist/block/surface.d.ts +4 -0
  30. package/dist/block/surface.d.ts.map +1 -0
  31. package/dist/block/surface.js +54 -0
  32. package/dist/block/use-block-face-operation.d.ts +2 -2
  33. package/dist/block/use-block-face-operation.d.ts.map +1 -1
  34. package/dist/block/use-block-face-operation.js +25 -11
  35. package/dist/box-vent/definition.d.ts.map +1 -1
  36. package/dist/box-vent/definition.js +3 -5
  37. package/dist/box-vent/panel.d.ts.map +1 -1
  38. package/dist/box-vent/panel.js +5 -28
  39. package/dist/building/renderer.d.ts.map +1 -1
  40. package/dist/building/renderer.js +1 -1
  41. package/dist/cabinet/countertop-layout.d.ts +13 -2
  42. package/dist/cabinet/countertop-layout.d.ts.map +1 -1
  43. package/dist/cabinet/definition.d.ts.map +1 -1
  44. package/dist/cabinet/definition.js +4 -3
  45. package/dist/cabinet/floorplan.d.ts.map +1 -1
  46. package/dist/cabinet/floorplan.js +125 -28
  47. package/dist/cabinet/geometry/shared.d.ts +1 -2
  48. package/dist/cabinet/geometry/shared.d.ts.map +1 -1
  49. package/dist/cabinet/geometry/shared.js +1 -2
  50. package/dist/cabinet/hosted-resize.d.ts +3 -6
  51. package/dist/cabinet/hosted-resize.d.ts.map +1 -1
  52. package/dist/cabinet/hosted-resize.js +9 -153
  53. package/dist/cabinet/placement-snap.d.ts.map +1 -1
  54. package/dist/cabinet/placement-snap.js +4 -2
  55. package/dist/cabinet/run-layout.d.ts.map +1 -1
  56. package/dist/cabinet/run-layout.js +8 -5
  57. package/dist/cabinet/run-ops.d.ts +13 -2
  58. package/dist/cabinet/run-ops.d.ts.map +1 -1
  59. package/dist/cabinet/surfaces.d.ts +1 -0
  60. package/dist/cabinet/surfaces.d.ts.map +1 -1
  61. package/dist/cabinet/surfaces.js +13 -1
  62. package/dist/cabinet/tool.d.ts.map +1 -1
  63. package/dist/cabinet/tool.js +30 -28
  64. package/dist/cabinet/wall-snap.d.ts.map +1 -1
  65. package/dist/cabinet/wall-snap.js +8 -8
  66. package/dist/ceiling/boundary-editor.d.ts.map +1 -1
  67. package/dist/ceiling/boundary-editor.js +5 -3
  68. package/dist/ceiling/definition.d.ts +4 -4
  69. package/dist/ceiling/definition.d.ts.map +1 -1
  70. package/dist/ceiling/definition.js +20 -15
  71. package/dist/ceiling/floorplan-affordances.d.ts +84 -4
  72. package/dist/ceiling/floorplan-affordances.d.ts.map +1 -1
  73. package/dist/ceiling/floorplan-affordances.js +0 -1
  74. package/dist/ceiling/floorplan-move.d.ts.map +1 -1
  75. package/dist/ceiling/floorplan-move.js +0 -1
  76. package/dist/ceiling/floorplan.d.ts +1 -1
  77. package/dist/ceiling/floorplan.d.ts.map +1 -1
  78. package/dist/ceiling/floorplan.js +2 -1
  79. package/dist/ceiling/height-bounds.d.ts +19 -0
  80. package/dist/ceiling/height-bounds.d.ts.map +1 -0
  81. package/dist/ceiling/height-bounds.js +24 -0
  82. package/dist/ceiling/hole-editor.d.ts.map +1 -1
  83. package/dist/ceiling/hole-editor.js +3 -4
  84. package/dist/ceiling/materials.d.ts +1 -1
  85. package/dist/ceiling/materials.d.ts.map +1 -1
  86. package/dist/ceiling/materials.js +10 -3
  87. package/dist/ceiling/paint.d.ts +2 -8
  88. package/dist/ceiling/paint.d.ts.map +1 -1
  89. package/dist/ceiling/paint.js +121 -24
  90. package/dist/ceiling/panel.d.ts.map +1 -1
  91. package/dist/ceiling/panel.js +40 -23
  92. package/dist/ceiling/renderer.d.ts.map +1 -1
  93. package/dist/ceiling/renderer.js +43 -6
  94. package/dist/chimney/definition.d.ts.map +1 -1
  95. package/dist/chimney/definition.js +1 -0
  96. package/dist/chimney/move-tool.d.ts.map +1 -1
  97. package/dist/chimney/move-tool.js +8 -2
  98. package/dist/chimney/paint.d.ts.map +1 -1
  99. package/dist/chimney/paint.js +3 -10
  100. package/dist/column/definition.d.ts.map +1 -1
  101. package/dist/column/definition.js +34 -5
  102. package/dist/column/floorplan-affordances.d.ts.map +1 -1
  103. package/dist/column/floorplan-affordances.js +11 -1
  104. package/dist/column/floorplan.d.ts +1 -1
  105. package/dist/column/floorplan.d.ts.map +1 -1
  106. package/dist/column/floorplan.js +69 -12
  107. package/dist/column/hosted-resize.d.ts +215 -0
  108. package/dist/column/hosted-resize.d.ts.map +1 -0
  109. package/dist/column/hosted-resize.js +9 -0
  110. package/dist/column/panel.d.ts.map +1 -1
  111. package/dist/column/panel.js +153 -149
  112. package/dist/column/renderer.d.ts.map +1 -1
  113. package/dist/column/renderer.js +29 -105
  114. package/dist/column/shape.d.ts +22 -0
  115. package/dist/column/shape.d.ts.map +1 -0
  116. package/dist/column/shape.js +120 -0
  117. package/dist/column/surface.d.ts +4 -0
  118. package/dist/column/surface.d.ts.map +1 -0
  119. package/dist/column/surface.js +73 -0
  120. package/dist/construction-dimension/floorplan.js +7 -3
  121. package/dist/cupola/definition.d.ts.map +1 -1
  122. package/dist/cupola/definition.js +3 -8
  123. package/dist/cupola/panel.d.ts.map +1 -1
  124. package/dist/cupola/panel.js +5 -23
  125. package/dist/door/definition.d.ts.map +1 -1
  126. package/dist/door/definition.js +52 -4
  127. package/dist/door/door-math.d.ts +6 -11
  128. package/dist/door/door-math.d.ts.map +1 -1
  129. package/dist/door/door-math.js +13 -17
  130. package/dist/door/floorplan-affordances.d.ts.map +1 -1
  131. package/dist/door/floorplan-affordances.js +8 -12
  132. package/dist/door/floorplan-move.d.ts.map +1 -1
  133. package/dist/door/floorplan-move.js +3 -1
  134. package/dist/door/floorplan.d.ts.map +1 -1
  135. package/dist/door/floorplan.js +55 -21
  136. package/dist/door/mechanism.d.ts +4 -0
  137. package/dist/door/mechanism.d.ts.map +1 -0
  138. package/dist/door/mechanism.js +24 -0
  139. package/dist/door/move-tool.d.ts.map +1 -1
  140. package/dist/door/move-tool.js +75 -52
  141. package/dist/door/paint.d.ts.map +1 -1
  142. package/dist/door/paint.js +3 -0
  143. package/dist/door/panel.d.ts.map +1 -1
  144. package/dist/door/panel.js +54 -308
  145. package/dist/door/placement.d.ts +45 -0
  146. package/dist/door/placement.d.ts.map +1 -0
  147. package/dist/door/placement.js +51 -0
  148. package/dist/door/preview.d.ts.map +1 -1
  149. package/dist/door/preview.js +2 -0
  150. package/dist/door/renderer.d.ts.map +1 -1
  151. package/dist/door/renderer.js +3 -2
  152. package/dist/door/tool.d.ts.map +1 -1
  153. package/dist/door/tool.js +112 -23
  154. package/dist/dormer/csg-geometry.d.ts.map +1 -1
  155. package/dist/dormer/csg-geometry.js +2 -0
  156. package/dist/dormer/definition.d.ts.map +1 -1
  157. package/dist/dormer/definition.js +1 -0
  158. package/dist/dormer/paint.d.ts.map +1 -1
  159. package/dist/dormer/paint.js +2 -5
  160. package/dist/dormer/panel.d.ts.map +1 -1
  161. package/dist/dormer/panel.js +4 -14
  162. package/dist/downspout/definition.d.ts.map +1 -1
  163. package/dist/downspout/definition.js +3 -2
  164. package/dist/duct-fitting/definition.d.ts.map +1 -1
  165. package/dist/duct-fitting/definition.js +2 -1
  166. package/dist/duct-fitting/geometry.d.ts.map +1 -1
  167. package/dist/duct-fitting/geometry.js +1 -1
  168. package/dist/duct-fitting/move-tool.d.ts.map +1 -1
  169. package/dist/duct-fitting/move-tool.js +8 -2
  170. package/dist/duct-segment/definition.d.ts.map +1 -1
  171. package/dist/duct-segment/definition.js +2 -2
  172. package/dist/duct-segment/geometry.d.ts.map +1 -1
  173. package/dist/duct-segment/geometry.js +1 -1
  174. package/dist/duct-segment/move-tool.d.ts.map +1 -1
  175. package/dist/duct-segment/move-tool.js +8 -2
  176. package/dist/duct-segment/tool.d.ts.map +1 -1
  177. package/dist/duct-segment/tool.js +11 -0
  178. package/dist/duct-terminal/tool.d.ts.map +1 -1
  179. package/dist/duct-terminal/tool.js +77 -8
  180. package/dist/elevator/definition.d.ts.map +1 -1
  181. package/dist/elevator/definition.js +3 -2
  182. package/dist/elevator/panel.d.ts.map +1 -1
  183. package/dist/elevator/panel.js +5 -27
  184. package/dist/elevator/parametrics.d.ts.map +1 -1
  185. package/dist/elevator/parametrics.js +98 -1
  186. package/dist/elevator/renderer.d.ts.map +1 -1
  187. package/dist/elevator/renderer.js +3 -4
  188. package/dist/eyebrow-vent/definition.d.ts.map +1 -1
  189. package/dist/eyebrow-vent/definition.js +3 -5
  190. package/dist/eyebrow-vent/paint.d.ts.map +1 -1
  191. package/dist/eyebrow-vent/paint.js +3 -6
  192. package/dist/eyebrow-vent/panel.d.ts.map +1 -1
  193. package/dist/eyebrow-vent/panel.js +5 -23
  194. package/dist/fence/actions/move-endpoint.d.ts +1 -1
  195. package/dist/fence/actions/move-endpoint.d.ts.map +1 -1
  196. package/dist/fence/actions/move-endpoint.js +2 -1
  197. package/dist/fence/definition.d.ts +2 -1
  198. package/dist/fence/definition.d.ts.map +1 -1
  199. package/dist/fence/definition.js +84 -28
  200. package/dist/fence/drafting.d.ts +36 -0
  201. package/dist/fence/drafting.d.ts.map +1 -0
  202. package/dist/fence/drafting.js +210 -0
  203. package/dist/fence/feature-tool.d.ts +4 -0
  204. package/dist/fence/feature-tool.d.ts.map +1 -0
  205. package/dist/fence/feature-tool.js +140 -0
  206. package/dist/fence/features.d.ts +2 -0
  207. package/dist/fence/features.d.ts.map +1 -0
  208. package/dist/fence/features.js +12 -0
  209. package/dist/fence/floorplan-affordances.d.ts.map +1 -1
  210. package/dist/fence/floorplan-affordances.js +2 -1
  211. package/dist/fence/floorplan.d.ts +2 -3
  212. package/dist/fence/floorplan.d.ts.map +1 -1
  213. package/dist/fence/floorplan.js +131 -71
  214. package/dist/fence/geometry-parts.d.ts +50 -0
  215. package/dist/fence/geometry-parts.d.ts.map +1 -0
  216. package/dist/fence/geometry-parts.js +1144 -0
  217. package/dist/fence/geometry.d.ts +2 -3
  218. package/dist/fence/geometry.d.ts.map +1 -1
  219. package/dist/fence/geometry.js +84 -7
  220. package/dist/fence/index.d.ts +1 -0
  221. package/dist/fence/index.d.ts.map +1 -1
  222. package/dist/fence/index.js +1 -0
  223. package/dist/fence/inspector-editors.d.ts +15 -0
  224. package/dist/fence/inspector-editors.d.ts.map +1 -1
  225. package/dist/fence/inspector-editors.js +128 -3
  226. package/dist/fence/lift.d.ts.map +1 -1
  227. package/dist/fence/lift.js +5 -2
  228. package/dist/fence/move-tool.js +2 -1
  229. package/dist/fence/panel-model.d.ts +4 -0
  230. package/dist/fence/panel-model.d.ts.map +1 -0
  231. package/dist/fence/panel-model.js +12 -0
  232. package/dist/fence/parametrics.d.ts +0 -12
  233. package/dist/fence/parametrics.d.ts.map +1 -1
  234. package/dist/fence/parametrics.js +185 -18
  235. package/dist/fence/system.d.ts.map +1 -1
  236. package/dist/fence/system.js +141 -31
  237. package/dist/fence/tool.d.ts.map +1 -1
  238. package/dist/fence/tool.js +257 -48
  239. package/dist/fence-feature/actions.d.ts +7 -0
  240. package/dist/fence-feature/actions.d.ts.map +1 -0
  241. package/dist/fence-feature/actions.js +26 -0
  242. package/dist/fence-feature/definition.d.ts +4 -0
  243. package/dist/fence-feature/definition.d.ts.map +1 -0
  244. package/dist/fence-feature/definition.js +112 -0
  245. package/dist/fence-feature/floorplan-affordances.d.ts +3 -0
  246. package/dist/fence-feature/floorplan-affordances.d.ts.map +1 -0
  247. package/dist/fence-feature/floorplan-affordances.js +37 -0
  248. package/dist/fence-feature/floorplan.d.ts +4 -0
  249. package/dist/fence-feature/floorplan.d.ts.map +1 -0
  250. package/dist/fence-feature/floorplan.js +120 -0
  251. package/dist/fence-feature/geometry.d.ts +5 -0
  252. package/dist/fence-feature/geometry.d.ts.map +1 -0
  253. package/dist/fence-feature/geometry.js +43 -0
  254. package/dist/fence-feature/handles.d.ts +5 -0
  255. package/dist/fence-feature/handles.d.ts.map +1 -0
  256. package/dist/fence-feature/handles.js +84 -0
  257. package/dist/fence-feature/inspector.d.ts +6 -0
  258. package/dist/fence-feature/inspector.d.ts.map +1 -0
  259. package/dist/fence-feature/inspector.js +214 -0
  260. package/dist/fence-feature/interaction.d.ts +3 -0
  261. package/dist/fence-feature/interaction.d.ts.map +1 -0
  262. package/dist/fence-feature/interaction.js +41 -0
  263. package/dist/fence-feature/move-session.d.ts +9 -0
  264. package/dist/fence-feature/move-session.d.ts.map +1 -0
  265. package/dist/fence-feature/move-session.js +48 -0
  266. package/dist/fence-feature/move-tool.d.ts +5 -0
  267. package/dist/fence-feature/move-tool.d.ts.map +1 -0
  268. package/dist/fence-feature/move-tool.js +58 -0
  269. package/dist/fence-feature/pick-target.d.ts +7 -0
  270. package/dist/fence-feature/pick-target.d.ts.map +1 -0
  271. package/dist/fence-feature/pick-target.js +52 -0
  272. package/dist/floor-opening/definition.d.ts +3 -0
  273. package/dist/floor-opening/definition.d.ts.map +1 -0
  274. package/dist/floor-opening/definition.js +41 -0
  275. package/dist/floor-opening/floorplan.d.ts +156 -0
  276. package/dist/floor-opening/floorplan.d.ts.map +1 -0
  277. package/dist/floor-opening/floorplan.js +63 -0
  278. package/dist/guide/definition.d.ts.map +1 -1
  279. package/dist/guide/definition.js +1 -0
  280. package/dist/gutter/definition.d.ts.map +1 -1
  281. package/dist/gutter/definition.js +3 -2
  282. package/dist/hvac-equipment/tool.d.ts.map +1 -1
  283. package/dist/hvac-equipment/tool.js +8 -2
  284. package/dist/imported-mesh/definition.d.ts.map +1 -1
  285. package/dist/imported-mesh/definition.js +2 -0
  286. package/dist/imported-mesh/geometry.d.ts +1 -1
  287. package/dist/imported-mesh/geometry.d.ts.map +1 -1
  288. package/dist/imported-mesh/geometry.js +40 -12
  289. package/dist/index.d.ts +13 -2
  290. package/dist/index.d.ts.map +1 -1
  291. package/dist/index.js +20 -2
  292. package/dist/item/authored-face-host.d.ts +10 -0
  293. package/dist/item/authored-face-host.d.ts.map +1 -0
  294. package/dist/item/authored-face-host.js +87 -0
  295. package/dist/item/authored-params.d.ts +15 -0
  296. package/dist/item/authored-params.d.ts.map +1 -0
  297. package/dist/item/authored-params.js +72 -0
  298. package/dist/item/definition.d.ts +2 -2
  299. package/dist/item/definition.d.ts.map +1 -1
  300. package/dist/item/definition.js +35 -4
  301. package/dist/item/floorplan-move.d.ts.map +1 -1
  302. package/dist/item/floorplan-move.js +209 -130
  303. package/dist/item/floorplan.d.ts +22 -0
  304. package/dist/item/floorplan.d.ts.map +1 -1
  305. package/dist/item/floorplan.js +95 -6
  306. package/dist/item/index.d.ts +1 -0
  307. package/dist/item/index.d.ts.map +1 -1
  308. package/dist/item/index.js +1 -0
  309. package/dist/item/model-loader.d.ts +2 -0
  310. package/dist/item/model-loader.d.ts.map +1 -1
  311. package/dist/item/model-loader.js +55 -23
  312. package/dist/item/move-tool.d.ts +1 -1
  313. package/dist/item/move-tool.d.ts.map +1 -1
  314. package/dist/item/move-tool.js +19 -11
  315. package/dist/item/paint.d.ts.map +1 -1
  316. package/dist/item/paint.js +5 -24
  317. package/dist/item/panel.d.ts +1 -3
  318. package/dist/item/panel.d.ts.map +1 -1
  319. package/dist/item/panel.js +20 -24
  320. package/dist/item/placement-notice.d.ts +14 -0
  321. package/dist/item/placement-notice.d.ts.map +1 -0
  322. package/dist/item/placement-notice.js +38 -0
  323. package/dist/item/plan-symbols.d.ts +67 -0
  324. package/dist/item/plan-symbols.d.ts.map +1 -0
  325. package/dist/item/plan-symbols.js +407 -0
  326. package/dist/item/renderer.d.ts +10 -0
  327. package/dist/item/renderer.d.ts.map +1 -1
  328. package/dist/item/renderer.js +72 -40
  329. package/dist/item/script-param-defaults.d.ts +12 -0
  330. package/dist/item/script-param-defaults.d.ts.map +1 -0
  331. package/dist/item/script-param-defaults.js +34 -0
  332. package/dist/lean-to-extension/definition.d.ts.map +1 -1
  333. package/dist/lean-to-extension/definition.js +1 -2
  334. package/dist/lean-to-extension/geometry.d.ts.map +1 -1
  335. package/dist/lean-to-extension/geometry.js +1 -1
  336. package/dist/lean-to-extension/layout.d.ts.map +1 -1
  337. package/dist/lean-to-extension/layout.js +2 -3
  338. package/dist/lean-to-extension/placement-validation.d.ts.map +1 -1
  339. package/dist/lean-to-extension/placement-validation.js +5 -5
  340. package/dist/lean-to-extension/tool.d.ts.map +1 -1
  341. package/dist/lean-to-extension/tool.js +5 -5
  342. package/dist/level/renderer.js +1 -1
  343. package/dist/lineset/move-tool.d.ts.map +1 -1
  344. package/dist/lineset/move-tool.js +8 -2
  345. package/dist/lineset/tool.d.ts.map +1 -1
  346. package/dist/lineset/tool.js +1 -0
  347. package/dist/liquid-line/move-tool.d.ts.map +1 -1
  348. package/dist/liquid-line/move-tool.js +8 -2
  349. package/dist/liquid-line/tool.d.ts.map +1 -1
  350. package/dist/liquid-line/tool.js +5 -1
  351. package/dist/measurement/definition.d.ts.map +1 -1
  352. package/dist/measurement/definition.js +2 -1
  353. package/dist/pipe-fitting/move-tool.d.ts.map +1 -1
  354. package/dist/pipe-fitting/move-tool.js +8 -2
  355. package/dist/pipe-segment/move-tool.d.ts.map +1 -1
  356. package/dist/pipe-segment/move-tool.js +8 -2
  357. package/dist/pipe-segment/tool.d.ts.map +1 -1
  358. package/dist/pipe-segment/tool.js +14 -3
  359. package/dist/pipe-trap/tool.d.ts.map +1 -1
  360. package/dist/pipe-trap/tool.js +7 -8
  361. package/dist/procedural-item/animation.d.ts +8 -0
  362. package/dist/procedural-item/animation.d.ts.map +1 -0
  363. package/dist/procedural-item/animation.js +116 -0
  364. package/dist/procedural-item/definition.d.ts.map +1 -1
  365. package/dist/procedural-item/definition.js +77 -8
  366. package/dist/procedural-item/geometry.d.ts +5 -1
  367. package/dist/procedural-item/geometry.d.ts.map +1 -1
  368. package/dist/procedural-item/geometry.js +239 -15
  369. package/dist/procedural-item/renderer.d.ts.map +1 -1
  370. package/dist/procedural-item/renderer.js +272 -23
  371. package/dist/ridge-vent/definition.d.ts.map +1 -1
  372. package/dist/ridge-vent/definition.js +1 -0
  373. package/dist/ridge-vent/panel.d.ts.map +1 -1
  374. package/dist/ridge-vent/panel.js +5 -23
  375. package/dist/ridge-vent/renderer.d.ts.map +1 -1
  376. package/dist/ridge-vent/renderer.js +9 -8
  377. package/dist/roof/definition.d.ts.map +1 -1
  378. package/dist/roof/definition.js +8 -2
  379. package/dist/roof/floorplan.d.ts +8 -0
  380. package/dist/roof/floorplan.d.ts.map +1 -1
  381. package/dist/roof/floorplan.js +194 -18
  382. package/dist/roof/panel-model.d.ts +4 -0
  383. package/dist/roof/panel-model.d.ts.map +1 -0
  384. package/dist/roof/panel-model.js +155 -0
  385. package/dist/roof/panel.d.ts.map +1 -1
  386. package/dist/roof/panel.js +5 -13
  387. package/dist/roof/parametrics.d.ts.map +1 -1
  388. package/dist/roof/parametrics.js +16 -1
  389. package/dist/roof/renderer.d.ts.map +1 -1
  390. package/dist/roof/renderer.js +5 -2
  391. package/dist/roof-segment/definition.d.ts.map +1 -1
  392. package/dist/roof-segment/definition.js +1 -0
  393. package/dist/roof-segment/panel.d.ts.map +1 -1
  394. package/dist/roof-segment/panel.js +5 -24
  395. package/dist/roof-segment/parametrics.d.ts.map +1 -1
  396. package/dist/roof-segment/parametrics.js +176 -1
  397. package/dist/roof-segment/renderer.d.ts.map +1 -1
  398. package/dist/roof-segment/renderer.js +17 -8
  399. package/dist/scan/definition.d.ts.map +1 -1
  400. package/dist/scan/definition.js +1 -0
  401. package/dist/separator/definition.d.ts +3 -0
  402. package/dist/separator/definition.d.ts.map +1 -0
  403. package/dist/separator/definition.js +39 -0
  404. package/dist/separator/renderer.d.ts +5 -0
  405. package/dist/separator/renderer.d.ts.map +1 -0
  406. package/dist/separator/renderer.js +36 -0
  407. package/dist/shared/commit-opening-move.d.ts +4 -0
  408. package/dist/shared/commit-opening-move.d.ts.map +1 -0
  409. package/dist/shared/commit-opening-move.js +9 -0
  410. package/dist/shared/curtain-opening-limits.d.ts +14 -0
  411. package/dist/shared/curtain-opening-limits.d.ts.map +1 -0
  412. package/dist/shared/curtain-opening-limits.js +53 -0
  413. package/dist/shared/draft-axis-guides.d.ts +0 -6
  414. package/dist/shared/draft-axis-guides.d.ts.map +1 -1
  415. package/dist/shared/draft-axis-guides.js +1 -8
  416. package/dist/shared/duct-body-paint.d.ts +0 -4
  417. package/dist/shared/duct-body-paint.d.ts.map +1 -1
  418. package/dist/shared/duct-body-paint.js +1 -5
  419. package/dist/shared/hosted-resize.d.ts +12 -0
  420. package/dist/shared/hosted-resize.d.ts.map +1 -0
  421. package/dist/shared/hosted-resize.js +166 -0
  422. package/dist/shared/item-interaction-actions.d.ts +6 -0
  423. package/dist/shared/item-interaction-actions.d.ts.map +1 -0
  424. package/dist/shared/item-interaction-actions.js +27 -0
  425. package/dist/shared/item-interactions.d.ts +9 -0
  426. package/dist/shared/item-interactions.d.ts.map +1 -0
  427. package/dist/shared/item-interactions.js +74 -0
  428. package/dist/shared/item-light-placement.d.ts +2 -0
  429. package/dist/shared/item-light-placement.d.ts.map +1 -0
  430. package/dist/shared/item-light-placement.js +3 -0
  431. package/dist/shared/move-roof-tool.js +2 -1
  432. package/dist/shared/node-batch/batchable.d.ts +12 -0
  433. package/dist/shared/node-batch/batchable.d.ts.map +1 -0
  434. package/dist/shared/node-batch/batchable.js +41 -0
  435. package/dist/shared/node-batch/candidates.d.ts +7 -5
  436. package/dist/shared/node-batch/candidates.d.ts.map +1 -1
  437. package/dist/shared/node-batch/candidates.js +43 -59
  438. package/dist/shared/node-batch/release.d.ts +8 -0
  439. package/dist/shared/node-batch/release.d.ts.map +1 -0
  440. package/dist/shared/node-batch/release.js +16 -0
  441. package/dist/shared/node-batch/system.d.ts.map +1 -1
  442. package/dist/shared/node-batch/system.js +17 -12
  443. package/dist/shared/node-batch/types.d.ts +4 -1
  444. package/dist/shared/node-batch/types.d.ts.map +1 -1
  445. package/dist/shared/opening-documentation.d.ts +13 -1
  446. package/dist/shared/opening-documentation.d.ts.map +1 -1
  447. package/dist/shared/opening-documentation.js +245 -59
  448. package/dist/shared/opening-grid-follow.d.ts +8 -0
  449. package/dist/shared/opening-grid-follow.d.ts.map +1 -0
  450. package/dist/shared/opening-grid-follow.js +12 -0
  451. package/dist/shared/opening-guides-runtime.d.ts.map +1 -1
  452. package/dist/shared/opening-guides-runtime.js +17 -14
  453. package/dist/shared/opening-placement-dimensions.d.ts.map +1 -1
  454. package/dist/shared/opening-placement-dimensions.js +3 -3
  455. package/dist/shared/opening-plane-offset.d.ts +23 -0
  456. package/dist/shared/opening-plane-offset.d.ts.map +1 -0
  457. package/dist/shared/opening-plane-offset.js +24 -0
  458. package/dist/shared/opening-property-preview-host.d.ts +3 -0
  459. package/dist/shared/opening-property-preview-host.d.ts.map +1 -0
  460. package/dist/shared/opening-property-preview-host.js +21 -0
  461. package/dist/shared/opening-property-preview.d.ts +19 -0
  462. package/dist/shared/opening-property-preview.d.ts.map +1 -0
  463. package/dist/shared/opening-property-preview.js +99 -0
  464. package/dist/shared/polygon-centroid-move.d.ts.map +1 -1
  465. package/dist/shared/polygon-centroid-move.js +4 -1
  466. package/dist/shared/polygon-vertex-affordance.d.ts.map +1 -1
  467. package/dist/shared/polygon-vertex-affordance.js +19 -15
  468. package/dist/shared/resting-surface-plan.d.ts +2 -1
  469. package/dist/shared/resting-surface-plan.d.ts.map +1 -1
  470. package/dist/shared/resting-surface-plan.js +29 -4
  471. package/dist/shared/run-hangers.d.ts.map +1 -1
  472. package/dist/shared/run-hangers.js +5 -4
  473. package/dist/shared/scripted-opening-handles.d.ts +18 -0
  474. package/dist/shared/scripted-opening-handles.d.ts.map +1 -0
  475. package/dist/shared/scripted-opening-handles.js +53 -0
  476. package/dist/shared/scripted-opening.d.ts +25 -0
  477. package/dist/shared/scripted-opening.d.ts.map +1 -0
  478. package/dist/shared/scripted-opening.js +72 -0
  479. package/dist/shared/slot-paint.d.ts +14 -2
  480. package/dist/shared/slot-paint.d.ts.map +1 -1
  481. package/dist/shared/slot-paint.js +29 -29
  482. package/dist/shared/surface-counterparts.d.ts +12 -0
  483. package/dist/shared/surface-counterparts.d.ts.map +1 -0
  484. package/dist/shared/surface-counterparts.js +27 -0
  485. package/dist/shared/surface-paint.d.ts.map +1 -1
  486. package/dist/shared/surface-paint.js +2 -5
  487. package/dist/shared/swap-preview-material.d.ts +11 -0
  488. package/dist/shared/swap-preview-material.d.ts.map +1 -0
  489. package/dist/shared/swap-preview-material.js +16 -0
  490. package/dist/shared/system-checks.d.ts.map +1 -1
  491. package/dist/shared/system-checks.js +5 -3
  492. package/dist/shared/wall-attach-target.d.ts +4 -10
  493. package/dist/shared/wall-attach-target.d.ts.map +1 -1
  494. package/dist/shared/wall-attach-target.js +6 -63
  495. package/dist/shared/wall-event-from-grid.d.ts +5 -0
  496. package/dist/shared/wall-event-from-grid.d.ts.map +1 -0
  497. package/dist/shared/wall-event-from-grid.js +36 -0
  498. package/dist/shared/wall-opening-ceiling.d.ts +5 -15
  499. package/dist/shared/wall-opening-ceiling.d.ts.map +1 -1
  500. package/dist/shared/wall-opening-ceiling.js +10 -18
  501. package/dist/shelf/definition.d.ts.map +1 -1
  502. package/dist/shelf/definition.js +4 -2
  503. package/dist/shelf/floorplan.d.ts.map +1 -1
  504. package/dist/shelf/floorplan.js +9 -2
  505. package/dist/shelf/geometry.d.ts.map +1 -1
  506. package/dist/shelf/geometry.js +1 -2
  507. package/dist/shelf/paint.d.ts.map +1 -1
  508. package/dist/shelf/paint.js +4 -10
  509. package/dist/site/line-ribbon.d.ts +31 -0
  510. package/dist/site/line-ribbon.d.ts.map +1 -0
  511. package/dist/site/line-ribbon.js +117 -0
  512. package/dist/site/lot-mask.d.ts +18 -0
  513. package/dist/site/lot-mask.d.ts.map +1 -0
  514. package/dist/site/lot-mask.js +35 -0
  515. package/dist/site/panel.d.ts +10 -0
  516. package/dist/site/panel.d.ts.map +1 -0
  517. package/dist/site/panel.js +155 -0
  518. package/dist/site/parametrics.d.ts +7 -0
  519. package/dist/site/parametrics.d.ts.map +1 -1
  520. package/dist/site/parametrics.js +8 -0
  521. package/dist/site/recessed-slab-ground-holes.d.ts.map +1 -1
  522. package/dist/site/recessed-slab-ground-holes.js +5 -2
  523. package/dist/site/renderer.d.ts.map +1 -1
  524. package/dist/site/renderer.js +158 -20
  525. package/dist/site/setbacks.d.ts +33 -0
  526. package/dist/site/setbacks.d.ts.map +1 -0
  527. package/dist/site/setbacks.js +204 -0
  528. package/dist/site/terrain-geometry.d.ts +28 -1
  529. package/dist/site/terrain-geometry.d.ts.map +1 -1
  530. package/dist/site/terrain-geometry.js +78 -4
  531. package/dist/site/terrain-holes.d.ts +15 -0
  532. package/dist/site/terrain-holes.d.ts.map +1 -0
  533. package/dist/site/terrain-holes.js +74 -0
  534. package/dist/site/terrain-mesh.d.ts +9 -2
  535. package/dist/site/terrain-mesh.d.ts.map +1 -1
  536. package/dist/site/terrain-mesh.js +36 -9
  537. package/dist/site/terrain-renderer.d.ts +9 -2
  538. package/dist/site/terrain-renderer.d.ts.map +1 -1
  539. package/dist/site/terrain-renderer.js +14 -4
  540. package/dist/skylight/definition.d.ts.map +1 -1
  541. package/dist/skylight/definition.js +1 -0
  542. package/dist/slab/boundary-editor.d.ts +1 -1
  543. package/dist/slab/boundary-editor.d.ts.map +1 -1
  544. package/dist/slab/boundary-editor.js +13 -13
  545. package/dist/slab/definition.d.ts.map +1 -1
  546. package/dist/slab/definition.js +23 -3
  547. package/dist/slab/dependency-tracker.d.ts.map +1 -1
  548. package/dist/slab/dependency-tracker.js +67 -7
  549. package/dist/slab/elevation-limit.d.ts.map +1 -1
  550. package/dist/slab/elevation-limit.js +2 -2
  551. package/dist/slab/floorplan-affordances.d.ts +176 -4
  552. package/dist/slab/floorplan-affordances.d.ts.map +1 -1
  553. package/dist/slab/floorplan-affordances.js +0 -1
  554. package/dist/slab/floorplan-move.d.ts.map +1 -1
  555. package/dist/slab/floorplan-move.js +3 -4
  556. package/dist/slab/floorplan.d.ts +7 -0
  557. package/dist/slab/floorplan.d.ts.map +1 -1
  558. package/dist/slab/floorplan.js +22 -5
  559. package/dist/slab/geometry.d.ts.map +1 -1
  560. package/dist/slab/geometry.js +186 -76
  561. package/dist/slab/move-tool.js +7 -6
  562. package/dist/slab/paint.d.ts +18 -5
  563. package/dist/slab/paint.d.ts.map +1 -1
  564. package/dist/slab/paint.js +458 -9
  565. package/dist/slab/panel.d.ts.map +1 -1
  566. package/dist/slab/panel.js +28 -9
  567. package/dist/slab/placement-ownership.d.ts +2 -1
  568. package/dist/slab/placement-ownership.d.ts.map +1 -1
  569. package/dist/slab/placement-ownership.js +2 -2
  570. package/dist/slab/surface-split.d.ts +24 -0
  571. package/dist/slab/surface-split.d.ts.map +1 -0
  572. package/dist/slab/surface-split.js +389 -0
  573. package/dist/slab/tool.d.ts.map +1 -1
  574. package/dist/slab/tool.js +3 -3
  575. package/dist/solar-panel/definition.d.ts.map +1 -1
  576. package/dist/solar-panel/definition.js +1 -0
  577. package/dist/spawn/definition.d.ts.map +1 -1
  578. package/dist/spawn/definition.js +1 -0
  579. package/dist/stair/baluster-geometry.d.ts +21 -0
  580. package/dist/stair/baluster-geometry.d.ts.map +1 -0
  581. package/dist/stair/baluster-geometry.js +74 -0
  582. package/dist/stair/baluster-guard.d.ts +50 -0
  583. package/dist/stair/baluster-guard.d.ts.map +1 -0
  584. package/dist/stair/baluster-guard.js +71 -0
  585. package/dist/stair/boards-guard.d.ts +37 -0
  586. package/dist/stair/boards-guard.d.ts.map +1 -0
  587. package/dist/stair/boards-guard.js +61 -0
  588. package/dist/stair/cable-guard.d.ts +39 -0
  589. package/dist/stair/cable-guard.d.ts.map +1 -0
  590. package/dist/stair/cable-guard.js +105 -0
  591. package/dist/stair/construction-controls.d.ts +15 -0
  592. package/dist/stair/construction-controls.d.ts.map +1 -0
  593. package/dist/stair/construction-controls.js +29 -0
  594. package/dist/stair/continuous-railings.d.ts +10 -0
  595. package/dist/stair/continuous-railings.d.ts.map +1 -0
  596. package/dist/stair/continuous-railings.js +159 -0
  597. package/dist/stair/definition.d.ts.map +1 -1
  598. package/dist/stair/definition.js +18 -37
  599. package/dist/stair/documentation.d.ts +1 -1
  600. package/dist/stair/documentation.d.ts.map +1 -1
  601. package/dist/stair/documentation.js +10 -17
  602. package/dist/stair/floorplan-affordances.d.ts.map +1 -1
  603. package/dist/stair/floorplan-affordances.js +9 -25
  604. package/dist/stair/floorplan.d.ts +1 -23
  605. package/dist/stair/floorplan.d.ts.map +1 -1
  606. package/dist/stair/floorplan.js +102 -86
  607. package/dist/stair/glass-guard.d.ts +72 -0
  608. package/dist/stair/glass-guard.d.ts.map +1 -0
  609. package/dist/stair/glass-guard.js +167 -0
  610. package/dist/stair/guard-path.d.ts +119 -0
  611. package/dist/stair/guard-path.d.ts.map +1 -0
  612. package/dist/stair/guard-path.js +208 -0
  613. package/dist/stair/materials.d.ts +11 -0
  614. package/dist/stair/materials.d.ts.map +1 -0
  615. package/dist/stair/materials.js +51 -0
  616. package/dist/stair/metal-guard.d.ts +38 -0
  617. package/dist/stair/metal-guard.d.ts.map +1 -0
  618. package/dist/stair/metal-guard.js +79 -0
  619. package/dist/stair/paint.d.ts +32 -0
  620. package/dist/stair/paint.d.ts.map +1 -1
  621. package/dist/stair/paint.js +75 -36
  622. package/dist/stair/panel.d.ts.map +1 -1
  623. package/dist/stair/panel.js +154 -17
  624. package/dist/stair/parametrics.d.ts +1 -1
  625. package/dist/stair/parametrics.d.ts.map +1 -1
  626. package/dist/stair/parametrics.js +181 -1
  627. package/dist/stair/plan-entry.d.ts +31 -0
  628. package/dist/stair/plan-entry.d.ts.map +1 -0
  629. package/dist/stair/plan-entry.js +325 -0
  630. package/dist/stair/post-and-rail-guard.d.ts +31 -0
  631. package/dist/stair/post-and-rail-guard.d.ts.map +1 -0
  632. package/dist/stair/post-and-rail-guard.js +63 -0
  633. package/dist/stair/railing-controls.d.ts +9 -0
  634. package/dist/stair/railing-controls.d.ts.map +1 -0
  635. package/dist/stair/railing-controls.js +49 -0
  636. package/dist/stair/renderer.d.ts.map +1 -1
  637. package/dist/stair/renderer.js +259 -259
  638. package/dist/stair/use-stair-render-data.d.ts +317 -0
  639. package/dist/stair/use-stair-render-data.d.ts.map +1 -0
  640. package/dist/stair/use-stair-render-data.js +73 -0
  641. package/dist/stair-segment/definition.d.ts.map +1 -1
  642. package/dist/stair-segment/definition.js +52 -10
  643. package/dist/stair-segment/panel.d.ts.map +1 -1
  644. package/dist/stair-segment/panel.js +36 -42
  645. package/dist/stair-segment/parametrics.d.ts +1 -1
  646. package/dist/stair-segment/parametrics.d.ts.map +1 -1
  647. package/dist/stair-segment/parametrics.js +94 -1
  648. package/dist/stair-segment/renderer.d.ts.map +1 -1
  649. package/dist/stair-segment/renderer.js +16 -28
  650. package/dist/turbine-vent/definition.d.ts.map +1 -1
  651. package/dist/turbine-vent/definition.js +3 -5
  652. package/dist/turbine-vent/paint.d.ts.map +1 -1
  653. package/dist/turbine-vent/paint.js +2 -5
  654. package/dist/turbine-vent/panel.d.ts.map +1 -1
  655. package/dist/turbine-vent/panel.js +5 -23
  656. package/dist/unit/unit-panel.d.ts.map +1 -1
  657. package/dist/unit/unit-panel.js +6 -1
  658. package/dist/wall/actions.d.ts +3 -0
  659. package/dist/wall/actions.d.ts.map +1 -0
  660. package/dist/wall/actions.js +61 -0
  661. package/dist/wall/construction-dimensions.js +8 -5
  662. package/dist/wall/contextual-dimensions.js +4 -4
  663. package/dist/wall/curtain-opening-frame.d.ts +14 -0
  664. package/dist/wall/curtain-opening-frame.d.ts.map +1 -0
  665. package/dist/wall/curtain-opening-frame.js +111 -0
  666. package/dist/wall/curtain-panel-highlight.d.ts +3 -0
  667. package/dist/wall/curtain-panel-highlight.d.ts.map +1 -0
  668. package/dist/wall/curtain-panel-highlight.js +113 -0
  669. package/dist/wall/curtain-wall-adapter.d.ts +3 -0
  670. package/dist/wall/curtain-wall-adapter.d.ts.map +1 -0
  671. package/dist/wall/curtain-wall-adapter.js +55 -0
  672. package/dist/wall/curtain-wall-floorplan.d.ts +3 -0
  673. package/dist/wall/curtain-wall-floorplan.d.ts.map +1 -0
  674. package/dist/wall/curtain-wall-floorplan.js +91 -0
  675. package/dist/wall/curtain-wall-geometry.d.ts +4 -0
  676. package/dist/wall/curtain-wall-geometry.d.ts.map +1 -0
  677. package/dist/wall/curtain-wall-geometry.js +226 -0
  678. package/dist/wall/curtain-wall-layout.d.ts +16 -0
  679. package/dist/wall/curtain-wall-layout.d.ts.map +1 -0
  680. package/dist/wall/curtain-wall-layout.js +176 -0
  681. package/dist/wall/curtain-wall-materials.d.ts +5 -0
  682. package/dist/wall/curtain-wall-materials.d.ts.map +1 -0
  683. package/dist/wall/curtain-wall-materials.js +55 -0
  684. package/dist/wall/curtain-wall-panel.d.ts +14 -0
  685. package/dist/wall/curtain-wall-panel.d.ts.map +1 -0
  686. package/dist/wall/curtain-wall-panel.js +167 -0
  687. package/dist/wall/curtain-wall-piece-geometry.d.ts +5 -0
  688. package/dist/wall/curtain-wall-piece-geometry.d.ts.map +1 -0
  689. package/dist/wall/curtain-wall-piece-geometry.js +220 -0
  690. package/dist/wall/curtain-wall-shadow.d.ts +4 -0
  691. package/dist/wall/curtain-wall-shadow.d.ts.map +1 -0
  692. package/dist/wall/curtain-wall-shadow.js +15 -0
  693. package/dist/wall/curve-tool.d.ts.map +1 -1
  694. package/dist/wall/curve-tool.js +4 -0
  695. package/dist/wall/definition.d.ts +0 -15
  696. package/dist/wall/definition.d.ts.map +1 -1
  697. package/dist/wall/definition.js +92 -7
  698. package/dist/wall/floorplan-move.d.ts +1 -1
  699. package/dist/wall/floorplan-move.d.ts.map +1 -1
  700. package/dist/wall/floorplan-move.js +20 -83
  701. package/dist/wall/floorplan-tool.d.ts +4 -0
  702. package/dist/wall/floorplan-tool.d.ts.map +1 -0
  703. package/dist/wall/floorplan-tool.js +106 -0
  704. package/dist/wall/floorplan.d.ts +3 -1
  705. package/dist/wall/floorplan.d.ts.map +1 -1
  706. package/dist/wall/floorplan.js +189 -22
  707. package/dist/wall/length-patch.d.ts +3 -0
  708. package/dist/wall/length-patch.d.ts.map +1 -0
  709. package/dist/wall/length-patch.js +14 -0
  710. package/dist/wall/measurement.d.ts.map +1 -1
  711. package/dist/wall/measurement.js +5 -5
  712. package/dist/wall/move-endpoint-tool.d.ts.map +1 -1
  713. package/dist/wall/move-endpoint-tool.js +20 -7
  714. package/dist/wall/move-shared.d.ts.map +1 -1
  715. package/dist/wall/move-shared.js +11 -7
  716. package/dist/wall/move-tool.d.ts.map +1 -1
  717. package/dist/wall/move-tool.js +140 -148
  718. package/dist/wall/paint.d.ts +26 -15
  719. package/dist/wall/paint.d.ts.map +1 -1
  720. package/dist/wall/paint.js +339 -115
  721. package/dist/wall/panel-model.d.ts +22 -0
  722. package/dist/wall/panel-model.d.ts.map +1 -0
  723. package/dist/wall/panel-model.js +175 -0
  724. package/dist/wall/panel.d.ts.map +1 -1
  725. package/dist/wall/panel.js +233 -61
  726. package/dist/wall/parametrics.d.ts.map +1 -1
  727. package/dist/wall/parametrics.js +3 -0
  728. package/dist/wall/property-preview.d.ts +7 -0
  729. package/dist/wall/property-preview.d.ts.map +1 -0
  730. package/dist/wall/property-preview.js +31 -0
  731. package/dist/wall/rectangle-command.d.ts +248 -0
  732. package/dist/wall/rectangle-command.d.ts.map +1 -0
  733. package/dist/wall/rectangle-command.js +22 -0
  734. package/dist/wall/rectangle-tool.d.ts +2 -0
  735. package/dist/wall/rectangle-tool.d.ts.map +1 -0
  736. package/dist/wall/rectangle-tool.js +165 -0
  737. package/dist/wall/renderer.d.ts.map +1 -1
  738. package/dist/wall/renderer.js +9 -4
  739. package/dist/wall/split-floorplan-layer.d.ts +4 -0
  740. package/dist/wall/split-floorplan-layer.d.ts.map +1 -0
  741. package/dist/wall/split-floorplan-layer.js +71 -0
  742. package/dist/wall/split-pointer.d.ts +3 -0
  743. package/dist/wall/split-pointer.d.ts.map +1 -0
  744. package/dist/wall/split-pointer.js +95 -0
  745. package/dist/wall/split-preview.d.ts +55 -0
  746. package/dist/wall/split-preview.d.ts.map +1 -0
  747. package/dist/wall/split-preview.js +106 -0
  748. package/dist/wall/split-session.d.ts +16 -0
  749. package/dist/wall/split-session.d.ts.map +1 -0
  750. package/dist/wall/split-session.js +144 -0
  751. package/dist/wall/split-store.d.ts +16 -0
  752. package/dist/wall/split-store.d.ts.map +1 -0
  753. package/dist/wall/split-store.js +6 -0
  754. package/dist/wall/split-tool.d.ts +10 -0
  755. package/dist/wall/split-tool.d.ts.map +1 -0
  756. package/dist/wall/split-tool.js +95 -0
  757. package/dist/wall/system.d.ts.map +1 -1
  758. package/dist/wall/system.js +39 -5
  759. package/dist/wall/tool.d.ts.map +1 -1
  760. package/dist/wall/tool.js +114 -50
  761. package/dist/wall/treatment-level-data.d.ts +3 -2
  762. package/dist/wall/treatment-level-data.d.ts.map +1 -1
  763. package/dist/wall/treatment-level-data.js +17 -13
  764. package/dist/wall/treatments.d.ts +10 -10
  765. package/dist/wall/treatments.d.ts.map +1 -1
  766. package/dist/wall/treatments.js +67 -54
  767. package/dist/wall/wall-batch-system.d.ts +7 -0
  768. package/dist/wall/wall-batch-system.d.ts.map +1 -1
  769. package/dist/wall/wall-batch-system.js +38 -3
  770. package/dist/wall/wall-batch.d.ts +6 -0
  771. package/dist/wall/wall-batch.d.ts.map +1 -1
  772. package/dist/wall/wall-batch.js +7 -1
  773. package/dist/window/definition.d.ts.map +1 -1
  774. package/dist/window/definition.js +60 -5
  775. package/dist/window/floorplan-affordances.d.ts.map +1 -1
  776. package/dist/window/floorplan-affordances.js +8 -10
  777. package/dist/window/floorplan-move.d.ts.map +1 -1
  778. package/dist/window/floorplan-move.js +3 -1
  779. package/dist/window/floorplan.d.ts.map +1 -1
  780. package/dist/window/floorplan.js +145 -60
  781. package/dist/window/mechanism.d.ts +4 -0
  782. package/dist/window/mechanism.d.ts.map +1 -0
  783. package/dist/window/mechanism.js +20 -0
  784. package/dist/window/move-tool.d.ts.map +1 -1
  785. package/dist/window/move-tool.js +83 -54
  786. package/dist/window/paint.d.ts.map +1 -1
  787. package/dist/window/paint.js +3 -0
  788. package/dist/window/panel.d.ts.map +1 -1
  789. package/dist/window/panel.js +50 -144
  790. package/dist/window/placement.d.ts +23 -0
  791. package/dist/window/placement.d.ts.map +1 -0
  792. package/dist/window/placement.js +66 -0
  793. package/dist/window/preview.d.ts.map +1 -1
  794. package/dist/window/preview.js +2 -0
  795. package/dist/window/renderer.d.ts.map +1 -1
  796. package/dist/window/renderer.js +3 -2
  797. package/dist/window/tool.d.ts.map +1 -1
  798. package/dist/window/tool.js +130 -26
  799. package/dist/window/window-math.d.ts +6 -14
  800. package/dist/window/window-math.d.ts.map +1 -1
  801. package/dist/window/window-math.js +13 -22
  802. package/dist/zone/contextual-dimensions.d.ts.map +1 -1
  803. package/dist/zone/contextual-dimensions.js +6 -28
  804. package/dist/zone/definition.d.ts.map +1 -1
  805. package/dist/zone/definition.js +4 -3
  806. package/dist/zone/floorplan-affordances.d.ts +200 -0
  807. package/dist/zone/floorplan-affordances.d.ts.map +1 -1
  808. package/dist/zone/floorplan.d.ts +1 -1
  809. package/dist/zone/floorplan.d.ts.map +1 -1
  810. package/dist/zone/floorplan.js +93 -53
  811. package/dist/zone/quantities-panel.d.ts.map +1 -1
  812. package/dist/zone/quantities-panel.js +6 -33
  813. package/dist/zone/quick-measurement.d.ts +2 -2
  814. package/dist/zone/quick-measurement.d.ts.map +1 -1
  815. package/dist/zone/quick-measurement.js +6 -5
  816. package/dist/zone/renderer.d.ts +1 -1
  817. package/dist/zone/renderer.d.ts.map +1 -1
  818. package/dist/zone/renderer.js +58 -146
  819. package/dist/zone/room-clear-dimensions.js +3 -3
  820. package/dist/zone/room-documentation.d.ts.map +1 -1
  821. package/dist/zone/room-documentation.js +2 -6
  822. package/package.json +12 -12
  823. package/dist/block/slots.d.ts +0 -4
  824. package/dist/block/slots.d.ts.map +0 -1
  825. package/dist/block/slots.js +0 -17
  826. package/dist/cabinet/slots.d.ts +0 -4
  827. package/dist/cabinet/slots.d.ts.map +0 -1
  828. package/dist/cabinet/slots.js +0 -24
  829. package/dist/ceiling/slots.d.ts +0 -6
  830. package/dist/ceiling/slots.d.ts.map +0 -1
  831. package/dist/ceiling/slots.js +0 -7
  832. package/dist/column/slots.d.ts +0 -9
  833. package/dist/column/slots.d.ts.map +0 -1
  834. package/dist/column/slots.js +0 -19
  835. package/dist/door/slots.d.ts +0 -9
  836. package/dist/door/slots.d.ts.map +0 -1
  837. package/dist/door/slots.js +0 -20
  838. package/dist/elevator/slots.d.ts +0 -8
  839. package/dist/elevator/slots.d.ts.map +0 -1
  840. package/dist/elevator/slots.js +0 -17
  841. package/dist/fence/slots.d.ts +0 -10
  842. package/dist/fence/slots.d.ts.map +0 -1
  843. package/dist/fence/slots.js +0 -23
  844. package/dist/lean-to-extension/slots.d.ts +0 -5
  845. package/dist/lean-to-extension/slots.d.ts.map +0 -1
  846. package/dist/lean-to-extension/slots.js +0 -15
  847. package/dist/shared/opening-documentation-fields.d.ts +0 -16
  848. package/dist/shared/opening-documentation-fields.d.ts.map +0 -1
  849. package/dist/shared/opening-documentation-fields.js +0 -54
  850. package/dist/shelf/slots.d.ts +0 -9
  851. package/dist/shelf/slots.d.ts.map +0 -1
  852. package/dist/shelf/slots.js +0 -30
  853. package/dist/slab/slots.d.ts +0 -10
  854. package/dist/slab/slots.d.ts.map +0 -1
  855. package/dist/slab/slots.js +0 -20
  856. package/dist/stair/floor-stack.d.ts +0 -10
  857. package/dist/stair/floor-stack.d.ts.map +0 -1
  858. package/dist/stair/floor-stack.js +0 -115
  859. package/dist/stair/slots.d.ts +0 -7
  860. package/dist/stair/slots.d.ts.map +0 -1
  861. package/dist/stair/slots.js +0 -13
  862. package/dist/wall/slots.d.ts +0 -10
  863. package/dist/wall/slots.d.ts.map +0 -1
  864. package/dist/wall/slots.js +0 -84
  865. package/dist/window/slots.d.ts +0 -5
  866. package/dist/window/slots.d.ts.map +0 -1
  867. package/dist/window/slots.js +0 -11
@@ -0,0 +1,106 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { emitter, resolveTerrainWallConstructionOptions, useScene, } from '@pascal-app/core';
4
+ import { markToolCancelConsumed, triggerSFX, useEditor, useFloorplanDraftPreview, useFloorplanRender, useInteractionScope, useWallDrawVariant, } from '@pascal-app/editor';
5
+ import { useEffect, useRef, useState } from 'react';
6
+ import { createWallRectangle } from './rectangle-command';
7
+ /** The wall's plan tool: line drafting stays with the panel; rectangle mode mounts its own tool. */
8
+ export default function WallFloorplanTool(props) {
9
+ return useWallDrawVariant() === 'rectangle' ? _jsx(RectangleFloorplanTool, { ...props }) : null;
10
+ }
11
+ /**
12
+ * Rectangle mode in the floor plan. Pointer moves stay with the panel, so the
13
+ * cursor, snapping, alignment guides and snap beacon are the line wall's own;
14
+ * this tool only claims clicks and publishes the first corner, and the panel's
15
+ * linear draft layer draws the four draft walls from it.
16
+ */
17
+ function RectangleFloorplanTool({ activeLevelId }) {
18
+ const group = useRef(null);
19
+ const renderContext = useFloorplanRender();
20
+ const [error, setError] = useState(null);
21
+ useEffect(() => {
22
+ const svg = group.current?.ownerSVGElement;
23
+ if (!svg || !activeLevelId)
24
+ return;
25
+ const draft = useFloorplanDraftPreview.getState;
26
+ let down = null;
27
+ let construction;
28
+ useInteractionScope.getState().begin({ kind: 'drafting', tool: 'wall' });
29
+ const claim = (e) => {
30
+ e.preventDefault();
31
+ e.stopImmediatePropagation();
32
+ };
33
+ const onDown = (e) => {
34
+ if (e.button !== 0 || e.metaKey || e.ctrlKey)
35
+ return;
36
+ claim(e);
37
+ down = [e.clientX, e.clientY];
38
+ };
39
+ const cancel = () => {
40
+ if (draft().wallRectangleDraftStart)
41
+ markToolCancelConsumed();
42
+ draft().setWallRectangleDraftStart(null);
43
+ down = null;
44
+ setError(null);
45
+ };
46
+ const onClick = (e) => {
47
+ if (e.button !== 0 || e.metaKey || e.ctrlKey)
48
+ return;
49
+ claim(e);
50
+ if (!down || Math.hypot(e.clientX - down[0], e.clientY - down[1]) > 5) {
51
+ down = null;
52
+ return;
53
+ }
54
+ down = null;
55
+ // The panel's snapped cursor, exactly where a line wall would land.
56
+ const point = draft().cursorPoint;
57
+ if (!point)
58
+ return;
59
+ const start = draft().wallRectangleDraftStart;
60
+ if (!start) {
61
+ construction = resolveTerrainWallConstructionOptions(useScene.getState().nodes, activeLevelId, point, useEditor.getState().toolDefaults.wall);
62
+ draft().setWallRectangleDraftStart(point);
63
+ setError(null);
64
+ triggerSFX('sfx:structure-build-start');
65
+ return;
66
+ }
67
+ try {
68
+ createWallRectangle(activeLevelId, start, point, useEditor.getState().toolDefaults.wall ?? {}, construction);
69
+ cancel();
70
+ triggerSFX('sfx:structure-build');
71
+ }
72
+ catch (e) {
73
+ setError({ message: e.message, at: point });
74
+ }
75
+ };
76
+ const stopDouble = (e) => {
77
+ if (e.button === 0)
78
+ claim(e);
79
+ };
80
+ // The panel moves the snapped cursor; the wall draft's tick as the dragged
81
+ // corner steps to a new spot.
82
+ const stopTicks = useFloorplanDraftPreview.subscribe((state, previous) => {
83
+ const [now, before] = [state.cursorPoint, previous.cursorPoint];
84
+ if (state.wallRectangleDraftStart &&
85
+ now &&
86
+ before &&
87
+ (now[0] !== before[0] || now[1] !== before[1]))
88
+ triggerSFX('sfx:grid-snap');
89
+ });
90
+ svg.addEventListener('pointerdown', onDown, true);
91
+ svg.addEventListener('click', onClick, true);
92
+ svg.addEventListener('dblclick', stopDouble, true);
93
+ emitter.on('tool:cancel', cancel);
94
+ return () => {
95
+ stopTicks();
96
+ svg.removeEventListener('pointerdown', onDown, true);
97
+ svg.removeEventListener('click', onClick, true);
98
+ svg.removeEventListener('dblclick', stopDouble, true);
99
+ emitter.off('tool:cancel', cancel);
100
+ draft().setWallRectangleDraftStart(null);
101
+ useInteractionScope.getState().endIf((s) => s.kind === 'drafting' && s.tool === 'wall');
102
+ };
103
+ }, [activeLevelId]);
104
+ const unitsPerPixel = renderContext?.unitsPerPixel ?? 0.01;
105
+ return (_jsx("g", { ref: group, pointerEvents: "none", children: error && (_jsx("text", { x: error.at[0], y: error.at[1] - 0.2, fill: "#ef4444", fontSize: 12 * unitsPerPixel, children: error.message })) }));
106
+ }
@@ -1,10 +1,12 @@
1
- import { type AnyNode, type FloorplanGeometry, type GeometryContext, type WallMiterData, type WallNode } from '@pascal-app/core';
1
+ import { type AnyNode, type FloorplanGeometry, type GeometryContext, type WallLayerMiterData, type WallMiterData, type WallNode } from '@pascal-app/core';
2
2
  import { type WallConstructionDimensionPlan } from './construction-dimensions';
3
3
  declare const WALL_DIMENSION_REFERENCES: readonly ["finished-faces", "centerline", "stud-faces"];
4
4
  type WallDimensionReference = (typeof WALL_DIMENSION_REFERENCES)[number];
5
5
  export type WallFloorplanLevelData = {
6
6
  miters: WallMiterData;
7
7
  documentMiters: WallMiterData;
8
+ layerMiters: WallLayerMiterData;
9
+ documentLayerMiters: WallLayerMiterData;
8
10
  constructionDimensionsByReference: Record<WallDimensionReference, WallConstructionDimensionPlan>;
9
11
  };
10
12
  export declare function computeWallFloorplanLevelData({ siblings, nodes, }: {
@@ -1 +1 @@
1
- {"version":3,"file":"floorplan.d.ts","sourceRoot":"","sources":["../../src/wall/floorplan.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EAEZ,KAAK,iBAAiB,EAEtB,KAAK,eAAe,EAOpB,KAAK,aAAa,EAClB,KAAK,QAAQ,EACd,MAAM,kBAAkB,CAAA;AAGzB,OAAO,EAKL,KAAK,6BAA6B,EACnC,MAAM,2BAA2B,CAAA;AAYlC,QAAA,MAAM,yBAAyB,yDAA0D,CAAA;AAEzF,KAAK,sBAAsB,GAAG,CAAC,OAAO,yBAAyB,CAAC,CAAC,MAAM,CAAC,CAAA;AAexE,MAAM,MAAM,sBAAsB,GAAG;IACnC,MAAM,EAAE,aAAa,CAAA;IACrB,cAAc,EAAE,aAAa,CAAA;IAC7B,iCAAiC,EAAE,MAAM,CAAC,sBAAsB,EAAE,6BAA6B,CAAC,CAAA;CACjG,CAAA;AAED,wBAAgB,6BAA6B,CAAC,EAC5C,QAAQ,EACR,KAAK,GACN,EAAE;IACD,QAAQ,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAA;IACjC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC/B,GAAG,sBAAsB,CAqCzB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,eAAe,GAAG,iBAAiB,GAAG,IAAI,CAkNjG"}
1
+ {"version":3,"file":"floorplan.d.ts","sourceRoot":"","sources":["../../src/wall/floorplan.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EAGZ,KAAK,iBAAiB,EAEtB,KAAK,eAAe,EAYpB,KAAK,kBAAkB,EAEvB,KAAK,aAAa,EAClB,KAAK,QAAQ,EAEd,MAAM,kBAAkB,CAAA;AAQzB,OAAO,EAKL,KAAK,6BAA6B,EACnC,MAAM,2BAA2B,CAAA;AAalC,QAAA,MAAM,yBAAyB,yDAA0D,CAAA;AAEzF,KAAK,sBAAsB,GAAG,CAAC,OAAO,yBAAyB,CAAC,CAAC,MAAM,CAAC,CAAA;AAsBxE,MAAM,MAAM,sBAAsB,GAAG;IACnC,MAAM,EAAE,aAAa,CAAA;IACrB,cAAc,EAAE,aAAa,CAAA;IAC7B,WAAW,EAAE,kBAAkB,CAAA;IAC/B,mBAAmB,EAAE,kBAAkB,CAAA;IACvC,iCAAiC,EAAE,MAAM,CAAC,sBAAsB,EAAE,6BAA6B,CAAC,CAAA;CACjG,CAAA;AAqJD,wBAAgB,6BAA6B,CAAC,EAC5C,QAAQ,EACR,KAAK,GACN,EAAE;IACD,QAAQ,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAA;IACjC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC/B,GAAG,sBAAsB,CA0CzB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,eAAe,GAAG,iBAAiB,GAAG,IAAI,CAgPjG"}
@@ -1,7 +1,8 @@
1
- import { calculateLevelMiters, getWallCurveFrameAt, getWallCurveLength, getWallMidpointHandlePoint, getWallPlanFootprint, getWallThickness, isCurvedWall, } from '@pascal-app/core';
2
- import { floorplanGeometryMetadata, readFloorplanContext } from '@pascal-app/editor';
1
+ import { calculateLevelLayerMiters, calculateLevelMiters, getWallBodyCenterOffset, getWallCurveFrameAt, getWallCurveLength, getWallEffectiveHeightForNodes, getWallFaceOffsets, getWallLayerPolylines, getWallLocalFaceZ, getWallMidpointHandlePoint, getWallPlanFootprint, getWallThickness, isCurvedWall, wallLayerBoundaryOffsets, } from '@pascal-app/core';
2
+ import { floorplanGeometryMetadata, readFloorplanContext, WALL_PUSH_AFFORDANCE, } from '@pascal-app/editor';
3
3
  import { constructionDimensionStandard } from '../shared/construction-dimension-standards';
4
4
  import { buildCurvedWallConstructionDimensions, buildLevelWallConstructionDimensionPlan, buildWallConstructionDimensions, renderPlannedConstructionDimensions, } from './construction-dimensions';
5
+ import { buildCurtainWallFloorplan } from './curtain-wall-floorplan';
5
6
  import { hasWallCurveBlockingChildren } from './curve-eligibility';
6
7
  // Same constants the legacy `getFloorplanWall` uses (editor/lib/floorplan/walls.ts).
7
8
  // Slightly exaggerates thin walls so the 2D plan stays legible without
@@ -21,6 +22,148 @@ function floorplanWallThickness(wall) {
21
22
  function exaggerateWallThickness(wall) {
22
23
  return { ...wall, thickness: floorplanWallThickness(wall) };
23
24
  }
25
+ // Assembly offsets are measured from the body centre; a justified wall's body
26
+ // sits off its reference line, so the layer lines move with it.
27
+ function wallLayerOffsets(wall) {
28
+ const centre = getWallBodyCenterOffset(wall);
29
+ return wallLayerBoundaryOffsets(wall, getWallThickness(wall)).map((offset) => offset + centre);
30
+ }
31
+ // --- Assembly layer lines ---------------------------------------------------
32
+ //
33
+ // The mitered outer footprint is unchanged; these are the boundaries BETWEEN
34
+ // the assembly's layers, offset in from the footprint and mitered at the same
35
+ // corners so they meet cleanly (see `calculateLevelLayerMiters` in
36
+ // `packages/core/src/systems/wall/wall-assembly.ts` for the corner, T-junction
37
+ // and different-assembly rules).
38
+ //
39
+ // In `document` purpose the framing cavity gets the standard poché (a light
40
+ // hatch) and the finish layers are thin solid lines. In `edit` purpose the
41
+ // footprint keeps today's look and the layer lines are drawn at reduced
42
+ // opacity with no poché, so the editor stays readable.
43
+ //
44
+ // Curved walls are skipped: the offset miter is a straight-line construction
45
+ // and a curved wall's layers would need arc offsets. Stated plainly rather
46
+ // than approximated — a curved wall draws exactly as it does today.
47
+ const LAYER_LINE_STROKE = '#1f2937';
48
+ const LAYER_LINE_WIDTH_DOCUMENT = 0.008;
49
+ const LAYER_LINE_WIDTH_EDIT = 0.006;
50
+ const LAYER_LINE_OPACITY_EDIT = 0.35;
51
+ const FRAMING_POCHE_COLOR = '#94a3b8';
52
+ const FRAMING_POCHE_OPACITY = 0.28;
53
+ /** Along-wall spans, measured from `wall.start`, occupied by doors / windows. */
54
+ function openingSpans(wall, children) {
55
+ const spans = [];
56
+ for (const child of children) {
57
+ if (child.type !== 'door' && child.type !== 'window')
58
+ continue;
59
+ const distance = child.position?.[0];
60
+ const width = child.width;
61
+ if (typeof distance !== 'number' || typeof width !== 'number' || width <= 0)
62
+ continue;
63
+ spans.push([distance - width / 2, distance + width / 2]);
64
+ }
65
+ return spans.sort((a, b) => a[0] - b[0]);
66
+ }
67
+ /**
68
+ * Cut one mitered layer boundary at the openings hosted by the wall, so an
69
+ * opening reads as a hole through EVERY layer and not just the footprint.
70
+ * Parameterised along the wall direction, which is exact for straight walls.
71
+ */
72
+ function cutAtOpenings(line, wall, spans) {
73
+ const segment = {
74
+ start: [line.start.x, line.start.y],
75
+ end: [line.end.x, line.end.y],
76
+ };
77
+ if (spans.length === 0)
78
+ return [segment];
79
+ const dx = wall.end[0] - wall.start[0];
80
+ const dy = wall.end[1] - wall.start[1];
81
+ const length = Math.hypot(dx, dy);
82
+ if (length < 1e-9)
83
+ return [segment];
84
+ const ux = dx / length;
85
+ const uy = dy / length;
86
+ const along = (p) => (p.x - wall.start[0]) * ux + (p.y - wall.start[1]) * uy;
87
+ const a0 = along(line.start);
88
+ const a1 = along(line.end);
89
+ if (Math.abs(a1 - a0) < 1e-9)
90
+ return [segment];
91
+ const at = (t) => [
92
+ line.start.x + (line.end.x - line.start.x) * t,
93
+ line.start.y + (line.end.y - line.start.y) * t,
94
+ ];
95
+ const toT = (distance) => (distance - a0) / (a1 - a0);
96
+ const pieces = [];
97
+ let cursor = 0;
98
+ for (const [lo, hi] of spans) {
99
+ const tLo = Math.max(0, Math.min(1, toT(lo)));
100
+ const tHi = Math.max(0, Math.min(1, toT(hi)));
101
+ const from = Math.min(tLo, tHi);
102
+ const to = Math.max(tLo, tHi);
103
+ if (from > cursor + 1e-6)
104
+ pieces.push({ start: at(cursor), end: at(from) });
105
+ cursor = Math.max(cursor, to);
106
+ }
107
+ if (cursor < 1 - 1e-6)
108
+ pieces.push({ start: at(cursor), end: at(1) });
109
+ return pieces;
110
+ }
111
+ /**
112
+ * The layer-boundary lines plus the framing poché for one wall.
113
+ * `wall` is the (possibly exaggerated) wall the footprint was built from, so
114
+ * the stack is scaled to whatever thickness is actually drawn.
115
+ */
116
+ function buildWallAssemblyLayers(wall, source, layerMiters, children, documentMode) {
117
+ if (!source.assembly || isCurvedWall(source))
118
+ return [];
119
+ const offsets = wallLayerOffsets(wall);
120
+ if (offsets.length < 3)
121
+ return [];
122
+ const lines = getWallLayerPolylines(wall, layerMiters, offsets);
123
+ if (lines.length < 3)
124
+ return [];
125
+ const spans = openingSpans(source, children);
126
+ const out = [];
127
+ // Framing poché first, so the boundary lines sit on top of it.
128
+ if (documentMode) {
129
+ for (let i = 0; i < lines.length - 1; i += 1) {
130
+ if (lines[i + 1].role !== 'framing')
131
+ continue;
132
+ const outer = lines[i];
133
+ const inner = lines[i + 1];
134
+ out.push({
135
+ kind: 'hatch',
136
+ points: [
137
+ [outer.start.x, outer.start.y],
138
+ [outer.end.x, outer.end.y],
139
+ [inner.end.x, inner.end.y],
140
+ [inner.start.x, inner.start.y],
141
+ ],
142
+ color: FRAMING_POCHE_COLOR,
143
+ opacity: FRAMING_POCHE_OPACITY,
144
+ });
145
+ }
146
+ }
147
+ // Interior boundaries only — index 0 and the last index are the two outer
148
+ // faces, already drawn by the mitered footprint polygon.
149
+ for (let i = 1; i < lines.length - 1; i += 1) {
150
+ for (const piece of cutAtOpenings(lines[i], source, spans)) {
151
+ out.push({
152
+ kind: 'line',
153
+ x1: piece.start[0],
154
+ y1: piece.start[1],
155
+ x2: piece.end[0],
156
+ y2: piece.end[1],
157
+ stroke: LAYER_LINE_STROKE,
158
+ strokeWidth: documentMode ? LAYER_LINE_WIDTH_DOCUMENT : LAYER_LINE_WIDTH_EDIT,
159
+ opacity: documentMode ? 1 : LAYER_LINE_OPACITY_EDIT,
160
+ pointerEvents: 'none',
161
+ metadata: floorplanGeometryMetadata({ renderPass: 'overlay' }),
162
+ });
163
+ }
164
+ }
165
+ return out;
166
+ }
24
167
  export function computeWallFloorplanLevelData({ siblings, nodes, }) {
25
168
  const walls = siblings.map(exaggerateWallThickness);
26
169
  const constructionDimensionsByReference = {};
@@ -46,9 +189,14 @@ export function computeWallFloorplanLevelData({ siblings, nodes, }) {
46
189
  },
47
190
  });
48
191
  }
192
+ const documentWalls = [...siblings];
193
+ const miters = calculateLevelMiters(walls);
194
+ const documentMiters = calculateLevelMiters(documentWalls);
49
195
  return {
50
- miters: calculateLevelMiters(walls),
51
- documentMiters: calculateLevelMiters([...siblings]),
196
+ miters,
197
+ documentMiters,
198
+ layerMiters: calculateLevelLayerMiters(walls, miters, wallLayerOffsets),
199
+ documentLayerMiters: calculateLevelLayerMiters(documentWalls, documentMiters, wallLayerOffsets),
52
200
  constructionDimensionsByReference,
53
201
  };
54
202
  }
@@ -79,11 +227,18 @@ export function buildWallFloorplan(node, ctx) {
79
227
  // level-wide miter calc per wall; the dispatcher path is O(1) here, which is
80
228
  // what keeps a wall drag from being O(N²) across the level.
81
229
  const levelData = ctx.levelData;
82
- const miters = (documentMode ? levelData?.documentMiters : levelData?.miters) ??
83
- calculateLevelMiters([
230
+ let purposeWalls;
231
+ const getPurposeWalls = () => {
232
+ purposeWalls ??= [
84
233
  self,
85
234
  ...ctx.siblings.filter((s) => s.type === 'wall').map(wallForPurpose),
86
- ]);
235
+ ];
236
+ return purposeWalls;
237
+ };
238
+ const miters = (documentMode ? levelData?.documentMiters : levelData?.miters) ??
239
+ calculateLevelMiters(getPurposeWalls());
240
+ const getLayerMiters = () => (documentMode ? levelData?.documentLayerMiters : levelData?.layerMiters) ??
241
+ calculateLevelLayerMiters(getPurposeWalls(), miters, wallLayerOffsets);
87
242
  const polygon = getWallPlanFootprint(self, miters);
88
243
  if (!polygon || polygon.length < 3)
89
244
  return null;
@@ -103,7 +258,7 @@ export function buildWallFloorplan(node, ctx) {
103
258
  : isHovered && palette
104
259
  ? palette.wallHoverStroke
105
260
  : '#1f2937';
106
- const fill = showSelectedChrome ? '#ffffff' : '#374151';
261
+ const fill = node.wallType === 'curtain' ? 'transparent' : showSelectedChrome ? '#ffffff' : '#374151';
107
262
  const children = [
108
263
  {
109
264
  kind: 'polygon',
@@ -121,6 +276,13 @@ export function buildWallFloorplan(node, ctx) {
121
276
  cursor: isSelected ? 'default' : undefined,
122
277
  },
123
278
  ];
279
+ if (node.wallType === 'curtain') {
280
+ children.push(...buildCurtainWallFloorplan(node, getWallEffectiveHeightForNodes(node, ctx.sceneNodes ?? {}), stroke, ctx.children));
281
+ }
282
+ else if (node.assembly) {
283
+ // Assembly layer lines + framing poché, drawn inside the footprint.
284
+ children.push(...buildWallAssemblyLayers(self, node, getLayerMiters(), ctx.children, documentMode));
285
+ }
124
286
  if (automaticDimensions) {
125
287
  const dimensionStroke = isSelected && palette ? palette.selectedStroke : (palette?.measurementStroke ?? '#334155');
126
288
  const dimensionStandard = constructionDimensionStandard({
@@ -192,8 +354,8 @@ export function buildWallFloorplan(node, ctx) {
192
354
  payload: { wallId: node.id, endpoint: 'end' },
193
355
  });
194
356
  const thicknessFrame = getWallCurveFrameAt(self, 0.5);
195
- const halfVisibleThickness = getWallThickness(self) / 2;
196
357
  for (const side of [1, -1]) {
358
+ const halfVisibleThickness = getWallLocalFaceZ(self, side > 0 ? 'a' : 'b') * side;
197
359
  children.push({
198
360
  kind: 'endpoint-handle',
199
361
  point: [
@@ -205,11 +367,10 @@ export function buildWallFloorplan(node, ctx) {
205
367
  payload: { wallId: node.id, side },
206
368
  });
207
369
  }
208
- // Side move arrows — two directional arrows at the wall midpoint,
209
- // pointing outward perpendicular to the wall. Mirrors the 3D
210
- // `WallMoveSideHandles` arrows so users can grab the wall body
211
- // from the floor plan. PointerDown on either arrow activates
212
- // `wallFloorplanMoveTarget` via the registry-layer dispatcher.
370
+ // Side push arrows — two directional arrows at the wall midpoint,
371
+ // pointing outward perpendicular to the wall. They are the 3D side
372
+ // arrows' push (same handle, drag and commit, run by the floor plan for
373
+ // `WALL_PUSH_AFFORDANCE`); only their placement is plan-specific.
213
374
  {
214
375
  const dx = node.end[0] - node.start[0];
215
376
  const dz = node.end[1] - node.start[1];
@@ -218,16 +379,22 @@ export function buildWallFloorplan(node, ctx) {
218
379
  const midpoint = getWallMidpointHandlePoint(node);
219
380
  const nx = -dz / wallLength;
220
381
  const nz = dx / wallLength;
221
- const offset = floorplanWallThickness(node) / 2 + 0.05;
382
+ const offsets = getWallFaceOffsets({ ...node, thickness: floorplanWallThickness(node) });
383
+ const offset = offsets.a + 0.05;
384
+ const backOffset = -offsets.b + 0.05;
222
385
  children.push({
223
386
  kind: 'move-arrow',
224
387
  point: [midpoint.x + nx * offset, midpoint.y + nz * offset],
225
388
  angle: Math.atan2(nz, nx),
389
+ affordance: WALL_PUSH_AFFORDANCE,
390
+ payload: { wallId: node.id, side: 'a' },
226
391
  });
227
392
  children.push({
228
393
  kind: 'move-arrow',
229
- point: [midpoint.x - nx * offset, midpoint.y - nz * offset],
394
+ point: [midpoint.x - nx * backOffset, midpoint.y - nz * backOffset],
230
395
  angle: Math.atan2(-nz, -nx),
396
+ affordance: WALL_PUSH_AFFORDANCE,
397
+ payload: { wallId: node.id, side: 'b' },
231
398
  });
232
399
  }
233
400
  }
@@ -253,8 +420,8 @@ function buildSelectedWallHatchLines(wall, stroke) {
253
420
  const length = getWallCurveLength(wall);
254
421
  if (length <= 1e-6)
255
422
  return [];
256
- const halfAcross = getWallThickness(wall) / 2;
257
- const halfAlong = halfAcross;
423
+ const offsets = getWallFaceOffsets(wall);
424
+ const halfAlong = offsets.a - getWallBodyCenterOffset(wall);
258
425
  const count = Math.max(1, Math.floor(length / FLOORPLAN_SELECTION_HATCH_SPACING));
259
426
  const spacing = length / count;
260
427
  const lines = [];
@@ -263,10 +430,10 @@ function buildSelectedWallHatchLines(wall, stroke) {
263
430
  const frame = getWallCurveFrameAt(wall, along / length);
264
431
  lines.push({
265
432
  kind: 'line',
266
- x1: frame.point.x - frame.tangent.x * halfAlong - frame.normal.x * halfAcross,
267
- y1: frame.point.y - frame.tangent.y * halfAlong - frame.normal.y * halfAcross,
268
- x2: frame.point.x + frame.tangent.x * halfAlong + frame.normal.x * halfAcross,
269
- y2: frame.point.y + frame.tangent.y * halfAlong + frame.normal.y * halfAcross,
433
+ x1: frame.point.x - frame.tangent.x * halfAlong - frame.normal.x * -offsets.b,
434
+ y1: frame.point.y - frame.tangent.y * halfAlong - frame.normal.y * -offsets.b,
435
+ x2: frame.point.x + frame.tangent.x * halfAlong + frame.normal.x * offsets.a,
436
+ y2: frame.point.y + frame.tangent.y * halfAlong + frame.normal.y * offsets.a,
270
437
  stroke,
271
438
  strokeWidth: FLOORPLAN_SELECTION_HATCH_STROKE_WIDTH,
272
439
  pointerEvents: 'none',
@@ -0,0 +1,3 @@
1
+ import { type WallNode } from '@pascal-app/core';
2
+ export declare function buildWallLengthPatch(node: WallNode, nextLength: number): Partial<WallNode>;
3
+ //# sourceMappingURL=length-patch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"length-patch.d.ts","sourceRoot":"","sources":["../../src/wall/length-patch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiD,KAAK,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAE/F,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAW1F"}
@@ -0,0 +1,14 @@
1
+ import { getClampedWallCurveOffset, getWallCurveLength } from '@pascal-app/core';
2
+ export function buildWallLengthPatch(node, nextLength) {
3
+ const length = getWallCurveLength(node);
4
+ if (!length || !Number.isFinite(nextLength) || nextLength <= 0)
5
+ return {};
6
+ const ratio = nextLength / length;
7
+ return {
8
+ end: [
9
+ node.start[0] + (node.end[0] - node.start[0]) * ratio,
10
+ node.start[1] + (node.end[1] - node.start[1]) * ratio,
11
+ ],
12
+ ...(node.curveOffset ? { curveOffset: getClampedWallCurveOffset(node) * ratio } : {}),
13
+ };
14
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"measurement.d.ts","sourceRoot":"","sources":["../../src/wall/measurement.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,kBAAkB,EACvB,KAAK,yBAAyB,EAC9B,KAAK,2BAA2B,EAGhC,KAAK,QAAQ,EACd,MAAM,kBAAkB,CAAA;AAKzB,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,QAAQ,GAAG,kBAAkB,EAAE,CAmG5E;AAED,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,QAAQ,EACd,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAC7B,WAAW,EAAE,MAAM,GAClB,yBAAyB,GAAG,IAAI,CA8ElC;AAED,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,QAAQ,EACd,SAAS,EAAE,2BAA2B,GACrC,kBAAkB,GAAG,IAAI,CAgC3B"}
1
+ {"version":3,"file":"measurement.d.ts","sourceRoot":"","sources":["../../src/wall/measurement.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,kBAAkB,EACvB,KAAK,yBAAyB,EAC9B,KAAK,2BAA2B,EAGhC,KAAK,QAAQ,EACd,MAAM,kBAAkB,CAAA;AAKzB,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,QAAQ,GAAG,kBAAkB,EAAE,CA2F5E;AAED,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,QAAQ,EACd,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAC7B,WAAW,EAAE,MAAM,GAClB,yBAAyB,GAAG,IAAI,CA8ElC;AAED,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,QAAQ,EACd,SAAS,EAAE,2BAA2B,GACrC,kBAAkB,GAAG,IAAI,CAgC3B"}
@@ -1,4 +1,4 @@
1
- import { getWallArcData, getWallCurveFrameAt, getWallThickness, sampleWallCenterline, useScene, } from '@pascal-app/core';
1
+ import { getWallArcData, getWallCurveFrameAt, getWallFaceOffsets, getWallLocalFaceZ, sampleWallCenterline, useScene, } from '@pascal-app/core';
2
2
  import { resolveWallOpeningCeiling } from '../shared/wall-opening-ceiling';
3
3
  const point = (x, y, z) => [x, y, z];
4
4
  export function wallMeasurementFeatures(wall) {
@@ -6,14 +6,14 @@ export function wallMeasurementFeatures(wall) {
6
6
  const arc = getWallArcData(wall);
7
7
  const centerline = sampleWallCenterline(wall).map(({ x, y }) => point(x, 0, y));
8
8
  const midpoint = getWallCurveFrameAt(wall, 0.5).point;
9
- const halfThickness = getWallThickness(wall) / 2;
9
+ const { a, b } = getWallFaceOffsets(wall);
10
10
  const leftFace = centerline.map((_center, index) => {
11
11
  const frame = getWallCurveFrameAt(wall, index / Math.max(1, centerline.length - 1));
12
- return point(frame.point.x + frame.normal.x * halfThickness, 0, frame.point.y + frame.normal.y * halfThickness);
12
+ return point(frame.point.x + frame.normal.x * a, 0, frame.point.y + frame.normal.y * a);
13
13
  });
14
14
  const rightFace = centerline.map((_center, index) => {
15
15
  const frame = getWallCurveFrameAt(wall, index / Math.max(1, centerline.length - 1));
16
- return point(frame.point.x - frame.normal.x * halfThickness, 0, frame.point.y - frame.normal.y * halfThickness);
16
+ return point(frame.point.x - frame.normal.x * -b, 0, frame.point.y - frame.normal.y * -b);
17
17
  });
18
18
  return [
19
19
  {
@@ -139,7 +139,7 @@ export function matchWallMeasurementFeature(wall, hit, maxDistance) {
139
139
  const side = (hit[0] - frame.point.x) * frame.normal.x + (hit[2] - frame.point.y) * frame.normal.y >= 0
140
140
  ? 1
141
141
  : -1;
142
- const halfThickness = getWallThickness(wall) / 2;
142
+ const halfThickness = getWallLocalFaceZ(wall, side > 0 ? 'a' : 'b') * side;
143
143
  const faceX = frame.point.x + frame.normal.x * halfThickness * side;
144
144
  const faceZ = frame.point.y + frame.normal.y * halfThickness * side;
145
145
  const faceDistance = Math.hypot(hit[0] - faceX, hit[2] - faceZ);
@@ -1 +1 @@
1
- {"version":3,"file":"move-endpoint-tool.d.ts","sourceRoot":"","sources":["../../src/wall/move-endpoint-tool.tsx"],"names":[],"mappings":"AAEA,OAAO,EAeL,KAAK,QAAQ,EACd,MAAM,kBAAkB,CAAA;AA2BzB;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,QAAQ,CAAA;IACd,QAAQ,EAAE,OAAO,GAAG,KAAK,CAAA;CAC1B,CAAA;AA6HD,eAAO,MAAM,oBAAoB,EAAE,KAAK,CAAC,EAAE,CAAC;IAAE,MAAM,EAAE,kBAAkB,CAAA;CAAE,CAqhBzE,CAAA;AAkBD,eAAe,oBAAoB,CAAA"}
1
+ {"version":3,"file":"move-endpoint-tool.d.ts","sourceRoot":"","sources":["../../src/wall/move-endpoint-tool.tsx"],"names":[],"mappings":"AAEA,OAAO,EAcL,KAAK,QAAQ,EACd,MAAM,kBAAkB,CAAA;AA2BzB;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,QAAQ,CAAA;IACd,QAAQ,EAAE,OAAO,GAAG,KAAK,CAAA;CAC1B,CAAA;AA6HD,eAAO,MAAM,oBAAoB,EAAE,KAAK,CAAC,EAAE,CAAC;IAAE,MAAM,EAAE,kBAAkB,CAAA;CAAE,CA+hBzE,CAAA;AAkBD,eAAe,oBAAoB,CAAA"}
@@ -1,6 +1,6 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { collectAlignmentAnchors, emitter, getWallBaseElevationForNodes, getWallCurveLength, getWallThickness, pauseSceneHistory, resolveAlignment, resolveMovedWallSupportSlabPatch, resumeSceneHistory, runAsSingleSceneHistoryStep, useLiveNodeOverrides, useScene, } from '@pascal-app/core';
3
+ import { acquireSceneHistoryPause, collectAlignmentAnchors, emitter, getWallBaseElevationForNodes, getWallCurveLength, getWallThickness, resolveAlignment, resolveMovedWallSupportSlabPatch, runAsSingleSceneHistoryStep, useLiveNodeOverrides, useScene, } from '@pascal-app/core';
4
4
  import { CursorSphere, formatAngleRadians, getAngleToSegmentReference, getSegmentAngleReferenceAtPoint, isAlignmentGuideActive, isAngleSnapActive, isMagneticSnapActive, isSegmentLongEnough, MeasurementPill, markToolCancelConsumed, resolveEndpointWallSplit, snapWallDraftPointDetailed, triggerSFX, useAlignmentGuides, useInteractionScope, useWallSnapIndicator, WALL_CONNECT_SNAP_RADIUS, } from '@pascal-app/editor';
5
5
  import { useViewer } from '@pascal-app/viewer';
6
6
  import { Html } from '@react-three/drei';
@@ -147,8 +147,13 @@ export const MoveWallEndpointTool = ({ target }) => {
147
147
  const wallAlignmentCandidates = collectAlignmentAnchors(useScene.getState().nodes, nodeId);
148
148
  const movingLinkedIdSet = new Set(movingLinkedWallIds);
149
149
  const attachedAlignmentCandidates = wallAlignmentCandidates.filter((anchor) => !movingLinkedIdSet.has(anchor.nodeId));
150
- pauseSceneHistory(useScene);
150
+ // A lease, so a cancel and the unmount that follows it release it once.
151
+ const releaseHistory = acquireSceneHistoryPause(useScene);
151
152
  let wasCommitted = false;
153
+ // Ends with the drop, the dismiss or the cancel: the window listeners stay
154
+ // until the unmount, and a release after Escape must not commit the
155
+ // cancelled preview (nor a late pointer move republish it).
156
+ let live = true;
152
157
  // Last RAW cursor point from `grid:move` — lets the Alt keydown/keyup
153
158
  // handlers re-run the FULL snap pipeline immediately on a modifier change
154
159
  // instead of waiting for the next mousemove. The raw point (not the
@@ -308,6 +313,8 @@ export const MoveWallEndpointTool = ({ target }) => {
308
313
  return alignedPoint;
309
314
  };
310
315
  const onGridMove = (event) => {
316
+ if (!live)
317
+ return;
311
318
  const planPoint = [event.localPosition[0], event.localPosition[2]];
312
319
  lastRawPoint = planPoint;
313
320
  // The keydown listener can't observe an Alt press that predates the
@@ -321,6 +328,8 @@ export const MoveWallEndpointTool = ({ target }) => {
321
328
  applyPreview(resolveDragPoint(planPoint), altPressedRef.current);
322
329
  };
323
330
  const onPointerUp = () => {
331
+ if (!live)
332
+ return;
324
333
  useAlignmentGuides.getState().clear();
325
334
  useWallSnapIndicator.getState().clear();
326
335
  // The handle sits on the wall body, so the browser fires a click on the
@@ -343,11 +352,13 @@ export const MoveWallEndpointTool = ({ target }) => {
343
352
  hasReleasedOnce = true;
344
353
  return;
345
354
  }
355
+ live = false;
346
356
  restoreOriginal();
347
357
  useViewer.getState().setSelection({ selectedIds: [nodeId] });
348
358
  exitMoveMode();
349
359
  return;
350
360
  }
361
+ live = false;
351
362
  if (isSegmentLongEnough(preview.start, preview.end)) {
352
363
  wasCommitted = true;
353
364
  const linkedUpdates = altPressedRef.current
@@ -360,7 +371,7 @@ export const MoveWallEndpointTool = ({ target }) => {
360
371
  // ops (create halves, migrate attachments, delete host) would each
361
372
  // push their own entry, so the whole commit runs as one history step.
362
373
  clearPreviewOverrides();
363
- resumeSceneHistory(useScene);
374
+ releaseHistory();
364
375
  runAsSingleSceneHistoryStep(useScene, () => {
365
376
  // Dropping the endpoint on another wall's interior splits that host
366
377
  // like the draw path does. Linked walls updated in this commit share
@@ -404,7 +415,6 @@ export const MoveWallEndpointTool = ({ target }) => {
404
415
  useScene.getState().markDirty(u.id);
405
416
  }
406
417
  });
407
- pauseSceneHistory(useScene);
408
418
  triggerSFX('sfx:item-place');
409
419
  }
410
420
  useViewer.getState().setSelection({ selectedIds: [nodeId] });
@@ -412,11 +422,14 @@ export const MoveWallEndpointTool = ({ target }) => {
412
422
  exitMoveMode();
413
423
  };
414
424
  const onCancel = () => {
425
+ if (!live)
426
+ return;
427
+ live = false;
415
428
  useAlignmentGuides.getState().clear();
416
429
  useWallSnapIndicator.getState().clear();
417
430
  restoreOriginal();
418
431
  useViewer.getState().setSelection({ selectedIds: [nodeId] });
419
- resumeSceneHistory(useScene);
432
+ releaseHistory();
420
433
  setAngleLabel(null);
421
434
  markToolCancelConsumed();
422
435
  exitMoveMode();
@@ -427,7 +440,7 @@ export const MoveWallEndpointTool = ({ target }) => {
427
440
  // re-snaps against their (now live) corners, re-attach drops them from
428
441
  // the candidate set again — without waiting for the next mousemove.
429
442
  const setAltState = (pressed) => {
430
- if (altPressedRef.current === pressed)
443
+ if (!live || altPressedRef.current === pressed)
431
444
  return;
432
445
  altPressedRef.current = pressed;
433
446
  setAltPressed(pressed);
@@ -463,7 +476,7 @@ export const MoveWallEndpointTool = ({ target }) => {
463
476
  if (!wasCommitted) {
464
477
  restoreOriginal(false);
465
478
  }
466
- resumeSceneHistory(useScene);
479
+ releaseHistory();
467
480
  emitter.off('grid:move', onGridMove);
468
481
  emitter.off('tool:cancel', onCancel);
469
482
  window.removeEventListener('pointerup', onPointerUp);
@@ -1 +1 @@
1
- {"version":3,"file":"move-shared.d.ts","sourceRoot":"","sources":["../../src/wall/move-shared.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,SAAS,EAKd,QAAQ,EACR,KAAK,kBAAkB,EACvB,KAAK,QAAQ,EACb,KAAK,aAAa,EAEnB,MAAM,kBAAkB,CAAA;AAczB,wBAAgB,SAAS,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,WAE3D;AAMD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,QAAQ,CAAC,UAAU,CAAC,CAQvF;AAED,MAAM,MAAM,kBAAkB,GAAG,QAAQ,CAAA;AAEzC;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE;IAC3C,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAA;IACtB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,aAAa,EAAE,aAAa,CAAA;IAC5B,WAAW,EAAE,aAAa,CAAA;CAC3B,GAAG,kBAAkB,EAAE,CA2CvB;AA4BD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,QAAQ,UAiB/C;AAED,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,UAAU,CAAC,OAAO,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,EACpD,OAAO,EAAE,KAAK,CAAC;IAAE,EAAE,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAA;CAAE,CAAC,GACzD,QAAQ,EAAE,CASZ;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE;IAC3C,WAAW,EAAE,KAAK,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,CAAC,CAAA;IAC1D,SAAS,EAAE,aAAa,CAAA;IACxB,OAAO,EAAE,aAAa,CAAA;IACtB,aAAa,EAAE,QAAQ,EAAE,CAAA;IACzB,SAAS,EAAE,MAAM,CAAA;CAClB,GAAG,KAAK,CAAC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,EAAE,SAAS,CAAA;CAAE,CAAC,CAoClD;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,aAAa,CAAA;IACpB,GAAG,EAAE,aAAa,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE;IAC5C,WAAW,EAAE,KAAK,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,CAAC,CAAA;IAC1D,SAAS,EAAE,aAAa,CAAA;IACxB,OAAO,EAAE,aAAa,CAAA;IACtB,aAAa,EAAE,QAAQ,EAAE,CAAA;CAC1B,GAAG,KAAK,CAAC;IAAE,KAAK,EAAE,gBAAgB,CAAC;IAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAC,CAyCrD"}
1
+ {"version":3,"file":"move-shared.d.ts","sourceRoot":"","sources":["../../src/wall/move-shared.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,SAAS,EAMd,QAAQ,EACR,KAAK,kBAAkB,EACvB,KAAK,QAAQ,EACb,KAAK,aAAa,EAEnB,MAAM,kBAAkB,CAAA;AAczB,wBAAgB,SAAS,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,WAE3D;AAMD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,QAAQ,CAAC,UAAU,CAAC,CAQvF;AAED,MAAM,MAAM,kBAAkB,GAAG,QAAQ,CAAA;AAEzC;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE;IAC3C,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAA;IACtB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,aAAa,EAAE,aAAa,CAAA;IAC5B,WAAW,EAAE,aAAa,CAAA;CAC3B,GAAG,kBAAkB,EAAE,CA2CvB;AA8BD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,QAAQ,UAiB/C;AAED,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,UAAU,CAAC,OAAO,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,EACpD,OAAO,EAAE,KAAK,CAAC;IAAE,EAAE,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAA;CAAE,CAAC,GACzD,QAAQ,EAAE,CASZ;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE;IAC3C,WAAW,EAAE,KAAK,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,CAAC,CAAA;IAC1D,SAAS,EAAE,aAAa,CAAA;IACxB,OAAO,EAAE,aAAa,CAAA;IACtB,aAAa,EAAE,QAAQ,EAAE,CAAA;IACzB,SAAS,EAAE,MAAM,CAAA;CAClB,GAAG,KAAK,CAAC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,EAAE,SAAS,CAAA;CAAE,CAAC,CAoClD;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,aAAa,CAAA;IACpB,GAAG,EAAE,aAAa,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE;IAC5C,WAAW,EAAE,KAAK,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,CAAC,CAAA;IAC1D,SAAS,EAAE,aAAa,CAAA;IACxB,OAAO,EAAE,aAAa,CAAA;IACtB,aAAa,EAAE,QAAQ,EAAE,CAAA;CAC1B,GAAG,KAAK,CAAC;IAAE,KAAK,EAAE,gBAAgB,CAAC;IAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAC,CAyCrD"}
@@ -1,4 +1,4 @@
1
- import { getMaterialPresetByRef, parseMaterialRef, resolveMaterial, useScene, WallNode as WallSchema, } from '@pascal-app/core';
1
+ import { getMaterialPresetByRef, parseMaterialColor, parseMaterialRef, resolveMaterial, useScene, WallNode as WallSchema, } from '@pascal-app/core';
2
2
  import { isSegmentLongEnough } from '@pascal-app/editor';
3
3
  import { resolveWallOpeningCeiling } from '../shared/wall-opening-ceiling';
4
4
  /**
@@ -66,9 +66,12 @@ function wallSegmentExists(walls, start, end, parentId) {
66
66
  ((samePoint(wall.start, start) && samePoint(wall.end, end)) ||
67
67
  (samePoint(wall.start, end) && samePoint(wall.end, start))));
68
68
  }
69
- // Resolve a wall slot ref (`library:`/`scene:`) to a swatch colour, or
70
- // undefined when the ref is absent / dangling / colourless.
69
+ // Resolve a wall slot ref (`library:`/`scene:`) or colour to a swatch colour,
70
+ // or undefined when the ref is absent / dangling / colourless.
71
71
  function resolveWallSlotRefColor(ref) {
72
+ const color = parseMaterialColor(ref);
73
+ if (color)
74
+ return color;
72
75
  const parsed = parseMaterialRef(ref);
73
76
  if (!parsed)
74
77
  return undefined;
@@ -79,17 +82,18 @@ function resolveWallSlotRefColor(ref) {
79
82
  return sceneMaterial ? resolveMaterial(sceneMaterial.material).color : undefined;
80
83
  }
81
84
  export function getWallGhostColor(wall) {
82
- const slotColor = resolveWallSlotRefColor(wall.slots?.interior) ?? resolveWallSlotRefColor(wall.slots?.exterior);
85
+ const slotColor = resolveWallSlotRefColor(wall.slots?.a) ?? resolveWallSlotRefColor(wall.slots?.b);
83
86
  if (slotColor) {
84
87
  return slotColor;
85
88
  }
89
+ const legacy = wall.legacyFaceMaterials;
86
90
  const presetColor = getMaterialPresetByRef(wall.materialPreset)?.mapProperties.color ??
87
- getMaterialPresetByRef(wall.interiorMaterialPreset)?.mapProperties.color ??
88
- getMaterialPresetByRef(wall.exteriorMaterialPreset)?.mapProperties.color;
91
+ getMaterialPresetByRef(legacy?.a?.materialPreset)?.mapProperties.color ??
92
+ getMaterialPresetByRef(legacy?.b?.materialPreset)?.mapProperties.color;
89
93
  if (presetColor) {
90
94
  return presetColor;
91
95
  }
92
- return resolveMaterial(wall.material ?? wall.interiorMaterial ?? wall.exteriorMaterial).color;
96
+ return resolveMaterial(wall.material ?? legacy?.a?.material ?? legacy?.b?.material).color;
93
97
  }
94
98
  export function getWallsAfterUpdates(nodes, updates) {
95
99
  const updateById = new Map(updates.map((update) => [update.id, update.data]));