@pascal-app/nodes 1.0.1 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (867) hide show
  1. package/dist/block/definition.d.ts.map +1 -1
  2. package/dist/block/definition.js +22 -4
  3. package/dist/block/face-host.d.ts.map +1 -1
  4. package/dist/block/face-host.js +19 -2
  5. package/dist/block/floorplan.d.ts +11 -1
  6. package/dist/block/floorplan.d.ts.map +1 -1
  7. package/dist/block/floorplan.js +81 -13
  8. package/dist/block/geometry.d.ts +2 -2
  9. package/dist/block/geometry.d.ts.map +1 -1
  10. package/dist/block/geometry.js +39 -24
  11. package/dist/block/hosted-edit.d.ts +13 -0
  12. package/dist/block/hosted-edit.d.ts.map +1 -0
  13. package/dist/block/hosted-edit.js +230 -0
  14. package/dist/block/last-operation.d.ts +1 -1
  15. package/dist/block/last-operation.d.ts.map +1 -1
  16. package/dist/block/last-operation.js +6 -4
  17. package/dist/block/material-slots.d.ts +1 -3
  18. package/dist/block/material-slots.d.ts.map +1 -1
  19. package/dist/block/material-slots.js +1 -11
  20. package/dist/block/modal-session.d.ts +2 -1
  21. package/dist/block/modal-session.d.ts.map +1 -1
  22. package/dist/block/modal-session.js +2 -2
  23. package/dist/block/paint.d.ts.map +1 -1
  24. package/dist/block/paint.js +4 -10
  25. package/dist/block/panel.d.ts.map +1 -1
  26. package/dist/block/panel.js +8 -3
  27. package/dist/block/selection.d.ts.map +1 -1
  28. package/dist/block/selection.js +83 -25
  29. package/dist/block/surface.d.ts +4 -0
  30. package/dist/block/surface.d.ts.map +1 -0
  31. package/dist/block/surface.js +54 -0
  32. package/dist/block/use-block-face-operation.d.ts +2 -2
  33. package/dist/block/use-block-face-operation.d.ts.map +1 -1
  34. package/dist/block/use-block-face-operation.js +25 -11
  35. package/dist/box-vent/definition.d.ts.map +1 -1
  36. package/dist/box-vent/definition.js +3 -5
  37. package/dist/box-vent/panel.d.ts.map +1 -1
  38. package/dist/box-vent/panel.js +5 -28
  39. package/dist/building/renderer.d.ts.map +1 -1
  40. package/dist/building/renderer.js +1 -1
  41. package/dist/cabinet/countertop-layout.d.ts +13 -2
  42. package/dist/cabinet/countertop-layout.d.ts.map +1 -1
  43. package/dist/cabinet/definition.d.ts.map +1 -1
  44. package/dist/cabinet/definition.js +4 -3
  45. package/dist/cabinet/floorplan.d.ts.map +1 -1
  46. package/dist/cabinet/floorplan.js +125 -28
  47. package/dist/cabinet/geometry/shared.d.ts +1 -2
  48. package/dist/cabinet/geometry/shared.d.ts.map +1 -1
  49. package/dist/cabinet/geometry/shared.js +1 -2
  50. package/dist/cabinet/hosted-resize.d.ts +3 -6
  51. package/dist/cabinet/hosted-resize.d.ts.map +1 -1
  52. package/dist/cabinet/hosted-resize.js +9 -153
  53. package/dist/cabinet/placement-snap.d.ts.map +1 -1
  54. package/dist/cabinet/placement-snap.js +4 -2
  55. package/dist/cabinet/run-layout.d.ts.map +1 -1
  56. package/dist/cabinet/run-layout.js +8 -5
  57. package/dist/cabinet/run-ops.d.ts +13 -2
  58. package/dist/cabinet/run-ops.d.ts.map +1 -1
  59. package/dist/cabinet/surfaces.d.ts +1 -0
  60. package/dist/cabinet/surfaces.d.ts.map +1 -1
  61. package/dist/cabinet/surfaces.js +13 -1
  62. package/dist/cabinet/tool.d.ts.map +1 -1
  63. package/dist/cabinet/tool.js +30 -28
  64. package/dist/cabinet/wall-snap.d.ts.map +1 -1
  65. package/dist/cabinet/wall-snap.js +8 -8
  66. package/dist/ceiling/boundary-editor.d.ts.map +1 -1
  67. package/dist/ceiling/boundary-editor.js +5 -3
  68. package/dist/ceiling/definition.d.ts +4 -4
  69. package/dist/ceiling/definition.d.ts.map +1 -1
  70. package/dist/ceiling/definition.js +20 -15
  71. package/dist/ceiling/floorplan-affordances.d.ts +84 -4
  72. package/dist/ceiling/floorplan-affordances.d.ts.map +1 -1
  73. package/dist/ceiling/floorplan-affordances.js +0 -1
  74. package/dist/ceiling/floorplan-move.d.ts.map +1 -1
  75. package/dist/ceiling/floorplan-move.js +0 -1
  76. package/dist/ceiling/floorplan.d.ts +1 -1
  77. package/dist/ceiling/floorplan.d.ts.map +1 -1
  78. package/dist/ceiling/floorplan.js +2 -1
  79. package/dist/ceiling/height-bounds.d.ts +19 -0
  80. package/dist/ceiling/height-bounds.d.ts.map +1 -0
  81. package/dist/ceiling/height-bounds.js +24 -0
  82. package/dist/ceiling/hole-editor.d.ts.map +1 -1
  83. package/dist/ceiling/hole-editor.js +3 -4
  84. package/dist/ceiling/materials.d.ts +1 -1
  85. package/dist/ceiling/materials.d.ts.map +1 -1
  86. package/dist/ceiling/materials.js +10 -3
  87. package/dist/ceiling/paint.d.ts +2 -8
  88. package/dist/ceiling/paint.d.ts.map +1 -1
  89. package/dist/ceiling/paint.js +121 -24
  90. package/dist/ceiling/panel.d.ts.map +1 -1
  91. package/dist/ceiling/panel.js +40 -23
  92. package/dist/ceiling/renderer.d.ts.map +1 -1
  93. package/dist/ceiling/renderer.js +43 -6
  94. package/dist/chimney/definition.d.ts.map +1 -1
  95. package/dist/chimney/definition.js +1 -0
  96. package/dist/chimney/move-tool.d.ts.map +1 -1
  97. package/dist/chimney/move-tool.js +8 -2
  98. package/dist/chimney/paint.d.ts.map +1 -1
  99. package/dist/chimney/paint.js +3 -10
  100. package/dist/column/definition.d.ts.map +1 -1
  101. package/dist/column/definition.js +34 -5
  102. package/dist/column/floorplan-affordances.d.ts.map +1 -1
  103. package/dist/column/floorplan-affordances.js +11 -1
  104. package/dist/column/floorplan.d.ts +1 -1
  105. package/dist/column/floorplan.d.ts.map +1 -1
  106. package/dist/column/floorplan.js +69 -12
  107. package/dist/column/hosted-resize.d.ts +215 -0
  108. package/dist/column/hosted-resize.d.ts.map +1 -0
  109. package/dist/column/hosted-resize.js +9 -0
  110. package/dist/column/panel.d.ts.map +1 -1
  111. package/dist/column/panel.js +153 -149
  112. package/dist/column/renderer.d.ts.map +1 -1
  113. package/dist/column/renderer.js +29 -105
  114. package/dist/column/shape.d.ts +22 -0
  115. package/dist/column/shape.d.ts.map +1 -0
  116. package/dist/column/shape.js +120 -0
  117. package/dist/column/surface.d.ts +4 -0
  118. package/dist/column/surface.d.ts.map +1 -0
  119. package/dist/column/surface.js +73 -0
  120. package/dist/construction-dimension/floorplan.js +7 -3
  121. package/dist/cupola/definition.d.ts.map +1 -1
  122. package/dist/cupola/definition.js +3 -8
  123. package/dist/cupola/panel.d.ts.map +1 -1
  124. package/dist/cupola/panel.js +5 -23
  125. package/dist/door/definition.d.ts.map +1 -1
  126. package/dist/door/definition.js +52 -4
  127. package/dist/door/door-math.d.ts +6 -11
  128. package/dist/door/door-math.d.ts.map +1 -1
  129. package/dist/door/door-math.js +13 -17
  130. package/dist/door/floorplan-affordances.d.ts.map +1 -1
  131. package/dist/door/floorplan-affordances.js +8 -12
  132. package/dist/door/floorplan-move.d.ts.map +1 -1
  133. package/dist/door/floorplan-move.js +3 -1
  134. package/dist/door/floorplan.d.ts.map +1 -1
  135. package/dist/door/floorplan.js +55 -21
  136. package/dist/door/mechanism.d.ts +4 -0
  137. package/dist/door/mechanism.d.ts.map +1 -0
  138. package/dist/door/mechanism.js +24 -0
  139. package/dist/door/move-tool.d.ts.map +1 -1
  140. package/dist/door/move-tool.js +75 -52
  141. package/dist/door/paint.d.ts.map +1 -1
  142. package/dist/door/paint.js +3 -0
  143. package/dist/door/panel.d.ts.map +1 -1
  144. package/dist/door/panel.js +54 -308
  145. package/dist/door/placement.d.ts +45 -0
  146. package/dist/door/placement.d.ts.map +1 -0
  147. package/dist/door/placement.js +51 -0
  148. package/dist/door/preview.d.ts.map +1 -1
  149. package/dist/door/preview.js +2 -0
  150. package/dist/door/renderer.d.ts.map +1 -1
  151. package/dist/door/renderer.js +3 -2
  152. package/dist/door/tool.d.ts.map +1 -1
  153. package/dist/door/tool.js +112 -23
  154. package/dist/dormer/csg-geometry.d.ts.map +1 -1
  155. package/dist/dormer/csg-geometry.js +2 -0
  156. package/dist/dormer/definition.d.ts.map +1 -1
  157. package/dist/dormer/definition.js +1 -0
  158. package/dist/dormer/paint.d.ts.map +1 -1
  159. package/dist/dormer/paint.js +2 -5
  160. package/dist/dormer/panel.d.ts.map +1 -1
  161. package/dist/dormer/panel.js +4 -14
  162. package/dist/downspout/definition.d.ts.map +1 -1
  163. package/dist/downspout/definition.js +3 -2
  164. package/dist/duct-fitting/definition.d.ts.map +1 -1
  165. package/dist/duct-fitting/definition.js +2 -1
  166. package/dist/duct-fitting/geometry.d.ts.map +1 -1
  167. package/dist/duct-fitting/geometry.js +1 -1
  168. package/dist/duct-fitting/move-tool.d.ts.map +1 -1
  169. package/dist/duct-fitting/move-tool.js +8 -2
  170. package/dist/duct-segment/definition.d.ts.map +1 -1
  171. package/dist/duct-segment/definition.js +2 -2
  172. package/dist/duct-segment/geometry.d.ts.map +1 -1
  173. package/dist/duct-segment/geometry.js +1 -1
  174. package/dist/duct-segment/move-tool.d.ts.map +1 -1
  175. package/dist/duct-segment/move-tool.js +8 -2
  176. package/dist/duct-segment/tool.d.ts.map +1 -1
  177. package/dist/duct-segment/tool.js +11 -0
  178. package/dist/duct-terminal/tool.d.ts.map +1 -1
  179. package/dist/duct-terminal/tool.js +77 -8
  180. package/dist/elevator/definition.d.ts.map +1 -1
  181. package/dist/elevator/definition.js +3 -2
  182. package/dist/elevator/panel.d.ts.map +1 -1
  183. package/dist/elevator/panel.js +5 -27
  184. package/dist/elevator/parametrics.d.ts.map +1 -1
  185. package/dist/elevator/parametrics.js +98 -1
  186. package/dist/elevator/renderer.d.ts.map +1 -1
  187. package/dist/elevator/renderer.js +3 -4
  188. package/dist/eyebrow-vent/definition.d.ts.map +1 -1
  189. package/dist/eyebrow-vent/definition.js +3 -5
  190. package/dist/eyebrow-vent/paint.d.ts.map +1 -1
  191. package/dist/eyebrow-vent/paint.js +3 -6
  192. package/dist/eyebrow-vent/panel.d.ts.map +1 -1
  193. package/dist/eyebrow-vent/panel.js +5 -23
  194. package/dist/fence/actions/move-endpoint.d.ts +1 -1
  195. package/dist/fence/actions/move-endpoint.d.ts.map +1 -1
  196. package/dist/fence/actions/move-endpoint.js +2 -1
  197. package/dist/fence/definition.d.ts +2 -1
  198. package/dist/fence/definition.d.ts.map +1 -1
  199. package/dist/fence/definition.js +84 -28
  200. package/dist/fence/drafting.d.ts +36 -0
  201. package/dist/fence/drafting.d.ts.map +1 -0
  202. package/dist/fence/drafting.js +210 -0
  203. package/dist/fence/feature-tool.d.ts +4 -0
  204. package/dist/fence/feature-tool.d.ts.map +1 -0
  205. package/dist/fence/feature-tool.js +140 -0
  206. package/dist/fence/features.d.ts +2 -0
  207. package/dist/fence/features.d.ts.map +1 -0
  208. package/dist/fence/features.js +12 -0
  209. package/dist/fence/floorplan-affordances.d.ts.map +1 -1
  210. package/dist/fence/floorplan-affordances.js +2 -1
  211. package/dist/fence/floorplan.d.ts +2 -3
  212. package/dist/fence/floorplan.d.ts.map +1 -1
  213. package/dist/fence/floorplan.js +131 -71
  214. package/dist/fence/geometry-parts.d.ts +50 -0
  215. package/dist/fence/geometry-parts.d.ts.map +1 -0
  216. package/dist/fence/geometry-parts.js +1144 -0
  217. package/dist/fence/geometry.d.ts +2 -3
  218. package/dist/fence/geometry.d.ts.map +1 -1
  219. package/dist/fence/geometry.js +84 -7
  220. package/dist/fence/index.d.ts +1 -0
  221. package/dist/fence/index.d.ts.map +1 -1
  222. package/dist/fence/index.js +1 -0
  223. package/dist/fence/inspector-editors.d.ts +15 -0
  224. package/dist/fence/inspector-editors.d.ts.map +1 -1
  225. package/dist/fence/inspector-editors.js +128 -3
  226. package/dist/fence/lift.d.ts.map +1 -1
  227. package/dist/fence/lift.js +5 -2
  228. package/dist/fence/move-tool.js +2 -1
  229. package/dist/fence/panel-model.d.ts +4 -0
  230. package/dist/fence/panel-model.d.ts.map +1 -0
  231. package/dist/fence/panel-model.js +12 -0
  232. package/dist/fence/parametrics.d.ts +0 -12
  233. package/dist/fence/parametrics.d.ts.map +1 -1
  234. package/dist/fence/parametrics.js +185 -18
  235. package/dist/fence/system.d.ts.map +1 -1
  236. package/dist/fence/system.js +141 -31
  237. package/dist/fence/tool.d.ts.map +1 -1
  238. package/dist/fence/tool.js +257 -48
  239. package/dist/fence-feature/actions.d.ts +7 -0
  240. package/dist/fence-feature/actions.d.ts.map +1 -0
  241. package/dist/fence-feature/actions.js +26 -0
  242. package/dist/fence-feature/definition.d.ts +4 -0
  243. package/dist/fence-feature/definition.d.ts.map +1 -0
  244. package/dist/fence-feature/definition.js +112 -0
  245. package/dist/fence-feature/floorplan-affordances.d.ts +3 -0
  246. package/dist/fence-feature/floorplan-affordances.d.ts.map +1 -0
  247. package/dist/fence-feature/floorplan-affordances.js +37 -0
  248. package/dist/fence-feature/floorplan.d.ts +4 -0
  249. package/dist/fence-feature/floorplan.d.ts.map +1 -0
  250. package/dist/fence-feature/floorplan.js +120 -0
  251. package/dist/fence-feature/geometry.d.ts +5 -0
  252. package/dist/fence-feature/geometry.d.ts.map +1 -0
  253. package/dist/fence-feature/geometry.js +43 -0
  254. package/dist/fence-feature/handles.d.ts +5 -0
  255. package/dist/fence-feature/handles.d.ts.map +1 -0
  256. package/dist/fence-feature/handles.js +84 -0
  257. package/dist/fence-feature/inspector.d.ts +6 -0
  258. package/dist/fence-feature/inspector.d.ts.map +1 -0
  259. package/dist/fence-feature/inspector.js +214 -0
  260. package/dist/fence-feature/interaction.d.ts +3 -0
  261. package/dist/fence-feature/interaction.d.ts.map +1 -0
  262. package/dist/fence-feature/interaction.js +41 -0
  263. package/dist/fence-feature/move-session.d.ts +9 -0
  264. package/dist/fence-feature/move-session.d.ts.map +1 -0
  265. package/dist/fence-feature/move-session.js +48 -0
  266. package/dist/fence-feature/move-tool.d.ts +5 -0
  267. package/dist/fence-feature/move-tool.d.ts.map +1 -0
  268. package/dist/fence-feature/move-tool.js +58 -0
  269. package/dist/fence-feature/pick-target.d.ts +7 -0
  270. package/dist/fence-feature/pick-target.d.ts.map +1 -0
  271. package/dist/fence-feature/pick-target.js +52 -0
  272. package/dist/floor-opening/definition.d.ts +3 -0
  273. package/dist/floor-opening/definition.d.ts.map +1 -0
  274. package/dist/floor-opening/definition.js +41 -0
  275. package/dist/floor-opening/floorplan.d.ts +156 -0
  276. package/dist/floor-opening/floorplan.d.ts.map +1 -0
  277. package/dist/floor-opening/floorplan.js +63 -0
  278. package/dist/guide/definition.d.ts.map +1 -1
  279. package/dist/guide/definition.js +1 -0
  280. package/dist/gutter/definition.d.ts.map +1 -1
  281. package/dist/gutter/definition.js +3 -2
  282. package/dist/hvac-equipment/tool.d.ts.map +1 -1
  283. package/dist/hvac-equipment/tool.js +8 -2
  284. package/dist/imported-mesh/definition.d.ts.map +1 -1
  285. package/dist/imported-mesh/definition.js +2 -0
  286. package/dist/imported-mesh/geometry.d.ts +1 -1
  287. package/dist/imported-mesh/geometry.d.ts.map +1 -1
  288. package/dist/imported-mesh/geometry.js +40 -12
  289. package/dist/index.d.ts +13 -2
  290. package/dist/index.d.ts.map +1 -1
  291. package/dist/index.js +20 -2
  292. package/dist/item/authored-face-host.d.ts +10 -0
  293. package/dist/item/authored-face-host.d.ts.map +1 -0
  294. package/dist/item/authored-face-host.js +87 -0
  295. package/dist/item/authored-params.d.ts +15 -0
  296. package/dist/item/authored-params.d.ts.map +1 -0
  297. package/dist/item/authored-params.js +72 -0
  298. package/dist/item/definition.d.ts +2 -2
  299. package/dist/item/definition.d.ts.map +1 -1
  300. package/dist/item/definition.js +35 -4
  301. package/dist/item/floorplan-move.d.ts.map +1 -1
  302. package/dist/item/floorplan-move.js +209 -130
  303. package/dist/item/floorplan.d.ts +22 -0
  304. package/dist/item/floorplan.d.ts.map +1 -1
  305. package/dist/item/floorplan.js +95 -6
  306. package/dist/item/index.d.ts +1 -0
  307. package/dist/item/index.d.ts.map +1 -1
  308. package/dist/item/index.js +1 -0
  309. package/dist/item/model-loader.d.ts +2 -0
  310. package/dist/item/model-loader.d.ts.map +1 -1
  311. package/dist/item/model-loader.js +55 -23
  312. package/dist/item/move-tool.d.ts +1 -1
  313. package/dist/item/move-tool.d.ts.map +1 -1
  314. package/dist/item/move-tool.js +19 -11
  315. package/dist/item/paint.d.ts.map +1 -1
  316. package/dist/item/paint.js +5 -24
  317. package/dist/item/panel.d.ts +1 -3
  318. package/dist/item/panel.d.ts.map +1 -1
  319. package/dist/item/panel.js +20 -24
  320. package/dist/item/placement-notice.d.ts +14 -0
  321. package/dist/item/placement-notice.d.ts.map +1 -0
  322. package/dist/item/placement-notice.js +38 -0
  323. package/dist/item/plan-symbols.d.ts +67 -0
  324. package/dist/item/plan-symbols.d.ts.map +1 -0
  325. package/dist/item/plan-symbols.js +407 -0
  326. package/dist/item/renderer.d.ts +10 -0
  327. package/dist/item/renderer.d.ts.map +1 -1
  328. package/dist/item/renderer.js +72 -40
  329. package/dist/item/script-param-defaults.d.ts +12 -0
  330. package/dist/item/script-param-defaults.d.ts.map +1 -0
  331. package/dist/item/script-param-defaults.js +34 -0
  332. package/dist/lean-to-extension/definition.d.ts.map +1 -1
  333. package/dist/lean-to-extension/definition.js +1 -2
  334. package/dist/lean-to-extension/geometry.d.ts.map +1 -1
  335. package/dist/lean-to-extension/geometry.js +1 -1
  336. package/dist/lean-to-extension/layout.d.ts.map +1 -1
  337. package/dist/lean-to-extension/layout.js +2 -3
  338. package/dist/lean-to-extension/placement-validation.d.ts.map +1 -1
  339. package/dist/lean-to-extension/placement-validation.js +5 -5
  340. package/dist/lean-to-extension/tool.d.ts.map +1 -1
  341. package/dist/lean-to-extension/tool.js +5 -5
  342. package/dist/level/renderer.js +1 -1
  343. package/dist/lineset/move-tool.d.ts.map +1 -1
  344. package/dist/lineset/move-tool.js +8 -2
  345. package/dist/lineset/tool.d.ts.map +1 -1
  346. package/dist/lineset/tool.js +1 -0
  347. package/dist/liquid-line/move-tool.d.ts.map +1 -1
  348. package/dist/liquid-line/move-tool.js +8 -2
  349. package/dist/liquid-line/tool.d.ts.map +1 -1
  350. package/dist/liquid-line/tool.js +5 -1
  351. package/dist/measurement/definition.d.ts.map +1 -1
  352. package/dist/measurement/definition.js +2 -1
  353. package/dist/pipe-fitting/move-tool.d.ts.map +1 -1
  354. package/dist/pipe-fitting/move-tool.js +8 -2
  355. package/dist/pipe-segment/move-tool.d.ts.map +1 -1
  356. package/dist/pipe-segment/move-tool.js +8 -2
  357. package/dist/pipe-segment/tool.d.ts.map +1 -1
  358. package/dist/pipe-segment/tool.js +14 -3
  359. package/dist/pipe-trap/tool.d.ts.map +1 -1
  360. package/dist/pipe-trap/tool.js +7 -8
  361. package/dist/procedural-item/animation.d.ts +8 -0
  362. package/dist/procedural-item/animation.d.ts.map +1 -0
  363. package/dist/procedural-item/animation.js +116 -0
  364. package/dist/procedural-item/definition.d.ts.map +1 -1
  365. package/dist/procedural-item/definition.js +77 -8
  366. package/dist/procedural-item/geometry.d.ts +5 -1
  367. package/dist/procedural-item/geometry.d.ts.map +1 -1
  368. package/dist/procedural-item/geometry.js +239 -15
  369. package/dist/procedural-item/renderer.d.ts.map +1 -1
  370. package/dist/procedural-item/renderer.js +272 -23
  371. package/dist/ridge-vent/definition.d.ts.map +1 -1
  372. package/dist/ridge-vent/definition.js +1 -0
  373. package/dist/ridge-vent/panel.d.ts.map +1 -1
  374. package/dist/ridge-vent/panel.js +5 -23
  375. package/dist/ridge-vent/renderer.d.ts.map +1 -1
  376. package/dist/ridge-vent/renderer.js +9 -8
  377. package/dist/roof/definition.d.ts.map +1 -1
  378. package/dist/roof/definition.js +8 -2
  379. package/dist/roof/floorplan.d.ts +8 -0
  380. package/dist/roof/floorplan.d.ts.map +1 -1
  381. package/dist/roof/floorplan.js +194 -18
  382. package/dist/roof/panel-model.d.ts +4 -0
  383. package/dist/roof/panel-model.d.ts.map +1 -0
  384. package/dist/roof/panel-model.js +155 -0
  385. package/dist/roof/panel.d.ts.map +1 -1
  386. package/dist/roof/panel.js +5 -13
  387. package/dist/roof/parametrics.d.ts.map +1 -1
  388. package/dist/roof/parametrics.js +16 -1
  389. package/dist/roof/renderer.d.ts.map +1 -1
  390. package/dist/roof/renderer.js +5 -2
  391. package/dist/roof-segment/definition.d.ts.map +1 -1
  392. package/dist/roof-segment/definition.js +1 -0
  393. package/dist/roof-segment/panel.d.ts.map +1 -1
  394. package/dist/roof-segment/panel.js +5 -24
  395. package/dist/roof-segment/parametrics.d.ts.map +1 -1
  396. package/dist/roof-segment/parametrics.js +176 -1
  397. package/dist/roof-segment/renderer.d.ts.map +1 -1
  398. package/dist/roof-segment/renderer.js +17 -8
  399. package/dist/scan/definition.d.ts.map +1 -1
  400. package/dist/scan/definition.js +1 -0
  401. package/dist/separator/definition.d.ts +3 -0
  402. package/dist/separator/definition.d.ts.map +1 -0
  403. package/dist/separator/definition.js +39 -0
  404. package/dist/separator/renderer.d.ts +5 -0
  405. package/dist/separator/renderer.d.ts.map +1 -0
  406. package/dist/separator/renderer.js +36 -0
  407. package/dist/shared/commit-opening-move.d.ts +4 -0
  408. package/dist/shared/commit-opening-move.d.ts.map +1 -0
  409. package/dist/shared/commit-opening-move.js +9 -0
  410. package/dist/shared/curtain-opening-limits.d.ts +14 -0
  411. package/dist/shared/curtain-opening-limits.d.ts.map +1 -0
  412. package/dist/shared/curtain-opening-limits.js +53 -0
  413. package/dist/shared/draft-axis-guides.d.ts +0 -6
  414. package/dist/shared/draft-axis-guides.d.ts.map +1 -1
  415. package/dist/shared/draft-axis-guides.js +1 -8
  416. package/dist/shared/duct-body-paint.d.ts +0 -4
  417. package/dist/shared/duct-body-paint.d.ts.map +1 -1
  418. package/dist/shared/duct-body-paint.js +1 -5
  419. package/dist/shared/hosted-resize.d.ts +12 -0
  420. package/dist/shared/hosted-resize.d.ts.map +1 -0
  421. package/dist/shared/hosted-resize.js +166 -0
  422. package/dist/shared/item-interaction-actions.d.ts +6 -0
  423. package/dist/shared/item-interaction-actions.d.ts.map +1 -0
  424. package/dist/shared/item-interaction-actions.js +27 -0
  425. package/dist/shared/item-interactions.d.ts +9 -0
  426. package/dist/shared/item-interactions.d.ts.map +1 -0
  427. package/dist/shared/item-interactions.js +74 -0
  428. package/dist/shared/item-light-placement.d.ts +2 -0
  429. package/dist/shared/item-light-placement.d.ts.map +1 -0
  430. package/dist/shared/item-light-placement.js +3 -0
  431. package/dist/shared/move-roof-tool.js +2 -1
  432. package/dist/shared/node-batch/batchable.d.ts +12 -0
  433. package/dist/shared/node-batch/batchable.d.ts.map +1 -0
  434. package/dist/shared/node-batch/batchable.js +41 -0
  435. package/dist/shared/node-batch/candidates.d.ts +7 -5
  436. package/dist/shared/node-batch/candidates.d.ts.map +1 -1
  437. package/dist/shared/node-batch/candidates.js +43 -59
  438. package/dist/shared/node-batch/release.d.ts +8 -0
  439. package/dist/shared/node-batch/release.d.ts.map +1 -0
  440. package/dist/shared/node-batch/release.js +16 -0
  441. package/dist/shared/node-batch/system.d.ts.map +1 -1
  442. package/dist/shared/node-batch/system.js +17 -12
  443. package/dist/shared/node-batch/types.d.ts +4 -1
  444. package/dist/shared/node-batch/types.d.ts.map +1 -1
  445. package/dist/shared/opening-documentation.d.ts +13 -1
  446. package/dist/shared/opening-documentation.d.ts.map +1 -1
  447. package/dist/shared/opening-documentation.js +245 -59
  448. package/dist/shared/opening-grid-follow.d.ts +8 -0
  449. package/dist/shared/opening-grid-follow.d.ts.map +1 -0
  450. package/dist/shared/opening-grid-follow.js +12 -0
  451. package/dist/shared/opening-guides-runtime.d.ts.map +1 -1
  452. package/dist/shared/opening-guides-runtime.js +17 -14
  453. package/dist/shared/opening-placement-dimensions.d.ts.map +1 -1
  454. package/dist/shared/opening-placement-dimensions.js +3 -3
  455. package/dist/shared/opening-plane-offset.d.ts +23 -0
  456. package/dist/shared/opening-plane-offset.d.ts.map +1 -0
  457. package/dist/shared/opening-plane-offset.js +24 -0
  458. package/dist/shared/opening-property-preview-host.d.ts +3 -0
  459. package/dist/shared/opening-property-preview-host.d.ts.map +1 -0
  460. package/dist/shared/opening-property-preview-host.js +21 -0
  461. package/dist/shared/opening-property-preview.d.ts +19 -0
  462. package/dist/shared/opening-property-preview.d.ts.map +1 -0
  463. package/dist/shared/opening-property-preview.js +99 -0
  464. package/dist/shared/polygon-centroid-move.d.ts.map +1 -1
  465. package/dist/shared/polygon-centroid-move.js +4 -1
  466. package/dist/shared/polygon-vertex-affordance.d.ts.map +1 -1
  467. package/dist/shared/polygon-vertex-affordance.js +19 -15
  468. package/dist/shared/resting-surface-plan.d.ts +2 -1
  469. package/dist/shared/resting-surface-plan.d.ts.map +1 -1
  470. package/dist/shared/resting-surface-plan.js +29 -4
  471. package/dist/shared/run-hangers.d.ts.map +1 -1
  472. package/dist/shared/run-hangers.js +5 -4
  473. package/dist/shared/scripted-opening-handles.d.ts +18 -0
  474. package/dist/shared/scripted-opening-handles.d.ts.map +1 -0
  475. package/dist/shared/scripted-opening-handles.js +53 -0
  476. package/dist/shared/scripted-opening.d.ts +25 -0
  477. package/dist/shared/scripted-opening.d.ts.map +1 -0
  478. package/dist/shared/scripted-opening.js +72 -0
  479. package/dist/shared/slot-paint.d.ts +14 -2
  480. package/dist/shared/slot-paint.d.ts.map +1 -1
  481. package/dist/shared/slot-paint.js +29 -29
  482. package/dist/shared/surface-counterparts.d.ts +12 -0
  483. package/dist/shared/surface-counterparts.d.ts.map +1 -0
  484. package/dist/shared/surface-counterparts.js +27 -0
  485. package/dist/shared/surface-paint.d.ts.map +1 -1
  486. package/dist/shared/surface-paint.js +2 -5
  487. package/dist/shared/swap-preview-material.d.ts +11 -0
  488. package/dist/shared/swap-preview-material.d.ts.map +1 -0
  489. package/dist/shared/swap-preview-material.js +16 -0
  490. package/dist/shared/system-checks.d.ts.map +1 -1
  491. package/dist/shared/system-checks.js +5 -3
  492. package/dist/shared/wall-attach-target.d.ts +4 -10
  493. package/dist/shared/wall-attach-target.d.ts.map +1 -1
  494. package/dist/shared/wall-attach-target.js +6 -63
  495. package/dist/shared/wall-event-from-grid.d.ts +5 -0
  496. package/dist/shared/wall-event-from-grid.d.ts.map +1 -0
  497. package/dist/shared/wall-event-from-grid.js +36 -0
  498. package/dist/shared/wall-opening-ceiling.d.ts +5 -15
  499. package/dist/shared/wall-opening-ceiling.d.ts.map +1 -1
  500. package/dist/shared/wall-opening-ceiling.js +10 -18
  501. package/dist/shelf/definition.d.ts.map +1 -1
  502. package/dist/shelf/definition.js +4 -2
  503. package/dist/shelf/floorplan.d.ts.map +1 -1
  504. package/dist/shelf/floorplan.js +9 -2
  505. package/dist/shelf/geometry.d.ts.map +1 -1
  506. package/dist/shelf/geometry.js +1 -2
  507. package/dist/shelf/paint.d.ts.map +1 -1
  508. package/dist/shelf/paint.js +4 -10
  509. package/dist/site/line-ribbon.d.ts +31 -0
  510. package/dist/site/line-ribbon.d.ts.map +1 -0
  511. package/dist/site/line-ribbon.js +117 -0
  512. package/dist/site/lot-mask.d.ts +18 -0
  513. package/dist/site/lot-mask.d.ts.map +1 -0
  514. package/dist/site/lot-mask.js +35 -0
  515. package/dist/site/panel.d.ts +10 -0
  516. package/dist/site/panel.d.ts.map +1 -0
  517. package/dist/site/panel.js +155 -0
  518. package/dist/site/parametrics.d.ts +7 -0
  519. package/dist/site/parametrics.d.ts.map +1 -1
  520. package/dist/site/parametrics.js +8 -0
  521. package/dist/site/recessed-slab-ground-holes.d.ts.map +1 -1
  522. package/dist/site/recessed-slab-ground-holes.js +5 -2
  523. package/dist/site/renderer.d.ts.map +1 -1
  524. package/dist/site/renderer.js +158 -20
  525. package/dist/site/setbacks.d.ts +33 -0
  526. package/dist/site/setbacks.d.ts.map +1 -0
  527. package/dist/site/setbacks.js +204 -0
  528. package/dist/site/terrain-geometry.d.ts +28 -1
  529. package/dist/site/terrain-geometry.d.ts.map +1 -1
  530. package/dist/site/terrain-geometry.js +78 -4
  531. package/dist/site/terrain-holes.d.ts +15 -0
  532. package/dist/site/terrain-holes.d.ts.map +1 -0
  533. package/dist/site/terrain-holes.js +74 -0
  534. package/dist/site/terrain-mesh.d.ts +9 -2
  535. package/dist/site/terrain-mesh.d.ts.map +1 -1
  536. package/dist/site/terrain-mesh.js +36 -9
  537. package/dist/site/terrain-renderer.d.ts +9 -2
  538. package/dist/site/terrain-renderer.d.ts.map +1 -1
  539. package/dist/site/terrain-renderer.js +14 -4
  540. package/dist/skylight/definition.d.ts.map +1 -1
  541. package/dist/skylight/definition.js +1 -0
  542. package/dist/slab/boundary-editor.d.ts +1 -1
  543. package/dist/slab/boundary-editor.d.ts.map +1 -1
  544. package/dist/slab/boundary-editor.js +13 -13
  545. package/dist/slab/definition.d.ts.map +1 -1
  546. package/dist/slab/definition.js +23 -3
  547. package/dist/slab/dependency-tracker.d.ts.map +1 -1
  548. package/dist/slab/dependency-tracker.js +67 -7
  549. package/dist/slab/elevation-limit.d.ts.map +1 -1
  550. package/dist/slab/elevation-limit.js +2 -2
  551. package/dist/slab/floorplan-affordances.d.ts +176 -4
  552. package/dist/slab/floorplan-affordances.d.ts.map +1 -1
  553. package/dist/slab/floorplan-affordances.js +0 -1
  554. package/dist/slab/floorplan-move.d.ts.map +1 -1
  555. package/dist/slab/floorplan-move.js +3 -4
  556. package/dist/slab/floorplan.d.ts +7 -0
  557. package/dist/slab/floorplan.d.ts.map +1 -1
  558. package/dist/slab/floorplan.js +22 -5
  559. package/dist/slab/geometry.d.ts.map +1 -1
  560. package/dist/slab/geometry.js +186 -76
  561. package/dist/slab/move-tool.js +7 -6
  562. package/dist/slab/paint.d.ts +18 -5
  563. package/dist/slab/paint.d.ts.map +1 -1
  564. package/dist/slab/paint.js +458 -9
  565. package/dist/slab/panel.d.ts.map +1 -1
  566. package/dist/slab/panel.js +28 -9
  567. package/dist/slab/placement-ownership.d.ts +2 -1
  568. package/dist/slab/placement-ownership.d.ts.map +1 -1
  569. package/dist/slab/placement-ownership.js +2 -2
  570. package/dist/slab/surface-split.d.ts +24 -0
  571. package/dist/slab/surface-split.d.ts.map +1 -0
  572. package/dist/slab/surface-split.js +389 -0
  573. package/dist/slab/tool.d.ts.map +1 -1
  574. package/dist/slab/tool.js +3 -3
  575. package/dist/solar-panel/definition.d.ts.map +1 -1
  576. package/dist/solar-panel/definition.js +1 -0
  577. package/dist/spawn/definition.d.ts.map +1 -1
  578. package/dist/spawn/definition.js +1 -0
  579. package/dist/stair/baluster-geometry.d.ts +21 -0
  580. package/dist/stair/baluster-geometry.d.ts.map +1 -0
  581. package/dist/stair/baluster-geometry.js +74 -0
  582. package/dist/stair/baluster-guard.d.ts +50 -0
  583. package/dist/stair/baluster-guard.d.ts.map +1 -0
  584. package/dist/stair/baluster-guard.js +71 -0
  585. package/dist/stair/boards-guard.d.ts +37 -0
  586. package/dist/stair/boards-guard.d.ts.map +1 -0
  587. package/dist/stair/boards-guard.js +61 -0
  588. package/dist/stair/cable-guard.d.ts +39 -0
  589. package/dist/stair/cable-guard.d.ts.map +1 -0
  590. package/dist/stair/cable-guard.js +105 -0
  591. package/dist/stair/construction-controls.d.ts +15 -0
  592. package/dist/stair/construction-controls.d.ts.map +1 -0
  593. package/dist/stair/construction-controls.js +29 -0
  594. package/dist/stair/continuous-railings.d.ts +10 -0
  595. package/dist/stair/continuous-railings.d.ts.map +1 -0
  596. package/dist/stair/continuous-railings.js +159 -0
  597. package/dist/stair/definition.d.ts.map +1 -1
  598. package/dist/stair/definition.js +18 -37
  599. package/dist/stair/documentation.d.ts +1 -1
  600. package/dist/stair/documentation.d.ts.map +1 -1
  601. package/dist/stair/documentation.js +10 -17
  602. package/dist/stair/floorplan-affordances.d.ts.map +1 -1
  603. package/dist/stair/floorplan-affordances.js +9 -25
  604. package/dist/stair/floorplan.d.ts +1 -23
  605. package/dist/stair/floorplan.d.ts.map +1 -1
  606. package/dist/stair/floorplan.js +102 -86
  607. package/dist/stair/glass-guard.d.ts +72 -0
  608. package/dist/stair/glass-guard.d.ts.map +1 -0
  609. package/dist/stair/glass-guard.js +167 -0
  610. package/dist/stair/guard-path.d.ts +119 -0
  611. package/dist/stair/guard-path.d.ts.map +1 -0
  612. package/dist/stair/guard-path.js +208 -0
  613. package/dist/stair/materials.d.ts +11 -0
  614. package/dist/stair/materials.d.ts.map +1 -0
  615. package/dist/stair/materials.js +51 -0
  616. package/dist/stair/metal-guard.d.ts +38 -0
  617. package/dist/stair/metal-guard.d.ts.map +1 -0
  618. package/dist/stair/metal-guard.js +79 -0
  619. package/dist/stair/paint.d.ts +32 -0
  620. package/dist/stair/paint.d.ts.map +1 -1
  621. package/dist/stair/paint.js +75 -36
  622. package/dist/stair/panel.d.ts.map +1 -1
  623. package/dist/stair/panel.js +154 -17
  624. package/dist/stair/parametrics.d.ts +1 -1
  625. package/dist/stair/parametrics.d.ts.map +1 -1
  626. package/dist/stair/parametrics.js +181 -1
  627. package/dist/stair/plan-entry.d.ts +31 -0
  628. package/dist/stair/plan-entry.d.ts.map +1 -0
  629. package/dist/stair/plan-entry.js +325 -0
  630. package/dist/stair/post-and-rail-guard.d.ts +31 -0
  631. package/dist/stair/post-and-rail-guard.d.ts.map +1 -0
  632. package/dist/stair/post-and-rail-guard.js +63 -0
  633. package/dist/stair/railing-controls.d.ts +9 -0
  634. package/dist/stair/railing-controls.d.ts.map +1 -0
  635. package/dist/stair/railing-controls.js +49 -0
  636. package/dist/stair/renderer.d.ts.map +1 -1
  637. package/dist/stair/renderer.js +259 -259
  638. package/dist/stair/use-stair-render-data.d.ts +317 -0
  639. package/dist/stair/use-stair-render-data.d.ts.map +1 -0
  640. package/dist/stair/use-stair-render-data.js +73 -0
  641. package/dist/stair-segment/definition.d.ts.map +1 -1
  642. package/dist/stair-segment/definition.js +52 -10
  643. package/dist/stair-segment/panel.d.ts.map +1 -1
  644. package/dist/stair-segment/panel.js +36 -42
  645. package/dist/stair-segment/parametrics.d.ts +1 -1
  646. package/dist/stair-segment/parametrics.d.ts.map +1 -1
  647. package/dist/stair-segment/parametrics.js +94 -1
  648. package/dist/stair-segment/renderer.d.ts.map +1 -1
  649. package/dist/stair-segment/renderer.js +16 -28
  650. package/dist/turbine-vent/definition.d.ts.map +1 -1
  651. package/dist/turbine-vent/definition.js +3 -5
  652. package/dist/turbine-vent/paint.d.ts.map +1 -1
  653. package/dist/turbine-vent/paint.js +2 -5
  654. package/dist/turbine-vent/panel.d.ts.map +1 -1
  655. package/dist/turbine-vent/panel.js +5 -23
  656. package/dist/unit/unit-panel.d.ts.map +1 -1
  657. package/dist/unit/unit-panel.js +6 -1
  658. package/dist/wall/actions.d.ts +3 -0
  659. package/dist/wall/actions.d.ts.map +1 -0
  660. package/dist/wall/actions.js +61 -0
  661. package/dist/wall/construction-dimensions.js +8 -5
  662. package/dist/wall/contextual-dimensions.js +4 -4
  663. package/dist/wall/curtain-opening-frame.d.ts +14 -0
  664. package/dist/wall/curtain-opening-frame.d.ts.map +1 -0
  665. package/dist/wall/curtain-opening-frame.js +111 -0
  666. package/dist/wall/curtain-panel-highlight.d.ts +3 -0
  667. package/dist/wall/curtain-panel-highlight.d.ts.map +1 -0
  668. package/dist/wall/curtain-panel-highlight.js +113 -0
  669. package/dist/wall/curtain-wall-adapter.d.ts +3 -0
  670. package/dist/wall/curtain-wall-adapter.d.ts.map +1 -0
  671. package/dist/wall/curtain-wall-adapter.js +55 -0
  672. package/dist/wall/curtain-wall-floorplan.d.ts +3 -0
  673. package/dist/wall/curtain-wall-floorplan.d.ts.map +1 -0
  674. package/dist/wall/curtain-wall-floorplan.js +91 -0
  675. package/dist/wall/curtain-wall-geometry.d.ts +4 -0
  676. package/dist/wall/curtain-wall-geometry.d.ts.map +1 -0
  677. package/dist/wall/curtain-wall-geometry.js +226 -0
  678. package/dist/wall/curtain-wall-layout.d.ts +16 -0
  679. package/dist/wall/curtain-wall-layout.d.ts.map +1 -0
  680. package/dist/wall/curtain-wall-layout.js +176 -0
  681. package/dist/wall/curtain-wall-materials.d.ts +5 -0
  682. package/dist/wall/curtain-wall-materials.d.ts.map +1 -0
  683. package/dist/wall/curtain-wall-materials.js +55 -0
  684. package/dist/wall/curtain-wall-panel.d.ts +14 -0
  685. package/dist/wall/curtain-wall-panel.d.ts.map +1 -0
  686. package/dist/wall/curtain-wall-panel.js +167 -0
  687. package/dist/wall/curtain-wall-piece-geometry.d.ts +5 -0
  688. package/dist/wall/curtain-wall-piece-geometry.d.ts.map +1 -0
  689. package/dist/wall/curtain-wall-piece-geometry.js +220 -0
  690. package/dist/wall/curtain-wall-shadow.d.ts +4 -0
  691. package/dist/wall/curtain-wall-shadow.d.ts.map +1 -0
  692. package/dist/wall/curtain-wall-shadow.js +15 -0
  693. package/dist/wall/curve-tool.d.ts.map +1 -1
  694. package/dist/wall/curve-tool.js +4 -0
  695. package/dist/wall/definition.d.ts +0 -15
  696. package/dist/wall/definition.d.ts.map +1 -1
  697. package/dist/wall/definition.js +92 -7
  698. package/dist/wall/floorplan-move.d.ts +1 -1
  699. package/dist/wall/floorplan-move.d.ts.map +1 -1
  700. package/dist/wall/floorplan-move.js +20 -83
  701. package/dist/wall/floorplan-tool.d.ts +4 -0
  702. package/dist/wall/floorplan-tool.d.ts.map +1 -0
  703. package/dist/wall/floorplan-tool.js +106 -0
  704. package/dist/wall/floorplan.d.ts +3 -1
  705. package/dist/wall/floorplan.d.ts.map +1 -1
  706. package/dist/wall/floorplan.js +189 -22
  707. package/dist/wall/length-patch.d.ts +3 -0
  708. package/dist/wall/length-patch.d.ts.map +1 -0
  709. package/dist/wall/length-patch.js +14 -0
  710. package/dist/wall/measurement.d.ts.map +1 -1
  711. package/dist/wall/measurement.js +5 -5
  712. package/dist/wall/move-endpoint-tool.d.ts.map +1 -1
  713. package/dist/wall/move-endpoint-tool.js +20 -7
  714. package/dist/wall/move-shared.d.ts.map +1 -1
  715. package/dist/wall/move-shared.js +11 -7
  716. package/dist/wall/move-tool.d.ts.map +1 -1
  717. package/dist/wall/move-tool.js +140 -148
  718. package/dist/wall/paint.d.ts +26 -15
  719. package/dist/wall/paint.d.ts.map +1 -1
  720. package/dist/wall/paint.js +339 -115
  721. package/dist/wall/panel-model.d.ts +22 -0
  722. package/dist/wall/panel-model.d.ts.map +1 -0
  723. package/dist/wall/panel-model.js +175 -0
  724. package/dist/wall/panel.d.ts.map +1 -1
  725. package/dist/wall/panel.js +233 -61
  726. package/dist/wall/parametrics.d.ts.map +1 -1
  727. package/dist/wall/parametrics.js +3 -0
  728. package/dist/wall/property-preview.d.ts +7 -0
  729. package/dist/wall/property-preview.d.ts.map +1 -0
  730. package/dist/wall/property-preview.js +31 -0
  731. package/dist/wall/rectangle-command.d.ts +248 -0
  732. package/dist/wall/rectangle-command.d.ts.map +1 -0
  733. package/dist/wall/rectangle-command.js +22 -0
  734. package/dist/wall/rectangle-tool.d.ts +2 -0
  735. package/dist/wall/rectangle-tool.d.ts.map +1 -0
  736. package/dist/wall/rectangle-tool.js +165 -0
  737. package/dist/wall/renderer.d.ts.map +1 -1
  738. package/dist/wall/renderer.js +9 -4
  739. package/dist/wall/split-floorplan-layer.d.ts +4 -0
  740. package/dist/wall/split-floorplan-layer.d.ts.map +1 -0
  741. package/dist/wall/split-floorplan-layer.js +71 -0
  742. package/dist/wall/split-pointer.d.ts +3 -0
  743. package/dist/wall/split-pointer.d.ts.map +1 -0
  744. package/dist/wall/split-pointer.js +95 -0
  745. package/dist/wall/split-preview.d.ts +55 -0
  746. package/dist/wall/split-preview.d.ts.map +1 -0
  747. package/dist/wall/split-preview.js +106 -0
  748. package/dist/wall/split-session.d.ts +16 -0
  749. package/dist/wall/split-session.d.ts.map +1 -0
  750. package/dist/wall/split-session.js +144 -0
  751. package/dist/wall/split-store.d.ts +16 -0
  752. package/dist/wall/split-store.d.ts.map +1 -0
  753. package/dist/wall/split-store.js +6 -0
  754. package/dist/wall/split-tool.d.ts +10 -0
  755. package/dist/wall/split-tool.d.ts.map +1 -0
  756. package/dist/wall/split-tool.js +95 -0
  757. package/dist/wall/system.d.ts.map +1 -1
  758. package/dist/wall/system.js +39 -5
  759. package/dist/wall/tool.d.ts.map +1 -1
  760. package/dist/wall/tool.js +114 -50
  761. package/dist/wall/treatment-level-data.d.ts +3 -2
  762. package/dist/wall/treatment-level-data.d.ts.map +1 -1
  763. package/dist/wall/treatment-level-data.js +17 -13
  764. package/dist/wall/treatments.d.ts +10 -10
  765. package/dist/wall/treatments.d.ts.map +1 -1
  766. package/dist/wall/treatments.js +67 -54
  767. package/dist/wall/wall-batch-system.d.ts +7 -0
  768. package/dist/wall/wall-batch-system.d.ts.map +1 -1
  769. package/dist/wall/wall-batch-system.js +38 -3
  770. package/dist/wall/wall-batch.d.ts +6 -0
  771. package/dist/wall/wall-batch.d.ts.map +1 -1
  772. package/dist/wall/wall-batch.js +7 -1
  773. package/dist/window/definition.d.ts.map +1 -1
  774. package/dist/window/definition.js +60 -5
  775. package/dist/window/floorplan-affordances.d.ts.map +1 -1
  776. package/dist/window/floorplan-affordances.js +8 -10
  777. package/dist/window/floorplan-move.d.ts.map +1 -1
  778. package/dist/window/floorplan-move.js +3 -1
  779. package/dist/window/floorplan.d.ts.map +1 -1
  780. package/dist/window/floorplan.js +145 -60
  781. package/dist/window/mechanism.d.ts +4 -0
  782. package/dist/window/mechanism.d.ts.map +1 -0
  783. package/dist/window/mechanism.js +20 -0
  784. package/dist/window/move-tool.d.ts.map +1 -1
  785. package/dist/window/move-tool.js +83 -54
  786. package/dist/window/paint.d.ts.map +1 -1
  787. package/dist/window/paint.js +3 -0
  788. package/dist/window/panel.d.ts.map +1 -1
  789. package/dist/window/panel.js +50 -144
  790. package/dist/window/placement.d.ts +23 -0
  791. package/dist/window/placement.d.ts.map +1 -0
  792. package/dist/window/placement.js +66 -0
  793. package/dist/window/preview.d.ts.map +1 -1
  794. package/dist/window/preview.js +2 -0
  795. package/dist/window/renderer.d.ts.map +1 -1
  796. package/dist/window/renderer.js +3 -2
  797. package/dist/window/tool.d.ts.map +1 -1
  798. package/dist/window/tool.js +130 -26
  799. package/dist/window/window-math.d.ts +6 -14
  800. package/dist/window/window-math.d.ts.map +1 -1
  801. package/dist/window/window-math.js +13 -22
  802. package/dist/zone/contextual-dimensions.d.ts.map +1 -1
  803. package/dist/zone/contextual-dimensions.js +6 -28
  804. package/dist/zone/definition.d.ts.map +1 -1
  805. package/dist/zone/definition.js +4 -3
  806. package/dist/zone/floorplan-affordances.d.ts +200 -0
  807. package/dist/zone/floorplan-affordances.d.ts.map +1 -1
  808. package/dist/zone/floorplan.d.ts +1 -1
  809. package/dist/zone/floorplan.d.ts.map +1 -1
  810. package/dist/zone/floorplan.js +93 -53
  811. package/dist/zone/quantities-panel.d.ts.map +1 -1
  812. package/dist/zone/quantities-panel.js +6 -33
  813. package/dist/zone/quick-measurement.d.ts +2 -2
  814. package/dist/zone/quick-measurement.d.ts.map +1 -1
  815. package/dist/zone/quick-measurement.js +6 -5
  816. package/dist/zone/renderer.d.ts +1 -1
  817. package/dist/zone/renderer.d.ts.map +1 -1
  818. package/dist/zone/renderer.js +58 -146
  819. package/dist/zone/room-clear-dimensions.js +3 -3
  820. package/dist/zone/room-documentation.d.ts.map +1 -1
  821. package/dist/zone/room-documentation.js +2 -6
  822. package/package.json +12 -12
  823. package/dist/block/slots.d.ts +0 -4
  824. package/dist/block/slots.d.ts.map +0 -1
  825. package/dist/block/slots.js +0 -17
  826. package/dist/cabinet/slots.d.ts +0 -4
  827. package/dist/cabinet/slots.d.ts.map +0 -1
  828. package/dist/cabinet/slots.js +0 -24
  829. package/dist/ceiling/slots.d.ts +0 -6
  830. package/dist/ceiling/slots.d.ts.map +0 -1
  831. package/dist/ceiling/slots.js +0 -7
  832. package/dist/column/slots.d.ts +0 -9
  833. package/dist/column/slots.d.ts.map +0 -1
  834. package/dist/column/slots.js +0 -19
  835. package/dist/door/slots.d.ts +0 -9
  836. package/dist/door/slots.d.ts.map +0 -1
  837. package/dist/door/slots.js +0 -20
  838. package/dist/elevator/slots.d.ts +0 -8
  839. package/dist/elevator/slots.d.ts.map +0 -1
  840. package/dist/elevator/slots.js +0 -17
  841. package/dist/fence/slots.d.ts +0 -10
  842. package/dist/fence/slots.d.ts.map +0 -1
  843. package/dist/fence/slots.js +0 -23
  844. package/dist/lean-to-extension/slots.d.ts +0 -5
  845. package/dist/lean-to-extension/slots.d.ts.map +0 -1
  846. package/dist/lean-to-extension/slots.js +0 -15
  847. package/dist/shared/opening-documentation-fields.d.ts +0 -16
  848. package/dist/shared/opening-documentation-fields.d.ts.map +0 -1
  849. package/dist/shared/opening-documentation-fields.js +0 -54
  850. package/dist/shelf/slots.d.ts +0 -9
  851. package/dist/shelf/slots.d.ts.map +0 -1
  852. package/dist/shelf/slots.js +0 -30
  853. package/dist/slab/slots.d.ts +0 -10
  854. package/dist/slab/slots.d.ts.map +0 -1
  855. package/dist/slab/slots.js +0 -20
  856. package/dist/stair/floor-stack.d.ts +0 -10
  857. package/dist/stair/floor-stack.d.ts.map +0 -1
  858. package/dist/stair/floor-stack.js +0 -115
  859. package/dist/stair/slots.d.ts +0 -7
  860. package/dist/stair/slots.d.ts.map +0 -1
  861. package/dist/stair/slots.js +0 -13
  862. package/dist/wall/slots.d.ts +0 -10
  863. package/dist/wall/slots.d.ts.map +0 -1
  864. package/dist/wall/slots.js +0 -84
  865. package/dist/window/slots.d.ts +0 -5
  866. package/dist/window/slots.d.ts.map +0 -1
  867. package/dist/window/slots.js +0 -11
