@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
@@ -6,8 +6,10 @@ export declare const zoneMoveVertexAffordance: import("@pascal-app/core").Floorp
6
6
  type: "zone";
7
7
  name: string;
8
8
  polygon: [number, number][];
9
+ holes: [number, number][][];
9
10
  autoFromWalls: boolean;
10
11
  boundaryWallIds: `wall_${string}`[];
12
+ boundarySeparatorIds: string[];
11
13
  spaceRole: "room" | "generic";
12
14
  roomNumber: string;
13
15
  enclosureStatus: "auto" | "open" | "enclosed";
@@ -26,6 +28,54 @@ export declare const zoneMoveVertexAffordance: import("@pascal-app/core").Floorp
26
28
  fov?: number | undefined;
27
29
  zoom?: number | undefined;
28
30
  } | undefined;
31
+ provenance?: {
32
+ refs: {
33
+ id: string;
34
+ ns?: string | undefined;
35
+ role?: "primary" | "piece" | "absorbed" | "alias" | "derived" | undefined;
36
+ }[];
37
+ lineage?: {
38
+ op: "import" | "split" | "merge" | "duplicate" | "convert" | "promote" | "make-independent" | "attach";
39
+ fromIds: string[];
40
+ } | undefined;
41
+ } | undefined;
42
+ hostZoneId?: string | undefined;
43
+ seed?: [number, number] | undefined;
44
+ floor?: {
45
+ elevation?: number | undefined;
46
+ support?: "open" | undefined;
47
+ footprint?: string | undefined;
48
+ thickness?: number | undefined;
49
+ sourceSlabId?: `slab_${string}` | undefined;
50
+ finish?: string | Record<string, unknown> | undefined;
51
+ regions?: {
52
+ id: string;
53
+ polygon: [number, number][];
54
+ finish: string | Record<string, unknown>;
55
+ }[] | undefined;
56
+ } | undefined;
57
+ ceiling?: {
58
+ regions?: {
59
+ id: string;
60
+ polygon: [number, number][];
61
+ finish: string | Record<string, unknown>;
62
+ }[] | undefined;
63
+ } | undefined;
64
+ floorStepFinish?: string | undefined;
65
+ floorStepOverrides?: {
66
+ key: string;
67
+ finish: string;
68
+ step?: number | undefined;
69
+ }[] | undefined;
70
+ floorEdgeFinish?: string | undefined;
71
+ wallMaterial?: string | undefined;
72
+ wallOverrides?: {
73
+ wallId: string;
74
+ face: "a" | "b";
75
+ finish: string;
76
+ }[] | undefined;
77
+ hasFloor?: false | undefined;
78
+ hasCeiling?: false | undefined;
29
79
  }>;
30
80
  export declare const zoneAddVertexAffordance: import("@pascal-app/core").FloorplanAffordance<{
31
81
  object: "node";
@@ -35,8 +85,10 @@ export declare const zoneAddVertexAffordance: import("@pascal-app/core").Floorpl
35
85
  type: "zone";
36
86
  name: string;
37
87
  polygon: [number, number][];
88
+ holes: [number, number][][];
38
89
  autoFromWalls: boolean;
39
90
  boundaryWallIds: `wall_${string}`[];
91
+ boundarySeparatorIds: string[];
40
92
  spaceRole: "room" | "generic";
41
93
  roomNumber: string;
42
94
  enclosureStatus: "auto" | "open" | "enclosed";
@@ -55,6 +107,54 @@ export declare const zoneAddVertexAffordance: import("@pascal-app/core").Floorpl
55
107
  fov?: number | undefined;
56
108
  zoom?: number | undefined;
57
109
  } | undefined;
110
+ provenance?: {
111
+ refs: {
112
+ id: string;
113
+ ns?: string | undefined;
114
+ role?: "primary" | "piece" | "absorbed" | "alias" | "derived" | undefined;
115
+ }[];
116
+ lineage?: {
117
+ op: "import" | "split" | "merge" | "duplicate" | "convert" | "promote" | "make-independent" | "attach";
118
+ fromIds: string[];
119
+ } | undefined;
120
+ } | undefined;
121
+ hostZoneId?: string | undefined;
122
+ seed?: [number, number] | undefined;
123
+ floor?: {
124
+ elevation?: number | undefined;
125
+ support?: "open" | undefined;
126
+ footprint?: string | undefined;
127
+ thickness?: number | undefined;
128
+ sourceSlabId?: `slab_${string}` | undefined;
129
+ finish?: string | Record<string, unknown> | undefined;
130
+ regions?: {
131
+ id: string;
132
+ polygon: [number, number][];
133
+ finish: string | Record<string, unknown>;
134
+ }[] | undefined;
135
+ } | undefined;
136
+ ceiling?: {
137
+ regions?: {
138
+ id: string;
139
+ polygon: [number, number][];
140
+ finish: string | Record<string, unknown>;
141
+ }[] | undefined;
142
+ } | undefined;
143
+ floorStepFinish?: string | undefined;
144
+ floorStepOverrides?: {
145
+ key: string;
146
+ finish: string;
147
+ step?: number | undefined;
148
+ }[] | undefined;
149
+ floorEdgeFinish?: string | undefined;
150
+ wallMaterial?: string | undefined;
151
+ wallOverrides?: {
152
+ wallId: string;
153
+ face: "a" | "b";
154
+ finish: string;
155
+ }[] | undefined;
156
+ hasFloor?: false | undefined;
157
+ hasCeiling?: false | undefined;
58
158
  }>;
