@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 +1 @@
1
- {"version":3,"file":"panel.d.ts","sourceRoot":"","sources":["../../src/window/panel.tsx"],"names":[],"mappings":"AA6FA,MAAM,CAAC,OAAO,UAAU,WAAW,uCAy1BlC"}
1
+ {"version":3,"file":"panel.d.ts","sourceRoot":"","sources":["../../src/window/panel.tsx"],"names":[],"mappings":"AA6FA,MAAM,CAAC,OAAO,UAAU,WAAW,uCA21BlC"}
@@ -149,6 +149,8 @@ export default function WindowPanel() {
149
149
  rotation: [...node.rotation],
150
150
  side: node.side,
151
151
  wallId: node.wallId,
152
+ dormerId: node.dormerId,
153
+ dormerFace: node.dormerFace,
152
154
  roofSegmentId: node.roofSegmentId,
153
155
  roofFace: node.roofFace,
154
156
  parentId: node.parentId,
@@ -10,8 +10,8 @@ export const windowParametrics = {
10
10
  {
11
11
  label: 'Dimensions',
12
12
  fields: [
13
- { key: 'width', kind: 'number', unit: 'm', min: 0.3, max: 4, step: 0.05 },
14
- { key: 'height', kind: 'number', unit: 'm', min: 0.3, max: 4, step: 0.05 },
13
+ { key: 'width', kind: 'number', unit: 'm', min: 0.3, max: 1000, step: 0.05 },
14
+ { key: 'height', kind: 'number', unit: 'm', min: 0.3, max: 1000, step: 0.05 },
15
15
  ],
16
16
  },
17
17
  ],
@@ -1 +1 @@
1
- {"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../src/window/renderer.tsx"],"names":[],"mappings":"AAEA,OAAO,EAA+C,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAW/F,eAAO,MAAM,cAAc,GAAI,UAAU;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,gCA8C5D,CAAA;AAED,eAAe,cAAc,CAAA"}
1
+ {"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../src/window/renderer.tsx"],"names":[],"mappings":"AAEA,OAAO,EAA+C,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAW/F,eAAO,MAAM,cAAc,GAAI,UAAU;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,gCA4C5D,CAAA;AAED,eAAe,cAAc,CAAA"}
@@ -12,10 +12,8 @@ export const WindowRenderer = ({ node }) => {
12
12
  }, [node.id]);
13
13
  const handlers = useNodeEvents(node, 'window');
14
14
  const shading = useViewer((s) => s.shading);
15
- const liveVisible = useLiveNodeOverrides((s) => {
16
- const visible = s.get(node.id)?.visible;
17
- return typeof visible === 'boolean' ? visible : undefined;
18
- });
15
+ const liveOverrides = useLiveNodeOverrides((s) => s.get(node.id));
16
+ const renderNode = liveOverrides ? { ...node, ...liveOverrides } : node;
19
17
  const isTransient = !!node.metadata?.isTransient;
20
18
  const material = useMemo(() => {
21
19
  const mat = node.material;
@@ -29,9 +27,9 @@ export const WindowRenderer = ({ node }) => {
29
27
  node.material?.properties,
30
28
  node.material?.texture,
31
29
  ]);
32
- const mesh = (_jsx("mesh", { material: material, position: node.position, ref: ref, rotation: node.rotation, visible: liveVisible ?? node.visible, ...(isTransient ? {} : handlers), children: _jsx("boxGeometry", { args: [0, 0, 0] }) }));
33
- if (!node.roofSegmentId)
30
+ const mesh = (_jsx("mesh", { material: material, position: renderNode.position, ref: ref, rotation: renderNode.rotation, visible: renderNode.visible, ...(isTransient ? {} : handlers), children: _jsx("boxGeometry", { args: [0, 0, 0] }) }));
31
+ if (!renderNode.roofSegmentId)
34
32
  return mesh;
35
- return (_jsx(RoofFaceHostFrame, { roofFace: node.roofFace, roofSegmentId: node.roofSegmentId, children: mesh }));
33
+ return (_jsx(RoofFaceHostFrame, { roofFace: renderNode.roofFace, roofSegmentId: renderNode.roofSegmentId, children: mesh }));
36
34
  };
37
35
  export default WindowRenderer;
