@pascal-app/nodes 1.0.3 → 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 (708) hide show
  1. package/dist/block/definition.d.ts.map +1 -1
  2. package/dist/block/definition.js +18 -3
  3. package/dist/block/floorplan.d.ts +11 -1
  4. package/dist/block/floorplan.d.ts.map +1 -1
  5. package/dist/block/floorplan.js +81 -13
  6. package/dist/block/geometry.d.ts +2 -2
  7. package/dist/block/geometry.d.ts.map +1 -1
  8. package/dist/block/geometry.js +39 -24
  9. package/dist/block/hosted-edit.d.ts.map +1 -1
  10. package/dist/block/hosted-edit.js +25 -0
  11. package/dist/block/material-slots.d.ts +1 -3
  12. package/dist/block/material-slots.d.ts.map +1 -1
  13. package/dist/block/material-slots.js +1 -11
  14. package/dist/block/paint.d.ts.map +1 -1
  15. package/dist/block/paint.js +4 -10
  16. package/dist/block/panel.d.ts.map +1 -1
  17. package/dist/block/panel.js +8 -3
  18. package/dist/block/selection.d.ts.map +1 -1
  19. package/dist/block/selection.js +2 -2
  20. package/dist/box-vent/definition.d.ts.map +1 -1
  21. package/dist/box-vent/definition.js +2 -5
  22. package/dist/box-vent/panel.d.ts.map +1 -1
  23. package/dist/box-vent/panel.js +5 -28
  24. package/dist/cabinet/countertop-layout.d.ts +13 -2
  25. package/dist/cabinet/countertop-layout.d.ts.map +1 -1
  26. package/dist/cabinet/definition.d.ts.map +1 -1
  27. package/dist/cabinet/definition.js +1 -2
  28. package/dist/cabinet/floorplan.d.ts.map +1 -1
  29. package/dist/cabinet/floorplan.js +125 -28
  30. package/dist/cabinet/geometry/shared.d.ts +1 -2
  31. package/dist/cabinet/geometry/shared.d.ts.map +1 -1
  32. package/dist/cabinet/geometry/shared.js +1 -2
  33. package/dist/cabinet/run-layout.d.ts.map +1 -1
  34. package/dist/cabinet/run-layout.js +8 -5
  35. package/dist/cabinet/run-ops.d.ts +13 -2
  36. package/dist/cabinet/run-ops.d.ts.map +1 -1
  37. package/dist/cabinet/tool.d.ts.map +1 -1
  38. package/dist/cabinet/tool.js +22 -24
  39. package/dist/cabinet/wall-snap.d.ts.map +1 -1
  40. package/dist/cabinet/wall-snap.js +8 -8
  41. package/dist/ceiling/boundary-editor.d.ts.map +1 -1
  42. package/dist/ceiling/boundary-editor.js +5 -3
  43. package/dist/ceiling/definition.d.ts +4 -4
  44. package/dist/ceiling/definition.d.ts.map +1 -1
  45. package/dist/ceiling/definition.js +15 -15
  46. package/dist/ceiling/floorplan-affordances.d.ts +84 -4
  47. package/dist/ceiling/floorplan-affordances.d.ts.map +1 -1
  48. package/dist/ceiling/floorplan-affordances.js +0 -1
  49. package/dist/ceiling/floorplan-move.d.ts.map +1 -1
  50. package/dist/ceiling/floorplan-move.js +0 -1
  51. package/dist/ceiling/floorplan.d.ts +1 -1
  52. package/dist/ceiling/floorplan.d.ts.map +1 -1
  53. package/dist/ceiling/floorplan.js +2 -1
  54. package/dist/ceiling/height-bounds.d.ts +19 -0
  55. package/dist/ceiling/height-bounds.d.ts.map +1 -0
  56. package/dist/ceiling/height-bounds.js +24 -0
  57. package/dist/ceiling/hole-editor.d.ts.map +1 -1
  58. package/dist/ceiling/hole-editor.js +3 -4
  59. package/dist/ceiling/materials.d.ts +1 -1
  60. package/dist/ceiling/materials.d.ts.map +1 -1
  61. package/dist/ceiling/materials.js +10 -3
  62. package/dist/ceiling/paint.d.ts +2 -8
  63. package/dist/ceiling/paint.d.ts.map +1 -1
  64. package/dist/ceiling/paint.js +121 -24
  65. package/dist/ceiling/panel.d.ts.map +1 -1
  66. package/dist/ceiling/panel.js +40 -23
  67. package/dist/ceiling/renderer.d.ts.map +1 -1
  68. package/dist/ceiling/renderer.js +41 -5
  69. package/dist/chimney/move-tool.d.ts.map +1 -1
  70. package/dist/chimney/move-tool.js +8 -2
  71. package/dist/chimney/paint.d.ts.map +1 -1
  72. package/dist/chimney/paint.js +3 -10
  73. package/dist/column/definition.d.ts.map +1 -1
  74. package/dist/column/definition.js +24 -2
  75. package/dist/column/floorplan-affordances.d.ts.map +1 -1
  76. package/dist/column/floorplan-affordances.js +5 -0
  77. package/dist/column/floorplan.d.ts +1 -1
  78. package/dist/column/floorplan.d.ts.map +1 -1
  79. package/dist/column/floorplan.js +47 -2
  80. package/dist/column/hosted-resize.d.ts +101 -2
  81. package/dist/column/hosted-resize.d.ts.map +1 -1
  82. package/dist/column/panel.d.ts.map +1 -1
  83. package/dist/column/panel.js +147 -146
  84. package/dist/column/renderer.d.ts.map +1 -1
  85. package/dist/column/renderer.js +6 -4
  86. package/dist/column/surface.d.ts.map +1 -1
  87. package/dist/column/surface.js +7 -0
  88. package/dist/construction-dimension/floorplan.js +7 -3
  89. package/dist/cupola/definition.d.ts.map +1 -1
  90. package/dist/cupola/definition.js +2 -8
  91. package/dist/cupola/panel.d.ts.map +1 -1
  92. package/dist/cupola/panel.js +5 -23
  93. package/dist/door/definition.d.ts.map +1 -1
  94. package/dist/door/definition.js +12 -3
  95. package/dist/door/door-math.d.ts +5 -10
  96. package/dist/door/door-math.d.ts.map +1 -1
  97. package/dist/door/door-math.js +14 -15
  98. package/dist/door/floorplan-move.d.ts.map +1 -1
  99. package/dist/door/floorplan-move.js +3 -1
  100. package/dist/door/floorplan.d.ts.map +1 -1
  101. package/dist/door/floorplan.js +55 -21
  102. package/dist/door/mechanism.d.ts +4 -0
  103. package/dist/door/mechanism.d.ts.map +1 -0
  104. package/dist/door/mechanism.js +24 -0
  105. package/dist/door/move-tool.d.ts.map +1 -1
  106. package/dist/door/move-tool.js +72 -48
  107. package/dist/door/paint.d.ts.map +1 -1
  108. package/dist/door/paint.js +3 -0
  109. package/dist/door/panel.d.ts.map +1 -1
  110. package/dist/door/panel.js +34 -259
  111. package/dist/door/placement.d.ts +45 -0
  112. package/dist/door/placement.d.ts.map +1 -0
  113. package/dist/door/placement.js +51 -0
  114. package/dist/door/preview.d.ts.map +1 -1
  115. package/dist/door/preview.js +2 -0
  116. package/dist/door/renderer.d.ts.map +1 -1
  117. package/dist/door/renderer.js +3 -2
  118. package/dist/door/tool.d.ts.map +1 -1
  119. package/dist/door/tool.js +92 -21
  120. package/dist/dormer/csg-geometry.d.ts.map +1 -1
  121. package/dist/dormer/csg-geometry.js +2 -0
  122. package/dist/dormer/paint.d.ts.map +1 -1
  123. package/dist/dormer/paint.js +2 -5
  124. package/dist/dormer/panel.d.ts.map +1 -1
  125. package/dist/dormer/panel.js +4 -14
  126. package/dist/downspout/definition.d.ts.map +1 -1
  127. package/dist/downspout/definition.js +2 -2
  128. package/dist/duct-fitting/definition.d.ts.map +1 -1
  129. package/dist/duct-fitting/definition.js +2 -1
  130. package/dist/duct-fitting/geometry.d.ts.map +1 -1
  131. package/dist/duct-fitting/geometry.js +1 -1
  132. package/dist/duct-fitting/move-tool.d.ts.map +1 -1
  133. package/dist/duct-fitting/move-tool.js +8 -2
  134. package/dist/duct-segment/definition.d.ts.map +1 -1
  135. package/dist/duct-segment/definition.js +2 -2
  136. package/dist/duct-segment/geometry.d.ts.map +1 -1
  137. package/dist/duct-segment/geometry.js +1 -1
  138. package/dist/duct-segment/move-tool.d.ts.map +1 -1
  139. package/dist/duct-segment/move-tool.js +8 -2
  140. package/dist/elevator/definition.d.ts.map +1 -1
  141. package/dist/elevator/definition.js +1 -2
  142. package/dist/elevator/panel.d.ts.map +1 -1
  143. package/dist/elevator/panel.js +5 -27
  144. package/dist/elevator/parametrics.js +1 -1
  145. package/dist/elevator/renderer.d.ts.map +1 -1
  146. package/dist/elevator/renderer.js +3 -4
  147. package/dist/eyebrow-vent/definition.d.ts.map +1 -1
  148. package/dist/eyebrow-vent/definition.js +2 -5
  149. package/dist/eyebrow-vent/paint.d.ts.map +1 -1
  150. package/dist/eyebrow-vent/paint.js +3 -6
  151. package/dist/eyebrow-vent/panel.d.ts.map +1 -1
  152. package/dist/eyebrow-vent/panel.js +5 -23
  153. package/dist/fence/actions/move-endpoint.d.ts +1 -1
  154. package/dist/fence/actions/move-endpoint.d.ts.map +1 -1
  155. package/dist/fence/actions/move-endpoint.js +2 -1
  156. package/dist/fence/definition.d.ts +2 -1
  157. package/dist/fence/definition.d.ts.map +1 -1
  158. package/dist/fence/definition.js +83 -28
  159. package/dist/fence/drafting.d.ts +36 -0
  160. package/dist/fence/drafting.d.ts.map +1 -0
  161. package/dist/fence/drafting.js +210 -0
  162. package/dist/fence/feature-tool.d.ts +4 -0
  163. package/dist/fence/feature-tool.d.ts.map +1 -0
  164. package/dist/fence/feature-tool.js +140 -0
  165. package/dist/fence/features.d.ts +2 -0
  166. package/dist/fence/features.d.ts.map +1 -0
  167. package/dist/fence/features.js +12 -0
  168. package/dist/fence/floorplan-affordances.d.ts.map +1 -1
  169. package/dist/fence/floorplan-affordances.js +2 -1
  170. package/dist/fence/floorplan.d.ts +2 -3
  171. package/dist/fence/floorplan.d.ts.map +1 -1
  172. package/dist/fence/floorplan.js +131 -71
  173. package/dist/fence/geometry-parts.d.ts +50 -0
  174. package/dist/fence/geometry-parts.d.ts.map +1 -0
  175. package/dist/fence/geometry-parts.js +1144 -0
  176. package/dist/fence/geometry.d.ts +2 -3
  177. package/dist/fence/geometry.d.ts.map +1 -1
  178. package/dist/fence/geometry.js +84 -7
  179. package/dist/fence/index.d.ts +1 -0
  180. package/dist/fence/index.d.ts.map +1 -1
  181. package/dist/fence/index.js +1 -0
  182. package/dist/fence/inspector-editors.d.ts +15 -0
  183. package/dist/fence/inspector-editors.d.ts.map +1 -1
  184. package/dist/fence/inspector-editors.js +128 -3
  185. package/dist/fence/lift.d.ts.map +1 -1
  186. package/dist/fence/lift.js +5 -2
  187. package/dist/fence/move-tool.js +2 -1
  188. package/dist/fence/panel-model.d.ts +4 -0
  189. package/dist/fence/panel-model.d.ts.map +1 -0
  190. package/dist/fence/panel-model.js +12 -0
  191. package/dist/fence/parametrics.d.ts +0 -12
  192. package/dist/fence/parametrics.d.ts.map +1 -1
  193. package/dist/fence/parametrics.js +185 -18
  194. package/dist/fence/system.d.ts.map +1 -1
  195. package/dist/fence/system.js +141 -31
  196. package/dist/fence/tool.d.ts.map +1 -1
  197. package/dist/fence/tool.js +256 -47
  198. package/dist/fence-feature/actions.d.ts +7 -0
  199. package/dist/fence-feature/actions.d.ts.map +1 -0
  200. package/dist/fence-feature/actions.js +26 -0
  201. package/dist/fence-feature/definition.d.ts +4 -0
  202. package/dist/fence-feature/definition.d.ts.map +1 -0
  203. package/dist/fence-feature/definition.js +112 -0
  204. package/dist/fence-feature/floorplan-affordances.d.ts +3 -0
  205. package/dist/fence-feature/floorplan-affordances.d.ts.map +1 -0
  206. package/dist/fence-feature/floorplan-affordances.js +37 -0
  207. package/dist/fence-feature/floorplan.d.ts +4 -0
  208. package/dist/fence-feature/floorplan.d.ts.map +1 -0
  209. package/dist/fence-feature/floorplan.js +120 -0
  210. package/dist/fence-feature/geometry.d.ts +5 -0
  211. package/dist/fence-feature/geometry.d.ts.map +1 -0
  212. package/dist/fence-feature/geometry.js +43 -0
  213. package/dist/fence-feature/handles.d.ts +5 -0
  214. package/dist/fence-feature/handles.d.ts.map +1 -0
  215. package/dist/fence-feature/handles.js +84 -0
  216. package/dist/fence-feature/inspector.d.ts +6 -0
  217. package/dist/fence-feature/inspector.d.ts.map +1 -0
  218. package/dist/fence-feature/inspector.js +214 -0
  219. package/dist/fence-feature/interaction.d.ts +3 -0
  220. package/dist/fence-feature/interaction.d.ts.map +1 -0
  221. package/dist/fence-feature/interaction.js +41 -0
  222. package/dist/fence-feature/move-session.d.ts +9 -0
  223. package/dist/fence-feature/move-session.d.ts.map +1 -0
  224. package/dist/fence-feature/move-session.js +48 -0
  225. package/dist/fence-feature/move-tool.d.ts +5 -0
  226. package/dist/fence-feature/move-tool.d.ts.map +1 -0
  227. package/dist/fence-feature/move-tool.js +58 -0
  228. package/dist/fence-feature/pick-target.d.ts +7 -0
  229. package/dist/fence-feature/pick-target.d.ts.map +1 -0
  230. package/dist/fence-feature/pick-target.js +52 -0
  231. package/dist/floor-opening/definition.d.ts +3 -0
  232. package/dist/floor-opening/definition.d.ts.map +1 -0
  233. package/dist/floor-opening/definition.js +41 -0
  234. package/dist/floor-opening/floorplan.d.ts +156 -0
  235. package/dist/floor-opening/floorplan.d.ts.map +1 -0
  236. package/dist/floor-opening/floorplan.js +63 -0
  237. package/dist/gutter/definition.d.ts.map +1 -1
  238. package/dist/gutter/definition.js +2 -2
  239. package/dist/imported-mesh/definition.d.ts.map +1 -1
  240. package/dist/imported-mesh/definition.js +2 -0
  241. package/dist/imported-mesh/geometry.d.ts +1 -1
  242. package/dist/imported-mesh/geometry.d.ts.map +1 -1
  243. package/dist/imported-mesh/geometry.js +40 -12
  244. package/dist/index.d.ts +13 -2
  245. package/dist/index.d.ts.map +1 -1
  246. package/dist/index.js +20 -2
  247. package/dist/item/authored-face-host.d.ts +10 -0
  248. package/dist/item/authored-face-host.d.ts.map +1 -0
  249. package/dist/item/authored-face-host.js +87 -0
  250. package/dist/item/authored-params.d.ts +15 -0
  251. package/dist/item/authored-params.d.ts.map +1 -0
  252. package/dist/item/authored-params.js +72 -0
  253. package/dist/item/definition.d.ts +2 -2
  254. package/dist/item/definition.d.ts.map +1 -1
  255. package/dist/item/definition.js +33 -4
  256. package/dist/item/floorplan.d.ts +1 -1
  257. package/dist/item/floorplan.d.ts.map +1 -1
  258. package/dist/item/floorplan.js +35 -5
  259. package/dist/item/index.d.ts +1 -0
  260. package/dist/item/index.d.ts.map +1 -1
  261. package/dist/item/index.js +1 -0
  262. package/dist/item/model-loader.d.ts +2 -0
  263. package/dist/item/model-loader.d.ts.map +1 -1
  264. package/dist/item/model-loader.js +55 -23
  265. package/dist/item/move-tool.js +4 -4
  266. package/dist/item/paint.d.ts.map +1 -1
  267. package/dist/item/paint.js +5 -24
  268. package/dist/item/panel.d.ts +1 -3
  269. package/dist/item/panel.d.ts.map +1 -1
  270. package/dist/item/panel.js +20 -24
  271. package/dist/item/placement-notice.d.ts +14 -0
  272. package/dist/item/placement-notice.d.ts.map +1 -0
  273. package/dist/item/placement-notice.js +38 -0
  274. package/dist/item/plan-symbols.d.ts +67 -0
  275. package/dist/item/plan-symbols.d.ts.map +1 -0
  276. package/dist/item/plan-symbols.js +407 -0
  277. package/dist/item/renderer.d.ts +10 -0
  278. package/dist/item/renderer.d.ts.map +1 -1
  279. package/dist/item/renderer.js +64 -38
  280. package/dist/item/script-param-defaults.d.ts +12 -0
  281. package/dist/item/script-param-defaults.d.ts.map +1 -0
  282. package/dist/item/script-param-defaults.js +34 -0
  283. package/dist/lean-to-extension/definition.d.ts.map +1 -1
  284. package/dist/lean-to-extension/definition.js +1 -2
  285. package/dist/lean-to-extension/geometry.d.ts.map +1 -1
  286. package/dist/lean-to-extension/geometry.js +1 -1
  287. package/dist/lean-to-extension/layout.d.ts.map +1 -1
  288. package/dist/lean-to-extension/layout.js +2 -3
  289. package/dist/lean-to-extension/placement-validation.d.ts.map +1 -1
  290. package/dist/lean-to-extension/placement-validation.js +5 -5
  291. package/dist/lean-to-extension/tool.d.ts.map +1 -1
  292. package/dist/lean-to-extension/tool.js +5 -5
  293. package/dist/lineset/move-tool.d.ts.map +1 -1
  294. package/dist/lineset/move-tool.js +8 -2
  295. package/dist/liquid-line/move-tool.d.ts.map +1 -1
  296. package/dist/liquid-line/move-tool.js +8 -2
  297. package/dist/measurement/definition.js +1 -1
  298. package/dist/pipe-fitting/move-tool.d.ts.map +1 -1
  299. package/dist/pipe-fitting/move-tool.js +8 -2
  300. package/dist/pipe-segment/move-tool.d.ts.map +1 -1
  301. package/dist/pipe-segment/move-tool.js +8 -2
  302. package/dist/procedural-item/animation.d.ts +8 -0
  303. package/dist/procedural-item/animation.d.ts.map +1 -0
  304. package/dist/procedural-item/animation.js +116 -0
  305. package/dist/procedural-item/definition.d.ts.map +1 -1
  306. package/dist/procedural-item/definition.js +74 -8
  307. package/dist/procedural-item/geometry.d.ts +5 -1
  308. package/dist/procedural-item/geometry.d.ts.map +1 -1
  309. package/dist/procedural-item/geometry.js +239 -15
  310. package/dist/procedural-item/renderer.d.ts.map +1 -1
  311. package/dist/procedural-item/renderer.js +272 -23
  312. package/dist/ridge-vent/panel.d.ts.map +1 -1
  313. package/dist/ridge-vent/panel.js +5 -23
  314. package/dist/ridge-vent/renderer.d.ts.map +1 -1
  315. package/dist/ridge-vent/renderer.js +9 -8
  316. package/dist/roof/definition.d.ts.map +1 -1
  317. package/dist/roof/definition.js +4 -1
  318. package/dist/roof/floorplan.d.ts +8 -0
  319. package/dist/roof/floorplan.d.ts.map +1 -1
  320. package/dist/roof/floorplan.js +194 -18
  321. package/dist/roof/panel-model.d.ts.map +1 -1
  322. package/dist/roof/panel-model.js +10 -6
  323. package/dist/roof/panel.d.ts.map +1 -1
  324. package/dist/roof/panel.js +3 -10
  325. package/dist/roof/renderer.d.ts.map +1 -1
  326. package/dist/roof/renderer.js +5 -2
  327. package/dist/roof-segment/panel.d.ts.map +1 -1
  328. package/dist/roof-segment/panel.js +5 -24
  329. package/dist/roof-segment/renderer.d.ts.map +1 -1
  330. package/dist/roof-segment/renderer.js +17 -8
  331. package/dist/separator/definition.d.ts +3 -0
  332. package/dist/separator/definition.d.ts.map +1 -0
  333. package/dist/separator/definition.js +39 -0
  334. package/dist/separator/renderer.d.ts +5 -0
  335. package/dist/separator/renderer.d.ts.map +1 -0
  336. package/dist/separator/renderer.js +36 -0
  337. package/dist/shared/duct-body-paint.d.ts +0 -4
  338. package/dist/shared/duct-body-paint.d.ts.map +1 -1
  339. package/dist/shared/duct-body-paint.js +1 -5
  340. package/dist/shared/item-interaction-actions.d.ts +6 -0
  341. package/dist/shared/item-interaction-actions.d.ts.map +1 -0
  342. package/dist/shared/item-interaction-actions.js +27 -0
  343. package/dist/shared/item-interactions.d.ts +9 -0
  344. package/dist/shared/item-interactions.d.ts.map +1 -0
  345. package/dist/shared/item-interactions.js +74 -0
  346. package/dist/shared/item-light-placement.d.ts +2 -0
  347. package/dist/shared/item-light-placement.d.ts.map +1 -0
  348. package/dist/shared/item-light-placement.js +3 -0
  349. package/dist/shared/move-roof-tool.js +2 -1
  350. package/dist/shared/node-batch/batchable.d.ts +12 -0
  351. package/dist/shared/node-batch/batchable.d.ts.map +1 -0
  352. package/dist/shared/node-batch/batchable.js +41 -0
  353. package/dist/shared/node-batch/candidates.d.ts +7 -5
  354. package/dist/shared/node-batch/candidates.d.ts.map +1 -1
  355. package/dist/shared/node-batch/candidates.js +43 -59
  356. package/dist/shared/node-batch/release.d.ts +8 -0
  357. package/dist/shared/node-batch/release.d.ts.map +1 -0
  358. package/dist/shared/node-batch/release.js +16 -0
  359. package/dist/shared/node-batch/system.d.ts.map +1 -1
  360. package/dist/shared/node-batch/system.js +17 -12
  361. package/dist/shared/node-batch/types.d.ts +4 -1
  362. package/dist/shared/node-batch/types.d.ts.map +1 -1
  363. package/dist/shared/opening-documentation.d.ts +13 -1
  364. package/dist/shared/opening-documentation.d.ts.map +1 -1
  365. package/dist/shared/opening-documentation.js +245 -59
  366. package/dist/shared/opening-guides-runtime.d.ts.map +1 -1
  367. package/dist/shared/opening-guides-runtime.js +17 -14
  368. package/dist/shared/opening-placement-dimensions.d.ts.map +1 -1
  369. package/dist/shared/opening-placement-dimensions.js +3 -3
  370. package/dist/shared/opening-plane-offset.d.ts +23 -0
  371. package/dist/shared/opening-plane-offset.d.ts.map +1 -0
  372. package/dist/shared/opening-plane-offset.js +24 -0
  373. package/dist/shared/polygon-centroid-move.d.ts.map +1 -1
  374. package/dist/shared/polygon-centroid-move.js +4 -1
  375. package/dist/shared/polygon-vertex-affordance.d.ts.map +1 -1
  376. package/dist/shared/polygon-vertex-affordance.js +19 -15
  377. package/dist/shared/run-hangers.d.ts.map +1 -1
  378. package/dist/shared/run-hangers.js +5 -4
  379. package/dist/shared/scripted-opening-handles.d.ts +18 -0
  380. package/dist/shared/scripted-opening-handles.d.ts.map +1 -0
  381. package/dist/shared/scripted-opening-handles.js +53 -0
  382. package/dist/shared/scripted-opening.d.ts +25 -0
  383. package/dist/shared/scripted-opening.d.ts.map +1 -0
  384. package/dist/shared/scripted-opening.js +72 -0
  385. package/dist/shared/slot-paint.d.ts +14 -2
  386. package/dist/shared/slot-paint.d.ts.map +1 -1
  387. package/dist/shared/slot-paint.js +29 -29
  388. package/dist/shared/surface-paint.d.ts.map +1 -1
  389. package/dist/shared/surface-paint.js +2 -5
  390. package/dist/shared/swap-preview-material.d.ts +11 -0
  391. package/dist/shared/swap-preview-material.d.ts.map +1 -0
  392. package/dist/shared/swap-preview-material.js +16 -0
  393. package/dist/shared/system-checks.d.ts.map +1 -1
  394. package/dist/shared/system-checks.js +5 -3
  395. package/dist/shared/wall-attach-target.d.ts +3 -10
  396. package/dist/shared/wall-attach-target.d.ts.map +1 -1
  397. package/dist/shared/wall-attach-target.js +3 -63
  398. package/dist/shared/wall-opening-ceiling.d.ts +5 -15
  399. package/dist/shared/wall-opening-ceiling.d.ts.map +1 -1
  400. package/dist/shared/wall-opening-ceiling.js +10 -18
  401. package/dist/shelf/definition.d.ts.map +1 -1
  402. package/dist/shelf/definition.js +1 -1
  403. package/dist/shelf/geometry.d.ts.map +1 -1
  404. package/dist/shelf/geometry.js +1 -2
  405. package/dist/shelf/paint.d.ts.map +1 -1
  406. package/dist/shelf/paint.js +4 -10
  407. package/dist/site/line-ribbon.d.ts +31 -0
  408. package/dist/site/line-ribbon.d.ts.map +1 -0
  409. package/dist/site/line-ribbon.js +117 -0
  410. package/dist/site/lot-mask.d.ts +18 -0
  411. package/dist/site/lot-mask.d.ts.map +1 -0
  412. package/dist/site/lot-mask.js +35 -0
  413. package/dist/site/panel.d.ts +10 -0
  414. package/dist/site/panel.d.ts.map +1 -0
  415. package/dist/site/panel.js +155 -0
  416. package/dist/site/parametrics.d.ts +7 -0
  417. package/dist/site/parametrics.d.ts.map +1 -1
  418. package/dist/site/parametrics.js +8 -0
  419. package/dist/site/recessed-slab-ground-holes.d.ts.map +1 -1
  420. package/dist/site/recessed-slab-ground-holes.js +5 -2
  421. package/dist/site/renderer.d.ts.map +1 -1
  422. package/dist/site/renderer.js +150 -19
  423. package/dist/site/setbacks.d.ts +33 -0
  424. package/dist/site/setbacks.d.ts.map +1 -0
  425. package/dist/site/setbacks.js +204 -0
  426. package/dist/site/terrain-geometry.d.ts +28 -1
  427. package/dist/site/terrain-geometry.d.ts.map +1 -1
  428. package/dist/site/terrain-geometry.js +78 -4
  429. package/dist/site/terrain-holes.d.ts +15 -0
  430. package/dist/site/terrain-holes.d.ts.map +1 -0
  431. package/dist/site/terrain-holes.js +74 -0
  432. package/dist/site/terrain-mesh.d.ts +9 -2
  433. package/dist/site/terrain-mesh.d.ts.map +1 -1
  434. package/dist/site/terrain-mesh.js +36 -9
  435. package/dist/site/terrain-renderer.d.ts +9 -2
  436. package/dist/site/terrain-renderer.d.ts.map +1 -1
  437. package/dist/site/terrain-renderer.js +14 -4
  438. package/dist/slab/boundary-editor.d.ts +1 -1
  439. package/dist/slab/boundary-editor.d.ts.map +1 -1
  440. package/dist/slab/boundary-editor.js +13 -13
  441. package/dist/slab/definition.d.ts.map +1 -1
  442. package/dist/slab/definition.js +19 -3
  443. package/dist/slab/dependency-tracker.d.ts.map +1 -1
  444. package/dist/slab/dependency-tracker.js +67 -7
  445. package/dist/slab/elevation-limit.d.ts.map +1 -1
  446. package/dist/slab/elevation-limit.js +2 -2
  447. package/dist/slab/floorplan-affordances.d.ts +176 -4
  448. package/dist/slab/floorplan-affordances.d.ts.map +1 -1
  449. package/dist/slab/floorplan-affordances.js +0 -1
  450. package/dist/slab/floorplan-move.d.ts.map +1 -1
  451. package/dist/slab/floorplan-move.js +3 -4
  452. package/dist/slab/floorplan.d.ts +7 -0
  453. package/dist/slab/floorplan.d.ts.map +1 -1
  454. package/dist/slab/floorplan.js +22 -5
  455. package/dist/slab/geometry.d.ts.map +1 -1
  456. package/dist/slab/geometry.js +186 -76
  457. package/dist/slab/move-tool.js +7 -6
  458. package/dist/slab/paint.d.ts +18 -5
  459. package/dist/slab/paint.d.ts.map +1 -1
  460. package/dist/slab/paint.js +458 -9
  461. package/dist/slab/panel.d.ts.map +1 -1
  462. package/dist/slab/panel.js +28 -9
  463. package/dist/slab/placement-ownership.d.ts +2 -1
  464. package/dist/slab/placement-ownership.d.ts.map +1 -1
  465. package/dist/slab/placement-ownership.js +2 -2
  466. package/dist/slab/surface-split.d.ts +24 -0
  467. package/dist/slab/surface-split.d.ts.map +1 -0
  468. package/dist/slab/surface-split.js +389 -0
  469. package/dist/slab/tool.d.ts.map +1 -1
  470. package/dist/slab/tool.js +3 -3
  471. package/dist/stair/baluster-geometry.d.ts +21 -0
  472. package/dist/stair/baluster-geometry.d.ts.map +1 -0
  473. package/dist/stair/baluster-geometry.js +74 -0
  474. package/dist/stair/baluster-guard.d.ts +50 -0
  475. package/dist/stair/baluster-guard.d.ts.map +1 -0
  476. package/dist/stair/baluster-guard.js +71 -0
  477. package/dist/stair/boards-guard.d.ts +37 -0
  478. package/dist/stair/boards-guard.d.ts.map +1 -0
  479. package/dist/stair/boards-guard.js +61 -0
  480. package/dist/stair/cable-guard.d.ts +39 -0
  481. package/dist/stair/cable-guard.d.ts.map +1 -0
  482. package/dist/stair/cable-guard.js +105 -0
  483. package/dist/stair/construction-controls.d.ts +15 -0
  484. package/dist/stair/construction-controls.d.ts.map +1 -0
  485. package/dist/stair/construction-controls.js +29 -0
  486. package/dist/stair/continuous-railings.d.ts +10 -0
  487. package/dist/stair/continuous-railings.d.ts.map +1 -0
  488. package/dist/stair/continuous-railings.js +159 -0
  489. package/dist/stair/definition.d.ts.map +1 -1
  490. package/dist/stair/definition.js +16 -37
  491. package/dist/stair/documentation.d.ts +1 -1
  492. package/dist/stair/documentation.d.ts.map +1 -1
  493. package/dist/stair/documentation.js +10 -17
  494. package/dist/stair/floorplan-affordances.d.ts.map +1 -1
  495. package/dist/stair/floorplan-affordances.js +9 -25
  496. package/dist/stair/floorplan.d.ts +1 -23
  497. package/dist/stair/floorplan.d.ts.map +1 -1
  498. package/dist/stair/floorplan.js +102 -86
  499. package/dist/stair/glass-guard.d.ts +72 -0
  500. package/dist/stair/glass-guard.d.ts.map +1 -0
  501. package/dist/stair/glass-guard.js +167 -0
  502. package/dist/stair/guard-path.d.ts +119 -0
  503. package/dist/stair/guard-path.d.ts.map +1 -0
  504. package/dist/stair/guard-path.js +208 -0
  505. package/dist/stair/materials.d.ts +11 -0
  506. package/dist/stair/materials.d.ts.map +1 -0
  507. package/dist/stair/materials.js +51 -0
  508. package/dist/stair/metal-guard.d.ts +38 -0
  509. package/dist/stair/metal-guard.d.ts.map +1 -0
  510. package/dist/stair/metal-guard.js +79 -0
  511. package/dist/stair/paint.d.ts +32 -0
  512. package/dist/stair/paint.d.ts.map +1 -1
  513. package/dist/stair/paint.js +75 -36
  514. package/dist/stair/panel.d.ts.map +1 -1
  515. package/dist/stair/panel.js +154 -17
  516. package/dist/stair/parametrics.d.ts +1 -1
  517. package/dist/stair/parametrics.d.ts.map +1 -1
  518. package/dist/stair/parametrics.js +32 -15
  519. package/dist/stair/plan-entry.d.ts +31 -0
  520. package/dist/stair/plan-entry.d.ts.map +1 -0
  521. package/dist/stair/plan-entry.js +325 -0
  522. package/dist/stair/post-and-rail-guard.d.ts +31 -0
  523. package/dist/stair/post-and-rail-guard.d.ts.map +1 -0
  524. package/dist/stair/post-and-rail-guard.js +63 -0
  525. package/dist/stair/railing-controls.d.ts +9 -0
  526. package/dist/stair/railing-controls.d.ts.map +1 -0
  527. package/dist/stair/railing-controls.js +49 -0
  528. package/dist/stair/renderer.d.ts.map +1 -1
  529. package/dist/stair/renderer.js +259 -259
  530. package/dist/stair/use-stair-render-data.d.ts +317 -0
  531. package/dist/stair/use-stair-render-data.d.ts.map +1 -0
  532. package/dist/stair/use-stair-render-data.js +73 -0
  533. package/dist/stair-segment/definition.d.ts.map +1 -1
  534. package/dist/stair-segment/definition.js +51 -10
  535. package/dist/stair-segment/panel.d.ts.map +1 -1
  536. package/dist/stair-segment/panel.js +36 -42
  537. package/dist/stair-segment/parametrics.d.ts +1 -1
  538. package/dist/stair-segment/parametrics.d.ts.map +1 -1
  539. package/dist/stair-segment/parametrics.js +21 -8
  540. package/dist/stair-segment/renderer.d.ts.map +1 -1
  541. package/dist/stair-segment/renderer.js +16 -28
  542. package/dist/turbine-vent/definition.d.ts.map +1 -1
  543. package/dist/turbine-vent/definition.js +2 -5
  544. package/dist/turbine-vent/paint.d.ts.map +1 -1
  545. package/dist/turbine-vent/paint.js +2 -5
  546. package/dist/turbine-vent/panel.d.ts.map +1 -1
  547. package/dist/turbine-vent/panel.js +5 -23
  548. package/dist/unit/unit-panel.d.ts.map +1 -1
  549. package/dist/unit/unit-panel.js +6 -1
  550. package/dist/wall/actions.d.ts.map +1 -1
  551. package/dist/wall/actions.js +7 -2
  552. package/dist/wall/construction-dimensions.js +8 -5
  553. package/dist/wall/contextual-dimensions.js +4 -4
  554. package/dist/wall/curtain-wall-materials.d.ts +1 -1
  555. package/dist/wall/curtain-wall-materials.d.ts.map +1 -1
  556. package/dist/wall/curtain-wall-materials.js +2 -2
  557. package/dist/wall/curve-tool.d.ts.map +1 -1
  558. package/dist/wall/curve-tool.js +4 -0
  559. package/dist/wall/definition.d.ts.map +1 -1
  560. package/dist/wall/definition.js +41 -17
  561. package/dist/wall/floorplan-move.d.ts +1 -1
  562. package/dist/wall/floorplan-move.d.ts.map +1 -1
  563. package/dist/wall/floorplan-move.js +20 -83
  564. package/dist/wall/floorplan-tool.d.ts.map +1 -1
  565. package/dist/wall/floorplan-tool.js +10 -11
  566. package/dist/wall/floorplan.d.ts +3 -1
  567. package/dist/wall/floorplan.d.ts.map +1 -1
  568. package/dist/wall/floorplan.js +184 -21
  569. package/dist/wall/measurement.d.ts.map +1 -1
  570. package/dist/wall/measurement.js +5 -5
  571. package/dist/wall/move-endpoint-tool.d.ts.map +1 -1
  572. package/dist/wall/move-endpoint-tool.js +20 -7
  573. package/dist/wall/move-shared.d.ts.map +1 -1
  574. package/dist/wall/move-shared.js +11 -7
  575. package/dist/wall/move-tool.d.ts.map +1 -1
  576. package/dist/wall/move-tool.js +118 -148
  577. package/dist/wall/paint.d.ts +26 -15
  578. package/dist/wall/paint.d.ts.map +1 -1
  579. package/dist/wall/paint.js +306 -117
  580. package/dist/wall/panel-model.d.ts +18 -0
  581. package/dist/wall/panel-model.d.ts.map +1 -1
  582. package/dist/wall/panel-model.js +77 -19
  583. package/dist/wall/panel.d.ts.map +1 -1
  584. package/dist/wall/panel.js +217 -41
  585. package/dist/wall/parametrics.d.ts.map +1 -1
  586. package/dist/wall/parametrics.js +3 -0
  587. package/dist/wall/rectangle-command.d.ts +111 -12
  588. package/dist/wall/rectangle-command.d.ts.map +1 -1
  589. package/dist/wall/rectangle-tool.d.ts.map +1 -1
  590. package/dist/wall/rectangle-tool.js +26 -8
  591. package/dist/wall/renderer.d.ts.map +1 -1
  592. package/dist/wall/renderer.js +4 -2
  593. package/dist/wall/split-floorplan-layer.d.ts.map +1 -1
  594. package/dist/wall/split-floorplan-layer.js +7 -7
  595. package/dist/wall/split-session.d.ts.map +1 -1
  596. package/dist/wall/split-session.js +7 -1
  597. package/dist/wall/system.d.ts.map +1 -1
  598. package/dist/wall/system.js +36 -4
  599. package/dist/wall/tool.d.ts.map +1 -1
  600. package/dist/wall/tool.js +105 -49
  601. package/dist/wall/treatment-level-data.d.ts +3 -2
  602. package/dist/wall/treatment-level-data.d.ts.map +1 -1
  603. package/dist/wall/treatment-level-data.js +17 -13
  604. package/dist/wall/treatments.d.ts +10 -10
  605. package/dist/wall/treatments.d.ts.map +1 -1
  606. package/dist/wall/treatments.js +67 -54
  607. package/dist/wall/wall-batch-system.d.ts +7 -0
  608. package/dist/wall/wall-batch-system.d.ts.map +1 -1
  609. package/dist/wall/wall-batch-system.js +35 -3
  610. package/dist/wall/wall-batch.d.ts +6 -0
  611. package/dist/wall/wall-batch.d.ts.map +1 -1
  612. package/dist/wall/wall-batch.js +7 -1
  613. package/dist/window/definition.d.ts.map +1 -1
  614. package/dist/window/definition.js +12 -4
  615. package/dist/window/floorplan-move.d.ts.map +1 -1
  616. package/dist/window/floorplan-move.js +3 -1
  617. package/dist/window/floorplan.d.ts.map +1 -1
  618. package/dist/window/floorplan.js +145 -60
  619. package/dist/window/mechanism.d.ts +4 -0
  620. package/dist/window/mechanism.d.ts.map +1 -0
  621. package/dist/window/mechanism.js +20 -0
  622. package/dist/window/move-tool.d.ts.map +1 -1
  623. package/dist/window/move-tool.js +79 -48
  624. package/dist/window/paint.d.ts.map +1 -1
  625. package/dist/window/paint.js +3 -0
  626. package/dist/window/panel.d.ts.map +1 -1
  627. package/dist/window/panel.js +32 -88
  628. package/dist/window/placement.d.ts +23 -0
  629. package/dist/window/placement.d.ts.map +1 -0
  630. package/dist/window/placement.js +66 -0
  631. package/dist/window/preview.d.ts.map +1 -1
  632. package/dist/window/preview.js +2 -0
  633. package/dist/window/renderer.d.ts.map +1 -1
  634. package/dist/window/renderer.js +3 -2
  635. package/dist/window/tool.d.ts.map +1 -1
  636. package/dist/window/tool.js +96 -24
  637. package/dist/window/window-math.d.ts +6 -14
  638. package/dist/window/window-math.d.ts.map +1 -1
  639. package/dist/window/window-math.js +14 -20
  640. package/dist/zone/contextual-dimensions.d.ts.map +1 -1
  641. package/dist/zone/contextual-dimensions.js +6 -28
  642. package/dist/zone/definition.d.ts.map +1 -1
  643. package/dist/zone/definition.js +3 -3
  644. package/dist/zone/floorplan-affordances.d.ts +200 -0
  645. package/dist/zone/floorplan-affordances.d.ts.map +1 -1
  646. package/dist/zone/floorplan.d.ts +1 -1
  647. package/dist/zone/floorplan.d.ts.map +1 -1
  648. package/dist/zone/floorplan.js +93 -53
  649. package/dist/zone/quantities-panel.d.ts.map +1 -1
  650. package/dist/zone/quantities-panel.js +3 -14
  651. package/dist/zone/quick-measurement.d.ts +2 -2
  652. package/dist/zone/quick-measurement.d.ts.map +1 -1
  653. package/dist/zone/quick-measurement.js +6 -5
  654. package/dist/zone/renderer.d.ts +1 -1
  655. package/dist/zone/renderer.d.ts.map +1 -1
  656. package/dist/zone/renderer.js +58 -146
  657. package/dist/zone/room-clear-dimensions.js +3 -3
  658. package/dist/zone/room-documentation.d.ts.map +1 -1
  659. package/dist/zone/room-documentation.js +2 -6
  660. package/package.json +11 -11
  661. package/dist/block/slots.d.ts +0 -4
  662. package/dist/block/slots.d.ts.map +0 -1
  663. package/dist/block/slots.js +0 -17
  664. package/dist/cabinet/slots.d.ts +0 -4
  665. package/dist/cabinet/slots.d.ts.map +0 -1
  666. package/dist/cabinet/slots.js +0 -24
  667. package/dist/ceiling/slots.d.ts +0 -6
  668. package/dist/ceiling/slots.d.ts.map +0 -1
  669. package/dist/ceiling/slots.js +0 -7
  670. package/dist/column/slots.d.ts +0 -9
  671. package/dist/column/slots.d.ts.map +0 -1
  672. package/dist/column/slots.js +0 -19
  673. package/dist/door/slots.d.ts +0 -9
  674. package/dist/door/slots.d.ts.map +0 -1
  675. package/dist/door/slots.js +0 -20
  676. package/dist/elevator/slots.d.ts +0 -8
  677. package/dist/elevator/slots.d.ts.map +0 -1
  678. package/dist/elevator/slots.js +0 -17
  679. package/dist/fence/slots.d.ts +0 -10
  680. package/dist/fence/slots.d.ts.map +0 -1
  681. package/dist/fence/slots.js +0 -23
  682. package/dist/item/__fixtures__/main-floorplan.d.ts +0 -26
  683. package/dist/item/__fixtures__/main-floorplan.d.ts.map +0 -1
  684. package/dist/item/__fixtures__/main-floorplan.js +0 -297
  685. package/dist/lean-to-extension/slots.d.ts +0 -5
  686. package/dist/lean-to-extension/slots.d.ts.map +0 -1
  687. package/dist/lean-to-extension/slots.js +0 -15
  688. package/dist/shelf/slots.d.ts +0 -9
  689. package/dist/shelf/slots.d.ts.map +0 -1
  690. package/dist/shelf/slots.js +0 -30
  691. package/dist/slab/slots.d.ts +0 -10
  692. package/dist/slab/slots.d.ts.map +0 -1
  693. package/dist/slab/slots.js +0 -20
  694. package/dist/stair/floor-stack.d.ts +0 -10
  695. package/dist/stair/floor-stack.d.ts.map +0 -1
  696. package/dist/stair/floor-stack.js +0 -115
  697. package/dist/stair/slots.d.ts +0 -7
  698. package/dist/stair/slots.d.ts.map +0 -1
  699. package/dist/stair/slots.js +0 -13
  700. package/dist/wall/drawing-mode.d.ts +0 -12
  701. package/dist/wall/drawing-mode.d.ts.map +0 -1
  702. package/dist/wall/drawing-mode.js +0 -38
  703. package/dist/wall/slots.d.ts +0 -10
  704. package/dist/wall/slots.d.ts.map +0 -1
  705. package/dist/wall/slots.js +0 -92
  706. package/dist/window/slots.d.ts +0 -5
  707. package/dist/window/slots.d.ts.map +0 -1
  708. package/dist/window/slots.js +0 -11
