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

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 +74 -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 +15 -1
  138. package/dist/fence/lift.d.ts +38 -0
  139. package/dist/fence/lift.d.ts.map +1 -0
  140. package/dist/fence/lift.js +51 -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 +46 -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,105 @@
1
+ export const STRUCTURAL_GRID_SNAP_DISTANCE_M = 0.25;
2
+ export const STRUCTURAL_GRID_REFERENCE_TOLERANCE_M = 0.02;
3
+ const EPSILON = 1e-9;
4
+ export function collectStructuralGridAxes(nodes, levelId) {
5
+ if (!levelId)
6
+ return [];
7
+ return Object.values(nodes).filter((node) => node.type === 'structural-grid' && node.parentId === levelId && node.visible !== false);
8
+ }
9
+ export function formatStructuralGridReference(axes) {
10
+ const labels = [...new Set(axes.map((axis) => axis.label.trim()).filter(Boolean))];
11
+ labels.sort((left, right) => {
12
+ const leftFamily = structuralGridLabelSortFamily(left);
13
+ const rightFamily = structuralGridLabelSortFamily(right);
14
+ if (leftFamily !== rightFamily)
15
+ return leftFamily - rightFamily;
16
+ return left.localeCompare(right, undefined, { numeric: true, sensitivity: 'base' });
17
+ });
18
+ return labels.join('-');
19
+ }
20
+ export function resolveStructuralGridSnap(point, axes, maxDistance = STRUCTURAL_GRID_SNAP_DISTANCE_M) {
21
+ let nearestIntersection = null;
22
+ for (let firstIndex = 0; firstIndex < axes.length; firstIndex += 1) {
23
+ const first = axes[firstIndex];
24
+ if (!first)
25
+ continue;
26
+ for (let secondIndex = firstIndex + 1; secondIndex < axes.length; secondIndex += 1) {
27
+ const second = axes[secondIndex];
28
+ if (!second)
29
+ continue;
30
+ const intersection = segmentIntersection(first.start, first.end, second.start, second.end);
31
+ if (!intersection)
32
+ continue;
33
+ const distance = pointDistance(point, intersection);
34
+ if (distance > maxDistance ||
35
+ (nearestIntersection && distance >= nearestIntersection.distance)) {
36
+ continue;
37
+ }
38
+ nearestIntersection = {
39
+ point: intersection,
40
+ distance,
41
+ kind: 'intersection',
42
+ axes: [first, second],
43
+ reference: formatStructuralGridReference([first, second]),
44
+ };
45
+ }
46
+ }
47
+ if (nearestIntersection)
48
+ return nearestIntersection;
49
+ let nearestLine = null;
50
+ for (const axis of axes) {
51
+ const projected = closestPointOnSegment(point, axis.start, axis.end);
52
+ const distance = pointDistance(point, projected);
53
+ if (distance > maxDistance || (nearestLine && distance >= nearestLine.distance))
54
+ continue;
55
+ nearestLine = {
56
+ point: projected,
57
+ distance,
58
+ kind: 'line',
59
+ axes: [axis],
60
+ reference: formatStructuralGridReference([axis]),
61
+ };
62
+ }
63
+ return nearestLine;
64
+ }
65
+ export function resolveStructuralGridReference(point, axes, tolerance = STRUCTURAL_GRID_REFERENCE_TOLERANCE_M) {
66
+ const matching = axes.filter((axis) => pointDistance(point, closestPointOnSegment(point, axis.start, axis.end)) <= tolerance);
67
+ const reference = formatStructuralGridReference(matching);
68
+ return reference || null;
69
+ }
70
+ function structuralGridLabelSortFamily(label) {
71
+ if (/^[A-Za-z]+$/.test(label))
72
+ return 0;
73
+ if (/^\d+$/.test(label))
74
+ return 1;
75
+ return 2;
76
+ }
77
+ function pointDistance(first, second) {
78
+ return Math.hypot(second[0] - first[0], second[1] - first[1]);
79
+ }
80
+ function closestPointOnSegment(point, start, end) {
81
+ const dx = end[0] - start[0];
82
+ const dz = end[1] - start[1];
83
+ const lengthSquared = dx * dx + dz * dz;
84
+ if (lengthSquared <= EPSILON)
85
+ return [start[0], start[1]];
86
+ const t = Math.max(0, Math.min(1, ((point[0] - start[0]) * dx + (point[1] - start[1]) * dz) / lengthSquared));
87
+ return [start[0] + dx * t, start[1] + dz * t];
88
+ }
89
+ function segmentIntersection(firstStart, firstEnd, secondStart, secondEnd) {
90
+ const firstDx = firstEnd[0] - firstStart[0];
91
+ const firstDz = firstEnd[1] - firstStart[1];
92
+ const secondDx = secondEnd[0] - secondStart[0];
93
+ const secondDz = secondEnd[1] - secondStart[1];
94
+ const denominator = firstDx * secondDz - firstDz * secondDx;
95
+ if (Math.abs(denominator) <= EPSILON)
96
+ return null;
97
+ const offsetX = secondStart[0] - firstStart[0];
98
+ const offsetZ = secondStart[1] - firstStart[1];
99
+ const firstT = (offsetX * secondDz - offsetZ * secondDx) / denominator;
100
+ const secondT = (offsetX * firstDz - offsetZ * firstDx) / denominator;
101
+ if (firstT < -EPSILON || firstT > 1 + EPSILON || secondT < -EPSILON || secondT > 1 + EPSILON) {
102
+ return null;
103
+ }
104
+ return [firstStart[0] + firstDx * firstT, firstStart[1] + firstDz * firstT];
105
+ }
@@ -0,0 +1,4 @@
1
+ import type { NodeDefinition } from '@pascal-app/core';
2
+ import { StructuralGridNode } from './schema';
3
+ export declare const structuralGridDefinition: NodeDefinition<typeof StructuralGridNode>;
4
+ //# sourceMappingURL=definition.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/structural-grid/definition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAGtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAE7C,eAAO,MAAM,wBAAwB,EAAE,cAAc,CAAC,OAAO,kBAAkB,CAsD9E,CAAA"}
@@ -0,0 +1,51 @@
1
+ import { buildStructuralGridFloorplan } from './floorplan';
2
+ import { StructuralGridNode } from './schema';
3
+ export const structuralGridDefinition = {
4
+ kind: 'structural-grid',
5
+ bake: 'strip',
6
+ schemaVersion: 1,
7
+ schema: StructuralGridNode,
8
+ category: 'structure',
9
+ extensions: {
10
+ 'pascal:editor/floorplan': {
11
+ tool: () => import('./floorplan-tool'),
12
+ availableModes: ['expert'],
13
+ preferredView: '2d',
14
+ },
15
+ },
16
+ snapProfile: 'structural',
17
+ defaults: () => ({
18
+ object: 'node',
19
+ parentId: null,
20
+ visible: true,
21
+ metadata: {},
22
+ start: [0, 0],
23
+ end: [0, 5],
24
+ label: '1',
25
+ showStartBubble: true,
26
+ showEndBubble: true,
27
+ }),
28
+ capabilities: {
29
+ selectable: { hitVolume: 'bbox' },
30
+ deletable: true,
31
+ presettable: false,
32
+ },
33
+ dirtyTracking: false,
34
+ floorplan: buildStructuralGridFloorplan,
35
+ toolHints: [
36
+ { key: 'Left click', label: 'Start grid axis' },
37
+ { key: 'Left click', label: 'Finish grid axis' },
38
+ { key: 'Alt', label: 'Bypass snapping' },
39
+ { key: 'Esc', label: 'Cancel' },
40
+ ],
41
+ presentation: {
42
+ label: 'Structural Grid',
43
+ description: 'Persistent construction grid axis with identification bubbles.',
44
+ icon: { kind: 'url', src: '/icons/structural-grid.webp' },
45
+ paletteSection: 'structure',
46
+ paletteOrder: 72,
47
+ },
48
+ mcp: {
49
+ description: 'A floor-plan structural datum axis defined by two level-local points and a grid identifier.',
50
+ },
51
+ };
@@ -0,0 +1,16 @@
1
+ import { type AnyNode } from '@pascal-app/core';
2
+ import { type FloorplanToolContext } from '@pascal-app/editor';
3
+ type PlanPoint = [number, number];
4
+ export type StructuralGridLabelFamily = 'numeric' | 'alphabetic';
5
+ export declare function shouldConsumeStructuralGridPointerEvent(event: {
6
+ type: string;
7
+ button: number;
8
+ buttons: number;
9
+ }): boolean;
10
+ export declare function structuralGridLabelFamily(start: PlanPoint, end: PlanPoint): StructuralGridLabelFamily;
11
+ export declare function alphabeticGridLabel(index: number): string;
12
+ export declare function nextStructuralGridLabel(nodes: Readonly<Record<string, AnyNode>>, levelId: string, start: PlanPoint, end: PlanPoint): string;
13
+ export declare function snapStructuralGridAngle(start: PlanPoint, point: PlanPoint): PlanPoint;
14
+ export declare function FloorplanStructuralGridToolLayer({ activeLevelId, finishTool, gridSnapStep, sceneApi, selectNode, }: FloorplanToolContext): import("react").JSX.Element | null;
15
+ export default FloorplanStructuralGridToolLayer;
16
+ //# sourceMappingURL=floorplan-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"floorplan-tool.d.ts","sourceRoot":"","sources":["../../src/structural-grid/floorplan-tool.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,OAAO,EAIb,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAEL,KAAK,oBAAoB,EAS1B,MAAM,oBAAoB,CAAA;AAQ3B,KAAK,SAAS,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AACjC,MAAM,MAAM,yBAAyB,GAAG,SAAS,GAAG,YAAY,CAAA;AAEhE,wBAAgB,uCAAuC,CAAC,KAAK,EAAE;IAC7D,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;CAChB,GAAG,OAAO,CAGV;AAaD,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,SAAS,EAChB,GAAG,EAAE,SAAS,GACb,yBAAyB,CAE3B;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQzD;AAED,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,SAAS,EAChB,GAAG,EAAE,SAAS,GACb,MAAM,CAiBR;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,GAAG,SAAS,CAOrF;AAED,wBAAgB,gCAAgC,CAAC,EAC/C,aAAa,EACb,UAAU,EACV,YAAY,EACZ,QAAQ,EACR,UAAU,GACX,EAAE,oBAAoB,sCA4MtB;AAED,eAAe,gCAAgC,CAAA"}
@@ -0,0 +1,183 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { StructuralGridNode, } from '@pascal-app/core';
4
+ import { clearSurfacePlanSnapFeedback, isAngleSnapActive, isGridSnapActive, isMagneticSnapActive, markToolCancelConsumed, resolveSurfacePlanPointSnap, triggerSFX, useFloorplanRender, useInteractionScope, } from '@pascal-app/editor';
5
+ import { useCallback, useEffect, useRef, useState } from 'react';
6
+ const MIN_GRID_LENGTH = 0.01;
7
+ const GRID_BUBBLE_RADIUS = 0.22;
8
+ const GRID_LABEL_SIZE = 0.18;
9
+ const ANGLE_INCREMENT = Math.PI / 4;
10
+ export function shouldConsumeStructuralGridPointerEvent(event) {
11
+ if (event.type === 'pointerdown')
12
+ return event.button === 0;
13
+ return (event.buttons & 0b110) === 0;
14
+ }
15
+ function snap(value, step) {
16
+ return step > 0 ? Math.round(value / step) * step : value;
17
+ }
18
+ function clientToPlanPoint(group, clientX, clientY) {
19
+ const matrix = group.getScreenCTM();
20
+ if (!matrix)
21
+ return null;
22
+ const local = new DOMPoint(clientX, clientY).matrixTransform(matrix.inverse());
23
+ return [local.x, local.y];
24
+ }
25
+ export function structuralGridLabelFamily(start, end) {
26
+ return Math.abs(end[1] - start[1]) >= Math.abs(end[0] - start[0]) ? 'numeric' : 'alphabetic';
27
+ }
28
+ export function alphabeticGridLabel(index) {
29
+ let value = Math.max(0, Math.floor(index));
30
+ let label = '';
31
+ do {
32
+ label = String.fromCharCode(65 + (value % 26)) + label;
33
+ value = Math.floor(value / 26) - 1;
34
+ } while (value >= 0);
35
+ return label;
36
+ }
37
+ export function nextStructuralGridLabel(nodes, levelId, start, end) {
38
+ const family = structuralGridLabelFamily(start, end);
39
+ const used = new Set(Object.values(nodes)
40
+ .filter((node) => node.type === 'structural-grid' &&
41
+ node.parentId === levelId &&
42
+ structuralGridLabelFamily(node.start, node.end) === family)
43
+ .map((node) => node.label.toUpperCase()));
44
+ for (let index = 0;; index += 1) {
45
+ const candidate = family === 'numeric' ? String(index + 1) : alphabeticGridLabel(index);
46
+ if (!used.has(candidate))
47
+ return candidate;
48
+ }
49
+ }
50
+ export function snapStructuralGridAngle(start, point) {
51
+ const dx = point[0] - start[0];
52
+ const dz = point[1] - start[1];
53
+ const length = Math.hypot(dx, dz);
54
+ if (length < MIN_GRID_LENGTH)
55
+ return point;
56
+ const angle = Math.round(Math.atan2(dz, dx) / ANGLE_INCREMENT) * ANGLE_INCREMENT;
57
+ return [start[0] + Math.cos(angle) * length, start[1] + Math.sin(angle) * length];
58
+ }
59
+ export function FloorplanStructuralGridToolLayer({ activeLevelId, finishTool, gridSnapStep, sceneApi, selectNode, }) {
60
+ const groupRef = useRef(null);
61
+ const startRef = useRef(null);
62
+ const [start, setStart] = useState(null);
63
+ const [hover, setHover] = useState(null);
64
+ const renderContext = useFloorplanRender();
65
+ useEffect(() => {
66
+ useInteractionScope.getState().begin({ kind: 'drafting', tool: 'structural-grid' });
67
+ return () => useInteractionScope
68
+ .getState()
69
+ .endIf((scope) => scope.kind === 'drafting' && scope.tool === 'structural-grid');
70
+ }, []);
71
+ const updateStart = useCallback((point) => {
72
+ startRef.current = point;
73
+ setStart(point);
74
+ }, []);
75
+ useEffect(() => {
76
+ updateStart(null);
77
+ setHover(null);
78
+ const group = groupRef.current;
79
+ const svg = group?.ownerSVGElement;
80
+ if (!(activeLevelId && group && svg))
81
+ return;
82
+ const consume = (event) => {
83
+ event.preventDefault();
84
+ event.stopPropagation();
85
+ event.stopImmediatePropagation();
86
+ };
87
+ const resolveEvent = (event) => {
88
+ const raw = clientToPlanPoint(group, event.clientX, event.clientY);
89
+ if (!raw)
90
+ return null;
91
+ const anglePoint = startRef.current && !event.altKey && isAngleSnapActive()
92
+ ? snapStructuralGridAngle(startRef.current, raw)
93
+ : raw;
94
+ const step = !event.altKey && isGridSnapActive() ? gridSnapStep : 0;
95
+ const fallback = [snap(anglePoint[0], step), snap(anglePoint[1], step)];
96
+ const snapped = resolveSurfacePlanPointSnap({
97
+ rawPoint: anglePoint,
98
+ fallbackPoint: fallback,
99
+ levelId: activeLevelId,
100
+ magnetic: !event.altKey && isMagneticSnapActive(),
101
+ align: isMagneticSnapActive(),
102
+ });
103
+ return snapped.point;
104
+ };
105
+ const onPointerDown = (event) => {
106
+ if (shouldConsumeStructuralGridPointerEvent(event))
107
+ consume(event);
108
+ };
109
+ const onPointerMove = (event) => {
110
+ if (shouldConsumeStructuralGridPointerEvent(event))
111
+ consume(event);
112
+ setHover(resolveEvent(event));
113
+ };
114
+ const onPointerLeave = () => {
115
+ clearSurfacePlanSnapFeedback();
116
+ setHover(null);
117
+ };
118
+ const onClick = (event) => {
119
+ if (event.button !== 0)
120
+ return;
121
+ consume(event);
122
+ const point = resolveEvent(event);
123
+ if (!point)
124
+ return;
125
+ const currentStart = startRef.current;
126
+ if (!currentStart) {
127
+ updateStart(point);
128
+ triggerSFX('sfx:grid-snap');
129
+ return;
130
+ }
131
+ if (Math.hypot(point[0] - currentStart[0], point[1] - currentStart[1]) < MIN_GRID_LENGTH) {
132
+ return;
133
+ }
134
+ const label = nextStructuralGridLabel(sceneApi.nodes(), activeLevelId, currentStart, point);
135
+ const node = StructuralGridNode.parse({
136
+ name: `Grid ${label}`,
137
+ start: currentStart,
138
+ end: point,
139
+ label,
140
+ });
141
+ sceneApi.upsert(node, activeLevelId);
142
+ selectNode(node.id);
143
+ triggerSFX('sfx:structure-build');
144
+ updateStart(null);
145
+ };
146
+ const onKeyDown = (event) => {
147
+ if (event.key !== 'Escape')
148
+ return;
149
+ event.preventDefault();
150
+ event.stopImmediatePropagation();
151
+ markToolCancelConsumed();
152
+ if (startRef.current) {
153
+ updateStart(null);
154
+ return;
155
+ }
156
+ finishTool();
157
+ };
158
+ const onBlur = () => clearSurfacePlanSnapFeedback();
159
+ svg.addEventListener('pointerdown', onPointerDown, true);
160
+ svg.addEventListener('pointermove', onPointerMove, true);
161
+ svg.addEventListener('pointerleave', onPointerLeave, true);
162
+ svg.addEventListener('click', onClick, true);
163
+ window.addEventListener('keydown', onKeyDown, true);
164
+ window.addEventListener('blur', onBlur);
165
+ return () => {
166
+ clearSurfacePlanSnapFeedback();
167
+ svg.removeEventListener('pointerdown', onPointerDown, true);
168
+ svg.removeEventListener('pointermove', onPointerMove, true);
169
+ svg.removeEventListener('pointerleave', onPointerLeave, true);
170
+ svg.removeEventListener('click', onClick, true);
171
+ window.removeEventListener('keydown', onKeyDown, true);
172
+ window.removeEventListener('blur', onBlur);
173
+ };
174
+ }, [activeLevelId, finishTool, gridSnapStep, sceneApi, selectNode, updateStart]);
175
+ if (!activeLevelId)
176
+ return null;
177
+ const unitsPerPixel = renderContext?.unitsPerPixel ?? 0.01;
178
+ const reticleRadius = 9 * unitsPerPixel;
179
+ const label = start && hover ? nextStructuralGridLabel(sceneApi.nodes(), activeLevelId, start, hover) : null;
180
+ const renderBubble = (point, key) => (_jsxs("g", { pointerEvents: "none", children: [_jsx("circle", { cx: point[0], cy: point[1], fill: "#ffffff", r: GRID_BUBBLE_RADIUS, stroke: "#0ea5e9", strokeWidth: 1.5, vectorEffect: "non-scaling-stroke" }), _jsx("g", { transform: `translate(${point[0]} ${point[1]}) rotate(${-(renderContext?.sceneRotationDeg ?? 0)})`, children: _jsx("text", { dominantBaseline: "middle", fill: "#0369a1", fontSize: GRID_LABEL_SIZE, fontWeight: 700, textAnchor: "middle", x: 0, y: 0, children: label }) })] }, key));
181
+ return (_jsxs("g", { ref: groupRef, children: [start && hover && label ? (_jsxs("g", { pointerEvents: "none", children: [_jsx("line", { stroke: "#0ea5e9", strokeDasharray: "10 4 2 4", strokeWidth: 1.5, vectorEffect: "non-scaling-stroke", x1: start[0], x2: hover[0], y1: start[1], y2: hover[1] }), renderBubble(start, 'start'), renderBubble(hover, 'end')] })) : null, hover ? (_jsxs("g", { pointerEvents: "none", children: [_jsx("circle", { cx: hover[0], cy: hover[1], fill: "none", r: reticleRadius, stroke: "#0ea5e9", strokeWidth: 2, vectorEffect: "non-scaling-stroke" }), _jsx("line", { stroke: "#0ea5e9", strokeWidth: 1.5, vectorEffect: "non-scaling-stroke", x1: hover[0] - reticleRadius * 1.4, x2: hover[0] + reticleRadius * 1.4, y1: hover[1], y2: hover[1] }), _jsx("line", { stroke: "#0ea5e9", strokeWidth: 1.5, vectorEffect: "non-scaling-stroke", x1: hover[0], x2: hover[0], y1: hover[1] - reticleRadius * 1.4, y2: hover[1] + reticleRadius * 1.4 })] })) : null] }));
182
+ }
183
+ export default FloorplanStructuralGridToolLayer;
@@ -0,0 +1,3 @@
1
+ import type { FloorplanGeometry, GeometryContext, StructuralGridNode } from '@pascal-app/core';
2
+ export declare function buildStructuralGridFloorplan(node: StructuralGridNode, ctx: GeometryContext): FloorplanGeometry | null;
3
+ //# sourceMappingURL=floorplan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"floorplan.d.ts","sourceRoot":"","sources":["../../src/structural-grid/floorplan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EAEjB,eAAe,EACf,kBAAkB,EACnB,MAAM,kBAAkB,CAAA;AAoCzB,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,kBAAkB,EACxB,GAAG,EAAE,eAAe,GACnB,iBAAiB,GAAG,IAAI,CA+B1B"}
@@ -0,0 +1,61 @@
1
+ import { withFloorplanGeometryMetadata } from '@pascal-app/editor';
2
+ const GRID_BUBBLE_RADIUS = 0.22;
3
+ const GRID_LABEL_SIZE = 0.18;
4
+ function bubble(point, label, stroke) {
5
+ return {
6
+ kind: 'group',
7
+ children: [
8
+ {
9
+ kind: 'circle',
10
+ cx: point[0],
11
+ cy: point[1],
12
+ r: GRID_BUBBLE_RADIUS,
13
+ fill: '#ffffff',
14
+ stroke,
15
+ strokeWidth: 1.2,
16
+ vectorEffect: 'non-scaling-stroke',
17
+ },
18
+ {
19
+ kind: 'text',
20
+ x: point[0],
21
+ y: point[1],
22
+ text: label,
23
+ fontSize: GRID_LABEL_SIZE,
24
+ fill: stroke,
25
+ fontWeight: 700,
26
+ textAnchor: 'middle',
27
+ dominantBaseline: 'middle',
28
+ upright: true,
29
+ },
30
+ ],
31
+ };
32
+ }
33
+ export function buildStructuralGridFloorplan(node, ctx) {
34
+ const length = Math.hypot(node.end[0] - node.start[0], node.end[1] - node.start[1]);
35
+ if (length < 0.001)
36
+ return null;
37
+ const selected = ctx.viewState?.selected ?? false;
38
+ const highlighted = ctx.viewState?.highlighted ?? false;
39
+ const palette = ctx.viewState?.palette;
40
+ const active = selected || highlighted;
41
+ const stroke = active && palette ? palette.selectedStroke : '#475569';
42
+ const children = [
43
+ {
44
+ kind: 'line',
45
+ x1: node.start[0],
46
+ y1: node.start[1],
47
+ x2: node.end[0],
48
+ y2: node.end[1],
49
+ stroke,
50
+ strokeWidth: active ? 1.6 : 1,
51
+ strokeDasharray: '10 4 2 4',
52
+ vectorEffect: 'non-scaling-stroke',
53
+ pointerEvents: 'stroke',
54
+ },
55
+ ];
56
+ if (node.showStartBubble)
57
+ children.push(bubble(node.start, node.label, stroke));
58
+ if (node.showEndBubble)
59
+ children.push(bubble(node.end, node.label, stroke));
60
+ return withFloorplanGeometryMetadata({ kind: 'group', children }, { annotationRole: 'structural-grid' });
61
+ }
@@ -0,0 +1,2 @@
1
+ export { structuralGridDefinition } from './definition';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/structural-grid/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAA"}
@@ -0,0 +1 @@
1
+ export { structuralGridDefinition } from './definition';
@@ -0,0 +1,2 @@
1
+ export { StructuralGridNode } from '@pascal-app/core';
2
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/structural-grid/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA"}
@@ -0,0 +1 @@
1
+ export { StructuralGridNode } from '@pascal-app/core';
@@ -0,0 +1,32 @@
1
+ import { type AnyNode, type FloorplanGeometry, type FloorplanPoint, type GeometryContext, type WallNode } from '@pascal-app/core';
2
+ import { type ConstructionDimensionDrawingStandard } from '../shared/construction-dimension-standards';
3
+ import { type ConstructionLengthProfile, type ConstructionLinearUnit } from '../shared/construction-length';
4
+ export { formatConstructionLength } from '../shared/construction-length';
5
+ export type ConstructionDimensionTier = 'opening-widths' | 'openings' | 'partitions' | 'structure' | 'jogs' | 'overall' | 'structural-overall' | 'interior' | 'interior-overall';
6
+ export type PlannedConstructionDimension = {
7
+ tier: ConstructionDimensionTier;
8
+ start: FloorplanPoint;
9
+ end: FloorplanPoint;
10
+ dimensionStart?: FloorplanPoint;
11
+ dimensionEnd?: FloorplanPoint;
12
+ offsetNormal: FloorplanPoint;
13
+ offsetDistance: number;
14
+ textPrefix?: string;
15
+ };
16
+ export type WallConstructionDimensionPlan = ReadonlyMap<string, readonly PlannedConstructionDimension[]>;
17
+ export declare function buildLevelWallConstructionDimensionPlan(walls: ReadonlyArray<WallNode>, nodes: Record<string, AnyNode>, standard?: ConstructionDimensionDrawingStandard): WallConstructionDimensionPlan;
18
+ export declare function renderPlannedConstructionDimensions(planned: readonly PlannedConstructionDimension[], unit: ConstructionLinearUnit, stroke?: string, profile?: ConstructionLengthProfile, standard?: ConstructionDimensionDrawingStandard): FloorplanGeometry[];
19
+ export declare function buildCurvedWallConstructionDimensions(wall: WallNode, { unit, stroke, profile, standard, siblings, }: {
20
+ unit: ConstructionLinearUnit;
21
+ stroke?: string;
22
+ profile?: ConstructionLengthProfile;
23
+ standard?: ConstructionDimensionDrawingStandard;
24
+ siblings?: ReadonlyArray<WallNode>;
25
+ }): FloorplanGeometry[];
26
+ export declare function buildWallConstructionDimensions(wall: WallNode, ctx: GeometryContext, { unit, stroke, profile, standard, }: {
27
+ unit: ConstructionLinearUnit;
28
+ stroke?: string;
29
+ profile?: ConstructionLengthProfile;
30
+ standard?: ConstructionDimensionDrawingStandard;
31
+ }): FloorplanGeometry[];
32
+ //# sourceMappingURL=construction-dimensions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"construction-dimensions.d.ts","sourceRoot":"","sources":["../../src/wall/construction-dimensions.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EAGZ,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,eAAe,EAMpB,KAAK,QAAQ,EAEd,MAAM,kBAAkB,CAAA;AAEzB,OAAO,EACL,KAAK,oCAAoC,EAE1C,MAAM,4CAA4C,CAAA;AACnD,OAAO,EACL,KAAK,yBAAyB,EAC9B,KAAK,sBAAsB,EAE5B,MAAM,+BAA+B,CAAA;AAItC,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAA;AAUxE,MAAM,MAAM,yBAAyB,GACjC,gBAAgB,GAChB,UAAU,GACV,YAAY,GACZ,WAAW,GACX,MAAM,GACN,SAAS,GACT,oBAAoB,GACpB,UAAU,GACV,kBAAkB,CAAA;AAYtB,MAAM,MAAM,4BAA4B,GAAG;IACzC,IAAI,EAAE,yBAAyB,CAAA;IAC/B,KAAK,EAAE,cAAc,CAAA;IACrB,GAAG,EAAE,cAAc,CAAA;IACnB,cAAc,CAAC,EAAE,cAAc,CAAA;IAC/B,YAAY,CAAC,EAAE,cAAc,CAAA;IAC7B,YAAY,EAAE,cAAc,CAAA;IAC5B,cAAc,EAAE,MAAM,CAAA;IACtB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,6BAA6B,GAAG,WAAW,CACrD,MAAM,EACN,SAAS,4BAA4B,EAAE,CACxC,CAAA;AAiBD,wBAAgB,uCAAuC,CACrD,KAAK,EAAE,aAAa,CAAC,QAAQ,CAAC,EAC9B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,QAAQ,GAAE,oCAA8E,GACvF,6BAA6B,CA6L/B;AAmGD,wBAAgB,mCAAmC,CACjD,OAAO,EAAE,SAAS,4BAA4B,EAAE,EAChD,IAAI,EAAE,sBAAsB,EAC5B,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,GAAE,yBAAoC,EAC7C,QAAQ,GAAE,oCAA8E,GACvF,iBAAiB,EAAE,CA2BrB;AAmCD,wBAAgB,qCAAqC,CACnD,IAAI,EAAE,QAAQ,EACd,EACE,IAAI,EACJ,MAAM,EACN,OAAkB,EAClB,QAAkD,EAClD,QAAa,GACd,EAAE;IACD,IAAI,EAAE,sBAAsB,CAAA;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,yBAAyB,CAAA;IACnC,QAAQ,CAAC,EAAE,oCAAoC,CAAA;IAC/C,QAAQ,CAAC,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAA;CACnC,GACA,iBAAiB,EAAE,CA+CrB;AAED,wBAAgB,+BAA+B,CAC7C,IAAI,EAAE,QAAQ,EACd,GAAG,EAAE,eAAe,EACpB,EACE,IAAI,EACJ,MAAM,EACN,OAAkB,EAClB,QAAkD,GACnD,EAAE;IACD,IAAI,EAAE,sBAAsB,CAAA;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,yBAAyB,CAAA;IACnC,QAAQ,CAAC,EAAE,oCAAoC,CAAA;CAChD,GACA,iBAAiB,EAAE,CAsErB"}