@@ -1 +1 @@
1
- {"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../src/window/tool.tsx"],"names":[],"mappings":"AAgFA;;;;;;;;;GASG;AACH,QAAA,MAAM,UAAU,EAAE,KAAK,CAAC,EA6uBvB,CAAA;AAED,eAAe,UAAU,CAAA"}
1
+ {"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../src/window/tool.tsx"],"names":[],"mappings":"AA+FA;;;;;;;;;GASG;AACH,QAAA,MAAM,UAAU,EAAE,KAAK,CAAC,EA09BvB,CAAA;AAED,eAAe,UAAU,CAAA"}
@@ -1,10 +1,10 @@
1
1
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { emitter, isCurvedWall, sceneRegistry, spatialGridManager, useScene, WallNode as WallNodeSchema, WindowNode, } from '@pascal-app/core';
3
- import { calculateCursorRotation, calculateItemRotation, EDITOR_LAYER, getSideFromNormal, isMagneticSnapActive, isValidWallSideFace, snapToHalf, triggerSFX, useAlignmentGuides, useEditor, useFacingPose, usePlacementPreview, } from '@pascal-app/editor';
4
- import { useViewer } from '@pascal-app/viewer';
2
+ import { dormerWallFacePointToDormer, emitter, getEffectiveNode, holdHiddenWallPointerEvents, isCurvedWall, sceneRegistry, spatialGridManager, useLiveNodeOverrides, useScene, WallNode as WallNodeSchema, WindowNode, } from '@pascal-app/core';
3
+ import { calculateItemRotation, clearPlacementSurface, EDITOR_LAYER, getSideFromNormal, isMagneticSnapActive, isValidWallSideFace, publishPlacementSurface, snapToHalf, triggerSFX, useAlignmentGuides, useEditor, useFacingPose, usePlacementPreview, useRegistryToolContext, } from '@pascal-app/editor';
5
4
  import { useEffect, useMemo, useRef, useState } from 'react';
6
5
  import { BoxGeometry, EdgesGeometry, Vector3 } from 'three';
7
6
  import { LineBasicNodeMaterial } from 'three/webgpu';
7
+ import { dormerEventFromHostedWindow, getDormerWindowWorldNormal, getDormerWindowWorldYaw, resolveDormerWindowTarget, } from '../shared/dormer-wall-opening-placement';
8
8
  import { clearOpeningGuides3D, publishOpeningGuidesForWallEvent, resolveSillSnap, } from '../shared/opening-guides-runtime';
9
9
  import { getRoofWallOpeningCursorPose, resolveRoofWallOpeningTarget, worldToSelectedBuildingLocal, } from '../shared/roof-wall-opening-placement';
10
10
  import { collectWallOpeningAlignmentCandidates, resolveWallSlideAlignment, } from '../shared/wall-opening-alignment';
@@ -38,6 +38,7 @@ const roofFallbackPoint = new Vector3();
38
38
  * engages only on an actual mesh hover — no proximity magnet.
39
39
  */