@@ -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]));
@@ -1 +1 @@
1
- {"version":3,"file":"move-tool.d.ts","sourceRoot":"","sources":["../../src/wall/move-tool.tsx"],"names":[],"mappings":"AAEA,OAAO,EAwBL,KAAK,QAAQ,EACd,MAAM,kBAAkB,CAAA;AAqIzB,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,CA+jBrD,CAAA;AAED,eAAe,YAAY,CAAA"}
1
+ {"version":3,"file":"move-tool.d.ts","sourceRoot":"","sources":["../../src/wall/move-tool.tsx"],"names":[],"mappings":"AAEA,OAAO,EAgBL,KAAK,QAAQ,EACd,MAAM,kBAAkB,CAAA;AA0HzB,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,CA+hBrD,CAAA;AAED,eAAe,YAAY,CAAA"}
@@ -1,7 +1,7 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { detectSpacesForLevel, emitter, getCeilingClampBound, getPerpendicularWallMoveAxis, getPlannedLinkedWallUpdates, getStoredLevelHeight, pauseSceneHistory, planAutoCeilingsForLevel, planAutoSlabsForLevel, planWallMoveJunctions, resolveMovedWallSupportSlabPatch, resumeSceneHistory, useLiveNodeOverrides, useScene, } from '@pascal-app/core';
4
- import { CursorSphere, EDITOR_LAYER, getSegmentGridStep, isSegmentLongEnough, markToolCancelConsumed, snapBuildingLocalToWorldGrid, snapScalarToGrid, triggerSFX, useEditor, } from '@pascal-app/editor';
3
+ import { beginSceneHistoryPauseSession, createLevelStructurePreview, emitter, getPerpendicularWallMoveAxis, getPlannedLinkedWallUpdates, planWallEndRejoins, planWallMoveJunctions, resolveMovedWallSupportSlabPatch, useLiveNodeOverrides, useScene, } from '@pascal-app/core';
4
+ import { CursorSphere, EDITOR_LAYER, getSegmentGridStep, isSegmentLongEnough, markToolCancelConsumed, snapBuildingLocalToWorldGrid, snapScalarToGrid, triggerSFX, useEditor, WALL_CONNECT_SNAP_RADIUS, } from '@pascal-app/editor';
5
5
  import { useViewer } from '@pascal-app/viewer';
