@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,4 +1,5 @@
1
- import { findLevelAncestorId, selectionProxyIdFromMetadata } from '@pascal-app/core';
1
+ import { CABINET_METRIC_DEFAULTS, findLevelAncestorId, selectionProxyIdFromMetadata, } from '@pascal-app/core';
2
+ import { findWallOpeningConflicts } from '../shared/wall-opening-clearance';
2
3
  import { bakeCabinetAnimationClip } from './animation';
3
4
  import { buildCabinetFloorplan, buildCabinetModuleFloorplan } from './floorplan';
4
5
  import { cabinetModuleFloorplanMoveTarget } from './floorplan-move';
@@ -7,18 +8,21 @@ import { buildCabinetGeometry } from './geometry';
7
8
  import { toggleCabinetOperationState } from './interaction';
8
9
  import { cabinetModuleParentFrame } from './move-frame';
9
10
  import { cabinetPaint } from './paint';
11
+ import { cabinetModuleUsesFixedApplianceWidth } from './panel-visibility';
10
12
  import { cabinetModuleParametrics, cabinetParametrics } from './parametrics';
13
+ import { resolveCabinetGridPosition } from './placement-snap';
11
14
  import useCabinetPlacementType from './placement-type';
15
+ import { metadataForSelectedWidth, metadataWithPresetWidthDebt } from './preset-width-debt';
12
16
  import { cabinetQuickActions } from './quick-actions';
13
17
  import { cabinetConnectedDepthBounds, cabinetResizeUpperBound, MAX_CABINET_DEPTH, MAX_CABINET_WIDTH, MIN_CABINET_DEPTH, MIN_CABINET_WIDTH, } from './resize-limits';
14
- import { moduleSideOpen, sortRunModules } from './run-layout';
15
- import { backAlignedRunDepthOverrides, backAlignZ, buildWallCornerDepthIndex, bumpCabinetRunLayoutRevision, cabinetMetadataRecord, cabinetModulesForRun, totalCabinetHeight as cabinetTotalHeight, cornerSourceWidthOverridesForDerivedDepth, previewCornerRunsFromRunSources, resolveCabinetType, runModuleBaseY, syncCornerRunsFromRunSources, syncCornerRunsFromSourceModule, wallChildOf, wallCornerWidthOverridesForDepthTargets, } from './run-ops';
18
+ import { moduleSideOpen, reflowRunModules as reflowCabinetRunModules, runWallConstraints, sortRunModules, } from './run-layout';
19
+ import { backAlignedRunDepthOverrides, backAlignZ, buildWallCornerDepthIndex, bumpCabinetRunLayoutRevision, cabinetMetadataRecord, cabinetModulesForRun, cabinetModuleTotalHeight, totalCabinetHeight as cabinetTotalHeight, cornerSourceWidthOverridesForDerivedDepth, nestedCornerRunPositionOverrides, previewCornerRunsFromRunSources, resolveCabinetType, runModuleBaseY, syncCornerRunsFromRunSources, syncCornerRunsFromSourceModule, wallChildOf, wallCornerWidthOverridesForDepthTargets, } from './run-ops';
16
20
  import { cabinetSceneAction } from './scene-action';
17
21
  import { CabinetModuleNode, CabinetNode } from './schema';
18
22
  import { cabinetSlots } from './slots';
19
23
  import { backAnchoredModuleZ, isHoodCompartmentType, minCabinetCarcassHeightForStack, stackForCabinet, } from './stack';
20
24
  import { cabinetFloorplanAffectedIds, cabinetTreeChildIds, cabinetTreeHidden, cabinetTreeLabel, } from './tree-structure';
