@pascal-app/nodes 1.0.7 → 1.1.1

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 (965) hide show
  1. package/README.md +43 -8
  2. package/dist/agent-operations/index.d.ts +5 -0
  3. package/dist/agent-operations/index.d.ts.map +1 -1
  4. package/dist/agent-operations/index.js +10 -0
  5. package/dist/agent-tools/index.d.ts +195 -0
  6. package/dist/agent-tools/index.d.ts.map +1 -1
  7. package/dist/agent-tools/index.js +82 -2
  8. package/dist/beam/definition.d.ts +64 -13
  9. package/dist/beam/definition.d.ts.map +1 -1
  10. package/dist/beam/definition.edit.d.ts +4 -0
  11. package/dist/beam/definition.edit.d.ts.map +1 -0
  12. package/dist/beam/definition.edit.js +131 -0
  13. package/dist/beam/definition.js +4 -173
  14. package/dist/beam/definition.render.d.ts +6 -0
  15. package/dist/beam/definition.render.d.ts.map +1 -0
  16. package/dist/beam/definition.render.js +34 -0
  17. package/dist/beam/floorplan.d.ts.map +1 -1
  18. package/dist/beam/floorplan.js +1 -2
  19. package/dist/beam/panel.d.ts.map +1 -1
  20. package/dist/beam/panel.js +2 -2
  21. package/dist/beam/tool.d.ts.map +1 -1
  22. package/dist/beam/tool.js +2 -2
  23. package/dist/block/definition.d.ts +67 -7
  24. package/dist/block/definition.d.ts.map +1 -1
  25. package/dist/block/definition.edit.d.ts +4 -0
  26. package/dist/block/definition.edit.d.ts.map +1 -0
  27. package/dist/block/definition.edit.js +26 -0
  28. package/dist/block/definition.js +5 -144
  29. package/dist/block/definition.render.d.ts +11 -0
  30. package/dist/block/definition.render.d.ts.map +1 -0
  31. package/dist/block/definition.render.js +122 -0
  32. package/dist/block/floorplan.d.ts.map +1 -1
  33. package/dist/block/floorplan.js +1 -2
  34. package/dist/box-vent/definition.d.ts +103 -29
  35. package/dist/box-vent/definition.d.ts.map +1 -1
  36. package/dist/box-vent/definition.edit.d.ts +4 -0
  37. package/dist/box-vent/definition.edit.d.ts.map +1 -0
  38. package/dist/box-vent/definition.edit.js +149 -0
  39. package/dist/box-vent/definition.js +4 -212
  40. package/dist/box-vent/definition.render.d.ts +6 -0
  41. package/dist/box-vent/definition.render.d.ts.map +1 -0
  42. package/dist/box-vent/definition.render.js +42 -0
  43. package/dist/box-vent/move-tool.d.ts.map +1 -1
  44. package/dist/box-vent/move-tool.js +6 -5
  45. package/dist/building/definition.d.ts +49 -11
  46. package/dist/building/definition.d.ts.map +1 -1
  47. package/dist/building/definition.edit.d.ts +4 -0
  48. package/dist/building/definition.edit.d.ts.map +1 -0
  49. package/dist/building/definition.edit.js +10 -0
  50. package/dist/building/definition.js +4 -54
  51. package/dist/building/definition.render.d.ts +6 -0
  52. package/dist/building/definition.render.d.ts.map +1 -0
  53. package/dist/building/definition.render.js +38 -0
  54. package/dist/builtin-definitions.d.ts +9784 -0
  55. package/dist/builtin-definitions.d.ts.map +1 -0
  56. package/dist/builtin-definitions.js +113 -0
  57. package/dist/builtin-edit-contributions.d.ts +9608 -0
  58. package/dist/builtin-edit-contributions.d.ts.map +1 -0
  59. package/dist/builtin-edit-contributions.js +112 -0
  60. package/dist/builtin-plugin-metadata.d.ts +5 -0
  61. package/dist/builtin-plugin-metadata.d.ts.map +1 -0
  62. package/dist/builtin-plugin-metadata.js +1 -0
  63. package/dist/cabinet/definition.d.ts +497 -25
  64. package/dist/cabinet/definition.d.ts.map +1 -1
  65. package/dist/cabinet/definition.edit.d.ts +5 -0
  66. package/dist/cabinet/definition.edit.d.ts.map +1 -0
  67. package/dist/cabinet/definition.edit.js +1372 -0
  68. package/dist/cabinet/definition.js +6 -2115
  69. package/dist/cabinet/definition.render.d.ts +66 -0
  70. package/dist/cabinet/definition.render.d.ts.map +1 -0
  71. package/dist/cabinet/definition.render.js +754 -0
  72. package/dist/cabinet/floorplan.js +1 -1
  73. package/dist/cabinet/kitchen-module-actions.d.ts.map +1 -1
  74. package/dist/cabinet/kitchen-module-actions.js +2 -2
  75. package/dist/cabinet/placement-dimensions.d.ts +36 -2
  76. package/dist/cabinet/placement-dimensions.d.ts.map +1 -1
  77. package/dist/cabinet/placement-dimensions.js +68 -2
  78. package/dist/cabinet/system.js +1 -1
  79. package/dist/cabinet/tool.d.ts.map +1 -1
  80. package/dist/cabinet/tool.js +268 -15
  81. package/dist/cabinet/wall-snap.d.ts +5 -1
  82. package/dist/cabinet/wall-snap.d.ts.map +1 -1
  83. package/dist/cabinet/wall-snap.js +2 -2
  84. package/dist/ceiling/definition.d.ts +152 -19
  85. package/dist/ceiling/definition.d.ts.map +1 -1
  86. package/dist/ceiling/definition.edit.d.ts +4 -0
  87. package/dist/ceiling/definition.edit.d.ts.map +1 -0
  88. package/dist/ceiling/definition.edit.js +123 -0
  89. package/dist/ceiling/definition.js +4 -207
  90. package/dist/ceiling/definition.render.d.ts +6 -0
  91. package/dist/ceiling/definition.render.d.ts.map +1 -0
  92. package/dist/ceiling/definition.render.js +73 -0
  93. package/dist/ceiling/panel.js +2 -2
  94. package/dist/chimney/definition.d.ts +186 -17
  95. package/dist/chimney/definition.d.ts.map +1 -1
  96. package/dist/chimney/definition.edit.d.ts +4 -0
  97. package/dist/chimney/definition.edit.d.ts.map +1 -0
  98. package/dist/chimney/definition.edit.js +217 -0
  99. package/dist/chimney/definition.js +4 -390
  100. package/dist/chimney/definition.render.d.ts +6 -0
  101. package/dist/chimney/definition.render.d.ts.map +1 -0
  102. package/dist/chimney/definition.render.js +61 -0
  103. package/dist/chimney/move-tool.d.ts.map +1 -1
  104. package/dist/chimney/move-tool.js +6 -4
  105. package/dist/chimney/panel.js +1 -1
  106. package/dist/column/__bench__/geometry.d.ts +2 -0
  107. package/dist/column/__bench__/geometry.d.ts.map +1 -0
  108. package/dist/column/__bench__/geometry.js +36 -0
  109. package/dist/column/bounds.d.ts +7 -0
  110. package/dist/column/bounds.d.ts.map +1 -0
  111. package/dist/column/bounds.js +127 -0
  112. package/dist/column/definition.d.ts +372 -20
  113. package/dist/column/definition.d.ts.map +1 -1
  114. package/dist/column/definition.edit.d.ts +4 -0
  115. package/dist/column/definition.edit.d.ts.map +1 -0
  116. package/dist/column/definition.edit.js +320 -0
  117. package/dist/column/definition.js +4 -439
  118. package/dist/column/definition.render.d.ts +6 -0
  119. package/dist/column/definition.render.d.ts.map +1 -0
  120. package/dist/column/definition.render.js +84 -0
  121. package/dist/column/edit-policy.d.ts +5 -0
  122. package/dist/column/edit-policy.d.ts.map +1 -0
  123. package/dist/column/edit-policy.js +43 -0
  124. package/dist/column/floorplan-affordances.d.ts.map +1 -1
  125. package/dist/column/floorplan-affordances.js +2 -0
  126. package/dist/column/floorplan-move.d.ts.map +1 -1
  127. package/dist/column/floorplan-move.js +5 -1
  128. package/dist/column/floorplan.d.ts.map +1 -1
  129. package/dist/column/floorplan.js +34 -93
  130. package/dist/column/geometry.d.ts +13 -0
  131. package/dist/column/geometry.d.ts.map +1 -0
  132. package/dist/column/geometry.js +294 -0
  133. package/dist/column/hosted-resize.d.ts +3 -2
  134. package/dist/column/hosted-resize.d.ts.map +1 -1
  135. package/dist/column/hosted-resize.js +7 -1
  136. package/dist/column/inspector-highlight.d.ts +29 -0
  137. package/dist/column/inspector-highlight.d.ts.map +1 -0
  138. package/dist/column/inspector-highlight.js +166 -0
  139. package/dist/column/paint.d.ts.map +1 -1
  140. package/dist/column/paint.js +12 -2
  141. package/dist/column/panel.d.ts.map +1 -1
  142. package/dist/column/panel.js +451 -363
  143. package/dist/column/parametrics.js +1 -1
  144. package/dist/column/post-section.d.ts.map +1 -1
  145. package/dist/column/post-section.js +2 -2
  146. package/dist/column/preset-gallery.d.ts +8 -0
  147. package/dist/column/preset-gallery.d.ts.map +1 -0
  148. package/dist/column/preset-gallery.js +98 -0
  149. package/dist/column/presets.d.ts +16 -0
  150. package/dist/column/presets.d.ts.map +1 -0
  151. package/dist/column/presets.js +96 -0
  152. package/dist/column/property-preview.d.ts +8 -0
  153. package/dist/column/property-preview.d.ts.map +1 -0
  154. package/dist/column/property-preview.js +50 -0
  155. package/dist/column/renderer.d.ts +13 -1
  156. package/dist/column/renderer.d.ts.map +1 -1
  157. package/dist/column/renderer.js +174 -198
  158. package/dist/column/shape.d.ts +4 -4
  159. package/dist/column/shape.d.ts.map +1 -1
  160. package/dist/column/shape.js +1 -1
  161. package/dist/column/surface.d.ts.map +1 -1
  162. package/dist/column/surface.js +15 -8
  163. package/dist/column/tool.d.ts.map +1 -1
  164. package/dist/column/tool.js +21 -10
  165. package/dist/construction-dimension/definition.d.ts +129 -3
  166. package/dist/construction-dimension/definition.d.ts.map +1 -1
  167. package/dist/construction-dimension/definition.edit.d.ts +4 -0
  168. package/dist/construction-dimension/definition.edit.d.ts.map +1 -0
  169. package/dist/construction-dimension/definition.edit.js +30 -0
  170. package/dist/construction-dimension/definition.js +4 -83
  171. package/dist/construction-dimension/definition.render.d.ts +6 -0
  172. package/dist/construction-dimension/definition.render.d.ts.map +1 -0
  173. package/dist/construction-dimension/definition.render.js +55 -0
  174. package/dist/construction-dimension/floorplan-tool.d.ts.map +1 -1
  175. package/dist/construction-dimension/floorplan-tool.js +2 -2
  176. package/dist/construction-dimension/floorplan.d.ts.map +1 -1
  177. package/dist/construction-dimension/floorplan.js +1 -2
  178. package/dist/cupola/definition.d.ts +95 -10
  179. package/dist/cupola/definition.d.ts.map +1 -1
  180. package/dist/cupola/definition.edit.d.ts +4 -0
  181. package/dist/cupola/definition.edit.d.ts.map +1 -0
  182. package/dist/cupola/definition.edit.js +101 -0
  183. package/dist/cupola/definition.js +4 -148
  184. package/dist/cupola/definition.render.d.ts +6 -0
  185. package/dist/cupola/definition.render.d.ts.map +1 -0
  186. package/dist/cupola/definition.render.js +45 -0
  187. package/dist/cupola/move-tool.d.ts.map +1 -1
  188. package/dist/cupola/move-tool.js +6 -5
  189. package/dist/definition-contributions.d.ts +14 -0
  190. package/dist/definition-contributions.d.ts.map +1 -0
  191. package/dist/definition-contributions.js +8 -0
  192. package/dist/door/definition.d.ts +350 -22
  193. package/dist/door/definition.d.ts.map +1 -1
  194. package/dist/door/definition.edit.d.ts +4 -0
  195. package/dist/door/definition.edit.d.ts.map +1 -0
  196. package/dist/door/definition.edit.js +241 -0
  197. package/dist/door/definition.js +4 -341
  198. package/dist/door/definition.render.d.ts +6 -0
  199. package/dist/door/definition.render.d.ts.map +1 -0
  200. package/dist/door/definition.render.js +94 -0
  201. package/dist/door/floorplan-move.d.ts.map +1 -1
  202. package/dist/door/floorplan-move.js +11 -8
  203. package/dist/door/floorplan.d.ts.map +1 -1
  204. package/dist/door/floorplan.js +1 -2
  205. package/dist/door/mechanism.d.ts.map +1 -1
  206. package/dist/door/mechanism.js +1 -2
  207. package/dist/door/move-tool.d.ts.map +1 -1
  208. package/dist/door/move-tool.js +25 -23
  209. package/dist/door/tool.d.ts.map +1 -1
  210. package/dist/door/tool.js +2 -1
  211. package/dist/dormer/definition.d.ts +240 -11
  212. package/dist/dormer/definition.d.ts.map +1 -1
  213. package/dist/dormer/definition.edit.d.ts +4 -0
  214. package/dist/dormer/definition.edit.d.ts.map +1 -0
  215. package/dist/dormer/definition.edit.js +212 -0
  216. package/dist/dormer/definition.js +4 -319
  217. package/dist/dormer/definition.render.d.ts +6 -0
  218. package/dist/dormer/definition.render.d.ts.map +1 -0
  219. package/dist/dormer/definition.render.js +54 -0
  220. package/dist/dormer/panel-position-section.js +1 -1
  221. package/dist/downspout/definition.d.ts +108 -16
  222. package/dist/downspout/definition.d.ts.map +1 -1
  223. package/dist/downspout/definition.edit.d.ts +4 -0
  224. package/dist/downspout/definition.edit.d.ts.map +1 -0
  225. package/dist/downspout/definition.edit.js +134 -0
  226. package/dist/downspout/definition.js +4 -188
  227. package/dist/downspout/definition.render.d.ts +6 -0
  228. package/dist/downspout/definition.render.d.ts.map +1 -0
  229. package/dist/downspout/definition.render.js +46 -0
  230. package/dist/duct-fitting/definition.d.ts +99 -11
  231. package/dist/duct-fitting/definition.d.ts.map +1 -1
  232. package/dist/duct-fitting/definition.edit.d.ts +4 -0
  233. package/dist/duct-fitting/definition.edit.d.ts.map +1 -0
  234. package/dist/duct-fitting/definition.edit.js +47 -0
  235. package/dist/duct-fitting/definition.js +4 -135
  236. package/dist/duct-fitting/definition.render.d.ts +6 -0
  237. package/dist/duct-fitting/definition.render.d.ts.map +1 -0
  238. package/dist/duct-fitting/definition.render.js +84 -0
  239. package/dist/duct-fitting/floorplan.js +1 -1
  240. package/dist/duct-fitting/geometry.js +2 -1
  241. package/dist/duct-fitting/move-tool.d.ts.map +1 -1
  242. package/dist/duct-fitting/move-tool.js +19 -13
  243. package/dist/duct-fitting/selection.d.ts.map +1 -1
  244. package/dist/duct-fitting/selection.js +92 -80
  245. package/dist/duct-segment/continuation-handle.d.ts +8 -0
  246. package/dist/duct-segment/continuation-handle.d.ts.map +1 -0
  247. package/dist/duct-segment/continuation-handle.js +36 -0
  248. package/dist/duct-segment/continuation.d.ts +3 -7
  249. package/dist/duct-segment/continuation.d.ts.map +1 -1
  250. package/dist/duct-segment/continuation.js +54 -37
  251. package/dist/duct-segment/definition.d.ts +91 -3
  252. package/dist/duct-segment/definition.d.ts.map +1 -1
  253. package/dist/duct-segment/definition.edit.d.ts +4 -0
  254. package/dist/duct-segment/definition.edit.d.ts.map +1 -0
  255. package/dist/duct-segment/definition.edit.js +98 -0
  256. package/dist/duct-segment/definition.js +4 -181
  257. package/dist/duct-segment/definition.render.d.ts +6 -0
  258. package/dist/duct-segment/definition.render.d.ts.map +1 -0
  259. package/dist/duct-segment/definition.render.js +91 -0
  260. package/dist/duct-segment/edit-inspector.d.ts +5 -0
  261. package/dist/duct-segment/edit-inspector.d.ts.map +1 -0
  262. package/dist/duct-segment/edit-inspector.js +163 -0
  263. package/dist/duct-segment/edit-operation.d.ts +17 -0
  264. package/dist/duct-segment/edit-operation.d.ts.map +1 -0
  265. package/dist/duct-segment/edit-operation.js +283 -0
  266. package/dist/duct-segment/floorplan.js +2 -2
  267. package/dist/duct-segment/geometry.d.ts +0 -40
  268. package/dist/duct-segment/geometry.d.ts.map +1 -1
  269. package/dist/duct-segment/geometry.js +2 -77
  270. package/dist/duct-segment/move-tool.d.ts.map +1 -1
  271. package/dist/duct-segment/move-tool.js +34 -35
  272. package/dist/duct-segment/parametrics.d.ts.map +1 -1
  273. package/dist/duct-segment/parametrics.js +2 -35
  274. package/dist/duct-segment/profile.d.ts +42 -0
  275. package/dist/duct-segment/profile.d.ts.map +1 -0
  276. package/dist/duct-segment/profile.js +78 -0
  277. package/dist/duct-segment/selection.d.ts.map +1 -1
  278. package/dist/duct-segment/selection.js +114 -54
  279. package/dist/duct-segment/tool.d.ts.map +1 -1
  280. package/dist/duct-segment/tool.js +105 -28
  281. package/dist/duct-terminal/definition.d.ts +68 -12
  282. package/dist/duct-terminal/definition.d.ts.map +1 -1
  283. package/dist/duct-terminal/definition.edit.d.ts +4 -0
  284. package/dist/duct-terminal/definition.edit.d.ts.map +1 -0
  285. package/dist/duct-terminal/definition.edit.js +12 -0
  286. package/dist/duct-terminal/definition.js +4 -87
  287. package/dist/duct-terminal/definition.render.d.ts +6 -0
  288. package/dist/duct-terminal/definition.render.d.ts.map +1 -0
  289. package/dist/duct-terminal/definition.render.js +68 -0
  290. package/dist/duct-terminal/geometry.d.ts.map +1 -1
  291. package/dist/duct-terminal/geometry.js +2 -1
  292. package/dist/duct-terminal/parametrics.d.ts.map +1 -1
  293. package/dist/duct-terminal/parametrics.js +1 -0
  294. package/dist/duct-terminal/ports.js +1 -1
  295. package/dist/elevator/__bench__/runtime.d.ts +2 -0
  296. package/dist/elevator/__bench__/runtime.d.ts.map +1 -0
  297. package/dist/elevator/__bench__/runtime.js +38 -0
  298. package/dist/elevator/definition.d.ts +117 -10
  299. package/dist/elevator/definition.d.ts.map +1 -1
  300. package/dist/elevator/definition.edit.d.ts +4 -0
  301. package/dist/elevator/definition.edit.d.ts.map +1 -0
  302. package/dist/elevator/definition.edit.js +167 -0
  303. package/dist/elevator/definition.js +4 -258
  304. package/dist/elevator/definition.render.d.ts +11 -0
  305. package/dist/elevator/definition.render.d.ts.map +1 -0
  306. package/dist/elevator/definition.render.js +106 -0
  307. package/dist/elevator/floorplan-affordances.d.ts.map +1 -1
  308. package/dist/elevator/floorplan-affordances.js +11 -9
  309. package/dist/elevator/floorplan.d.ts +19 -0
  310. package/dist/elevator/floorplan.d.ts.map +1 -1
  311. package/dist/elevator/floorplan.js +3 -9
  312. package/dist/elevator/inspection.d.ts +17 -0
  313. package/dist/elevator/inspection.d.ts.map +1 -0
  314. package/dist/elevator/inspection.js +78 -0
  315. package/dist/elevator/panel.d.ts.map +1 -1
  316. package/dist/elevator/panel.js +152 -100
  317. package/dist/elevator/parametrics.d.ts +1 -1
  318. package/dist/elevator/parametrics.d.ts.map +1 -1
  319. package/dist/elevator/parametrics.js +7 -10
  320. package/dist/elevator/presets.d.ts +17 -0
  321. package/dist/elevator/presets.d.ts.map +1 -0
  322. package/dist/elevator/presets.js +52 -0
  323. package/dist/elevator/renderer.d.ts +2 -1
  324. package/dist/elevator/renderer.d.ts.map +1 -1
  325. package/dist/elevator/renderer.edit.d.ts +5 -0
  326. package/dist/elevator/renderer.edit.d.ts.map +1 -0
  327. package/dist/elevator/renderer.edit.js +8 -0
  328. package/dist/elevator/renderer.js +159 -60
  329. package/dist/elevator/tool.d.ts +2 -0
  330. package/dist/elevator/tool.d.ts.map +1 -0
  331. package/dist/elevator/tool.js +250 -0
  332. package/dist/eyebrow-vent/definition.d.ts +97 -11
  333. package/dist/eyebrow-vent/definition.d.ts.map +1 -1
  334. package/dist/eyebrow-vent/definition.edit.d.ts +4 -0
  335. package/dist/eyebrow-vent/definition.edit.d.ts.map +1 -0
  336. package/dist/eyebrow-vent/definition.edit.js +104 -0
  337. package/dist/eyebrow-vent/definition.js +4 -152
  338. package/dist/eyebrow-vent/definition.render.d.ts +6 -0
  339. package/dist/eyebrow-vent/definition.render.d.ts.map +1 -0
  340. package/dist/eyebrow-vent/definition.render.js +45 -0
  341. package/dist/eyebrow-vent/move-tool.d.ts.map +1 -1
  342. package/dist/eyebrow-vent/move-tool.js +6 -5
  343. package/dist/fence/definition.d.ts +186 -17
  344. package/dist/fence/definition.d.ts.map +1 -1
  345. package/dist/fence/definition.edit.d.ts +4 -0
  346. package/dist/fence/definition.edit.d.ts.map +1 -0
  347. package/dist/fence/definition.edit.js +276 -0
  348. package/dist/fence/definition.js +5 -413
  349. package/dist/fence/definition.render.d.ts +8 -0
  350. package/dist/fence/definition.render.d.ts.map +1 -0
  351. package/dist/fence/definition.render.js +126 -0
  352. package/dist/fence/move-endpoint-tool.d.ts.map +1 -1
  353. package/dist/fence/move-endpoint-tool.js +2 -2
  354. package/dist/fence/tool.js +2 -2
  355. package/dist/fence-feature/definition.d.ts +270 -3
  356. package/dist/fence-feature/definition.d.ts.map +1 -1
  357. package/dist/fence-feature/definition.edit.d.ts +5 -0
  358. package/dist/fence-feature/definition.edit.d.ts.map +1 -0
  359. package/dist/fence-feature/definition.edit.js +66 -0
  360. package/dist/fence-feature/definition.js +5 -116
  361. package/dist/fence-feature/definition.render.d.ts +9 -0
  362. package/dist/fence-feature/definition.render.d.ts.map +1 -0
  363. package/dist/fence-feature/definition.render.js +72 -0
  364. package/dist/floor-opening/definition.d.ts +58 -2
  365. package/dist/floor-opening/definition.d.ts.map +1 -1
  366. package/dist/floor-opening/definition.edit.d.ts +4 -0
  367. package/dist/floor-opening/definition.edit.d.ts.map +1 -0
  368. package/dist/floor-opening/definition.edit.js +9 -0
  369. package/dist/floor-opening/definition.js +4 -41
  370. package/dist/floor-opening/definition.render.d.ts +6 -0
  371. package/dist/floor-opening/definition.render.d.ts.map +1 -0
  372. package/dist/floor-opening/definition.render.js +35 -0
  373. package/dist/floor-opening/floorplan-affordances.d.ts +150 -0
  374. package/dist/floor-opening/floorplan-affordances.d.ts.map +1 -0
  375. package/dist/floor-opening/floorplan-affordances.js +67 -0
  376. package/dist/floor-opening/floorplan.d.ts +2 -151
  377. package/dist/floor-opening/floorplan.d.ts.map +1 -1
  378. package/dist/floor-opening/floorplan.js +0 -66
  379. package/dist/guide/definition.d.ts +65 -9
  380. package/dist/guide/definition.d.ts.map +1 -1
  381. package/dist/guide/definition.edit.d.ts +4 -0
  382. package/dist/guide/definition.edit.d.ts.map +1 -0
  383. package/dist/guide/definition.edit.js +4 -0
  384. package/dist/guide/definition.js +4 -53
  385. package/dist/guide/definition.render.d.ts +6 -0
  386. package/dist/guide/definition.render.d.ts.map +1 -0
  387. package/dist/guide/definition.render.js +45 -0
  388. package/dist/gutter/definition.d.ts +113 -18
  389. package/dist/gutter/definition.d.ts.map +1 -1
  390. package/dist/gutter/definition.edit.d.ts +4 -0
  391. package/dist/gutter/definition.edit.d.ts.map +1 -0
  392. package/dist/gutter/definition.edit.js +119 -0
  393. package/dist/gutter/definition.js +4 -176
  394. package/dist/gutter/definition.render.d.ts +6 -0
  395. package/dist/gutter/definition.render.d.ts.map +1 -0
  396. package/dist/gutter/definition.render.js +46 -0
  397. package/dist/gutter/move-tool.d.ts.map +1 -1
  398. package/dist/gutter/move-tool.js +5 -4
  399. package/dist/hvac-equipment/definition.d.ts +72 -12
  400. package/dist/hvac-equipment/definition.d.ts.map +1 -1
  401. package/dist/hvac-equipment/definition.edit.d.ts +4 -0
  402. package/dist/hvac-equipment/definition.edit.d.ts.map +1 -0
  403. package/dist/hvac-equipment/definition.edit.js +11 -0
  404. package/dist/hvac-equipment/definition.js +4 -92
  405. package/dist/hvac-equipment/definition.render.d.ts +6 -0
  406. package/dist/hvac-equipment/definition.render.d.ts.map +1 -0
  407. package/dist/hvac-equipment/definition.render.js +74 -0
  408. package/dist/hvac-equipment/floorplan.js +1 -1
  409. package/dist/hvac-equipment/geometry.d.ts.map +1 -1
  410. package/dist/hvac-equipment/geometry.js +2 -1
  411. package/dist/hvac-equipment/parametrics.d.ts.map +1 -1
  412. package/dist/hvac-equipment/parametrics.js +1 -0
  413. package/dist/hvac-equipment/ports.js +1 -1
  414. package/dist/i18n/definition-messages.js +1 -1
  415. package/dist/imported-mesh/definition.d.ts +54 -4
  416. package/dist/imported-mesh/definition.d.ts.map +1 -1
  417. package/dist/imported-mesh/definition.edit.d.ts +4 -0
  418. package/dist/imported-mesh/definition.edit.d.ts.map +1 -0
  419. package/dist/imported-mesh/definition.edit.js +3 -0
  420. package/dist/imported-mesh/definition.js +4 -40
  421. package/dist/imported-mesh/definition.render.d.ts +6 -0
  422. package/dist/imported-mesh/definition.render.d.ts.map +1 -0
  423. package/dist/imported-mesh/definition.render.js +38 -0
  424. package/dist/index.d.ts +3 -16
  425. package/dist/index.d.ts.map +1 -1
  426. package/dist/index.js +9 -136
  427. package/dist/item/definition.d.ts +280 -31
  428. package/dist/item/definition.d.ts.map +1 -1
  429. package/dist/item/definition.edit.d.ts +4 -0
  430. package/dist/item/definition.edit.d.ts.map +1 -0
  431. package/dist/item/definition.edit.js +203 -0
  432. package/dist/item/definition.js +4 -356
  433. package/dist/item/definition.render.d.ts +6 -0
  434. package/dist/item/definition.render.d.ts.map +1 -0
  435. package/dist/item/definition.render.js +132 -0
  436. package/dist/item/floorplan.d.ts.map +1 -1
  437. package/dist/item/floorplan.js +1 -2
  438. package/dist/item/plan-symbols.js +1 -1
  439. package/dist/item/renderer.d.ts.map +1 -1
  440. package/dist/item/renderer.js +2 -2
  441. package/dist/lean-to-extension/definition.d.ts +177 -3
  442. package/dist/lean-to-extension/definition.d.ts.map +1 -1
  443. package/dist/lean-to-extension/definition.edit.d.ts +4 -0
  444. package/dist/lean-to-extension/definition.edit.d.ts.map +1 -0
  445. package/dist/lean-to-extension/definition.edit.js +390 -0
  446. package/dist/lean-to-extension/definition.js +4 -433
  447. package/dist/lean-to-extension/definition.render.d.ts +6 -0
  448. package/dist/lean-to-extension/definition.render.d.ts.map +1 -0
  449. package/dist/lean-to-extension/definition.render.js +48 -0
  450. package/dist/level/definition.d.ts +49 -8
  451. package/dist/level/definition.d.ts.map +1 -1
  452. package/dist/level/definition.edit.d.ts +4 -0
  453. package/dist/level/definition.edit.d.ts.map +1 -0
  454. package/dist/level/definition.edit.js +4 -0
  455. package/dist/level/definition.js +4 -60
  456. package/dist/level/definition.render.d.ts +6 -0
  457. package/dist/level/definition.render.d.ts.map +1 -0
  458. package/dist/level/definition.render.js +53 -0
  459. package/dist/lineset/definition.d.ts +49 -14
  460. package/dist/lineset/definition.d.ts.map +1 -1
  461. package/dist/lineset/definition.edit.d.ts +4 -0
  462. package/dist/lineset/definition.edit.d.ts.map +1 -0
  463. package/dist/lineset/definition.edit.js +36 -0
  464. package/dist/lineset/definition.js +4 -119
  465. package/dist/lineset/definition.render.d.ts +6 -0
  466. package/dist/lineset/definition.render.d.ts.map +1 -0
  467. package/dist/lineset/definition.render.js +74 -0
  468. package/dist/lineset/floorplan.js +1 -1
  469. package/dist/lineset/geometry.js +1 -1
  470. package/dist/lineset/move-tool.d.ts.map +1 -1
  471. package/dist/lineset/move-tool.js +14 -7
  472. package/dist/liquid-line/definition.d.ts +47 -15
  473. package/dist/liquid-line/definition.d.ts.map +1 -1
  474. package/dist/liquid-line/definition.edit.d.ts +4 -0
  475. package/dist/liquid-line/definition.edit.d.ts.map +1 -0
  476. package/dist/liquid-line/definition.edit.js +29 -0
  477. package/dist/liquid-line/definition.js +4 -111
  478. package/dist/liquid-line/definition.render.d.ts +6 -0
  479. package/dist/liquid-line/definition.render.d.ts.map +1 -0
  480. package/dist/liquid-line/definition.render.js +72 -0
  481. package/dist/liquid-line/floorplan.js +1 -1
  482. package/dist/liquid-line/geometry.js +1 -1
  483. package/dist/measurement/definition.d.ts +126 -3
  484. package/dist/measurement/definition.d.ts.map +1 -1
  485. package/dist/measurement/definition.edit.d.ts +4 -0
  486. package/dist/measurement/definition.edit.d.ts.map +1 -0
  487. package/dist/measurement/definition.edit.js +24 -0
  488. package/dist/measurement/definition.js +4 -67
  489. package/dist/measurement/definition.render.d.ts +6 -0
  490. package/dist/measurement/definition.render.d.ts.map +1 -0
  491. package/dist/measurement/definition.render.js +45 -0
  492. package/dist/measurement/floorplan.d.ts.map +1 -1
  493. package/dist/measurement/floorplan.js +2 -2
  494. package/dist/measurement/renderer.d.ts.map +1 -1
  495. package/dist/measurement/renderer.js +2 -3
  496. package/dist/measurement/selection.d.ts.map +1 -1
  497. package/dist/measurement/selection.js +2 -2
  498. package/dist/measurement/tool.d.ts +2 -2
  499. package/dist/measurement/tool.d.ts.map +1 -1
  500. package/dist/measurement/tool.js +3 -3
  501. package/dist/pipe-fitting/definition.d.ts +73 -9
  502. package/dist/pipe-fitting/definition.d.ts.map +1 -1
  503. package/dist/pipe-fitting/definition.edit.d.ts +4 -0
  504. package/dist/pipe-fitting/definition.edit.d.ts.map +1 -0
  505. package/dist/pipe-fitting/definition.edit.js +45 -0
  506. package/dist/pipe-fitting/definition.js +4 -105
  507. package/dist/pipe-fitting/definition.render.d.ts +6 -0
  508. package/dist/pipe-fitting/definition.render.d.ts.map +1 -0
  509. package/dist/pipe-fitting/definition.render.js +56 -0
  510. package/dist/pipe-fitting/floorplan.js +1 -1
  511. package/dist/pipe-fitting/geometry.js +1 -1
  512. package/dist/pipe-fitting/move-tool.d.ts +1 -1
  513. package/dist/pipe-fitting/move-tool.d.ts.map +1 -1
  514. package/dist/pipe-fitting/move-tool.js +28 -22
  515. package/dist/pipe-fitting/parametrics.d.ts.map +1 -1
  516. package/dist/pipe-fitting/parametrics.js +1 -0
  517. package/dist/pipe-fitting/ports.js +1 -1
  518. package/dist/pipe-fitting/selection.d.ts.map +1 -1
  519. package/dist/pipe-fitting/selection.js +73 -29
  520. package/dist/pipe-segment/collar-connection.d.ts +12 -0
  521. package/dist/pipe-segment/collar-connection.d.ts.map +1 -0
  522. package/dist/pipe-segment/collar-connection.js +58 -0
  523. package/dist/pipe-segment/connect-operation.d.ts +9 -0
  524. package/dist/pipe-segment/connect-operation.d.ts.map +1 -0
  525. package/dist/pipe-segment/connect-operation.js +44 -0
  526. package/dist/pipe-segment/continuation-handle.d.ts +9 -0
  527. package/dist/pipe-segment/continuation-handle.d.ts.map +1 -0
  528. package/dist/pipe-segment/continuation-handle.js +35 -0
  529. package/dist/pipe-segment/continuation.d.ts +4 -7
  530. package/dist/pipe-segment/continuation.d.ts.map +1 -1
  531. package/dist/pipe-segment/continuation.js +62 -36
  532. package/dist/pipe-segment/definition.d.ts +78 -13
  533. package/dist/pipe-segment/definition.d.ts.map +1 -1
  534. package/dist/pipe-segment/definition.edit.d.ts +4 -0
  535. package/dist/pipe-segment/definition.edit.d.ts.map +1 -0
  536. package/dist/pipe-segment/definition.edit.js +46 -0
  537. package/dist/pipe-segment/definition.js +4 -132
  538. package/dist/pipe-segment/definition.render.d.ts +6 -0
  539. package/dist/pipe-segment/definition.render.d.ts.map +1 -0
  540. package/dist/pipe-segment/definition.render.js +80 -0
  541. package/dist/pipe-segment/floorplan.d.ts +1 -1
  542. package/dist/pipe-segment/floorplan.d.ts.map +1 -1
  543. package/dist/pipe-segment/floorplan.js +35 -2
  544. package/dist/pipe-segment/geometry.d.ts.map +1 -1
  545. package/dist/pipe-segment/geometry.js +2 -1
  546. package/dist/pipe-segment/grade-affordance.d.ts +8 -0
  547. package/dist/pipe-segment/grade-affordance.d.ts.map +1 -0
  548. package/dist/pipe-segment/grade-affordance.js +116 -0
  549. package/dist/pipe-segment/grade-inspector.d.ts +5 -0
  550. package/dist/pipe-segment/grade-inspector.d.ts.map +1 -0
  551. package/dist/pipe-segment/grade-inspector.js +91 -0
  552. package/dist/pipe-segment/grade-label.d.ts +7 -0
  553. package/dist/pipe-segment/grade-label.d.ts.map +1 -0
  554. package/dist/pipe-segment/grade-label.js +32 -0
  555. package/dist/pipe-segment/grade-operation.d.ts +22 -0
  556. package/dist/pipe-segment/grade-operation.d.ts.map +1 -0
  557. package/dist/pipe-segment/grade-operation.js +114 -0
  558. package/dist/pipe-segment/move-tool.d.ts.map +1 -1
  559. package/dist/pipe-segment/move-tool.js +38 -15
  560. package/dist/pipe-segment/offset-inspector.d.ts +5 -0
  561. package/dist/pipe-segment/offset-inspector.d.ts.map +1 -0
  562. package/dist/pipe-segment/offset-inspector.js +112 -0
  563. package/dist/pipe-segment/offset-operation.d.ts +9 -0
  564. package/dist/pipe-segment/offset-operation.d.ts.map +1 -0
  565. package/dist/pipe-segment/offset-operation.js +104 -0
  566. package/dist/pipe-segment/parametrics.d.ts.map +1 -1
  567. package/dist/pipe-segment/parametrics.js +1 -9
  568. package/dist/pipe-segment/resize-inspector.d.ts +5 -0
  569. package/dist/pipe-segment/resize-inspector.d.ts.map +1 -0
  570. package/dist/pipe-segment/resize-inspector.js +75 -0
  571. package/dist/pipe-segment/resize-operation.d.ts +8 -0
  572. package/dist/pipe-segment/resize-operation.d.ts.map +1 -0
  573. package/dist/pipe-segment/resize-operation.js +143 -0
  574. package/dist/pipe-segment/run-move.d.ts +65 -0
  575. package/dist/pipe-segment/run-move.d.ts.map +1 -0
  576. package/dist/pipe-segment/run-move.js +110 -0
  577. package/dist/pipe-segment/selection.d.ts.map +1 -1
  578. package/dist/pipe-segment/selection.js +124 -179
  579. package/dist/pipe-segment/slope.d.ts +3 -0
  580. package/dist/pipe-segment/slope.d.ts.map +1 -1
  581. package/dist/pipe-segment/slope.js +47 -0
  582. package/dist/pipe-segment/tool.d.ts.map +1 -1
  583. package/dist/pipe-segment/tool.js +125 -29
  584. package/dist/pipe-trap/definition.d.ts +54 -9
  585. package/dist/pipe-trap/definition.d.ts.map +1 -1
  586. package/dist/pipe-trap/definition.edit.d.ts +4 -0
  587. package/dist/pipe-trap/definition.edit.d.ts.map +1 -0
  588. package/dist/pipe-trap/definition.edit.js +11 -0
  589. package/dist/pipe-trap/definition.js +4 -59
  590. package/dist/pipe-trap/definition.render.d.ts +6 -0
  591. package/dist/pipe-trap/definition.render.d.ts.map +1 -0
  592. package/dist/pipe-trap/definition.render.js +45 -0
  593. package/dist/pipe-trap/geometry.d.ts.map +1 -1
  594. package/dist/pipe-trap/geometry.js +2 -1
  595. package/dist/pipe-trap/parametrics.d.ts.map +1 -1
  596. package/dist/pipe-trap/parametrics.js +1 -0
  597. package/dist/procedural-item/definition.d.ts +734 -3
  598. package/dist/procedural-item/definition.d.ts.map +1 -1
  599. package/dist/procedural-item/definition.edit.d.ts +4 -0
  600. package/dist/procedural-item/definition.edit.d.ts.map +1 -0
  601. package/dist/procedural-item/definition.edit.js +202 -0
  602. package/dist/procedural-item/definition.js +4 -325
  603. package/dist/procedural-item/definition.render.d.ts +6 -0
  604. package/dist/procedural-item/definition.render.d.ts.map +1 -0
  605. package/dist/procedural-item/definition.render.js +137 -0
  606. package/dist/procedural-item/renderer.d.ts.map +1 -1
  607. package/dist/procedural-item/renderer.edit.d.ts +5 -0
  608. package/dist/procedural-item/renderer.edit.d.ts.map +1 -0
  609. package/dist/procedural-item/renderer.edit.js +49 -0
  610. package/dist/procedural-item/renderer.js +4 -21
  611. package/dist/render.d.ts +4 -0
  612. package/dist/render.d.ts.map +1 -0
  613. package/dist/render.js +4 -0
  614. package/dist/ridge-vent/definition.d.ts +95 -15
  615. package/dist/ridge-vent/definition.d.ts.map +1 -1
  616. package/dist/ridge-vent/definition.edit.d.ts +4 -0
  617. package/dist/ridge-vent/definition.edit.d.ts.map +1 -0
  618. package/dist/ridge-vent/definition.edit.js +146 -0
  619. package/dist/ridge-vent/definition.js +4 -197
  620. package/dist/ridge-vent/definition.render.d.ts +6 -0
  621. package/dist/ridge-vent/definition.render.d.ts.map +1 -0
  622. package/dist/ridge-vent/definition.render.js +44 -0
  623. package/dist/ridge-vent/move-tool.d.ts.map +1 -1
  624. package/dist/ridge-vent/move-tool.js +5 -4
  625. package/dist/roof/barrel-panel.d.ts.map +1 -1
  626. package/dist/roof/barrel-panel.js +2 -2
  627. package/dist/roof/definition.d.ts +325 -8
  628. package/dist/roof/definition.d.ts.map +1 -1
  629. package/dist/roof/definition.edit.d.ts +4 -0
  630. package/dist/roof/definition.edit.d.ts.map +1 -0
  631. package/dist/roof/definition.edit.js +181 -0
  632. package/dist/roof/definition.js +4 -284
  633. package/dist/roof/definition.render.d.ts +7 -0
  634. package/dist/roof/definition.render.d.ts.map +1 -0
  635. package/dist/roof/definition.render.js +112 -0
  636. package/dist/roof/floorplan.d.ts.map +1 -1
  637. package/dist/roof/floorplan.js +1 -2
  638. package/dist/roof/geometry-notice.d.ts +5 -0
  639. package/dist/roof/geometry-notice.d.ts.map +1 -0
  640. package/dist/roof/geometry-notice.js +27 -0
  641. package/dist/roof/glazing-controls.d.ts.map +1 -1
  642. package/dist/roof/glazing-controls.js +2 -2
  643. package/dist/roof/panel.d.ts.map +1 -1
  644. package/dist/roof/panel.js +4 -3
  645. package/dist/roof/renderer.d.ts.map +1 -1
  646. package/dist/roof/renderer.js +10 -5
  647. package/dist/roof/tool.d.ts +3 -0
  648. package/dist/roof/tool.d.ts.map +1 -1
  649. package/dist/roof/tool.js +56 -170
  650. package/dist/roof/type-thumbnail-assets.d.ts +3 -0
  651. package/dist/roof/type-thumbnail-assets.d.ts.map +1 -0
  652. package/dist/roof/type-thumbnail-assets.js +12 -0
  653. package/dist/roof/type-thumbnail.d.ts +5 -0
  654. package/dist/roof/type-thumbnail.d.ts.map +1 -0
  655. package/dist/roof/type-thumbnail.js +5 -0
  656. package/dist/roof-segment/definition.d.ts +564 -9
  657. package/dist/roof-segment/definition.d.ts.map +1 -1
  658. package/dist/roof-segment/definition.edit.d.ts +4 -0
  659. package/dist/roof-segment/definition.edit.d.ts.map +1 -0
  660. package/dist/roof-segment/definition.edit.js +303 -0
  661. package/dist/roof-segment/definition.js +4 -364
  662. package/dist/roof-segment/definition.render.d.ts +6 -0
  663. package/dist/roof-segment/definition.render.d.ts.map +1 -0
  664. package/dist/roof-segment/definition.render.js +61 -0
  665. package/dist/roof-segment/floorplan-affordances.d.ts.map +1 -1
  666. package/dist/roof-segment/floorplan-affordances.js +2 -2
  667. package/dist/roof-segment/paint.d.ts +0 -1
  668. package/dist/roof-segment/paint.d.ts.map +1 -1
  669. package/dist/roof-segment/paint.js +0 -1
  670. package/dist/roof-segment/panel.d.ts.map +1 -1
  671. package/dist/roof-segment/panel.js +32 -34
  672. package/dist/roof-segment/parametrics.d.ts.map +1 -1
  673. package/dist/roof-segment/parametrics.js +13 -11
  674. package/dist/roof-segment/slots.d.ts +2 -0
  675. package/dist/roof-segment/slots.d.ts.map +1 -0
  676. package/dist/roof-segment/slots.js +1 -0
  677. package/dist/scan/definition.d.ts +57 -7
  678. package/dist/scan/definition.d.ts.map +1 -1
  679. package/dist/scan/definition.edit.d.ts +4 -0
  680. package/dist/scan/definition.edit.d.ts.map +1 -0
  681. package/dist/scan/definition.edit.js +4 -0
  682. package/dist/scan/definition.js +4 -52
  683. package/dist/scan/definition.render.d.ts +6 -0
  684. package/dist/scan/definition.render.d.ts.map +1 -0
  685. package/dist/scan/definition.render.js +46 -0
  686. package/dist/separator/definition.d.ts +47 -2
  687. package/dist/separator/definition.d.ts.map +1 -1
  688. package/dist/separator/definition.edit.d.ts +4 -0
  689. package/dist/separator/definition.edit.d.ts.map +1 -0
  690. package/dist/separator/definition.edit.js +11 -0
  691. package/dist/separator/definition.js +4 -37
  692. package/dist/separator/definition.render.d.ts +6 -0
  693. package/dist/separator/definition.render.d.ts.map +1 -0
  694. package/dist/separator/definition.render.js +29 -0
  695. package/dist/separator/floorplan.js +1 -1
  696. package/dist/separator/renderer.d.ts +2 -1
  697. package/dist/separator/renderer.d.ts.map +1 -1
  698. package/dist/separator/renderer.edit.d.ts +5 -0
  699. package/dist/separator/renderer.edit.d.ts.map +1 -0
  700. package/dist/separator/renderer.edit.js +8 -0
  701. package/dist/separator/renderer.js +3 -5
  702. package/dist/separator/selection.d.ts.map +1 -1
  703. package/dist/separator/selection.js +2 -2
  704. package/dist/shared/accessory-placement.js +1 -1
  705. package/dist/shared/auto-fitting.js +1 -1
  706. package/dist/shared/auto-offset-tag.d.ts +1 -1
  707. package/dist/shared/auto-offset-tag.d.ts.map +1 -1
  708. package/dist/shared/auto-offset-tag.js +3 -1
  709. package/dist/shared/automatic-run-end-cap.d.ts +5 -0
  710. package/dist/shared/automatic-run-end-cap.d.ts.map +1 -1
  711. package/dist/shared/automatic-run-end-cap.js +17 -9
  712. package/dist/shared/connection-feedback.d.ts +6 -3
  713. package/dist/shared/connection-feedback.d.ts.map +1 -1
  714. package/dist/shared/connection-feedback.js +29 -6
  715. package/dist/shared/curtain-opening-limits.d.ts.map +1 -1
  716. package/dist/shared/curtain-opening-limits.js +2 -3
  717. package/dist/shared/draft-axis-guides.d.ts.map +1 -1
  718. package/dist/shared/draft-axis-guides.js +2 -1
  719. package/dist/shared/duct-adapter.js +1 -1
  720. package/dist/shared/duct-collar-inspector.d.ts +5 -0
  721. package/dist/shared/duct-collar-inspector.d.ts.map +1 -0
  722. package/dist/shared/duct-collar-inspector.js +36 -0
  723. package/dist/shared/follower-frames.d.ts +15 -0
  724. package/dist/shared/follower-frames.d.ts.map +1 -0
  725. package/dist/shared/follower-frames.js +36 -0
  726. package/dist/shared/handle-drag-scope.d.ts +14 -0
  727. package/dist/shared/handle-drag-scope.d.ts.map +1 -0
  728. package/dist/shared/handle-drag-scope.js +36 -0
  729. package/dist/shared/hosted-resize.d.ts +3 -1
  730. package/dist/shared/hosted-resize.d.ts.map +1 -1
  731. package/dist/shared/hosted-resize.js +10 -8
  732. package/dist/shared/live-preview.d.ts +16 -0
  733. package/dist/shared/live-preview.d.ts.map +1 -0
  734. package/dist/shared/live-preview.js +36 -0
  735. package/dist/shared/opening-documentation.d.ts +1 -1
  736. package/dist/shared/opening-documentation.d.ts.map +1 -1
  737. package/dist/shared/opening-documentation.js +1 -2
  738. package/dist/shared/opening-guides-runtime.d.ts.map +1 -1
  739. package/dist/shared/opening-guides-runtime.js +2 -2
  740. package/dist/shared/opening-placement-dimensions.d.ts.map +1 -1
  741. package/dist/shared/opening-placement-dimensions.js +2 -3
  742. package/dist/shared/path-point-affordance.d.ts.map +1 -1
  743. package/dist/shared/path-point-affordance.js +19 -24
  744. package/dist/shared/path-segment-affordance.d.ts +2 -1
  745. package/dist/shared/path-segment-affordance.d.ts.map +1 -1
  746. package/dist/shared/path-segment-affordance.js +11 -8
  747. package/dist/shared/pipe-collar-inspector.d.ts +5 -0
  748. package/dist/shared/pipe-collar-inspector.d.ts.map +1 -0
  749. package/dist/shared/pipe-collar-inspector.js +27 -0
  750. package/dist/shared/refrigerant-line-selection.d.ts.map +1 -1
  751. package/dist/shared/refrigerant-line-selection.js +46 -29
  752. package/dist/shared/relative-roof-drag.d.ts.map +1 -1
  753. package/dist/shared/relative-roof-drag.js +5 -4
  754. package/dist/shared/roof-surface.d.ts.map +1 -1
  755. package/dist/shared/roof-surface.js +2 -0
  756. package/dist/shared/run-hangers.d.ts.map +1 -1
  757. package/dist/shared/run-hangers.js +2 -2
  758. package/dist/shared/run-move-connectivity.d.ts +15 -6
  759. package/dist/shared/run-move-connectivity.d.ts.map +1 -1
  760. package/dist/shared/run-move-connectivity.js +14 -5
  761. package/dist/shared/run-tool-options.d.ts +8 -0
  762. package/dist/shared/run-tool-options.d.ts.map +1 -0
  763. package/dist/shared/run-tool-options.js +166 -0
  764. package/dist/shared/system-checks.d.ts.map +1 -1
  765. package/dist/shared/system-checks.js +2 -1
  766. package/dist/shared/vertical-offset.js +1 -1
  767. package/dist/shared/wall-opening-ceiling.d.ts +6 -0
  768. package/dist/shared/wall-opening-ceiling.d.ts.map +1 -1
  769. package/dist/shared/wall-opening-ceiling.js +36 -7
  770. package/dist/shelf/definition.d.ts +108 -3
  771. package/dist/shelf/definition.d.ts.map +1 -1
  772. package/dist/shelf/definition.edit.d.ts +4 -0
  773. package/dist/shelf/definition.edit.d.ts.map +1 -0
  774. package/dist/shelf/definition.edit.js +153 -0
  775. package/dist/shelf/definition.js +4 -272
  776. package/dist/shelf/definition.render.d.ts +6 -0
  777. package/dist/shelf/definition.render.d.ts.map +1 -0
  778. package/dist/shelf/definition.render.js +124 -0
  779. package/dist/site/definition.d.ts +312 -9
  780. package/dist/site/definition.d.ts.map +1 -1
  781. package/dist/site/definition.edit.d.ts +4 -0
  782. package/dist/site/definition.edit.d.ts.map +1 -0
  783. package/dist/site/definition.edit.js +4 -0
  784. package/dist/site/definition.js +4 -55
  785. package/dist/site/definition.render.d.ts +6 -0
  786. package/dist/site/definition.render.d.ts.map +1 -0
  787. package/dist/site/definition.render.js +47 -0
  788. package/dist/skylight/definition.d.ts +158 -9
  789. package/dist/skylight/definition.d.ts.map +1 -1
  790. package/dist/skylight/definition.edit.d.ts +4 -0
  791. package/dist/skylight/definition.edit.d.ts.map +1 -0
  792. package/dist/skylight/definition.edit.js +216 -0
  793. package/dist/skylight/definition.js +4 -271
  794. package/dist/skylight/definition.render.d.ts +6 -0
  795. package/dist/skylight/definition.render.d.ts.map +1 -0
  796. package/dist/skylight/definition.render.js +52 -0
  797. package/dist/skylight/move-tool.d.ts.map +1 -1
  798. package/dist/skylight/move-tool.js +7 -5
  799. package/dist/skylight/panel.js +1 -1
  800. package/dist/slab/definition.d.ts +289 -20
  801. package/dist/slab/definition.d.ts.map +1 -1
  802. package/dist/slab/definition.edit.d.ts +4 -0
  803. package/dist/slab/definition.edit.d.ts.map +1 -0
  804. package/dist/slab/definition.edit.js +226 -0
  805. package/dist/slab/definition.js +4 -334
  806. package/dist/slab/definition.render.d.ts +6 -0
  807. package/dist/slab/definition.render.d.ts.map +1 -0
  808. package/dist/slab/definition.render.js +96 -0
  809. package/dist/slab/floorplan.d.ts.map +1 -1
  810. package/dist/slab/floorplan.js +1 -2
  811. package/dist/slab/panel.js +2 -2
  812. package/dist/solar-panel/definition.d.ts +145 -14
  813. package/dist/solar-panel/definition.d.ts.map +1 -1
  814. package/dist/solar-panel/definition.edit.d.ts +4 -0
  815. package/dist/solar-panel/definition.edit.d.ts.map +1 -0
  816. package/dist/solar-panel/definition.edit.js +211 -0
  817. package/dist/solar-panel/definition.js +4 -263
  818. package/dist/solar-panel/definition.render.d.ts +6 -0
  819. package/dist/solar-panel/definition.render.d.ts.map +1 -0
  820. package/dist/solar-panel/definition.render.js +44 -0
  821. package/dist/solar-panel/move-tool.d.ts.map +1 -1
  822. package/dist/solar-panel/move-tool.js +7 -5
  823. package/dist/spawn/definition.d.ts +48 -3
  824. package/dist/spawn/definition.d.ts.map +1 -1
  825. package/dist/spawn/definition.edit.d.ts +4 -0
  826. package/dist/spawn/definition.edit.d.ts.map +1 -0
  827. package/dist/spawn/definition.edit.js +55 -0
  828. package/dist/spawn/definition.js +4 -109
  829. package/dist/spawn/definition.render.d.ts +6 -0
  830. package/dist/spawn/definition.render.d.ts.map +1 -0
  831. package/dist/spawn/definition.render.js +50 -0
  832. package/dist/stair/definition.d.ts +334 -8
  833. package/dist/stair/definition.d.ts.map +1 -1
  834. package/dist/stair/definition.edit.d.ts +4 -0
  835. package/dist/stair/definition.edit.d.ts.map +1 -0
  836. package/dist/stair/definition.edit.js +364 -0
  837. package/dist/stair/definition.js +4 -443
  838. package/dist/stair/definition.render.d.ts +6 -0
  839. package/dist/stair/definition.render.d.ts.map +1 -0
  840. package/dist/stair/definition.render.js +75 -0
  841. package/dist/stair/documentation.d.ts.map +1 -1
  842. package/dist/stair/documentation.js +1 -2
  843. package/dist/stair/floorplan.d.ts.map +1 -1
  844. package/dist/stair/floorplan.js +1 -2
  845. package/dist/stair/panel.js +2 -2
  846. package/dist/stair/plan-entry.d.ts.map +1 -1
  847. package/dist/stair/plan-entry.js +1 -2
  848. package/dist/stair/structure-controls.d.ts.map +1 -1
  849. package/dist/stair/structure-controls.js +2 -2
  850. package/dist/stair-segment/definition.d.ts +130 -7
  851. package/dist/stair-segment/definition.d.ts.map +1 -1
  852. package/dist/stair-segment/definition.edit.d.ts +4 -0
  853. package/dist/stair-segment/definition.edit.d.ts.map +1 -0
  854. package/dist/stair-segment/definition.edit.js +135 -0
  855. package/dist/stair-segment/definition.js +4 -172
  856. package/dist/stair-segment/definition.render.d.ts +6 -0
  857. package/dist/stair-segment/definition.render.d.ts.map +1 -0
  858. package/dist/stair-segment/definition.render.js +38 -0
  859. package/dist/structural-grid/definition.d.ts +50 -3
  860. package/dist/structural-grid/definition.d.ts.map +1 -1
  861. package/dist/structural-grid/definition.edit.d.ts +4 -0
  862. package/dist/structural-grid/definition.edit.d.ts.map +1 -0
  863. package/dist/structural-grid/definition.edit.js +16 -0
  864. package/dist/structural-grid/definition.js +4 -51
  865. package/dist/structural-grid/definition.render.d.ts +6 -0
  866. package/dist/structural-grid/definition.render.d.ts.map +1 -0
  867. package/dist/structural-grid/definition.render.js +37 -0
  868. package/dist/structural-grid/floorplan.js +1 -1
  869. package/dist/turbine-vent/definition.d.ts +97 -23
  870. package/dist/turbine-vent/definition.d.ts.map +1 -1
  871. package/dist/turbine-vent/definition.edit.d.ts +4 -0
  872. package/dist/turbine-vent/definition.edit.d.ts.map +1 -0
  873. package/dist/turbine-vent/definition.edit.js +64 -0
  874. package/dist/turbine-vent/definition.js +4 -121
  875. package/dist/turbine-vent/definition.render.d.ts +6 -0
  876. package/dist/turbine-vent/definition.render.d.ts.map +1 -0
  877. package/dist/turbine-vent/definition.render.js +42 -0
  878. package/dist/turbine-vent/move-tool.d.ts.map +1 -1
  879. package/dist/turbine-vent/move-tool.js +6 -5
  880. package/dist/unit/definition.d.ts +53 -9
  881. package/dist/unit/definition.d.ts.map +1 -1
  882. package/dist/unit/definition.edit.d.ts +4 -0
  883. package/dist/unit/definition.edit.d.ts.map +1 -0
  884. package/dist/unit/definition.edit.js +4 -0
  885. package/dist/unit/definition.js +4 -38
  886. package/dist/unit/definition.render.d.ts +6 -0
  887. package/dist/unit/definition.render.d.ts.map +1 -0
  888. package/dist/unit/definition.render.js +30 -0
  889. package/dist/unit/unit-panel.d.ts.map +1 -1
  890. package/dist/unit/unit-panel.js +2 -2
  891. package/dist/wall/contextual-dimensions.d.ts.map +1 -1
  892. package/dist/wall/contextual-dimensions.js +1 -2
  893. package/dist/wall/curtain-wall-panel.d.ts.map +1 -1
  894. package/dist/wall/curtain-wall-panel.js +2 -2
  895. package/dist/wall/definition.d.ts +809 -3
  896. package/dist/wall/definition.d.ts.map +1 -1
  897. package/dist/wall/definition.edit.d.ts +4 -0
  898. package/dist/wall/definition.edit.d.ts.map +1 -0
  899. package/dist/wall/definition.edit.js +179 -0
  900. package/dist/wall/definition.js +4 -279
  901. package/dist/wall/definition.render.d.ts +6 -0
  902. package/dist/wall/definition.render.d.ts.map +1 -0
  903. package/dist/wall/definition.render.js +105 -0
  904. package/dist/wall/floorplan.d.ts.map +1 -1
  905. package/dist/wall/floorplan.js +2 -3
  906. package/dist/wall/measurement.d.ts.map +1 -1
  907. package/dist/wall/measurement.js +22 -5
  908. package/dist/wall/move-endpoint-tool.d.ts.map +1 -1
  909. package/dist/wall/move-endpoint-tool.js +3 -3
  910. package/dist/wall/move-shared.js +1 -1
  911. package/dist/wall/panel-model.d.ts.map +1 -1
  912. package/dist/wall/panel-model.js +4 -3
  913. package/dist/wall/panel.d.ts.map +1 -1
  914. package/dist/wall/panel.js +15 -6
  915. package/dist/wall/quick-measurement.js +1 -1
  916. package/dist/wall/rectangle-command.d.ts +1 -0
  917. package/dist/wall/rectangle-command.d.ts.map +1 -1
  918. package/dist/wall/rectangle-tool.js +2 -2
  919. package/dist/wall/split-floorplan-layer.d.ts.map +1 -1
  920. package/dist/wall/split-floorplan-layer.js +2 -2
  921. package/dist/wall/split-tool.d.ts.map +1 -1
  922. package/dist/wall/split-tool.js +2 -2
  923. package/dist/wall/tool.d.ts.map +1 -1
  924. package/dist/wall/tool.js +138 -36
  925. package/dist/wall/treatments.d.ts.map +1 -1
  926. package/dist/wall/treatments.js +36 -16
  927. package/dist/window/definition.d.ts +356 -15
  928. package/dist/window/definition.d.ts.map +1 -1
  929. package/dist/window/definition.edit.d.ts +4 -0
  930. package/dist/window/definition.edit.d.ts.map +1 -0
  931. package/dist/window/definition.edit.js +250 -0
  932. package/dist/window/definition.js +5 -338
  933. package/dist/window/definition.render.d.ts +8 -0
  934. package/dist/window/definition.render.d.ts.map +1 -0
  935. package/dist/window/definition.render.js +89 -0
  936. package/dist/window/floorplan-move.d.ts.map +1 -1
  937. package/dist/window/floorplan-move.js +7 -4
  938. package/dist/window/floorplan.d.ts.map +1 -1
  939. package/dist/window/floorplan.js +1 -2
  940. package/dist/window/mechanism.js +1 -1
  941. package/dist/window/move-tool.d.ts.map +1 -1
  942. package/dist/window/move-tool.js +7 -11
  943. package/dist/window/tool.d.ts.map +1 -1
  944. package/dist/window/tool.js +5 -2
  945. package/dist/zone/contextual-dimensions.d.ts.map +1 -1
  946. package/dist/zone/contextual-dimensions.js +1 -2
  947. package/dist/zone/definition.d.ts +264 -9
  948. package/dist/zone/definition.d.ts.map +1 -1
  949. package/dist/zone/definition.edit.d.ts +4 -0
  950. package/dist/zone/definition.edit.d.ts.map +1 -0
  951. package/dist/zone/definition.edit.js +36 -0
  952. package/dist/zone/definition.js +4 -97
  953. package/dist/zone/definition.render.d.ts +6 -0
  954. package/dist/zone/definition.render.d.ts.map +1 -0
  955. package/dist/zone/definition.render.js +57 -0
  956. package/dist/zone/floorplan.d.ts.map +1 -1
  957. package/dist/zone/floorplan.js +1 -2
  958. package/dist/zone/quantities-panel.d.ts.map +1 -1
  959. package/dist/zone/quantities-panel.js +2 -2
  960. package/dist/zone/room-clear-dimensions.d.ts.map +1 -1
  961. package/dist/zone/room-clear-dimensions.js +1 -2
  962. package/dist/zone/room-documentation.d.ts +1 -2
  963. package/dist/zone/room-documentation.d.ts.map +1 -1
  964. package/dist/zone/room-documentation.js +1 -1
  965. package/package.json +21 -10
