@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
@@ -1,14 +1,16 @@
1
1
  'use client';
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { terrainFieldOf, unionPolygons, useLiveNodeOverrides, useLiveTerrain, useRegistry, useScene, } from '@pascal-app/core';
4
- import { backdropGradient, deepSkyColor, getSceneTheme, horizonHazeColor, NodeRenderer, useNodeEvents, useSceneAtmosphere, useSceneGroundReplacement, useViewer, } from '@pascal-app/viewer';
2
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { sightTriangle, streetCorners, terrainContours, terrainFieldOf, unionPolygons, useLiveNodeOverrides, useLiveTerrain, useRegistry, useScene, } from '@pascal-app/core';
4
+ import { backdropGradient, deepSkyColor, getSceneTheme, horizonHazeColor, NodeRenderer, useImmersiveXRPresentation, useNodeEvents, useSceneAtmosphere, useSceneGroundReplacement, useViewer, } from '@pascal-app/viewer';
5
5
  import { useEffect, useMemo, useRef } from 'react';
6
- import { BufferAttribute, BufferGeometry, Path, Shape, ShapeGeometry } from 'three';
6
+ import { BufferAttribute, BufferGeometry, DoubleSide, Path, Shape, ShapeGeometry, } from 'three';
7
7
  import { cameraPosition, color, mix, positionWorld, smoothstep, float as tslFloat, vec2, } from 'three/tsl';
8
8
  import { MeshLambertNodeMaterial } from 'three/webgpu';
9
+ import { buildPatternedRibbon, PROPERTY_LINE_PATTERN, SETBACK_LINE_PATTERN, updateRibbonHeights, } from './line-ribbon';
9
10
  import { getRecessedSlabGroundHoles } from './recessed-slab-ground-holes';
11
+ import { resolveFrontEdge, setbackEnvelope } from './setbacks';
10
12
  import { buildDrapedPolyline, terrainGridKey, updateDrapedHeights, } from './terrain-drape';
11
- import { HORIZON_PLANE_Y, terrainFootprint } from './terrain-geometry';
13
+ import { HORIZON_PLANE_Y, terrainBlockBase } from './terrain-geometry';
12
14
  import { TerrainRenderer } from './terrain-renderer';
13
15
  const Y_OFFSET = 0.01;
14
16
  // The horizon disc is presentation-only — clicks must fall through to the
@@ -41,13 +43,15 @@ const createBoundaryLineGeometry = (points, field) => {
41
43
  geometry.setAttribute('uv', new BufferAttribute(uvs, 2));
42
44
  return { geometry, ring };
43
45
  };
44
- /**
45
- * Re-upload a draped ring's positions after an in-place height rewrite.
46
- *
47
- * No `addUpdateRange`: a dab can move any subset of the ring's vertices (the brush
48
- * is a disc, the ring is a loop, and the two intersect in up to four arcs), so a
49
- * range would either be the whole buffer or a list. The whole buffer is a few KB.
50
- */
46
+ function redrapeRibbons(r, field) {
47
+ if (!r)
48
+ return;
49
+ updateRibbonHeights(r.property, field, Y_OFFSET);
50
+ if (r.envelope)
51
+ updateRibbonHeights(r.envelope, field, Y_OFFSET + 0.01);
52
+ for (const g of r.triangles)
53
+ updateRibbonHeights(g, field, Y_OFFSET + 0.012);
54
+ }
51
55
  function markPositionsDirty(geometry) {
52
56
  const attribute = geometry.getAttribute('position');
53
57
  attribute.needsUpdate = true;
@@ -75,6 +79,7 @@ function addSlabHoles(shape, slabPolygons, originX = 0, originZ = 0) {
75
79
  }
76
80
  export const SiteRenderer = ({ node }) => {
77
81
  const ref = useRef(null);
82
+ const immersiveXR = useImmersiveXRPresentation();
78
83
  const atmosphere = useSceneAtmosphere();
79
84
  const groundReplaced = useSceneGroundReplacement();
80
85
  useRegistry(node.id, 'site', ref);
@@ -201,10 +206,11 @@ export const SiteRenderer = ({ node }) => {
201
206
  addSlabHoles(shape, slabPolygons);
202
207
  return shape;
203
208
  }, [polygonPoints, slabPolygons]);
204
- // The terrain footprint is punched out alongside the recessed slabs, and for the
205
- // same reason: the disc must not cap ground that is modelled below it.
206
- //
207
- // biome-ignore lint/correctness/useExhaustiveDependencies: `terrainKey` is the grid signature the footprint is a function of; depending on the field itself would rebuild an 800 m disc every dab.
209
+ // With terrain the lot is a block — its ground cut to the property line, its
210
+ // skirt dropping to one flat base — and the disc lies just under that base, so
211
+ // nothing of it caps the lot and nothing of the block stands proud of it from
212
+ // the far side. The recessed slabs are still punched: a basement can go deeper.
213
+ const horizonY = useMemo(() => (terrainGrid ? terrainBlockBase(terrainGrid) - 0.02 : HORIZON_PLANE_Y), [terrainGrid]);
208
214
  const horizonGeometry = useMemo(() => {
209
215
  if (!fadeBounds || groundReplaced)
210
216
  return null;
@@ -217,10 +223,9 @@ export const SiteRenderer = ({ node }) => {
217
223
  shape.lineTo(Math.cos(angle) * radius, Math.sin(angle) * radius);
218
224
  }
219
225
  shape.closePath();
220
- const holes = terrainGrid ? [...slabPolygons, terrainFootprint(terrainGrid)] : slabPolygons;
221
- addSlabHoles(shape, holes, fadeBounds.cx, fadeBounds.cz);
226
+ addSlabHoles(shape, slabPolygons, fadeBounds.cx, fadeBounds.cz);
222
227
  return new ShapeGeometry(shape);
223
- }, [fadeBounds, slabPolygons, terrainKey, groundReplaced]);
228
+ }, [fadeBounds, slabPolygons, groundReplaced]);
224
229
  useEffect(() => () => horizonGeometry?.dispose(), [horizonGeometry]);