@@ -0,0 +1,220 @@
1
+ import { subtractPolygonsFromPolygon } from '@pascal-app/core';
2
+ import { ensureRenderableGeometryAttributes } from '@pascal-app/viewer';
3
+ import { BufferGeometry, Float32BufferAttribute, ShapeUtils, Vector2 } from 'three';
4
+ export function buildStraightCurtainPiecesWithCutouts(pieces, base, cutouts) {
5
+ const positions = [];
6
+ const normals = [];
7
+ const preparedCutouts = cutouts.map((cutout) => {
8
+ const points = cutout.map((point) => [point.x, point.y]);
9
+ const xs = points.map(([x]) => x);
10
+ const ys = points.map(([, y]) => y);
11
+ return {
12
+ points,
13
+ minX: Math.min(...xs),
14
+ maxX: Math.max(...xs),
15
+ minY: Math.min(...ys),
16
+ maxY: Math.max(...ys),
17
+ };
18
+ });
19
+ const vertex = (point, normal) => {
20
+ positions.push(point[0], point[1], point[2]);
21
+ normals.push(normal[0], normal[1], normal[2]);
22
+ };
23
+ const contains = (ring, point) => {
24
+ let inside = false;
25
+ for (let index = 0, previous = ring.length - 1; index < ring.length; previous = index++) {
26
+ const a = ring[index];
27
+ const b = ring[previous];
28
+ if (a[1] > point[1] !== b[1] > point[1] &&
29
+ point[0] < ((b[0] - a[0]) * (point[1] - a[1])) / (b[1] - a[1]) + a[0]) {
30
+ inside = !inside;
31
+ }
32
+ }
33
+ return inside;
34
+ };
35
+ const area = (ring) => Math.abs(ring.reduce((sum, point, index) => {
36
+ const next = ring[(index + 1) % ring.length];
37
+ return sum + point[0] * next[1] - next[0] * point[1];
38
+ }, 0) / 2);
39
+ for (const piece of pieces) {
40
+ const bottom = piece.bottom + base;
41
+ const top = piece.top + base;
42
+ const overlapping = preparedCutouts.filter((cutout) => cutout.maxX > piece.left &&
43
+ cutout.minX < piece.right &&
44
+ cutout.maxY > bottom &&
45
+ cutout.minY < top);
46
+ const subject = [
47
+ [piece.left, bottom],
48
+ [piece.right, bottom],
49
+ [piece.right, top],
50
+ [piece.left, top],
51
+ ];
52
+ const rings = subtractPolygonsFromPolygon(subject, overlapping.map(({ points }) => points)).sort((a, b) => area(b) - area(a));
53
+ const groups = [];
54
+ for (const ring of rings) {
55
+ const parent = groups.find(({ contour }) => contains(contour, ring[0]));
56
+ if (parent)
57
+ parent.holes.push([...ring].reverse());
58
+ else
59
+ groups.push({ contour: ring, holes: [] });
60
+ }
61
+ for (const { contour, holes } of groups) {
62
+ const flattened = [contour, ...holes].flat();
63
+ const triangles = ShapeUtils.triangulateShape(contour.map(([x, y]) => new Vector2(x, y)), holes.map((hole) => hole.map(([x, y]) => new Vector2(x, y))));
64
+ for (const triangle of triangles) {
65
+ const aIndex = triangle[0];
66
+ const bIndex = triangle[1];
67
+ const cIndex = triangle[2];
68
+ const a = flattened[aIndex];
69
+ const b = flattened[bIndex];
70
+ const c = flattened[cIndex];
71
+ vertex([a[0], a[1], piece.front], [0, 0, 1]);
72
+ vertex([b[0], b[1], piece.front], [0, 0, 1]);
73
+ vertex([c[0], c[1], piece.front], [0, 0, 1]);
74
+ vertex([c[0], c[1], piece.back], [0, 0, -1]);
75
+ vertex([b[0], b[1], piece.back], [0, 0, -1]);
76
+ vertex([a[0], a[1], piece.back], [0, 0, -1]);
77
+ }
78
+ for (const ring of [contour, ...holes]) {
79
+ for (let index = 0; index < ring.length; index++) {
80
+ const a = ring[index];
81
+ const b = ring[(index + 1) % ring.length];
82
+ const dx = b[0] - a[0];
83
+ const dy = b[1] - a[1];
84
+ const length = Math.hypot(dx, dy);
85
+ if (length <= 1e-6)
86
+ continue;
87
+ const normal = [dy / length, -dx / length, 0];
88
+ vertex([a[0], a[1], piece.back], normal);
89
+ vertex([b[0], b[1], piece.back], normal);
90
+ vertex([b[0], b[1], piece.front], normal);
91
+ vertex([a[0], a[1], piece.back], normal);
92
+ vertex([b[0], b[1], piece.front], normal);
93
+ vertex([a[0], a[1], piece.front], normal);
94
+ }
95
+ }
96
+ }
97
+ }
98
+ const geometry = new BufferGeometry();
99
+ geometry.setAttribute('position', new Float32BufferAttribute(positions, 3));
100
+ geometry.setAttribute('normal', new Float32BufferAttribute(normals, 3));
101
+ ensureRenderableGeometryAttributes(geometry);
102
+ return geometry;
103
+ }
104
+ // Adjacent fragments of one pane share a boundary, not a second glass surface.
105
+ export function buildStraightCurtainPieces(pieces, base, cullSharedFaces = true) {
106
+ if (!cullSharedFaces) {
107
+ const valuesPerPiece = 6 * 6 * 3;
108
+ const positions = new Float32Array(pieces.length * valuesPerPiece);
109
+ const normals = new Float32Array(pieces.length * valuesPerPiece);
110
+ let offset = 0;
111
+ const vertex = (point, normal) => {
112
+ positions[offset] = point[0];
113
+ normals[offset++] = normal[0];
114
+ positions[offset] = point[1];
115
+ normals[offset++] = normal[1];
116
+ positions[offset] = point[2];
117
+ normals[offset++] = normal[2];
118
+ };
119
+ const quad = (a, b, c, d, normal) => {
120
+ vertex(a, normal);
121
+ vertex(b, normal);
122
+ vertex(c, normal);
123
+ vertex(a, normal);
124
+ vertex(c, normal);
125
+ vertex(d, normal);
126
+ };
127
+ for (const piece of pieces) {
128
+ const { left: l, right: r, bottom, top, front: f, back: k } = piece;
129
+ const b = bottom + base;
130
+ const t = top + base;
131
+ quad([l, b, f], [r, b, f], [r, t, f], [l, t, f], [0, 0, 1]);
132
+ quad([r, b, k], [l, b, k], [l, t, k], [r, t, k], [0, 0, -1]);
133
+ quad([l, b, k], [l, b, f], [l, t, f], [l, t, k], [-1, 0, 0]);
134
+ quad([r, b, f], [r, b, k], [r, t, k], [r, t, f], [1, 0, 0]);
135
+ quad([l, b, k], [r, b, k], [r, b, f], [l, b, f], [0, -1, 0]);
136
+ quad([l, t, f], [r, t, f], [r, t, k], [l, t, k], [0, 1, 0]);
137
+ }
138
+ const geometry = new BufferGeometry();
139
+ geometry.setAttribute('position', new Float32BufferAttribute(positions, 3));
140
+ geometry.setAttribute('normal', new Float32BufferAttribute(normals, 3));
141
+ ensureRenderableGeometryAttributes(geometry);
142
+ return geometry;
143
+ }
144
+ const positions = new Float32Array(pieces.length * 6 * 6 * 3);
145
+ const normals = new Float32Array(positions.length);
146
+ let offset = 0;
147
+ const vertex = (point, normal) => {
148
+ positions[offset] = point[0];
149
+ normals[offset++] = normal[0];
150
+ positions[offset] = point[1];
151
+ normals[offset++] = normal[1];
152
+ positions[offset] = point[2];
153
+ normals[offset++] = normal[2];
154
+ };
155
+ const quad = (a, b, c, d, normal) => {
156
+ vertex(a, normal);
157
+ vertex(b, normal);
158
+ vertex(c, normal);
159
+ vertex(a, normal);
160
+ vertex(c, normal);
161
+ vertex(d, normal);
162
+ };
163
+ const sides = ['left', 'right', 'bottom', 'top'];
164
+ const key = (piece, side, coordinate = piece[side]) => `${side}:${coordinate.toFixed(7)}:${piece.front.toFixed(7)}:${piece.back.toFixed(7)}`;
165
+ const edges = new Map();
166
+ if (cullSharedFaces) {
167
+ for (const piece of pieces) {
168
+ for (const side of sides) {
169
+ const id = key(piece, side);
170
+ const neighbors = edges.get(id) ?? [];
171
+ neighbors.push(piece);
172
+ edges.set(id, neighbors);
173
+ }
174
+ }
175
+ }
176
+ for (const piece of pieces) {
177
+ const { left: l, right: r, bottom, top, front: f, back: k } = piece;
178
+ const b = bottom + base;
179
+ const t = top + base;
180
+ quad([l, b, f], [r, b, f], [r, t, f], [l, t, f], [0, 0, 1]);
181
+ quad([r, b, k], [l, b, k], [l, t, k], [r, t, k], [0, 0, -1]);
182
+ for (const side of sides) {
183
+ const vertical = side === 'left' || side === 'right';
184
+ let runs = vertical ? [[bottom, top]] : [[l, r]];
185
+ const opposite = side === 'left' ? 'right' : side === 'right' ? 'left' : side === 'bottom' ? 'top' : 'bottom';
186
+ if (cullSharedFaces) {
187
+ for (const other of edges.get(key(piece, opposite, piece[side])) ?? []) {
188
+ if (other === piece)
189
+ continue;
190
+ const low = vertical ? other.bottom : other.left;
191
+ const high = vertical ? other.top : other.right;
192
+ runs = runs.flatMap(([start, end]) => high <= start || low >= end
193
+ ? [[start, end]]
194
+ : [
195
+ ...(low > start ? [[start, low]] : []),
196
+ ...(high < end ? [[high, end]] : []),
197
+ ]);
198
+ }
199
+ }
200
+ for (const [start, end] of runs) {
201
+ if (vertical) {
202
+ const y0 = start + base, y1 = end + base;
203
+ if (side === 'left')
204
+ quad([l, y0, k], [l, y0, f], [l, y1, f], [l, y1, k], [-1, 0, 0]);
205
+ else
206
+ quad([r, y0, f], [r, y0, k], [r, y1, k], [r, y1, f], [1, 0, 0]);
207
+ }
208
+ else if (side === 'bottom')
209
+ quad([start, b, k], [end, b, k], [end, b, f], [start, b, f], [0, -1, 0]);
210
+ else
211
+ quad([start, t, f], [end, t, f], [end, t, k], [start, t, k], [0, 1, 0]);
212
+ }
213
+ }
214
+ }
215
+ const geometry = new BufferGeometry();
216
+ geometry.setAttribute('position', new Float32BufferAttribute(positions.subarray(0, offset), 3));
217
+ geometry.setAttribute('normal', new Float32BufferAttribute(normals.subarray(0, offset), 3));
218
+ ensureRenderableGeometryAttributes(geometry);
219
+ return geometry;
220
+ }
@@ -0,0 +1,4 @@
1
+ import type { BufferGeometry } from 'three';
2
+ export declare const CURTAIN_WALL_SHADOW_NAME = "curtain-wall-shadow";
3
+ export declare function buildCurtainWallShadowGeometry(source: BufferGeometry, opaqueGlass: boolean): BufferGeometry;
4
+ //# sourceMappingURL=curtain-wall-shadow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"curtain-wall-shadow.d.ts","sourceRoot":"","sources":["../../src/wall/curtain-wall-shadow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAA;AAE3C,eAAO,MAAM,wBAAwB,wBAAwB,CAAA;AAE7D,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,cAAc,EACtB,WAAW,EAAE,OAAO,GACnB,cAAc,CAYhB"}
@@ -0,0 +1,15 @@
1
+ export const CURTAIN_WALL_SHADOW_NAME = 'curtain-wall-shadow';
2
+ export function buildCurtainWallShadowGeometry(source, opaqueGlass) {
3
+ const geometry = source.clone();
4
+ const indices = [];
5
+ for (const group of source.groups) {
6
+ if (group.materialIndex === 1 && !opaqueGlass)
7
+ continue;
8
+ for (let i = group.start; i < group.start + group.count; i++)
9
+ indices.push(source.index ? source.index.getX(i) : i);
10
+ }
11
+ geometry.clearGroups();
12
+ geometry.setIndex(indices);
13
+ geometry.setDrawRange(0, indices.length);
14
+ return geometry;
15
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"curve-tool.d.ts","sourceRoot":"","sources":["../../src/wall/curve-tool.tsx"],"names":[],"mappings":"AAEA,OAAO,EAaL,KAAK,QAAQ,EACd,MAAM,kBAAkB,CAAA;AAazB;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,CAmJtD,CAAA;AAED,eAAe,aAAa,CAAA"}
1
+ {"version":3,"file":"curve-tool.d.ts","sourceRoot":"","sources":["../../src/wall/curve-tool.tsx"],"names":[],"mappings":"AAEA,OAAO,EAaL,KAAK,QAAQ,EACd,MAAM,kBAAkB,CAAA;AAazB;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,CAsJtD,CAAA;AAED,eAAe,aAAa,CAAA"}
@@ -55,6 +55,10 @@ export const CurveWallTool = ({ node }) => {
55
55
  useScene.getState().markDirty(nodeId);
56
56
  };