@@ -1,341 +1,4 @@
1
- import { doorSlots, getDoorOpeningSize } from '@pascal-app/core';
2
- import { NEW_DOOR_FRAME_THICKNESS } from '@pascal-app/core/building';
3
- import { curtainOpeningResizeMax } from '../shared/curtain-opening-limits.js';
4
- import { doorBatchable } from '../shared/node-batch/batchable.js';
5
- import { buildDoorFloorplanSchedule, computeDoorFloorplanLevelData, } from '../shared/opening-documentation.js';
6
- import { publishOpeningResizeGuides } from '../shared/opening-guides-runtime.js';
7
- import { createOpeningPropertyPreview } from '../shared/opening-property-preview.js';
8
- import { openingPropertyPreviewHost } from '../shared/opening-property-preview-host.js';
9
- import { readRoofFaceHeightMax, readRoofFaceWidthMax } from '../shared/roof-opening-host.js';
10
- import { buildRoofWallOpeningCut } from '../shared/roof-wall-opening-cut.js';
11
- import { scriptedOpeningHandles } from '../shared/scripted-opening-handles.js';
12
- import { readHostWallCeiling } from '../shared/wall-opening-ceiling.js';
13
- import { openingSeenFromOutside } from '../wall/exterior.js';
14
- import { wallFloorplanSiblingOverrides } from '../wall/floorplan-overrides.js';
15
- import { buildDoorContextualDimensions } from './contextual-dimensions.js';
16
- import { scaleHandleHeight } from './door-math.js';
17
- import { buildDoorFloorplan } from './floorplan.js';
18
- import { doorWidthAffordance } from './floorplan-affordances.js';
19
- import { doorFloorplanMoveTarget } from './floorplan-move.js';
20
- import { doorMechanism } from './mechanism.js';
21
- import { doorPaint } from './paint.js';
22
- import { doorParametrics } from './parametrics.js';
23
- import { DOOR_PLACEMENT_HINTS } from './placement.js';
24
- import { DoorNode } from './schema.js';
25
- const SIDE_HANDLE_OFFSET = 0.24;
26
- const HEIGHT_HANDLE_OFFSET = 0.24;
27
- const MIN_DOOR_HEIGHT = 0.5;
28
- const MIN_DOOR_WIDTH = 0.3;
29
- // How far the move cross floats off the wall face (+Z, the door's facing
30
- // normal) so it's grabbable instead of buried in the leaf/frame.
31
- const MOVE_HANDLE_LIFT = 0.12;
32
- function readWallLength(door, scene) {
33
- if (!door.wallId)
34
- return Number.POSITIVE_INFINITY;
35
- const wall = scene.get(door.wallId);
36
- if (!wall)
37
- return Number.POSITIVE_INFINITY;
38
- return Math.hypot(wall.end[0] - wall.start[0], wall.end[1] - wall.start[1]);
39
- }
40
- // Width arrow on the door-local +X (right) or -X (left) side. Drag grows
41
- // the door from the anchored OPPOSITE edge; the door's wall-local center
42
- // re-centers so the anchored edge stays put.
43
- function doorWidthHandle(side) {
44
- const sign = side === 'right' ? 1 : -1;
45
- return {
46
- kind: 'linear-resize',
47
- axis: 'x',
48
- // 'min' = -X edge anchored (right arrow grows the +X edge outward).
49
- // 'max' = +X edge anchored (left arrow grows the -X edge outward).
50
- anchor: side === 'right' ? 'min' : 'max',
51
- min: MIN_DOOR_WIDTH,
52
- max: (n, scene) => {
53
- // Roof-hosted doors clamp against the face profile (the wall-based
54
- // limits read Infinity when wallId is unset).
55
- const roofMax = readRoofFaceWidthMax(n, scene, sign);
56
- if (roofMax !== null)
57
- return Math.max(MIN_DOOR_WIDTH, roofMax);
58
- return (curtainOpeningResizeMax(n, scene.nodes(), 'x', sign) ??
59
- readWallLength(n, scene) - (getDoorOpeningSize(n).width - n.width));
60
- },
61
- currentValue: (n) => n.width,
62
- onDrag: (node) => publishOpeningResizeGuides(node, false),
63
- apply: (initial, newWidth) => {
64
- // Anchored edge stays fixed in wall-local coords. Door rotation is
65
- // applied by the inner ride group (the renderer mounts a nested
66
- // <group> at the door's pose), so the apply math here is in
67
- // door-local coords AND the patch.position must be in wall-local
68
- // coords. We compute the anchored wall-local point from the
69
- // initial node, then derive the new wall-local center from it.
70
- const rotY = initial.rotation[1];
71
- const armX = Math.cos(rotY);
72
- const armZ = -Math.sin(rotY);
73
- const anchorX = initial.position[0] - sign * (initial.width / 2) * armX;
74
- const anchorZ = initial.position[2] - sign * (initial.width / 2) * armZ;
75
- const newCenterX = anchorX + sign * (newWidth / 2) * armX;
76
- const newCenterZ = anchorZ + sign * (newWidth / 2) * armZ;
77
- return {
78
- width: newWidth,
79
- position: [newCenterX, initial.position[1], newCenterZ],
80
- };
81
- },
82
- placement: {
83
- // door-local: +X axis lives along door's own X. Inner ride group
84
- // applies door.rotation, so we sit purely on door-local +X / -X.
85
- position: (n) => [
86
- -getDoorOpeningSize(n).leafOffsetX +
87
- sign * (getDoorOpeningSize(n).width / 2 + SIDE_HANDLE_OFFSET),
88
- 0,
89
- 0,
90
- ],
91
- rotationY: () => (side === 'right' ? 0 : Math.PI),
92
- },
93
- portal: 'grandparent',
94
- };
95
- }
96
- function doorHeightHandle() {
97
- return {
98
- kind: 'linear-resize',
99
- axis: 'y',
100
- anchor: 'min', // bottom anchored at wall-local Y = position[1] - height/2
101
- min: MIN_DOOR_HEIGHT,
102
- max: (n, scene) => {
103
- const roofMax = readRoofFaceHeightMax(n, scene, 1);
104
- if (roofMax !== null)
105
- return Math.max(MIN_DOOR_HEIGHT, roofMax);
106
- const curtainMax = curtainOpeningResizeMax(n, scene.nodes(), 'y', 1);
107
- if (curtainMax !== undefined)
108
- return curtainMax;
109
- const bottom = n.position[1] - n.height / 2;
110
- return Math.max(MIN_DOOR_HEIGHT, readHostWallCeiling(n.wallId, scene, n) -
111
- bottom -
112
- (getDoorOpeningSize(n).height - n.height));
113
- },
114
- currentValue: (n) => n.height,
115
- onDrag: (node) => publishOpeningResizeGuides(node, false),
116
- apply: (initial, newHeight) => {
117
- const bottom = initial.position[1] - initial.height / 2;
118
- // Scale the handle so it tracks the door instead of staying glued to a
119
- // fixed floor height (shared with the panel's Height slider).
120
- return {
121
- height: newHeight,
122
- position: [initial.position[0], bottom + newHeight / 2, initial.position[2]],
123
- handleHeight: scaleHandleHeight(initial.handleHeight, initial.height, newHeight),
124
- };
125
- },
126
- placement: {
127
- position: (n) => [0, getDoorOpeningSize(n).height - n.height / 2 + HEIGHT_HANDLE_OFFSET, 0],
128
- },
129
- portal: 'grandparent',
130
- };
131
- }
132
- // Press-drag move grip at the door centre, standing in the wall face. Routes
133
- // through the same move tool as the floating Move button (3D
134
- // `affordanceTools.move`, 2D `floorplanMoveTarget`) — wall slide + re-host onto
135
- // another wall — but `engageMoveDrag` commits on release, with no second click.
136
- function doorMoveHandle() {
137
- return {
138
- kind: 'tap-action',
139
- shape: 'move-cross',
140
- plane: 'node-normal',
141
- portal: 'grandparent',
142
- cursor: 'move',
143
- onActivate: (node, _scene, editor) => editor.engageMoveDrag(node),
144
- placement: {
145
- position: () => [0, 0, MOVE_HANDLE_LIFT],
146
- },
147
- };
148
- }
149
- function doorRadiusHandle(index) {
150
- const sign = index === 0 ? -1 : 1;
151
- return {
152
- kind: 'corner-radius',
153
- corner: [sign, 1],
154
- width: (node) => node.width,
155
- height: (node) => node.height,
156
- currentValue: (node) => node.openingRadiusMode === 'individual'
157
- ? (node.openingTopRadii[index] ?? 0)
158
- : node.cornerRadius,
159
- max: (node) => Math.min(node.width / 2, node.height),
160
- apply: (node, radius, _scene, modifiers) => {
161
- if (!modifiers.shiftKey) {
162
- return { openingShape: 'rounded', openingRadiusMode: 'all', cornerRadius: radius };
163
- }
164
- const radii = node.openingRadiusMode === 'individual'
165
- ? [...node.openingTopRadii]
166
- : [node.cornerRadius, node.cornerRadius];
167
- radii[index] = radius;
168
- return {
169
- openingShape: 'rounded',
170
- openingRadiusMode: 'individual',
171
- openingTopRadii: radii,
172
- };
173
- },
174
- createPreview: (node) => createOpeningPropertyPreview(node.id, openingPropertyPreviewHost),
175
- visible: (node) => node.openingShape !== 'arch',
176
- portal: 'grandparent',
177
- };
178
- }
179
- const doorHandles = [
180
- doorMoveHandle(),
181
- doorWidthHandle('left'),
182
- doorWidthHandle('right'),
183
- doorHeightHandle(),
184
- doorRadiusHandle(0),
185
- doorRadiusHandle(1),
186
- ];
187
- /**
188
- * Door — Phase 5 batch kind. Hosted on walls, cuts holes in them,
189
- * animated open/close state.
190
- *
191
- * Capabilities:
192
- * - **No `movable`**: door's move is bespoke wall-bound drag (slide
193
- * along the wall, snap to wall start/end). Capability-driven dispatch
194
- * keeps legacy `MoveDoorTool`.
195
- * - `selectable`, `duplicable`, `deletable` standard.
196
- *
197
- * Stages:
198
- * - A: registered.
199
- * - B: deferred — door geometry (frame / leaf / glass / hardware /
200
- * segments) is ~800 lines in DoorSystem; extraction is a focused
201
- * session. `def.renderer` (wrap-export of legacy DoorRenderer) +
202
- * `def.system` (DoorSystem + DoorAnimationSystem bundle) hold parity.
203
- * - C: `def.floorplan` polygon sits in parent wall's cutout. Legacy
204
- * `openingPolygons` short-circuits door entries when registered.
205
- */
206
- export const doorDefinition = {
207
- kind: 'door',
208
- snapProfile: 'item',
209
- facingIndicator: true,
210
- schemaVersion: 2,
211
- schema: DoorNode,
212
- category: 'structure',
213
- extensions: {
214
- 'pascal:editor/floorplan': {
215
- contextualDimensions: buildDoorContextualDimensions,
216
- schedule: buildDoorFloorplanSchedule,
217
- // Swap hinge / swing side from the action bar, in 2D and 3D.
218
- actionMenu: { actions: () => import('./actions.js') },
219
- },
220
- },
221
- surfaceRole: 'joinery',
222
- // Leverage the schema's zod `.default()` annotations to compute the
223
- // full default shape — door has 40+ fields, listing them inline would
224
- // duplicate the schema. Parse a minimal stub, drop id/type, return rest.
225
- defaults: () => {
226
- const stub = DoorNode.parse({
227
- id: 'door_default',
228
- type: 'door',
229
- frameThickness: NEW_DOOR_FRAME_THICKNESS,
230
- casingFaceA: true,
231
- casingFaceB: true,
232
- });
233
- const { id: _id, type: _type, ...rest } = stub;
234
- return rest;
235
- },
236
- capabilities: {
237
- reveal: { phase: 'openings', style: 'cut' },
238
- exterior: openingSeenFromOutside,
239
- revealOnEdit: [
240
- 'position',
241
- 'width',
242
- 'height',
243
- 'sidelightLeft',
244
- 'sidelightRight',
245
- 'transomHeight',
246
- 'openingShape',
247
- 'openingKind',
248
- 'doorType',
249
- ],
250
- batchable: doorBatchable,
251
- selectable: { hitVolume: 'bbox' },
252
- duplicable: true,
253
- deletable: true,
254
- wallOpeningPlacement: true,
255
- // Doors also host on roof-segment wall faces (base walls under the
256
- // roof, gable ends). `buildCut` punches the opening into the
257
- // segment's wall brush; `dirtyHandledByOwnSystem` keeps the roof-merge
258
- // loop from consuming door dirty marks (DoorSystem owns them and
259
- // already cascades to the host via parentId).
260
- roofAccessory: {
261
- buildCut: (node, hostSegment) => buildRoofWallOpeningCut(node, hostSegment),
262
- cutScope: 'wall',
263
- dirtyHandledByOwnSystem: true,
264
- },
265
- // `wallId` / `roofSegmentId` tie the door to its host and are
266
- // re-derived from the surface under the cursor when a preset is
267
- // placed. Host apps strip these at preset-save time via
268
- // `getHostRefFields(def)`.
269
- hostRefFields: ['wallId', 'roofSegmentId', 'roofFace'],
270
- // Panel / glass slots painted through the registry. The door system tags
271
- // each mesh with its `userData.slotId`; paint writes `node.slots`.
272
- slots: () => doorSlots(),
273
- paint: doorPaint,
274
- mechanism: doorMechanism,
275
- },
276
- parametrics: doorParametrics,
277
- handles: (node) => node.source
278
- ? [doorMoveHandle(), ...scriptedOpeningHandles(node, doorWidthHandle, doorHeightHandle)]
279
- : doorHandles,
280
- rendersChildren: false,
281
- renderer: {
282
- kind: 'parametric',
283
- module: () => import('./renderer.js'),
284
- },
285
- preview: () => import('./preview.js'),
286
- system: {
287
- module: () => import('./system.js'),
288
- // Priority 3 mirrors the legacy DoorSystem (after animation at 2,
289
- // before wall mitering at 4).
290
- priority: 3,
291
- },
292
- // Stage C: floor-plan polygon. Needs ctx.parent (the wall) to compute
293
- // direction + perpendicular for the cutout footprint.
294
- floorplan: buildDoorFloorplan,
295
- computeFloorplanLevelData: computeDoorFloorplanLevelData,
296
- floorplanDependsOnSiblings: true,
297
- // Opening symbols position from `ctx.parent` (the host wall); merge the
298
- // walls' live drag overrides so the symbol tracks a wall / group drag in
299
- // realtime instead of jumping on commit.
300
- floorplanSiblingOverrides: wallFloorplanSiblingOverrides,
301
- // Stage D — placement (`def.tool`) + move-on-wall (`def.
302
- // affordanceTools.move`). Both ports of the legacy tools at
303
- // `editor/components/tools/door/`, relocated into the kind folder and
304
- // wired through ToolManager's registry-first dispatch (`def.tool` for
305
- // build-mode placement, `getRegistryAffordanceTool` for the move-on-
306
- // pick flow). Same legacy semantics: wall-event-driven snap, clamped
307
- // wall-local coords, hasWallChildOverlap guard, live mesh updates.
308
- tool: () => import('./tool.js'),
309
- affordanceTools: {
310
- move: () => import('./move-tool.js'),
311
- },
312
- // 2D move-on-floorplan handler. When `useEditor.movingNode` is a
313
- // door and the floor plan is active, `FloorplanRegistryMoveOverlay`
314
- // dispatches to this instead of the generic translate path — pointer
315
- // snaps to the nearest wall, projects onto the wall axis, snaps
316
- // local-X to 0.5m, clamps inside wall bounds.
317
- floorplanMoveTarget: doorFloorplanMoveTarget,
318
- // 2D drag affordances. `resize-width` drives the door's two side
319
- // arrows — pointer-down on either arrow starts an anchored width drag
320
- // (opposite edge stays fixed, clamped to wall bounds).
321
- floorplanAffordances: {
322
- 'resize-width': doorWidthAffordance,
323
- },
324
- toolHints: [
325
- { key: 'Left click', label: 'Place door on wall' },
326
- ...DOOR_PLACEMENT_HINTS,
327
- { key: 'R', label: 'Flip side' },
328
- { key: 'Alt', label: 'Force place' },
329
- { key: 'Esc', label: 'Cancel' },
330
- ],
331
- presentation: {
332
- label: 'Door',
333
- description: 'A door cut into a wall. Animated open/close state.',
334
- icon: { kind: 'url', src: '/icons/door.webp' },
335
- paletteSection: 'structure',
336
- paletteOrder: 50,
337
- },
338
- mcp: {
339
- description: 'A door mounted on a wall, with type / dimensions / hardware options.',
340
- },
341
- };
1
+ import { composeNodeDefinition } from '../definition-contributions.js';
2
+ import { doorEditContribution } from './definition.edit.js';
3
+ import { doorRenderDefinition } from './definition.render.js';
4
+ export const doorDefinition = composeNodeDefinition(doorRenderDefinition, doorEditContribution);
@@ -0,0 +1,6 @@
1
+ import type { NodeRenderDefinition } from '../definition-contributions.js';
2
+ import { DoorNode } from './schema.js';
3
+ export declare const doorRenderDefinition: NodeRenderDefinition<typeof DoorNode> & {
4
+ kind: 'door';
5
+ };
6
+ //# sourceMappingURL=definition.render.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definition.render.d.ts","sourceRoot":"","sources":["../../src/door/definition.render.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAOvE,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAEnC,eAAO,MAAM,oBAAoB,EAAE,oBAAoB,CAAC,OAAO,QAAQ,CAAC,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAqFxF,CAAA"}
@@ -0,0 +1,94 @@
1
+ import { doorSlots } from '@pascal-app/core';
2
+ import { NEW_DOOR_FRAME_THICKNESS } from '@pascal-app/core/building';
3
+ import { doorBatchable } from '../shared/node-batch/batchable.js';
4
+ import { computeDoorFloorplanLevelData } from '../shared/opening-documentation.js';
5
+ import { buildRoofWallOpeningCut } from '../shared/roof-wall-opening-cut.js';
6
+ import { openingSeenFromOutside } from '../wall/exterior.js';
7
+ import { buildDoorFloorplan } from './floorplan.js';
8
+ import { doorMechanism } from './mechanism.js';
9
+ import { DoorNode } from './schema.js';
10
+ export const doorRenderDefinition = {
11
+ kind: 'door',
12
+ schemaVersion: 2,
13
+ schema: DoorNode,
14
+ category: 'structure',
15
+ surfaceRole: 'joinery',
16
+ // Leverage the schema's zod `.default()` annotations to compute the
17
+ // full default shape — door has 40+ fields, listing them inline would
18
+ // duplicate the schema. Parse a minimal stub, drop id/type, return rest.
19
+ defaults: () => {
20
+ const stub = DoorNode.parse({
21
+ id: 'door_default',
22
+ type: 'door',
23
+ frameThickness: NEW_DOOR_FRAME_THICKNESS,
24
+ casingFaceA: true,
25
+ casingFaceB: true,
26
+ });
27
+ const { id: _id, type: _type, ...rest } = stub;
28
+ return rest;
29
+ },
30
+ capabilities: {
31
+ reveal: { phase: 'openings', style: 'cut' },
32
+ exterior: openingSeenFromOutside,
33
+ revealOnEdit: [
34
+ 'position',
35
+ 'width',
36
+ 'height',
37
+ 'sidelightLeft',
38
+ 'sidelightRight',
39
+ 'transomHeight',
40
+ 'openingShape',
41
+ 'openingKind',
42
+ 'doorType',
43
+ ],
44
+ batchable: doorBatchable,
45
+ selectable: { hitVolume: 'bbox' },
46
+ duplicable: true,
47
+ deletable: true,
48
+ wallOpeningPlacement: true,
49
+ // Doors also host on roof-segment wall faces (base walls under the
50
+ // roof, gable ends). `buildCut` punches the opening into the
51
+ // segment's wall brush; `dirtyHandledByOwnSystem` keeps the roof-merge
52
+ // loop from consuming door dirty marks (DoorSystem owns them and
53
+ // already cascades to the host via parentId).
54
+ roofAccessory: {
55
+ buildCut: (node, hostSegment) => buildRoofWallOpeningCut(node, hostSegment),
56
+ cutScope: 'wall',
57
+ dirtyHandledByOwnSystem: true,
58
+ },
59
+ // `wallId` / `roofSegmentId` tie the door to its host and are
60
+ // re-derived from the surface under the cursor when a preset is
61
+ // placed. Host apps strip these at preset-save time via
62
+ // `getHostRefFields(def)`.
63
+ hostRefFields: ['wallId', 'roofSegmentId', 'roofFace'],
64
+ // Panel / glass slots painted through the registry. The door system tags
65
+ // each mesh with its `userData.slotId`; paint writes `node.slots`.
66
+ slots: () => doorSlots(),
67
+ mechanism: doorMechanism,
68
+ },
69
+ rendersChildren: false,
70
+ renderer: {
71
+ kind: 'parametric',
72
+ module: () => import('./renderer.js'),
73
+ },
74
+ system: {
75
+ module: () => import('./system.js'),
76
+ // Priority 3 mirrors the legacy DoorSystem (after animation at 2,
77
+ // before wall mitering at 4).
78
+ priority: 3,
79
+ },
80
+ // Stage C: floor-plan polygon. Needs ctx.parent (the wall) to compute
81
+ // direction + perpendicular for the cutout footprint.
82
+ floorplan: buildDoorFloorplan,
83
+ computeFloorplanLevelData: computeDoorFloorplanLevelData,
84
+ presentation: {
85
+ label: 'Door',
86
+ description: 'A door cut into a wall. Animated open/close state.',
87
+ icon: { kind: 'url', src: '/icons/door.webp' },
88
+ paletteSection: 'structure',
89
+ paletteOrder: 50,
90
+ },
91
+ mcp: {
92
+ description: 'A door mounted on a wall, with type / dimensions / hardware options.',
93
+ },
94
+ };
@@ -1 +1 @@
1
- {"version":3,"file":"floorplan-move.d.ts","sourceRoot":"","sources":["../../src/door/floorplan-move.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,QAAQ,EAEb,KAAK,mBAAmB,EASzB,MAAM,kBAAkB,CAAA;AAqBzB;;;;;;;;;;;;;;GAcG;AAEH,eAAO,MAAM,uBAAuB,EAAE,mBAAmB,CAAC,QAAQ,CA2RjE,CAAA"}
1
+ {"version":3,"file":"floorplan-move.d.ts","sourceRoot":"","sources":["../../src/door/floorplan-move.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,QAAQ,EAEb,KAAK,mBAAmB,EASzB,MAAM,kBAAkB,CAAA;AAqBzB;;;;;;;;;;;;;;GAcG;AAEH,eAAO,MAAM,uBAAuB,EAAE,mBAAmB,CAAC,QAAQ,CA+RjE,CAAA"}
@@ -61,6 +61,7 @@ export const doorFloorplanMoveTarget = ({ node }) => {
61
61
  // the cursor as a ghost (like the 3D move) and is NOT committable — a door
62
62
  // needs a wall. Starts true so a click before any move keeps the door put.
63
63
  let onWall = true;
64
+ let lastFits = true;
64
65
  // Alt force-place (last apply's modifier) — lets `canCommit` allow an
65
66
  // overlapping placement, matching the 3D move. Read in `canCommit` so an Alt-
66
67
  // held commit over a collision lands instead of reverting.
@@ -178,10 +179,11 @@ export const doorFloorplanMoveTarget = ({ node }) => {
178
179
  : neighborX +
179
180
  getDoorOpeningSize(node).leafOffsetX *
180
181
  openingHostFacing({ rotation: [0, hit.itemRotation + (flipped ? Math.PI : 0), 0] });
181
- const { clampedX, clampedY, transomHeight } = clampToWall(hit.wall, snappedLocalX, node.width, node.height, {
182
+ const { clampedX, clampedY, fits, transomHeight } = clampToWall(hit.wall, snappedLocalX, node.width, node.height, {
182
183
  ...node,
183
184
  rotation: [0, hit.itemRotation + (flipped ? Math.PI : 0), 0],
184
185
  }, nodes);
186
+ lastFits = fits;
185
187
  // One click per real position step, keyed on the SNAPPED along-wall value
186
188
  // so it ticks only when the door actually moves to a new cell.
187
189
  tickGridStep(clampedX);
@@ -231,13 +233,14 @@ export const doorFloorplanMoveTarget = ({ node }) => {
231
233
  const live = useScene.getState().nodes[nodeId];
232
234
  if (live?.type !== 'door')
233
235
  return false;
234
- // Block commit if the door overlaps another wall child — UNLESS Alt
235
- // force-places (same `placeable` rule as the 3D move + the shared
236
- // `resolveOpeningPlacement`).
237
- const collides = hasWallChildOverlap(lastValid.parentId, useScene.getState().nodes, lastValid.position[0] -
238
- getDoorOpeningSize({ ...live, ...lastValid }).leafOffsetX *
239
- openingHostFacing({ rotation: lastValid.rotation }), lastValid.position[1] +
240
- (getDoorOpeningSize({ ...live, ...lastValid }).height - live.height) / 2, getDoorOpeningSize({ ...live, ...lastValid }).width, getDoorOpeningSize({ ...live, ...lastValid }).height, live.id);
236
+ // Block commit if the door does not fit under the wall's top or overlaps
237
+ // another wall child — UNLESS Alt force-places (same `placeable` rule as
238
+ // the 3D move + the shared `resolveOpeningPlacement`).
239
+ const collides = !lastFits ||
240
+ hasWallChildOverlap(lastValid.parentId, useScene.getState().nodes, lastValid.position[0] -
241
+ getDoorOpeningSize({ ...live, ...lastValid }).leafOffsetX *
242
+ openingHostFacing({ rotation: lastValid.rotation }), lastValid.position[1] +
243
+ (getDoorOpeningSize({ ...live, ...lastValid }).height - live.height) / 2, getDoorOpeningSize({ ...live, ...lastValid }).width, getDoorOpeningSize({ ...live, ...lastValid }).height, live.id);
241
244
  return resolveOpeningPlacement({ collides, forcePlace }).placeable;
242
245
  },
243
246
  commit() {
@@ -1 +1 @@
1
- {"version":3,"file":"floorplan.d.ts","sourceRoot":"","sources":["../../src/door/floorplan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,QAAQ,EACR,iBAAiB,EAEjB,eAAe,EAEhB,MAAM,kBAAkB,CAAA;AAezB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,eAAe,GAAG,iBAAiB,GAAG,IAAI,CA+1BjG"}
1
+ {"version":3,"file":"floorplan.d.ts","sourceRoot":"","sources":["../../src/door/floorplan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,QAAQ,EACR,iBAAiB,EAEjB,eAAe,EAEhB,MAAM,kBAAkB,CAAA;AAiBzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,eAAe,GAAG,iBAAiB,GAAG,IAAI,CA+1BjG"}
@@ -1,5 +1,4 @@
1
- import { getDoorOpeningSize, getWallBodyCenterOffset, openingHostFacing } from '@pascal-app/core';
2
- import { readFloorplanContext, readFloorplanGeometryMetadata, withFloorplanGeometryMetadata, } from '@pascal-app/editor';
1
+ import { getDoorOpeningSize, getWallBodyCenterOffset, openingHostFacing, readFloorplanContext, readFloorplanGeometryMetadata, withFloorplanGeometryMetadata, } from '@pascal-app/core';
3
2
  import { buildOpeningCasingPlan } from '../shared/opening-casing.js';
4
3
  import { buildOpeningMarkAnnotation, } from '../shared/opening-documentation.js';
5
4
  import { buildOpeningPlacementDimensions } from '../shared/opening-placement-dimensions.js';
@@ -1 +1 @@
1
- {"version":3,"file":"mechanism.d.ts","sourceRoot":"","sources":["../../src/door/mechanism.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAIhF,8FAA8F;AAC9F,eAAO,MAAM,aAAa,EAAE,mBAiB3B,CAAA"}
1
+ {"version":3,"file":"mechanism.d.ts","sourceRoot":"","sources":["../../src/door/mechanism.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,mBAAmB,EAEzB,MAAM,kBAAkB,CAAA;AAGzB,8FAA8F;AAC9F,eAAO,MAAM,aAAa,EAAE,mBAiB3B,CAAA"}
@@ -1,5 +1,4 @@
1
- import { isOperationDoorType } from '@pascal-app/core';
2
- import { closeDoorOpenState, getDisplayedDoorValue, openDoorOpenState } from '@pascal-app/editor';
1
+ import { closeDoorOpenState, getDisplayedDoorValue, isOperationDoorType, openDoorOpenState, } from '@pascal-app/core';
3
2
  import { scriptedOpening } from '../shared/scripted-opening.js';
4
3
  /** A door's leaf: Play opens it and Stop closes it, without touching the saved open state. */
5
4
  export const doorMechanism = {
@@ -1 +1 @@
1
- {"version":3,"file":"move-tool.d.ts","sourceRoot":"","sources":["../../src/door/move-tool.tsx"],"names":[],"mappings":"AAAA,OAAO,EAIL,QAAQ,EAqBT,MAAM,kBAAkB,CAAA;AAqDzB,QAAA,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,CA8mC9C,CAAA;eAEc,YAAY"}
1
+ {"version":3,"file":"move-tool.d.ts","sourceRoot":"","sources":["../../src/door/move-tool.tsx"],"names":[],"mappings":"AAAA,OAAO,EAIL,QAAQ,EAqBT,MAAM,kBAAkB,CAAA;AAqDzB,QAAA,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,CAknC9C,CAAA;eAEc,YAAY"}
@@ -237,8 +237,8 @@ const MoveDoorTool = ({ node: movingDoorNode }) => {
237
237
  const rawLocalX = event.localPosition[0];
238
238
  if (!dragAnchor || dragAnchor.wallId !== event.node.id) {
239
239
  // Grab offset survives only on the original wall and only until the
240
- // door anchors on any other host — after that every wall (the
241
- // original included) centers the door under the cursor.
240
+ // door anchors on any other host — after that every wall (the original
241
+ // included) centers the door under the cursor.
242
242
  const preserveGrab = event.node.id === grabWallId;
243
243
  if (!preserveGrab)
244
244
  grabWallId = null;
@@ -268,16 +268,17 @@ const MoveDoorTool = ({ node: movingDoorNode }) => {
268
268
  // component lives in `snapToHalf` (itself mode-aware).
269
269
  applySnap: isMagneticSnapActive(),
270
270
  });
271
- const { clampedX, clampedY, transomHeight } = clampToWall(event.node, localX +
271
+ const { clampedX, clampedY, fits, transomHeight } = clampToWall(event.node, localX +
272
272
  getDoorOpeningSize(movingDoorNode).leafOffsetX *
273
273
  openingHostFacing({ rotation: [0, itemRotation, 0] }), movingDoorNode.width, movingDoorNode.height, { ...movingDoorNode, rotation: [0, itemRotation, 0] }, useScene.getState().nodes);
274
274
  const fittedSize = getDoorOpeningSize({
275
275
  ...movingDoorNode,
276
276
  transomHeight: transomHeight ?? movingDoorNode.transomHeight,
277
277
  });
278
- const valid = !hasWallChildOverlap(event.node.id, useScene.getState().nodes, clampedX -
279
- getDoorOpeningSize(movingDoorNode).leafOffsetX *
280
- openingHostFacing({ rotation: [0, itemRotation, 0] }), clampedY + (fittedSize.height - movingDoorNode.height) / 2, fittedSize.width, fittedSize.height, movingDoorNode.id);
278
+ const valid = fits &&
279
+ !hasWallChildOverlap(event.node.id, useScene.getState().nodes, clampedX -
280
+ getDoorOpeningSize(movingDoorNode).leafOffsetX *
281
+ openingHostFacing({ rotation: [0, itemRotation, 0] }), clampedY + (fittedSize.height - movingDoorNode.height) / 2, fittedSize.width, fittedSize.height, movingDoorNode.id);
281
282
  return {
282
283
  wallNode: event.node,
283
284
  wallId: event.node.id,
@@ -291,6 +292,9 @@ const MoveDoorTool = ({ node: movingDoorNode }) => {
291
292
  };
292
293
  };
293
294
  const applyPreview = (target) => {
295
+ useLiveNodeOverrides
296
+ .getState()
297
+ .clearFields(movingDoorNode.id, ['position', 'rotation', 'roofFace']);
294
298
  if (target.transomHeight !== undefined)
295
299
  useLiveNodeOverrides
296
300
  .getState()
@@ -585,6 +589,7 @@ const MoveDoorTool = ({ node: movingDoorNode }) => {
585
589
  // later wall-snap / commit has a clean base, but stays `visible:false` until
586
590
  // a wall is hovered.
587
591
  const freeFollowAt = (localX, localZ) => {
592
+ useLiveNodeOverrides.getState().clear(movingDoorNode.id);
588
593
  freeFollowing = true;
589
594
  lastTarget = null;
590
595
  lastRoofEvent = null;
@@ -602,15 +607,7 @@ const MoveDoorTool = ({ node: movingDoorNode }) => {
602
607
  // (back = rotated π) instead of forcing 0, so an R press isn't undone on
603
608
  // the next mousemove.
604
609
  const yaw = sideOverride === 'back' ? Math.PI : 0;
605
- if (currentHostId === levelId) {
606
- updateDraft({
607
- position: [localX, y, localZ],
608
- rotation: [0, yaw, 0],
609
- side: sideOverride,
610
- visible: false,
611
- });
612
- }
613
- else {
610
+ if (currentHostId !== levelId) {
614
611
  if (currentHostId && currentHostId !== levelId)
615
612
  markHostDirty(currentHostId);
616
613
  updateDraft({
@@ -694,14 +691,8 @@ const MoveDoorTool = ({ node: movingDoorNode }) => {
694
691
  // On a roof face the real mesh is the preview — drop the free-follow ghost
695
692
  // and reveal the node.
696
693
  revealRealNode();
697
- if (currentHostId === target.segment.id) {
698
- updateDraft({
699
- position: target.position,
700
- rotation: [0, 0, 0],
701
- roofFace: target.face.id,
702
- });
703
- }
704
- else {
694
+ if (currentHostId !== target.segment.id) {
695
+ useLiveNodeOverrides.getState().clear(movingDoorNode.id);
705
696
  updateDraft({
706
697
  position: target.position,
707
698
  rotation: [0, 0, 0],
@@ -715,6 +706,13 @@ const MoveDoorTool = ({ node: movingDoorNode }) => {
715
706
  markHostDirty(currentHostId);
716
707
  currentHostId = target.segment.id;
717
708
  }
709
+ useLiveNodeOverrides.getState().set(movingDoorNode.id, {
710
+ position: target.position,
711
+ rotation: [0, 0, 0],
712
+ roofFace: target.face.id,
713
+ });
714
+ useScene.getState().markDirty(movingDoorNode.id);
715
+ markHostDirtyThrottled(target.segment.id);
718
716
  updateRoofCursor(target, event.node);
719
717
  event.stopPropagation();
720
718
  };
@@ -790,6 +788,7 @@ const MoveDoorTool = ({ node: movingDoorNode }) => {
790
788
  }
791
789
  placedId = movingDoorNode.id;
792
790
  }
791
+ useLiveNodeOverrides.getState().clear(movingDoorNode.id);
793
792
  markHostDirty(segmentId);
794
793
  useLiveTransforms.getState().clear(movingDoorNode.id);
795
794
  triggerSFX('sfx:structure-build');
@@ -800,6 +799,7 @@ const MoveDoorTool = ({ node: movingDoorNode }) => {
800
799
  event.stopPropagation();
801
800
  };
802
801
  const onRoofLeave = () => {
802
+ useLiveNodeOverrides.getState().clear(movingDoorNode.id);
803
803
  // Mirror onWallLeave: don't revert to origin here — onGridMove takes
804
804
  // over on the same pointermove (snap to a nearby wall or free-follow).
805
805
  hideCursor();
@@ -809,6 +809,7 @@ const MoveDoorTool = ({ node: movingDoorNode }) => {
809
809
  lastRoofEvent = null;
810
810
  };
811
811
  const onCancel = () => {
812
+ useLiveNodeOverrides.getState().clear(movingDoorNode.id);
812
813
  useLiveTransforms.getState().clear(movingDoorNode.id);
813
814
  if (isNew) {
814
815
  useScene.getState().deleteNode(movingDoorNode.id);
@@ -950,6 +951,7 @@ const MoveDoorTool = ({ node: movingDoorNode }) => {
950
951
  }
951
952
  }
952
953
  return () => {
954
+ useLiveNodeOverrides.getState().clear(movingDoorNode.id);
953
955
  const current = useScene.getState().nodes[movingDoorNode.id];
954
956
  const currentMeta = current?.metadata;
955
957
  if (currentMeta?.isTransient) {