40
40
  const WindowTool = () => {
41
+ const { activeLevelId, isCameraDragging, selectNode } = useRegistryToolContext();
41
42
  const draftRef = useRef(null);
42
43
  const cursorGroupRef = useRef(null);
43
44
  const edgesRef = useRef(null);
@@ -86,7 +87,7 @@ const WindowTool = () => {
86
87
  if (live?.type !== 'window')
87
88
  return;
88
89
  draftRef.current = live;
89
- publishPlacementPreview(live, parentNode);
90
+ publishPlacementPreview(getEffectiveNode(live), parentNode);
90
91
  };
91
92
  let hostKind = null;
92
93
  // timeStamp of the most recent wall/roof mesh event. A wall/roof hover and
@@ -100,10 +101,11 @@ const WindowTool = () => {
100
101
  // to the last wall hover so the flip shows live before commit.
101
102
  let sideFlip = false;
102
103
  let lastWallEvent = null;
104
+ let lastDormerEvent = null;
103
105
  // Last open-floor cursor point (level-local X/Z) + floor Y, so an R-flip
104
106
  // while free-following can re-render the floating ghost with the new facing.
105
107
  let lastFloorPoint = null;
106
- const getLevelId = () => useViewer.getState().selection.levelId;
108
+ const getLevelId = () => activeLevelId;
107
109
  const getLevelYOffset = () => {
108
110
  const id = getLevelId();
109
111
  return id ? (sceneRegistry.nodes.get(id)?.position.y ?? 0) : 0;
@@ -119,6 +121,7 @@ const WindowTool = () => {
119
121
  return;
120
122
  }
121
123
  const wallId = draft.parentId;
124
+ useLiveNodeOverrides.getState().clear(draft.id);
122
125
  useScene.getState().deleteNode(draft.id);
123
126
  draftRef.current = null;
124
127
  clearPlacementPreview();
@@ -133,6 +136,7 @@ const WindowTool = () => {
133
136
  clearOpeningGuides3D();
134
137
  setFallbackPose(null);
135
138
  useFacingPose.getState().clear();
139
+ clearPlacementSurface();
136
140
  clearPlacementPreview();
137
141
  };
138
142
  // Alignment candidates — anchors of every alignable object; refreshed
@@ -203,6 +207,48 @@ const WindowTool = () => {
203
207
  const [x, , z] = worldToSelectedBuildingLocal(roofFallbackPoint.set(...event.position));
204
208
  showGhostAt([x, getLevelYOffset() + FALLBACK_HEIGHT / 2 + FALLBACK_SILL_LIFT, z], getLevelYOffset());
205
209
  };
210
+ const dormerWindowWorldPosition = (event, target) => {
211
+ const point = roofFallbackPoint.set(...dormerWallFacePointToDormer(event.node, target.face, target.position));
212
+ event.object.localToWorld(point);
213
+ return worldToSelectedBuildingLocal(point);
214
+ };
215
+ const applyDormerTarget = (event, target) => {
216
+ const side = sideFlip ? 'back' : 'front';
217
+ const itemRotation = sideFlip ? Math.PI : 0;
218
+ if (draftRef.current && draftRef.current.parentId !== event.node.id)
219
+ destroyDraft();
220
+ if (!draftRef.current) {
221
+ const node = WindowNode.parse({
222
+ position: target.position,
223
+ rotation: [0, itemRotation, 0],
224
+ side,
225
+ parentId: event.node.id,
226
+ dormerId: event.node.id,
227
+ dormerFace: target.face,
228
+ metadata: { isTransient: true },
229
+ });
230
+ useScene.getState().createNode(node, event.node.id);
231
+ draftRef.current = node;
232
+ }
233
+ else {
234
+ useLiveNodeOverrides.getState().set(draftRef.current.id, {
235
+ position: target.position,
236
+ rotation: [0, itemRotation, 0],
237
+ side,
238
+ parentId: event.node.id,
239
+ dormerId: event.node.id,
240
+ dormerFace: target.face,
241
+ wallId: undefined,
242
+ roofSegmentId: undefined,
243
+ roofFace: undefined,
244
+ });
245
+ }
246
+ publishDraftPreview(event.node);
247
+ clearOpeningGuides3D();
248
+ const worldPosition = dormerWindowWorldPosition(event, target);
249
+ publishPlacementSurface(new Vector3(...worldPosition), getDormerWindowWorldNormal(event, target));
250
+ updateCursor(worldPosition, getDormerWindowWorldYaw(event, target), target.valid, 0);
251
+ };
206
252
  // Sill alignment (snap + guide): a sibling sill/centre/top wins over the
207
253
  // grid when within threshold — it's the magnetic ("lines") component for the
208
254
  // vertical axis, so it runs only when magnetic snap is on; otherwise the
@@ -244,7 +290,7 @@ const WindowTool = () => {
244
290
  height,
245
291
  });
246
292
  const { clampedX, clampedY } = clampToWall(wall, localX, localY, width, height, useScene.getState().nodes);
247
- const valid = !hasWallChildOverlap(wall.id, clampedX, clampedY, width, height, ignoreId);
293
+ const valid = !hasWallChildOverlap(wall.id, useScene.getState().nodes, clampedX, clampedY, width, height, ignoreId);
248
294
  return { clampedX, clampedY, valid };
249
295
  };
250
296
  // Shared create/update path for the wall draft — used by the direct
@@ -269,7 +315,7 @@ const WindowTool = () => {
269
315
  }
270
316
  const { clampedX, clampedY, valid } = resolveWallPlacement(wall, rawLocalX, rawLocalY, width, height, applySnap, draftRef.current.id);
271
317
  if (wall.id === draftRef.current.parentId) {
272
- useScene.getState().updateNode(draftRef.current.id, {
318
+ useLiveNodeOverrides.getState().set(draftRef.current.id, {
273
319
  position: [clampedX, clampedY, 0],
274
320
  rotation: [0, itemRotation, 0],
275
321
  side,
@@ -277,6 +323,7 @@ const WindowTool = () => {
277
323
  markHostDirty(wall.id);
278
324
  }
279
325
  else {
326
+ useLiveNodeOverrides.getState().clear(draftRef.current.id);
280
327
  useScene.getState().updateNode(draftRef.current.id, {
281
328
  position: [clampedX, clampedY, 0],
282
329
  rotation: [0, itemRotation, 0],
@@ -314,6 +361,7 @@ const WindowTool = () => {
314
361
  clearPlacementPreview();
315
362
  draftRef.current = null;
316
363
  hostKind = null;
364
+ useLiveNodeOverrides.getState().clear(draft.id);
317
365
  useScene.getState().deleteNode(draft.id);
318
366
  useScene.temporal.getState().resume();
319
367
  const levelId = getLevelId();
@@ -349,7 +397,7 @@ const WindowTool = () => {
349
397
  sillThickness: draft.sillThickness,
350
398
  });
351
399
  useScene.getState().createNode(node, wall.id);
352
- useViewer.getState().setSelection({ selectedIds: [node.id] });
400
+ selectNode(node.id);
353
401
  triggerSFX('sfx:structure-build');
354
402
  useAlignmentGuides.getState().clear();
355
403
  clearOpeningGuides3D();
@@ -362,6 +410,64 @@ const WindowTool = () => {
362
410
  useEditor.getState().setTool(null);
363
411
  }
364
412
  };
413
+ const commitWindowAtDormer = (dormer, target) => {
414
+ const draft = draftRef.current;
415
+ if (!draft)
416
+ return;
417
+ clearPlacementPreview();
418
+ draftRef.current = null;
419
+ hostKind = null;
420
+ useLiveNodeOverrides.getState().clear(draft.id);
421
+ useScene.getState().deleteNode(draft.id);
422
+ useScene.temporal.getState().resume();
423
+ const state = useScene.getState();
424
+ const windowCount = Object.values(state.nodes).filter((node) => node.type === 'window').length;
425
+ const side = sideFlip ? 'back' : 'front';
426
+ const node = WindowNode.parse({
427
+ name: `Window ${windowCount + 1}`,
428
+ position: target.position,
429
+ rotation: [0, sideFlip ? Math.PI : 0, 0],
430
+ side,
431
+ parentId: dormer.id,
432
+ dormerId: dormer.id,
433
+ dormerFace: target.face,
434
+ width: draft.width,
435
+ height: draft.height,
436
+ material: draft.material,
437
+ slots: draft.slots,
438
+ openingKind: draft.openingKind,
439
+ windowType: draft.windowType,
440
+ operationState: draft.operationState,
441
+ awningDirection: draft.awningDirection,
442
+ casementStyle: draft.casementStyle,
443
+ hingesSide: draft.hingesSide,
444
+ openingShape: draft.openingShape,
445
+ openingRadiusMode: draft.openingRadiusMode,
446
+ openingCornerRadii: draft.openingCornerRadii,
447
+ cornerRadius: draft.cornerRadius,
448
+ archHeight: draft.archHeight,
449
+ frameThickness: draft.frameThickness,
450
+ frameDepth: draft.frameDepth,
451
+ columnRatios: draft.columnRatios,
452
+ rowRatios: draft.rowRatios,
453
+ columnDividerThickness: draft.columnDividerThickness,
454
+ rowDividerThickness: draft.rowDividerThickness,
455
+ sill: draft.sill,
456
+ sillDepth: draft.sillDepth,
457
+ sillThickness: draft.sillThickness,
458
+ });
459
+ state.createNode(node, dormer.id);
460
+ state.dirtyNodes.add(dormer.id);
461
+ selectNode(node.id);
462
+ triggerSFX('sfx:structure-build');
463
+ if (useEditor.getState().getContinuation('point') === 'repeat') {
464
+ useScene.temporal.getState().pause();
465
+ }
466
+ else {
467
+ hideCursor();
468
+ useEditor.getState().setTool(null);
469
+ }
470
+ };
365
471
  // ── Direct wall-mesh hover ──────────────────────────────────────
366
472
  const onWallHover = (event) => {
367
473
  hostKind = 'wall';
@@ -378,7 +484,12 @@ const WindowTool = () => {
378
484
  const side = sideFlip ? (faceSide === 'front' ? 'back' : 'front') : faceSide;
379
485
  const flipOffset = sideFlip ? Math.PI : 0;
380
486
  const itemRotation = calculateItemRotation(event.normal) + flipOffset;
381
- const cursorRotation = calculateCursorRotation(event.normal, event.node.start, event.node.end) + flipOffset;
487
+ // World yaw of a wall CHILD: the wall group is yawed -wallAngle and the
488
+ // node carries wall-local `itemRotation` — `calculateCursorRotation` was
489
+ // π off, pointing the facing triangle at the far side of the wall (see
490
+ // MoveDoorTool.applyPreview, which fixed the same class for moves).
491
+ const wallAngle = Math.atan2(event.node.end[1] - event.node.start[1], event.node.end[0] - event.node.start[0]);
492
+ const cursorRotation = itemRotation - wallAngle;
382
493
  applyWallTarget({
383
494
  wall: event.node,
384
495
  rawLocalX: event.localPosition[0],
@@ -421,7 +532,7 @@ const WindowTool = () => {
421
532
  // NOT snap from proximity — snapping engages only when the cursor ray
422
533
  // actually hovers a wall (onWallHover) or roof face (onRoofHover).
423
534
  const onGridFreeFollow = (event) => {
424
- if (useViewer.getState().cameraDragging)
535
+ if (isCameraDragging())
425
536
  return;
426
537
  // A wall/roof mesh handler processed this pointermove (shared DOM
427
538
  // timeStamp) — it owns the frame and has snapped the draft, so skip the
@@ -437,6 +548,83 @@ const WindowTool = () => {
437
548
  destroyDraft();
438
549
  showGhostAt([x, y + FALLBACK_HEIGHT / 2 + FALLBACK_SILL_LIFT, z], y);
439
550
  };
551
+ // ── Dormer wall faces ──────────────────────────────────────────
552
+ // Dormer windows use the same WindowNode mesh and inspector as regular
553
+ // windows, but their host frame is supplied by DormerRenderer.
554
+ const resolveDormerTarget = (event) => resolveDormerWindowTarget({
555
+ event,
556
+ width: draftRef.current?.width ?? FALLBACK_WIDTH,
557
+ height: draftRef.current?.height ?? FALLBACK_HEIGHT,
558
+ nodes: useScene.getState().nodes,
559
+ ignoreId: draftRef.current?.id,
560
+ snap: snapToHalf,
561
+ });
562
+ const showDormerFallbackCursor = (event) => {
563
+ const [x, y, z] = worldToSelectedBuildingLocal(roofFallbackPoint.set(...event.position));
564
+ showGhostAt([x, y, z], y);
565
+ };
566
+ const onDormerHover = (event) => {
567
+ hostKind = 'dormer';
568
+ lastMeshEventTime = event.nativeEvent?.timeStamp ?? -1;
569
+ lastDormerEvent = event;
570
+ const target = resolveDormerTarget(event);
571
+ if (!target) {
572
+ destroyDraft();
573
+ showDormerFallbackCursor(event);
574
+ return;
575
+ }
576
+ applyDormerTarget(event, target);
577
+ event.stopPropagation();
578
+ };
579
+ const onDormerClick = (event) => {
580
+ if (!draftRef.current || draftRef.current.parentId !== event.node.id)
581
+ return;
582
+ const target = resolveDormerTarget(event);
583
+ if (!target)
584
+ return;
585
+ if (!target.valid && event.nativeEvent?.altKey !== true)
586
+ return;
587
+ commitWindowAtDormer(event.node, target);
588
+ event.stopPropagation();
589
+ };
590
+ const onDormerLeave = () => {
591
+ if (hostKind !== 'dormer')
592
+ return;
593
+ lastDormerEvent = null;
594
+ destroyDraft();
595
+ hideCursor();
596
+ hostKind = null;
597
+ };
598
+ // The default dormer window is a real WindowNode and therefore sits in
599
+ // front of the dormer body for raycasting. While placing another window,
600
+ // translate hits on that child back into a dormer-local event so the
601
+ // placement tool does not fall through to the ground ghost.
602
+ const dormerEventFromWindow = (event) => {
603
+ const dormerId = event.node.dormerId ?? event.node.parentId;
604
+ const dormer = dormerId
605
+ ? useScene.getState().nodes[dormerId]
606
+ : undefined;
607
+ const object = dormer ? sceneRegistry.nodes.get(dormer.id) : undefined;
608
+ if (!(dormer?.type === 'dormer' && object))
609
+ return null;
610
+ return dormerEventFromHostedWindow(event, dormer, object);
611
+ };
612
+ const onDormerWindowHover = (event) => {
613
+ const dormerEvent = dormerEventFromWindow(event);
614
+ if (dormerEvent)
615
+ onDormerHover(dormerEvent);
616
+ };
617
+ const onDormerWindowClick = (event) => {
618
+ const dormerEvent = dormerEventFromWindow(event);
619
+ if (dormerEvent)
620
+ onDormerClick(dormerEvent);
621
+ };
622
+ const onDormerWindowLeave = (event) => {
623
+ if (event.node.dormerId ||
624
+ useScene.getState().nodes[event.node.parentId]?.type === 'dormer') {
625
+ onDormerLeave();
626
+ }
627
+ };
440
628
  // ── Roof-segment wall faces ─────────────────────────────────────
441
629
  // The merged roof mesh emits `roof:*`; hits are resolved against the
442
630
  // segments' vertical wall faces (base walls + coplanar gable ends),
@@ -473,7 +661,7 @@ const WindowTool = () => {
473
661
  if (draftRef.current && draftRef.current.parentId !== segment.id)
474
662
  destroyDraft();
475
663
  if (draftRef.current) {
476
- useScene.getState().updateNode(draftRef.current.id, {
664
+ useLiveNodeOverrides.getState().set(draftRef.current.id, {
477
665
  position,
478
666
  rotation: [0, 0, 0],
479
667
  roofFace: face.id,
@@ -512,6 +700,7 @@ const WindowTool = () => {
512
700
  clearPlacementPreview();
513
701
  draftRef.current = null;
514
702
  hostKind = null;
703
+ useLiveNodeOverrides.getState().clear(draft.id);
515
704
  useScene.getState().deleteNode(draft.id);
516
705
  useScene.temporal.getState().resume();
517
706
  const state = useScene.getState();
@@ -545,7 +734,7 @@ const WindowTool = () => {
545
734
  // Rebuild the segment (and the merged roof) so the wall brush
546
735
  // picks up the new opening cut.
547
736
  useScene.getState().dirtyNodes.add(segment.id);
548
- useViewer.getState().setSelection({ selectedIds: [node.id] });
737
+ selectNode(node.id);
549
738
  triggerSFX('sfx:structure-build');
550
739
  if (useEditor.getState().getContinuation('point') === 'repeat') {
551
740
  useScene.temporal.getState().pause();
@@ -586,6 +775,9 @@ const WindowTool = () => {
586
775
  if (lastWallEvent) {
587
776
  onWallHover(lastWallEvent);
588
777
  }
778
+ else if (lastDormerEvent) {
779
+ onDormerHover(lastDormerEvent);
780
+ }
589
781
  else if (lastFloorPoint) {
590
782
  showGhostAt(lastFloorPoint.pos, lastFloorPoint.floorY);
591
783
  }
@@ -599,15 +791,29 @@ const WindowTool = () => {
599
791
  emitter.on('roof:move', onRoofHover);
600
792
  emitter.on('roof:click', onRoofClick);
601
793
  emitter.on('roof:leave', onRoofLeave);
794
+ emitter.on('dormer:enter', onDormerHover);
795
+ emitter.on('dormer:move', onDormerHover);
796
+ emitter.on('dormer:click', onDormerClick);
797
+ emitter.on('dormer:leave', onDormerLeave);
798
+ emitter.on('window:enter', onDormerWindowHover);
799
+ emitter.on('window:move', onDormerWindowHover);
800
+ emitter.on('window:click', onDormerWindowClick);
801
+ emitter.on('window:leave', onDormerWindowLeave);
602
802
  emitter.on('grid:move', onGridFreeFollow);
603
803
  emitter.on('tool:cancel', onCancel);
604
804
  window.addEventListener('keydown', onKeyDown);
805
+ // Placement tracks the cursor through wall events; keep walls hidden by
806
+ // the wall-mode pass (X-ray 'down' mode) pointer-targetable while the
807
+ // tool is active so a new window still snaps onto them (see the wall
808
+ // renderer's pointer transparency).
809
+ const releaseHiddenWallHold = holdHiddenWallPointerEvents();
605
810
  return () => {
606
811
  destroyDraft();
607
812
  hideCursor();
608
813
  clearPlacementPreview();
609
814
  useAlignmentGuides.getState().clear();
610
815
  clearOpeningGuides3D();
816
+ releaseHiddenWallHold();
611
817
  useScene.temporal.getState().resume();
612
818
  emitter.off('wall:enter', onWallHover);
613
819
  emitter.off('wall:move', onWallHover);
@@ -617,11 +823,19 @@ const WindowTool = () => {
617
823
  emitter.off('roof:move', onRoofHover);
618
824
  emitter.off('roof:click', onRoofClick);
619
825
  emitter.off('roof:leave', onRoofLeave);
826
+ emitter.off('dormer:enter', onDormerHover);
827
+ emitter.off('dormer:move', onDormerHover);
828
+ emitter.off('dormer:click', onDormerClick);
829
+ emitter.off('dormer:leave', onDormerLeave);
830
+ emitter.off('window:enter', onDormerWindowHover);
831
+ emitter.off('window:move', onDormerWindowHover);
832
+ emitter.off('window:click', onDormerWindowClick);
833
+ emitter.off('window:leave', onDormerWindowLeave);
620
834
  emitter.off('grid:move', onGridFreeFollow);
621
835
  emitter.off('tool:cancel', onCancel);
622
836
  window.removeEventListener('keydown', onKeyDown);
623
837
  };
624
- }, []);
838
+ }, [activeLevelId, isCameraDragging, selectNode]);
625
839
  // Cursor geometry: window outline rectangle. Static dims, so build it once and
626
840
  // dispose on unmount rather than reallocating (and orphaning) an EdgesGeometry
627
841
  // on every re-render during placement.
@@ -8,9 +8,9 @@ export declare const zoneMoveVertexAffordance: import("@pascal-app/core").Floorp
8
8
  polygon: [number, number][];
9
9
  autoFromWalls: boolean;
10
10
  boundaryWallIds: `wall_${string}`[];
11
- spaceRole: "generic" | "room";
11
+ spaceRole: "room" | "generic";
12
12
  roomNumber: string;
13
- enclosureStatus: "auto" | "enclosed" | "open";
13
+ enclosureStatus: "auto" | "open" | "enclosed";
14
14
  floorFinish: string;
15
15
  wallFinish: string;
16
16
  ceilingFinish: string;
@@ -18,7 +18,7 @@ export declare const zoneMoveVertexAffordance: import("@pascal-app/core").Floorp
18
18
  occupancy: string;
19
19
  clearDimensionPolicy: "none" | "inside-faces" | "finish-faces";
20
20
  color: string;
21
- metadata: import("zod").JSONType;
21
+ metadata: Record<string, unknown>;
22
22
  camera?: {
23
23
  position: [number, number, number];
24
24
  target: [number, number, number];
@@ -37,9 +37,9 @@ export declare const zoneAddVertexAffordance: import("@pascal-app/core").Floorpl
37
37
  polygon: [number, number][];
38
38
  autoFromWalls: boolean;
39
39
  boundaryWallIds: `wall_${string}`[];
40
- spaceRole: "generic" | "room";
40
+ spaceRole: "room" | "generic";
41
41
  roomNumber: string;
42
- enclosureStatus: "auto" | "enclosed" | "open";
42
+ enclosureStatus: "auto" | "open" | "enclosed";
43
43
  floorFinish: string;
44
44
  wallFinish: string;
45
45
  ceilingFinish: string;
@@ -47,7 +47,7 @@ export declare const zoneAddVertexAffordance: import("@pascal-app/core").Floorpl
47
47
  occupancy: string;
48
48
  clearDimensionPolicy: "none" | "inside-faces" | "finish-faces";
49
49
  color: string;
50
- metadata: import("zod").JSONType;
50
+ metadata: Record<string, unknown>;
51
51
  camera?: {
52
52
  position: [number, number, number];
53
53
  target: [number, number, number];
@@ -66,9 +66,9 @@ export declare const zoneMoveEdgeAffordance: import("@pascal-app/core").Floorpla
66
66
  polygon: [number, number][];
67
67
  autoFromWalls: boolean;
68
68
  boundaryWallIds: `wall_${string}`[];
69
- spaceRole: "generic" | "room";
69
+ spaceRole: "room" | "generic";
70
70
  roomNumber: string;
71
- enclosureStatus: "auto" | "enclosed" | "open";
71
+ enclosureStatus: "auto" | "open" | "enclosed";
72
72
  floorFinish: string;
73
73
  wallFinish: string;
74
74
  ceilingFinish: string;
@@ -76,7 +76,7 @@ export declare const zoneMoveEdgeAffordance: import("@pascal-app/core").Floorpla
76
76
  occupancy: string;
77
77
  clearDimensionPolicy: "none" | "inside-faces" | "finish-faces";
78
78
  color: string;
79
- metadata: import("zod").JSONType;
79
+ metadata: Record<string, unknown>;
80
80
  camera?: {
81
81
  position: [number, number, number];
82
82
  target: [number, number, number];
@@ -95,9 +95,9 @@ export declare const zoneDeleteVertexAffordance: import("@pascal-app/core").Floo
95
95
  polygon: [number, number][];
96
96
  autoFromWalls: boolean;
97
97
  boundaryWallIds: `wall_${string}`[];
98
- spaceRole: "generic" | "room";
98
+ spaceRole: "room" | "generic";
99
99
  roomNumber: string;
100
- enclosureStatus: "auto" | "enclosed" | "open";
100
+ enclosureStatus: "auto" | "open" | "enclosed";
101
101
  floorFinish: string;
102
102
  wallFinish: string;
103
103
  ceilingFinish: string;
@@ -105,7 +105,7 @@ export declare const zoneDeleteVertexAffordance: import("@pascal-app/core").Floo
105
105
  occupancy: string;
106
106
  clearDimensionPolicy: "none" | "inside-faces" | "finish-faces";
107
107
  color: string;
108
- metadata: import("zod").JSONType;
108
+ metadata: Record<string, unknown>;
109
109
  camera?: {
110
110
  position: [number, number, number];
111
111
  target: [number, number, number];
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@pascal-app/nodes",
3
- "version": "1.0.0-beta.5",
4
- "description": "Built-in node bundles for the Pascal 3D editor — one folder per kind, exported as `builtinPlugin`",
3
+ "version": "1.0.0",
4
+ "description": "Built-in node bundles for the Pascal 3D editor \u2014 one folder per kind, exported as `builtinPlugin`",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "types": "./dist/index.d.ts",
@@ -23,24 +23,26 @@
23
23
  "prepublishOnly": "bun run build && bun test"
24
24
  },
25
25
  "peerDependencies": {
26
- "@pascal-app/core": "^1.0.0-beta.5",
27
- "@pascal-app/editor": "^1.0.0-beta.5",
28
- "@pascal-app/viewer": "^1.0.0-beta.5",
26
+ "@pascal-app/core": "^1.0.0",
27
+ "@pascal-app/editor": "^1.0.0",
28
+ "@pascal-app/viewer": "^1.0.0",
29
29
  "@react-three/drei": "^10",
30
30
  "@react-three/fiber": "^9",
31
31
  "lucide-react": "^1",
32
32
  "react": "^18 || ^19",
33
- "three": "^0.185",
33
+ "react-dom": "^18 || ^19",
34
+ "three": "^0.186",
34
35
  "zustand": "^5"
35
36
  },
36
37
  "devDependencies": {
37
- "@pascal-app/core": "^1.0.0-beta.5",
38
- "@pascal-app/editor": "^1.0.0-beta.5",
39
- "@pascal-app/viewer": "^1.0.0-beta.5",
38
+ "@pascal-app/core": "^1.0.0",
39
+ "@pascal-app/editor": "^1.0.0",
40
+ "@pascal-app/viewer": "^1.0.0",
40
41
  "@pascal/typescript-config": "*",
41
42
  "@types/bun": "^1.3.0",
42
43
  "@types/node": "^22.19.12",
43
44
  "@types/react": "^19.2.2",
45
+ "@types/react-dom": "^19.2.3",
44
46
  "@types/three": "^0.184.0",
45
47
  "typescript": "6.0.3"
46
48
  },
@@ -1,14 +0,0 @@
1
- import type { DormerNode } from '@pascal-app/core';
2
- /**
3
- * The Window tab of the dormer inspector: Hung Wall, Opening, Shape
4
- * (with rounded/arch sub-controls), Frame, Grid, Sill. Owns local UI
5
- * state for the "All vs Individual" corner-radius view mode — derived
6
- * from tuple uniformity by default.
7
- */
8
- export declare function DormerWindowSection({ node, previewProp, commitProp, handleUpdate, }: {
9
- node: DormerNode;
10
- previewProp: (updates: Partial<DormerNode>) => void;
11
- commitProp: (updates: Partial<DormerNode>) => void;
12
- handleUpdate: (updates: Partial<DormerNode>) => void;
13
- }): import("react").JSX.Element;
14
- //# sourceMappingURL=panel-window-section.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"panel-window-section.d.ts","sourceRoot":"","sources":["../../src/dormer/panel-window-section.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAWlD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,EAClC,IAAI,EACJ,WAAW,EACX,UAAU,EACV,YAAY,GACb,EAAE;IACD,IAAI,EAAE,UAAU,CAAA;IAChB,WAAW,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,KAAK,IAAI,CAAA;IACnD,UAAU,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,KAAK,IAAI,CAAA;IAClD,YAAY,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,KAAK,IAAI,CAAA;CACrD,+BA6RA"}