@pascal-app/nodes 1.0.0-beta.5 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (831) hide show
  1. package/LICENSE +21 -0
  2. package/dist/block/commands.d.ts +68 -0
  3. package/dist/block/commands.d.ts.map +1 -0
  4. package/dist/block/commands.js +1144 -0
  5. package/dist/block/contextual-help.d.ts +3 -0
  6. package/dist/block/contextual-help.d.ts.map +1 -0
  7. package/dist/block/contextual-help.js +38 -0
  8. package/dist/block/definition.d.ts +8 -0
  9. package/dist/block/definition.d.ts.map +1 -0
  10. package/dist/block/definition.js +126 -0
  11. package/dist/block/edit-session.d.ts +16 -0
  12. package/dist/block/edit-session.d.ts.map +1 -0
  13. package/dist/block/edit-session.js +32 -0
  14. package/dist/block/face-host.d.ts +3 -0
  15. package/dist/block/face-host.d.ts.map +1 -0
  16. package/dist/block/face-host.js +178 -0
  17. package/dist/block/floorplan.d.ts +3 -0
  18. package/dist/block/floorplan.d.ts.map +1 -0
  19. package/dist/block/floorplan.js +43 -0
  20. package/dist/block/geometry-snap.d.ts +18 -0
  21. package/dist/block/geometry-snap.d.ts.map +1 -0
  22. package/dist/block/geometry-snap.js +137 -0
  23. package/dist/block/geometry.d.ts +11 -0
  24. package/dist/block/geometry.d.ts.map +1 -0
  25. package/dist/block/geometry.js +146 -0
  26. package/dist/block/gesture-wheel.d.ts +8 -0
  27. package/dist/block/gesture-wheel.d.ts.map +1 -0
  28. package/dist/block/gesture-wheel.js +7 -0
  29. package/dist/block/interaction-sfx.d.ts +3 -0
  30. package/dist/block/interaction-sfx.d.ts.map +1 -0
  31. package/dist/block/interaction-sfx.js +16 -0
  32. package/dist/block/last-operation.d.ts +48 -0
  33. package/dist/block/last-operation.d.ts.map +1 -0
  34. package/dist/block/last-operation.js +120 -0
  35. package/dist/block/loop-cut-interaction.d.ts +5 -0
  36. package/dist/block/loop-cut-interaction.d.ts.map +1 -0
  37. package/dist/block/loop-cut-interaction.js +13 -0
  38. package/dist/block/material-slots.d.ts +61 -0
  39. package/dist/block/material-slots.d.ts.map +1 -0
  40. package/dist/block/material-slots.js +131 -0
  41. package/dist/block/modal-face-operation.d.ts +13 -0
  42. package/dist/block/modal-face-operation.d.ts.map +1 -0
  43. package/dist/block/modal-face-operation.js +40 -0
  44. package/dist/block/modal-session.d.ts +15 -0
  45. package/dist/block/modal-session.d.ts.map +1 -0
  46. package/dist/block/modal-session.js +40 -0
  47. package/dist/block/modal-transform.d.ts +30 -0
  48. package/dist/block/modal-transform.d.ts.map +1 -0
  49. package/dist/block/modal-transform.js +144 -0
  50. package/dist/block/paint.d.ts +3 -0
  51. package/dist/block/paint.d.ts.map +1 -0
  52. package/dist/block/paint.js +136 -0
  53. package/dist/block/panel.d.ts +2 -0
  54. package/dist/block/panel.d.ts.map +1 -0
  55. package/dist/block/panel.js +234 -0
  56. package/dist/block/parametrics.d.ts +4 -0
  57. package/dist/block/parametrics.d.ts.map +1 -0
  58. package/dist/block/parametrics.js +9 -0
  59. package/dist/block/preview.d.ts +6 -0
  60. package/dist/block/preview.d.ts.map +1 -0
  61. package/dist/block/preview.js +46 -0
  62. package/dist/block/rotation-drag.d.ts +5 -0
  63. package/dist/block/rotation-drag.d.ts.map +1 -0
  64. package/dist/block/rotation-drag.js +18 -0
  65. package/dist/block/schema.d.ts +2 -0
  66. package/dist/block/schema.d.ts.map +1 -0
  67. package/dist/block/schema.js +1 -0
  68. package/dist/block/selection-geometry.d.ts +9 -0
  69. package/dist/block/selection-geometry.d.ts.map +1 -0
  70. package/dist/block/selection-geometry.js +31 -0
  71. package/dist/block/selection-model.d.ts +17 -0
  72. package/dist/block/selection-model.d.ts.map +1 -0
  73. package/dist/block/selection-model.js +84 -0
  74. package/dist/block/selection.d.ts +4 -0
  75. package/dist/block/selection.d.ts.map +1 -0
  76. package/dist/block/selection.js +2570 -0
  77. package/dist/block/slots.d.ts +4 -0
  78. package/dist/block/slots.d.ts.map +1 -0
  79. package/dist/block/slots.js +17 -0
  80. package/dist/block/tool.d.ts +3 -0
  81. package/dist/block/tool.d.ts.map +1 -0
  82. package/dist/block/tool.js +174 -0
  83. package/dist/block/toolbar-state.d.ts +46 -0
  84. package/dist/block/toolbar-state.d.ts.map +1 -0
  85. package/dist/block/toolbar-state.js +67 -0
  86. package/dist/block/use-block-face-operation.d.ts +39 -0
  87. package/dist/block/use-block-face-operation.d.ts.map +1 -0
  88. package/dist/block/use-block-face-operation.js +218 -0
  89. package/dist/box-vent/definition.d.ts.map +1 -1
  90. package/dist/box-vent/definition.js +8 -5
  91. package/dist/box-vent/geometry.d.ts +4 -0
  92. package/dist/box-vent/geometry.d.ts.map +1 -1
  93. package/dist/box-vent/geometry.js +76 -44
  94. package/dist/box-vent/paint.d.ts +4 -0
  95. package/dist/box-vent/paint.d.ts.map +1 -0
  96. package/dist/box-vent/paint.js +40 -0
  97. package/dist/box-vent/panel.js +1 -1
  98. package/dist/box-vent/parametrics.js +3 -3
  99. package/dist/box-vent/renderer.d.ts.map +1 -1
  100. package/dist/box-vent/renderer.js +29 -10
  101. package/dist/cabinet/compartment-card.d.ts.map +1 -1
  102. package/dist/cabinet/compartment-card.js +11 -3
  103. package/dist/cabinet/continuous-placement.d.ts +3 -0
  104. package/dist/cabinet/continuous-placement.d.ts.map +1 -1
  105. package/dist/cabinet/continuous-placement.js +6 -0
  106. package/dist/cabinet/definition.d.ts.map +1 -1
  107. package/dist/cabinet/definition.js +400 -54
  108. package/dist/cabinet/floorplan-move.d.ts.map +1 -1
  109. package/dist/cabinet/floorplan-move.js +91 -22
  110. package/dist/cabinet/geometry/fridge.d.ts.map +1 -1
  111. package/dist/cabinet/geometry/fridge.js +25 -1
  112. package/dist/cabinet/geometry/fronts.d.ts +4 -0
  113. package/dist/cabinet/geometry/fronts.d.ts.map +1 -1
  114. package/dist/cabinet/geometry/fronts.js +1 -1
  115. package/dist/cabinet/geometry/run.d.ts.map +1 -1
  116. package/dist/cabinet/geometry/run.js +19 -1
  117. package/dist/cabinet/geometry.d.ts.map +1 -1
  118. package/dist/cabinet/geometry.js +63 -1
  119. package/dist/cabinet/index.d.ts +1 -0
  120. package/dist/cabinet/index.d.ts.map +1 -1
  121. package/dist/cabinet/index.js +1 -0
  122. package/dist/cabinet/insertion.d.ts +19 -0
  123. package/dist/cabinet/insertion.d.ts.map +1 -0
  124. package/dist/cabinet/insertion.js +49 -0
  125. package/dist/cabinet/move-frame.d.ts.map +1 -1
  126. package/dist/cabinet/move-frame.js +68 -2
  127. package/dist/cabinet/panel-context.d.ts +7 -0
  128. package/dist/cabinet/panel-context.d.ts.map +1 -0
  129. package/dist/cabinet/panel-context.js +16 -0
  130. package/dist/cabinet/panel-visibility.d.ts +9 -0
  131. package/dist/cabinet/panel-visibility.d.ts.map +1 -0
  132. package/dist/cabinet/panel-visibility.js +26 -0
  133. package/dist/cabinet/panel.d.ts.map +1 -1
  134. package/dist/cabinet/panel.js +221 -37
  135. package/dist/cabinet/placement-dimensions.d.ts +42 -0
  136. package/dist/cabinet/placement-dimensions.d.ts.map +1 -0
  137. package/dist/cabinet/placement-dimensions.js +227 -0
  138. package/dist/cabinet/placement-snap.d.ts +21 -1
  139. package/dist/cabinet/placement-snap.d.ts.map +1 -1
  140. package/dist/cabinet/placement-snap.js +48 -6
  141. package/dist/cabinet/preset-width-debt.d.ts +7 -0
  142. package/dist/cabinet/preset-width-debt.d.ts.map +1 -0
  143. package/dist/cabinet/preset-width-debt.js +45 -0
  144. package/dist/cabinet/presets.d.ts.map +1 -1
  145. package/dist/cabinet/presets.js +14 -13
  146. package/dist/cabinet/profiles.d.ts +14 -0
  147. package/dist/cabinet/profiles.d.ts.map +1 -0
  148. package/dist/cabinet/profiles.js +30 -0
  149. package/dist/cabinet/quick-actions.d.ts.map +1 -1
  150. package/dist/cabinet/quick-actions.js +8 -24
  151. package/dist/cabinet/reveals.d.ts +37 -0
  152. package/dist/cabinet/reveals.d.ts.map +1 -0
  153. package/dist/cabinet/reveals.js +13 -0
  154. package/dist/cabinet/run-layout.d.ts +90 -4
  155. package/dist/cabinet/run-layout.d.ts.map +1 -1
  156. package/dist/cabinet/run-layout.js +408 -23
  157. package/dist/cabinet/run-ops.d.ts +202 -10
  158. package/dist/cabinet/run-ops.d.ts.map +1 -1
  159. package/dist/cabinet/run-ops.js +520 -33
  160. package/dist/cabinet/run-panel.d.ts +6 -2
  161. package/dist/cabinet/run-panel.d.ts.map +1 -1
  162. package/dist/cabinet/run-panel.js +285 -108
  163. package/dist/cabinet/stack-transitions.d.ts.map +1 -1
  164. package/dist/cabinet/stack-transitions.js +35 -24
  165. package/dist/cabinet/stack.d.ts +169 -1
  166. package/dist/cabinet/stack.d.ts.map +1 -1
  167. package/dist/cabinet/stack.js +57 -18
  168. package/dist/cabinet/tool.d.ts.map +1 -1
  169. package/dist/cabinet/tool.js +615 -91
  170. package/dist/cabinet/validation.d.ts +27 -0
  171. package/dist/cabinet/validation.d.ts.map +1 -0
  172. package/dist/cabinet/validation.js +56 -0
  173. package/dist/cabinet/wall-height-presets.d.ts +12 -0
  174. package/dist/cabinet/wall-height-presets.d.ts.map +1 -0
  175. package/dist/cabinet/wall-height-presets.js +15 -0
  176. package/dist/cabinet/wall-snap.d.ts +27 -3
  177. package/dist/cabinet/wall-snap.d.ts.map +1 -1
  178. package/dist/cabinet/wall-snap.js +278 -62
  179. package/dist/cabinet/widths.d.ts +10 -0
  180. package/dist/cabinet/widths.d.ts.map +1 -0
  181. package/dist/cabinet/widths.js +13 -0
  182. package/dist/ceiling/definition.d.ts.map +1 -1
  183. package/dist/ceiling/definition.js +7 -1
  184. package/dist/ceiling/floorplan-affordances.d.ts +8 -8
  185. package/dist/ceiling/materials.d.ts.map +1 -1
  186. package/dist/ceiling/materials.js +0 -1
  187. package/dist/ceiling/panel.js +1 -1
  188. package/dist/ceiling/parametrics.js +1 -1
  189. package/dist/chimney/definition.js +1 -1
  190. package/dist/chimney/panel.js +1 -1
  191. package/dist/chimney/parametrics.js +3 -3
  192. package/dist/column/definition.d.ts.map +1 -1
  193. package/dist/column/definition.js +22 -4
  194. package/dist/column/panel.d.ts.map +1 -1
  195. package/dist/column/panel.js +37 -7
  196. package/dist/column/parametrics.d.ts.map +1 -1
  197. package/dist/column/parametrics.js +5 -3
  198. package/dist/column/tool.d.ts.map +1 -1
  199. package/dist/column/tool.js +50 -14
  200. package/dist/cupola/definition.d.ts.map +1 -1
  201. package/dist/cupola/definition.js +15 -6
  202. package/dist/cupola/geometry.d.ts +6 -0
  203. package/dist/cupola/geometry.d.ts.map +1 -1
  204. package/dist/cupola/geometry.js +60 -13
  205. package/dist/cupola/paint.d.ts +4 -0
  206. package/dist/cupola/paint.d.ts.map +1 -0
  207. package/dist/cupola/paint.js +39 -0
  208. package/dist/cupola/panel.js +1 -1
  209. package/dist/cupola/parametrics.js +3 -3
  210. package/dist/cupola/renderer.d.ts.map +1 -1
  211. package/dist/cupola/renderer.js +27 -8
  212. package/dist/door/floorplan-move.d.ts.map +1 -1
  213. package/dist/door/floorplan-move.js +1 -1
  214. package/dist/door/move-tool.d.ts.map +1 -1
  215. package/dist/door/move-tool.js +86 -32
  216. package/dist/door/panel.d.ts.map +1 -1
  217. package/dist/door/panel.js +1 -1
  218. package/dist/door/parametrics.js +2 -2
  219. package/dist/door/tool.d.ts.map +1 -1
  220. package/dist/door/tool.js +16 -4
  221. package/dist/dormer/csg-geometry.d.ts +6 -42
  222. package/dist/dormer/csg-geometry.d.ts.map +1 -1
  223. package/dist/dormer/csg-geometry.js +38 -209
  224. package/dist/dormer/definition.d.ts +4 -12
  225. package/dist/dormer/definition.d.ts.map +1 -1
  226. package/dist/dormer/definition.js +18 -193
  227. package/dist/dormer/floorplan.d.ts +3 -3
  228. package/dist/dormer/floorplan.d.ts.map +1 -1
  229. package/dist/dormer/floorplan.js +6 -17
  230. package/dist/dormer/geometry.d.ts +5 -24
  231. package/dist/dormer/geometry.d.ts.map +1 -1
  232. package/dist/dormer/geometry.js +64 -41
  233. package/dist/dormer/index.d.ts +1 -1
  234. package/dist/dormer/index.d.ts.map +1 -1
  235. package/dist/dormer/index.js +1 -1
  236. package/dist/dormer/move-tool.d.ts.map +1 -1
  237. package/dist/dormer/move-tool.js +31 -3
  238. package/dist/dormer/panel-windows-section.d.ts +9 -0
  239. package/dist/dormer/panel-windows-section.d.ts.map +1 -0
  240. package/dist/dormer/panel-windows-section.js +7 -0
  241. package/dist/dormer/panel.d.ts.map +1 -1
  242. package/dist/dormer/panel.js +100 -18
  243. package/dist/dormer/parametrics.d.ts.map +1 -1
  244. package/dist/dormer/parametrics.js +8 -77
  245. package/dist/dormer/preview.d.ts.map +1 -1
  246. package/dist/dormer/preview.js +9 -1
  247. package/dist/dormer/renderer.d.ts.map +1 -1
  248. package/dist/dormer/renderer.js +24 -26
  249. package/dist/dormer/tool.d.ts.map +1 -1
  250. package/dist/dormer/tool.js +3 -1
  251. package/dist/dormer/window-layout.d.ts +15 -0
  252. package/dist/dormer/window-layout.d.ts.map +1 -0
  253. package/dist/dormer/window-layout.js +59 -0
  254. package/dist/downspout/definition.d.ts.map +1 -1
  255. package/dist/downspout/definition.js +17 -4
  256. package/dist/downspout/geometry.d.ts.map +1 -1
  257. package/dist/downspout/geometry.js +10 -0
  258. package/dist/downspout/inspector-editors.d.ts.map +1 -1
  259. package/dist/downspout/inspector-editors.js +9 -1
  260. package/dist/downspout/parametrics.d.ts.map +1 -1
  261. package/dist/downspout/parametrics.js +2 -1
  262. package/dist/downspout/renderer.d.ts.map +1 -1
  263. package/dist/downspout/renderer.js +19 -3
  264. package/dist/downspout/system.d.ts +7 -0
  265. package/dist/downspout/system.d.ts.map +1 -0
  266. package/dist/downspout/system.js +114 -0
  267. package/dist/duct-fitting/accessory-geometry.d.ts +4 -0
  268. package/dist/duct-fitting/accessory-geometry.d.ts.map +1 -0
  269. package/dist/duct-fitting/accessory-geometry.js +47 -0
  270. package/dist/duct-fitting/definition.d.ts.map +1 -1
  271. package/dist/duct-fitting/definition.js +11 -1
  272. package/dist/duct-fitting/floorplan.d.ts.map +1 -1
  273. package/dist/duct-fitting/floorplan.js +8 -0
  274. package/dist/duct-fitting/geometry.d.ts.map +1 -1
  275. package/dist/duct-fitting/geometry.js +52 -38
  276. package/dist/duct-fitting/parametrics.d.ts.map +1 -1
  277. package/dist/duct-fitting/parametrics.js +78 -15
  278. package/dist/duct-fitting/ports.d.ts +1 -0
  279. package/dist/duct-fitting/ports.d.ts.map +1 -1
  280. package/dist/duct-fitting/ports.js +46 -0
  281. package/dist/duct-fitting/tool.d.ts +19 -0
  282. package/dist/duct-fitting/tool.d.ts.map +1 -1
  283. package/dist/duct-fitting/tool.js +126 -34
  284. package/dist/duct-segment/continuation.d.ts +21 -0
  285. package/dist/duct-segment/continuation.d.ts.map +1 -0
  286. package/dist/duct-segment/continuation.js +167 -0
  287. package/dist/duct-segment/definition.d.ts.map +1 -1
  288. package/dist/duct-segment/definition.js +19 -18
  289. package/dist/duct-segment/floorplan.d.ts.map +1 -1
  290. package/dist/duct-segment/floorplan.js +43 -0
  291. package/dist/duct-segment/geometry.d.ts.map +1 -1
  292. package/dist/duct-segment/geometry.js +3 -0
  293. package/dist/duct-segment/move-tool.d.ts.map +1 -1
  294. package/dist/duct-segment/move-tool.js +33 -6
  295. package/dist/duct-segment/parametrics.d.ts.map +1 -1
  296. package/dist/duct-segment/parametrics.js +45 -1
  297. package/dist/duct-segment/selection.d.ts +3 -4
  298. package/dist/duct-segment/selection.d.ts.map +1 -1
  299. package/dist/duct-segment/selection.js +186 -158
  300. package/dist/duct-segment/tool.d.ts +37 -0
  301. package/dist/duct-segment/tool.d.ts.map +1 -1
  302. package/dist/duct-segment/tool.js +305 -678
  303. package/dist/duct-terminal/parametrics.js +2 -2
  304. package/dist/duct-terminal/tool.d.ts.map +1 -1
  305. package/dist/duct-terminal/tool.js +37 -7
  306. package/dist/elevator/panel.d.ts.map +1 -1
  307. package/dist/elevator/panel.js +7 -7
  308. package/dist/elevator/system.d.ts.map +1 -1
  309. package/dist/elevator/system.js +10 -1
  310. package/dist/eyebrow-vent/definition.d.ts.map +1 -1
  311. package/dist/eyebrow-vent/definition.js +8 -5
  312. package/dist/eyebrow-vent/geometry.d.ts +4 -0
  313. package/dist/eyebrow-vent/geometry.d.ts.map +1 -1
  314. package/dist/eyebrow-vent/geometry.js +60 -15
  315. package/dist/eyebrow-vent/paint.d.ts +4 -0
  316. package/dist/eyebrow-vent/paint.d.ts.map +1 -0
  317. package/dist/eyebrow-vent/paint.js +33 -0
  318. package/dist/eyebrow-vent/panel.js +1 -1
  319. package/dist/eyebrow-vent/parametrics.js +3 -3
  320. package/dist/eyebrow-vent/renderer.d.ts.map +1 -1
  321. package/dist/eyebrow-vent/renderer.js +27 -8
  322. package/dist/fence/definition.d.ts.map +1 -1
  323. package/dist/fence/definition.js +2 -1
  324. package/dist/fence/floorplan-affordances.d.ts +1 -0
  325. package/dist/fence/floorplan-affordances.d.ts.map +1 -1
  326. package/dist/fence/floorplan-affordances.js +30 -1
  327. package/dist/fence/floorplan.d.ts.map +1 -1
  328. package/dist/fence/floorplan.js +14 -0
  329. package/dist/fence/parametrics.js +3 -3
  330. package/dist/fence/tool.d.ts.map +1 -1
  331. package/dist/fence/tool.js +47 -20
  332. package/dist/gutter/corner-mitre.d.ts.map +1 -1
  333. package/dist/gutter/corner-mitre.js +47 -7
  334. package/dist/gutter/definition.d.ts.map +1 -1
  335. package/dist/gutter/definition.js +23 -13
  336. package/dist/gutter/eave-align.d.ts.map +1 -1
  337. package/dist/gutter/eave-align.js +10 -0
  338. package/dist/gutter/eave-snap.d.ts +1 -1
  339. package/dist/gutter/eave-snap.d.ts.map +1 -1
  340. package/dist/gutter/eave-snap.js +10 -23
  341. package/dist/gutter/geometry.d.ts.map +1 -1
  342. package/dist/gutter/geometry.js +126 -8
  343. package/dist/gutter/outlet-lookup.d.ts.map +1 -1
  344. package/dist/gutter/outlet-lookup.js +22 -1
  345. package/dist/gutter/paint.d.ts +3 -0
  346. package/dist/gutter/paint.d.ts.map +1 -0
  347. package/dist/gutter/paint.js +6 -0
  348. package/dist/gutter/parametrics.d.ts.map +1 -1
  349. package/dist/gutter/parametrics.js +4 -1
  350. package/dist/gutter/renderer.d.ts.map +1 -1
  351. package/dist/gutter/renderer.js +63 -7
  352. package/dist/gutter/trim-clip.d.ts +3 -0
  353. package/dist/gutter/trim-clip.d.ts.map +1 -0
  354. package/dist/gutter/trim-clip.js +5 -0
  355. package/dist/hvac-equipment/parametrics.js +3 -3
  356. package/dist/hvac-equipment/tool.d.ts.map +1 -1
  357. package/dist/hvac-equipment/tool.js +12 -2
  358. package/dist/index.d.ts +5 -2
  359. package/dist/index.d.ts.map +1 -1
  360. package/dist/index.js +9 -2
  361. package/dist/item/definition.d.ts.map +1 -1
  362. package/dist/item/definition.js +10 -2
  363. package/dist/item/floorplan-move.d.ts.map +1 -1
  364. package/dist/item/floorplan-move.js +20 -1
  365. package/dist/item/floorplan.d.ts.map +1 -1
  366. package/dist/item/floorplan.js +22 -1
  367. package/dist/item/move-tool.d.ts +28 -1
  368. package/dist/item/move-tool.d.ts.map +1 -1
  369. package/dist/item/move-tool.js +14 -2
  370. package/dist/item/renderer.d.ts.map +1 -1
  371. package/dist/item/renderer.js +16 -6
  372. package/dist/item/system.d.ts +5 -0
  373. package/dist/item/system.d.ts.map +1 -1
  374. package/dist/item/system.js +7 -1
  375. package/dist/lean-to-extension/arc.d.ts +14 -0
  376. package/dist/lean-to-extension/arc.d.ts.map +1 -0
  377. package/dist/lean-to-extension/arc.js +56 -0
  378. package/dist/lean-to-extension/assembly.d.ts +61 -0
  379. package/dist/lean-to-extension/assembly.d.ts.map +1 -0
  380. package/dist/lean-to-extension/assembly.js +761 -0
  381. package/dist/lean-to-extension/canopy-joint.d.ts +35 -0
  382. package/dist/lean-to-extension/canopy-joint.d.ts.map +1 -0
  383. package/dist/lean-to-extension/canopy-joint.js +234 -0
  384. package/dist/lean-to-extension/conical-host.d.ts +15 -0
  385. package/dist/lean-to-extension/conical-host.d.ts.map +1 -0
  386. package/dist/lean-to-extension/conical-host.js +113 -0
  387. package/dist/lean-to-extension/corner-joint.d.ts +29 -0
  388. package/dist/lean-to-extension/corner-joint.d.ts.map +1 -0
  389. package/dist/lean-to-extension/corner-joint.js +1202 -0
  390. package/dist/lean-to-extension/definition.d.ts +4 -0
  391. package/dist/lean-to-extension/definition.d.ts.map +1 -0
  392. package/dist/lean-to-extension/definition.js +433 -0
  393. package/dist/lean-to-extension/floorplan-affordances.d.ts +4 -0
  394. package/dist/lean-to-extension/floorplan-affordances.d.ts.map +1 -0
  395. package/dist/lean-to-extension/floorplan-affordances.js +144 -0
  396. package/dist/lean-to-extension/floorplan-move.d.ts +3 -0
  397. package/dist/lean-to-extension/floorplan-move.d.ts.map +1 -0
  398. package/dist/lean-to-extension/floorplan-move.js +157 -0
  399. package/dist/lean-to-extension/floorplan-tool.d.ts +4 -0
  400. package/dist/lean-to-extension/floorplan-tool.d.ts.map +1 -0
  401. package/dist/lean-to-extension/floorplan-tool.js +385 -0
  402. package/dist/lean-to-extension/floorplan.d.ts +3 -0
  403. package/dist/lean-to-extension/floorplan.d.ts.map +1 -0
  404. package/dist/lean-to-extension/floorplan.js +373 -0
  405. package/dist/lean-to-extension/geometry.d.ts +7 -0
  406. package/dist/lean-to-extension/geometry.d.ts.map +1 -0
  407. package/dist/lean-to-extension/geometry.js +662 -0
  408. package/dist/lean-to-extension/index.d.ts +8 -0
  409. package/dist/lean-to-extension/index.d.ts.map +1 -0
  410. package/dist/lean-to-extension/index.js +7 -0
  411. package/dist/lean-to-extension/layout.d.ts +108 -0
  412. package/dist/lean-to-extension/layout.d.ts.map +1 -0
  413. package/dist/lean-to-extension/layout.js +477 -0
  414. package/dist/lean-to-extension/managed-preview.d.ts +3 -0
  415. package/dist/lean-to-extension/managed-preview.d.ts.map +1 -0
  416. package/dist/lean-to-extension/managed-preview.js +93 -0
  417. package/dist/lean-to-extension/move-tool.d.ts +8 -0
  418. package/dist/lean-to-extension/move-tool.d.ts.map +1 -0
  419. package/dist/lean-to-extension/move-tool.js +202 -0
  420. package/dist/lean-to-extension/paint.d.ts +2 -0
  421. package/dist/lean-to-extension/paint.d.ts.map +1 -0
  422. package/dist/lean-to-extension/paint.js +16 -0
  423. package/dist/lean-to-extension/parametrics.d.ts +4 -0
  424. package/dist/lean-to-extension/parametrics.d.ts.map +1 -0
  425. package/dist/lean-to-extension/parametrics.js +570 -0
  426. package/dist/lean-to-extension/placement-scope.d.ts +3 -0
  427. package/dist/lean-to-extension/placement-scope.d.ts.map +1 -0
  428. package/dist/lean-to-extension/placement-scope.js +4 -0
  429. package/dist/lean-to-extension/placement-validation.d.ts +4 -0
  430. package/dist/lean-to-extension/placement-validation.d.ts.map +1 -0
  431. package/dist/lean-to-extension/placement-validation.js +324 -0
  432. package/dist/lean-to-extension/placement.d.ts +59 -0
  433. package/dist/lean-to-extension/placement.d.ts.map +1 -0
  434. package/dist/lean-to-extension/placement.js +331 -0
  435. package/dist/lean-to-extension/plan-footprint.d.ts +10 -0
  436. package/dist/lean-to-extension/plan-footprint.d.ts.map +1 -0
  437. package/dist/lean-to-extension/plan-footprint.js +27 -0
  438. package/dist/lean-to-extension/preview-geometry.d.ts +7 -0
  439. package/dist/lean-to-extension/preview-geometry.d.ts.map +1 -0
  440. package/dist/lean-to-extension/preview-geometry.js +40 -0
  441. package/dist/lean-to-extension/preview.d.ts +7 -0
  442. package/dist/lean-to-extension/preview.d.ts.map +1 -0
  443. package/dist/lean-to-extension/preview.js +20 -0
  444. package/dist/lean-to-extension/renderer.d.ts +6 -0
  445. package/dist/lean-to-extension/renderer.d.ts.map +1 -0
  446. package/dist/lean-to-extension/renderer.js +34 -0
  447. package/dist/lean-to-extension/roof-attachment.d.ts +28 -0
  448. package/dist/lean-to-extension/roof-attachment.d.ts.map +1 -0
  449. package/dist/lean-to-extension/roof-attachment.js +376 -0
  450. package/dist/lean-to-extension/schema.d.ts +2 -0
  451. package/dist/lean-to-extension/schema.d.ts.map +1 -0
  452. package/dist/lean-to-extension/schema.js +1 -0
  453. package/dist/lean-to-extension/slots.d.ts +5 -0
  454. package/dist/lean-to-extension/slots.d.ts.map +1 -0
  455. package/dist/lean-to-extension/slots.js +15 -0
  456. package/dist/lean-to-extension/system.d.ts +7 -0
  457. package/dist/lean-to-extension/system.d.ts.map +1 -0
  458. package/dist/lean-to-extension/system.js +726 -0
  459. package/dist/lean-to-extension/tool.d.ts +3 -0
  460. package/dist/lean-to-extension/tool.d.ts.map +1 -0
  461. package/dist/lean-to-extension/tool.js +580 -0
  462. package/dist/lean-to-extension/wall-target.d.ts +10 -0
  463. package/dist/lean-to-extension/wall-target.d.ts.map +1 -0
  464. package/dist/lean-to-extension/wall-target.js +29 -0
  465. package/dist/lineset/definition.d.ts.map +1 -1
  466. package/dist/lineset/definition.js +1 -0
  467. package/dist/liquid-line/definition.d.ts.map +1 -1
  468. package/dist/liquid-line/definition.js +1 -0
  469. package/dist/pipe-fitting/definition.d.ts.map +1 -1
  470. package/dist/pipe-fitting/definition.js +16 -2
  471. package/dist/pipe-fitting/floorplan.d.ts.map +1 -1
  472. package/dist/pipe-fitting/floorplan.js +4 -0
  473. package/dist/pipe-fitting/geometry.d.ts +3 -5
  474. package/dist/pipe-fitting/geometry.d.ts.map +1 -1
  475. package/dist/pipe-fitting/geometry.js +154 -21
  476. package/dist/pipe-fitting/inline-insertion.d.ts +13 -0
  477. package/dist/pipe-fitting/inline-insertion.d.ts.map +1 -0
  478. package/dist/pipe-fitting/inline-insertion.js +96 -0
  479. package/dist/pipe-fitting/parametrics.d.ts.map +1 -1
  480. package/dist/pipe-fitting/parametrics.js +17 -3
  481. package/dist/pipe-fitting/ports.d.ts.map +1 -1
  482. package/dist/pipe-fitting/ports.js +8 -1
  483. package/dist/pipe-fitting/tool.d.ts +26 -0
  484. package/dist/pipe-fitting/tool.d.ts.map +1 -1
  485. package/dist/pipe-fitting/tool.js +182 -37
  486. package/dist/pipe-segment/continuation.d.ts +22 -0
  487. package/dist/pipe-segment/continuation.d.ts.map +1 -0
  488. package/dist/pipe-segment/continuation.js +146 -0
  489. package/dist/pipe-segment/definition.d.ts.map +1 -1
  490. package/dist/pipe-segment/definition.js +23 -7
  491. package/dist/pipe-segment/floorplan.d.ts.map +1 -1
  492. package/dist/pipe-segment/floorplan.js +42 -0
  493. package/dist/pipe-segment/geometry.d.ts +2 -1
  494. package/dist/pipe-segment/geometry.d.ts.map +1 -1
  495. package/dist/pipe-segment/geometry.js +4 -1
  496. package/dist/pipe-segment/move-tool.d.ts.map +1 -1
  497. package/dist/pipe-segment/move-tool.js +25 -5
  498. package/dist/pipe-segment/parametrics.d.ts.map +1 -1
  499. package/dist/pipe-segment/parametrics.js +45 -0
  500. package/dist/pipe-segment/selection.d.ts +3 -4
  501. package/dist/pipe-segment/selection.d.ts.map +1 -1
  502. package/dist/pipe-segment/selection.js +169 -105
  503. package/dist/pipe-segment/slope.d.ts +5 -0
  504. package/dist/pipe-segment/slope.d.ts.map +1 -0
  505. package/dist/pipe-segment/slope.js +10 -0
  506. package/dist/pipe-segment/tool.d.ts.map +1 -1
  507. package/dist/pipe-segment/tool.js +325 -545
  508. package/dist/pipe-trap/tool.d.ts.map +1 -1
  509. package/dist/pipe-trap/tool.js +15 -2
  510. package/dist/ridge-vent/definition.js +1 -1
  511. package/dist/ridge-vent/panel.d.ts.map +1 -1
  512. package/dist/ridge-vent/panel.js +2 -2
  513. package/dist/ridge-vent/parametrics.js +1 -1
  514. package/dist/roof/conical-roof-placement.d.ts +36 -0
  515. package/dist/roof/conical-roof-placement.d.ts.map +1 -0
  516. package/dist/roof/conical-roof-placement.js +134 -0
  517. package/dist/roof/conical-roof.d.ts +3 -0
  518. package/dist/roof/conical-roof.d.ts.map +1 -0
  519. package/dist/roof/conical-roof.js +53 -0
  520. package/dist/roof/definition.d.ts +3 -10
  521. package/dist/roof/definition.d.ts.map +1 -1
  522. package/dist/roof/definition.js +83 -13
  523. package/dist/roof/floorplan.d.ts +3 -10
  524. package/dist/roof/floorplan.d.ts.map +1 -1
  525. package/dist/roof/floorplan.js +139 -165
  526. package/dist/roof/index.d.ts +1 -0
  527. package/dist/roof/index.d.ts.map +1 -1
  528. package/dist/roof/index.js +1 -0
  529. package/dist/roof/panel.d.ts.map +1 -1
  530. package/dist/roof/panel.js +22 -23
  531. package/dist/roof/renderer.d.ts.map +1 -1
  532. package/dist/roof/roof-footprint-source.d.ts +16 -0
  533. package/dist/roof/roof-footprint-source.d.ts.map +1 -0
  534. package/dist/roof/roof-footprint-source.js +14 -0
  535. package/dist/roof/roof-footprint.d.ts +25 -0
  536. package/dist/roof/roof-footprint.d.ts.map +1 -0
  537. package/dist/roof/roof-footprint.js +94 -0
  538. package/dist/roof/roof-placement-mode.d.ts +18 -0
  539. package/dist/roof/roof-placement-mode.d.ts.map +1 -0
  540. package/dist/roof/roof-placement-mode.js +24 -0
  541. package/dist/roof/tool.d.ts +10 -0
  542. package/dist/roof/tool.d.ts.map +1 -0
  543. package/dist/roof/tool.js +922 -0
  544. package/dist/roof-segment/definition.d.ts.map +1 -1
  545. package/dist/roof-segment/definition.js +52 -8
  546. package/dist/roof-segment/floorplan-affordances.d.ts +5 -6
  547. package/dist/roof-segment/floorplan-affordances.d.ts.map +1 -1
  548. package/dist/roof-segment/floorplan-affordances.js +64 -18
  549. package/dist/roof-segment/floorplan.d.ts +3 -2
  550. package/dist/roof-segment/floorplan.d.ts.map +1 -1
  551. package/dist/roof-segment/floorplan.js +95 -46
  552. package/dist/roof-segment/panel.d.ts.map +1 -1
  553. package/dist/roof-segment/panel.js +122 -27
  554. package/dist/scan/definition.d.ts +2 -3
  555. package/dist/scan/definition.d.ts.map +1 -1
  556. package/dist/scan/definition.js +9 -7
  557. package/dist/scan/parametrics.d.ts.map +1 -1
  558. package/dist/scan/parametrics.js +13 -1
  559. package/dist/scan/renderer.d.ts.map +1 -1
  560. package/dist/scan/renderer.js +8 -2
  561. package/dist/shared/accessory-cursor.d.ts +7 -0
  562. package/dist/shared/accessory-cursor.d.ts.map +1 -0
  563. package/dist/shared/accessory-cursor.js +83 -0
  564. package/dist/shared/accessory-floorplan.d.ts +4 -0
  565. package/dist/shared/accessory-floorplan.d.ts.map +1 -0
  566. package/dist/shared/accessory-floorplan.js +51 -0
  567. package/dist/shared/accessory-geometry.d.ts +7 -0
  568. package/dist/shared/accessory-geometry.d.ts.map +1 -0
  569. package/dist/shared/accessory-geometry.js +79 -0
  570. package/dist/shared/accessory-placement.d.ts +10 -0
  571. package/dist/shared/accessory-placement.d.ts.map +1 -0
  572. package/dist/shared/accessory-placement.js +126 -0
  573. package/dist/shared/accessory-snapping.d.ts +5 -0
  574. package/dist/shared/accessory-snapping.d.ts.map +1 -0
  575. package/dist/shared/accessory-snapping.js +40 -0
  576. package/dist/shared/automatic-run-end-cap.d.ts +11 -0
  577. package/dist/shared/automatic-run-end-cap.d.ts.map +1 -0
  578. package/dist/shared/automatic-run-end-cap.js +159 -0
  579. package/dist/shared/block-face-host.d.ts +15 -0
  580. package/dist/shared/block-face-host.d.ts.map +1 -0
  581. package/dist/shared/block-face-host.js +36 -0
  582. package/dist/shared/connection-compatibility.d.ts +8 -0
  583. package/dist/shared/connection-compatibility.d.ts.map +1 -0
  584. package/dist/shared/connection-compatibility.js +28 -0
  585. package/dist/shared/connection-feedback.d.ts +10 -0
  586. package/dist/shared/connection-feedback.d.ts.map +1 -0
  587. package/dist/shared/connection-feedback.js +17 -0
  588. package/dist/shared/distribution-run-contract.d.ts +49 -0
  589. package/dist/shared/distribution-run-contract.d.ts.map +1 -0
  590. package/dist/shared/distribution-run-contract.js +30 -0
  591. package/dist/shared/distribution-run-tool.d.ts +107 -0
  592. package/dist/shared/distribution-run-tool.d.ts.map +1 -0
  593. package/dist/shared/distribution-run-tool.js +941 -0
  594. package/dist/shared/dormer-wall-opening-placement.d.ts +21 -0
  595. package/dist/shared/dormer-wall-opening-placement.d.ts.map +1 -0
  596. package/dist/shared/dormer-wall-opening-placement.js +101 -0
  597. package/dist/shared/duct-adapter.d.ts +10 -0
  598. package/dist/shared/duct-adapter.d.ts.map +1 -0
  599. package/dist/shared/duct-adapter.js +43 -0
  600. package/dist/shared/elbow-branch-continuation.d.ts +20 -0
  601. package/dist/shared/elbow-branch-continuation.d.ts.map +1 -0
  602. package/dist/shared/elbow-branch-continuation.js +200 -0
  603. package/dist/shared/fitting-clearance.d.ts +5 -0
  604. package/dist/shared/fitting-clearance.d.ts.map +1 -0
  605. package/dist/shared/fitting-clearance.js +11 -0
  606. package/dist/shared/fitting-deletion-cleanup.d.ts +14 -0
  607. package/dist/shared/fitting-deletion-cleanup.d.ts.map +1 -0
  608. package/dist/shared/fitting-deletion-cleanup.js +297 -0
  609. package/dist/shared/fitting-surface-support.d.ts +5 -0
  610. package/dist/shared/fitting-surface-support.d.ts.map +1 -0
  611. package/dist/shared/fitting-surface-support.js +42 -0
  612. package/dist/shared/fitting-tool-options.d.ts +4 -0
  613. package/dist/shared/fitting-tool-options.d.ts.map +1 -0
  614. package/dist/shared/fitting-tool-options.js +175 -0
  615. package/dist/shared/floor-placement.d.ts +1 -1
  616. package/dist/shared/floor-placement.d.ts.map +1 -1
  617. package/dist/shared/floor-placement.js +13 -33
  618. package/dist/shared/ghost-materials.d.ts.map +1 -1
  619. package/dist/shared/ghost-materials.js +2 -1
  620. package/dist/shared/lean-to-post-omissions.d.ts +8 -0
  621. package/dist/shared/lean-to-post-omissions.d.ts.map +1 -0
  622. package/dist/shared/lean-to-post-omissions.js +51 -0
  623. package/dist/shared/mep-fitting-actions.d.ts +5 -0
  624. package/dist/shared/mep-fitting-actions.d.ts.map +1 -0
  625. package/dist/shared/mep-fitting-actions.js +16 -0
  626. package/dist/shared/mep-presets.d.ts +11 -0
  627. package/dist/shared/mep-presets.d.ts.map +1 -0
  628. package/dist/shared/mep-presets.js +34 -0
  629. package/dist/shared/node-batch/candidates.d.ts +29 -0
  630. package/dist/shared/node-batch/candidates.d.ts.map +1 -0
  631. package/dist/shared/node-batch/candidates.js +260 -0
  632. package/dist/shared/node-batch/store.d.ts +26 -0
  633. package/dist/shared/node-batch/store.d.ts.map +1 -0
  634. package/dist/shared/node-batch/store.js +319 -0
  635. package/dist/shared/node-batch/system.d.ts +8 -0
  636. package/dist/shared/node-batch/system.d.ts.map +1 -0
  637. package/dist/shared/node-batch/system.js +569 -0
  638. package/dist/shared/node-batch/types.d.ts +99 -0
  639. package/dist/shared/node-batch/types.d.ts.map +1 -0
  640. package/dist/shared/node-batch/types.js +4 -0
  641. package/dist/shared/opening-move-history.d.ts +47 -0
  642. package/dist/shared/opening-move-history.d.ts.map +1 -0
  643. package/dist/shared/opening-move-history.js +18 -0
  644. package/dist/shared/opening-move-wall-gate.d.ts +55 -0
  645. package/dist/shared/opening-move-wall-gate.d.ts.map +1 -0
  646. package/dist/shared/opening-move-wall-gate.js +44 -0
  647. package/dist/shared/path-point-affordance.d.ts +2 -2
  648. package/dist/shared/path-point-affordance.d.ts.map +1 -1
  649. package/dist/shared/path-point-affordance.js +30 -6
  650. package/dist/shared/placeholder-geometry.d.ts.map +1 -1
  651. package/dist/shared/placeholder-geometry.js +4 -0
  652. package/dist/shared/ports.d.ts +20 -3
  653. package/dist/shared/ports.d.ts.map +1 -1
  654. package/dist/shared/ports.js +148 -7
  655. package/dist/shared/primitive-uv.d.ts +17 -0
  656. package/dist/shared/primitive-uv.d.ts.map +1 -0
  657. package/dist/shared/primitive-uv.js +107 -0
  658. package/dist/shared/reducer-size.d.ts +2 -0
  659. package/dist/shared/reducer-size.d.ts.map +1 -0
  660. package/dist/shared/reducer-size.js +12 -0
  661. package/dist/shared/ridge-snap.js +1 -1
  662. package/dist/shared/roof-surface.d.ts.map +1 -1
  663. package/dist/shared/roof-surface.js +17 -2
  664. package/dist/shared/run-cursor.d.ts +22 -0
  665. package/dist/shared/run-cursor.d.ts.map +1 -0
  666. package/dist/shared/run-cursor.js +19 -0
  667. package/dist/shared/run-direction-feedback.d.ts +20 -0
  668. package/dist/shared/run-direction-feedback.d.ts.map +1 -0
  669. package/dist/shared/run-direction-feedback.js +139 -0
  670. package/dist/shared/run-hanger-controls.d.ts +7 -0
  671. package/dist/shared/run-hanger-controls.d.ts.map +1 -0
  672. package/dist/shared/run-hanger-controls.js +44 -0
  673. package/dist/shared/run-hanger-inspector.d.ts +5 -0
  674. package/dist/shared/run-hanger-inspector.d.ts.map +1 -0
  675. package/dist/shared/run-hanger-inspector.js +43 -0
  676. package/dist/shared/run-hanger-mode.d.ts +11 -0
  677. package/dist/shared/run-hanger-mode.d.ts.map +1 -0
  678. package/dist/shared/run-hanger-mode.js +32 -0
  679. package/dist/shared/run-hanger-system.d.ts +3 -0
  680. package/dist/shared/run-hanger-system.d.ts.map +1 -0
  681. package/dist/shared/run-hanger-system.js +39 -0
  682. package/dist/shared/run-hangers.d.ts +25 -0
  683. package/dist/shared/run-hangers.d.ts.map +1 -0
  684. package/dist/shared/run-hangers.js +261 -0
  685. package/dist/shared/run-port-snap.d.ts +11 -0
  686. package/dist/shared/run-port-snap.d.ts.map +1 -0
  687. package/dist/shared/run-port-snap.js +19 -0
  688. package/dist/shared/run-screen-direction.d.ts +5 -0
  689. package/dist/shared/run-screen-direction.d.ts.map +1 -0
  690. package/dist/shared/run-screen-direction.js +24 -0
  691. package/dist/shared/selection-handles.d.ts +4 -0
  692. package/dist/shared/selection-handles.d.ts.map +1 -1
  693. package/dist/shared/selection-handles.js +10 -0
  694. package/dist/shared/slot-paint.d.ts +8 -1
  695. package/dist/shared/slot-paint.d.ts.map +1 -1
  696. package/dist/shared/slot-paint.js +120 -27
  697. package/dist/shared/surface-paint.d.ts +1 -2
  698. package/dist/shared/surface-paint.d.ts.map +1 -1
  699. package/dist/shared/surface-paint.js +9 -20
  700. package/dist/shared/system-check-panel.d.ts +6 -0
  701. package/dist/shared/system-check-panel.d.ts.map +1 -0
  702. package/dist/shared/system-check-panel.js +62 -0
  703. package/dist/shared/system-checks.d.ts +9 -0
  704. package/dist/shared/system-checks.d.ts.map +1 -0
  705. package/dist/shared/system-checks.js +131 -0
  706. package/dist/shared/wall-attach-target.d.ts +14 -2
  707. package/dist/shared/wall-attach-target.d.ts.map +1 -1
  708. package/dist/shared/wall-attach-target.js +108 -4
  709. package/dist/shared/wall-opening-clearance.d.ts +19 -0
  710. package/dist/shared/wall-opening-clearance.d.ts.map +1 -0
  711. package/dist/shared/wall-opening-clearance.js +28 -0
  712. package/dist/shared/wall-run-move.d.ts +17 -0
  713. package/dist/shared/wall-run-move.d.ts.map +1 -0
  714. package/dist/shared/wall-run-move.js +56 -0
  715. package/dist/shelf/parametrics.js +4 -4
  716. package/dist/site/renderer.d.ts.map +1 -1
  717. package/dist/site/renderer.js +40 -28
  718. package/dist/site/terrain-geometry.d.ts +1 -1
  719. package/dist/site/terrain-geometry.d.ts.map +1 -1
  720. package/dist/site/terrain-geometry.js +35 -9
  721. package/dist/site/terrain-mesh.d.ts +5 -0
  722. package/dist/site/terrain-mesh.d.ts.map +1 -1
  723. package/dist/site/terrain-mesh.js +63 -34
  724. package/dist/skylight/definition.js +1 -1
  725. package/dist/skylight/panel.js +1 -1
  726. package/dist/skylight/parametrics.js +2 -2
  727. package/dist/slab/definition.d.ts.map +1 -1
  728. package/dist/slab/definition.js +6 -1
  729. package/dist/slab/dependency-tracker.d.ts +3 -0
  730. package/dist/slab/dependency-tracker.d.ts.map +1 -0
  731. package/dist/slab/dependency-tracker.js +104 -0
  732. package/dist/slab/floorplan-affordances.d.ts +8 -8
  733. package/dist/slab/geometry.d.ts.map +1 -1
  734. package/dist/slab/geometry.js +16 -2
  735. package/dist/slab/panel.js +1 -1
  736. package/dist/slab/parametrics.js +1 -1
  737. package/dist/slab/system.d.ts.map +1 -1
  738. package/dist/slab/system.js +8 -64
  739. package/dist/solar-panel/definition.js +1 -1
  740. package/dist/solar-panel/panel.js +1 -1
  741. package/dist/solar-panel/parametrics.js +2 -2
  742. package/dist/stair/panel.d.ts.map +1 -1
  743. package/dist/stair/panel.js +18 -13
  744. package/dist/stair/stair-type.d.ts +18 -0
  745. package/dist/stair/stair-type.d.ts.map +1 -0
  746. package/dist/stair/stair-type.js +25 -0
  747. package/dist/stair-segment/panel.d.ts.map +1 -1
  748. package/dist/stair-segment/panel.js +44 -5
  749. package/dist/turbine-vent/definition.d.ts.map +1 -1
  750. package/dist/turbine-vent/definition.js +8 -5
  751. package/dist/turbine-vent/geometry.d.ts.map +1 -1
  752. package/dist/turbine-vent/geometry.js +48 -18
  753. package/dist/turbine-vent/paint.d.ts +4 -0
  754. package/dist/turbine-vent/paint.d.ts.map +1 -0
  755. package/dist/turbine-vent/paint.js +35 -0
  756. package/dist/turbine-vent/panel.js +1 -1
  757. package/dist/turbine-vent/parametrics.js +2 -2
  758. package/dist/turbine-vent/renderer.d.ts.map +1 -1
  759. package/dist/turbine-vent/renderer.js +31 -9
  760. package/dist/wall/curve-eligibility.d.ts +3 -0
  761. package/dist/wall/curve-eligibility.d.ts.map +1 -0
  762. package/dist/wall/curve-eligibility.js +10 -0
  763. package/dist/wall/curve-tool.d.ts.map +1 -1
  764. package/dist/wall/curve-tool.js +8 -11
  765. package/dist/wall/definition.d.ts +1 -1
  766. package/dist/wall/definition.d.ts.map +1 -1
  767. package/dist/wall/definition.js +36 -13
  768. package/dist/wall/floorplan-affordances.d.ts +1 -0
  769. package/dist/wall/floorplan-affordances.d.ts.map +1 -1
  770. package/dist/wall/floorplan-affordances.js +46 -7
  771. package/dist/wall/floorplan-move.d.ts +3 -4
  772. package/dist/wall/floorplan-move.d.ts.map +1 -1
  773. package/dist/wall/floorplan-move.js +122 -9
  774. package/dist/wall/floorplan.d.ts.map +1 -1
  775. package/dist/wall/floorplan.js +19 -23
  776. package/dist/wall/move-shared.d.ts.map +1 -1
  777. package/dist/wall/move-shared.js +10 -7
  778. package/dist/wall/paint.d.ts.map +1 -1
  779. package/dist/wall/paint.js +2 -0
  780. package/dist/wall/panel.d.ts.map +1 -1
  781. package/dist/wall/panel.js +10 -17
  782. package/dist/wall/parametrics.js +2 -2
  783. package/dist/wall/pointer-transparency.d.ts +128 -0
  784. package/dist/wall/pointer-transparency.d.ts.map +1 -0
  785. package/dist/wall/pointer-transparency.js +147 -0
  786. package/dist/wall/renderer.d.ts.map +1 -1
  787. package/dist/wall/renderer.js +65 -8
  788. package/dist/wall/selection-hit-owner.d.ts +53 -0
  789. package/dist/wall/selection-hit-owner.d.ts.map +1 -0
  790. package/dist/wall/selection-hit-owner.js +79 -0
  791. package/dist/wall/system.d.ts +2 -0
  792. package/dist/wall/system.d.ts.map +1 -1
  793. package/dist/wall/system.js +66 -25
  794. package/dist/wall/tool.d.ts.map +1 -1
  795. package/dist/wall/tool.js +5 -0
  796. package/dist/wall/treatment-level-data.d.ts +6 -1
  797. package/dist/wall/treatment-level-data.d.ts.map +1 -1
  798. package/dist/wall/treatment-level-data.js +82 -5
  799. package/dist/wall/treatments.d.ts +1 -0
  800. package/dist/wall/treatments.d.ts.map +1 -1
  801. package/dist/wall/treatments.js +5 -0
  802. package/dist/wall/wall-batch-system.d.ts +38 -6
  803. package/dist/wall/wall-batch-system.d.ts.map +1 -1
  804. package/dist/wall/wall-batch-system.js +122 -25
  805. package/dist/wall/wall-batch.js +2 -2
  806. package/dist/window/definition.d.ts +2 -1
  807. package/dist/window/definition.d.ts.map +1 -1
  808. package/dist/window/definition.js +51 -24
  809. package/dist/window/floorplan-move.d.ts.map +1 -1
  810. package/dist/window/floorplan-move.js +1 -1
  811. package/dist/window/move-tool.d.ts +7 -5
  812. package/dist/window/move-tool.d.ts.map +1 -1
  813. package/dist/window/move-tool.js +344 -58
  814. package/dist/window/panel.d.ts.map +1 -1
  815. package/dist/window/panel.js +2 -0
  816. package/dist/window/parametrics.js +2 -2
  817. package/dist/window/renderer.d.ts.map +1 -1
  818. package/dist/window/renderer.js +5 -7
  819. package/dist/window/tool.d.ts.map +1 -1
  820. package/dist/window/tool.js +227 -13
  821. package/dist/zone/floorplan-affordances.d.ts +12 -12
  822. package/package.json +11 -9
  823. package/dist/dormer/panel-window-section.d.ts +0 -14
  824. package/dist/dormer/panel-window-section.d.ts.map +0 -1
  825. package/dist/dormer/panel-window-section.js +0 -59
  826. package/dist/dormer/window-assembly.d.ts +0 -22
  827. package/dist/dormer/window-assembly.d.ts.map +0 -1
  828. package/dist/dormer/window-assembly.js +0 -111
  829. package/dist/dormer/window-frame.d.ts +0 -24
  830. package/dist/dormer/window-frame.d.ts.map +0 -1
  831. package/dist/dormer/window-frame.js +0 -100