59
159
  export declare const zoneMoveEdgeAffordance: import("@pascal-app/core").FloorplanAffordance<{
60
160
  object: "node";
@@ -64,8 +164,10 @@ export declare const zoneMoveEdgeAffordance: import("@pascal-app/core").Floorpla
64
164
  type: "zone";
65
165
  name: string;
66
166
  polygon: [number, number][];
167
+ holes: [number, number][][];
67
168
  autoFromWalls: boolean;
68
169
  boundaryWallIds: `wall_${string}`[];
170
+ boundarySeparatorIds: string[];
69
171
  spaceRole: "room" | "generic";
70
172
  roomNumber: string;
71
173
  enclosureStatus: "auto" | "open" | "enclosed";
@@ -84,6 +186,54 @@ export declare const zoneMoveEdgeAffordance: import("@pascal-app/core").Floorpla
84
186
  fov?: number | undefined;
85
187
  zoom?: number | undefined;
86
188
  } | undefined;
189
+ provenance?: {
190
+ refs: {
191
+ id: string;
192
+ ns?: string | undefined;
193
+ role?: "primary" | "piece" | "absorbed" | "alias" | "derived" | undefined;
194
+ }[];
195
+ lineage?: {
196
+ op: "import" | "split" | "merge" | "duplicate" | "convert" | "promote" | "make-independent" | "attach";
197
+ fromIds: string[];
198
+ } | undefined;
199
+ } | undefined;
200
+ hostZoneId?: string | undefined;
201
+ seed?: [number, number] | undefined;
202
+ floor?: {
203
+ elevation?: number | undefined;
204
+ support?: "open" | undefined;
205
+ footprint?: string | undefined;
206
+ thickness?: number | undefined;
207
+ sourceSlabId?: `slab_${string}` | undefined;
208
+ finish?: string | Record<string, unknown> | undefined;
209
+ regions?: {
210
+ id: string;
211
+ polygon: [number, number][];
212
+ finish: string | Record<string, unknown>;
213
+ }[] | undefined;
214
+ } | undefined;
215
+ ceiling?: {
216
+ regions?: {
217
+ id: string;
218
+ polygon: [number, number][];
219
+ finish: string | Record<string, unknown>;
220
+ }[] | undefined;
221
+ } | undefined;
222
+ floorStepFinish?: string | undefined;
223
+ floorStepOverrides?: {
224
+ key: string;
225
+ finish: string;
226
+ step?: number | undefined;
227
+ }[] | undefined;
228
+ floorEdgeFinish?: string | undefined;
229
+ wallMaterial?: string | undefined;
230
+ wallOverrides?: {
231
+ wallId: string;
232
+ face: "a" | "b";
233
+ finish: string;
234
+ }[] | undefined;
235
+ hasFloor?: false | undefined;
236
+ hasCeiling?: false | undefined;
87
237
  }>;
88
238
  export declare const zoneDeleteVertexAffordance: import("@pascal-app/core").FloorplanAffordance<{
89
239
  object: "node";
@@ -93,8 +243,10 @@ export declare const zoneDeleteVertexAffordance: import("@pascal-app/core").Floo
93
243
  type: "zone";
94
244
  name: string;
95
245
  polygon: [number, number][];
246
+ holes: [number, number][][];
96
247
  autoFromWalls: boolean;
97
248
  boundaryWallIds: `wall_${string}`[];
249
+ boundarySeparatorIds: string[];
98
250
  spaceRole: "room" | "generic";
99
251
  roomNumber: string;
100
252
  enclosureStatus: "auto" | "open" | "enclosed";
@@ -113,5 +265,53 @@ export declare const zoneDeleteVertexAffordance: import("@pascal-app/core").Floo
113
265
  fov?: number | undefined;
114
266
  zoom?: number | undefined;
115
267
  } | undefined;