21
- import { resolveCabinetModuleWallSnapLocal, resolveCabinetRunWallSnap } from './wall-snap';
25
+ import { findClosestCabinetWallInPlan, resolveCabinetModuleWallSnapLocal, resolveCabinetRunWallSnap, resolveCabinetWallFaceOffset, } from './wall-snap';
22
26
  function isCabinetDuplicableNode(node) {
23
27
  return ((node?.type === 'cabinet' || node?.type === 'cabinet-module') &&
24
28
  Array.isArray(node.position) &&
@@ -95,7 +99,7 @@ function appendCabinetFloorPlacedFootprints(run, nodes, parentPosition, parentRo
95
99
  ];
96
100
  footprints.push({
97
101
  position: modulePosition,
98
- dimensions: [module.width, cabinetTotalHeight(module), module.depth],
102
+ dimensions: [module.width, cabinetModuleTotalHeight(module), module.depth],
99
103
  rotation: [0, runRotation + module.rotation, 0],
100
104
  });
101
105
  }
@@ -128,6 +132,43 @@ export function cabinetFloorPlacedFootprints(node, nodes) {
128
132
  appendCabinetFloorPlacedFootprints(node, nodes, [0, 0, 0], 0, footprints);
129
133
  return footprints;
130
134
  }
135
+ function cabinetRunOverlapsWallOpening({ levelId, node, nodes, position, rotation, }) {
136
+ const parentLevelId = (levelId ??
137
+ findLevelAncestorId(node.id, nodes));
138
+ if (!parentLevelId)
139
+ return false;
140
+ const candidate = { ...node, position: [...position], rotation };
141
+ return cabinetFloorPlacedFootprints(candidate, nodes).some((footprint) => {
142
+ if (!footprint.position)
143
+ return false;
144
+ const hit = findClosestCabinetWallInPlan({
145
+ excludeIds: [],
146
+ nodes: nodes,
147
+ parentLevelId,
148
+ planPoint: [footprint.position[0], footprint.position[2]],
149
+ yaw: footprint.rotation[1],
150
+ });
151
+ if (!hit)
152
+ return false;
153
+ const normalScale = hit.side === 'front' ? 1 : -1;
154
+ const expectedPerp = resolveCabinetWallFaceOffset({
155
+ hit,
156
+ nodes: nodes,
157
+ parentLevelId,
158
+ }) +
159
+ normalScale * (footprint.dimensions[2] / 2);
160
+ if (Math.abs(hit.perpDistance - expectedPerp) > 0.12)
161
+ return false;
162
+ return (findWallOpeningConflicts({
163
+ bottom: footprint.position[1],
164
+ height: footprint.dimensions[1],
165
+ localX: hit.localX,
166
+ nodes,
167
+ wall: hit.wall,
168
+ width: footprint.dimensions[0],
169
+ }).length > 0);
170
+ });
171
+ }
131
172
  const SIDE_HANDLE_OFFSET = 0.18;
132
173
  const HEIGHT_HANDLE_OFFSET = 0.22;
133
174
  const ROTATE_CORNER_OFFSET = 0.32;
@@ -135,6 +176,7 @@ const ROTATE_RING_OFFSET = 0.04;
135
176
  const MIN_CABINET_CARCASS_HEIGHT = 0.4;
136
177
  const CABINET_ADJACENCY_EPSILON = 1e-4;
137
178
  const CABINET_DEPTH_SNAP_THRESHOLD = 0.02;
179
+ const CABINET_WIDTH_SNAP_THRESHOLD = 0.08;
138
180
  function isCabinetModule(node) {
139
181
  return node?.type === 'cabinet-module';
140
182
  }
@@ -146,18 +188,32 @@ function hasCabinetParentId(node) {
146
188
  return (typeof parentId === 'string' &&
147
189
  (parentId.startsWith('cabinet_') || parentId.startsWith('cabinet-module_')));
148
190
  }
149
- function resolveCabinetGroupMoveSnap({ candidatePosition, levelId, movingIds, node, nodes, }) {
191
+ function resolveCabinetGroupMoveSnap({ candidatePosition, candidateRotation, levelId, movingIds, node, nodes, }) {
150
192
  if (node.type !== 'cabinet' || !levelId)
151
193
  return null;
152
194
  return resolveCabinetRunWallSnap({
153
195
  cabinet: node,
154
196
  candidatePosition,
197
+ candidateRotation,
155
198
  excludeIds: movingIds,
156
199
  gridStep: 0,
157
200
  nodes: nodes,
158
201
  parentLevelId: levelId,
159
202
  });
160
203
  }
204
+ function resolveCabinetMoveGridSnap({ candidatePosition, candidateRotation, gridStep, node, nodes, }) {
205
+ if (!isCabinetRun(node))
206
+ return candidatePosition;
207
+ const bounds = cabinetLocalBounds(node, nodes);
208
+ const snapped = resolveCabinetGridPosition({
209
+ raw: candidatePosition,
210
+ dimensions: bounds.size,
211
+ footprintOffset: [bounds.center[0], bounds.center[2]],
212
+ yaw: candidateRotation,
213
+ step: gridStep,
214
+ });
215
+ return [snapped[0], candidatePosition[1], snapped[2]];
216
+ }
161
217
  /**
162
218
  * Wall snap for a single dragged module. `parentFrame` kinds exchange
163
219
  * `candidatePosition` in the run's LOCAL frame with the move tool (it
@@ -173,7 +229,7 @@ function resolveCabinetModuleGroupMoveSnap({ candidatePosition, levelId, movingI
173
229
  const parentLevelId = (levelId ?? run.parentId ?? null);
174
230
  if (!parentLevelId)
175
231
  return null;
176
- return resolveCabinetModuleWallSnapLocal({
232
+ const position = resolveCabinetModuleWallSnapLocal({
177
233
  candidateLocal: candidatePosition,
178
234
  excludeIds: movingIds,
179
235
  module: node,
@@ -181,6 +237,7 @@ function resolveCabinetModuleGroupMoveSnap({ candidatePosition, levelId, movingI
181
237
  parentLevelId,
182
238
  run,
183
239
  });
240
+ return position ? { position } : null;
184
241
  }
185
242
  function cabinetLayoutRevision(metadata) {
186
243
  return cabinetMetadataRecord(metadata).cabinetLayoutRevision ?? null;
@@ -288,7 +345,7 @@ function includeCabinetModuleBounds(module, nodes, origin, bounds) {
288
345
  bounds.minX = Math.min(bounds.minX, x - module.width / 2);
289
346
  bounds.maxX = Math.max(bounds.maxX, x + module.width / 2);
290
347
  bounds.minY = Math.min(bounds.minY, y - (module.showPlinth ? module.plinthHeight : 0));
291
- bounds.maxY = Math.max(bounds.maxY, y + module.carcassHeight + (module.withCountertop ? module.countertopThickness : 0));
348
+ bounds.maxY = Math.max(bounds.maxY, y + cabinetModuleTotalHeight(module));
292
349
  bounds.minZ = Math.min(bounds.minZ, z - module.depth / 2);
293
350
  bounds.maxZ = Math.max(bounds.maxZ, z + module.depth / 2);
294
351
  for (const childId of module.children ?? []) {
@@ -327,7 +384,7 @@ function cabinetLocalBounds(node, nodes) {
327
384
  minX: -node.width / 2,
328
385
  maxX: node.width / 2,
329
386
  minY: 0,
330
- maxY: cabinetTotalHeight(node),
387
+ maxY: node.type === 'cabinet-module' ? cabinetModuleTotalHeight(node) : cabinetTotalHeight(node),
331
388
  minZ: -node.depth / 2,
332
389
  maxZ: node.depth / 2,
333
390
  };
@@ -343,7 +400,7 @@ function cabinetLocalBounds(node, nodes) {
343
400
  for (const module of modules) {
344
401
  includeCabinetModuleBounds(module, nodes, [0, 0, 0], bounds);
345
402
  }
346
- bounds.maxY += node.withCountertop ? node.countertopThickness : 0;
403
+ bounds.maxY = Math.max(bounds.maxY, cabinetTotalHeight(node));
347
404
  // A seating back overhang (unlike the small front/side overhang) is
348
405
  // deep enough to matter for selection and collision.
349
406
  if (node.withCountertop && node.barLedge?.edge !== 'back') {
@@ -609,7 +666,12 @@ function parentRunGeometryPreviewOverride(node, sceneApi) {
609
666
  if (!isCabinetModule(node) || !node.parentId)
610
667
  return null;
611
668
  const parent = sceneApi.get(node.parentId);
612
- return isCabinetRun(parent) ? [parent.id, {}] : null;
669
+ if (isCabinetRun(parent))
670
+ return [parent.id, {}];
671
+ if (!isCabinetModule(parent) || wallChildOf(parent, sceneApi.nodes())?.id !== node.id)
672
+ return null;
673
+ const run = parent.parentId ? sceneApi.get(parent.parentId) : undefined;
674
+ return isCabinetRun(run) ? [run.id, {}] : null;
613
675
  }
614
676
  function sharedDepthBounds(referenceDepth, targets, nodes) {
615
677
  const depthOwners = targets.flatMap((target) => {
@@ -745,6 +807,7 @@ function commitModuleResize(module, patch, sceneApi) {
745
807
  return;
746
808
  }
747
809
  if (typeof patch.width === 'number') {
810
+ const previousModule = module;
748
811
  sceneApi.update(module.id, patch);
749
812
  if (resolveCabinetType(module, parentRun) === 'base') {
750
813
  const wallChild = wallChildOf(module, sceneApi.nodes());
@@ -753,6 +816,12 @@ function commitModuleResize(module, patch, sceneApi) {
753
816
  }
754
817
  }
755
818
  bumpCabinetRunLayoutRevision(sceneApi, parentRun);
819
+ syncCornerRunsFromSourceModule({
820
+ module: sceneApi.get(module.id) ?? module,
821
+ previousModule,
822
+ run: sceneApi.get(parentRun.id) ?? parentRun,
823
+ sceneApi,
824
+ });
756
825
  return;
757
826
  }
758
827
  const modulePatch = { ...patch };
@@ -781,6 +850,7 @@ function commitModuleResize(module, patch, sceneApi) {
781
850
  }
782
851
  syncCornerRunsFromSourceModule({
783
852
  module: sceneApi.get(module.id) ?? module,
853
+ previousModule: module,
784
854
  run: sceneApi.get(parentRun.id) ?? parentRun,
785
855
  sceneApi,
786
856
  });
@@ -807,6 +877,156 @@ function commitCabinetResize(node, patch, sceneApi) {
807
877
  }
808
878
  sceneApi.update(node.id, patch);
809
879
  }
880
+ function cabinetManualWidthContext(node, sceneApi) {
881
+ const parent = node.parentId ? sceneApi.get(node.parentId) : undefined;
882
+ if (isCabinetRun(parent)) {
883
+ return { run: parent, selected: node, modules: cabinetModulesForRun(parent, sceneApi.nodes()) };
884
+ }
885
+ if (!isCabinetModule(parent))
886
+ return null;
887
+ const run = parent.parentId ? sceneApi.get(parent.parentId) : undefined;
888
+ if (!isCabinetRun(run) || wallChildOf(parent, sceneApi.nodes())?.id !== node.id)
889
+ return null;
890
+ return { run, selected: parent, modules: cabinetModulesForRun(run, sceneApi.nodes()) };
891
+ }
892
+ function cabinetWidthIsNestedModule(node, sceneApi) {
893
+ const context = cabinetManualWidthContext(node, sceneApi);
894
+ return context !== null && context.selected.id !== node.id;
895
+ }
896
+ function snapCabinetWidth(node, width, side, sceneApi) {
897
+ const context = cabinetManualWidthContext(node, sceneApi);
898
+ if (!context)
899
+ return width;
900
+ const sorted = sortRunModules(context.modules);
901
+ const selected = context.selected;
902
+ const selectedIndex = sorted.findIndex((module) => module.id === selected.id);
903
+ const neighborHost = sorted[side === 'right' ? selectedIndex + 1 : selectedIndex - 1];
904
+ if (!neighborHost)
905
+ return width;
906
+ const nested = selected.id !== node.id;
907
+ const snapTarget = nested ? wallChildOf(neighborHost, sceneApi.nodes()) : neighborHost;
908
+ if (!snapTarget)
909
+ return width;
910
+ const selectedCenter = nested
911
+ ? cabinetModuleRunLocalCenterX(node, sceneApi)
912
+ : selected.position[0];
913
+ const targetCenter = nested
914
+ ? cabinetModuleRunLocalCenterX(snapTarget, sceneApi)
915
+ : snapTarget.position[0];
916
+ if (selectedCenter === null || targetCenter === null)
917
+ return width;
918
+ const selectedEdge = selectedCenter + (side === 'right' ? node.width / 2 : -node.width / 2);
919
+ const neighborEdge = targetCenter + (side === 'right' ? -snapTarget.width / 2 : snapTarget.width / 2);
920
+ const gap = side === 'right' ? neighborEdge - selectedEdge : selectedEdge - neighborEdge;
921
+ if (gap <= CABINET_ADJACENCY_EPSILON)
922
+ return width;
923
+ const targetWidth = node.width + gap - (nested ? 0 : cabinetWallWidthGap(node, side, sceneApi));
924
+ return targetWidth > node.width && Math.abs(width - targetWidth) <= CABINET_WIDTH_SNAP_THRESHOLD
925
+ ? targetWidth
926
+ : width;
927
+ }
928
+ function cabinetIndependentWidthPatch(node, width, side, sceneApi) {
929
+ const sign = side === 'right' ? 1 : -1;
930
+ const gap = cabinetWallWidthGap(node, side, sceneApi);
931
+ const effectiveWidth = width + gap;
932
+ return {
933
+ width: effectiveWidth,
934
+ position: [
935
+ node.position[0] + (sign * (effectiveWidth - node.width)) / 2,
936
+ node.position[1],
937
+ node.position[2],
938
+ ],
939
+ };
940
+ }
941
+ function cabinetIndependentWidthPreviewOverrides(node, width, side, sceneApi) {
942
+ const overrides = [];
943
+ overrides.push([
944
+ node.id,
945
+ cabinetIndependentWidthPatch(node, width, side, sceneApi),
946
+ ]);
947
+ const parentRunOverride = parentRunGeometryPreviewOverride(node, sceneApi);
948
+ if (parentRunOverride)
949
+ overrides.push(parentRunOverride);
950
+ const gap = cabinetWallWidthGap(node, side, sceneApi);
951
+ const selectedWallOverride = wallCabinetWidthOverride(node, width + gap, sceneApi);
952
+ if (selectedWallOverride)
953
+ overrides.push(selectedWallOverride);
954
+ return overrides;
955
+ }
956
+ function previewCabinetCornerWidthOverrides(node, initialOverrides, sceneApi) {
957
+ const parent = node.parentId
958
+ ? sceneApi.get(node.parentId)
959
+ : undefined;
960
+ if (!parent || !isCabinetRun(parent))
961
+ return initialOverrides;
962
+ return previewCornerRunsFromRunSources({
963
+ baseLayout: 'width-only',
964
+ initialOverrides,
965
+ previousModules: cabinetModulesForRun(parent, sceneApi.nodes()),
966
+ run: parent,
967
+ sceneApi,
968
+ });
969
+ }
970
+ function cabinetManualWidthReflow(node, width, side, sceneApi) {
971
+ const context = cabinetManualWidthContext(node, sceneApi);
972
+ if (!context)
973
+ return null;
974
+ const wallGap = cabinetWallWidthGap(node, side, sceneApi);
975
+ const selectedWidth = width + wallGap;
976
+ const runConstraints = runWallConstraints(context.run, context.modules, sceneApi.nodes(), { widthGrowth: Math.max(0, selectedWidth - context.selected.width) });
977
+ const draggedEnd = side === 'right' ? runConstraints.right : runConstraints.left;
978
+ const clampedSelectedWidth = selectedWidth > context.selected.width && draggedEnd.constrained
979
+ ? Math.min(selectedWidth, context.selected.width + draggedEnd.slack)
980
+ : selectedWidth;
981
+ const reflowed = reflowCabinetRunModules(context.modules, context.selected.id, clampedSelectedWidth, {
982
+ resizeSide: side,
983
+ consumeAdjacentGap: true,
984
+ eligibleDonorIds: new Set(),
985
+ maximumWidth: MAX_CABINET_WIDTH,
986
+ });
987
+ return reflowed.length > 0 ? { ...context, reflowed, wallGap } : null;
988
+ }
989
+ function commitCabinetManualWidth(node, width, side, sceneApi) {
990
+ const reflow = cabinetManualWidthReflow(node, width, side, sceneApi);
991
+ if (!reflow)
992
+ return;
993
+ const reflowById = new Map(reflow.reflowed.map((entry) => [entry.id, entry]));
994
+ for (const module of reflow.modules) {
995
+ const next = reflowById.get(module.id);
996
+ if (!next)
997
+ continue;
998
+ const isSelected = module.id === reflow.selected.id;
999
+ const modulePatch = {
1000
+ width: next.width,
1001
+ position: next.position,
1002
+ };
1003
+ if (isSelected) {
1004
+ modulePatch.metadata = metadataForSelectedWidth(module, next.width);
1005
+ }
1006
+ else if (Math.abs(next.width - module.width) > 1e-4) {
1007
+ modulePatch.metadata = metadataWithPresetWidthDebt(module, reflow.selected.id, next.width - module.width);
1008
+ }
1009
+ const nestedCornerOverrides = nestedCornerRunPositionOverrides(module, next.position, sceneApi.nodes());
1010
+ sceneApi.update(module.id, modulePatch);
1011
+ for (const [id, override] of nestedCornerOverrides) {
1012
+ sceneApi.update(id, override);
1013
+ }
1014
+ const wallChild = wallChildOf(module, sceneApi.nodes());
1015
+ if (wallChild) {
1016
+ sceneApi.update(wallChild.id, {
1017
+ width: next.width,
1018
+ position: [0, wallChild.position[1], backAlignZ(module.depth, wallChild.depth)],
1019
+ });
1020
+ }
1021
+ }
1022
+ syncCornerRunsFromRunSources({
1023
+ baseLayout: 'width-only',
1024
+ previousModules: reflow.modules,
1025
+ run: sceneApi.get(reflow.run.id) ?? reflow.run,
1026
+ sceneApi,
1027
+ });
1028
+ bumpCabinetRunLayoutRevision(sceneApi, reflow.run);
1029
+ }
810
1030
  function cabinetWidthHandle(side) {
811
1031
  const sign = side === 'right' ? 1 : -1;
812
1032
  return {
@@ -816,26 +1036,40 @@ function cabinetWidthHandle(side) {
816
1036
  min: (node, sceneApi) => {
817
1037
  if (!isCabinetModule(node))
818
1038
  return MIN_CABINET_WIDTH;
819
- const gap = cabinetWallWidthGap(node, side, sceneApi);
820
- const connected = cabinetWidthConnectedNeighbor(node, side, sceneApi);
821
- if (!connected || isCabinetWidthFiller(connected))
822
- return MIN_CABINET_WIDTH - gap;
823
- const connectedMax = cabinetResizeUpperBound(connected.width, MAX_CABINET_WIDTH);
824
- return Math.max(MIN_CABINET_WIDTH - gap, node.width - (connectedMax - connected.width));
1039
+ const gap = cabinetWidthIsNestedModule(node, sceneApi)
1040
+ ? 0
1041
+ : cabinetWallWidthGap(node, side, sceneApi);
1042
+ return MIN_CABINET_WIDTH - gap;
825
1043
  },
826
1044
  max: (node, sceneApi) => {
827
1045
  const ownMax = cabinetResizeUpperBound(node.width, MAX_CABINET_WIDTH);
828
1046
  if (!isCabinetModule(node))
829
1047
  return ownMax;
830
- const gap = cabinetWallWidthGap(node, side, sceneApi);
831
- const connected = cabinetWidthConnectedNeighbor(node, side, sceneApi);
832
- if (!connected || isCabinetWidthFiller(connected))
833
- return ownMax - gap;
834
- return Math.min(ownMax - gap, node.width + connected.width - MIN_CABINET_WIDTH);
1048
+ const gap = cabinetWidthIsNestedModule(node, sceneApi)
1049
+ ? 0
1050
+ : cabinetWallWidthGap(node, side, sceneApi);
1051
+ return ownMax - gap;
835
1052
  },
1053
+ magneticSnap: (node, width, sceneApi) => isCabinetModule(node) ? snapCabinetWidth(node, width, side, sceneApi) : width,
836
1054
  currentValue: (node) => node.width,
837
- apply: (node, width, sceneApi) => {
838
- const gap = isCabinetModule(node) ? cabinetWallWidthGap(node, side, sceneApi) : 0;
1055
+ apply: (node, width, sceneApi, modifiers) => {
1056
+ if (isCabinetModule(node) && modifiers?.altKey) {
1057
+ return cabinetIndependentWidthPatch(node, width, side, sceneApi);
1058
+ }
1059
+ if (isCabinetModule(node) &&
1060
+ cabinetManualWidthContext(node, sceneApi) &&
1061
+ !cabinetWidthIsNestedModule(node, sceneApi)) {
1062
+ const reflow = cabinetManualWidthReflow(node, width, side, sceneApi);
1063
+ if (reflow) {
1064
+ const selected = reflow.reflowed.find((entry) => entry.id === reflow.selected.id);
1065
+ if (selected)
1066
+ return { width: selected.width, position: selected.position };
1067
+ }
1068
+ return { width: node.width, position: node.position };
1069
+ }
1070
+ const gap = isCabinetModule(node) && !cabinetWidthIsNestedModule(node, sceneApi)
1071
+ ? cabinetWallWidthGap(node, side, sceneApi)
1072
+ : 0;
839
1073
  const effectiveWidth = width + gap;
840
1074
  return {
841
1075
  width: effectiveWidth,
@@ -846,14 +1080,67 @@ function cabinetWidthHandle(side) {
846
1080
  ],
847
1081
  };
848
1082
  },
849
- previewOverrides: (node, width, sceneApi) => {
1083
+ previewOverrides: (node, width, sceneApi, modifiers) => {
850
1084
  if (!isCabinetModule(node))
851
1085
  return [];
1086
+ if (modifiers?.altKey) {
1087
+ return previewCabinetCornerWidthOverrides(node, cabinetIndependentWidthPreviewOverrides(node, width, side, sceneApi), sceneApi);
1088
+ }
1089
+ if (cabinetWidthIsNestedModule(node, sceneApi)) {
1090
+ const parentRunOverride = parentRunGeometryPreviewOverride(node, sceneApi);
1091
+ return parentRunOverride ? [parentRunOverride] : [];
1092
+ }
1093
+ const reflow = cabinetManualWidthReflow(node, width, side, sceneApi);
1094
+ if (reflow) {
1095
+ const overrides = [];
1096
+ const parentRunOverride = parentRunGeometryPreviewOverride(node, sceneApi);
1097
+ if (parentRunOverride)
1098
+ overrides.push(parentRunOverride);
1099
+ for (const entry of reflow.reflowed) {
1100
+ const module = reflow.modules.find((candidate) => candidate.id === entry.id);
1101
+ if (!module)
1102
+ continue;
1103
+ overrides.push([
1104
+ module.id,
1105
+ { width: entry.width, position: entry.position },
1106
+ ]);
1107
+ overrides.push(...nestedCornerRunPositionOverrides(module, entry.position, sceneApi.nodes()));
1108
+ const wallChild = wallChildOf(module, sceneApi.nodes());
1109
+ if (wallChild) {
1110
+ overrides.push([
1111
+ wallChild.id,
1112
+ {
1113
+ width: entry.width,
1114
+ position: [0, wallChild.position[1], backAlignZ(module.depth, wallChild.depth)],
1115
+ },
1116
+ ]);
1117
+ }
1118
+ }
1119
+ return previewCabinetCornerWidthOverrides(node, overrides, sceneApi);
1120
+ }
1121
+ if (cabinetManualWidthContext(node, sceneApi)) {
1122
+ const parentRunOverride = parentRunGeometryPreviewOverride(node, sceneApi);
1123
+ return parentRunOverride ? [parentRunOverride] : [];
1124
+ }
852
1125
  const overrides = [];
853
1126
  const parentRunOverride = parentRunGeometryPreviewOverride(node, sceneApi);
854
1127
  if (parentRunOverride)
855
1128
  overrides.push(parentRunOverride);
856
1129
  const gap = cabinetWallWidthGap(node, side, sceneApi);
1130
+ const effectiveWidth = width + gap;
1131
+ const selectedPosition = [
1132
+ node.position[0] + (sign * (effectiveWidth - node.width)) / 2,
1133
+ node.position[1],
1134
+ node.position[2],
1135
+ ];
1136
+ overrides.push([
1137
+ node.id,
1138
+ {
1139
+ width: effectiveWidth,
1140
+ position: selectedPosition,
1141
+ },
1142
+ ]);
1143
+ overrides.push(...nestedCornerRunPositionOverrides(node, selectedPosition, sceneApi.nodes()));
857
1144
  const selectedWallOverride = wallCabinetWidthOverride(node, width + gap, sceneApi);
858
1145
  if (selectedWallOverride)
859
1146
  overrides.push(selectedWallOverride);
@@ -863,19 +1150,45 @@ function cabinetWidthHandle(side) {
863
1150
  connectedResize.module.id,
864
1151
  connectedResize.patch,
865
1152
  ]);
1153
+ overrides.push(...nestedCornerRunPositionOverrides(connectedResize.module, connectedResize.patch.position, sceneApi.nodes()));
866
1154
  const connectedWallOverride = wallCabinetWidthOverride(connectedResize.module, connectedResize.patch.width, sceneApi);
867
1155
  if (connectedWallOverride)
868
1156
  overrides.push(connectedWallOverride);
869
1157
  }
870
- return overrides;
1158
+ return previewCabinetCornerWidthOverrides(node, overrides, sceneApi);
871
1159
  },
872
- commit: (node, patch, sceneApi) => {
1160
+ commit: (node, patch, sceneApi, modifiers) => {
1161
+ if (isCabinetModule(node) && typeof patch.width === 'number' && modifiers?.altKey) {
1162
+ commitCabinetResize(node, {
1163
+ ...patch,
1164
+ metadata: metadataForSelectedWidth(node, patch.width, patch.metadata),
1165
+ }, sceneApi);
1166
+ return;
1167
+ }
1168
+ if (isCabinetModule(node) && typeof patch.width === 'number') {
1169
+ if (cabinetWidthIsNestedModule(node, sceneApi)) {
1170
+ commitCabinetResize(node, patch, sceneApi);
1171
+ return;
1172
+ }
1173
+ commitCabinetManualWidth(node, patch.width - cabinetWallWidthGap(node, side, sceneApi), side, sceneApi);
1174
+ return;
1175
+ }
873
1176
  const connectedResize = isCabinetModule(node) && typeof patch.width === 'number'
874
1177
  ? connectedCabinetWidthResize(node, side, patch.width - node.width - cabinetWallWidthGap(node, side, sceneApi), sceneApi)
875
1178
  : null;
876
- commitCabinetResize(node, patch, sceneApi);
1179
+ const selectedPatch = isCabinetModule(node) && typeof patch.width === 'number'
1180
+ ? {
1181
+ ...patch,
1182
+ metadata: metadataForSelectedWidth(node, patch.width, patch.metadata),
1183
+ }
1184
+ : patch;
1185
+ commitCabinetResize(node, selectedPatch, sceneApi);
877
1186
  if (connectedResize) {
878
- commitCabinetResize(connectedResize.module, connectedResize.patch, sceneApi);
1187
+ const widthDelta = connectedResize.patch.width - connectedResize.module.width;
1188
+ commitCabinetResize(connectedResize.module, {
1189
+ ...connectedResize.patch,
1190
+ metadata: metadataWithPresetWidthDebt(connectedResize.module, node.id, widthDelta),
1191
+ }, sceneApi);
879
1192
  }
880
1193
  },
881
1194
  visible: (node, sceneApi) => !isCabinetModule(node) || cabinetModuleSideOpen(node, side, sceneApi),
@@ -1332,7 +1645,11 @@ function cabinetHeightHandle() {
1332
1645
  apply: (_node, carcassHeight) => ({ carcassHeight }),
1333
1646
  commit: commitCabinetResize,
1334
1647
  placement: {
1335
- position: (node) => [0, cabinetTotalHeight(node) + HEIGHT_HANDLE_OFFSET, 0],
1648
+ position: (node, sceneApi) => [
1649
+ 0,
1650
+ cabinetLocalBounds(node, sceneApi.nodes()).maxY + HEIGHT_HANDLE_OFFSET,
1651
+ 0,
1652
+ ],
1336
1653
  },
1337
1654
  };
1338
1655
  }
@@ -1407,25 +1724,40 @@ function isHoodOnlyCabinet(node) {
1407
1724
  const stack = stackForCabinet(node);
1408
1725
  return stack.length > 0 && stack.every((compartment) => isHoodCompartmentType(compartment.type));
1409
1726
  }
1727
+ function cabinetModuleHeightHandleVisible(node, sceneApi) {
1728
+ const parent = node.parentId ? sceneApi.get(node.parentId) : undefined;
1729
+ if (isCabinetRun(parent)) {
1730
+ return parent.runTier === 'wall' || resolveCabinetType(node, parent) === 'tall';
1731
+ }
1732
+ return isCabinetModule(parent) && wallChildOf(parent, sceneApi.nodes())?.id === node.id;
1733
+ }
1410
1734
  function cabinetModuleHandles() {
1411
1735
  return [
1412
1736
  {
1413
1737
  ...cabinetWidthHandle('left'),
1414
- visible: (node, sceneApi) => !isCabinetWidthFiller(node) && !cabinetModuleSideHasCornerFiller(node, 'left', sceneApi),
1738
+ visible: (node, sceneApi) => !isCabinetWidthFiller(node) &&
1739
+ !cabinetModuleUsesFixedApplianceWidth(node) &&
1740
+ !cabinetModuleSideHasCornerFiller(node, 'left', sceneApi),
1415
1741
  },
1416
1742
  {
1417
1743
  ...cabinetWidthHandle('right'),
1418
- visible: (node, sceneApi) => !isCabinetWidthFiller(node) && !cabinetModuleSideHasCornerFiller(node, 'right', sceneApi),
1744
+ visible: (node, sceneApi) => !isCabinetWidthFiller(node) &&
1745
+ !cabinetModuleUsesFixedApplianceWidth(node) &&
1746
+ !cabinetModuleSideHasCornerFiller(node, 'right', sceneApi),
1419
1747
  },
1420
1748
  {
1421
1749
  ...cabinetDepthHandle(),
1422
1750
  visible: (node) => !isCabinetWidthFiller(node),
1423
1751
  },
1752
+ {
1753
+ ...cabinetHeightHandle(),
1754
+ visible: cabinetModuleHeightHandleVisible,
1755
+ },
1424
1756
  ];
1425
1757
  }
1426
1758
  export const cabinetDefinition = {
1427
1759
  kind: 'cabinet',
1428
- schemaVersion: 7,
1760
+ schemaVersion: 8,
1429
1761
  schema: CabinetNode,
1430
1762
  category: 'furnish',
1431
1763
  surfaceRole: 'joinery',
@@ -1441,20 +1773,22 @@ export const cabinetDefinition = {
1441
1773
  runTier: 'base',
1442
1774
  children: [],
1443
1775
  width: 0.5,
1444
- depth: 0.5,
1445
- carcassHeight: 0.72,
1776
+ depth: CABINET_METRIC_DEFAULTS.depth,
1777
+ carcassHeight: CABINET_METRIC_DEFAULTS.carcassHeight,
1446
1778
  operationState: 0,
1447
- plinthHeight: 0.1,
1779
+ plinthHeight: CABINET_METRIC_DEFAULTS.plinthHeight,
1448
1780
  toeKickDepth: 0.075,
1449
1781
  boardThickness: 0.018,
1450
- countertopThickness: 0.02,
1782
+ countertopThickness: CABINET_METRIC_DEFAULTS.countertopThickness,
1451
1783
  countertopOverhang: 0.02,
1452
1784
  countertopBackOverhang: 0,
1453
1785
  withFinishedBack: false,
1454
1786
  withWaterfall: false,
1787
+ withFinishedEnds: false,
1455
1788
  frontThickness: 0.018,
1456
1789
  frontGap: 0.003,
1457
1790
  frontStyle: 'slab',
1791
+ panelReady: false,
1458
1792
  handleStyle: 'bar',
1459
1793
  handlePosition: 'auto',
1460
1794
  frontOverlay: 'full',
@@ -1467,8 +1801,18 @@ export const cabinetDefinition = {
1467
1801
  selectable: { hitVolume: 'bbox' },
1468
1802
  movable: {
1469
1803
  axes: ['x', 'z'],
1804
+ directDrag: true,
1470
1805
  gridSnap: true,
1471
- groupMoveSnap: resolveCabinetGroupMoveSnap,
1806
+ gridSnapPosition: resolveCabinetMoveGridSnap,
1807
+ groupMoveSnapPose: resolveCabinetGroupMoveSnap,
1808
+ isValidPosition: ({ node, position, rotation, levelId, nodes }) => node.type !== 'cabinet' ||
1809
+ !cabinetRunOverlapsWallOpening({
1810
+ levelId,
1811
+ node: node,
1812
+ nodes: nodes,
1813
+ position,
1814
+ rotation,
1815
+ }),
1472
1816
  override: ({ node }) => selectionProxyIdFromMetadata(node.metadata)
1473
1817
  ? { axes: [], gridSnap: false }
1474
1818
  : null,
@@ -1478,10 +1822,7 @@ export const cabinetDefinition = {
1478
1822
  deletable: true,
1479
1823
  surfaces: {
1480
1824
  top: {
1481
- height: (node) => {
1482
- const n = node;
1483
- return n.plinthHeight + n.carcassHeight + (n.withCountertop ? n.countertopThickness : 0);
1484
- },
1825
+ height: (node, context) => cabinetLocalBounds(node, context.nodes).maxY,
1485
1826
  },
1486
1827
  },
1487
1828
  floorPlaced: {
@@ -1504,7 +1845,7 @@ export const cabinetDefinition = {
1504
1845
  // Dirty-cascade: a dirtied run re-marks its hosted modules so their
1505
1846
  // composite geometry re-flows with the run (see `cascadeDirty`).
1506
1847
  relations: {
1507
- hosts: ['cabinet-module'],
1848
+ hosts: ['cabinet', 'cabinet-module'],
1508
1849
  },
1509
1850
  parametrics: cabinetParametrics,
1510
1851
  handles: cabinetHandles,
@@ -1529,10 +1870,12 @@ export const cabinetDefinition = {
1529
1870
  n.countertopBackOverhang,
1530
1871
  n.withFinishedBack,
1531
1872
  n.withWaterfall,
1873
+ n.withFinishedEnds,
1532
1874
  JSON.stringify(n.barLedge ?? null),
1533
1875
  n.frontThickness,
1534
1876
  n.frontGap,
1535
1877
  n.frontStyle,
1878
+ n.panelReady,
1536
1879
  n.handleStyle,
1537
1880
  n.handlePosition,
1538
1881
  n.frontOverlay,
@@ -1601,7 +1944,7 @@ export const cabinetDefinition = {
1601
1944
  };
1602
1945
  export const cabinetModuleDefinition = {
1603
1946
  kind: 'cabinet-module',
1604
- schemaVersion: 4,
1947
+ schemaVersion: 5,
1605
1948
  schema: CabinetModuleNode,
1606
1949
  category: 'furnish',
1607
1950
  surfaceRole: 'joinery',
@@ -1617,8 +1960,8 @@ export const cabinetModuleDefinition = {
1617
1960
  children: [],
1618
1961
  cabinetType: 'base',
1619
1962
  width: 0.5,
1620
- depth: 0.5,
1621
- carcassHeight: 0.72,
1963
+ depth: CABINET_METRIC_DEFAULTS.depth,
1964
+ carcassHeight: CABINET_METRIC_DEFAULTS.carcassHeight,
1622
1965
  operationState: 0,
1623
1966
  plinthHeight: 0,
1624
1967
  toeKickDepth: 0.075,
@@ -1632,7 +1975,11 @@ export const cabinetModuleDefinition = {
1632
1975
  moduleKind: 'standard',
1633
1976
  openSide: undefined,
1634
1977
  cornerShelf: false,
1978
+ topFinish: 'none',
1979
+ topFinishHeight: CabinetModuleNode.parse({}).topFinishHeight,
1980
+ topFinishDepth: 0.32,
1635
1981
  frontStyle: 'slab',
1982
+ panelReady: false,
1636
1983
  handleStyle: 'bar',
1637
1984
  handlePosition: 'auto',
1638
1985
  frontOverlay: 'full',
@@ -1645,9 +1992,10 @@ export const cabinetModuleDefinition = {
1645
1992
  selectable: { hitVolume: 'bbox' },
1646
1993
  movable: {
1647
1994
  axes: ['x', 'z'],
1995
+ directDrag: true,
1648
1996
  gridSnap: true,
1649
1997
  parentFrame: cabinetModuleParentFrame,
1650
- groupMoveSnap: resolveCabinetModuleGroupMoveSnap,
1998
+ groupMoveSnapPose: resolveCabinetModuleGroupMoveSnap,
1651
1999
  override: ({ node }) => selectionProxyIdFromMetadata(node.metadata)
1652
2000
  ? { axes: [], gridSnap: false }
1653
2001
  : null,
@@ -1660,13 +2008,7 @@ export const cabinetModuleDefinition = {
1660
2008
  footprint: (node) => {
1661
2009
  const n = node;
1662
2010
  return {
1663
- dimensions: [
1664
- n.width,
1665
- (n.showPlinth ? n.plinthHeight : 0) +
1666
- n.carcassHeight +
1667
- (n.withCountertop ? n.countertopThickness : 0),
1668
- n.depth,
1669
- ],
2011
+ dimensions: [n.width, cabinetModuleTotalHeight(n), n.depth],
1670
2012
  rotation: [0, n.rotation, 0],
1671
2013
  };
1672
2014
  },
@@ -1699,6 +2041,7 @@ export const cabinetModuleDefinition = {
1699
2041
  n.frontThickness,
1700
2042
  n.frontGap,
1701
2043
  n.frontStyle,
2044
+ n.panelReady,
1702
2045
  n.handleStyle,
1703
2046
  n.handlePosition,
1704
2047
  n.frontOverlay,
@@ -1707,6 +2050,9 @@ export const cabinetModuleDefinition = {
1707
2050
  n.withCountertop,
1708
2051
  n.openSide ?? null,
1709
2052
  n.cornerShelf ?? false,
2053
+ n.topFinish,
2054
+ n.topFinishHeight,
2055
+ n.topFinishDepth,
1710
2056
  JSON.stringify(n.material ?? null),
1711
2057
  JSON.stringify(n.materialPreset ?? null),
1712
2058
  JSON.stringify(n.slots ?? null),