@@ -1,18 +1,21 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { analyzePortConnectivity, PipeSegmentNode, pauseSceneHistory, resolveConnectivityUpdates, resumeSceneHistory, sceneRegistry, useLiveNodeOverrides, useScene, } from '@pascal-app/core';
4
- import { DimensionPill, swallowNextClick, triggerSFX, useEditor } from '@pascal-app/editor';
4
+ import { clearPlacementSurface, DimensionPill, isGridSnapActive, swallowNextClick, triggerSFX, useEditor, } from '@pascal-app/editor';
5
5
  import { useViewer } from '@pascal-app/viewer';
6
6
  import { Html } from '@react-three/drei';
7
7
  import { createPortal, useFrame, useThree } from '@react-three/fiber';
8
8
  import { useEffect, useMemo, useRef, useState } from 'react';
9
9
  import { Plane, Raycaster, Vector2, Vector3 } from 'three';
10
+ import { planRunEndCapFollowUpdates } from '../shared/automatic-run-end-cap';
10
11
  import { detectFittingEndpoint, planFittingEndpointReaim, } from '../shared/fitting-endpoint-reaim';
11
12
  import { PipeFittingGhost, PipeSegmentGhost } from '../shared/mep-ghost';
12
13
  import { planPipeRunTranslationOffsets } from '../shared/pipe-run-translation-offset';