268
+ provenance?: {
269
+ refs: {
270
+ id: string;
271
+ ns?: string | undefined;
272
+ role?: "primary" | "piece" | "absorbed" | "alias" | "derived" | undefined;
273
+ }[];
274
+ lineage?: {
275
+ op: "import" | "split" | "merge" | "duplicate" | "convert" | "promote" | "make-independent" | "attach";
276
+ fromIds: string[];
277
+ } | undefined;
278
+ } | undefined;
279
+ hostZoneId?: string | undefined;
280
+ seed?: [number, number] | undefined;
281
+ floor?: {
282
+ elevation?: number | undefined;
283
+ support?: "open" | undefined;
284
+ footprint?: string | undefined;
285
+ thickness?: number | undefined;
286
+ sourceSlabId?: `slab_${string}` | undefined;
287
+ finish?: string | Record<string, unknown> | undefined;
288
+ regions?: {
289
+ id: string;
290
+ polygon: [number, number][];
291
+ finish: string | Record<string, unknown>;
292
+ }[] | undefined;
293
+ } | undefined;
294
+ ceiling?: {
295
+ regions?: {
296
+ id: string;
297
+ polygon: [number, number][];
298
+ finish: string | Record<string, unknown>;
299
+ }[] | undefined;
300
+ } | undefined;
301
+ floorStepFinish?: string | undefined;
302
+ floorStepOverrides?: {
303
+ key: string;
304
+ finish: string;
305
+ step?: number | undefined;
306
+ }[] | undefined;
307
+ floorEdgeFinish?: string | undefined;
308
+ wallMaterial?: string | undefined;
309
+ wallOverrides?: {
310
+ wallId: string;
311
+ face: "a" | "b";
312
+ finish: string;
313
+ }[] | undefined;
314
+ hasFloor?: false | undefined;
315
+ hasCeiling?: false | undefined;
116
316
  }>;
117
317
  //# sourceMappingURL=floorplan-affordances.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"floorplan-affordances.d.ts","sourceRoot":"","sources":["../../src/zone/floorplan-affordances.ts"],"names":[],"mappings":"AAuBA,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAGpC,CAAA;AACD,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAGnC,CAAA;AACD,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAGlC,CAAA;AACD,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAGtC,CAAA"}
1
+ {"version":3,"file":"floorplan-affordances.d.ts","sourceRoot":"","sources":["../../src/zone/floorplan-affordances.ts"],"names":[],"mappings":"AAuBA,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAGpC,CAAA;AACD,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAGnC,CAAA;AACD,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAGlC,CAAA;AACD,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAGtC,CAAA"}
@@ -3,7 +3,7 @@ import { type FloorplanGeometry, type GeometryContext, type ZoneNode } from '@pa
3
3
  * Stage C floor-plan builder for zone. Zones are colored polygons.
4
4
  *
5
5
  * The zone's `name` renders as a centered text label at the polygon's
6
- * geometric centroid. The registry layer sorts zones before every
6
+ * interior label point. The registry layer sorts zones before every
7
7
  * other kind so the label + polygon sit *under* walls / slabs /
8
8
  * furniture in the SVG document order (= z-order).
9
9
  */
