@pascal-app/nodes 0.1.1 → 1.0.0-beta.1

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 (408) hide show
  1. package/README.md +34 -0
  2. package/dist/building/definition.js +1 -1
  3. package/dist/cabinet/definition.d.ts.map +1 -1
  4. package/dist/cabinet/definition.js +809 -72
  5. package/dist/cabinet/geometry.d.ts.map +1 -1
  6. package/dist/cabinet/geometry.js +4 -0
  7. package/dist/cabinet/move-frame.js +3 -3
  8. package/dist/cabinet/panel.d.ts.map +1 -1
  9. package/dist/cabinet/panel.js +1 -0
  10. package/dist/cabinet/placement-snap.d.ts +8 -0
  11. package/dist/cabinet/placement-snap.d.ts.map +1 -0
  12. package/dist/cabinet/placement-snap.js +19 -0
  13. package/dist/cabinet/presets.js +8 -8
  14. package/dist/cabinet/quick-actions.d.ts.map +1 -1
  15. package/dist/cabinet/quick-actions.js +9 -3
  16. package/dist/cabinet/resize-limits.d.ts +11 -0
  17. package/dist/cabinet/resize-limits.d.ts.map +1 -0
  18. package/dist/cabinet/resize-limits.js +22 -0
  19. package/dist/cabinet/run-layout.d.ts +8 -2
  20. package/dist/cabinet/run-layout.d.ts.map +1 -1
  21. package/dist/cabinet/run-layout.js +59 -7
  22. package/dist/cabinet/run-ops.d.ts +44 -3
  23. package/dist/cabinet/run-ops.d.ts.map +1 -1
  24. package/dist/cabinet/run-ops.js +646 -110
  25. package/dist/cabinet/run-panel.d.ts +2 -1
  26. package/dist/cabinet/run-panel.d.ts.map +1 -1
  27. package/dist/cabinet/run-panel.js +38 -4
  28. package/dist/cabinet/stack-transitions.js +4 -4
  29. package/dist/cabinet/tool.d.ts.map +1 -1
  30. package/dist/cabinet/tool.js +95 -17
  31. package/dist/cabinet/wall-snap.d.ts.map +1 -1
  32. package/dist/cabinet/wall-snap.js +2 -6
  33. package/dist/ceiling/boundary-editor.d.ts.map +1 -1
  34. package/dist/ceiling/boundary-editor.js +2 -2
  35. package/dist/ceiling/definition.d.ts +1 -1
  36. package/dist/ceiling/definition.d.ts.map +1 -1
  37. package/dist/ceiling/definition.js +36 -5
  38. package/dist/ceiling/floorplan-affordances.d.ts +4 -4
  39. package/dist/ceiling/floorplan-move.d.ts +4 -4
  40. package/dist/ceiling/floorplan-move.d.ts.map +1 -1
  41. package/dist/ceiling/floorplan-move.js +5 -4
  42. package/dist/ceiling/hole-editor.d.ts.map +1 -1
  43. package/dist/ceiling/hole-editor.js +2 -2
  44. package/dist/ceiling/move-tool.d.ts.map +1 -1
  45. package/dist/ceiling/move-tool.js +4 -3
  46. package/dist/ceiling/panel.d.ts.map +1 -1
  47. package/dist/ceiling/panel.js +65 -3
  48. package/dist/ceiling/renderer.d.ts.map +1 -1
  49. package/dist/ceiling/renderer.js +6 -2
  50. package/dist/ceiling/tool.d.ts.map +1 -1
  51. package/dist/ceiling/tool.js +12 -1
  52. package/dist/chimney/definition.d.ts.map +1 -1
  53. package/dist/chimney/definition.js +1 -0
  54. package/dist/chimney/tool.d.ts.map +1 -1
  55. package/dist/chimney/tool.js +16 -1
  56. package/dist/column/definition.d.ts.map +1 -1
  57. package/dist/column/definition.js +14 -2
  58. package/dist/column/floorplan-affordances.d.ts.map +1 -1
  59. package/dist/column/floorplan-affordances.js +19 -14
  60. package/dist/column/floorplan-move.d.ts.map +1 -1
  61. package/dist/column/floorplan-move.js +7 -2
  62. package/dist/column/floorplan.d.ts +9 -1
  63. package/dist/column/floorplan.d.ts.map +1 -1
  64. package/dist/column/floorplan.js +59 -4
  65. package/dist/column/tool.d.ts.map +1 -1
  66. package/dist/column/tool.js +33 -7
  67. package/dist/construction-dimension/definition.d.ts +4 -0
  68. package/dist/construction-dimension/definition.d.ts.map +1 -0
  69. package/dist/construction-dimension/definition.js +83 -0
  70. package/dist/construction-dimension/drawing-coordination.d.ts +7 -0
  71. package/dist/construction-dimension/drawing-coordination.d.ts.map +1 -0
  72. package/dist/construction-dimension/drawing-coordination.js +54 -0
  73. package/dist/construction-dimension/floorplan-affordances.d.ts +4 -0
  74. package/dist/construction-dimension/floorplan-affordances.d.ts.map +1 -0
  75. package/dist/construction-dimension/floorplan-affordances.js +114 -0
  76. package/dist/construction-dimension/floorplan-tool.d.ts +21 -0
  77. package/dist/construction-dimension/floorplan-tool.d.ts.map +1 -0
  78. package/dist/construction-dimension/floorplan-tool.js +557 -0
  79. package/dist/construction-dimension/floorplan.d.ts +3 -0
  80. package/dist/construction-dimension/floorplan.d.ts.map +1 -0
  81. package/dist/construction-dimension/floorplan.js +457 -0
  82. package/dist/construction-dimension/geometry.d.ts +31 -0
  83. package/dist/construction-dimension/geometry.d.ts.map +1 -0
  84. package/dist/construction-dimension/geometry.js +144 -0
  85. package/dist/construction-dimension/index.d.ts +4 -0
  86. package/dist/construction-dimension/index.d.ts.map +1 -0
  87. package/dist/construction-dimension/index.js +3 -0
  88. package/dist/construction-dimension/panel.d.ts +2 -0
  89. package/dist/construction-dimension/panel.d.ts.map +1 -0
  90. package/dist/construction-dimension/panel.js +128 -0
  91. package/dist/construction-dimension/parametrics.d.ts +3 -0
  92. package/dist/construction-dimension/parametrics.d.ts.map +1 -0
  93. package/dist/construction-dimension/parametrics.js +4 -0
  94. package/dist/construction-dimension/schema.d.ts +2 -0
  95. package/dist/construction-dimension/schema.d.ts.map +1 -0
  96. package/dist/construction-dimension/schema.js +1 -0
  97. package/dist/door/contextual-dimensions.d.ts +3 -0
  98. package/dist/door/contextual-dimensions.d.ts.map +1 -0
  99. package/dist/door/contextual-dimensions.js +7 -0
  100. package/dist/door/definition.d.ts.map +1 -1
  101. package/dist/door/definition.js +13 -8
  102. package/dist/door/floorplan-affordances.d.ts +2 -5
  103. package/dist/door/floorplan-affordances.d.ts.map +1 -1
  104. package/dist/door/floorplan-affordances.js +9 -18
  105. package/dist/door/floorplan.d.ts +3 -4
  106. package/dist/door/floorplan.d.ts.map +1 -1
  107. package/dist/door/floorplan.js +88 -6
  108. package/dist/door/move-tool.d.ts.map +1 -1
  109. package/dist/door/move-tool.js +2 -2
  110. package/dist/door/panel.d.ts.map +1 -1
  111. package/dist/door/panel.js +3 -1
  112. package/dist/door/schema.d.ts +1 -1
  113. package/dist/door/schema.d.ts.map +1 -1
  114. package/dist/door/schema.js +1 -1
  115. package/dist/door/tool.d.ts.map +1 -1
  116. package/dist/door/tool.js +63 -6
  117. package/dist/dormer/definition.d.ts.map +1 -1
  118. package/dist/dormer/definition.js +1 -0
  119. package/dist/dormer/tool.d.ts.map +1 -1
  120. package/dist/dormer/tool.js +23 -1
  121. package/dist/duct-segment/tool.d.ts.map +1 -1
  122. package/dist/duct-segment/tool.js +20 -9
  123. package/dist/duct-terminal/tool.d.ts.map +1 -1
  124. package/dist/duct-terminal/tool.js +9 -6
  125. package/dist/elevator/floorplan-affordances.d.ts +2 -6
  126. package/dist/elevator/floorplan-affordances.d.ts.map +1 -1
  127. package/dist/elevator/floorplan-affordances.js +13 -12
  128. package/dist/fence/actions/move-endpoint.d.ts.map +1 -1
  129. package/dist/fence/actions/move-endpoint.js +29 -1
  130. package/dist/fence/definition.d.ts.map +1 -1
  131. package/dist/fence/definition.js +67 -14
  132. package/dist/fence/floorplan-affordances.d.ts.map +1 -1
  133. package/dist/fence/floorplan-affordances.js +48 -11
  134. package/dist/fence/floorplan-move.d.ts.map +1 -1
  135. package/dist/fence/floorplan-move.js +38 -3
  136. package/dist/fence/geometry.d.ts.map +1 -1
  137. package/dist/fence/geometry.js +9 -1
  138. package/dist/fence/lift.d.ts +15 -0
  139. package/dist/fence/lift.d.ts.map +1 -0
  140. package/dist/fence/lift.js +23 -0
  141. package/dist/fence/move-tool.d.ts.map +1 -1
  142. package/dist/fence/move-tool.js +25 -5
  143. package/dist/fence/system.d.ts +3 -0
  144. package/dist/fence/system.d.ts.map +1 -0
  145. package/dist/fence/system.js +41 -0
  146. package/dist/fence/tool.d.ts.map +1 -1
  147. package/dist/fence/tool.js +103 -32
  148. package/dist/hvac-equipment/tool.d.ts.map +1 -1
  149. package/dist/hvac-equipment/tool.js +8 -3
  150. package/dist/index.d.ts +2 -0
  151. package/dist/index.d.ts.map +1 -1
  152. package/dist/index.js +6 -0
  153. package/dist/item/definition.d.ts.map +1 -1
  154. package/dist/item/definition.js +7 -1
  155. package/dist/item/floorplan-move.d.ts.map +1 -1
  156. package/dist/item/floorplan-move.js +50 -43
  157. package/dist/item/floorplan.d.ts +1 -0
  158. package/dist/item/floorplan.d.ts.map +1 -1
  159. package/dist/item/floorplan.js +49 -0
  160. package/dist/item/renderer.d.ts +3 -0
  161. package/dist/item/renderer.d.ts.map +1 -1
  162. package/dist/item/renderer.js +96 -8
  163. package/dist/level/definition.d.ts.map +1 -1
  164. package/dist/level/definition.js +7 -3
  165. package/dist/lineset/tool.d.ts.map +1 -1
  166. package/dist/lineset/tool.js +5 -1
  167. package/dist/liquid-line/tool.d.ts.map +1 -1
  168. package/dist/liquid-line/tool.js +7 -1
  169. package/dist/measurement/definition.d.ts.map +1 -1
  170. package/dist/measurement/definition.js +5 -0
  171. package/dist/measurement/floorplan.d.ts.map +1 -1
  172. package/dist/measurement/floorplan.js +11 -10
  173. package/dist/measurement/index.d.ts +1 -1
  174. package/dist/measurement/index.d.ts.map +1 -1
  175. package/dist/measurement/index.js +1 -1
  176. package/dist/measurement/resolve.d.ts +5 -0
  177. package/dist/measurement/resolve.d.ts.map +1 -1
  178. package/dist/measurement/resolve.js +2 -2
  179. package/dist/measurement/surface-query.js +5 -5
  180. package/dist/measurement/tool.d.ts +6 -1
  181. package/dist/measurement/tool.d.ts.map +1 -1
  182. package/dist/measurement/tool.js +7 -11
  183. package/dist/pipe-segment/tool.d.ts.map +1 -1
  184. package/dist/pipe-segment/tool.js +22 -19
  185. package/dist/roof-segment/floorplan-affordances.d.ts.map +1 -1
  186. package/dist/roof-segment/floorplan-affordances.js +14 -8
  187. package/dist/shared/construction-dimension-standards.d.ts +34 -0
  188. package/dist/shared/construction-dimension-standards.d.ts.map +1 -0
  189. package/dist/shared/construction-dimension-standards.js +18 -0
  190. package/dist/shared/construction-length.d.ts +10 -0
  191. package/dist/shared/construction-length.d.ts.map +1 -0
  192. package/dist/shared/construction-length.js +57 -0
  193. package/dist/shared/dimension-string.d.ts +20 -0
  194. package/dist/shared/dimension-string.d.ts.map +1 -0
  195. package/dist/shared/dimension-string.js +19 -0
  196. package/dist/shared/draft-axis-guides.d.ts +36 -0
  197. package/dist/shared/draft-axis-guides.d.ts.map +1 -0
  198. package/dist/shared/draft-axis-guides.js +107 -0
  199. package/dist/shared/move-roof-tool.d.ts.map +1 -1
  200. package/dist/shared/move-roof-tool.js +17 -3
  201. package/dist/shared/opening-documentation-fields.d.ts +16 -0
  202. package/dist/shared/opening-documentation-fields.d.ts.map +1 -0
  203. package/dist/shared/opening-documentation-fields.js +54 -0
  204. package/dist/shared/opening-documentation.d.ts +47 -0
  205. package/dist/shared/opening-documentation.d.ts.map +1 -0
  206. package/dist/shared/opening-documentation.js +300 -0
  207. package/dist/shared/opening-guides-runtime.d.ts.map +1 -1
  208. package/dist/shared/opening-guides-runtime.js +3 -2
  209. package/dist/shared/opening-placement-dimensions.d.ts.map +1 -1
  210. package/dist/shared/opening-placement-dimensions.js +14 -5
  211. package/dist/shared/wall-opening-ceiling.d.ts +30 -0
  212. package/dist/shared/wall-opening-ceiling.d.ts.map +1 -0
  213. package/dist/shared/wall-opening-ceiling.js +29 -0
  214. package/dist/shelf/floorplan-affordances.d.ts.map +1 -1
  215. package/dist/shelf/floorplan-affordances.js +10 -5
  216. package/dist/shelf/floorplan-move.d.ts +2 -16
  217. package/dist/shelf/floorplan-move.d.ts.map +1 -1
  218. package/dist/shelf/floorplan-move.js +19 -40
  219. package/dist/shelf/tool.d.ts.map +1 -1
  220. package/dist/shelf/tool.js +8 -3
  221. package/dist/site/recessed-slab-ground-holes.d.ts.map +1 -1
  222. package/dist/site/recessed-slab-ground-holes.js +1 -4
  223. package/dist/site/renderer.d.ts.map +1 -1
  224. package/dist/site/renderer.js +118 -28
  225. package/dist/site/terrain-drape.d.ts +91 -0
  226. package/dist/site/terrain-drape.d.ts.map +1 -0
  227. package/dist/site/terrain-drape.js +205 -0
  228. package/dist/site/terrain-geometry.d.ts +131 -0
  229. package/dist/site/terrain-geometry.d.ts.map +1 -0
  230. package/dist/site/terrain-geometry.js +259 -0
  231. package/dist/site/terrain-mesh.d.ts +49 -0
  232. package/dist/site/terrain-mesh.d.ts.map +1 -0
  233. package/dist/site/terrain-mesh.js +122 -0
  234. package/dist/site/terrain-renderer.d.ts +28 -0
  235. package/dist/site/terrain-renderer.d.ts.map +1 -0
  236. package/dist/site/terrain-renderer.js +69 -0
  237. package/dist/skylight/definition.d.ts.map +1 -1
  238. package/dist/skylight/definition.js +1 -0
  239. package/dist/skylight/tool.d.ts.map +1 -1
  240. package/dist/skylight/tool.js +16 -1
  241. package/dist/slab/definition.d.ts.map +1 -1
  242. package/dist/slab/definition.js +87 -10
  243. package/dist/slab/elevation-limit.d.ts +43 -0
  244. package/dist/slab/elevation-limit.d.ts.map +1 -0
  245. package/dist/slab/elevation-limit.js +124 -0
  246. package/dist/slab/floorplan-affordances.d.ts +16 -0
  247. package/dist/slab/floorplan-affordances.d.ts.map +1 -1
  248. package/dist/slab/geometry.d.ts.map +1 -1
  249. package/dist/slab/geometry.js +98 -5
  250. package/dist/slab/panel.d.ts.map +1 -1
  251. package/dist/slab/panel.js +82 -4
  252. package/dist/slab/parametrics.d.ts +1 -1
  253. package/dist/slab/parametrics.d.ts.map +1 -1
  254. package/dist/slab/parametrics.js +13 -1
  255. package/dist/slab/placement-ownership.d.ts +3 -0
  256. package/dist/slab/placement-ownership.d.ts.map +1 -0
  257. package/dist/slab/placement-ownership.js +3 -0
  258. package/dist/slab/quick-measurement.d.ts.map +1 -1
  259. package/dist/slab/quick-measurement.js +3 -2
  260. package/dist/slab/system.d.ts.map +1 -1
  261. package/dist/slab/system.js +14 -4
  262. package/dist/slab/tool.d.ts.map +1 -1
  263. package/dist/slab/tool.js +81 -23
  264. package/dist/solar-panel/definition.d.ts.map +1 -1
  265. package/dist/solar-panel/definition.js +1 -0
  266. package/dist/solar-panel/tool.d.ts.map +1 -1
  267. package/dist/solar-panel/tool.js +17 -1
  268. package/dist/spawn/definition.d.ts.map +1 -1
  269. package/dist/spawn/definition.js +1 -0
  270. package/dist/spawn/floorplan-affordances.d.ts.map +1 -1
  271. package/dist/spawn/floorplan-affordances.js +7 -4
  272. package/dist/spawn/floorplan-move.d.ts.map +1 -1
  273. package/dist/spawn/floorplan-move.js +8 -6
  274. package/dist/spawn/renderer.d.ts +4 -0
  275. package/dist/spawn/renderer.d.ts.map +1 -1
  276. package/dist/spawn/renderer.js +32 -18
  277. package/dist/spawn/tool.d.ts +2 -2
  278. package/dist/spawn/tool.d.ts.map +1 -1
  279. package/dist/spawn/tool.js +78 -11
  280. package/dist/stair/definition.d.ts.map +1 -1
  281. package/dist/stair/definition.js +15 -7
  282. package/dist/stair/destination.d.ts +16 -0
  283. package/dist/stair/destination.d.ts.map +1 -0
  284. package/dist/stair/destination.js +24 -0
  285. package/dist/stair/documentation.d.ts +8 -0
  286. package/dist/stair/documentation.d.ts.map +1 -0
  287. package/dist/stair/documentation.js +245 -0
  288. package/dist/stair/floor-stack.d.ts.map +1 -1
  289. package/dist/stair/floor-stack.js +38 -0
  290. package/dist/stair/floorplan-affordances.d.ts.map +1 -1
  291. package/dist/stair/floorplan-affordances.js +28 -9
  292. package/dist/stair/floorplan-move.d.ts +3 -5
  293. package/dist/stair/floorplan-move.d.ts.map +1 -1
  294. package/dist/stair/floorplan-move.js +14 -16
  295. package/dist/stair/floorplan.d.ts.map +1 -1
  296. package/dist/stair/floorplan.js +27 -14
  297. package/dist/stair/panel.d.ts.map +1 -1
  298. package/dist/stair/panel.js +35 -2
  299. package/dist/stair/renderer.d.ts.map +1 -1
  300. package/dist/stair/renderer.js +4 -3
  301. package/dist/structural-grid/coordination.d.ts +16 -0
  302. package/dist/structural-grid/coordination.d.ts.map +1 -0
  303. package/dist/structural-grid/coordination.js +105 -0
  304. package/dist/structural-grid/definition.d.ts +4 -0
  305. package/dist/structural-grid/definition.d.ts.map +1 -0
  306. package/dist/structural-grid/definition.js +51 -0
  307. package/dist/structural-grid/floorplan-tool.d.ts +16 -0
  308. package/dist/structural-grid/floorplan-tool.d.ts.map +1 -0
  309. package/dist/structural-grid/floorplan-tool.js +183 -0
  310. package/dist/structural-grid/floorplan.d.ts +3 -0
  311. package/dist/structural-grid/floorplan.d.ts.map +1 -0
  312. package/dist/structural-grid/floorplan.js +61 -0
  313. package/dist/structural-grid/index.d.ts +2 -0
  314. package/dist/structural-grid/index.d.ts.map +1 -0
  315. package/dist/structural-grid/index.js +1 -0
  316. package/dist/structural-grid/schema.d.ts +2 -0
  317. package/dist/structural-grid/schema.d.ts.map +1 -0
  318. package/dist/structural-grid/schema.js +1 -0
  319. package/dist/wall/construction-dimensions.d.ts +32 -0
  320. package/dist/wall/construction-dimensions.d.ts.map +1 -0
  321. package/dist/wall/construction-dimensions.js +1031 -0
  322. package/dist/wall/contextual-dimensions.d.ts +13 -0
  323. package/dist/wall/contextual-dimensions.d.ts.map +1 -0
  324. package/dist/wall/contextual-dimensions.js +221 -0
  325. package/dist/wall/definition.d.ts.map +1 -1
  326. package/dist/wall/definition.js +20 -1
  327. package/dist/wall/floorplan-affordances.d.ts.map +1 -1
  328. package/dist/wall/floorplan-affordances.js +23 -8
  329. package/dist/wall/floorplan-overrides.d.ts +9 -6
  330. package/dist/wall/floorplan-overrides.d.ts.map +1 -1
  331. package/dist/wall/floorplan-overrides.js +20 -11
  332. package/dist/wall/floorplan.d.ts +12 -3
  333. package/dist/wall/floorplan.d.ts.map +1 -1
  334. package/dist/wall/floorplan.js +121 -79
  335. package/dist/wall/measurement.d.ts.map +1 -1
  336. package/dist/wall/measurement.js +17 -4
  337. package/dist/wall/move-endpoint-tool.d.ts.map +1 -1
  338. package/dist/wall/move-endpoint-tool.js +74 -27
  339. package/dist/wall/move-shared.d.ts.map +1 -1
  340. package/dist/wall/move-shared.js +3 -2
  341. package/dist/wall/move-tool.d.ts.map +1 -1
  342. package/dist/wall/move-tool.js +15 -3
  343. package/dist/wall/paint.d.ts.map +1 -1
  344. package/dist/wall/paint.js +10 -6
  345. package/dist/wall/panel.d.ts.map +1 -1
  346. package/dist/wall/panel.js +32 -5
  347. package/dist/wall/parametrics.d.ts.map +1 -1
  348. package/dist/wall/parametrics.js +2 -0
  349. package/dist/wall/preview.d.ts +8 -0
  350. package/dist/wall/preview.d.ts.map +1 -0
  351. package/dist/wall/preview.js +39 -0
  352. package/dist/wall/quick-measurement.d.ts.map +1 -1
  353. package/dist/wall/quick-measurement.js +3 -2
  354. package/dist/wall/renderer.d.ts.map +1 -1
  355. package/dist/wall/renderer.js +7 -5
  356. package/dist/wall/system.d.ts +1 -1
  357. package/dist/wall/system.d.ts.map +1 -1
  358. package/dist/wall/system.js +37 -2
  359. package/dist/wall/tool.d.ts.map +1 -1
  360. package/dist/wall/tool.js +148 -96
  361. package/dist/wall/treatment-level-data.d.ts +14 -0
  362. package/dist/wall/treatment-level-data.d.ts.map +1 -0
  363. package/dist/wall/treatment-level-data.js +31 -0
  364. package/dist/wall/treatments.d.ts +8 -2
  365. package/dist/wall/treatments.d.ts.map +1 -1
  366. package/dist/wall/treatments.js +58 -15
  367. package/dist/window/contextual-dimensions.d.ts +3 -0
  368. package/dist/window/contextual-dimensions.d.ts.map +1 -0
  369. package/dist/window/contextual-dimensions.js +7 -0
  370. package/dist/window/definition.d.ts.map +1 -1
  371. package/dist/window/definition.js +15 -10
  372. package/dist/window/floorplan-affordances.d.ts +2 -5
  373. package/dist/window/floorplan-affordances.d.ts.map +1 -1
  374. package/dist/window/floorplan-affordances.js +9 -15
  375. package/dist/window/floorplan-move.d.ts.map +1 -1
  376. package/dist/window/floorplan-move.js +1 -1
  377. package/dist/window/floorplan.d.ts.map +1 -1
  378. package/dist/window/floorplan.js +7 -1
  379. package/dist/window/move-tool.d.ts.map +1 -1
  380. package/dist/window/move-tool.js +3 -3
  381. package/dist/window/panel.d.ts.map +1 -1
  382. package/dist/window/panel.js +4 -1
  383. package/dist/window/schema.d.ts +1 -1
  384. package/dist/window/schema.d.ts.map +1 -1
  385. package/dist/window/schema.js +1 -1
  386. package/dist/window/tool.d.ts.map +1 -1
  387. package/dist/window/tool.js +64 -7
  388. package/dist/window/window-math.d.ts +7 -3
  389. package/dist/window/window-math.d.ts.map +1 -1
  390. package/dist/window/window-math.js +8 -3
  391. package/dist/zone/contextual-dimensions.d.ts +3 -0
  392. package/dist/zone/contextual-dimensions.d.ts.map +1 -0
  393. package/dist/zone/contextual-dimensions.js +43 -0
  394. package/dist/zone/definition.d.ts.map +1 -1
  395. package/dist/zone/definition.js +9 -1
  396. package/dist/zone/floorplan-affordances.d.ts +36 -0
  397. package/dist/zone/floorplan-affordances.d.ts.map +1 -1
  398. package/dist/zone/floorplan.d.ts.map +1 -1
  399. package/dist/zone/floorplan.js +59 -3
  400. package/dist/zone/quantities-panel.d.ts.map +1 -1
  401. package/dist/zone/quantities-panel.js +48 -4
  402. package/dist/zone/room-clear-dimensions.d.ts +3 -0
  403. package/dist/zone/room-clear-dimensions.d.ts.map +1 -0
  404. package/dist/zone/room-clear-dimensions.js +406 -0
  405. package/dist/zone/room-documentation.d.ts +11 -0
  406. package/dist/zone/room-documentation.d.ts.map +1 -0
  407. package/dist/zone/room-documentation.js +97 -0
  408. package/package.json +7 -7