13
14
  import { planVerticalOffsets } from '../shared/pipe-vertical-offset';
14
15
  import { collectScenePorts, DWV_PORT_SYSTEMS, findNearestPortXZ } from '../shared/ports';
15
- import { HandleCube, MoveChevron } from '../shared/selection-handles';
16
+ import { ContinuePlusHandle, HandleCube, MoveChevron } from '../shared/selection-handles';
17
+ import { refreshWallRunAttachment } from '../shared/wall-run-move';
18
+ import { activatePipeContinuation, pipeContinuationHandlePlan, } from './continuation';
16
19
  /** Port-snap radius for dragged run endpoints (meters, XZ). */
17
20
  const PORT_SNAP_RADIUS_M = 0.4;
18
21
  const CENTER_ARROW_GAP = 0.28;
@@ -48,11 +51,10 @@ function pipeRadiusM(pipe) {
48
51
  * - **Alt** detaches: the joint breaks for this drag — the elbow does NOT
49
52
  * re-aim and mated fittings / runs do NOT follow; the endpoint moves on its
50
53
  * own (port re-mate still allowed so it can be reattached elsewhere).
51
- * - **Shift** bypasses grid snapping for a perfectly smooth precision drag.
54
+ * - Snapping follows the active editor snapping mode.
52
55
  *
53
- * History does the single-undo dance: paused during the drag (the live
54
- * `updateNode` ticks are untracked), then on release the path is
55
- * reverted, history resumed, and the final path applied as one tracked
56
+ * History is paused during the drag while live overrides drive the preview.
57
+ * On release, history resumes and the final path is applied as one tracked
56
58
  * change.
57
59
  */
58
60
  const PipeSegmentSelectionAffordance = () => {
@@ -90,6 +92,8 @@ const PipeSegmentSelectionAffordance = () => {
90
92
  };
91
93
  const PipePointHandles = ({ pipe, target }) => {
92
94
  const { camera, gl } = useThree();
95
+ const liveOverride = useLiveNodeOverrides((state) => state.overrides.get(pipe.id));
96
+ const displayPipe = liveOverride ? { ...pipe, ...liveOverride } : pipe;
93
97
  const outerRef = useRef(null);
94
98
  useFrame(() => {
95
99
  const outer = outerRef.current;
@@ -190,21 +194,54 @@ const PipePointHandles = ({ pipe, target }) => {
190
194
  // collar and the elbow swings to fit. Otherwise: the dragged point moves
191
195
  // and any mated fittings / runs translate via connectivity.
192
196
  const buildDragBatch = (drag, next, detached) => {
197
+ const wall = pipe.wallAttachment
198
+ ? useScene.getState().nodes[pipe.wallAttachment.wallId]
199
+ : undefined;
200
+ const attachmentFor = (path) => pipe.wallAttachment && wall?.type === 'wall'
201
+ ? refreshWallRunAttachment(path, pipe.wallAttachment, wall)
202
+ : pipe.wallAttachment;
203
+ const withEndCapFollow = (path, updates) => {
204
+ if (drag.index !== 0 && drag.index !== drag.initialPath.length - 1)
205
+ return updates;
206
+ const endpoint = drag.index === 0 ? 'start' : 'end';
207
+ const nextPipe = { ...pipe, path };
208
+ const capUpdates = planRunEndCapFollowUpdates(pipe, nextPipe, endpoint, useScene.getState().nodes);
209
+ const capIds = new Set(capUpdates.map((update) => update.id));
210
+ return [...updates.filter((update) => !capIds.has(update.id)), ...capUpdates];
211
+ };
193
212
  if (!detached && drag.fittingEndpoint) {
194
213
  const plan = planFittingEndpointReaim(drag.fittingEndpoint, drag.index, next);
195
214
  // Out of the elbow's buildable turn range — hold this frame.
196
215
  if (!plan)
197
216
  return null;
198
- return [
199
- { id: pipe.id, data: { path: plan.path } },
217
+ return withEndCapFollow(plan.path, [
218
+ {
219
+ id: pipe.id,
220
+ data: { path: plan.path, wallAttachment: attachmentFor(plan.path) },
221
+ },
200
222
  { id: plan.fittingUpdate.id, data: plan.fittingUpdate.data },
201
- ];
223
+ ...(drag.jointPartner
224
+ ? [
225
+ {
226
+ id: drag.jointPartner.id,
227
+ data: {
228
+ path: drag.jointPartner.startPath.map((p, i) => i === (drag.index === 0 ? drag.jointPartner.startPath.length - 1 : 0)
229
+ ? drag.index === 0
230
+ ? plan.path[plan.path.length - 1]
231
+ : plan.path[0]
232
+ : p),
233
+ },
234
+ },
235
+ ]
236
+ : []),
237
+ ]);
202
238
  }
203
- const path = pipe.path.map((p, i) => (i === drag.index ? next : p));
204
- return [
205
- { id: pipe.id, data: { path } },
239
+ const path = drag.initialPath.map((p, i) => (i === drag.index ? next : p));
240
+ const updates = [
241
+ { id: pipe.id, data: { path, wallAttachment: attachmentFor(path) } },
206
242
  ...(detached ? [] : connectivityUpdatesForPath(drag.connectivity, path)),
207
243
  ];
244
+ return detached ? updates : withEndCapFollow(path, updates);
208
245
  };
209
246
  /** World-space position of a local path point. */
210
247
  const toWorld = (p) => target.localToWorld(new Vector3(p[0], p[1], p[2]));
@@ -228,11 +265,32 @@ const PipePointHandles = ({ pipe, target }) => {
228
265
  const startPoint = initialPath[index];
229
266
  const connectivity = analyzePortConnectivity(pipe, useScene.getState().nodes);
230
267
  pauseSceneHistory(useScene);
268
+ const livePreviewIds = new Set();
269
+ const publishLivePreview = (updates) => {
270
+ const scene = useScene.getState();
271
+ const entries = updates
272
+ .filter((update) => scene.nodes[update.id])
273
+ .map((update) => [update.id, update.data]);
274
+ useLiveNodeOverrides.getState().setMany(entries);
275
+ for (const [id] of entries) {
276
+ livePreviewIds.add(id);
277
+ scene.markDirty(id);
278
+ }
279
+ };
280
+ const clearLivePreview = () => {
281
+ const scene = useScene.getState();
282
+ const overrides = useLiveNodeOverrides.getState();
283
+ for (const id of livePreviewIds) {
284
+ overrides.clear(id);
285
+ if (scene.nodes[id])
286
+ scene.markDirty(id);
287
+ }
288
+ };
231
289
  useViewer.getState().setInputDragging(true);
232
290
  document.body.style.cursor = kind.axis === 'y' ? 'ns-resize' : 'grabbing';
233
291
  setDraggingIndex(index);
234
292
  const isEndpoint = index === 0 || index === initialPath.length - 1;
235
- const swings = kind.axis === 'y' ? kind.along !== true : !kind.along;
293
+ const swings = kind.axis === 'y' ? kind.along !== true : kind.axis === 'horizontal' && !kind.along;
236
294
  const neighborIndex = index === 0 ? 1 : index === initialPath.length - 1 ? index - 1 : null;
237
295
  const pivot = neighborIndex !== null ? initialPath[neighborIndex] : null;
238
296
  const radius = pivot
@@ -247,17 +305,20 @@ const PipePointHandles = ({ pipe, target }) => {
247
305
  const fittingEndpoint = isEndpoint
248
306
  ? detectFittingEndpoint('pipe-segment', initialPath, index, useScene.getState().nodes)
249
307
  : null;
308
+ const partnerId = fittingEndpoint?.fitting.metadata?.altJoint
309
+ ? fittingEndpoint.fitting.metadata.partnerIds?.find((id) => id !== pipe.id)
310
+ : undefined;
311
+ const partner = partnerId ? useScene.getState().nodes[partnerId] : undefined;
250
312
  const onMove = (event) => {
251
313
  const drag = dragRef.current;
252
314
  if (!drag)
253
315
  return;
254
- // Shift = precision: bypass grid snapping for a perfectly smooth
255
- // drag (snap() is a no-op at step 0).
256
- const step = event.shiftKey ? 0 : useEditor.getState().gridSnapStep;
316
+ // Follow the active snapping mode; Shift cycles that mode globally.
317
+ const step = isGridSnapActive() ? useEditor.getState().gridSnapStep : 0;
257
318
  // Alt = detach: break the joint for this drag — the endpoint moves on
258
319
  // its own, no elbow re-aim and no connectivity follow (it can still
259
320
  // port-snap to re-mate elsewhere). Mirrors the wall corner drag.
260
- const detached = event.altKey;
321
+ const detached = event.altKey && !drag.jointPartner;
261
322
  let next = null;
262
323
  if (canSwing && pivot) {
263
324
  const aim = kind.axis === 'y'
@@ -289,7 +350,10 @@ const PipePointHandles = ({ pipe, target }) => {
289
350
  if (!next)
290
351
  return;
291
352
  if (isEndpoint && (detached || !drag.fittingEndpoint)) {
292
- const port = findNearestPortXZ([next[0], next[1], next[2]], collectScenePorts({ excludeNodeId: pipe.id, systems: DWV_PORT_SYSTEMS }), PORT_SNAP_RADIUS_M);
353
+ const port = findNearestPortXZ([next[0], next[1], next[2]], collectScenePorts({
354
+ excludeNodeId: pipe.id,
355
+ systems: DWV_PORT_SYSTEMS,
356
+ }), PORT_SNAP_RADIUS_M);
293
357
  if (port)
294
358
  next = [port.position[0], port.position[1], port.position[2]];
295
359
  }
@@ -302,7 +366,7 @@ const PipePointHandles = ({ pipe, target }) => {
302
366
  drag.detached = detached;
303
367
  if (step > 0)
304
368
  triggerSFX('sfx:grid-snap');
305
- useScene.getState().updateNodes(batch);
369
+ publishLivePreview(batch);
306
370
  };
307
371
  const onUp = () => {
308
372
  const drag = dragRef.current;
@@ -312,30 +376,15 @@ const PipePointHandles = ({ pipe, target }) => {
312
376
  drag.cleanup();
313
377
  dragRef.current = null;
314
378
  setDraggingIndex(null);
315
- // Single-undo dance: revert (still paused), resume, re-apply the final
316
- // batch as one tracked change. The final batch is built the same way as
379
+ clearLivePreview();
380
+ // Resume history and apply the final batch as one tracked change. The
381
+ // final batch is built the same way as
317
382
  // each live frame (elbow re-aim, rigid connectivity follow, or — when
318
383
  // detached — just the pipe path).
319
384
  const detached = drag.detached;
385
+ const moved = drag.current.some((v, axis) => v !== drag.initialPath[drag.index][axis]);
320
386
  const finalBatch = buildDragBatch(drag, drag.current, detached);
321
- // Revert the run AND whatever the drag carried to their pre-drag state
322
- // while paused so history captures a clean before→after delta. When
323
- // detached nothing else moved, so only the run needs reverting.
324
- const revertUpdates = detached
325
- ? []
326
- : drag.fittingEndpoint
327
- ? [drag.fittingEndpoint.revert]
328
- : (drag.connectivity?.connections ?? []).map((conn) => conn.kind === 'rigid-node'
329
- ? { id: conn.nodeId, data: { position: conn.startPosition } }
330
- : { id: conn.nodeId, data: { path: conn.startPath } });
331
- useScene
332
- .getState()
333
- .updateNodes([
334
- { id: pipe.id, data: { path: drag.initialPath } },
335
- ...revertUpdates.filter((u) => useScene.getState().nodes[u.id]),
336
- ]);
337
387
  resumeSceneHistory(useScene);
338
- const moved = drag.current.some((v, axis) => v !== drag.initialPath[drag.index][axis]);
339
388
  if (moved && finalBatch) {
340
389
  useScene.getState().updateNodes(finalBatch);
341
390
  }
@@ -354,6 +403,9 @@ const PipePointHandles = ({ pipe, target }) => {
354
403
  cleanup,
355
404
  connectivity,
356
405
  fittingEndpoint,
406
+ jointPartner: partner?.type === 'pipe-segment'
407
+ ? { id: partner.id, startPath: partner.path.map((p) => [...p]) }
408
+ : undefined,
357
409
  detached: false,
358
410
  };
359
411
  window.addEventListener('pointermove', onMove);
@@ -366,14 +418,19 @@ const PipePointHandles = ({ pipe, target }) => {
366
418
  const initialPath = pipe.path.map((p) => [...p]);
367
419
  const center = runAxisAndCenter(pipe)?.center ?? initialPath[0];
368
420
  const anchorWorld = toWorld(center);
369
- const profile = { diameter: pipe.diameter, pipeMaterial: pipe.pipeMaterial };
370
- const nodesById = { ...useScene.getState().nodes };
421
+ const profile = {
422
+ diameter: pipe.diameter,
423
+ pipeMaterial: pipe.pipeMaterial,
424
+ };
425
+ const nodesById = {
426
+ ...useScene.getState().nodes,
427
+ };
371
428
  const connectivity = analyzePortConnectivity(pipe, nodesById);
372
429
  const scenePorts = collectScenePorts({
373
430
  excludeNodeId: pipe.id,
374
431
  systems: DWV_PORT_SYSTEMS,
375
432
  });
376
- const previewDeletedSnapshots = new Map();
433
+ const previewHiddenIds = new Set();
377
434
  pauseSceneHistory(useScene);
378
435
  const ensureSceneObjectsVisible = (ids) => {
379
436
  const scene = useScene.getState();
@@ -404,29 +461,30 @@ const PipePointHandles = ({ pipe, target }) => {
404
461
  }
405
462
  };
406
463
  const clearLivePreview = () => {
464
+ const scene = useScene.getState();
407
465
  const overrides = useLiveNodeOverrides.getState();
408
- for (const id of livePreviewIds)
466
+ for (const id of livePreviewIds) {
409
467
  overrides.clear(id);
468
+ if (scene.nodes[id])
469
+ scene.markDirty(id);
470
+ }
410
471
  livePreviewIds.clear();
411
472
  };
412
- const restorePreviewDeleted = (keepDeleted = []) => {
413
- const keep = new Set(keepDeleted);
414
- const scene = useScene.getState();
415
- const create = [];
416
- for (const [id, node] of previewDeletedSnapshots) {
417
- if (keep.has(id))
473
+ const setPreviewHidden = (ids) => {
474
+ const next = new Set(ids);
475
+ for (const id of previewHiddenIds) {
476
+ if (next.has(id))
418
477
  continue;
419
- if (!scene.nodes[id]) {
420
- create.push({
421
- node,
422
- parentId: (node.parentId ?? undefined),
423
- });
424
- }
425
- previewDeletedSnapshots.delete(id);
478
+ const object = sceneRegistry.nodes.get(id);
479
+ if (object)
480
+ object.visible = true;
481
+ previewHiddenIds.delete(id);
426
482
  }
427
- if (create.length > 0) {
428
- scene.applyNodeChanges({ create });
429
- ensureSceneObjectsVisible(create.map(({ node }) => node.id));
483
+ for (const id of next) {
484
+ const object = sceneRegistry.nodes.get(id);
485
+ if (object)
486
+ object.visible = false;
487
+ previewHiddenIds.add(id);
430
488
  }
431
489
  };
432
490
  const sample = (clientX, clientY) => {
@@ -463,10 +521,15 @@ const PipePointHandles = ({ pipe, target }) => {
463
521
  const partnerReverts = () => (connectivity?.connections ?? [])
464
522
  .map((conn) => {
465
523
  if (conn.kind !== 'rigid-node') {
466
- return { id: conn.nodeId, data: { path: conn.startPath } };
524
+ return {
525
+ id: conn.nodeId,
526
+ data: { path: conn.startPath },
527
+ };
467
528
  }
468
529
  const start = nodesById[conn.nodeId];
469
- const data = { position: conn.startPosition };
530
+ const data = {
531
+ position: conn.startPosition,
532
+ };
470
533
  if (start?.rotation !== undefined)
471
534
  data.rotation = start.rotation;
472
535
  if (start?.angle !== undefined)
@@ -480,7 +543,7 @@ const PipePointHandles = ({ pipe, target }) => {
480
543
  const s = sample(event.clientX, event.clientY);
481
544
  if (s === null)
482
545
  return;
483
- const step = event.shiftKey ? 0 : useEditor.getState().gridSnapStep;
546
+ const step = isGridSnapActive() ? useEditor.getState().gridSnapStep : 0;
484
547
  const next = snap(s - startSample, step);
485
548
  if (next === delta)
486
549
  return;
@@ -502,12 +565,7 @@ const PipePointHandles = ({ pipe, target }) => {
502
565
  const plan = offsetResult.plan;
503
566
  const scene = useScene.getState();
504
567
  const deletePreview = (plan.delete ?? []).filter((id) => scene.nodes[id]);
505
- for (const id of deletePreview) {
506
- const node = scene.nodes[id];
507
- if (node)
508
- previewDeletedSnapshots.set(id, node);
509
- }
510
- restorePreviewDeleted(plan.delete ?? []);
568
+ setPreviewHidden(deletePreview);
511
569
  const followUpdates = connectivityUpdatesForPath(connectivity, plan.followPath);
512
570
  const updates = [
513
571
  { id: pipe.id, data: { path: plan.pipePath } },
@@ -515,28 +573,30 @@ const PipePointHandles = ({ pipe, target }) => {
515
573
  ...followUpdates,
516
574
  ];
517
575
  publishLivePreview(updates);
518
- scene.applyNodeChanges({ delete: deletePreview, update: updates });
519
- ensureSceneObjectsVisible(updates.map((update) => update.id));
520
- setVerticalGhost({ tint: 'valid', fittings: plan.fittings, risers: plan.risers });
576
+ setVerticalGhost({
577
+ tint: 'valid',
578
+ fittings: plan.fittings,
579
+ risers: plan.risers,
580
+ });
521
581
  }
522
582
  else if (offsetResult?.status === 'invalid') {
523
- restorePreviewDeleted();
583
+ setPreviewHidden([]);
524
584
  const updates = [
525
585
  { id: pipe.id, data: { path: pipe.path } },
526
586
  ...partnerReverts(),
527
587
  ];
528
588
  publishLivePreview(updates);
529
- useScene.getState().updateNodes(updates);
530
- const lifted = PipeSegmentNode.parse({ ...pipe, path: shiftedPath(next) });
589
+ const lifted = PipeSegmentNode.parse({
590
+ ...pipe,
591
+ path: shiftedPath(next),
592
+ });
531
593
  setVerticalGhost({ tint: 'invalid', fittings: [], risers: [lifted] });
532
594
  }
533
595
  else {
534
- restorePreviewDeleted();
596
+ setPreviewHidden([]);
535
597
  setVerticalGhost(null);
536
598
  const updates = batchFor(shiftedPath(next));
537
599
  publishLivePreview(updates);
538
- useScene.getState().updateNodes(updates);
539
- ensureSceneObjectsVisible(updates.map((update) => update.id));
540
600
  }
541
601
  };
542
602
  const onUp = () => {
@@ -545,27 +605,12 @@ const PipePointHandles = ({ pipe, target }) => {
545
605
  window.removeEventListener('pointerup', onUp);
546
606
  window.removeEventListener('pointercancel', onUp);
547
607
  useViewer.getState().setInputDragging(false);
608
+ clearPlacementSurface();
548
609
  document.body.style.cursor = '';
549
610
  setRunMoving(false);
550
611
  setVerticalGhost(null);
551
612
  clearLivePreview();
552
- const restore = useScene.getState();
553
- const restoredPreviewNodes = Array.from(previewDeletedSnapshots.values()).filter((node) => !restore.nodes[node.id]);
554
- const restoreUpdates = [
555
- { id: pipe.id, data: { path: initialPath } },
556
- ...partnerReverts(),
557
- ];
558
- restore.applyNodeChanges({
559
- create: restoredPreviewNodes.map((node) => ({
560
- node,
561
- parentId: (node.parentId ?? undefined),
562
- })),
563
- update: restoreUpdates,
564
- });
565
- ensureSceneObjectsVisible([
566
- ...restoredPreviewNodes.map((node) => node.id),
567
- ...restoreUpdates.map((update) => update.id),
568
- ]);
613
+ setPreviewHidden([]);
569
614
  resumeSceneHistory(useScene);
570
615
  if (delta === 0)
571
616
  return;
@@ -607,11 +652,17 @@ const PipePointHandles = ({ pipe, target }) => {
607
652
  if (translationPlan) {
608
653
  const created = [...translationPlan.fittings, ...translationPlan.connectors];
609
654
  const updates = [
610
- { id: pipe.id, data: { path: translationPlan.pipePath } },
655
+ {
656
+ id: pipe.id,
657
+ data: { path: translationPlan.pipePath },
658
+ },
611
659
  ...translationPlan.updates,
612
660
  ];
613
661
  scene.applyNodeChanges({
614
- create: created.map((node) => ({ node: node, parentId })),
662
+ create: created.map((node) => ({
663
+ node: node,
664
+ parentId,
665
+ })),
615
666
  update: updates,
616
667
  });
617
668
  ensureSceneObjectsVisible([
@@ -628,19 +679,19 @@ const PipePointHandles = ({ pipe, target }) => {
628
679
  window.addEventListener('pointerup', onUp);
629
680
  window.addEventListener('pointercancel', onUp);
630
681
  };
631
- const cornerArrows = useMemo(() => getCornerArrows(pipe), [pipe]);
632
- const runCenter = useMemo(() => runAxisAndCenter(pipe)?.center ?? null, [pipe]);
682
+ const cornerArrows = useMemo(() => getCornerArrows(displayPipe), [displayPipe]);
683
+ const runCenter = useMemo(() => runAxisAndCenter(displayPipe)?.center ?? null, [displayPipe]);
633
684
  const runCenterYaw = useMemo(() => {
634
- const axis = runAxisAndCenter(pipe);
685
+ const axis = runAxisAndCenter(displayPipe);
635
686
  if (!axis || Math.hypot(axis.dir[0], axis.dir[2]) < 1e-6)
636
687
  return 0;
637
688
  return Math.atan2(-axis.dir[2], axis.dir[0]);
638
- }, [pipe]);
689
+ }, [displayPipe]);
639
690
  const centerArrows = useMemo(() => {
640
691
  if (!runCenter)
641
692
  return [];
642
- const base = Math.max(pipeRadiusM(pipe) + CENTER_ARROW_GAP, CENTER_ARROW_MIN_OFFSET);
643
- const axis = runAxisAndCenter(pipe);
693
+ const base = Math.max(pipeRadiusM(displayPipe) + CENTER_ARROW_GAP, CENTER_ARROW_MIN_OFFSET);
694
+ const axis = runAxisAndCenter(displayPipe);
644
695
  const t = axis && Math.hypot(axis.dir[0], axis.dir[2]) > 1e-6
645
696
  ? (() => {
646
697
  const len = Math.hypot(axis.dir[0], axis.dir[2]);
@@ -677,19 +728,22 @@ const PipePointHandles = ({ pipe, target }) => {
677
728
  cursor: 'ns-resize',
678
729
  });
679
730
  return arrows;
680
- }, [pipe, runCenter]);
731
+ }, [displayPipe, runCenter]);
681
732
  return (_jsxs("group", { ref: outerRef, children: [verticalGhost?.fittings.map((f) => (_jsx(PipeFittingGhost, { fitting: f, tint: verticalGhost.tint }, `pipe-vghost-fit-${f.id}`))), verticalGhost?.risers.map((r) => (_jsx(PipeSegmentGhost, { pipe: r, tint: verticalGhost.tint }, `pipe-vghost-riser-${r.id}`))), draggingIndex === null &&
682
733
  !runMoving &&
683
- pipe.path.map((p, i) => (_jsxs("group", { children: [_jsx(HandleCube, { active: openCluster === i, onClick: () => toggleCluster(i), position: p, rotationY: vertexYaw(pipe, i) }), openCluster === i &&
734
+ openCluster === null &&
735
+ ['start', 'end'].map((endpoint) => (_jsx(PipeContinuationHandle, { endpoint: endpoint, pipe: displayPipe }, endpoint))), draggingIndex === null &&
736
+ !runMoving &&
737
+ displayPipe.path.map((p, i) => (_jsxs("group", { children: [_jsx(HandleCube, { active: openCluster === i, onClick: () => toggleCluster(i), position: p, rotationY: vertexYaw(displayPipe, i) }), openCluster === i &&
684
738
  cornerArrows
685
739
  .filter((a) => a.index === i)
686
740
  .map((a) => (_jsx(MoveChevron, { cursor: a.cursor, onPointerDown: onHandleDown(a.index, a.kind), position: a.position, rotationY: a.rotationY, vertical: a.vertical }, a.key)))] }, `pipe-vtx${i}`))), draggingIndex === null && !runMoving && runCenter && (_jsxs("group", { children: [_jsx(HandleCube, { active: openCluster === 'center', onClick: () => toggleCluster('center'), position: runCenter, rotationY: runCenterYaw }), openCluster === 'center' &&
687
741
  centerArrows.map((a) => (_jsx(MoveChevron, { cursor: a.cursor, onPointerDown: onRunMoveDown(a.kind), position: a.position, rotationY: a.rotationY, vertical: a.vertical }, a.key)))] })), draggingIndex !== null &&
688
- pipe.path[draggingIndex] &&
742
+ displayPipe.path[draggingIndex] &&
689
743
  (() => {
690
744
  // Same pill as the draw tool: signed per-axis deltas from the
691
745
  // drag-start position, dominant axis emphasised.
692
- const point = pipe.path[draggingIndex];
746
+ const point = displayPipe.path[draggingIndex];
693
747
  const origin = dragRef.current?.initialPath[draggingIndex] ?? point;
694
748
  const deltas = [point[0] - origin[0], point[1] - origin[1], point[2] - origin[2]];
695
749
  const axes = ['x', 'y', 'z'];
@@ -702,6 +756,16 @@ const PipePointHandles = ({ pipe, target }) => {
702
756
  })), primary: primary, unit: unit }) }));
703
757
  })()] }));
704
758
  };
759
+ function PipeContinuationHandle({ pipe, endpoint, }) {
760
+ const nodes = useScene((state) => state.nodes);
761
+ const plan = pipeContinuationHandlePlan(pipe, endpoint, nodes);
762
+ if (!plan)
763
+ return null;
764
+ return (_jsx(ContinuePlusHandle, { onActivate: () => {
765
+ triggerSFX('sfx:item-pick');
766
+ activatePipeContinuation(pipe, endpoint, plan.fittingId);
767
+ }, position: plan.position }));
768
+ }
705
769
  function getCornerArrows(pipe) {
706
770
  const arrows = [];
707
771
  const base = Math.max(pipeRadiusM(pipe) + CENTER_ARROW_GAP, CENTER_ARROW_MIN_OFFSET);
@@ -0,0 +1,5 @@
1
+ type Point = readonly [number, number, number];
2
+ export declare function pipeGrade(start: Point, end: Point): number | null;
3
+ export declare function applyPipeGrade(start: Point, end: Point, grade: number): [number, number, number];
4
+ export {};
5
+ //# sourceMappingURL=slope.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slope.d.ts","sourceRoot":"","sources":["../../src/pipe-segment/slope.ts"],"names":[],"mappings":"AAAA,KAAK,KAAK,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;AAE9C,wBAAgB,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,GAAG,MAAM,GAAG,IAAI,CAGjE;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAIhG"}
@@ -0,0 +1,10 @@
1
+ export function pipeGrade(start, end) {
2
+ const horizontal = Math.hypot(end[0] - start[0], end[2] - start[2]);
3
+ return horizontal < 1e-6 ? null : (start[1] - end[1]) / horizontal;
4
+ }
5
+ export function applyPipeGrade(start, end, grade) {
6
+ const horizontal = Math.hypot(end[0] - start[0], end[2] - start[2]);
7
+ if (horizontal < 1e-6 || !Number.isFinite(grade))
8
+ return [...end];
9
+ return [end[0], start[1] - horizontal * grade, end[2]];
10
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../src/pipe-segment/tool.tsx"],"names":[],"mappings":"AAyIA,QAAA,MAAM,eAAe,0CAujBpB,CAAA;AAkCD,eAAe,eAAe,CAAA"}
1
+ {"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../src/pipe-segment/tool.tsx"],"names":[],"mappings":"AA+DA,QAAA,MAAM,eAAe,0CA2bpB,CAAA;AA8BD,eAAe,eAAe,CAAA"}