@@ -1 +1 @@
1
- {"version":3,"file":"floorplan.d.ts","sourceRoot":"","sources":["../../src/zone/floorplan.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,iBAAiB,EAEtB,KAAK,eAAe,EAEpB,KAAK,QAAQ,EACd,MAAM,kBAAkB,CAAA;AASzB;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,eAAe,GAAG,iBAAiB,GAAG,IAAI,CAmIjG"}
1
+ {"version":3,"file":"floorplan.d.ts","sourceRoot":"","sources":["../../src/zone/floorplan.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,iBAAiB,EAEtB,KAAK,eAAe,EAGpB,KAAK,QAAQ,EACd,MAAM,kBAAkB,CAAA;AASzB;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,eAAe,GAAG,iBAAiB,GAAG,IAAI,CAiKjG"}
@@ -1,4 +1,4 @@
1
- import { resolveAutoZonePolygon, } from '@pascal-app/core';
1
+ import { polygonInteriorPoint, } from '@pascal-app/core';
2
2
  import { floorplanGeometryMetadata, readFloorplanContext } from '@pascal-app/editor';
3
3
  import { formatConstructionLength, } from '../shared/construction-length';
4
4
  import { buildRoomClearDimensions } from './room-clear-dimensions';
@@ -7,12 +7,12 @@ import { owningUnitForZone } from './unit-membership';
7
7
  * Stage C floor-plan builder for zone. Zones are colored polygons.
8
8
  *
9
9
  * The zone's `name` renders as a centered text label at the polygon's
10
- * geometric centroid. The registry layer sorts zones before every
10
+ * interior label point. The registry layer sorts zones before every
11
11
  * other kind so the label + polygon sit *under* walls / slabs /
12
12
  * furniture in the SVG document order (= z-order).
13
13
  */
14
14
  export function buildZoneFloorplan(node, ctx) {
15
- const ring = resolveAutoZonePolygon(node, ctx.resolve);
15
+ const { polygon: ring, holes } = node;
16
16
  if (!ring || ring.length < 3)
17
17
  return null;
18
18
  const view = ctx.viewState;
@@ -21,16 +21,42 @@ export function buildZoneFloorplan(node, ctx) {
21
21
  const isHighlighted = view?.highlighted ?? false;
22
22
  const showSelectedChrome = isSelected || isHighlighted;
23
23
  const points = ring.map(([x, z]) => [x, z]);
24
+ // A sheet drafts every zone's tag itself — name, number, area, placed
25
+ // clear of everything else — so on a sheet the zone prints nothing of its
26
+ // own: no wash, no outline, no zone-coloured name, whatever its role or
27
+ // wherever it came from. The invisible outline keeps the zone in the
28
+ // collection the sheet reads its rooms from.
29
+ if (floorplanContext.drafting) {
30
+ return { kind: 'group', children: [{ kind: 'polygon', points, fill: 'none', stroke: 'none' }] };
31
+ }
24
32
  const unit = owningUnitForZone(node, ctx.resolve);
25
33
  const tintColor = unit?.color ?? node.color;
26
34
  const stroke = node.color;
27
35
  const focusOpacity = view?.focusedUnitId && !view.focusedUnitMemberIds?.includes(node.id) ? 0.35 : 1;
28
36
  const isRoom = node.spaceRole === 'room';
29
- const fillOpacity = isRoom ? (isSelected ? 0.12 : 0.04) : isSelected ? 0.28 : 0.16;
37
+ // On the editor canvas a pill labels every zone; the wash and drawn tags
38
+ // come back only while a unit's membership is being painted.
39
+ const drawnTags = !floorplanContext.roomLabelOverlay || !!view?.focusedUnitId;
40
+ const fillOpacity = !drawnTags
41
+ ? 0
42
+ : isRoom
43
+ ? isSelected
44
+ ? 0.12
45
+ : 0.04
46
+ : isSelected
47
+ ? 0.28
48
+ : 0.16;
30
49
  const children = [
31
50
  {
32
- kind: 'polygon',
33
- points,
51
+ ...(holes.length
52
+ ? {
53
+ kind: 'path',
54
+ d: [ring, ...holes]
55
+ .map((points) => `${points.map(([x, y], i) => `${i ? 'L' : 'M'} ${x} ${y}`).join(' ')} Z`)
56
+ .join(' '),
57
+ fillRule: 'evenodd',
58
+ }
59
+ : { kind: 'polygon', points }),
34
60
  fill: tintColor,
35
61
  fillOpacity: fillOpacity * focusOpacity,
36
62
  stroke,
@@ -84,17 +110,16 @@ export function buildZoneFloorplan(node, ctx) {
84
110
  // Name label — white fill inside a zone-colored stroke (`paintOrder:
85
111
  // 'stroke'` paints the stroke first so the fill reads cleanly through
86
112
  // it). Mirrors the legacy `FloorplanZoneLabel` so the look is
87
- // consistent. Centered on the polygon's area-weighted centroid; the
88
- // bbox-center fallback handles degenerate rings without throwing.
89
- const [cx, cy] = polygonCentroid(ring);
113
+ // consistent. The anchor stays in the usable room area, outside holes.
114
+ const [cx, cy] = polygonInteriorPoint({ polygon: ring, holes });
90
115
  const name = node.name?.trim();
91
- if (isRoom) {
92
- children.push(...buildRoomLabels(node, cx, cy, view?.unit ?? 'metric', floorplanContext.purpose === 'document' ? 'document' : 'editor', floorplanContext.metricNotation, stroke, unit?.name));
93
- if (floorplanContext.automaticDimensions) {
94
- children.push(...buildRoomClearDimensions(node, ctx));
95
- }
116
+ if (isRoom && drawnTags) {
117
+ children.push(...buildRoomLabels(node, cx, cy, view?.unit ?? 'metric', floorplanContext.purpose === 'document' ? 'document' : 'editor', floorplanContext.metricNotation, stroke, unit?.name, roomFloorLift(node, ctx)));
118
+ }
119
+ if (isRoom && floorplanContext.automaticDimensions) {
120
+ children.push(...buildRoomClearDimensions(node, ctx));
96
121
  }
97
- else if (name) {
122
+ if (!isRoom && drawnTags && name) {
98
123
  const unitName = unit?.name.trim();
99
124
  const lines = unitName
100
125
  ? [
@@ -113,7 +138,7 @@ export function buildZoneFloorplan(node, ctx) {
113
138
  // (0.2 plan metres ≈ readable at typical building zooms).
114
139
  fontSize: line.fontSize,
115
140
  fill: '#ffffff',
116
- stroke: node.color,
141
+ stroke,
117
142
  strokeWidth: line.fontSize * 0.35,
118
143
  paintOrder: 'stroke',
119
144
  fontFamily: 'system-ui, -apple-system, sans-serif',
@@ -133,7 +158,7 @@ const ROOM_NAME_FONT_SIZE = 0.2;
133
158
  const ROOM_NUMBER_FONT_SIZE = 0.16;
134
159
  const ROOM_DETAIL_FONT_SIZE = 0.11;
135
160
  const ROOM_LABEL_LINE_SPACING = 0.18;
136
- function buildRoomLabels(node, x, y, unit, profile, metricNotation, color, unitName) {
161
+ function buildRoomLabels(node, x, y, unit, profile, metricNotation, color, unitName, lift = 0) {
137
162
  const lines = [];
138
163
  const name = node.name.trim();
139
164
  if (name)
@@ -159,7 +184,28 @@ function buildRoomLabels(node, x, y, unit, profile, metricNotation, color, unitN
159
184
  roomDetails.push(node.occupancy);
160
185
  lines.push({ text: roomDetails.join(' · '), fontSize: ROOM_DETAIL_FONT_SIZE, fontWeight: 500 });
161
186
  const startY = y - ((lines.length - 1) * ROOM_LABEL_LINE_SPACING) / 2;
162
- return lines.map((line, index) => ({
187
+ const chip = Math.abs(lift) < 0.005
188
+ ? []
189
+ : [
190
+ {
191
+ kind: 'text',
192
+ x,
193
+ y: startY - ROOM_LABEL_LINE_SPACING,
194
+ text: `${lift > 0 ? '+' : '−'}${formatConstructionLength(Math.abs(lift), unit, profile, { metricNotation })}`,
195
+ fontSize: ROOM_DETAIL_FONT_SIZE,
196
+ fill: ROOM_LIFT_COLOR,
197
+ stroke: '#ffffff',
198
+ strokeWidth: ROOM_DETAIL_FONT_SIZE * 0.18,
199
+ paintOrder: 'stroke',
200
+ fontFamily: 'system-ui, -apple-system, sans-serif',
201
+ fontWeight: 700,
202
+ textAnchor: 'middle',
203
+ dominantBaseline: 'central',
204
+ upright: true,
205
+ metadata: floorplanGeometryMetadata({ annotationRole: 'room-label' }),
206
+ },
207
+ ];
208
+ return chip.concat(lines.map((line, index) => ({
163
209
  kind: 'text',
164
210
  x,
165
211
  y: startY + index * ROOM_LABEL_LINE_SPACING,
@@ -175,44 +221,38 @@ function buildRoomLabels(node, x, y, unit, profile, metricNotation, color, unitN
175
221
  dominantBaseline: 'central',
176
222
  upright: true,
177
223
  metadata: floorplanGeometryMetadata({ annotationRole: 'room-label' }),
178
- }));
224
+ })));
179
225
  }
226
+ // The room arrows' indigo: a raised or sunken room reads as the lift it carries.
227
+ const ROOM_LIFT_COLOR = '#6366f1';
180
228
  /**
181
- * Area-weighted centroid of a simple polygon (Shoelace formula). Falls
182
- * back to the bounding-box center when the signed area is degenerate
183
- * (collinear vertices, zero-area polygon) so the label still has a
184
- * sensible anchor.
229
+ * How far the room's floor sits above the floor it is measured from — its
230
+ * footprint's base plate, or a mezzanine's host room — for the `+0.15` label
231
+ * chip; 0 when the room carries no floor intent of its own.
185
232
  */
186
- function polygonCentroid(ring) {
187
- let area = 0;
188
- let cx = 0;
189
- let cy = 0;
190
- for (let i = 0; i < ring.length; i++) {
191
- const [x0, y0] = ring[i];
192
- const [x1, y1] = ring[(i + 1) % ring.length];
193
- const cross = x0 * y1 - x1 * y0;
194
- area += cross;
195
- cx += (x0 + x1) * cross;
196
- cy += (y0 + y1) * cross;
197
- }
198
- area *= 0.5;
199
- if (Math.abs(area) < 1e-9) {
200
- // Degenerate — fall back to bbox center.
201
- let minX = Infinity;
202
- let maxX = -Infinity;
203
- let minY = Infinity;
204
- let maxY = -Infinity;
205
- for (const [x, y] of ring) {
206
- if (x < minX)
207
- minX = x;
208
- if (x > maxX)
209
- maxX = x;
210
- if (y < minY)
211
- minY = y;
212
- if (y > maxY)
213
- maxY = y;
233
+ function roomFloorLift(node, ctx) {
234
+ const elevation = node.floor?.elevation;
235
+ if (elevation === undefined)
236
+ return 0;
237
+ const baseOf = (zone) => {
238
+ if (!zone?.parentId)
239
+ return undefined;
240
+ const level = ctx.resolve(zone.parentId);
241
+ if (!level || !('children' in level))
242
+ return undefined;
243
+ for (const id of level.children) {
244
+ const plate = ctx.resolve(id);
245
+ if (plate?.type === 'slab' && plate.plateRole === 'base' && plate.zoneIds?.includes(zone.id))
246
+ return plate.floorHeight ?? plate.elevation;
214
247
  }
215
- return [(minX + maxX) / 2, (minY + maxY) / 2];
248
+ return undefined;
249
+ };
250
+ let base;
251
+ if (node.floor?.support === 'open' && node.hostZoneId) {
252
+ const host = ctx.resolve(node.hostZoneId);
253
+ base = host?.floor?.elevation ?? baseOf(host);
216
254
  }
217
- return [cx / (6 * area), cy / (6 * area)];
255
+ else
256
+ base = baseOf(node);
257
+ return base === undefined ? 0 : Math.round((elevation - base) * 1000) / 1000;
218
258
  }
@@ -1 +1 @@
1
- {"version":3,"file":"quantities-panel.d.ts","sourceRoot":"","sources":["../../src/zone/quantities-panel.tsx"],"names":[],"mappings":"AA8RA,MAAM,CAAC,OAAO,UAAU,mBAAmB,uCA8F1C"}
1
+ {"version":3,"file":"quantities-panel.d.ts","sourceRoot":"","sources":["../../src/zone/quantities-panel.tsx"],"names":[],"mappings":"AAqMA,MAAM,CAAC,OAAO,UAAU,mBAAmB,uCAkF1C"}
@@ -1,11 +1,11 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
- import { deriveZoneQuantityReport, resolveAutoZonePolygon, useLiveNodeOverrides, useScene, } from '@pascal-app/core';
4
- import { formatAreaLabel, formatLinearMeasurement, formatVolumeLabel, MetricControl, PanelSection, ToggleControl, } from '@pascal-app/editor';
3
+ import { deriveZoneQuantityReport, useLiveNodeOverrides, useScene, } from '@pascal-app/core';
4
+ import { formatAreaLabel, formatLinearMeasurement, formatVolumeLabel, PanelSection, } from '@pascal-app/editor';
5
5
  import { useViewer } from '@pascal-app/viewer';
6
6
  import { useMemo } from 'react';
7
7
  import { useShallow } from 'zustand/react/shallow';
8
- import { PanelSelect, PanelTextField } from '../shared/panel-fields';
8
+ import { PanelSelect } from '../shared/panel-fields';
9
9
  import { buildingUnitsForZone } from './unit-membership';
10
10
  function ZonePlanSketch({ edgeLengths, metricNotation, polygon, unit, }) {
11
11
  if (polygon.length < 3) {
@@ -76,43 +76,16 @@ function ZoneUnitPanel({ zone }) {
76
76
  ...units.map((unit) => ({ label: unit.name || 'Unit', value: unit.id })),
77
77
  ], value: current?.id ?? '' }) }));
78
78
  }
79
- function RoomDocumentationPanel({ zone }) {
80
- const updateNode = useScene((state) => state.updateNode);
81
- const update = (patch) => updateNode(zone.id, patch);
82
- const isRoom = zone.spaceRole === 'room';
83
- return (_jsxs(PanelSection, { title: "Room documentation", children: [_jsx(ToggleControl, { checked: isRoom, label: "Architectural room", onChange: (checked) => update({ spaceRole: checked ? 'room' : 'generic' }) }), isRoom ? (_jsxs(_Fragment, { children: [_jsx(PanelTextField, { label: "Room name", onCommit: (name) => update({ name }), value: zone.name }), _jsx(PanelTextField, { label: "Room number", onCommit: (roomNumber) => update({ roomNumber }), value: zone.roomNumber }), _jsx(PanelSelect, { label: "Enclosure", onChange: (enclosureStatus) => update({ enclosureStatus: enclosureStatus }), options: [
84
- { label: 'Auto-detect', value: 'auto' },
85
- { label: 'Enclosed', value: 'enclosed' },
86
- { label: 'Open', value: 'open' },
87
- ], value: zone.enclosureStatus }), _jsx(PanelTextField, { label: "Occupancy / use", onCommit: (occupancy) => update({ occupancy }), value: zone.occupancy }), _jsx(PanelTextField, { label: "Floor finish", onCommit: (floorFinish) => update({ floorFinish }), value: zone.floorFinish }), _jsx(PanelTextField, { label: "Wall finish", onCommit: (wallFinish) => update({ wallFinish }), value: zone.wallFinish }), _jsx(PanelTextField, { label: "Ceiling finish", onCommit: (ceilingFinish) => update({ ceilingFinish }), value: zone.ceilingFinish }), _jsx(MetricControl, { label: "Ceiling height", max: 20, min: 0.1, onChange: (ceilingHeight) => update({ ceilingHeight }), precision: 2, step: 0.05, unit: "m", value: zone.ceilingHeight }), _jsx(PanelSelect, { label: "Clear dimensions", onChange: (clearDimensionPolicy) => update({
88
- clearDimensionPolicy: clearDimensionPolicy,
89
- }), options: [
90
- { label: 'None', value: 'none' },
91
- { label: 'Inside faces', value: 'inside-faces' },
92
- { label: 'Finish faces', value: 'finish-faces' },
93
- ], value: zone.clearDimensionPolicy })] })) : null] }));
94
- }
95
79
  export default function ZoneQuantitiesPanel() {
96
80
  const selectedZoneId = useViewer((state) => state.selection.zoneId);
97
81
  const unit = useViewer((state) => state.unit);
98
82
  const metricNotation = useViewer((state) => state.metricNotation);
99
83
  const nodes = useScene((state) => state.nodes);
100
84
  const zone = selectedZoneId ? nodes[selectedZoneId] : undefined;
101
- const livePolygon = useLiveNodeOverrides((state) => selectedZoneId ? state.overrides.get(selectedZoneId)?.polygon : undefined);
85
+ const liveZone = useLiveNodeOverrides((state) => selectedZoneId ? state.overrides.get(selectedZoneId) : undefined);
102
86
  const boundaryWallIds = zone?.autoFromWalls ? zone.boundaryWallIds : [];
103
87
  const boundaryOverrides = useLiveNodeOverrides(useShallow((state) => boundaryWallIds.map((id) => state.overrides.get(id))));
104
- const proceduralPolygon = zone
105
- ? resolveAutoZonePolygon(zone, (id) => {
106
- const dependency = nodes[id];
107
- if (!dependency)
108
- return undefined;
109
- const override = boundaryOverrides[boundaryWallIds.indexOf(id)];
110
- return override ? { ...dependency, ...override } : dependency;
111
- })
112
- : undefined;
113
- const effectiveZone = zone
114
- ? { ...zone, polygon: livePolygon ?? proceduralPolygon ?? zone.polygon }
115
- : undefined;
88
+ const effectiveZone = zone ? { ...zone, ...liveZone } : undefined;
116
89
  const effectiveNodes = useMemo(() => {
117
90
  if (boundaryOverrides.every((override) => !override))
118
91
  return nodes;
@@ -128,5 +101,5 @@ export default function ZoneQuantitiesPanel() {
128
101
  const report = useMemo(() => (effectiveZone ? deriveZoneQuantityReport(effectiveZone, effectiveNodes) : null), [effectiveNodes, effectiveZone]);
129
102
  if (!effectiveZone || !report)
130
103
  return null;
131
- return (_jsxs(_Fragment, { children: [_jsx(ZoneUnitPanel, { zone: effectiveZone }), _jsx(RoomDocumentationPanel, { zone: effectiveZone }), _jsxs(PanelSection, { title: effectiveZone.spaceRole === 'room' ? 'Room quantities' : 'Zone quantities', children: [_jsxs("div", { className: "overflow-hidden rounded-md border border-cyan-950/20 bg-[#f8faf7] text-slate-950", children: [_jsxs("div", { className: "flex items-center border-cyan-950/15 border-b px-2.5 py-2", children: [_jsx("span", { className: "font-semibold text-[11px]", children: effectiveZone.name }), _jsx("span", { className: "ml-auto rounded-full border border-cyan-800/25 bg-cyan-50 px-2 py-0.5 text-cyan-900 text-[9px]", children: report.classification === 'enclosed-room' ? 'Enclosed room' : 'Footprint only' })] }), _jsxs("div", { className: "flex items-baseline gap-2 px-2.5 py-2 font-mono text-[10px]", children: [_jsx("span", { className: "text-cyan-800", children: "A" }), _jsx("span", { children: formatAreaLabel(report.footprintArea, unit, 2) }), _jsx("span", { className: "ml-auto text-slate-600", children: "P" }), _jsx("span", { children: formatLinearMeasurement(report.perimeter, unit, metricNotation) })] })] }), _jsx(ZonePlanSketch, { edgeLengths: report.edgeLengths, metricNotation: metricNotation, polygon: effectiveZone.polygon, unit: unit }), _jsxs("div", { className: "flex flex-col gap-1.5", children: [_jsx(QuantityRow, { abbreviation: "Aw", format: (value) => formatAreaLabel(value, unit, 2), label: "Wall surface", quantity: report.wallSurface }), _jsx(QuantityRow, { abbreviation: "Af", format: (value) => formatAreaLabel(value, unit, 2), label: "Floor surface", quantity: report.floorSurface }), _jsx(QuantityRow, { abbreviation: "V", format: (value) => formatVolumeLabel(value, unit, 2), label: "Volume", quantity: report.volume })] })] })] }));
104
+ return (_jsxs(_Fragment, { children: [_jsx(ZoneUnitPanel, { zone: effectiveZone }), _jsxs(PanelSection, { title: effectiveZone.spaceRole === 'room' ? 'Room quantities' : 'Zone quantities', children: [_jsxs("div", { className: "overflow-hidden rounded-md border border-cyan-950/20 bg-[#f8faf7] text-slate-950", children: [_jsxs("div", { className: "flex items-center border-cyan-950/15 border-b px-2.5 py-2", children: [_jsx("span", { className: "font-semibold text-[11px]", children: effectiveZone.name }), _jsx("span", { className: "ml-auto rounded-full border border-cyan-800/25 bg-cyan-50 px-2 py-0.5 text-cyan-900 text-[9px]", children: report.classification === 'enclosed-room' ? 'Enclosed room' : 'Footprint only' })] }), _jsxs("div", { className: "flex items-baseline gap-2 px-2.5 py-2 font-mono text-[10px]", children: [_jsx("span", { className: "text-cyan-800", children: "A" }), _jsx("span", { children: formatAreaLabel(report.footprintArea, unit, 2) }), _jsx("span", { className: "ml-auto text-slate-600", children: "P" }), _jsx("span", { children: formatLinearMeasurement(report.perimeter, unit, metricNotation) })] })] }), _jsx(ZonePlanSketch, { edgeLengths: report.edgeLengths, metricNotation: metricNotation, polygon: effectiveZone.polygon, unit: unit }), _jsxs("div", { className: "flex flex-col gap-1.5", children: [_jsx(QuantityRow, { abbreviation: "Aw", format: (value) => formatAreaLabel(value, unit, 2), label: "Wall surface", quantity: report.wallSurface }), _jsx(QuantityRow, { abbreviation: "Af", format: (value) => formatAreaLabel(value, unit, 2), label: "Floor surface", quantity: report.floorSurface }), _jsx(QuantityRow, { abbreviation: "V", format: (value) => formatVolumeLabel(value, unit, 2), label: "Volume", quantity: report.volume })] })] })] }));
132
105
  }
@@ -1,3 +1,3 @@
1
- import { type GeometryContext, type QuickMeasurementReport, type ZoneNode } from '@pascal-app/core';
2
- export declare function zoneQuickMeasurement(node: ZoneNode, context?: GeometryContext): QuickMeasurementReport | null;
1
+ import type { QuickMeasurementReport, ZoneNode } from '@pascal-app/core';
2
+ export declare function zoneQuickMeasurement(node: ZoneNode): QuickMeasurementReport | null;
3
3
  //# sourceMappingURL=quick-measurement.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"quick-measurement.d.ts","sourceRoot":"","sources":["../../src/zone/quick-measurement.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,sBAAsB,EAE3B,KAAK,QAAQ,EACd,MAAM,kBAAkB,CAAA;AAOzB,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,QAAQ,EACd,OAAO,CAAC,EAAE,eAAe,GACxB,sBAAsB,GAAG,IAAI,CA0B/B"}
1
+ {"version":3,"file":"quick-measurement.d.ts","sourceRoot":"","sources":["../../src/zone/quick-measurement.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAOxE,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,QAAQ,GAAG,sBAAsB,GAAG,IAAI,CA2BlF"}
@@ -1,12 +1,13 @@
1
- import { resolveAutoZonePolygon, } from '@pascal-app/core';
2
1
  import { polygonBoundaryLength, polygonReportAnchor, polygonSurfaceArea, } from '../shared/quick-measurement';
3
- export function zoneQuickMeasurement(node, context) {
4
- const polygon = context ? resolveAutoZonePolygon(node, context.resolve) : node.polygon;
2
+ export function zoneQuickMeasurement(node) {
3
+ if (node.autoFromWalls && node.enclosureStatus === 'open')
4
+ return null;
5
+ const polygon = node.polygon;
5
6
  if (polygon.length < 3)
6
7
  return null;
7
8
  return {
8
9
  title: node.name,
9
- kindLabel: 'Zone',
10
+ kindLabel: node.spaceRole === 'room' ? 'Room' : 'Zone',
10
11
  anchor: polygonReportAnchor(polygon, 0.08),
11
12
  metrics: [
12
13
  {
@@ -14,7 +15,7 @@ export function zoneQuickMeasurement(node, context) {
14
15
  label: 'Footprint',
15
16
  abbreviation: 'A',
16
17
  quantity: 'area',
17
- value: polygonSurfaceArea(polygon),
18
+ value: polygonSurfaceArea(polygon, node.holes),
18
19
  },
19
20
  {
20
21
  key: 'perimeter',
@@ -1,6 +1,6 @@
1
1
  import { type ZoneNode } from '@pascal-app/core';
2
2
  export declare const ZoneRenderer: ({ node }: {
3
3
  node: ZoneNode;
4
- }) => import("react").JSX.Element | null;
4
+ }) => import("react").JSX.Element;
5
5
  export default ZoneRenderer;
6
6
  //# sourceMappingURL=renderer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../src/zone/renderer.tsx"],"names":[],"mappings":"AAEA,OAAO,EAML,KAAK,QAAQ,EACd,MAAM,kBAAkB,CAAA;AA0GzB,eAAO,MAAM,YAAY,GAAI,UAAU;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,uCA+MxD,CAAA;AAED,eAAe,YAAY,CAAA"}
1
+ {"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../src/zone/renderer.tsx"],"names":[],"mappings":"AAEA,OAAO,EAKL,KAAK,QAAQ,EACd,MAAM,kBAAkB,CAAA;AA6DzB,eAAO,MAAM,YAAY,GAAI,UAAU;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,gCASxD,CAAA;AA4ID,eAAe,YAAY,CAAA"}