6
6
  import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
7
7
  import { BufferGeometry, DoubleSide, Float32BufferAttribute } from 'three';
@@ -18,11 +18,11 @@ import { buildBridgeWallCreates, buildBridgeWallPreviews, getLinkedWallSnapshots
18
18
  * move with the dragged wall via `planWallMoveJunctions`.
19
19
  * - **Bridge wall ghost previews** — when a corner separates, a
20
20
  * translucent ghost shows the new wall that would be inserted.
21
- * - **Auto-slab live preview** — `planAutoSlabsForLevel` runs every
22
- * tick so room slabs adapt to the new wall layout in real time.
23
- * - **Single-undo dance** — paused history during drag, restore +
24
- * resume + reapply on commit so one Ctrl-Z rolls back the whole
25
- * operation.
21
+ * - **Auto-slab live preview** — the structure kernel previews the level's
22
+ * rooms every tick, so room slabs adapt to the new wall layout live.
23
+ * - **One undo step** — the drag writes no history; the drop writes walls,
24
+ * supports and the sync's derived rooms as one step, through a pause
25
+ * session shared with the 2D move overlay (`commitStep`).
26
26
  * - **`isNew` metadata strip** — first commit after a fresh wall
27
27
  * placement clears the placement marker.
28
28
  * - **Activation grace** (150ms).
@@ -34,12 +34,6 @@ function rotateVector([x, z], angle) {
34
34
  const sin = Math.sin(angle);
35
35
  return [x * cos - z * sin, x * sin + z * cos];
36
36
  }
37
- function getLevelSlabs(levelId, nodes) {
38
- return Object.values(nodes).filter((entry) => entry?.type === 'slab' && (entry.parentId ?? null) === levelId);
39
- }
40
- function getLevelCeilings(levelId, nodes) {
41
- return Object.values(nodes).filter((entry) => entry?.type === 'ceiling' && (entry.parentId ?? null) === levelId);
42
- }
43
37
  function setPreviewGeometryAttributes(geometry, positions, normals, uvs) {
44
38
  geometry.setAttribute('position', new Float32BufferAttribute(positions, 3));
45
39
  geometry.setAttribute('normal', new Float32BufferAttribute(normals, 3));
@@ -58,9 +52,7 @@ function GhostWallPreviewMesh({ preview }) {
58
52
  const dz = preview.end[1] - preview.start[1];
59
53
  const length = Math.hypot(dx, dz);
60
54
  const angle = -Math.atan2(dz, dx);
61
- const geometry = useMemo(() => {
62
- return length < 0.01 ? null : createWallPreviewGeometry(length, preview.height);
63
- }, [length, preview.height]);
55
+ const geometry = useMemo(() => (length < 0.01 ? null : createWallPreviewGeometry(length, preview.height)), [length, preview.height]);
64
56
  useEffect(() => () => geometry?.dispose(), [geometry]);
65
57
  if (!geometry) {
66
58
  return null;
@@ -119,7 +111,6 @@ export const MoveWallTool = ({ node }) => {
119
111
  const originalCenter = originalCenterRef.current;
120
112
  const originalHalfVector = originalHalfVectorRef.current;
121
113
  const levelId = node.parentId ?? null;
122
- pauseSceneHistory(useScene);
123
114
  let shouldRestoreOnCleanup = true;
124
115
  let active = true;
125
116
  // Wall ids that currently carry a live position override. Cleared on commit
@@ -136,71 +127,74 @@ export const MoveWallTool = ({ node }) => {
136
127
  // the final plan is written once, atomically, on commit.
137
128
  const overrides = useLiveNodeOverrides.getState();
138
129
  const sceneState = useScene.getState();
130
+ const previewIds = new Set(updates.map((entry) => entry.id));
131
+ for (const id of touchedWallIds) {
132
+ if (previewIds.has(id))
133
+ continue;
134
+ overrides.clear(id);
135
+ if (sceneState.nodes[id])
136
+ sceneState.markDirty(id);
137
+ touchedWallIds.delete(id);
138
+ }
139
139
  overrides.setMany(updates.map((entry) => [entry.id, { start: entry.start, end: entry.end }]));
140
140
  for (const entry of updates) {
141
141
  touchedWallIds.add(entry.id);
142
142
  sceneState.markDirty(entry.id);
143
143
  }
144
144
  };
145
- // Live auto-slab / auto-ceiling preview. Calculates the new
146
- // surfaces from the moving wall configuration each tick, then
147
- // sends polygon overrides to `useLiveNodeOverrides` (and marks
148
- // the slab / ceiling dirty) so `GeometrySystem` / `CeilingSystem`
149
- // rebuild the mesh through the existing `getEffectiveNode` merge
150
- // path. *Nothing* is written to the scene store during the drag —
151
- // the store stays at pre-drag values; commit writes the final
152
- // plan in one atomic `applyNodeChanges`. Mirrors the wall's own
153
- // 2D drag pattern (`useLiveNodeOverrides` → mesh, store on
154
- // commit).
155
- //
156
- // Creates / deletes from the plan are *deferred* to commit. We
157
- // can't represent a "node that doesn't exist yet" through
158
- // overrides, so newly-detected rooms only get their slab/ceiling
159
- // materialised on release; rooms whose closing wall pulls away
160
- // keep their slab/ceiling visible (at the original polygon) until
161
- // commit clears them. UX-wise this trades the previous "ghost
162
- // appears/disappears mid-drag" feedback for atomic, undoable
163
- // commits — which is what the user asked for.
164
- //
165
- // `latestSurfacePlans` holds the most recent plan from the last
166
- // live tick. `commitSurfacesToStore` flushes it (creates,
167
- // updates, deletes) into the scene as part of the commit-time
168
- // atomic write, then `clearSurfaceOverrides` drops the override
169
- // map so the system reads from the now-committed store.
170
- let latestSurfacePlans = null;
171
- const touchedSlabIds = new Set();
172
- const touchedCeilingIds = new Set();
145
+ // Live auto-slab / auto-ceiling preview: the structure kernel's plan for the
146
+ // moved walls, published as polygon overrides so `GeometrySystem` /
147
+ // `CeilingSystem` rebuild through the `getEffectiveNode` merge while the
148
+ // store stays at pre-drag values. Surfaces a new, merged or split room
149
+ // needs appear at commit.
150
+ // The drag writes nothing to the store, so a new `nodes` reference means someone else
151
+ // changed the scene (a collaborator, an agent). Linked walls and the structure preview
152
+ // are read again from it: the drop must commit a linked wall's other end as it is now,
153
+ // and pick up a newly connected wall the same way the arm-time read would have.
154
+ const levelNodesOf = (nodes) => Object.fromEntries(Object.values(nodes)
155
+ .filter((entry) => entry.parentId === levelId)
156
+ .map((entry) => [entry.id, entry]));
157
+ let linkedNodes = useScene.getState().nodes;
158
+ let previewStructure = levelId ? createLevelStructurePreview(levelId, linkedNodes) : null;
159
+ let dragNodes = levelNodesOf(linkedNodes);
160
+ const refreshLinkedWalls = () => {
161
+ const nodes = useScene.getState().nodes;
162
+ if (nodes === linkedNodes)
163
+ return;
164
+ linkedNodes = nodes;
165
+ previewStructure = levelId ? createLevelStructurePreview(levelId, nodes) : null;
166
+ dragNodes = levelNodesOf(nodes);
167
+ if (isNew)
168
+ return;
169
+ linkedOriginalsRef.current = getLinkedWallSnapshots({
170
+ wallId: nodeId,
171
+ wallParentId: node.parentId ?? null,
172
+ originalStart,
173
+ originalEnd,
174
+ });
175
+ };
176
+ const touchedStructureIds = new Set();
173
177
  const publishLiveSurfaceOverrides = (walls) => {
174
- if (!levelId)
178
+ if (!(levelId && previewStructure))
175
179
  return;
176
180
  const levelWalls = walls.filter((wall) => (wall.parentId ?? null) === levelId);
177
181
  const sceneState = useScene.getState();
178
- const { roomPolygons } = detectSpacesForLevel(levelId, levelWalls);
179
- // Plan against the pre-drag scene — `getLevelSlabs/Ceilings`
180
- // reads from the unchanged store, so the matcher's "remap
181
- // existing room → existing slab" logic sees stable IDs across
182
- // ticks. Without this anchor, IDs would drift as overrides
183
- // re-flowed through the planner.
184
- const existingSlabs = getLevelSlabs(levelId, sceneState.nodes);
185
- const slabPlan = planAutoSlabsForLevel(roomPolygons, existingSlabs);
186
- const levelNode = sceneState.nodes[levelId];
187
- const ceilingPlan = planAutoCeilingsForLevel(roomPolygons, getLevelCeilings(levelId, sceneState.nodes), {
188
- storeyHeight: levelNode?.type === 'level' ? getStoredLevelHeight(levelNode) : undefined,
189
- ceilingClampBound: (polygon) => getCeilingClampBound(levelId, sceneState.nodes, polygon),
190
- });
191
- latestSurfacePlans = { slabs: slabPlan, ceilings: ceilingPlan };
182
+ const structurePlan = previewStructure(levelWalls);
192
183
  const overrideEntries = [];
193
- for (const update of slabPlan.update) {
194
- if (update.data.polygon === undefined)
184
+ for (const update of structurePlan) {
185
+ if (!('polygon' in update.data || 'holes' in update.data))
195
186
  continue;
196
- overrideEntries.push([update.id, { polygon: update.data.polygon }]);
197
- touchedSlabIds.add(update.id);
187
+ overrideEntries.push([update.id, update.data]);
188
+ touchedStructureIds.add(update.id);
198
189
  }
199
- for (const update of ceilingPlan.update) {
200
- if (update.data.polygon === undefined && update.data.height === undefined)
190
+ const previewIds = new Set(overrideEntries.map(([id]) => id));
191
+ for (const id of touchedStructureIds) {
192
+ if (previewIds.has(id))
201
193
  continue;
202
- overrideEntries.push([update.id, update.data]);
203
- touchedCeilingIds.add(update.id);
194
+ useLiveNodeOverrides.getState().clear(id);
195
+ if (sceneState.nodes[id])
196
+ sceneState.markDirty(id);
197
+ touchedStructureIds.delete(id);
204
198
  }
205
199
  if (overrideEntries.length > 0) {
206
200
  useLiveNodeOverrides.getState().setMany(overrideEntries);
@@ -209,56 +203,16 @@ export const MoveWallTool = ({ node }) => {
209
203
  }
210
204
  }
211
205
  };
212
- // Commit-time: flush the last live plan into the scene store as
213
- // one atomic write, then drop overrides so the renderer reads
214
- // from the now-current store state. Called from `commitPreview`
215
- // *while history is resumed*, so the entire surface delta is one
216
- // undoable step alongside the wall update.
217
- const commitSurfacesToStore = () => {
218
- if (!levelId || !latestSurfacePlans)
219
- return;
220
- const { slabs, ceilings } = latestSurfacePlans;
221
- const update = [
222
- ...slabs.update.map((entry) => ({
223
- id: entry.id,
224
- data: entry.data,
225
- })),
226
- ...ceilings.update.map((entry) => ({
227
- id: entry.id,
228
- data: entry.data,
229
- })),
230
- ];
231
- const create = [
232
- ...slabs.create.map((slab) => ({
233
- node: slab,
234
- parentId: levelId,
235
- })),
236
- ...ceilings.create.map((ceiling) => ({
237
- node: ceiling,
238
- parentId: levelId,
239
- })),
240
- ];
241
- const deleteIds = [
242
- ...slabs.delete.map((id) => id),
243
- ...ceilings.delete.map((id) => id),
244
- ];
245
- if (update.length === 0 && create.length === 0 && deleteIds.length === 0)
246
- return;
247
- useScene.getState().applyNodeChanges({
248
- update,
249
- create,
250
- delete: deleteIds,
251
- });
252
- };
253
206
  const clearSurfaceOverrides = () => {
254
207
  const overrides = useLiveNodeOverrides.getState();
255
- for (const id of touchedSlabIds)
256
- overrides.clear(id);
257
- for (const id of touchedCeilingIds)
208
+ const sceneState = useScene.getState();
209
+ for (const id of touchedStructureIds) {
258
210
  overrides.clear(id);
259
- touchedSlabIds.clear();
260
- touchedCeilingIds.clear();
261
- latestSurfacePlans = null;
211
+ // A surface the commit deleted (rooms merged) has nothing left to rebuild.
212
+ if (sceneState.nodes[id])
213
+ sceneState.markDirty(id);
214
+ }
215
+ touchedStructureIds.clear();
262
216
  };
263
217
  // Drop the wall position overrides and mark the walls dirty so they rebuild
264
218
  // from the now-authoritative store value (after commit) or the unchanged
@@ -268,7 +222,8 @@ export const MoveWallTool = ({ node }) => {
268
222
  const sceneState = useScene.getState();
269
223
  for (const id of touchedWallIds) {
270
224
  overrides.clear(id);
271
- sceneState.markDirty(id);
225
+ if (sceneState.nodes[id])
226
+ sceneState.markDirty(id);
272
227
  }
273
228
  touchedWallIds.clear();
274
229
  };
@@ -286,7 +241,8 @@ export const MoveWallTool = ({ node }) => {
286
241
  };
287
242
  const applyPreview = (nextStart, nextEnd) => {
288
243
  const previous = previewRef.current ?? { start: originalStart, end: originalEnd };
289
- if (nextStart[0] === previous.start[0] &&
244
+ if (useScene.getState().nodes === linkedNodes &&
245
+ nextStart[0] === previous.start[0] &&
290
246
  nextStart[1] === previous.start[1] &&
291
247
  nextEnd[0] === previous.end[0] &&
292
248
  nextEnd[1] === previous.end[1])
@@ -296,6 +252,7 @@ export const MoveWallTool = ({ node }) => {
296
252
  const centerX = (nextStart[0] + nextEnd[0]) / 2;
297
253
  const centerZ = (nextStart[1] + nextEnd[1]) / 2;
298
254
  setCursorLocalPos([centerX, 0, centerZ]);
255
+ refreshLinkedWalls();
299
256
  const previewPlan = getMovePlan(nextStart, nextEnd);
300
257
  const previewUpdates = [
301
258
  { id: nodeId, start: nextStart, end: nextEnd },
@@ -307,7 +264,7 @@ export const MoveWallTool = ({ node }) => {
307
264
  .map((entry) => entry.id),
308
265
  ...previewPlan.wallsToDelete.map((wall) => wall.id),
309
266
  ]);
310
- const previewSceneWalls = getWallsAfterUpdates(useScene.getState().nodes, previewUpdates.map((entry) => ({
267
+ const previewSceneWalls = getWallsAfterUpdates(dragNodes, previewUpdates.map((entry) => ({
311
268
  id: entry.id,
312
269
  data: { start: entry.start, end: entry.end },
313
270
  }))).filter((wall) => !previewCollapsedWallIds.has(wall.id));
@@ -318,10 +275,12 @@ export const MoveWallTool = ({ node }) => {
318
275
  existingWalls: previewSceneWalls,
319
276
  });
320
277
  const nextGhostWalls = bridgePreviews.map((preview) => preview.ghost);
321
- const virtualBridgeWalls = bridgePreviews.map((preview) => preview.wall);
322
278
  setGhostWallPreviews(nextGhostWalls);
323
279
  applyNodePreview(previewUpdates);
324
- publishLiveSurfaceOverrides([...previewSceneWalls, ...virtualBridgeWalls]);
280
+ publishLiveSurfaceOverrides([
281
+ ...previewSceneWalls,
282
+ ...bridgePreviews.map((preview) => preview.wall),
283
+ ]);
325
284
  };
326
285
  const restoreOriginal = () => {
327
286
  setGhostWallPreviews([]);
@@ -400,12 +359,8 @@ export const MoveWallTool = ({ node }) => {
400
359
  const commitPreview = () => {
401
360
  const preview = previewRef.current ?? { start: originalStart, end: originalEnd };
402
361
  shouldRestoreOnCleanup = false;
403
- // The store was never touched during the drag (the preview was
404
- // override-driven for both walls and surfaces), so there is no baseline to
405
- // restore before the tracked commit — just resume history and write the
406
- // final plan as one undoable change.
407
362
  setGhostWallPreviews([]);
408
- resumeSceneHistory(useScene);
363
+ refreshLinkedWalls();
409
364
  const commitPlan = getMovePlan(preview.start, preview.end);
410
365
  const linkedWallUpdates = getPlannedLinkedWallUpdates(commitPlan, originalStart, originalEnd, preview.start, preview.end);
411
366
  const collapsedLinkedWallIds = new Set([
@@ -441,31 +396,46 @@ export const MoveWallTool = ({ node }) => {
441
396
  existingWalls,
442
397
  wallCount: Object.values(sceneState.nodes).filter((entry) => entry?.type === 'wall').length,
443
398
  });
444
- sceneState.applyNodeChanges({
445
- update: commitUpdates,
446
- create: bridgeCreates,
399
+ // Elect each moved wall's support from its final line (keeping its current
400
+ // slab while that still carries it) and put any change in the same batch,
401
+ // so the live sync reconciles the drop in one pass.
402
+ const withSupport = (wall) => {
403
+ const patch = resolveMovedWallSupportSlabPatch(wall, sceneState.nodes);
404
+ return patch.supportSlabId === wall.supportSlabId ? {} : patch;
405
+ };
406
+ const wallUpdates = commitUpdates.map((entry) => ({
407
+ id: entry.id,
408
+ data: {
409
+ ...entry.data,
410
+ ...withSupport({ ...sceneState.nodes[entry.id], ...entry.data }),
411
+ },
412
+ }));
413
+ const wallCreates = bridgeCreates.map((entry) => ({
414
+ ...entry,
415
+ node: {
416
+ ...entry.node,
417
+ ...withSupport({ ...entry.node, parentId: entry.parentId ?? null }),
418
+ },
419
+ }));
420
+ // One history step, one write. The live structure sync reconciles sides,
421
+ // rooms, slabs and ceilings inside it, and its derived writes join the step.
422
+ // The drag writes nothing to the store (the preview is live overrides), so history is
423
+ // paused only for this drop. Keyed by the moving wall: in split view the 2D move overlay
424
+ // co-owns the gesture, and commitStep lifts its pause too.
425
+ const changes = planWallEndRejoins(sceneState.nodes, commitUpdates.map(({ id }) => id), WALL_CONNECT_SNAP_RADIUS, {
426
+ update: wallUpdates,
427
+ create: wallCreates,
447
428
  delete: Array.from(collapsedLinkedWallIds),
448
429
  });
449
- // Flush the last live surface plan (slab + ceiling creates,
450
- // updates, deletes) into the store while history is still
451
- // resumed, so the surface delta joins the wall change as one
452
- // undoable step. Then drop the live overrides — the renderer
453
- // now reads the committed walls + polygons directly.
454
- commitSurfacesToStore();
455
- const affectedWallIds = [
456
- ...commitUpdates.map((entry) => entry.id),
457
- ...bridgeCreates.map((entry) => entry.node.id),
458
- ];
459
- const committedNodes = useScene.getState().nodes;
460
- useScene.getState().updateNodes(affectedWallIds.flatMap((id) => {
461
- const wall = committedNodes[id];
462
- return wall?.type === 'wall'
463
- ? [{ id, data: resolveMovedWallSupportSlabPatch(wall, committedNodes) }]
464
- : [];
465
- }));
430
+ const drop = beginSceneHistoryPauseSession(useScene, { gesture: nodeId });
431
+ try {
432
+ drop.commitStep(() => useScene.getState().applyNodeChanges(changes));
433
+ }
434
+ finally {
435
+ drop.end();
436
+ }
466
437
  clearSurfaceOverrides();
467
438
  clearWallOverrides();
468
- pauseSceneHistory(useScene);
469
439
  // Claim teardown ownership so the 2D overlay's cleanup skips its
470
440
  // own revert when split-view has both mounted — see
471
441
  // `movingNodeOrigin` in `use-editor.tsx`.
@@ -490,6 +460,8 @@ export const MoveWallTool = ({ node }) => {
490
460
  commitPreview();
491
461
  };
492
462
  const onKeyDown = (event) => {
463
+ if (!active)
464
+ return;
493
465
  if (event.target instanceof HTMLInputElement || event.target instanceof HTMLTextAreaElement) {
494
466
  return;
495
467
  }
@@ -521,7 +493,6 @@ export const MoveWallTool = ({ node }) => {
521
493
  shouldRestoreOnCleanup = false;
522
494
  restoreOriginal();
523
495
  useViewer.getState().setSelection({ selectedIds: [nodeId] });
524
- resumeSceneHistory(useScene);
525
496
  markToolCancelConsumed();
526
497
  // Claim teardown ownership so the 2D overlay doesn't redundantly
527
498
  // revert the same baseline on its own cleanup.
@@ -545,7 +516,6 @@ export const MoveWallTool = ({ node }) => {
545
516
  restoreOriginal();
546
517
  }
547
518
  }
548
- resumeSceneHistory(useScene);
549
519
  emitter.off('grid:move', onGridMove);
550
520
  emitter.off('tool:cancel', onCancel);
551
521
  window.removeEventListener('pointerup', onPointerUp);
@@ -1,15 +1,19 @@
1
- import { type PaintCapability, type WallNode } from '@pascal-app/core';
2
- import { type Ray } from 'three';
1
+ import { type AnyNode, type WallPaintRole as CoreWallPaintRole, type PaintCapability, type WallFace, type WallNode, type WallSurfaceSlotId, wallRegionRole, wallRoomFaceRole, wallRoomFinishRole } from '@pascal-app/core';
2
+ import { type BufferGeometry, type Ray } from 'three';
3
+ type ResolvedWallPaintRole = {
4
+ kind: 'slot';
5
+ slotId: WallSurfaceSlotId | CurtainWallRole;
6
+ } | Exclude<CoreWallPaintRole, {
7
+ kind: 'slot';
8
+ }>;
9
+ declare const CURTAIN_WALL_ROLES: readonly ["curtain-frame", "curtain-glass", "curtain-solid"];
10
+ type CurtainWallRole = (typeof CURTAIN_WALL_ROLES)[number];
11
+ export { wallRegionRole, wallRoomFaceRole, wallRoomFinishRole };
12
+ export declare function parseWallPaintRole(role: string): ResolvedWallPaintRole | null;
3
13
  /**
4
- * Resolve which wall face band the user clicked. The side comes from:
5
- * 1. Material-slot index from the renderer's groups. Cheap reference path.
6
- * 2. Falls back to the hit-surface normal + local-Z when the
7
- * groups aren't conclusive. Front/back of the wall maps to the
8
- * node's `frontSide` / `backSide` semantic; absent that, front
9
- * → interior, back → exterior.
10
- *
11
- * Returns null when the click is too oblique (or lands on the wall's
12
- * end-cap, etc.) to confidently assign a side.
14
+ * Resolve which wall surface the user clicked: a trim slot, a paint region,
15
+ * the room finish on that face, or the face slot itself. Returns null when the
16
+ * click is too oblique (or lands on the wall's end-cap, etc.) to pick a face.
13
17
  */
14
18
  export declare function resolveWallRole(args: {
15
19
  node: WallNode;
@@ -22,12 +26,19 @@ export declare function resolveWallRole(args: {
22
26
  normal: readonly [number, number, number] | undefined;
23
27
  localPosition: readonly [number, number, number] | undefined;
24
28
  ray?: Ray;
29
+ nodes?: Readonly<Record<string, AnyNode | undefined>>;
25
30
  }): string | null;
26
31
  /**
27
- * Capability binding for the wall kind on the unified slot model. Painting
28
- * writes `node.slots[bandSide]` (a `library:` ref or a minted `scene:`
29
- * material) exactly like every other kind; `legacyEffective` reads the
30
- * whole-side fallback so old scenes still show the current value.
32
+ * The wall's face triangles regrouped by the material index `indexFor` gives
33
+ * each (the face and station its centre lies at); caps keep theirs. Null when
34
+ * nothing moves.
35
+ */
36
+ export declare function regroupWallFaces(geometry: BufferGeometry, wall: WallNode, indexFor: (face: WallFace, u: number, v: number) => number | null): BufferGeometry['groups'] | null;
37
+ /**
38
+ * Capability binding for the wall kind on the unified slot model. Face and trim
39
+ * slots write `node.slots[slotId]` like every other kind; regions write the
40
+ * region's finish and room roles write the zone, because a room's wall finish
41
+ * belongs to the room, not to one of its walls.
31
42
  */
32
43
  export declare const wallPaint: PaintCapability;
33
44
  //# sourceMappingURL=paint.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"paint.d.ts","sourceRoot":"","sources":["../../src/wall/paint.ts"],"names":[],"mappings":"AAAA,OAAO,EASL,KAAK,eAAe,EAOpB,KAAK,QAAQ,EAGd,MAAM,kBAAkB,CAAA;AAEzB,OAAO,EAA2C,KAAK,GAAG,EAAa,MAAM,OAAO,CAAA;AAqDpF;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE;IACpC,IAAI,EAAE,QAAQ,CAAA;IACd,SAAS,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE;YAAE,MAAM,CAAC,EAAE,OAAO,CAAA;SAAE,CAAA;KAAE,CAAA;IAC/C,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAA;IACrD,aAAa,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAA;IAC5D,GAAG,CAAC,EAAE,GAAG,CAAA;CACV,GAAG,MAAM,GAAG,IAAI,CAwEhB;AAsCD;;;;;GAKG;AACH,eAAO,MAAM,SAAS,EAAE,eA8DtB,CAAA"}
1
+ {"version":3,"file":"paint.d.ts","sourceRoot":"","sources":["../../src/wall/paint.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EAGZ,KAAK,aAAa,IAAI,iBAAiB,EAMvC,KAAK,eAAe,EAapB,KAAK,QAAQ,EAEb,KAAK,QAAQ,EACb,KAAK,iBAAiB,EACtB,cAAc,EACd,gBAAgB,EAChB,kBAAkB,EAEnB,MAAM,kBAAkB,CAAA;AAQzB,OAAO,EACL,KAAK,cAAc,EAInB,KAAK,GAAG,EAGT,MAAM,OAAO,CAAA;AAgBd,KAAK,qBAAqB,GACtB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,iBAAiB,GAAG,eAAe,CAAA;CAAE,GAC7D,OAAO,CAAC,iBAAiB,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAAA;AAIhD,QAAA,MAAM,kBAAkB,8DAA+D,CAAA;AACvF,KAAK,eAAe,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAA;AAM1D,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,CAAA;AAE/D,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,qBAAqB,GAAG,IAAI,CAK7E;AA6BD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE;IACpC,IAAI,EAAE,QAAQ,CAAA;IACd,SAAS,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE;YAAE,MAAM,CAAC,EAAE,OAAO,CAAA;SAAE,CAAA;KAAE,CAAA;IAC/C,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAA;IACrD,aAAa,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAA;IAC5D,GAAG,CAAC,EAAE,GAAG,CAAA;IACT,KAAK,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,SAAS,CAAC,CAAC,CAAA;CACtD,GAAG,MAAM,GAAG,IAAI,CAsChB;AAqJD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,cAAc,EACxB,IAAI,EAAE,QAAQ,EACd,QAAQ,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,GAChE,cAAc,CAAC,QAAQ,CAAC,GAAG,IAAI,CA4CjC;AA2FD;;;;;GAKG;AACH,eAAO,MAAM,SAAS,EAAE,eAgCvB,CAAA"}