@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,389 @@
1
+ import { containsPoint, difference, floorStepRole, intersection, plateSideRuns, union, } from '@pascal-app/core';
2
+ import { BufferGeometry, Float32BufferAttribute, ShapeUtils, Vector2 } from 'three';
3
+ const TOP_NORMAL_THRESHOLD = 0.5;
4
+ function readTriangles(geometry) {
5
+ const position = geometry.getAttribute('position');
6
+ const uv = geometry.getAttribute('uv');
7
+ const index = geometry.getIndex();
8
+ // A collapsed slab builds an empty geometry with no position attribute.
9
+ const count = index ? index.count / 3 : (position?.count ?? 0) / 3;
10
+ const triangles = [];
11
+ for (let t = 0; t < count; t += 1) {
12
+ const corners = [0, 1, 2].map((offset) => {
13
+ const i = index ? index.getX(t * 3 + offset) : t * 3 + offset;
14
+ return {
15
+ x: position.getX(i),
16
+ y: position.getY(i),
17
+ z: position.getZ(i),
18
+ u: uv ? uv.getX(i) : 0,
19
+ v: uv ? uv.getY(i) : 0,
20
+ };
21
+ });
22
+ triangles.push(corners);
23
+ }
24
+ return triangles;
25
+ }
26
+ function faceNormalY(triangle) {
27
+ const [a, b, c] = triangle;
28
+ const abx = b.x - a.x;
29
+ const aby = b.y - a.y;
30
+ const abz = b.z - a.z;
31
+ const acx = c.x - a.x;
32
+ const acy = c.y - a.y;
33
+ const acz = c.z - a.z;
34
+ const nx = aby * acz - abz * acy;
35
+ const ny = abz * acx - abx * acz;
36
+ const nz = abx * acy - aby * acx;
37
+ const length = Math.hypot(nx, ny, nz);
38
+ return length > 1e-12 ? ny / length : 0;
39
+ }
40
+ function buildGeometry(triangles, withUv) {
41
+ const positions = [];
42
+ const uvs = [];
43
+ for (const triangle of triangles) {
44
+ for (const vertex of triangle) {
45
+ positions.push(vertex.x, vertex.y, vertex.z);
46
+ if (withUv)
47
+ uvs.push(vertex.u, vertex.v);
48
+ }
49
+ }
50
+ const geometry = new BufferGeometry();
51
+ geometry.setAttribute('position', new Float32BufferAttribute(positions, 3));
52
+ if (uvs.length > 0) {
53
+ geometry.setAttribute('uv', new Float32BufferAttribute(uvs, 2));
54
+ geometry.setAttribute('uv2', new Float32BufferAttribute(uvs.slice(), 2));
55
+ }
56
+ geometry.computeVertexNormals();
57
+ return geometry;
58
+ }
59
+ /**
60
+ * Rebuild a point of the source triangle from its XZ position. Height and UV
61
+ * come from the triangle's own plane, so a clipped piece sits exactly where the
62
+ * original did and keeps the plate's UV mapping.
63
+ */
64
+ function sampleTriangle(triangle, x, z) {
65
+ const [a, b, c] = triangle;
66
+ const v0x = b.x - a.x;
67
+ const v0z = b.z - a.z;
68
+ const v1x = c.x - a.x;
69
+ const v1z = c.z - a.z;
70
+ const denominator = v0x * v1z - v1x * v0z;
71
+ if (Math.abs(denominator) < 1e-18)
72
+ return { x, y: a.y, z, u: a.u, v: a.v };
73
+ const px = x - a.x;
74
+ const pz = z - a.z;
75
+ const beta = (px * v1z - v1x * pz) / denominator;
76
+ const gamma = (v0x * pz - px * v0z) / denominator;
77
+ const alpha = 1 - beta - gamma;
78
+ return {
79
+ x,
80
+ z,
81
+ y: alpha * a.y + beta * b.y + gamma * c.y,
82
+ u: alpha * a.u + beta * b.u + gamma * c.u,
83
+ v: alpha * a.v + beta * b.v + gamma * c.v,
84
+ };
85
+ }
86
+ function triangleRing(triangle) {
87
+ return triangle.map((vertex) => [vertex.x, vertex.z]);
88
+ }
89
+ function bounds(ring) {
90
+ let minX = Number.POSITIVE_INFINITY;
91
+ let maxX = Number.NEGATIVE_INFINITY;
92
+ let minZ = Number.POSITIVE_INFINITY;
93
+ let maxZ = Number.NEGATIVE_INFINITY;
94
+ for (const [x, z] of ring) {
95
+ minX = Math.min(minX, x);
96
+ maxX = Math.max(maxX, x);
97
+ minZ = Math.min(minZ, z);
98
+ maxZ = Math.max(maxZ, z);
99
+ }
100
+ return { minX, maxX, minZ, maxZ };
101
+ }
102
+ function polygonBounds(polygons) {
103
+ return bounds(polygons.flatMap((polygon) => polygon.outer));
104
+ }
105
+ function disjoint(a, b) {
106
+ return a.minX > b.maxX || a.maxX < b.minX || a.minZ > b.maxZ || a.maxZ < b.minZ;
107
+ }
108
+ /** Triangles of `triangle` that fall inside `polygons`, re-triangulated in 2D. */
109
+ function clipTriangleToPolygons(triangle, polygons) {
110
+ const ring = triangleRing(triangle);
111
+ const pieces = intersection(union([ring]), polygons);
112
+ const result = [];
113
+ for (const piece of pieces) {
114
+ const contour = piece.outer.map(([x, z]) => new Vector2(x, z));
115
+ const holes = piece.holes
116
+ .filter((hole) => hole.length >= 3)
117
+ .map((hole) => hole.map(([x, z]) => new Vector2(x, z)));
118
+ const points = [...contour, ...holes.flat()];
119
+ for (const face of ShapeUtils.triangulateShape(contour, holes)) {
120
+ const corners = face.map((cornerIndex) => {
121
+ const point = points[cornerIndex];
122
+ return sampleTriangle(triangle, point.x, point.y);
123
+ });
124
+ // triangulateShape returns the input winding; the source triangle's
125
+ // orientation is what the renderer culls against, so restore it.
126
+ result.push(faceNormalY(corners) * faceNormalY(triangle) < 0 ? reverse(corners) : corners);
127
+ }
128
+ }
129
+ return result;
130
+ }
131
+ function reverse(triangle) {
132
+ return [triangle[0], triangle[2], triangle[1]];
133
+ }
134
+ /**
135
+ * Clip a triangle to `s >= limit` (or `s <= limit`), where `s` is the distance
136
+ * along `(dirX, dirZ)` from `origin`. Vertical faces project onto a line, so
137
+ * this is how one side quad is cut at an exposure boundary.
138
+ */
139
+ function clipTriangleBySlab(triangle, origin, dirX, dirZ, from, to) {
140
+ let polygon = [...triangle];
141
+ for (const [limit, keepGreater] of [
142
+ [from, true],
143
+ [to, false],
144
+ ]) {
145
+ const next = [];
146
+ for (const [index, current] of polygon.entries()) {
147
+ const previous = polygon[(index + polygon.length - 1) % polygon.length];
148
+ const sPrevious = (previous.x - origin[0]) * dirX + (previous.z - origin[1]) * dirZ - limit;
149
+ const sCurrent = (current.x - origin[0]) * dirX + (current.z - origin[1]) * dirZ - limit;
150
+ const insidePrevious = keepGreater ? sPrevious >= 0 : sPrevious <= 0;
151
+ const insideCurrent = keepGreater ? sCurrent >= 0 : sCurrent <= 0;
152
+ if (insidePrevious !== insideCurrent) {
153
+ const t = sPrevious / (sPrevious - sCurrent);
154
+ next.push({
155
+ x: previous.x + (current.x - previous.x) * t,
156
+ y: previous.y + (current.y - previous.y) * t,
157
+ z: previous.z + (current.z - previous.z) * t,
158
+ u: previous.u + (current.u - previous.u) * t,
159
+ v: previous.v + (current.v - previous.v) * t,
160
+ });
161
+ }
162
+ if (insideCurrent)
163
+ next.push(current);
164
+ }
165
+ polygon = next;
166
+ if (polygon.length < 3)
167
+ return [];
168
+ }
169
+ const fan = [];
170
+ for (let index = 1; index < polygon.length - 1; index += 1) {
171
+ fan.push([polygon[0], polygon[index], polygon[index + 1]]);
172
+ }
173
+ return fan;
174
+ }
175
+ /** The 2D segment a vertical triangle projects onto, longest extent first. */
176
+ function verticalSpan(triangle) {
177
+ let best = null;
178
+ for (let index = 0; index < 3; index += 1) {
179
+ const a = triangle[index];
180
+ const b = triangle[(index + 1) % 3];
181
+ const length = Math.hypot(b.x - a.x, b.z - a.z);
182
+ if (!best || length > best.length)
183
+ best = { start: [a.x, a.z], end: [b.x, b.z], length };
184
+ }
185
+ return best && best.length > 1e-9 ? best : null;
186
+ }
187
+ function push(buckets, role, triangles) {
188
+ if (role === 'hidden' || !triangles.length)
189
+ return;
190
+ const bucket = buckets.get(role);
191
+ if (bucket)
192
+ bucket.push(...triangles);
193
+ else
194
+ buckets.set(role, [...triangles]);
195
+ }
196
+ /**
197
+ * Split a slab buffer by face orientation only — the pre-plate behaviour, kept
198
+ * verbatim for manual slabs so their two meshes and their paint slots never
199
+ * change.
200
+ */
201
+ export function splitSlabFacesByFacing(geometry) {
202
+ const top = [];
203
+ const side = [];
204
+ const withUv = geometry.getAttribute('uv') !== undefined;
205
+ for (const triangle of readTriangles(geometry)) {
206
+ ;
207
+ (faceNormalY(triangle) > TOP_NORMAL_THRESHOLD ? top : side).push(triangle);
208
+ }
209
+ return { top: buildGeometry(top, withUv), side: buildGeometry(side, withUv) };
210
+ }
211
+ /**
212
+ * Split a plate buffer into one bucket per rendered role: a top bucket per
213
+ * partition cell, `edge` / `riser` per exposure run, and `underside`. Buckets
214
+ * come back in a stable order (cells in partition order, then the sides) so the
215
+ * mesh order of a plate is the same on every rebuild.
216
+ */
217
+ export function splitPlateFaces(geometry, partition, slab) {
218
+ const buckets = new Map();
219
+ const withUv = geometry.getAttribute('uv') !== undefined;
220
+ // Cells in partition order, then the sides in a fixed order: a plate's mesh
221
+ // list is then the same on every rebuild, which is what the node batch's
222
+ // per-mesh allocation keys are indexed by.
223
+ // A room-owned riser draws one mesh per doorway, so each paints on its own.
224
+ const sideRole = (side) => side.zoneId && side.role !== 'hidden'
225
+ ? side.role === 'riser'
226
+ ? floorStepRole(side.zoneId, side.stepKey)
227
+ : `edge:${side.zoneId}`
228
+ : side.role;
229
+ const order = [
230
+ ...new Set([
231
+ ...partition.cells.map((cell) => cell.role),
232
+ 'edge',
233
+ 'riser',
234
+ ...partition.sides.map(sideRole),
235
+ 'underside',
236
+ ]),
237
+ ];
238
+ const cellBounds = partition.cells.map((cell) => polygonBounds(cell.polygons));
239
+ const soffit = slab.elevation - slab.thickness;
240
+ const downturns = partition.sides.flatMap((side) => {
241
+ if (side.role === 'hidden' || side.dropTo === undefined || side.dropTo >= soffit - 0.001)
242
+ return [];
243
+ const [a, b] = [side.start, side.end];
244
+ const length = Math.hypot(b[0] - a[0], b[1] - a[1]);
245
+ const dx = (-(b[1] - a[1]) / length) * slab.thickness, dz = ((b[0] - a[0]) / length) * slab.thickness;
246
+ return [
247
+ {
248
+ bottom: side.dropTo,
249
+ polygon: [a, b, [b[0] + dx, b[1] + dz], [a[0] + dx, a[1] + dz]],
250
+ },
251
+ ];
252
+ });
253
+ const downturnCover = union(downturns.map((d) => d.polygon));
254
+ for (const triangle of readTriangles(geometry)) {
255
+ const normalY = faceNormalY(triangle);
256
+ if (normalY > TOP_NORMAL_THRESHOLD) {
257
+ if (partition.plainTop) {
258
+ push(buckets, partition.cells[0]?.role ?? 'surface', [triangle]);
259
+ continue;
260
+ }
261
+ // Area a manual slab already draws belongs to no cell, so it is simply
262
+ // never emitted — the plate keeps its body and stops z-fighting the top.
263
+ const triangleBounds = bounds(triangleRing(triangle));
264
+ for (const [index, cell] of partition.cells.entries()) {
265
+ if (disjoint(triangleBounds, cellBounds[index]))
266
+ continue;
267
+ push(buckets, cell.role, clipTriangleToPolygons(triangle, cell.polygons));
268
+ }
269
+ continue;
270
+ }
271
+ if (normalY < -TOP_NORMAL_THRESHOLD) {
272
+ push(buckets, 'underside', downturnCover.length
273
+ ? clipTriangleToPolygons(triangle, difference(triangleRing(triangle), downturnCover))
274
+ : [triangle]);
275
+ }
276
+ }
277
+ const rings = [slab.polygon, ...slab.holes];
278
+ for (const side of partition.sides) {
279
+ if (side.role === 'hidden')
280
+ continue;
281
+ const bottom = side.bottom ?? side.dropTo ?? slab.elevation - slab.thickness;
282
+ const top = side.top ?? slab.elevation;
283
+ const [ax, az] = side.start, [bx, bz] = side.end;
284
+ const [u0, u1] = sideEdgeUvs(rings, side.start, side.end);
285
+ const a = { x: ax, y: bottom, z: az, u: u0, v: bottom };
286
+ const b = { x: bx, y: bottom, z: bz, u: u1, v: bottom };
287
+ const c = { ...b, y: top, v: top }, d = { ...a, y: top, v: top };
288
+ push(buckets, sideRole(side), [
289
+ [a, c, b],
290
+ [a, d, c],
291
+ ]);
292
+ }
293
+ const levels = [...new Set([...downturns.map((d) => d.bottom), soffit])].sort((a, b) => a - b);
294
+ let previous = [];
295
+ for (const [i, low] of levels.slice(0, -1).entries()) {
296
+ const high = levels[i + 1];
297
+ const section = union(downturns.filter((d) => d.bottom <= low + 1e-7).map((d) => d.polygon));
298
+ for (const polygon of difference(section, previous)) {
299
+ const contour = polygon.outer.map(([x, z]) => new Vector2(x, z));
300
+ const holes = polygon.holes.map((ring) => ring.map(([x, z]) => new Vector2(x, z)));
301
+ const points = [...contour, ...holes.flat()];
302
+ for (const face of ShapeUtils.triangulateShape(contour, holes)) {
303
+ const triangle = face.map((index) => ({
304
+ x: points[index].x,
305
+ y: low,
306
+ z: points[index].y,
307
+ u: points[index].x,
308
+ v: points[index].y,
309
+ }));
310
+ push(buckets, 'underside', [faceNormalY(triangle) > 0 ? reverse(triangle) : triangle]);
311
+ }
312
+ }
313
+ for (const polygon of section)
314
+ for (const ring of [polygon.outer, ...polygon.holes])
315
+ for (const [j, a] of ring.entries()) {
316
+ const b = ring[(j + 1) % ring.length];
317
+ const dx = b[0] - a[0], dz = b[1] - a[1], length = Math.hypot(dx, dz);
318
+ const midpoint = [(a[0] + b[0]) / 2, (a[1] + b[1]) / 2];
319
+ const exterior = partition.sides.some((side) => {
320
+ const sx = side.end[0] - side.start[0], sz = side.end[1] - side.start[1];
321
+ const t = ((midpoint[0] - side.start[0]) * sx + (midpoint[1] - side.start[1]) * sz) /
322
+ (sx * sx + sz * sz);
323
+ return (t >= -1e-6 &&
324
+ t <= 1 + 1e-6 &&
325
+ Math.abs((midpoint[0] - side.start[0]) * sz - (midpoint[1] - side.start[1]) * sx) <
326
+ 1e-6);
327
+ });
328
+ if (exterior)
329
+ continue;
330
+ const normalInside = containsPoint(section, [
331
+ midpoint[0] + (dz / length) * 0.0001,
332
+ midpoint[1] - (dx / length) * 0.0001,
333
+ ]);
334
+ const aa = { x: a[0], y: low, z: a[1], u: 0, v: low }, bb = { x: b[0], y: low, z: b[1], u: length, v: low };
335
+ const cc = { ...bb, y: high, v: high }, dd = { ...aa, y: high, v: high };
336
+ const faces = [
337
+ [aa, cc, bb],
338
+ [aa, dd, cc],
339
+ ];
340
+ push(buckets, 'underside', normalInside ? faces.map(reverse) : faces);
341
+ }
342
+ previous = section;
343
+ }
344
+ return order
345
+ .filter((role) => (buckets.get(role)?.length ?? 0) > 0)
346
+ .map((role) => ({ role, geometry: buildGeometry(buckets.get(role), withUv) }));
347
+ }
348
+ function sideEdgeUvs(rings, start, end) {
349
+ for (const ring of rings) {
350
+ for (const [i, a] of ring.entries()) {
351
+ const b = ring[(i + 1) % ring.length];
352
+ const length = Math.hypot(b[0] - a[0], b[1] - a[1]);
353
+ if (length < 1e-9)
354
+ continue;
355
+ const dx = (b[0] - a[0]) / length;
356
+ const dz = (b[1] - a[1]) / length;
357
+ const along = (p) => (p[0] - a[0]) * dx + (p[1] - a[1]) * dz;
358
+ const onEdge = (p) => Math.abs((p[0] - a[0]) * dz - (p[1] - a[1]) * dx) < 1e-6 &&
359
+ along(p) >= -1e-6 &&
360
+ along(p) <= length + 1e-6;
361
+ if (onEdge(start) && onEdge(end))
362
+ return [along(start), along(end)];
363
+ }
364
+ }
365
+ const length = Math.hypot(end[0] - start[0], end[1] - start[1]);
366
+ const dx = (end[0] - start[0]) / length;
367
+ const dz = (end[1] - start[1]) / length;
368
+ return [start[0] * dx + start[1] * dz, end[0] * dx + end[1] * dz];
369
+ }
370
+ export function clipPlateTerrainFill(geometry, partition) {
371
+ const triangles = [];
372
+ for (const triangle of readTriangles(geometry)) {
373
+ // Keep the terrain-following bottom cap, including steep slopes.
374
+ if (Math.abs(faceNormalY(triangle)) > 1e-6) {
375
+ triangles.push(triangle);
376
+ continue;
377
+ }
378
+ const span = verticalSpan(triangle);
379
+ if (!span)
380
+ continue;
381
+ const runs = plateSideRuns(partition, span.start, span.end);
382
+ for (const run of runs) {
383
+ if (run.dropTo !== undefined)
384
+ continue;
385
+ triangles.push(...clipTriangleBySlab(triangle, span.start, (span.end[0] - span.start[0]) / span.length, (span.end[1] - span.start[1]) / span.length, run.t0 * span.length, run.t1 * span.length));
386
+ }
387
+ }
388
+ return buildGeometry(triangles, geometry.getAttribute('uv') !== undefined);
389
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../src/slab/tool.tsx"],"names":[],"mappings":"AA4EA,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EA2T5B,CAAA;AAED,eAAe,QAAQ,CAAA"}
1
+ {"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../src/slab/tool.tsx"],"names":[],"mappings":"AA6EA,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EA2T5B,CAAA;AAED,eAAe,QAAQ,CAAA"}
package/dist/slab/tool.js CHANGED
@@ -1,7 +1,7 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { DEFAULT_ANGLE_STEP, emitter, resolveSlabPlacementElevation, snapPointAlongAngleRay, snapPointToGrid, useScene, } from '@pascal-app/core';
4
- import { CursorSphere, clearPlacementSurface, clearSlabSnapFeedback, EDITOR_LAYER, isAngleSnapActive, isGridSnapActive, markToolCancelConsumed, publishHorizontalConstructionPlane, publishPlacementSurface, resampleTerrainConstructionPlane, resolveEventConstructionPlane, resolveLevelConstructionPlane, resolvePointerSupportSurface, resolveSlabPlanPointSnap, triggerSFX, useEditor, useFloorplanDraftPreview, } from '@pascal-app/editor';
4
+ import { CursorSphere, clearPlacementSurface, clearSlabSnapFeedback, EDITOR_LAYER, isAngleSnapActive, isGridSnapActive, markToolCancelConsumed, publishHorizontalConstructionPlane, publishPlacementSurface, resampleTerrainConstructionPlane, resolveEventConstructionPlane, resolveLevelConstructionPlane, resolvePointerSupportSurface, resolveSlabPlanPointSnap, triggerSFX, useEditor, useFloorplanDraftPreview, visibleScene, } from '@pascal-app/editor';
5
5
  import { useViewer } from '@pascal-app/viewer';