@@ -0,0 +1,13 @@
1
+ import { type FloorplanGeometry, type GeometryContext, type WallNode } from '@pascal-app/core';
2
+ type WallHostedOpening = {
3
+ position: readonly [number, number, number];
4
+ width: number;
5
+ };
6
+ type OpeningDimensionOptions = {
7
+ showClearancesWhileMoving: boolean;
8
+ useExteriorNormal: boolean;
9
+ };
10
+ export declare function buildWallContextualDimensions(node: WallNode, ctx: GeometryContext): FloorplanGeometry | null;
11
+ export declare function buildWallHostedOpeningContextualDimensions(node: WallHostedOpening, ctx: GeometryContext, options: OpeningDimensionOptions): FloorplanGeometry | null;
12
+ export {};
13
+ //# sourceMappingURL=contextual-dimensions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contextual-dimensions.d.ts","sourceRoot":"","sources":["../../src/wall/contextual-dimensions.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,iBAAiB,EAEtB,KAAK,eAAe,EAKpB,KAAK,QAAQ,EACd,MAAM,kBAAkB,CAAA;AAGzB,KAAK,iBAAiB,GAAG;IACvB,QAAQ,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IAC3C,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAED,KAAK,uBAAuB,GAAG;IAC7B,yBAAyB,EAAE,OAAO,CAAA;IAClC,iBAAiB,EAAE,OAAO,CAAA;CAC3B,CAAA;AA+ID,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,QAAQ,EACd,GAAG,EAAE,eAAe,GACnB,iBAAiB,GAAG,IAAI,CA8C1B;AAED,wBAAgB,0CAA0C,CACxD,IAAI,EAAE,iBAAiB,EACvB,GAAG,EAAE,eAAe,EACpB,OAAO,EAAE,uBAAuB,GAC/B,iBAAiB,GAAG,IAAI,CAyE1B"}
@@ -0,0 +1,221 @@
1
+ import { getWallCurveFrameAt, getWallCurveLength, getWallThickness, isCurvedWall, } from '@pascal-app/core';
2
+ import { formatLinearMeasurement, readFloorplanMetricNotationOverride } from '@pascal-app/editor';
3
+ const WALL_CONNECTION_TOLERANCE = 0.03;
4
+ function formatLength(value, ctx) {
5
+ return formatLinearMeasurement(value, ctx.viewState?.unit ?? 'metric', readFloorplanMetricNotationOverride(ctx) ?? 'meters');
6
+ }
7
+ function selectedStroke(ctx) {
8
+ return ctx.viewState?.palette?.selectedStroke ?? '#2563eb';
9
+ }
10
+ function contextualWallDimensionNormal(wall, frontNormal, siblings) {
11
+ const front = [cleanZero(frontNormal[0]), cleanZero(frontNormal[1])];
12
+ const back = [cleanZero(-front[0]), cleanZero(-front[1])];
13
+ if (wall.frontSide === 'exterior' && wall.backSide !== 'exterior')
14
+ return front;
15
+ if (wall.backSide === 'exterior' && wall.frontSide !== 'exterior')
16
+ return back;
17
+ if (wall.frontSide === 'interior' && wall.backSide === 'interior')
18
+ return front;
19
+ const walls = [
20
+ wall,
21
+ ...siblings.filter((sibling) => sibling.type === 'wall'),
22
+ ];
23
+ let centroidX = 0;
24
+ let centroidY = 0;
25
+ for (const candidate of walls) {
26
+ centroidX += candidate.start[0] + candidate.end[0];
27
+ centroidY += candidate.start[1] + candidate.end[1];
28
+ }
29
+ const centroid = [centroidX / (walls.length * 2), centroidY / (walls.length * 2)];
30
+ const midpoint = [
31
+ (wall.start[0] + wall.end[0]) / 2,
32
+ (wall.start[1] + wall.end[1]) / 2,
33
+ ];
34
+ const towardFront = (midpoint[0] - centroid[0]) * front[0] + (midpoint[1] - centroid[1]) * front[1];
35
+ return towardFront >= 0 ? front : back;
36
+ }
37
+ function cleanZero(value) {
38
+ return Math.abs(value) <= Number.EPSILON ? 0 : value;
39
+ }
40
+ function cross(left, right) {
41
+ return left[0] * right[1] - left[1] * right[0];
42
+ }
43
+ function pointSegmentDistance(point, start, end) {
44
+ const dx = end[0] - start[0];
45
+ const dy = end[1] - start[1];
46
+ const lengthSquared = dx * dx + dy * dy;
47
+ if (lengthSquared <= 1e-12)
48
+ return Math.hypot(point[0] - start[0], point[1] - start[1]);
49
+ const t = Math.max(0, Math.min(1, ((point[0] - start[0]) * dx + (point[1] - start[1]) * dy) / lengthSquared));
50
+ return Math.hypot(point[0] - (start[0] + dx * t), point[1] - (start[1] + dy * t));
51
+ }
52
+ function structuralFaceProjections(wallStart, wallTangent, connectedWall) {
53
+ if (isCurvedWall(connectedWall))
54
+ return [];
55
+ const dx = connectedWall.end[0] - connectedWall.start[0];
56
+ const dy = connectedWall.end[1] - connectedWall.start[1];
57
+ const length = Math.hypot(dx, dy);
58
+ if (length <= 1e-6)
59
+ return [];
60
+ const direction = [dx / length, dy / length];
61
+ const denominator = cross(wallTangent, direction);
62
+ if (Math.abs(denominator) <= 1e-6)
63
+ return [];
64
+ const normal = [-direction[1], direction[0]];
65
+ const halfThickness = getWallThickness(connectedWall) / 2;
66
+ return [-halfThickness, halfThickness].map((offset) => {
67
+ const facePoint = [
68
+ connectedWall.start[0] + normal[0] * offset,
69
+ connectedWall.start[1] + normal[1] * offset,
70
+ ];
71
+ return (cross([facePoint[0] - wallStart[0], facePoint[1] - wallStart[1]], direction) / denominator);
72
+ });
73
+ }
74
+ function wallStudFaceSpan(wall, siblings) {
75
+ const dx = wall.end[0] - wall.start[0];
76
+ const dy = wall.end[1] - wall.start[1];
77
+ const centerlineLength = Math.hypot(dx, dy);
78
+ if (centerlineLength <= 1e-6) {
79
+ return { start: wall.start, end: wall.end, length: centerlineLength };
80
+ }
81
+ const tangent = [dx / centerlineLength, dy / centerlineLength];
82
+ let startProjection = 0;
83
+ let endProjection = centerlineLength;
84
+ for (const sibling of siblings) {
85
+ if (sibling.type !== 'wall' || sibling.id === wall.id)
86
+ continue;
87
+ const projections = structuralFaceProjections(wall.start, tangent, sibling);
88
+ if (pointSegmentDistance(wall.start, sibling.start, sibling.end) <= WALL_CONNECTION_TOLERANCE) {
89
+ for (const projection of projections) {
90
+ if (projection > startProjection && projection < endProjection) {
91
+ startProjection = projection;
92
+ }
93
+ }
94
+ }
95
+ if (pointSegmentDistance(wall.end, sibling.start, sibling.end) <= WALL_CONNECTION_TOLERANCE) {
96
+ for (const projection of projections) {
97
+ if (projection > startProjection && projection < endProjection) {
98
+ endProjection = projection;
99
+ }
100
+ }
101
+ }
102
+ }
103
+ const start = [
104
+ wall.start[0] + tangent[0] * startProjection,
105
+ wall.start[1] + tangent[1] * startProjection,
106
+ ];
107
+ const end = [
108
+ wall.start[0] + tangent[0] * endProjection,
109
+ wall.start[1] + tangent[1] * endProjection,
110
+ ];
111
+ return { start, end, length: Math.max(0, endProjection - startProjection) };
112
+ }
113
+ export function buildWallContextualDimensions(node, ctx) {
114
+ const length = getWallCurveLength(node);
115
+ if (!Number.isFinite(length) || length <= 1e-6)
116
+ return null;
117
+ if (isCurvedWall(node)) {
118
+ const frame = getWallCurveFrameAt(node, 0.5);
119
+ const offsetNormal = contextualWallDimensionNormal(node, [frame.normal.x, frame.normal.y], ctx.siblings);
120
+ return {
121
+ kind: 'dimension-label',
122
+ appearance: 'outlined',
123
+ cx: frame.point.x + offsetNormal[0] * 0.38,
124
+ cy: frame.point.y + offsetNormal[1] * 0.38,
125
+ text: formatLength(length, ctx),
126
+ angle: Math.atan2(frame.tangent.y, frame.tangent.x),
127
+ };
128
+ }
129
+ const dx = node.end[0] - node.start[0];
130
+ const dy = node.end[1] - node.start[1];
131
+ const chordLength = Math.hypot(dx, dy);
132
+ if (chordLength <= 1e-6)
133
+ return null;
134
+ const offsetNormal = contextualWallDimensionNormal(node, [-dy / chordLength, dx / chordLength], ctx.siblings);
135
+ const span = node.frontSide === 'interior' && node.backSide === 'interior'
136
+ ? wallStudFaceSpan(node, ctx.siblings)
137
+ : { start: node.start, end: node.end, length: chordLength };
138
+ if (span.length <= 1e-6)
139
+ return null;
140
+ return {
141
+ kind: 'dimension',
142
+ start: span.start,
143
+ end: span.end,
144
+ offsetNormal,
145
+ offsetDistance: 0.34,
146
+ extensionOvershoot: 0.08,
147
+ text: formatLength(span.length, ctx),
148
+ stroke: selectedStroke(ctx),
149
+ };
150
+ }
151
+ export function buildWallHostedOpeningContextualDimensions(node, ctx, options) {
152
+ const wall = ctx.parent;
153
+ if (wall?.type !== 'wall' || node.width <= 1e-6)
154
+ return null;
155
+ const dx = wall.end[0] - wall.start[0];
156
+ const dy = wall.end[1] - wall.start[1];
157
+ const wallLength = Math.hypot(dx, dy);
158
+ if (wallLength <= 1e-6)
159
+ return null;
160
+ const dirX = dx / wallLength;
161
+ const dirY = dy / wallLength;
162
+ const cx = wall.start[0] + dirX * node.position[0];
163
+ const cy = wall.start[1] + dirY * node.position[0];
164
+ const halfWidth = node.width / 2;
165
+ const openingStart = [cx - dirX * halfWidth, cy - dirY * halfWidth];
166
+ const openingEnd = [cx + dirX * halfWidth, cy + dirY * halfWidth];
167
+ if (!options.useExteriorNormal || isCurvedWall(wall)) {
168
+ return {
169
+ kind: 'dimension',
170
+ start: openingStart,
171
+ end: openingEnd,
172
+ offsetNormal: [-dirY, dirX],
173
+ offsetDistance: 0.34,
174
+ extensionOvershoot: 0.08,
175
+ text: formatLength(node.width, ctx),
176
+ stroke: selectedStroke(ctx),
177
+ };
178
+ }
179
+ const offsetNormal = contextualWallDimensionNormal(wall, [-dirY, dirX], ctx.siblings);
180
+ if (!options.showClearancesWhileMoving || !ctx.viewState?.moving) {
181
+ return {
182
+ kind: 'dimension',
183
+ start: openingStart,
184
+ end: openingEnd,
185
+ offsetNormal,
186
+ offsetDistance: 0.34,
187
+ extensionOvershoot: 0.08,
188
+ text: formatLength(node.width, ctx),
189
+ stroke: selectedStroke(ctx),
190
+ };
191
+ }
192
+ const span = wallStudFaceSpan(wall, ctx.siblings);
193
+ const spanStart = (span.start[0] - wall.start[0]) * dirX + (span.start[1] - wall.start[1]) * dirY;
194
+ const spanEnd = (span.end[0] - wall.start[0]) * dirX + (span.end[1] - wall.start[1]) * dirY;
195
+ const openingStartAlong = node.position[0] - halfWidth;
196
+ const openingEndAlong = node.position[0] + halfWidth;
197
+ return {
198
+ kind: 'dimension-string',
199
+ segments: [
200
+ {
201
+ start: span.start,
202
+ end: openingStart,
203
+ text: formatLength(Math.max(0, openingStartAlong - spanStart), ctx),
204
+ },
205
+ {
206
+ start: openingStart,
207
+ end: openingEnd,
208
+ text: formatLength(node.width, ctx),
209
+ },
210
+ {
211
+ start: openingEnd,
212
+ end: span.end,
213
+ text: formatLength(Math.max(0, spanEnd - openingEndAlong), ctx),
214
+ },
215
+ ],
216
+ offsetNormal,
217
+ offsetDistance: 0.34,
218
+ extensionOvershoot: 0.08,
219
+ stroke: selectedStroke(ctx),
220
+ };
221
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/wall/definition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAatD,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAGnC;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,cAAc,EAAE,cAAc,CAAC,OAAO,QAAQ,CAoH1D,CAAA"}
1
+ {"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/wall/definition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAa,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAejE,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAGnC;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,cAAc,EAAE,cAAc,CAAC,OAAO,QAAQ,CAoI1D,CAAA"}
@@ -1,3 +1,4 @@
1
+ import { buildWallContextualDimensions } from './contextual-dimensions';
1
2
  import { buildWallFloorplan, computeWallFloorplanLevelData } from './floorplan';
2
3
  import { wallCurveAffordance, wallMoveEndpointAffordance } from './floorplan-affordances';
3
4
  import { wallFloorplanMoveTarget } from './floorplan-move';
@@ -26,10 +27,27 @@ import { wallSlots } from './slots';
26
27
  export const wallDefinition = {
27
28
  kind: 'wall',
28
29
  snapProfile: 'structural',
29
- schemaVersion: 5,
30
+ schemaVersion: 7,
30
31
  schema: WallNode,
31
32
  category: 'structure',
32
33
  surfaceRole: 'wall',
34
+ extensions: {
35
+ 'pascal:editor/floorplan': {
36
+ contextualDimensions: buildWallContextualDimensions,
37
+ actionMenu: {
38
+ canCurve: ({ node, nodes }) => !node.children.some((childId) => {
39
+ const child = nodes[childId];
40
+ if (!child)
41
+ return false;
42
+ if (child.type === 'door' || child.type === 'window')
43
+ return true;
44
+ if (child.type !== 'item')
45
+ return false;
46
+ return child.asset?.attachTo === 'wall' || child.asset?.attachTo === 'wall-side';
47
+ }),
48
+ },
49
+ },
50
+ },
33
51
  defaults: () => ({
34
52
  object: 'node',
35
53
  parentId: null,
@@ -80,6 +98,7 @@ export const wallDefinition = {
80
98
  // auto-slab live preview, history dances). Placement is wired via
81
99
  // `def.tool`.
82
100
  tool: () => import('./tool'),
101
+ preview: () => import('./preview'),
83
102
  affordanceTools: {
84
103
  curve: () => import('./curve-tool'),
85
104
  'move-endpoint': () => import('./move-endpoint-tool'),
@@ -1 +1 @@
1
- {"version":3,"file":"floorplan-affordances.d.ts","sourceRoot":"","sources":["../../src/wall/floorplan-affordances.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,mBAAmB,EAQxB,KAAK,QAAQ,EACd,MAAM,kBAAkB,CAAA;AAoFzB;;;;;;;;GAQG;AACH,eAAO,MAAM,mBAAmB,EAAE,mBAAmB,CAAC,QAAQ,CAuD7D,CAAA;AAED,eAAO,MAAM,0BAA0B,EAAE,mBAAmB,CAAC,QAAQ,CA2JpE,CAAA"}
1
+ {"version":3,"file":"floorplan-affordances.d.ts","sourceRoot":"","sources":["../../src/wall/floorplan-affordances.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,mBAAmB,EAQxB,KAAK,QAAQ,EACd,MAAM,kBAAkB,CAAA;AAoFzB;;;;;;;;GAQG;AACH,eAAO,MAAM,mBAAmB,EAAE,mBAAmB,CAAC,QAAQ,CAuD7D,CAAA;AAED,eAAO,MAAM,0BAA0B,EAAE,mBAAmB,CAAC,QAAQ,CA0KpE,CAAA"}
@@ -97,6 +97,18 @@ export const wallMoveEndpointAffordance = {
97
97
  const originalEnd = [...node.end];
98
98
  const linkedWalls = collectLinkedWalls(nodes, node.id, originalStart, originalEnd);
99
99
  const affectedIds = [node.id, ...linkedWalls.map((w) => w.id)];
100
+ const movingOriginal = endpoint === 'start' ? originalStart : originalEnd;
101
+ // Walls attached to the MOVING corner cascade with the drag, but the snap
102
+ // pipeline reads the scene store, which keeps their pre-drag coordinates
103
+ // until commit. Their stale corners would recreate the old junction as a
104
+ // snap/alignment target: inside the connect radius the endpoint could
105
+ // never land closer than ~5cm to where it started, making sub-5cm
106
+ // corrections (e.g. squaring a scan-imported 91° corner) impossible.
107
+ // Excluded while attached; under Alt-detach they stay put and remain
108
+ // legitimate targets. Mirrors the 3D move-endpoint tool.
109
+ const movingLinkedWallIds = linkedWalls
110
+ .filter((w) => pointsEqual(w.start, movingOriginal) || pointsEqual(w.end, movingOriginal))
111
+ .map((w) => w.id);
100
112
  // Remember the latest preview so `commit()` can write it tracked.
101
113
  let lastPrimaryStart = originalStart;
102
114
  let lastPrimaryEnd = originalEnd;
@@ -107,11 +119,12 @@ export const wallMoveEndpointAffordance = {
107
119
  // Re-collect walls every tick so the snap pipeline sees fresh
108
120
  // positions (matters when the user releases + re-grabs without
109
121
  // unmounting the layer). Snap reads from scene — which holds
110
- // the pre-drag positions throughout — so the linked-wall snap
111
- // targets stay anchored to where corners *were*, exactly like
112
- // the legacy flow.
122
+ // the pre-drag positions throughout — so walls that cascade with
123
+ // the moving corner are excluded (stale coordinates); under
124
+ // Alt-detach they stay put, so they rejoin the candidate pool.
113
125
  const sceneNodes = useScene.getState().nodes;
114
126
  const walls = collectLevelWalls(sceneNodes, node.id);
127
+ const staleWallIds = modifiers.altKey ? [node.id] : [node.id, ...movingLinkedWallIds];
115
128
  // The grid step follows the active snapping mode (`getSegmentGridStep()`
116
129
  // is 0 outside grid mode), so `'lines' / 'angles' / 'off'` no longer
117
130
  // force a grid snap the mode chip says is inactive. In `'angles'` mode
@@ -121,7 +134,7 @@ export const wallMoveEndpointAffordance = {
121
134
  const snapped = snapWallDraftPoint({
122
135
  point: planPoint,
123
136
  walls,
124
- ignoreWallIds: [node.id],
137
+ ignoreWallIds: staleWallIds,
125
138
  start: angleLocked ? fixedPoint : undefined,
126
139
  angleSnap: angleLocked,
127
140
  magnetic: isMagneticSnapActive(),
@@ -131,13 +144,15 @@ export const wallMoveEndpointAffordance = {
131
144
  // object's edge / wall face and publishes a guide. The guide is
132
145
  // DISPLAYED in every mode except Off (isAlignmentGuideActive); the
133
146
  // magnetic pull onto it is applied only in 'lines' mode
134
- // (isMagneticSnapActive), like the draft tool does. The dragged wall and
135
- // its linked siblings (which cascade with the corner) are excluded from
136
- // the candidate pool. Alt is detach, NOT bypass.
147
+ // (isMagneticSnapActive), like the draft tool does. Only the dragged
148
+ // wall and the siblings cascading with the moving corner are excluded
149
+ // from the candidate pool — walls linked at the FIXED corner don't
150
+ // move, and their anchors are what let the dragged corner align back
151
+ // onto a true axis. Alt is detach, NOT bypass.
137
152
  const aligned = alignFloorplanDraftPoint(snapped, {
138
153
  applySnap: isMagneticSnapActive(),
139
154
  bypass: !isAlignmentGuideActive(),
140
- excludeIds: [node.id, ...linkedWalls.map((w) => w.id)],
155
+ excludeIds: staleWallIds,
141
156
  });
142
157
  const primaryStart = endpoint === 'start' ? aligned : fixedPoint;
143
158
  const primaryEnd = endpoint === 'end' ? aligned : fixedPoint;
@@ -1,22 +1,25 @@
1
- import type { AnyNode, AnyNodeId } from '@pascal-app/core';
1
+ import type { AnyNode, AnyNodeId, LiveTransform } from '@pascal-app/core';
2
2
  /**
3
- * Project per-frame wall drag overrides (`{ start, end, curveOffset }`)
4
- * from `useLiveNodeOverrides` into a fresh `nodes` snapshot. The 2D drag
3
+ * Project per-frame wall and opening drag overrides into a fresh `nodes`
4
+ * snapshot. Wall overrides keep shared miters current; door and window
5
+ * overrides keep associative construction dimensions current while an
6
+ * opening moves or changes host. The 2D drag
5
7
  * handlers publish overrides for the moved wall plus its linked
6
8
  * neighbours; the floor-plan layer hands the merged snapshot to
7
9
  * `buildContext` so each wall's `ctx.siblings` (which feeds the
8
10
  * miter calculation) reflects the live cursor positions instead of
9
11
  * the last committed scene state.
10
12
  *
11
- * Only wall entries are touched; every other node is shared by
12
- * reference. The allocation cost is one shallow object per overridden
13
- * wall — the override map is small, so this is cheap. When the
13
+ * Other node types are shared by reference. The allocation cost is one
14
+ * shallow object per relevant override — the override map is small, so
15
+ * this is cheap. When the
14
16
  * override map is empty (no live drag) the input is returned
15
17
  * unchanged.
16
18
  */
17
19
  export declare function wallFloorplanSiblingOverrides(args: {
18
20
  nodeId: AnyNodeId;
19
21
  nodes: Record<AnyNodeId, AnyNode>;
22
+ liveTransforms?: Map<string, LiveTransform>;
20
23
  liveOverrides: Map<string, Record<string, unknown>>;
21
24
  }): Record<AnyNodeId, AnyNode>;
22
25
  //# sourceMappingURL=floorplan-overrides.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"floorplan-overrides.d.ts","sourceRoot":"","sources":["../../src/wall/floorplan-overrides.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAE1D;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,6BAA6B,CAAC,IAAI,EAAE;IAClD,MAAM,EAAE,SAAS,CAAA;IACjB,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;IACjC,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;CACpD,GAAG,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAY7B"}
1
+ {"version":3,"file":"floorplan-overrides.d.ts","sourceRoot":"","sources":["../../src/wall/floorplan-overrides.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAEzE;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,6BAA6B,CAAC,IAAI,EAAE;IAClD,MAAM,EAAE,SAAS,CAAA;IACjB,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;IACjC,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;IAC3C,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;CACpD,GAAG,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAqB7B"}
@@ -1,32 +1,41 @@
1
1
  /**
2
- * Project per-frame wall drag overrides (`{ start, end, curveOffset }`)
3
- * from `useLiveNodeOverrides` into a fresh `nodes` snapshot. The 2D drag
2
+ * Project per-frame wall and opening drag overrides into a fresh `nodes`
3
+ * snapshot. Wall overrides keep shared miters current; door and window
4
+ * overrides keep associative construction dimensions current while an
5
+ * opening moves or changes host. The 2D drag
4
6
  * handlers publish overrides for the moved wall plus its linked
5
7
  * neighbours; the floor-plan layer hands the merged snapshot to
6
8
  * `buildContext` so each wall's `ctx.siblings` (which feeds the
7
9
  * miter calculation) reflects the live cursor positions instead of
8
10
  * the last committed scene state.
9
11
  *
10
- * Only wall entries are touched; every other node is shared by
11
- * reference. The allocation cost is one shallow object per overridden
12
- * wall — the override map is small, so this is cheap. When the
12
+ * Other node types are shared by reference. The allocation cost is one
13
+ * shallow object per relevant override — the override map is small, so
14
+ * this is cheap. When the
13
15
  * override map is empty (no live drag) the input is returned
14
16
  * unchanged.
15
17
  */
16
18
  export function wallFloorplanSiblingOverrides(args) {
17
- const { nodes, liveOverrides } = args;
18
- if (liveOverrides.size === 0)
19
+ const { nodes, liveOverrides, liveTransforms } = args;
20
+ if (liveOverrides.size === 0 && !liveTransforms?.size)
19
21
  return nodes;
20
22
  let out = null;
21
- for (const [id, override] of liveOverrides) {
23
+ const ids = new Set([...liveOverrides.keys(), ...(liveTransforms?.keys() ?? [])]);
24
+ for (const id of ids) {
22
25
  const existing = nodes[id];
23
- if (existing?.type !== 'wall')
26
+ if (existing?.type !== 'wall' && existing?.type !== 'door' && existing?.type !== 'window') {
24
27
  continue;
25
- if (Object.keys(override).length === 0)
28
+ }
29
+ const override = liveOverrides.get(id);
30
+ const liveTransform = liveTransforms?.get(id);
31
+ const livePosition = liveTransform && (existing.type === 'door' || existing.type === 'window')
32
+ ? { position: liveTransform.position }
33
+ : undefined;
34
+ if ((!override || Object.keys(override).length === 0) && !livePosition)
26
35
  continue;
27
36
  if (!out)
28
37
  out = { ...nodes };
29
- out[id] = { ...existing, ...override };
38
+ out[id] = { ...existing, ...override, ...livePosition };
30
39
  }
31
40
  return out ?? nodes;
32
41
  }
@@ -1,8 +1,16 @@
1
1
  import { type AnyNode, type FloorplanGeometry, type GeometryContext, type WallMiterData, type WallNode } from '@pascal-app/core';
2
- export declare function computeWallFloorplanLevelData({ siblings, }: {
2
+ import { type WallConstructionDimensionPlan } from './construction-dimensions';
3
+ declare const WALL_DIMENSION_REFERENCES: readonly ["finished-faces", "centerline", "stud-faces"];
4
+ type WallDimensionReference = (typeof WALL_DIMENSION_REFERENCES)[number];
5
+ export type WallFloorplanLevelData = {
6
+ miters: WallMiterData;
7
+ documentMiters: WallMiterData;
8
+ constructionDimensionsByReference: Record<WallDimensionReference, WallConstructionDimensionPlan>;
9
+ };
10
+ export declare function computeWallFloorplanLevelData({ siblings, nodes, }: {
3
11
  siblings: ReadonlyArray<WallNode>;
4
12
  nodes: Record<string, AnyNode>;
5
- }): WallMiterData;
13
+ }): WallFloorplanLevelData;
6
14
  /**
7
15
  * Stage C floor-plan builder for wall — emits the full chrome stack the
8
16
  * legacy `floorplan-panel.tsx` rendered inline:
@@ -13,11 +21,12 @@ export declare function computeWallFloorplanLevelData({ siblings, }: {
13
21
  * wall body easily.
14
22
  * 4. Two endpoint handles (start + end) when selected — the registry
15
23
  * layer hosts the 5-circle stack + hover transitions + 2D drag.
16
- * 5. A small dimension label at the midpoint when selected.
24
+ * 5. Exterior facade strings plus interior wall spans and hosted-opening widths.
17
25
  *
18
26
  * `ctx.levelData` provides the shared level miter graph when the floor-plan
19
27
  * dispatcher precomputes it; `ctx.siblings` remains the fallback path for
20
28
  * direct builder callers.
21
29
  */
22
30
  export declare function buildWallFloorplan(node: WallNode, ctx: GeometryContext): FloorplanGeometry | null;
31
+ export {};
23
32
  //# sourceMappingURL=floorplan.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"floorplan.d.ts","sourceRoot":"","sources":["../../src/wall/floorplan.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EAEZ,KAAK,iBAAiB,EAEtB,KAAK,eAAe,EAKpB,KAAK,aAAa,EAClB,KAAK,QAAQ,EACd,MAAM,kBAAkB,CAAA;AA0BzB,wBAAgB,6BAA6B,CAAC,EAC5C,QAAQ,GACT,EAAE;IACD,QAAQ,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAA;IACjC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC/B,GAAG,aAAa,CAEhB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,eAAe,GAAG,iBAAiB,GAAG,IAAI,CA+LjG"}
1
+ {"version":3,"file":"floorplan.d.ts","sourceRoot":"","sources":["../../src/wall/floorplan.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EAEZ,KAAK,iBAAiB,EAEtB,KAAK,eAAe,EAOpB,KAAK,aAAa,EAClB,KAAK,QAAQ,EACd,MAAM,kBAAkB,CAAA;AAGzB,OAAO,EAKL,KAAK,6BAA6B,EACnC,MAAM,2BAA2B,CAAA;AAWlC,QAAA,MAAM,yBAAyB,yDAA0D,CAAA;AAEzF,KAAK,sBAAsB,GAAG,CAAC,OAAO,yBAAyB,CAAC,CAAC,MAAM,CAAC,CAAA;AAexE,MAAM,MAAM,sBAAsB,GAAG;IACnC,MAAM,EAAE,aAAa,CAAA;IACrB,cAAc,EAAE,aAAa,CAAA;IAC7B,iCAAiC,EAAE,MAAM,CAAC,sBAAsB,EAAE,6BAA6B,CAAC,CAAA;CACjG,CAAA;AAED,wBAAgB,6BAA6B,CAAC,EAC5C,QAAQ,EACR,KAAK,GACN,EAAE;IACD,QAAQ,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAA;IACjC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC/B,GAAG,sBAAsB,CAqCzB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,eAAe,GAAG,iBAAiB,GAAG,IAAI,CAoMjG"}