57
57
  const onGridMove = (event) => {
58
+ // A move between the cancel and the unmount would republish an override
59
+ // nothing clears any more.
60
+ if (wasFinalized)
61
+ return;
58
62
  const snapStep = getSegmentGridStep();
59
63
  // Snap the cursor on the WORLD XZ grid (still in building-local
60
64
  // coords for the rest of the math) so a rotated building doesn't
@@ -1,19 +1,4 @@
1
1
  import { type NodeDefinition } from '@pascal-app/core';
2
2
  import { WallNode } from './schema';
3
- /**
4
- * Wall — the Phase 3 stress test of the registry-driven node model.
5
- *
6
- * Stage A: registered (capabilities, relations, parametrics, presentation).
7
- * Stage B: deferred — wall geometry depends on level-batch miter data that
8
- * doesn't fit the generic `(node, ctx) => Group` shape without `ctx.
9
- * levelData?.miters`. See plan's "GeometryContext" extension note.
10
- * `renderer` + `system` keep wrap-exporting legacy WallRenderer +
11
- * WallSystem + WallCutout.
12
- * Stage C: `def.floorplan` builder produces the mitered plan footprint
13
- * polygon from shared floor-plan level data, with `ctx.siblings` as the
14
- * direct-caller fallback.
15
- * floorplan-panel.tsx's `wallPolygons` short-circuits to [] when
16
- * wall is registered.
17
- */
18
3
  export declare const wallDefinition: NodeDefinition<typeof WallNode>;
19
4
  //# sourceMappingURL=definition.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/wall/definition.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,cAAc,EAEpB,MAAM,kBAAkB,CAAA;AAwBzB,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAGnC;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,cAAc,EAAE,cAAc,CAAC,OAAO,QAAQ,CA4J1D,CAAA"}
1
+ {"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/wall/definition.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,cAAc,EAGpB,MAAM,kBAAkB,CAAA;AA8BzB,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AA8BnC,eAAO,MAAM,cAAc,EAAE,cAAc,CAAC,OAAO,QAAQ,CA2O1D,CAAA"}
@@ -1,5 +1,5 @@
1
- import { getWallBaseElevationForNodes, getWallEffectiveHeightForNodes, } from '@pascal-app/core';
2
- import { DRAFTING_SURFACE_EXTENSION_KEY, } from '@pascal-app/editor';
1
+ import { DEFAULT_WALL_THICKNESS, getWallBaseElevationForNodes, getWallEffectiveHeightForNodes, wallSlots, } from '@pascal-app/core';
2
+ import { DRAFTING_SURFACE_EXTENSION_KEY, getWallDrawVariant, PANEL_MODEL_EXTENSION, useEditor, } from '@pascal-app/editor';
3
3
  import { buildWallContextualDimensions } from './contextual-dimensions';
4
4
  import { hasWallCurveBlockingChildren } from './curve-eligibility';
5
5
  import { buildWallFloorplan, computeWallFloorplanLevelData } from './floorplan';
@@ -8,10 +8,13 @@ import { wallFloorplanMoveTarget } from './floorplan-move';
8
8
  import { wallFloorplanSiblingOverrides } from './floorplan-overrides';
9
9
  import { matchWallMeasurementFeature, resolveWallMeasurementFeature, wallMeasurementFeatures, } from './measurement';
10
10
  import { wallPaint } from './paint';
11
+ import { wallReferenceModel, wallSettings } from './panel-model';
11
12
  import { wallParametrics } from './parametrics';
12
13
  import { wallQuickMeasurement } from './quick-measurement';
13
14
  import { WallNode } from './schema';
14
- import { wallSlots } from './slots';
15
+ import { WALL_SPLIT_MAX_CUTS } from './split-preview';
16
+ import { setWallSplitCuts } from './split-session';
17
+ import { useWallSplit } from './split-store';
15
18
  /**
16
19
  * Wall — the Phase 3 stress test of the registry-driven node model.
17
20
  *
@@ -27,14 +30,37 @@ import { wallSlots } from './slots';
27
30
  * floorplan-panel.tsx's `wallPolygons` short-circuits to [] when
28
31
  * wall is registered.
29
32
  */
33
+ const SPLIT_CUT_COUNTS = Array.from({ length: WALL_SPLIT_MAX_CUTS }, (_, index) => String(index + 1));
34
+ /** Show a tool hint only while the wall tool draws this Rooms variant. */
35
+ const whenWallVariant = (variant) => ({
36
+ subscribe: (onChange) => useEditor.subscribe(onChange),
37
+ value: () => getWallDrawVariant() === variant,
38
+ });
30
39
  export const wallDefinition = {
31
40
  kind: 'wall',
32
41
  snapProfile: 'structural',
33
- schemaVersion: 8,
42
+ schemaVersion: 10,
34
43
  schema: WallNode,
35
44
  category: 'structure',
36
45
  surfaceRole: 'wall',
37
46
  extensions: {
47
+ [PANEL_MODEL_EXTENSION]: {
48
+ rows: ({ node, nodes, update }) => wallSettings(node, nodes, update),
49
+ multiControls: ({ selection, nodes }) => {
50
+ const reference = wallReferenceModel(selection, nodes);
51
+ return [
52
+ {
53
+ id: 'wall-reference',
54
+ kind: 'segmented',
55
+ section: 'Dimensions',
56
+ label: 'Reference',
57
+ options: reference.options,
58
+ value: reference.value,
59
+ onChange: (value) => reference.apply(value),
60
+ },
61
+ ];
62
+ },
63
+ },
38
64
  [DRAFTING_SURFACE_EXTENSION_KEY]: {
39
65
  kind: 'wall',
40
66
  classifyFace: (node, localNormal) => {
@@ -55,8 +81,11 @@ export const wallDefinition = {
55
81
  },
56
82
  },
57
83
  'pascal:editor/floorplan': {
84
+ tool: () => import('./floorplan-tool'),
85
+ reshapeLayers: { split: () => import('./split-floorplan-layer') },
58
86
  contextualDimensions: buildWallContextualDimensions,
59
87
  actionMenu: {
88
+ actions: () => import('./actions'),
60
89
  canCurve: ({ node, nodes }) => !hasWallCurveBlockingChildren(node.children.flatMap((childId) => {
61
90
  const child = nodes[childId];
62
91
  return child ? [child] : [];
@@ -82,6 +111,7 @@ export const wallDefinition = {
82
111
  selectable: { hitVolume: 'bbox' },
83
112
  // Front + back faces host items (paintings, shelves, switches).
84
113
  surfaces: {
114
+ hosting: false,
85
115
  top: {
86
116
  height: (node, { nodes }) => {
87
117
  const wall = node;
@@ -101,7 +131,14 @@ export const wallDefinition = {
101
131
  // `{ slotId, label, default }` contract every other paintable kind exposes.
102
132
  // Paint still writes the legacy inline fields for base faces via
103
133
  // `wallPaint`; migrating those fully into `node.slots` is a later step.
104
- slots: () => wallSlots(),
134
+ slots: (node) => wallSlots(node),
135
+ // F2 layers stack from the front face (or the exterior with
136
+ // `face: 'exterior'`); `thickness` holds their sum.
137
+ assembly: {
138
+ reference: 'front',
139
+ measure: 'normal',
140
+ body: (node) => node.thickness ?? DEFAULT_WALL_THICKNESS,
141
+ },
105
142
  },
106
143
  relations: {
107
144
  hosts: ['door', 'window', 'item', 'lean-to-extension'],
@@ -125,6 +162,7 @@ export const wallDefinition = {
125
162
  curve: () => import('./curve-tool'),
126
163
  'move-endpoint': () => import('./move-endpoint-tool'),
127
164
  move: () => import('./move-tool'),
165
+ split: () => import('./split-tool'),
128
166
  },
129
167
  renderer: {
130
168
  kind: 'parametric',
@@ -157,10 +195,57 @@ export const wallDefinition = {
157
195
  },
158
196
  floorplanMoveTarget: wallFloorplanMoveTarget,
159
197
  floorplanSiblingOverrides: wallFloorplanSiblingOverrides,
198
+ // The gesture row follows the Rooms variant picked in the Build panel (the
199
+ // HUD header names it); the variant itself is never cycled from here.
160
200
  toolHints: [
161
- { key: 'Left click', label: 'Set wall start / end' },
201
+ {
202
+ key: 'Left click',
203
+ label: 'Set one corner, then the opposite',
204
+ visible: whenWallVariant('rectangle'),
205
+ },
206
+ {
207
+ key: 'Left click',
208
+ label: 'Add a corner · click the first to close',
209
+ visible: whenWallVariant('polygon'),
210
+ },
211
+ { key: 'Left click', label: 'Set wall start / end', visible: whenWallVariant('walls') },
162
212
  { key: 'Esc', label: 'Cancel' },
163
213
  ],
214
+ // The split session (`split-session.ts`) is the wall's own reshape; the HUD
215
+ // shows these while it runs. The snapping chip comes from the scope.
216
+ affordanceHints: {
217
+ split: [
218
+ { key: 'Left click', label: 'Split at the marks' },
219
+ {
220
+ key: 'Scroll',
221
+ label: 'Cuts',
222
+ chip: {
223
+ subscribe: (onChange) => useWallSplit.subscribe(onChange),
224
+ value: () => String(useWallSplit.getState().draft?.cuts ?? 1),
225
+ cycle: () => {
226
+ const cuts = useWallSplit.getState().draft?.cuts ?? 1;
227
+ setWallSplitCuts(cuts >= WALL_SPLIT_MAX_CUTS ? 1 : cuts + 1);
228
+ },
229
+ labels: Object.fromEntries(SPLIT_CUT_COUNTS.map((count) => [
230
+ count,
231
+ count === '1' ? 'Cuts: 1' : `Cuts: ${count}, even`,
232
+ ])),
233
+ icons: Object.fromEntries(SPLIT_CUT_COUNTS.map((count) => [count, 'lucide:scissors'])),
234
+ tooltip: 'Number of cuts — scroll or click to change',
235
+ },
236
+ },
237
+ {
238
+ key: 'Alt',
239
+ label: 'Free placement',
240
+ // Several cuts are evenly spaced, so there is nothing to place freely.
241
+ visible: {
242
+ subscribe: (onChange) => useWallSplit.subscribe(onChange),
243
+ value: () => (useWallSplit.getState().draft?.cuts ?? 1) === 1,
244
+ },
245
+ },
246
+ { key: 'Esc', label: 'Cancel' },
247
+ ],
248
+ },
164
249
  presentation: {
165
250
  label: 'Wall',
166
251
  description: 'A straight or curved wall segment. Hosts doors, windows, lean-to extensions, and wall-mounted items.',
@@ -169,6 +254,6 @@ export const wallDefinition = {
169
254
  paletteOrder: 10,
170
255
  },
171
256
  mcp: {
172
- description: 'A wall segment defined by start + end points, with optional curve sagitta.',
257
+ description: 'A wall defined by endpoints and optional curve sagitta. wallType selects standard or curtain. curtainWall configures construction, framing, grids, glazing, spandrels, and zero-based panel overrides. Thickness is frame depth for curtain walls.',
173
258
  },
174
259
  };
@@ -23,7 +23,7 @@ import { type FloorplanMoveTarget, type WallNode } from '@pascal-app/core';
23
23
  * overrides after the write lands so the system reads from the new
24
24
  * committed scene state.
25
25
  *
26
- * Existing automatic slabs and ceilings receive live polygon overrides during
26
+ * Existing slabs, ceilings and zones receive live polygon overrides during
27
27
  * the drag. New surfaces and removals stay deferred until commit because live
28
28
  * overrides cannot represent nodes that do not exist in the scene.
29
29
  */
@@ -1 +1 @@
1
- {"version":3,"file":"floorplan-move.d.ts","sourceRoot":"","sources":["../../src/wall/floorplan-move.ts"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,mBAAmB,EAaxB,KAAK,QAAQ,EAEd,MAAM,kBAAkB,CAAA;AAqCzB;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,eAAO,MAAM,uBAAuB,EAAE,mBAAmB,CAAC,QAAQ,CAuYjE,CAAA"}
1
+ {"version":3,"file":"floorplan-move.d.ts","sourceRoot":"","sources":["../../src/wall/floorplan-move.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,mBAAmB,EAQxB,KAAK,QAAQ,EAEd,MAAM,kBAAkB,CAAA;AAoBzB;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,eAAO,MAAM,uBAAuB,EAAE,mBAAmB,CAAC,QAAQ,CAgVjE,CAAA"}
@@ -1,13 +1,7 @@
1
- import { detectSpacesForLevel, getCeilingClampBound, getPerpendicularWallMoveAxis, getPlannedLinkedWallUpdates, getStoredLevelHeight, planAutoCeilingsForLevel, planAutoSlabsForLevel, planWallMoveJunctions, useLiveNodeOverrides, useScene, } from '@pascal-app/core';
2
- import { getFloorplanWallThickness, getSegmentGridStep, isSegmentLongEnough, snapScalarToGrid, useWallMoveGhosts, } from '@pascal-app/editor';
1
+ import { createLevelStructurePreview, getPerpendicularWallMoveAxis, getPlannedLinkedWallUpdates, planWallEndRejoins, planWallMoveJunctions, useLiveNodeOverrides, useScene, } from '@pascal-app/core';
2
+ import { getFloorplanWallThickness, getSegmentGridStep, isSegmentLongEnough, snapScalarToGrid, useWallMoveGhosts, WALL_CONNECT_SNAP_RADIUS, } from '@pascal-app/editor';
3
3
  import { useViewer } from '@pascal-app/viewer';
4
4
  import { buildBridgeWallCreates, buildBridgeWallPreviews, getLinkedWallSnapshots, getWallsAfterUpdates, stripWallIsNewMetadata, } from './move-shared';
5
- function getLevelSlabs(levelId, nodes) {
6
- return Object.values(nodes).filter((entry) => entry?.type === 'slab' && (entry.parentId ?? null) === levelId);
7
- }
8
- function getLevelCeilings(levelId, nodes) {
9
- return Object.values(nodes).filter((entry) => entry?.type === 'ceiling' && (entry.parentId ?? null) === levelId);
10
- }
11
5
  /**
12
6
  * 2D floor-plan move handler for wall.
13
7
  *
@@ -32,7 +26,7 @@ function getLevelCeilings(levelId, nodes) {
32
26
  * overrides after the write lands so the system reads from the new
33
27
  * committed scene state.
34
28
  *
35
- * Existing automatic slabs and ceilings receive live polygon overrides during
29
+ * Existing slabs, ceilings and zones receive live polygon overrides during
36
30
  * the drag. New surfaces and removals stay deferred until commit because live
37
31
  * overrides cannot represent nodes that do not exist in the scene.
38
32
  */
@@ -78,40 +72,22 @@ export const wallFloorplanMoveTarget = ({ node }) => {
78
72
  let lastNextStart = originalStart;
79
73
  let lastNextEnd = originalEnd;
80
74
  const levelId = node.parentId ?? null;
75
+ const previewStructure = levelId
76
+ ? createLevelStructurePreview(levelId, useScene.getState().nodes)
77
+ : null;
78
+ const dragNodes = Object.fromEntries(Object.values(useScene.getState().nodes)
79
+ .filter((node) => node.parentId === levelId)
80
+ .map((node) => [node.id, node]));
81
81
  const affectedIds = [wallId, ...linkedOriginals.map((wall) => wall.id)];
82
82
  const affectedIdSet = new Set(affectedIds);
83
83
  const touchedSurfaceIds = new Set();
84
- let latestSurfacePlans = null;
85
- const planSurfaces = (walls) => {
86
- if (!levelId)
87
- return null;
88
- const sceneState = useScene.getState();
89
- const levelWalls = walls.filter((wall) => (wall.parentId ?? null) === levelId);
90
- const { roomPolygons } = detectSpacesForLevel(levelId, levelWalls);
91
- const slabs = planAutoSlabsForLevel(roomPolygons, getLevelSlabs(levelId, sceneState.nodes));
92
- const levelNode = sceneState.nodes[levelId];
93
- const ceilings = planAutoCeilingsForLevel(roomPolygons, getLevelCeilings(levelId, sceneState.nodes), {
94
- storeyHeight: levelNode?.type === 'level' ? getStoredLevelHeight(levelNode) : undefined,
95
- ceilingClampBound: (polygon) => getCeilingClampBound(levelId, sceneState.nodes, polygon),
96
- });
97
- return { slabs, ceilings };
98
- };
99
84
  const publishSurfacePreviews = (walls) => {
100
- const plans = planSurfaces(walls);
101
- latestSurfacePlans = plans;
102
- if (!plans)
85
+ if (!previewStructure)
103
86
  return;
104
- const entries = [];
105
- for (const update of plans.slabs.update) {
106
- if (update.data.polygon !== undefined) {
107
- entries.push([update.id, { polygon: update.data.polygon }]);
108
- }
109
- }
110
- for (const update of plans.ceilings.update) {
111
- if (update.data.polygon !== undefined || update.data.height !== undefined) {
112
- entries.push([update.id, update.data]);
113
- }
114
- }
87
+ const updates = previewStructure(walls);
88
+ const entries = updates.flatMap((update) => 'polygon' in update.data || 'holes' in update.data
89
+ ? [[update.id, update.data]]
90
+ : []);
115
91
  const nextIds = new Set(entries.map(([id]) => id));
116
92
  const overrides = useLiveNodeOverrides.getState();
117
93
  const sceneState = useScene.getState();
@@ -142,7 +118,6 @@ export const wallFloorplanMoveTarget = ({ node }) => {
142
118
  sceneState.markDirty(id);
143
119
  }
144
120
  touchedSurfaceIds.clear();
145
- latestSurfacePlans = null;
146
121
  };
147
122
  const session = {
148
123
  affectedIds,
@@ -222,7 +197,7 @@ export const wallFloorplanMoveTarget = ({ node }) => {
222
197
  // `existingWalls` snapshot needs the post-drag layout so duplicate
223
198
  // detection works; we synthesise it from scene state + the
224
199
  // overrides we just published (zustand is still on baseline).
225
- const previewSceneWalls = getWallsAfterUpdates(useScene.getState().nodes, [
200
+ const previewSceneWalls = getWallsAfterUpdates(dragNodes, [
226
201
  { id: wallId, data: { start: nextStart, end: nextEnd } },
227
202
  ...linkedUpdates.map((u) => ({ id: u.id, data: { start: u.start, end: u.end } })),
228
203
  ]).filter((wall) => !collapsedIds.has(wall.id));
@@ -306,49 +281,11 @@ export const wallFloorplanMoveTarget = ({ node }) => {
306
281
  existingWalls,
307
282
  wallCount: Object.values(sceneState.nodes).filter((entry) => entry?.type === 'wall').length,
308
283
  });
309
- const finalWalls = [
310
- ...existingWalls,
311
- ...bridgeCreates.map((entry) => ({ ...entry.node, parentId: entry.parentId ?? null })),
312
- ];
313
- const surfacePlans = planSurfaces(finalWalls) ?? latestSurfacePlans;
314
- const surfaceUpdates = surfacePlans
315
- ? [
316
- ...surfacePlans.slabs.update.map((entry) => ({
317
- id: entry.id,
318
- data: entry.data,
319
- })),
320
- ...surfacePlans.ceilings.update.map((entry) => ({
321
- id: entry.id,
322
- data: entry.data,
323
- })),
324
- ]
325
- : [];
326
- const surfaceCreates = surfacePlans
327
- ? [
328
- ...surfacePlans.slabs.create.map((slab) => ({
329
- node: slab,
330
- parentId: levelId,
331
- })),
332
- ...surfacePlans.ceilings.create.map((ceiling) => ({
333
- node: ceiling,
334
- parentId: levelId,
335
- })),
336
- ]
337
- : [];
338
- const surfaceDeletes = surfacePlans
339
- ? [
340
- ...surfacePlans.slabs.delete.map((id) => id),
341
- ...surfacePlans.ceilings.delete.map((id) => id),
342
- ]
343
- : [];
344
- sceneState.applyNodeChanges({
345
- update: [
346
- ...commitUpdates,
347
- ...surfaceUpdates,
348
- ],
349
- create: [...bridgeCreates, ...surfaceCreates],
350
- delete: Array.from(new Set([...collapsedLinkedWallIds, ...surfaceDeletes])),
351
- });
284
+ sceneState.applyNodeChanges(planWallEndRejoins(sceneState.nodes, commitUpdates.map(({ id }) => id), WALL_CONNECT_SNAP_RADIUS, {
285
+ update: commitUpdates,
286
+ create: bridgeCreates,
287
+ delete: Array.from(collapsedLinkedWallIds),
288
+ }));
352
289
  // Drop the live overrides now that the committed scene state
353
290
  // matches them — leaving them around would keep the system
354
291
  // double-merging the same values and would shadow any genuine
@@ -0,0 +1,4 @@
1
+ import { type FloorplanToolContext } from '@pascal-app/editor';
2
+ /** The wall's plan tool: line drafting stays with the panel; rectangle mode mounts its own tool. */
3
+ export default function WallFloorplanTool(props: FloorplanToolContext): import("react").JSX.Element | null;
4
+ //# sourceMappingURL=floorplan-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"floorplan-tool.d.ts","sourceRoot":"","sources":["../../src/wall/floorplan-tool.tsx"],"names":[],"mappings":"AAOA,OAAO,EACL,KAAK,oBAAoB,EAQ1B,MAAM,oBAAoB,CAAA;AAI3B,oGAAoG;AACpG,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,KAAK,EAAE,oBAAoB,sCAEpE"}