6
6
  import { useThree } from '@react-three/fiber';
7
7
  import { useEffect, useMemo, useRef, useState } from 'react';
@@ -142,7 +142,7 @@ export const SlabTool = () => {
142
142
  firstPoint &&
143
143
  Math.abs(clickPoint[0] - firstPoint[0]) < 0.25 &&
144
144
  Math.abs(clickPoint[1] - firstPoint[1]) < 0.25) {
145
- if (shouldRegistryCommitSlab(useEditor.getState().viewMode, 'grid')) {
145
+ if (shouldRegistryCommitSlab(visibleScene(useEditor.getState()), 'grid')) {
146
146
  const slabId = commitSlabDrawing(currentLevelId, points, constructionPlaneRef.current?.elevation ?? null);
147
147
  setSelection({ selectedIds: [slabId] });
148
148
  }
@@ -168,7 +168,7 @@ export const SlabTool = () => {
168
168
  const finishDrawing = (trigger) => {
169
169
  if (points.length < 3)
170
170
  return;
171
- if (shouldRegistryCommitSlab(useEditor.getState().viewMode, trigger)) {
171
+ if (shouldRegistryCommitSlab(visibleScene(useEditor.getState()), trigger)) {
172
172
  const slabId = commitSlabDrawing(currentLevelId, points, constructionPlaneRef.current?.elevation ?? null);
173
173
  setSelection({ selectedIds: [slabId] });
174
174
  }
@@ -1 +1 @@
1
- {"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/solar-panel/definition.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,cAAc,EAGpB,MAAM,kBAAkB,CAAA;AAGzB,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAgNzC;;;;;;;;;;GAUG;AACH,eAAO,MAAM,oBAAoB,EAAE,cAAc,CAAC,OAAO,cAAc,CAyDtE,CAAA"}
1
+ {"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/solar-panel/definition.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,cAAc,EAGpB,MAAM,kBAAkB,CAAA;AAGzB,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAgNzC;;;;;;;;;;GAUG;AACH,eAAO,MAAM,oBAAoB,EAAE,cAAc,CAAC,OAAO,cAAc,CA0DtE,CAAA"}
@@ -235,6 +235,7 @@ export const solarPanelDefinition = {
235
235
  parametrics: solarPanelParametrics,
236
236
  handles: solarPanelHandles,
237
237
  floorplan: buildSolarPanelFloorplan,
238
+ rendersChildren: false,
238
239
  renderer: {
239
240
  kind: 'parametric',
240
241
  module: () => import('./renderer'),
@@ -1 +1 @@
1
- {"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/spawn/definition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAoB,cAAc,EAA8B,MAAM,kBAAkB,CAAA;AAKpG,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AA0CpC,eAAO,MAAM,eAAe,EAAE,cAAc,CAAC,OAAO,SAAS,CAuE5D,CAAA"}
1
+ {"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/spawn/definition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAoB,cAAc,EAA8B,MAAM,kBAAkB,CAAA;AAKpG,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AA0CpC,eAAO,MAAM,eAAe,EAAE,cAAc,CAAC,OAAO,SAAS,CAwE5D,CAAA"}
@@ -73,6 +73,7 @@ export const spawnDefinition = {
73
73
  },
74
74
  parametrics: spawnParametrics,
75
75
  handles: [spawnRotateHandle(), spawnMoveHandle()],
76
+ rendersChildren: false,
76
77
  renderer: {
77
78
  kind: 'parametric',
78
79
  module: () => import('./renderer'),
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Turning the pure `GuardBox` data from `baluster-guard.ts` into Three.js
3
+ * geometry with metre-scale UVs (E-009): 1 UV unit = 1 m on every face, so a
4
+ * finish tiles the same on a rail, a newel and a picket. Both the per-flight
5
+ * guard (`renderer.tsx`) and the continuous guard (`continuous-railings.tsx`)
6
+ * build their boxes through here, so there is one UV convention to maintain.
7
+ */
8
+ import * as THREE from 'three';
9
+ import type { GuardBox } from './guard-path';
10
+ /** A box whose UVs run in metres (1 unit = 1 m) on each face. */
11
+ export declare function metricBox(length: number, height: number, depth: number): THREE.BoxGeometry;
12
+ /** A round guard member (a cable or its sleeve) as a metre-UV cylinder laid
13
+ * along its direction: `size[0]` is the diameter, `size[2]` the length. UVs run
14
+ * in metres — the circumference across, the length along — so a finish tiles
15
+ * the same as on a rectangular bar. */
16
+ export declare function metricCylinder(diameter: number, length: number): THREE.CylinderGeometry;
17
+ /** One oriented guard box as a metre-UV geometry, z laid along its direction. */
18
+ export declare function guardBoxGeometry(box: GuardBox): THREE.CylinderGeometry | THREE.BoxGeometry;
19
+ /** Merge a guard's boxes into one metre-UV geometry, or null when empty. */
20
+ export declare function mergeGuardBoxes(boxes: GuardBox[]): THREE.BufferGeometry | null;
21
+ //# sourceMappingURL=baluster-geometry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"baluster-geometry.d.ts","sourceRoot":"","sources":["../../src/stair/baluster-geometry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAE5C,iEAAiE;AACjE,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,qBAetE;AAED;;;uCAGuC;AACvC,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,0BAY9D;AAYD,iFAAiF;AACjF,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,QAAQ,8CAW7C;AAED,4EAA4E;AAC5E,wBAAgB,eAAe,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC,cAAc,GAAG,IAAI,CAM9E"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Turning the pure `GuardBox` data from `baluster-guard.ts` into Three.js
3
+ * geometry with metre-scale UVs (E-009): 1 UV unit = 1 m on every face, so a
4
+ * finish tiles the same on a rail, a newel and a picket. Both the per-flight
5
+ * guard (`renderer.tsx`) and the continuous guard (`continuous-railings.tsx`)
6
+ * build their boxes through here, so there is one UV convention to maintain.
7
+ */
8
+ import * as THREE from 'three';
9
+ import { mergeGeometries } from 'three/examples/jsm/utils/BufferGeometryUtils.js';
10
+ /** A box whose UVs run in metres (1 unit = 1 m) on each face. */
11
+ export function metricBox(length, height, depth) {
12
+ const geometry = new THREE.BoxGeometry(length, height, depth);
13
+ const position = geometry.getAttribute('position'), normal = geometry.getAttribute('normal'), uv = geometry.getAttribute('uv');
14
+ for (let i = 0; i < position.count; i++) {
15
+ const x = position.getX(i), y = position.getY(i), z = position.getZ(i);
16
+ if (Math.abs(normal.getX(i)) > 0.5)
17
+ uv.setXY(i, z, y);
18
+ else if (Math.abs(normal.getY(i)) > 0.5)
19
+ uv.setXY(i, x, z);
20
+ else
21
+ uv.setXY(i, x, y);
22
+ }
23
+ geometry.setAttribute('uv2', geometry.getAttribute('uv').clone());
24
+ return geometry;
25
+ }
26
+ /** A round guard member (a cable or its sleeve) as a metre-UV cylinder laid
27
+ * along its direction: `size[0]` is the diameter, `size[2]` the length. UVs run
28
+ * in metres — the circumference across, the length along — so a finish tiles
29
+ * the same as on a rectangular bar. */
30
+ export function metricCylinder(diameter, length) {
31
+ const radius = diameter / 2;
32
+ const geometry = new THREE.CylinderGeometry(radius, radius, length, 12);
33
+ const position = geometry.getAttribute('position'), normal = geometry.getAttribute('normal'), uv = geometry.getAttribute('uv');
34
+ for (let i = 0; i < uv.count; i++) {
35
+ if (Math.abs(normal.getY(i)) > 0.5)
36
+ uv.setXY(i, position.getX(i), position.getZ(i));
37
+ else
38
+ uv.setXY(i, uv.getX(i) * 2 * Math.PI * radius, uv.getY(i) * length);
39
+ }
40
+ geometry.setAttribute('uv2', uv.clone());
41
+ return geometry;
42
+ }
43
+ function roundGuardBoxGeometry(box) {
44
+ const geometry = metricCylinder(box.size[0], box.size[2]);
45
+ const direction = new THREE.Vector3(...box.direction).normalize();
46
+ geometry.applyQuaternion(new THREE.Quaternion().setFromUnitVectors(new THREE.Vector3(0, 1, 0), direction));
47
+ geometry.translate(box.center[0], box.center[1], box.center[2]);
48
+ return geometry;
49
+ }
50
+ /** One oriented guard box as a metre-UV geometry, z laid along its direction. */
51
+ export function guardBoxGeometry(box) {
52
+ if (box.round)
53
+ return roundGuardBoxGeometry(box);
54
+ const geometry = metricBox(box.size[0], box.size[1], box.size[2]);
55
+ const z = new THREE.Vector3(...box.direction).normalize();
56
+ let x = new THREE.Vector3().crossVectors(new THREE.Vector3(0, 1, 0), z);
57
+ if (x.lengthSq() < 1e-8)
58
+ x.set(1, 0, 0);
59
+ x = x.normalize();
60
+ const y = new THREE.Vector3().crossVectors(z, x).normalize();
61
+ geometry.applyMatrix4(new THREE.Matrix4().makeBasis(x, y, z));
62
+ geometry.translate(box.center[0], box.center[1], box.center[2]);
63
+ return geometry;
64
+ }
65
+ /** Merge a guard's boxes into one metre-UV geometry, or null when empty. */
66
+ export function mergeGuardBoxes(boxes) {
67
+ if (!boxes.length)
68
+ return null;
69
+ const geometries = boxes.map(guardBoxGeometry);
70
+ const merged = mergeGeometries(geometries, false);
71
+ for (const geometry of geometries)
72
+ geometry.dispose();
73
+ return merged;
74
+ }
@@ -0,0 +1,50 @@
1
+ /**
2
+ * One coherent baluster guard laid out along a rail path, as oriented boxes.
3
+ *
4
+ * A guard is built the way a joiner builds it: a newel at each end (and, when
5
+ * a spacing is given, every bay between), a top rail and a bottom rail that
6
+ * follow the path with a square fitting block closing every interior corner,
7
+ * and square pickets spanning the two rails. The path sampling, corner finding
8
+ * and newel/picket stations are the style-agnostic chassis in `guard-path.ts`,
9
+ * shared with the deck post-and-rail guard; this file only turns those stations
10
+ * into the baluster style's members. The caller renders the boxes
11
+ * (`renderer.tsx`) or merges them into one mesh (`continuous-railings.tsx`),
12
+ * so this stays pure data — no Three.js meshes, no React.
13
+ *
14
+ * `pickets` is a metre pitch sampled along the horizontal run, so the density
15
+ * tracks the run rather than the path's tessellation. Pickets that fall inside
16
+ * a newel are dropped. `reach` runs the rails that far past the top vertex
17
+ * along the final slope to die into a post standing there; `topPost: false`
18
+ * then omits the top newel.
19
+ */
20
+ import { type GuardBox, type GuardRail, type Vec3 } from './guard-path';
21
+ export type BalusterGuardOptions = {
22
+ railHeight: number;
23
+ /** Metre pitch for pickets, sampled along the horizontal run. */
24
+ pickets: number;
25
+ /** Metres between newels along the run; omit (or Infinity) for ends only. */
26
+ postSpacing?: number;
27
+ topPost?: boolean;
28
+ postThrough?: boolean;
29
+ /** Metres the rails run past the top vertex, along the final slope. */
30
+ reach?: number;
31
+ };
32
+ /** The two rails' section (`across` the run, `vertical`) and `y` off the nosing line. */
33
+ export declare const BALUSTER_RAIL_PROFILE: {
34
+ readonly top: {
35
+ readonly across: 0.062;
36
+ readonly vertical: 0.05;
37
+ readonly y: 0;
38
+ };
39
+ readonly bottom: {
40
+ readonly across: 0.045;
41
+ readonly vertical: 0.045;
42
+ readonly y: 0.08;
43
+ };
44
+ };
45
+ /** A guard's rails as `{ center y off the nosing line, section across, vertical }`,
46
+ * bottom-to-top. Shared with the flight-to-flight connector so a bridge carries
47
+ * the same rails as the guards it joins. */
48
+ export declare function balusterGuardRails(railHeight: number): GuardRail[];
49
+ export declare function buildBalusterGuard(points: Vec3[], options: BalusterGuardOptions): GuardBox[];
50
+ //# sourceMappingURL=baluster-guard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"baluster-guard.d.ts","sourceRoot":"","sources":["../../src/stair/baluster-guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAEL,KAAK,QAAQ,EACb,KAAK,SAAS,EAEd,KAAK,IAAI,EACV,MAAM,cAAc,CAAA;AAErB,MAAM,MAAM,oBAAoB,GAAG;IACjC,UAAU,EAAE,MAAM,CAAA;IAClB,iEAAiE;IACjE,OAAO,EAAE,MAAM,CAAA;IACf,6EAA6E;IAC7E,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,uEAAuE;IACvE,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAWD,yFAAyF;AACzF,eAAO,MAAM,qBAAqB;;;;;;;;;;;CAGxB,CAAA;AAQV;;4CAE4C;AAC5C,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,EAAE,CAKlE;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,oBAAoB,GAAG,QAAQ,EAAE,CAkC5F"}