225
230
  useEffect(() => () => horizonMaterial?.dispose(), [horizonMaterial]);
226
231
  // Boundary line geometry, subdivided against the terrain grid when there is one.
@@ -242,6 +247,70 @@ export const SiteRenderer = ({ node }) => {
242
247
  }, [polygonPoints, terrainKey, node.id]);
243
248
  useEffect(() => () => boundary?.geometry.dispose(), [boundary]);
244
249
  const lineGeometry = boundary?.geometry ?? null;
250
+ // A site with drafted setbacks draws the PROPERTY LINE as the standard line —
251
+ // dark, thick, a long dash and two dots — and the SETBACK lines in black
252
+ // dashes, both ribbons lying on the draped ground (line-ribbon.ts). Any other
253
+ // site keeps the plain amber boundary. Keyed on the same grid as the
254
+ // boundary; a dab mid-stroke moves the thin ring only, the ribbons follow
255
+ // on the commit.
256
+ // biome-ignore lint/correctness/useExhaustiveDependencies: keyed on the grid, not the field — see above.
257
+ const ribbons = useMemo(() => {
258
+ const setbacks = node.setbacks;
259
+ if (!setbacks || !boundary || !polygonPoints || polygonPoints.length < 3)
260
+ return null;
261
+ const field = useLiveTerrain.getState().fieldOf(node.id) ?? persistedField;
262
+ const property = buildPatternedRibbon(boundary.ring.positions, PROPERTY_LINE_PATTERN, 0.22);
263
+ let envelopeGeometry = null;
264
+ const triangleGeometries = [];
265
+ const points = polygonPoints.map(([x, z]) => [x ?? 0, z ?? 0]);
266
+ const front = resolveFrontEdge(points, node.frontEdge, node.northRotation ?? 0);
267
+ const streetEdges = node.streetEdges ?? [];
268
+ const sightTriangleM = typeof node.sightTriangleFt === 'number' && node.sightTriangleFt > 0
269
+ ? node.sightTriangleFt * 0.3048
270
+ : 0;
271
+ const envelope = setbackEnvelope(points, setbacks, front, { streetEdges, sightTriangleM });
272
+ if (envelope.length >= 3) {
273
+ const draped = buildDrapedPolyline({
274
+ points: envelope,
275
+ field,
276
+ lift: Y_OFFSET + 0.01,
277
+ closed: true,
278
+ });
279
+ envelopeGeometry = buildPatternedRibbon(draped.positions, SETBACK_LINE_PATTERN, 0.1);
280
+ }
281
+ // the corner sight triangles, dashed like the setbacks
282
+ if (sightTriangleM > 0) {
283
+ for (const [a, b] of streetCorners(points, [front, ...streetEdges])) {
284
+ const tri = sightTriangle(points, a, b, sightTriangleM);
285
+ if (!tri)
286
+ continue;
287
+ const draped = buildDrapedPolyline({
288
+ points: [tri.corner, tri.a, tri.b],
289
+ field,
290
+ lift: Y_OFFSET + 0.012,
291
+ closed: true,
292
+ });
293
+ triangleGeometries.push(buildPatternedRibbon(draped.positions, SETBACK_LINE_PATTERN, 0.08));
294
+ }
295
+ }
296
+ return { property, envelope: envelopeGeometry, triangles: triangleGeometries };
297
+ }, [
298
+ boundary,
299
+ polygonPoints,
300
+ node.setbacks,
301
+ node.frontEdge,
302
+ node.streetEdges,
303
+ node.sightTriangleFt,
304
+ node.northRotation,
305
+ terrainKey,
306
+ node.id,
307
+ ]);
308
+ useEffect(() => () => {
309
+ ribbons?.property.dispose();
310
+ ribbons?.envelope?.dispose();
311
+ for (const g of ribbons?.triangles ?? [])
312
+ g.dispose();
313
+ }, [ribbons]);
245
314
  // Per-dab height rewrite, imperative for the same reason `TerrainRenderer`'s
246
315
  // upload is: a stroke pushes dozens of patches a second, and routing each through
247
316
  // a React render would rebuild the ring's buffers at pointer rate. The XZ of every
@@ -251,6 +320,8 @@ export const SiteRenderer = ({ node }) => {
251
320
  // polygon edit without resubscribing.
252
321
  const boundaryRef = useRef(null);
253
322
  boundaryRef.current = boundary;
323
+ const ribbonsRef = useRef(null);
324
+ ribbonsRef.current = ribbons;
254
325
  useEffect(() => {
255
326
  let lastPatch = useLiveTerrain.getState().strokeOf(node.id)?.lastPatch ?? null;
256
327
  return useLiveTerrain.subscribe((state) => {
@@ -267,6 +338,7 @@ export const SiteRenderer = ({ node }) => {
267
338
  const field = terrainFieldOf({ id: node.id, terrain: node.terrain });
268
339
  updateDrapedHeights(current.ring, field, Y_OFFSET);
269
340
  markPositionsDirty(current.geometry);
341
+ redrapeRibbons(ribbonsRef.current, field);
270
342
  }
271
343
  return;
272
344
  }
@@ -275,8 +347,68 @@ export const SiteRenderer = ({ node }) => {
275
347
  lastPatch = stroke.lastPatch;
276
348
  updateDrapedHeights(current.ring, stroke.field, Y_OFFSET);
277
349
  markPositionsDirty(current.geometry);
350
+ // the property and setback ribbons follow the same dab
351
+ redrapeRibbons(ribbonsRef.current, stroke.field);
278
352
  });
279
353
  }, [node.id, node.terrain]);
354
+ // The CONTOUR LINES on the ground (toggleable in 3D, drawn as faint,
355
+ // translucent near-black lines): the site's surveyed lines (the dossier's 3DEP set) at the
356
+ // site-plan interval, else the heightfield's own contours; each draped
357
+ // on the ground and merged into one line-segments buffer. Rebuilt on the
358
+ // terrain COMMIT (the persisted field), not per dab.
359
+ const contourGeometry = useMemo(() => {
360
+ if (!node.contours3d)
361
+ return null;
362
+ const intervalIn = node.contourIntervalIn ?? 12;
363
+ if (!(intervalIn > 0))
364
+ return null;
365
+ const field = persistedField;
366
+ const lot = (polygonPoints ?? []);
367
+ const stepFt = intervalIn / 12;
368
+ const surveyed = node.terrainContours;
369
+ const multiple = (a, b) => Math.abs(a / b - Math.round(a / b)) < 1e-9;
370
+ let lines = [];
371
+ if (surveyed && surveyed.lines.length > 0 && multiple(stepFt, surveyed.intervalFt)) {
372
+ lines = surveyed.lines.filter((l) => multiple(l.elevationFt, stepFt)).map((l) => l.points);
373
+ }
374
+ else if (field) {
375
+ lines = terrainContours(field, intervalIn * 0.0254, lot).map((c) => c.points);
376
+ }
377
+ const chunks = [];
378
+ let total = 0;
379
+ for (const points of lines) {
380
+ if (points.length < 2)
381
+ continue;
382
+ const draped = buildDrapedPolyline({ points, field, lift: Y_OFFSET + 0.005, closed: false });
383
+ const n = draped.positions.length / 3;
384
+ if (n < 2)
385
+ continue;
386
+ const seg = new Float32Array((n - 1) * 6);
387
+ for (let i = 0; i < n - 1; i++) {
388
+ seg[i * 6] = draped.positions[i * 3] ?? 0;
389
+ seg[i * 6 + 1] = draped.positions[i * 3 + 1] ?? 0;
390
+ seg[i * 6 + 2] = draped.positions[i * 3 + 2] ?? 0;
391
+ seg[i * 6 + 3] = draped.positions[i * 3 + 3] ?? 0;
392
+ seg[i * 6 + 4] = draped.positions[i * 3 + 4] ?? 0;
393
+ seg[i * 6 + 5] = draped.positions[i * 3 + 5] ?? 0;
394
+ }
395
+ chunks.push(seg);
396
+ total += seg.length;
397
+ }
398
+ if (total === 0)
399
+ return null;
400
+ const merged = new Float32Array(total);
401
+ let at = 0;
402
+ for (const c of chunks) {
403
+ merged.set(c, at);
404
+ at += c.length;
405
+ }
406
+ const geometry = new BufferGeometry();
407
+ geometry.setAttribute('position', new BufferAttribute(merged, 3));
408
+ geometry.computeBoundingSphere();
409
+ return geometry;
410
+ }, [node.contours3d, node.contourIntervalIn, node.terrainContours, persistedField, polygonPoints]);
411
+ useEffect(() => () => contourGeometry?.dispose(), [contourGeometry]);
280
412
  const groundGeometry = useMemo(() => {
281
413
  if (!groundShape)
282
414
  return null;
@@ -290,9 +422,15 @@ export const SiteRenderer = ({ node }) => {
290
422
  // inside TerrainRenderer so a stroke that starts on a site with no persisted
291
423
  // terrain still mounts the mesh.
292
424
  const showTerrain = terrainGrid !== null;
425
+ // The Site is the one kind whose `visible` flag stops at itself: hiding it
426
+ // drops the parcel's own presentation — ground fill, sculpted ground, lot
427
+ // line — while everything standing on the site keeps its own flag (the
428
+ // exporter and the 2D plan draw the same line). The horizon disc is a world
429
+ // backdrop rather than part of the parcel, so it stays either way.
430
+ const showSiteSurfaces = node.visible !== false;
293
431
  if (!(node && lineGeometry)) {
294
432
  return null;
295
433
  }
296
- return (_jsxs("group", { ref: ref, ...handlers, children: [(node.children ?? []).map((childId) => (_jsx(NodeRenderer, { nodeId: childId }, childId))), showTerrain && _jsx(TerrainRenderer, { material: groundMaterial, site: node }), groundGeometry && !showTerrain && (_jsx("mesh", { geometry: groundGeometry, material: groundMaterial, position: [0, -0.05, 0], receiveShadow: true, rotation: [-Math.PI / 2, 0, 0] })), horizonGeometry && horizonMaterial && fadeBounds && (_jsx("mesh", { geometry: horizonGeometry, material: horizonMaterial, position: [fadeBounds.cx, HORIZON_PLANE_Y, fadeBounds.cz], raycast: noopRaycast, receiveShadow: true, rotation: [-Math.PI / 2, 0, 0], userData: { pascalExport: 'strip' } })), _jsx("line", { frustumCulled: false, geometry: lineGeometry, renderOrder: 9, children: _jsx("lineBasicMaterial", { color: "#f59e0b", linewidth: 2, opacity: 0.6, transparent: true }) })] }));
434
+ return (_jsxs("group", { ref: ref, ...handlers, children: [(node.children ?? []).map((childId) => (_jsx(NodeRenderer, { nodeId: childId }, childId))), showSiteSurfaces && showTerrain && (_jsx(TerrainRenderer, { holes: slabPolygons, material: groundMaterial, polygon: polygonPoints, site: node })), showSiteSurfaces && groundGeometry && !showTerrain && (_jsx("mesh", { geometry: groundGeometry, material: groundMaterial, position: [0, -0.05, 0], receiveShadow: true, rotation: [-Math.PI / 2, 0, 0] })), !immersiveXR && horizonGeometry && horizonMaterial && fadeBounds && (_jsx("mesh", { geometry: horizonGeometry, material: horizonMaterial, position: [fadeBounds.cx, horizonY, fadeBounds.cz], raycast: noopRaycast, receiveShadow: true, rotation: [-Math.PI / 2, 0, 0], userData: { pascalExport: 'strip' } })), showSiteSurfaces && ribbons && (_jsxs(_Fragment, { children: [_jsx("mesh", { frustumCulled: false, geometry: ribbons.property, raycast: noopRaycast, renderOrder: 9, children: _jsx("meshBasicMaterial", { color: "#1c1917", depthWrite: false, side: DoubleSide, toneMapped: false }) }), ribbons.envelope && (_jsx("mesh", { frustumCulled: false, geometry: ribbons.envelope, raycast: noopRaycast, renderOrder: 9, children: _jsx("meshBasicMaterial", { color: "#000000", depthWrite: false, opacity: 0.85, side: DoubleSide, toneMapped: false, transparent: true }) })), ribbons.triangles.map((g, i) => (_jsx("mesh", { frustumCulled: false, geometry: g, raycast: noopRaycast, renderOrder: 9, children: _jsx("meshBasicMaterial", { color: "#000000", depthWrite: false, opacity: 0.85, side: DoubleSide, toneMapped: false, transparent: true }) }, i))), _jsx("line", { frustumCulled: false, geometry: lineGeometry, renderOrder: 8, children: _jsx("lineBasicMaterial", { color: "#1c1917", opacity: 0.5, transparent: true }) })] })), showSiteSurfaces && !ribbons && (_jsx("line", { frustumCulled: false, geometry: lineGeometry, renderOrder: 9, children: _jsx("lineBasicMaterial", { color: "#f59e0b", linewidth: 2, opacity: 0.6, transparent: true }) })), showSiteSurfaces && contourGeometry && (_jsx("lineSegments", { frustumCulled: false, geometry: contourGeometry, raycast: noopRaycast, renderOrder: 8, children: _jsx("lineBasicMaterial", { color: "#000000", depthWrite: false, opacity: 0.22, toneMapped: false, transparent: true }) }))] }));
297
435
  };
298
436
  export default SiteRenderer;
@@ -0,0 +1,33 @@
1
+ /**
2
+ * The setback envelope in the 3D site — the same rules the site plan draws
3
+ * (packages/editor/src/lib/floorplan/site-plan/geometry.ts: front edge,
4
+ * edge roles, per-role setbacks, offset-line intersections), ported here
5
+ * because the nodes package cannot import the editor. Pure. When the site
6
+ * has setbacks, the 3D view draws them black and dashed.
7
+ */
8
+ export type Pt = readonly [number, number];
9
+ export type EdgeRole = 'front' | 'rear' | 'left' | 'right' | 'street';
10
+ export type SetbackInputs = {
11
+ front: number;
12
+ side: number;
13
+ rear: number;
14
+ left?: number;
15
+ right?: number;
16
+ /** A corner lot's second street side; absent = the front setback. */
17
+ streetSide?: number;
18
+ };
19
+ export declare function polygonArea(points: readonly Pt[]): number;
20
+ export declare function isCounterClockwise(points: readonly Pt[]): boolean;
21
+ /** Unit normal of edge i pointing OUT of the polygon (away from its centroid). */
22
+ export declare function outwardNormal(points: readonly Pt[], i: number): Pt;
23
+ /** The most north-facing edge (plan up = −z = north, turned by `northRotation`). */
24
+ export declare function mostNorthFacingEdge(points: readonly Pt[], northRotation?: number): number;
25
+ export declare function resolveFrontEdge(points: readonly Pt[], frontEdge: number | undefined, northRotation?: number): number;
26
+ export declare function classifyEdges(points: readonly Pt[], frontIndex: number, streetEdges?: readonly number[]): EdgeRole[];
27
+ export declare function setbackForRole(setbacks: SetbackInputs, role: EdgeRole): number;
28
+ /** The buildable envelope: every edge pushed inward by its role's setback (see the editor's copy for the rules). */
29
+ export declare function setbackEnvelope(points: readonly Pt[], setbacks: SetbackInputs, frontIndex: number, options?: {
30
+ streetEdges?: readonly number[];
31
+ sightTriangleM?: number;
32
+ }): Pt[];
33
+ //# sourceMappingURL=setbacks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setbacks.d.ts","sourceRoot":"","sources":["../../src/site/setbacks.ts"],"names":[],"mappings":"AACA;;;;;;GAMG;AACH,MAAM,MAAM,EAAE,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAC1C,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAA;AACrE,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,qEAAqE;IACrE,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,CAAA;AAID,wBAAgB,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,GAAG,MAAM,CAQzD;AAYD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,GAAG,OAAO,CAEjE;AAED,kFAAkF;AAClF,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,EAAE,CAwBlE;AAED,oFAAoF;AACpF,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,aAAa,SAAI,GAAG,MAAM,CAcpF;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,SAAS,EAAE,EAAE,EACrB,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,aAAa,SAAI,GAChB,MAAM,CASR;AAED,wBAAgB,aAAa,CAC3B,MAAM,EAAE,SAAS,EAAE,EAAE,EACrB,UAAU,EAAE,MAAM,EAClB,WAAW,GAAE,SAAS,MAAM,EAAO,GAClC,QAAQ,EAAE,CAmDZ;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,GAAG,MAAM,CAa9E;AAED,oHAAoH;AACpH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,SAAS,EAAE,EAAE,EACrB,QAAQ,EAAE,aAAa,EACvB,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE;IAAE,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CAAO,GACzE,EAAE,EAAE,CAwDN"}
@@ -0,0 +1,204 @@
1
+ import { arcRuns, insetPolygon, sightTriangle, streetCorners } from '@pascal-app/core';
2
+ const EPS = 1e-9;
3
+ export function polygonArea(points) {
4
+ let a = 0;
5
+ for (let i = 0; i < points.length; i++) {
6
+ const p = points[i];
7
+ const q = points[(i + 1) % points.length];
8
+ a += p[0] * q[1] - q[0] * p[1];
9
+ }
10
+ return Math.abs(a) / 2;
11
+ }
12
+ function signedArea(points) {
13
+ let a = 0;
14
+ for (let i = 0; i < points.length; i++) {
15
+ const p = points[i];
16
+ const q = points[(i + 1) % points.length];
17
+ a += p[0] * q[1] - q[0] * p[1];
18
+ }
19
+ return a / 2;
20
+ }
21
+ export function isCounterClockwise(points) {
22
+ return signedArea(points) > 0;
23
+ }
24
+ /** Unit normal of edge i pointing OUT of the polygon (away from its centroid). */
25
+ export function outwardNormal(points, i) {
26
+ const n = points.length;
27
+ const p = points[i];
28
+ const q = points[(i + 1) % n];
29
+ const dx = q[0] - p[0];
30
+ const dy = q[1] - p[1];
31
+ const len = Math.hypot(dx, dy) || 1;
32
+ let nx = -dy / len;
33
+ let ny = dx / len;
34
+ let cx = 0;
35
+ let cy = 0;
36
+ for (const pt of points) {
37
+ cx += pt[0];
38
+ cy += pt[1];
39
+ }
40
+ cx /= n;
41
+ cy /= n;
42
+ const mx = (p[0] + q[0]) / 2;
43
+ const my = (p[1] + q[1]) / 2;
44
+ if ((mx - cx) * nx + (my - cy) * ny < 0) {
45
+ nx = -nx;
46
+ ny = -ny;
47
+ }
48
+ return [nx, ny];
49
+ }
50
+ /** The most north-facing edge (plan up = −z = north, turned by `northRotation`). */
51
+ export function mostNorthFacingEdge(points, northRotation = 0) {
52
+ let best = 0;
53
+ let bestScore = Number.POSITIVE_INFINITY;
54
+ for (let i = 0; i < points.length; i++) {
55
+ const [nx, ny] = outwardNormal(points, i);
56
+ // heading of the outward normal, degrees clockwise from north
57
+ const heading = (((Math.atan2(nx, -ny) - northRotation) * 180) / Math.PI + 360) % 360;
58
+ const off = Math.min(heading, 360 - heading);
59
+ if (off < bestScore) {
60
+ bestScore = off;
61
+ best = i;
62
+ }
63
+ }
64
+ return best;
65
+ }
66
+ export function resolveFrontEdge(points, frontEdge, northRotation = 0) {
67
+ if (typeof frontEdge === 'number' &&
68
+ Number.isInteger(frontEdge) &&
69
+ frontEdge >= 0 &&
70
+ frontEdge < points.length)
71
+ return frontEdge;
72
+ return mostNorthFacingEdge(points, northRotation);
73
+ }
74
+ export function classifyEdges(points, frontIndex, streetEdges = []) {
75
+ const n = points.length;
76
+ const roles = new Array(n).fill('left');
77
+ if (n === 0)
78
+ return roles;
79
+ const front = ((frontIndex % n) + n) % n;
80
+ const fn = outwardNormal(points, front);
81
+ // a corner lot's other street edges (the parcel fabric's frontage) are
82
+ // 'street' — they take the street-side setback, never a side yard, and
83
+ // the rear is never one of them
84
+ const street = new Set(streetEdges.map((i) => ((i % n) + n) % n));
85
+ street.delete(front);
86
+ let rear = -1;
87
+ let rearDot = Number.POSITIVE_INFINITY;
88
+ for (let i = 0; i < n; i++) {
89
+ if (i === front || street.has(i))
90
+ continue;
91
+ const ni = outwardNormal(points, i);
92
+ const dot = fn[0] * ni[0] + fn[1] * ni[1];
93
+ if (dot < rearDot) {
94
+ rearDot = dot;
95
+ rear = i;
96
+ }
97
+ }
98
+ const fp = points[front];
99
+ const fq = points[(front + 1) % n];
100
+ const dx = fq[0] - fp[0];
101
+ const dy = fq[1] - fp[1];
102
+ const len = Math.hypot(dx, dy) || 1;
103
+ const ux = dx / len;
104
+ const uy = dy / len;
105
+ const fmx = (fp[0] + fq[0]) / 2;
106
+ const fmy = (fp[1] + fq[1]) / 2;
107
+ for (let i = 0; i < n; i++) {
108
+ if (i === front) {
109
+ roles[i] = 'front';
110
+ continue;
111
+ }
112
+ if (street.has(i)) {
113
+ roles[i] = 'street';
114
+ continue;
115
+ }
116
+ if (i === rear) {
117
+ roles[i] = 'rear';
118
+ continue;
119
+ }
120
+ const p = points[i];
121
+ const q = points[(i + 1) % n];
122
+ const mx = (p[0] + q[0]) / 2 - fmx;
123
+ const my = (p[1] + q[1]) / 2 - fmy;
124
+ roles[i] = mx * ux + my * uy < 0 ? 'left' : 'right';
125
+ }
126
+ return roles;
127
+ }
128
+ export function setbackForRole(setbacks, role) {
129
+ switch (role) {
130
+ case 'front':
131
+ return setbacks.front;
132
+ case 'street':
133
+ return setbacks.streetSide ?? setbacks.front;
134
+ case 'rear':
135
+ return setbacks.rear;
136
+ case 'left':
137
+ return setbacks.left ?? setbacks.side;
138
+ case 'right':
139
+ return setbacks.right ?? setbacks.side;
140
+ }
141
+ }
142
+ /** The buildable envelope: every edge pushed inward by its role's setback (see the editor's copy for the rules). */
143
+ export function setbackEnvelope(points, setbacks, frontIndex, options = {}) {
144
+ const n = points.length;
145
+ if (n < 3)
146
+ return [];
147
+ const streetEdges = options.streetEdges ?? [];
148
+ const roles = classifyEdges(points, frontIndex, streetEdges);
149
+ // A radius drawn as a run of short edges takes ONE role. A curb return
150
+ // is street frontage: a run carrying, or touching, a front / street edge
151
+ // is front / street all along (otherwise the last sliver of the return
152
+ // became a side yard, and the envelope jutted out toward the corner); a
153
+ // run carrying the rear is rear; else each sliver keeps its own side.
154
+ const runs = arcRuns(points);
155
+ const runRole = new Map();
156
+ const streetLike = (r) => r === 'front' || r === 'street';
157
+ for (let i = 0; i < n; i++) {
158
+ const r = roles[i];
159
+ const g = runs[i];
160
+ const have = runRole.get(g);
161
+ if (streetLike(r) || (r === 'rear' && !(have && streetLike(have))))
162
+ runRole.set(g, r);
163
+ else if (!have)
164
+ runRole.set(g, r);
165
+ }
166
+ for (let i = 0; i < n; i++) {
167
+ const g = runs[i];
168
+ const have = runRole.get(g);
169
+ if (streetLike(have))
170
+ continue;
171
+ const before = roles[(i - 1 + n) % n];
172
+ const after = roles[(i + 1) % n];
173
+ const members = runs.filter((x) => x === g).length;
174
+ if (members > 1) {
175
+ if (runs[(i - 1 + n) % n] !== g && streetLike(before))
176
+ runRole.set(g, before);
177
+ else if (runs[(i + 1) % n] !== g && streetLike(after))
178
+ runRole.set(g, after);
179
+ }
180
+ }
181
+ const distances = [];
182
+ for (let i = 0; i < n; i++) {
183
+ const role = runRole.get(runs[i]) ?? roles[i];
184
+ const d = setbackForRole(setbacks, role === 'left' || role === 'right' ? roles[i] : role);
185
+ if (!Number.isFinite(d) || d < 0)
186
+ return [];
187
+ distances.push(d);
188
+ }
189
+ // the corner sight triangles keep the envelope out of the clear-vision
190
+ // zone at each street intersection (the hypotenuse is a half-plane)
191
+ const keepOut = [];
192
+ if (options.sightTriangleM && options.sightTriangleM > 0) {
193
+ for (const [a, b] of streetCorners(points, [frontIndex, ...streetEdges])) {
194
+ const tri = sightTriangle(points, a, b, options.sightTriangleM);
195
+ if (tri)
196
+ keepOut.push({ a: tri.a, b: tri.b, inside: tri.corner });
197
+ }
198
+ }
199
+ // the true inward offset (core setback-envelope.ts): straight where the
200
+ // lot is straight, concentric round a radius, clipped where the offsets
201
+ // cross — the industry-standard setback for pie shapes, radius corners
202
+ // and odd lots
203
+ return insetPolygon(points, distances, { keepOut });
204
+ }
@@ -32,6 +32,14 @@ import { type HeightPatch, type TerrainField } from '@pascal-app/core';
32
32
  * one. Two readers, one number.
33
33
  */
34
34
  export declare const HORIZON_PLANE_Y = -0.07;
35
+ /**
36
+ * How far the skirt's base hangs below the lowest thing it must close over.
37
+ *
38
+ * Only the top edge is visually load-bearing; the base just has to be out of sight
39
+ * under the horizon disc. A metre reads as earth thickness from a grazing camera
40
+ * without being tall enough to poke out of a neighbouring excavation.
41
+ */
42
+ export declare const SKIRT_DROP = 1;
35
43
  /** One vertex per sample, row-major — index `r * cols + c` matches the field. */
36
44
  export type TerrainMeshBuffers = {
37
45
  /** xyz per sample, length `cols * rows * 3`. */
@@ -68,6 +76,11 @@ export type TerrainSkirtBuffers = {
68
76
  positions: Float32Array;
69
77
  normals: Float32Array;
70
78
  indices: Uint32Array;
79
+ /**
80
+ * When the skirt follows the lot's property line (`skirtRing`): its x, z pairs,
81
+ * counter-clockwise. Absent, the skirt runs round the field's own rectangle.
82
+ */
83
+ ring?: Float32Array;
71
84
  };
72
85
  /**
73
86
  * The field's own footprint, as a polygon to punch out of the horizon disc.
@@ -89,7 +102,21 @@ export type TerrainSkirtBuffers = {
89
102
  * decides whether a pit is visible, and that is a property to assert, not to eyeball.
90
103
  */
91
104
  export declare function terrainFootprint(field: TerrainField): Array<[number, number]>;
92
- export declare function buildTerrainSkirt(field: TerrainField): TerrainSkirtBuffers;
105
+ /**
106
+ * The base of the lot as a block: one flat level under the field's lowest
107
+ * point (and under the horizon plane), so the skirt along the property line
108
+ * reads as earth whose thickness follows the slope, and the horizon disc can
109
+ * sit just beneath it without cutting into the lot anywhere.
110
+ */
111
+ export declare function terrainBlockBase(field: TerrainField): number;
112
+ /**
113
+ * The lot's property line as the skirt walks it: counter-clockwise in x, z (the
114
+ * field perimeter's own direction, so one winding and one normal formula serve
115
+ * both), a point at least every half grid cell so the top edge follows the
116
+ * ground between samples. Empty when the polygon is not a ring.
117
+ */
118
+ export declare function skirtRing(field: TerrainField, polygon: ReadonlyArray<readonly [number, number]>): Float32Array;
119
+ export declare function buildTerrainSkirt(field: TerrainField, ring?: Float32Array | null): TerrainSkirtBuffers;
93
120
  /**
94
121
  * Rewrite the whole skirt in place.
95
122
  *
@@ -1 +1 @@
1
- {"version":3,"file":"terrain-geometry.d.ts","sourceRoot":"","sources":["../../src/site/terrain-geometry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAA4B,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAEhG;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,QAAQ,CAAA;AAWpC,iFAAiF;AACjF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,gDAAgD;IAChD,SAAS,EAAE,YAAY,CAAA;IACvB,gDAAgD;IAChD,OAAO,EAAE,YAAY,CAAA;IACrB,+CAA+C;IAC/C,GAAG,EAAE,YAAY,CAAA;IACjB,2CAA2C;IAC3C,OAAO,EAAE,WAAW,CAAA;CACrB,CAAA;AAOD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,YAAY,GAAG,kBAAkB,CAkCxE;AA8BD;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,+EAA+E;IAC/E,SAAS,EAAE,YAAY,CAAA;IACvB,OAAO,EAAE,YAAY,CAAA;IACrB,OAAO,EAAE,WAAW,CAAA;CACrB,CAAA;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,YAAY,GAAG,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAY7E;AAwBD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,YAAY,GAAG,mBAAmB,CAsB1E;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,mBAAmB,GAAG,IAAI,CAyB1F;AAmBD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,YAAY,EACnB,KAAK,EAAE,WAAW,EAClB,QAAQ,EAAE,MAAM,GACf;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAoBzC;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,YAAY,EACnB,OAAO,EAAE,kBAAkB,EAC3B,KAAK,EAAE,WAAW,GACjB,IAAI,CA8BN"}
1
+ {"version":3,"file":"terrain-geometry.d.ts","sourceRoot":"","sources":["../../src/site/terrain-geometry.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,WAAW,EAIhB,KAAK,YAAY,EAClB,MAAM,kBAAkB,CAAA;AAEzB;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,QAAQ,CAAA;AAEpC;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,IAAI,CAAA;AAE3B,iFAAiF;AACjF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,gDAAgD;IAChD,SAAS,EAAE,YAAY,CAAA;IACvB,gDAAgD;IAChD,OAAO,EAAE,YAAY,CAAA;IACrB,+CAA+C;IAC/C,GAAG,EAAE,YAAY,CAAA;IACjB,2CAA2C;IAC3C,OAAO,EAAE,WAAW,CAAA;CACrB,CAAA;AAOD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,YAAY,GAAG,kBAAkB,CAkCxE;AA8BD;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,+EAA+E;IAC/E,SAAS,EAAE,YAAY,CAAA;IACvB,OAAO,EAAE,YAAY,CAAA;IACrB,OAAO,EAAE,WAAW,CAAA;IACpB;;;OAGG;IACH,IAAI,CAAC,EAAE,YAAY,CAAA;CACpB,CAAA;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,YAAY,GAAG,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAY7E;AAwBD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAO5D;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CACvB,KAAK,EAAE,YAAY,EACnB,OAAO,EAAE,aAAa,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAChD,YAAY,CAmBd;AAED,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,YAAY,EACnB,IAAI,CAAC,EAAE,YAAY,GAAG,IAAI,GACzB,mBAAmB,CAwBrB;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,mBAAmB,GAAG,IAAI,CA6B1F;AAgDD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,YAAY,EACnB,KAAK,EAAE,WAAW,EAClB,QAAQ,EAAE,MAAM,GACf;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAoBzC;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,YAAY,EACnB,OAAO,EAAE,kBAAkB,EAC3B,KAAK,EAAE,WAAW,GACjB,IAAI,CA8BN"}