@pascal-app/nodes 1.0.7 → 1.1.0

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 (915) hide show
  1. package/README.md +42 -8
  2. package/dist/agent-operations/index.d.ts +5 -0
  3. package/dist/agent-operations/index.d.ts.map +1 -1
  4. package/dist/agent-operations/index.js +10 -0
  5. package/dist/agent-tools/index.d.ts +195 -0
  6. package/dist/agent-tools/index.d.ts.map +1 -1
  7. package/dist/agent-tools/index.js +82 -2
  8. package/dist/beam/definition.d.ts +64 -13
  9. package/dist/beam/definition.d.ts.map +1 -1
  10. package/dist/beam/definition.edit.d.ts +4 -0
  11. package/dist/beam/definition.edit.d.ts.map +1 -0
  12. package/dist/beam/definition.edit.js +133 -0
  13. package/dist/beam/definition.js +4 -173
  14. package/dist/beam/definition.render.d.ts +6 -0
  15. package/dist/beam/definition.render.d.ts.map +1 -0
  16. package/dist/beam/definition.render.js +32 -0
  17. package/dist/beam/floorplan.d.ts.map +1 -1
  18. package/dist/beam/floorplan.js +2 -2
  19. package/dist/beam/panel.d.ts.map +1 -1
  20. package/dist/beam/panel.js +2 -2
  21. package/dist/beam/tool.d.ts.map +1 -1
  22. package/dist/beam/tool.js +2 -2
  23. package/dist/block/definition.d.ts +67 -7
  24. package/dist/block/definition.d.ts.map +1 -1
  25. package/dist/block/definition.edit.d.ts +4 -0
  26. package/dist/block/definition.edit.d.ts.map +1 -0
  27. package/dist/block/definition.edit.js +28 -0
  28. package/dist/block/definition.js +5 -144
  29. package/dist/block/definition.render.d.ts +11 -0
  30. package/dist/block/definition.render.d.ts.map +1 -0
  31. package/dist/block/definition.render.js +120 -0
  32. package/dist/box-vent/definition.d.ts +103 -29
  33. package/dist/box-vent/definition.d.ts.map +1 -1
  34. package/dist/box-vent/definition.edit.d.ts +4 -0
  35. package/dist/box-vent/definition.edit.d.ts.map +1 -0
  36. package/dist/box-vent/definition.edit.js +151 -0
  37. package/dist/box-vent/definition.js +4 -212
  38. package/dist/box-vent/definition.render.d.ts +6 -0
  39. package/dist/box-vent/definition.render.d.ts.map +1 -0
  40. package/dist/box-vent/definition.render.js +40 -0
  41. package/dist/box-vent/move-tool.d.ts.map +1 -1
  42. package/dist/box-vent/move-tool.js +6 -5
  43. package/dist/building/definition.d.ts +49 -11
  44. package/dist/building/definition.d.ts.map +1 -1
  45. package/dist/building/definition.edit.d.ts +4 -0
  46. package/dist/building/definition.edit.d.ts.map +1 -0
  47. package/dist/building/definition.edit.js +10 -0
  48. package/dist/building/definition.js +4 -54
  49. package/dist/building/definition.render.d.ts +6 -0
  50. package/dist/building/definition.render.d.ts.map +1 -0
  51. package/dist/building/definition.render.js +38 -0
  52. package/dist/builtin-definitions.d.ts +9784 -0
  53. package/dist/builtin-definitions.d.ts.map +1 -0
  54. package/dist/builtin-definitions.js +113 -0
  55. package/dist/builtin-edit-contributions.d.ts +9608 -0
  56. package/dist/builtin-edit-contributions.d.ts.map +1 -0
  57. package/dist/builtin-edit-contributions.js +112 -0
  58. package/dist/builtin-plugin-metadata.d.ts +5 -0
  59. package/dist/builtin-plugin-metadata.d.ts.map +1 -0
  60. package/dist/builtin-plugin-metadata.js +1 -0
  61. package/dist/cabinet/definition.d.ts +497 -25
  62. package/dist/cabinet/definition.d.ts.map +1 -1
  63. package/dist/cabinet/definition.edit.d.ts +5 -0
  64. package/dist/cabinet/definition.edit.d.ts.map +1 -0
  65. package/dist/cabinet/definition.edit.js +1375 -0
  66. package/dist/cabinet/definition.js +6 -2115
  67. package/dist/cabinet/definition.render.d.ts +66 -0
  68. package/dist/cabinet/definition.render.d.ts.map +1 -0
  69. package/dist/cabinet/definition.render.js +751 -0
  70. package/dist/cabinet/kitchen-module-actions.d.ts.map +1 -1
  71. package/dist/cabinet/kitchen-module-actions.js +2 -2
  72. package/dist/cabinet/placement-dimensions.d.ts +36 -2
  73. package/dist/cabinet/placement-dimensions.d.ts.map +1 -1
  74. package/dist/cabinet/placement-dimensions.js +68 -2
  75. package/dist/cabinet/system.js +1 -1
  76. package/dist/cabinet/tool.d.ts.map +1 -1
  77. package/dist/cabinet/tool.js +268 -15
  78. package/dist/cabinet/wall-snap.d.ts +5 -1
  79. package/dist/cabinet/wall-snap.d.ts.map +1 -1
  80. package/dist/cabinet/wall-snap.js +2 -2
  81. package/dist/ceiling/definition.d.ts +152 -19
  82. package/dist/ceiling/definition.d.ts.map +1 -1
  83. package/dist/ceiling/definition.edit.d.ts +4 -0
  84. package/dist/ceiling/definition.edit.d.ts.map +1 -0
  85. package/dist/ceiling/definition.edit.js +125 -0
  86. package/dist/ceiling/definition.js +4 -207
  87. package/dist/ceiling/definition.render.d.ts +6 -0
  88. package/dist/ceiling/definition.render.d.ts.map +1 -0
  89. package/dist/ceiling/definition.render.js +71 -0
  90. package/dist/ceiling/panel.js +2 -2
  91. package/dist/chimney/definition.d.ts +186 -17
  92. package/dist/chimney/definition.d.ts.map +1 -1
  93. package/dist/chimney/definition.edit.d.ts +4 -0
  94. package/dist/chimney/definition.edit.d.ts.map +1 -0
  95. package/dist/chimney/definition.edit.js +219 -0
  96. package/dist/chimney/definition.js +4 -390
  97. package/dist/chimney/definition.render.d.ts +6 -0
  98. package/dist/chimney/definition.render.d.ts.map +1 -0
  99. package/dist/chimney/definition.render.js +59 -0
  100. package/dist/chimney/move-tool.d.ts.map +1 -1
  101. package/dist/chimney/move-tool.js +6 -4
  102. package/dist/column/__bench__/geometry.d.ts +2 -0
  103. package/dist/column/__bench__/geometry.d.ts.map +1 -0
  104. package/dist/column/__bench__/geometry.js +36 -0
  105. package/dist/column/bounds.d.ts +7 -0
  106. package/dist/column/bounds.d.ts.map +1 -0
  107. package/dist/column/bounds.js +127 -0
  108. package/dist/column/definition.d.ts +372 -20
  109. package/dist/column/definition.d.ts.map +1 -1
  110. package/dist/column/definition.edit.d.ts +4 -0
  111. package/dist/column/definition.edit.d.ts.map +1 -0
  112. package/dist/column/definition.edit.js +323 -0
  113. package/dist/column/definition.js +4 -439
  114. package/dist/column/definition.render.d.ts +6 -0
  115. package/dist/column/definition.render.d.ts.map +1 -0
  116. package/dist/column/definition.render.js +81 -0
  117. package/dist/column/edit-policy.d.ts +5 -0
  118. package/dist/column/edit-policy.d.ts.map +1 -0
  119. package/dist/column/edit-policy.js +43 -0
  120. package/dist/column/floorplan-affordances.d.ts.map +1 -1
  121. package/dist/column/floorplan-affordances.js +2 -0
  122. package/dist/column/floorplan-move.d.ts.map +1 -1
  123. package/dist/column/floorplan-move.js +5 -1
  124. package/dist/column/floorplan.d.ts.map +1 -1
  125. package/dist/column/floorplan.js +33 -91
  126. package/dist/column/geometry.d.ts +13 -0
  127. package/dist/column/geometry.d.ts.map +1 -0
  128. package/dist/column/geometry.js +294 -0
  129. package/dist/column/hosted-resize.d.ts +3 -2
  130. package/dist/column/hosted-resize.d.ts.map +1 -1
  131. package/dist/column/hosted-resize.js +7 -1
  132. package/dist/column/inspector-highlight.d.ts +29 -0
  133. package/dist/column/inspector-highlight.d.ts.map +1 -0
  134. package/dist/column/inspector-highlight.js +166 -0
  135. package/dist/column/paint.d.ts.map +1 -1
  136. package/dist/column/paint.js +12 -2
  137. package/dist/column/panel.d.ts.map +1 -1
  138. package/dist/column/panel.js +451 -363
  139. package/dist/column/parametrics.js +1 -1
  140. package/dist/column/post-section.d.ts.map +1 -1
  141. package/dist/column/post-section.js +2 -2
  142. package/dist/column/preset-gallery.d.ts +8 -0
  143. package/dist/column/preset-gallery.d.ts.map +1 -0
  144. package/dist/column/preset-gallery.js +98 -0
  145. package/dist/column/presets.d.ts +16 -0
  146. package/dist/column/presets.d.ts.map +1 -0
  147. package/dist/column/presets.js +96 -0
  148. package/dist/column/property-preview.d.ts +8 -0
  149. package/dist/column/property-preview.d.ts.map +1 -0
  150. package/dist/column/property-preview.js +50 -0
  151. package/dist/column/renderer.d.ts +13 -1
  152. package/dist/column/renderer.d.ts.map +1 -1
  153. package/dist/column/renderer.js +174 -198
  154. package/dist/column/shape.d.ts +4 -4
  155. package/dist/column/shape.d.ts.map +1 -1
  156. package/dist/column/shape.js +1 -1
  157. package/dist/column/surface.d.ts.map +1 -1
  158. package/dist/column/surface.js +15 -8
  159. package/dist/column/tool.d.ts.map +1 -1
  160. package/dist/column/tool.js +21 -10
  161. package/dist/construction-dimension/definition.d.ts +129 -3
  162. package/dist/construction-dimension/definition.d.ts.map +1 -1
  163. package/dist/construction-dimension/definition.edit.d.ts +4 -0
  164. package/dist/construction-dimension/definition.edit.d.ts.map +1 -0
  165. package/dist/construction-dimension/definition.edit.js +32 -0
  166. package/dist/construction-dimension/definition.js +4 -83
  167. package/dist/construction-dimension/definition.render.d.ts +6 -0
  168. package/dist/construction-dimension/definition.render.d.ts.map +1 -0
  169. package/dist/construction-dimension/definition.render.js +53 -0
  170. package/dist/construction-dimension/floorplan-tool.d.ts.map +1 -1
  171. package/dist/construction-dimension/floorplan-tool.js +2 -2
  172. package/dist/cupola/definition.d.ts +95 -10
  173. package/dist/cupola/definition.d.ts.map +1 -1
  174. package/dist/cupola/definition.edit.d.ts +4 -0
  175. package/dist/cupola/definition.edit.d.ts.map +1 -0
  176. package/dist/cupola/definition.edit.js +103 -0
  177. package/dist/cupola/definition.js +4 -148
  178. package/dist/cupola/definition.render.d.ts +6 -0
  179. package/dist/cupola/definition.render.d.ts.map +1 -0
  180. package/dist/cupola/definition.render.js +43 -0
  181. package/dist/cupola/move-tool.d.ts.map +1 -1
  182. package/dist/cupola/move-tool.js +6 -5
  183. package/dist/definition-contributions.d.ts +14 -0
  184. package/dist/definition-contributions.d.ts.map +1 -0
  185. package/dist/definition-contributions.js +8 -0
  186. package/dist/door/definition.d.ts +350 -22
  187. package/dist/door/definition.d.ts.map +1 -1
  188. package/dist/door/definition.edit.d.ts +4 -0
  189. package/dist/door/definition.edit.d.ts.map +1 -0
  190. package/dist/door/definition.edit.js +246 -0
  191. package/dist/door/definition.js +4 -341
  192. package/dist/door/definition.render.d.ts +6 -0
  193. package/dist/door/definition.render.d.ts.map +1 -0
  194. package/dist/door/definition.render.js +88 -0
  195. package/dist/door/floorplan-move.d.ts.map +1 -1
  196. package/dist/door/floorplan-move.js +11 -8
  197. package/dist/door/mechanism.d.ts.map +1 -1
  198. package/dist/door/mechanism.js +1 -2
  199. package/dist/door/move-tool.d.ts.map +1 -1
  200. package/dist/door/move-tool.js +25 -23
  201. package/dist/door/tool.d.ts.map +1 -1
  202. package/dist/door/tool.js +2 -1
  203. package/dist/dormer/definition.d.ts +240 -11
  204. package/dist/dormer/definition.d.ts.map +1 -1
  205. package/dist/dormer/definition.edit.d.ts +4 -0
  206. package/dist/dormer/definition.edit.d.ts.map +1 -0
  207. package/dist/dormer/definition.edit.js +214 -0
  208. package/dist/dormer/definition.js +4 -319
  209. package/dist/dormer/definition.render.d.ts +6 -0
  210. package/dist/dormer/definition.render.d.ts.map +1 -0
  211. package/dist/dormer/definition.render.js +52 -0
  212. package/dist/downspout/definition.d.ts +108 -16
  213. package/dist/downspout/definition.d.ts.map +1 -1
  214. package/dist/downspout/definition.edit.d.ts +4 -0
  215. package/dist/downspout/definition.edit.d.ts.map +1 -0
  216. package/dist/downspout/definition.edit.js +134 -0
  217. package/dist/downspout/definition.js +4 -188
  218. package/dist/downspout/definition.render.d.ts +6 -0
  219. package/dist/downspout/definition.render.d.ts.map +1 -0
  220. package/dist/downspout/definition.render.js +46 -0
  221. package/dist/duct-fitting/definition.d.ts +99 -11
  222. package/dist/duct-fitting/definition.d.ts.map +1 -1
  223. package/dist/duct-fitting/definition.edit.d.ts +4 -0
  224. package/dist/duct-fitting/definition.edit.d.ts.map +1 -0
  225. package/dist/duct-fitting/definition.edit.js +49 -0
  226. package/dist/duct-fitting/definition.js +4 -135
  227. package/dist/duct-fitting/definition.render.d.ts +6 -0
  228. package/dist/duct-fitting/definition.render.d.ts.map +1 -0
  229. package/dist/duct-fitting/definition.render.js +82 -0
  230. package/dist/duct-fitting/floorplan.js +1 -1
  231. package/dist/duct-fitting/geometry.js +2 -1
  232. package/dist/duct-fitting/move-tool.d.ts.map +1 -1
  233. package/dist/duct-fitting/move-tool.js +19 -13
  234. package/dist/duct-fitting/selection.d.ts.map +1 -1
  235. package/dist/duct-fitting/selection.js +92 -80
  236. package/dist/duct-segment/continuation.d.ts +2 -2
  237. package/dist/duct-segment/continuation.d.ts.map +1 -1
  238. package/dist/duct-segment/continuation.js +53 -2
  239. package/dist/duct-segment/definition.d.ts +91 -3
  240. package/dist/duct-segment/definition.d.ts.map +1 -1
  241. package/dist/duct-segment/definition.edit.d.ts +4 -0
  242. package/dist/duct-segment/definition.edit.d.ts.map +1 -0
  243. package/dist/duct-segment/definition.edit.js +100 -0
  244. package/dist/duct-segment/definition.js +4 -181
  245. package/dist/duct-segment/definition.render.d.ts +6 -0
  246. package/dist/duct-segment/definition.render.d.ts.map +1 -0
  247. package/dist/duct-segment/definition.render.js +89 -0
  248. package/dist/duct-segment/edit-inspector.d.ts +5 -0
  249. package/dist/duct-segment/edit-inspector.d.ts.map +1 -0
  250. package/dist/duct-segment/edit-inspector.js +163 -0
  251. package/dist/duct-segment/edit-operation.d.ts +17 -0
  252. package/dist/duct-segment/edit-operation.d.ts.map +1 -0
  253. package/dist/duct-segment/edit-operation.js +283 -0
  254. package/dist/duct-segment/floorplan.js +1 -1
  255. package/dist/duct-segment/geometry.d.ts +0 -40
  256. package/dist/duct-segment/geometry.d.ts.map +1 -1
  257. package/dist/duct-segment/geometry.js +2 -77
  258. package/dist/duct-segment/move-tool.d.ts.map +1 -1
  259. package/dist/duct-segment/move-tool.js +34 -35
  260. package/dist/duct-segment/parametrics.d.ts.map +1 -1
  261. package/dist/duct-segment/parametrics.js +2 -35
  262. package/dist/duct-segment/profile.d.ts +42 -0
  263. package/dist/duct-segment/profile.d.ts.map +1 -0
  264. package/dist/duct-segment/profile.js +78 -0
  265. package/dist/duct-segment/selection.d.ts.map +1 -1
  266. package/dist/duct-segment/selection.js +112 -53
  267. package/dist/duct-segment/tool.d.ts.map +1 -1
  268. package/dist/duct-segment/tool.js +103 -27
  269. package/dist/duct-terminal/definition.d.ts +68 -12
  270. package/dist/duct-terminal/definition.d.ts.map +1 -1
  271. package/dist/duct-terminal/definition.edit.d.ts +4 -0
  272. package/dist/duct-terminal/definition.edit.d.ts.map +1 -0
  273. package/dist/duct-terminal/definition.edit.js +14 -0
  274. package/dist/duct-terminal/definition.js +4 -87
  275. package/dist/duct-terminal/definition.render.d.ts +6 -0
  276. package/dist/duct-terminal/definition.render.d.ts.map +1 -0
  277. package/dist/duct-terminal/definition.render.js +66 -0
  278. package/dist/duct-terminal/geometry.d.ts.map +1 -1
  279. package/dist/duct-terminal/geometry.js +2 -1
  280. package/dist/duct-terminal/parametrics.d.ts.map +1 -1
  281. package/dist/duct-terminal/parametrics.js +1 -0
  282. package/dist/duct-terminal/ports.js +1 -1
  283. package/dist/elevator/__bench__/runtime.d.ts +2 -0
  284. package/dist/elevator/__bench__/runtime.d.ts.map +1 -0
  285. package/dist/elevator/__bench__/runtime.js +38 -0
  286. package/dist/elevator/definition.d.ts +117 -10
  287. package/dist/elevator/definition.d.ts.map +1 -1
  288. package/dist/elevator/definition.edit.d.ts +4 -0
  289. package/dist/elevator/definition.edit.d.ts.map +1 -0
  290. package/dist/elevator/definition.edit.js +177 -0
  291. package/dist/elevator/definition.js +4 -258
  292. package/dist/elevator/definition.render.d.ts +11 -0
  293. package/dist/elevator/definition.render.d.ts.map +1 -0
  294. package/dist/elevator/definition.render.js +96 -0
  295. package/dist/elevator/floorplan-affordances.d.ts.map +1 -1
  296. package/dist/elevator/floorplan-affordances.js +11 -9
  297. package/dist/elevator/floorplan.d.ts +19 -0
  298. package/dist/elevator/floorplan.d.ts.map +1 -1
  299. package/dist/elevator/floorplan.js +3 -9
  300. package/dist/elevator/inspection.d.ts +17 -0
  301. package/dist/elevator/inspection.d.ts.map +1 -0
  302. package/dist/elevator/inspection.js +78 -0
  303. package/dist/elevator/panel.d.ts.map +1 -1
  304. package/dist/elevator/panel.js +152 -100
  305. package/dist/elevator/parametrics.d.ts +1 -1
  306. package/dist/elevator/parametrics.d.ts.map +1 -1
  307. package/dist/elevator/parametrics.js +7 -10
  308. package/dist/elevator/presets.d.ts +17 -0
  309. package/dist/elevator/presets.d.ts.map +1 -0
  310. package/dist/elevator/presets.js +52 -0
  311. package/dist/elevator/renderer.d.ts +2 -1
  312. package/dist/elevator/renderer.d.ts.map +1 -1
  313. package/dist/elevator/renderer.edit.d.ts +5 -0
  314. package/dist/elevator/renderer.edit.d.ts.map +1 -0
  315. package/dist/elevator/renderer.edit.js +8 -0
  316. package/dist/elevator/renderer.js +159 -60
  317. package/dist/elevator/tool.d.ts +2 -0
  318. package/dist/elevator/tool.d.ts.map +1 -0
  319. package/dist/elevator/tool.js +250 -0
  320. package/dist/eyebrow-vent/definition.d.ts +97 -11
  321. package/dist/eyebrow-vent/definition.d.ts.map +1 -1
  322. package/dist/eyebrow-vent/definition.edit.d.ts +4 -0
  323. package/dist/eyebrow-vent/definition.edit.d.ts.map +1 -0
  324. package/dist/eyebrow-vent/definition.edit.js +106 -0
  325. package/dist/eyebrow-vent/definition.js +4 -152
  326. package/dist/eyebrow-vent/definition.render.d.ts +6 -0
  327. package/dist/eyebrow-vent/definition.render.d.ts.map +1 -0
  328. package/dist/eyebrow-vent/definition.render.js +43 -0
  329. package/dist/eyebrow-vent/move-tool.d.ts.map +1 -1
  330. package/dist/eyebrow-vent/move-tool.js +6 -5
  331. package/dist/fence/definition.d.ts +186 -17
  332. package/dist/fence/definition.d.ts.map +1 -1
  333. package/dist/fence/definition.edit.d.ts +4 -0
  334. package/dist/fence/definition.edit.d.ts.map +1 -0
  335. package/dist/fence/definition.edit.js +282 -0
  336. package/dist/fence/definition.js +5 -413
  337. package/dist/fence/definition.render.d.ts +8 -0
  338. package/dist/fence/definition.render.d.ts.map +1 -0
  339. package/dist/fence/definition.render.js +124 -0
  340. package/dist/fence/move-endpoint-tool.d.ts.map +1 -1
  341. package/dist/fence/move-endpoint-tool.js +2 -2
  342. package/dist/fence/tool.js +2 -2
  343. package/dist/fence-feature/definition.d.ts +270 -3
  344. package/dist/fence-feature/definition.d.ts.map +1 -1
  345. package/dist/fence-feature/definition.edit.d.ts +5 -0
  346. package/dist/fence-feature/definition.edit.d.ts.map +1 -0
  347. package/dist/fence-feature/definition.edit.js +69 -0
  348. package/dist/fence-feature/definition.js +5 -116
  349. package/dist/fence-feature/definition.render.d.ts +9 -0
  350. package/dist/fence-feature/definition.render.d.ts.map +1 -0
  351. package/dist/fence-feature/definition.render.js +69 -0
  352. package/dist/floor-opening/definition.d.ts +58 -2
  353. package/dist/floor-opening/definition.d.ts.map +1 -1
  354. package/dist/floor-opening/definition.edit.d.ts +4 -0
  355. package/dist/floor-opening/definition.edit.d.ts.map +1 -0
  356. package/dist/floor-opening/definition.edit.js +11 -0
  357. package/dist/floor-opening/definition.js +4 -41
  358. package/dist/floor-opening/definition.render.d.ts +6 -0
  359. package/dist/floor-opening/definition.render.d.ts.map +1 -0
  360. package/dist/floor-opening/definition.render.js +32 -0
  361. package/dist/guide/definition.d.ts +65 -9
  362. package/dist/guide/definition.d.ts.map +1 -1
  363. package/dist/guide/definition.edit.d.ts +4 -0
  364. package/dist/guide/definition.edit.d.ts.map +1 -0
  365. package/dist/guide/definition.edit.js +4 -0
  366. package/dist/guide/definition.js +4 -53
  367. package/dist/guide/definition.render.d.ts +6 -0
  368. package/dist/guide/definition.render.d.ts.map +1 -0
  369. package/dist/guide/definition.render.js +45 -0
  370. package/dist/gutter/definition.d.ts +113 -18
  371. package/dist/gutter/definition.d.ts.map +1 -1
  372. package/dist/gutter/definition.edit.d.ts +4 -0
  373. package/dist/gutter/definition.edit.d.ts.map +1 -0
  374. package/dist/gutter/definition.edit.js +121 -0
  375. package/dist/gutter/definition.js +4 -176
  376. package/dist/gutter/definition.render.d.ts +6 -0
  377. package/dist/gutter/definition.render.d.ts.map +1 -0
  378. package/dist/gutter/definition.render.js +44 -0
  379. package/dist/gutter/move-tool.d.ts.map +1 -1
  380. package/dist/gutter/move-tool.js +5 -4
  381. package/dist/hvac-equipment/definition.d.ts +72 -12
  382. package/dist/hvac-equipment/definition.d.ts.map +1 -1
  383. package/dist/hvac-equipment/definition.edit.d.ts +4 -0
  384. package/dist/hvac-equipment/definition.edit.d.ts.map +1 -0
  385. package/dist/hvac-equipment/definition.edit.js +13 -0
  386. package/dist/hvac-equipment/definition.js +4 -92
  387. package/dist/hvac-equipment/definition.render.d.ts +6 -0
  388. package/dist/hvac-equipment/definition.render.d.ts.map +1 -0
  389. package/dist/hvac-equipment/definition.render.js +72 -0
  390. package/dist/hvac-equipment/floorplan.js +1 -1
  391. package/dist/hvac-equipment/geometry.d.ts.map +1 -1
  392. package/dist/hvac-equipment/geometry.js +2 -1
  393. package/dist/hvac-equipment/parametrics.d.ts.map +1 -1
  394. package/dist/hvac-equipment/parametrics.js +1 -0
  395. package/dist/hvac-equipment/ports.js +1 -1
  396. package/dist/i18n/definition-messages.js +1 -1
  397. package/dist/imported-mesh/definition.d.ts +54 -4
  398. package/dist/imported-mesh/definition.d.ts.map +1 -1
  399. package/dist/imported-mesh/definition.edit.d.ts +4 -0
  400. package/dist/imported-mesh/definition.edit.d.ts.map +1 -0
  401. package/dist/imported-mesh/definition.edit.js +5 -0
  402. package/dist/imported-mesh/definition.js +4 -40
  403. package/dist/imported-mesh/definition.render.d.ts +6 -0
  404. package/dist/imported-mesh/definition.render.d.ts.map +1 -0
  405. package/dist/imported-mesh/definition.render.js +36 -0
  406. package/dist/index.d.ts +3 -16
  407. package/dist/index.d.ts.map +1 -1
  408. package/dist/index.js +9 -136
  409. package/dist/item/definition.d.ts +280 -31
  410. package/dist/item/definition.d.ts.map +1 -1
  411. package/dist/item/definition.edit.d.ts +4 -0
  412. package/dist/item/definition.edit.d.ts.map +1 -0
  413. package/dist/item/definition.edit.js +206 -0
  414. package/dist/item/definition.js +4 -356
  415. package/dist/item/definition.render.d.ts +6 -0
  416. package/dist/item/definition.render.d.ts.map +1 -0
  417. package/dist/item/definition.render.js +128 -0
  418. package/dist/item/floorplan.d.ts.map +1 -1
  419. package/dist/item/floorplan.js +2 -2
  420. package/dist/item/renderer.d.ts.map +1 -1
  421. package/dist/item/renderer.js +2 -2
  422. package/dist/lean-to-extension/definition.d.ts +177 -3
  423. package/dist/lean-to-extension/definition.d.ts.map +1 -1
  424. package/dist/lean-to-extension/definition.edit.d.ts +4 -0
  425. package/dist/lean-to-extension/definition.edit.d.ts.map +1 -0
  426. package/dist/lean-to-extension/definition.edit.js +392 -0
  427. package/dist/lean-to-extension/definition.js +4 -433
  428. package/dist/lean-to-extension/definition.render.d.ts +6 -0
  429. package/dist/lean-to-extension/definition.render.d.ts.map +1 -0
  430. package/dist/lean-to-extension/definition.render.js +46 -0
  431. package/dist/level/definition.d.ts +49 -8
  432. package/dist/level/definition.d.ts.map +1 -1
  433. package/dist/level/definition.edit.d.ts +4 -0
  434. package/dist/level/definition.edit.d.ts.map +1 -0
  435. package/dist/level/definition.edit.js +4 -0
  436. package/dist/level/definition.js +4 -60
  437. package/dist/level/definition.render.d.ts +6 -0
  438. package/dist/level/definition.render.d.ts.map +1 -0
  439. package/dist/level/definition.render.js +53 -0
  440. package/dist/lineset/definition.d.ts +49 -14
  441. package/dist/lineset/definition.d.ts.map +1 -1
  442. package/dist/lineset/definition.edit.d.ts +4 -0
  443. package/dist/lineset/definition.edit.d.ts.map +1 -0
  444. package/dist/lineset/definition.edit.js +38 -0
  445. package/dist/lineset/definition.js +4 -119
  446. package/dist/lineset/definition.render.d.ts +6 -0
  447. package/dist/lineset/definition.render.d.ts.map +1 -0
  448. package/dist/lineset/definition.render.js +72 -0
  449. package/dist/lineset/floorplan.js +1 -1
  450. package/dist/lineset/geometry.js +1 -1
  451. package/dist/lineset/move-tool.d.ts.map +1 -1
  452. package/dist/lineset/move-tool.js +14 -7
  453. package/dist/liquid-line/definition.d.ts +47 -15
  454. package/dist/liquid-line/definition.d.ts.map +1 -1
  455. package/dist/liquid-line/definition.edit.d.ts +4 -0
  456. package/dist/liquid-line/definition.edit.d.ts.map +1 -0
  457. package/dist/liquid-line/definition.edit.js +31 -0
  458. package/dist/liquid-line/definition.js +4 -111
  459. package/dist/liquid-line/definition.render.d.ts +6 -0
  460. package/dist/liquid-line/definition.render.d.ts.map +1 -0
  461. package/dist/liquid-line/definition.render.js +70 -0
  462. package/dist/liquid-line/floorplan.js +1 -1
  463. package/dist/liquid-line/geometry.js +1 -1
  464. package/dist/measurement/definition.d.ts +126 -3
  465. package/dist/measurement/definition.d.ts.map +1 -1
  466. package/dist/measurement/definition.edit.d.ts +4 -0
  467. package/dist/measurement/definition.edit.d.ts.map +1 -0
  468. package/dist/measurement/definition.edit.js +26 -0
  469. package/dist/measurement/definition.js +4 -67
  470. package/dist/measurement/definition.render.d.ts +6 -0
  471. package/dist/measurement/definition.render.d.ts.map +1 -0
  472. package/dist/measurement/definition.render.js +43 -0
  473. package/dist/measurement/floorplan.d.ts.map +1 -1
  474. package/dist/measurement/floorplan.js +3 -2
  475. package/dist/measurement/renderer.d.ts.map +1 -1
  476. package/dist/measurement/renderer.js +2 -3
  477. package/dist/measurement/selection.d.ts.map +1 -1
  478. package/dist/measurement/selection.js +2 -2
  479. package/dist/measurement/tool.d.ts +2 -2
  480. package/dist/measurement/tool.d.ts.map +1 -1
  481. package/dist/measurement/tool.js +3 -3
  482. package/dist/pipe-fitting/definition.d.ts +73 -9
  483. package/dist/pipe-fitting/definition.d.ts.map +1 -1
  484. package/dist/pipe-fitting/definition.edit.d.ts +4 -0
  485. package/dist/pipe-fitting/definition.edit.d.ts.map +1 -0
  486. package/dist/pipe-fitting/definition.edit.js +47 -0
  487. package/dist/pipe-fitting/definition.js +4 -105
  488. package/dist/pipe-fitting/definition.render.d.ts +6 -0
  489. package/dist/pipe-fitting/definition.render.d.ts.map +1 -0
  490. package/dist/pipe-fitting/definition.render.js +54 -0
  491. package/dist/pipe-fitting/floorplan.js +1 -1
  492. package/dist/pipe-fitting/geometry.js +1 -1
  493. package/dist/pipe-fitting/move-tool.d.ts +1 -1
  494. package/dist/pipe-fitting/move-tool.d.ts.map +1 -1
  495. package/dist/pipe-fitting/move-tool.js +28 -22
  496. package/dist/pipe-fitting/parametrics.d.ts.map +1 -1
  497. package/dist/pipe-fitting/parametrics.js +1 -0
  498. package/dist/pipe-fitting/ports.js +1 -1
  499. package/dist/pipe-fitting/selection.d.ts.map +1 -1
  500. package/dist/pipe-fitting/selection.js +73 -29
  501. package/dist/pipe-segment/collar-connection.d.ts +12 -0
  502. package/dist/pipe-segment/collar-connection.d.ts.map +1 -0
  503. package/dist/pipe-segment/collar-connection.js +58 -0
  504. package/dist/pipe-segment/connect-operation.d.ts +9 -0
  505. package/dist/pipe-segment/connect-operation.d.ts.map +1 -0
  506. package/dist/pipe-segment/connect-operation.js +44 -0
  507. package/dist/pipe-segment/continuation.d.ts +3 -2
  508. package/dist/pipe-segment/continuation.d.ts.map +1 -1
  509. package/dist/pipe-segment/continuation.js +60 -1
  510. package/dist/pipe-segment/definition.d.ts +78 -13
  511. package/dist/pipe-segment/definition.d.ts.map +1 -1
  512. package/dist/pipe-segment/definition.edit.d.ts +4 -0
  513. package/dist/pipe-segment/definition.edit.d.ts.map +1 -0
  514. package/dist/pipe-segment/definition.edit.js +48 -0
  515. package/dist/pipe-segment/definition.js +4 -132
  516. package/dist/pipe-segment/definition.render.d.ts +6 -0
  517. package/dist/pipe-segment/definition.render.d.ts.map +1 -0
  518. package/dist/pipe-segment/definition.render.js +78 -0
  519. package/dist/pipe-segment/floorplan.d.ts +1 -1
  520. package/dist/pipe-segment/floorplan.d.ts.map +1 -1
  521. package/dist/pipe-segment/floorplan.js +34 -1
  522. package/dist/pipe-segment/geometry.d.ts.map +1 -1
  523. package/dist/pipe-segment/geometry.js +2 -1
  524. package/dist/pipe-segment/grade-affordance.d.ts +8 -0
  525. package/dist/pipe-segment/grade-affordance.d.ts.map +1 -0
  526. package/dist/pipe-segment/grade-affordance.js +116 -0
  527. package/dist/pipe-segment/grade-inspector.d.ts +5 -0
  528. package/dist/pipe-segment/grade-inspector.d.ts.map +1 -0
  529. package/dist/pipe-segment/grade-inspector.js +91 -0
  530. package/dist/pipe-segment/grade-label.d.ts +7 -0
  531. package/dist/pipe-segment/grade-label.d.ts.map +1 -0
  532. package/dist/pipe-segment/grade-label.js +32 -0
  533. package/dist/pipe-segment/grade-operation.d.ts +22 -0
  534. package/dist/pipe-segment/grade-operation.d.ts.map +1 -0
  535. package/dist/pipe-segment/grade-operation.js +114 -0
  536. package/dist/pipe-segment/move-tool.d.ts.map +1 -1
  537. package/dist/pipe-segment/move-tool.js +38 -15
  538. package/dist/pipe-segment/offset-inspector.d.ts +5 -0
  539. package/dist/pipe-segment/offset-inspector.d.ts.map +1 -0
  540. package/dist/pipe-segment/offset-inspector.js +112 -0
  541. package/dist/pipe-segment/offset-operation.d.ts +9 -0
  542. package/dist/pipe-segment/offset-operation.d.ts.map +1 -0
  543. package/dist/pipe-segment/offset-operation.js +104 -0
  544. package/dist/pipe-segment/parametrics.d.ts.map +1 -1
  545. package/dist/pipe-segment/parametrics.js +1 -9
  546. package/dist/pipe-segment/resize-inspector.d.ts +5 -0
  547. package/dist/pipe-segment/resize-inspector.d.ts.map +1 -0
  548. package/dist/pipe-segment/resize-inspector.js +75 -0
  549. package/dist/pipe-segment/resize-operation.d.ts +8 -0
  550. package/dist/pipe-segment/resize-operation.d.ts.map +1 -0
  551. package/dist/pipe-segment/resize-operation.js +143 -0
  552. package/dist/pipe-segment/run-move.d.ts +65 -0
  553. package/dist/pipe-segment/run-move.d.ts.map +1 -0
  554. package/dist/pipe-segment/run-move.js +110 -0
  555. package/dist/pipe-segment/selection.d.ts.map +1 -1
  556. package/dist/pipe-segment/selection.js +122 -178
  557. package/dist/pipe-segment/slope.d.ts +3 -0
  558. package/dist/pipe-segment/slope.d.ts.map +1 -1
  559. package/dist/pipe-segment/slope.js +47 -0
  560. package/dist/pipe-segment/tool.d.ts.map +1 -1
  561. package/dist/pipe-segment/tool.js +123 -28
  562. package/dist/pipe-trap/definition.d.ts +54 -9
  563. package/dist/pipe-trap/definition.d.ts.map +1 -1
  564. package/dist/pipe-trap/definition.edit.d.ts +4 -0
  565. package/dist/pipe-trap/definition.edit.d.ts.map +1 -0
  566. package/dist/pipe-trap/definition.edit.js +13 -0
  567. package/dist/pipe-trap/definition.js +4 -59
  568. package/dist/pipe-trap/definition.render.d.ts +6 -0
  569. package/dist/pipe-trap/definition.render.d.ts.map +1 -0
  570. package/dist/pipe-trap/definition.render.js +43 -0
  571. package/dist/pipe-trap/geometry.d.ts.map +1 -1
  572. package/dist/pipe-trap/geometry.js +2 -1
  573. package/dist/pipe-trap/parametrics.d.ts.map +1 -1
  574. package/dist/pipe-trap/parametrics.js +1 -0
  575. package/dist/procedural-item/definition.d.ts +734 -3
  576. package/dist/procedural-item/definition.d.ts.map +1 -1
  577. package/dist/procedural-item/definition.edit.d.ts +4 -0
  578. package/dist/procedural-item/definition.edit.d.ts.map +1 -0
  579. package/dist/procedural-item/definition.edit.js +255 -0
  580. package/dist/procedural-item/definition.js +4 -325
  581. package/dist/procedural-item/definition.render.d.ts +6 -0
  582. package/dist/procedural-item/definition.render.d.ts.map +1 -0
  583. package/dist/procedural-item/definition.render.js +84 -0
  584. package/dist/procedural-item/renderer.d.ts.map +1 -1
  585. package/dist/procedural-item/renderer.edit.d.ts +5 -0
  586. package/dist/procedural-item/renderer.edit.d.ts.map +1 -0
  587. package/dist/procedural-item/renderer.edit.js +49 -0
  588. package/dist/procedural-item/renderer.js +4 -21
  589. package/dist/render.d.ts +4 -0
  590. package/dist/render.d.ts.map +1 -0
  591. package/dist/render.js +4 -0
  592. package/dist/ridge-vent/definition.d.ts +95 -15
  593. package/dist/ridge-vent/definition.d.ts.map +1 -1
  594. package/dist/ridge-vent/definition.edit.d.ts +4 -0
  595. package/dist/ridge-vent/definition.edit.d.ts.map +1 -0
  596. package/dist/ridge-vent/definition.edit.js +148 -0
  597. package/dist/ridge-vent/definition.js +4 -197
  598. package/dist/ridge-vent/definition.render.d.ts +6 -0
  599. package/dist/ridge-vent/definition.render.d.ts.map +1 -0
  600. package/dist/ridge-vent/definition.render.js +42 -0
  601. package/dist/ridge-vent/move-tool.d.ts.map +1 -1
  602. package/dist/ridge-vent/move-tool.js +5 -4
  603. package/dist/roof/barrel-panel.d.ts.map +1 -1
  604. package/dist/roof/barrel-panel.js +2 -2
  605. package/dist/roof/definition.d.ts +325 -8
  606. package/dist/roof/definition.d.ts.map +1 -1
  607. package/dist/roof/definition.edit.d.ts +4 -0
  608. package/dist/roof/definition.edit.d.ts.map +1 -0
  609. package/dist/roof/definition.edit.js +183 -0
  610. package/dist/roof/definition.js +4 -284
  611. package/dist/roof/definition.render.d.ts +7 -0
  612. package/dist/roof/definition.render.d.ts.map +1 -0
  613. package/dist/roof/definition.render.js +101 -0
  614. package/dist/roof/geometry-notice.d.ts +5 -0
  615. package/dist/roof/geometry-notice.d.ts.map +1 -0
  616. package/dist/roof/geometry-notice.js +27 -0
  617. package/dist/roof/glazing-controls.d.ts.map +1 -1
  618. package/dist/roof/glazing-controls.js +2 -2
  619. package/dist/roof/panel.d.ts.map +1 -1
  620. package/dist/roof/panel.js +4 -3
  621. package/dist/roof/tool.d.ts +3 -0
  622. package/dist/roof/tool.d.ts.map +1 -1
  623. package/dist/roof/tool.js +56 -170
  624. package/dist/roof/type-thumbnail-assets.d.ts +3 -0
  625. package/dist/roof/type-thumbnail-assets.d.ts.map +1 -0
  626. package/dist/roof/type-thumbnail-assets.js +12 -0
  627. package/dist/roof/type-thumbnail.d.ts +5 -0
  628. package/dist/roof/type-thumbnail.d.ts.map +1 -0
  629. package/dist/roof/type-thumbnail.js +5 -0
  630. package/dist/roof-segment/definition.d.ts +564 -9
  631. package/dist/roof-segment/definition.d.ts.map +1 -1
  632. package/dist/roof-segment/definition.edit.d.ts +4 -0
  633. package/dist/roof-segment/definition.edit.d.ts.map +1 -0
  634. package/dist/roof-segment/definition.edit.js +305 -0
  635. package/dist/roof-segment/definition.js +4 -364
  636. package/dist/roof-segment/definition.render.d.ts +6 -0
  637. package/dist/roof-segment/definition.render.d.ts.map +1 -0
  638. package/dist/roof-segment/definition.render.js +59 -0
  639. package/dist/roof-segment/floorplan-affordances.d.ts.map +1 -1
  640. package/dist/roof-segment/floorplan-affordances.js +2 -2
  641. package/dist/roof-segment/paint.d.ts +0 -1
  642. package/dist/roof-segment/paint.d.ts.map +1 -1
  643. package/dist/roof-segment/paint.js +0 -1
  644. package/dist/roof-segment/panel.d.ts.map +1 -1
  645. package/dist/roof-segment/panel.js +32 -34
  646. package/dist/roof-segment/parametrics.d.ts.map +1 -1
  647. package/dist/roof-segment/parametrics.js +13 -11
  648. package/dist/roof-segment/slots.d.ts +2 -0
  649. package/dist/roof-segment/slots.d.ts.map +1 -0
  650. package/dist/roof-segment/slots.js +1 -0
  651. package/dist/scan/definition.d.ts +57 -7
  652. package/dist/scan/definition.d.ts.map +1 -1
  653. package/dist/scan/definition.edit.d.ts +4 -0
  654. package/dist/scan/definition.edit.d.ts.map +1 -0
  655. package/dist/scan/definition.edit.js +4 -0
  656. package/dist/scan/definition.js +4 -52
  657. package/dist/scan/definition.render.d.ts +6 -0
  658. package/dist/scan/definition.render.d.ts.map +1 -0
  659. package/dist/scan/definition.render.js +46 -0
  660. package/dist/separator/definition.d.ts +47 -2
  661. package/dist/separator/definition.d.ts.map +1 -1
  662. package/dist/separator/definition.edit.d.ts +4 -0
  663. package/dist/separator/definition.edit.d.ts.map +1 -0
  664. package/dist/separator/definition.edit.js +13 -0
  665. package/dist/separator/definition.js +4 -37
  666. package/dist/separator/definition.render.d.ts +6 -0
  667. package/dist/separator/definition.render.d.ts.map +1 -0
  668. package/dist/separator/definition.render.js +27 -0
  669. package/dist/separator/renderer.d.ts +2 -1
  670. package/dist/separator/renderer.d.ts.map +1 -1
  671. package/dist/separator/renderer.edit.d.ts +5 -0
  672. package/dist/separator/renderer.edit.d.ts.map +1 -0
  673. package/dist/separator/renderer.edit.js +8 -0
  674. package/dist/separator/renderer.js +3 -5
  675. package/dist/separator/selection.d.ts.map +1 -1
  676. package/dist/separator/selection.js +2 -2
  677. package/dist/shared/accessory-placement.js +1 -1
  678. package/dist/shared/auto-fitting.js +1 -1
  679. package/dist/shared/auto-offset-tag.d.ts +1 -1
  680. package/dist/shared/auto-offset-tag.d.ts.map +1 -1
  681. package/dist/shared/auto-offset-tag.js +3 -1
  682. package/dist/shared/automatic-run-end-cap.d.ts +5 -0
  683. package/dist/shared/automatic-run-end-cap.d.ts.map +1 -1
  684. package/dist/shared/automatic-run-end-cap.js +17 -9
  685. package/dist/shared/connection-feedback.d.ts +6 -3
  686. package/dist/shared/connection-feedback.d.ts.map +1 -1
  687. package/dist/shared/connection-feedback.js +29 -6
  688. package/dist/shared/curtain-opening-limits.d.ts.map +1 -1
  689. package/dist/shared/curtain-opening-limits.js +2 -3
  690. package/dist/shared/draft-axis-guides.d.ts.map +1 -1
  691. package/dist/shared/draft-axis-guides.js +2 -1
  692. package/dist/shared/duct-adapter.js +1 -1
  693. package/dist/shared/duct-collar-inspector.d.ts +5 -0
  694. package/dist/shared/duct-collar-inspector.d.ts.map +1 -0
  695. package/dist/shared/duct-collar-inspector.js +36 -0
  696. package/dist/shared/follower-frames.d.ts +15 -0
  697. package/dist/shared/follower-frames.d.ts.map +1 -0
  698. package/dist/shared/follower-frames.js +36 -0
  699. package/dist/shared/handle-drag-scope.d.ts +14 -0
  700. package/dist/shared/handle-drag-scope.d.ts.map +1 -0
  701. package/dist/shared/handle-drag-scope.js +36 -0
  702. package/dist/shared/hosted-resize.d.ts +3 -1
  703. package/dist/shared/hosted-resize.d.ts.map +1 -1
  704. package/dist/shared/hosted-resize.js +10 -8
  705. package/dist/shared/live-preview.d.ts +16 -0
  706. package/dist/shared/live-preview.d.ts.map +1 -0
  707. package/dist/shared/live-preview.js +36 -0
  708. package/dist/shared/opening-guides-runtime.d.ts.map +1 -1
  709. package/dist/shared/opening-guides-runtime.js +2 -2
  710. package/dist/shared/opening-placement-dimensions.d.ts.map +1 -1
  711. package/dist/shared/opening-placement-dimensions.js +1 -1
  712. package/dist/shared/path-point-affordance.d.ts.map +1 -1
  713. package/dist/shared/path-point-affordance.js +19 -24
  714. package/dist/shared/path-segment-affordance.d.ts +2 -1
  715. package/dist/shared/path-segment-affordance.d.ts.map +1 -1
  716. package/dist/shared/path-segment-affordance.js +11 -8
  717. package/dist/shared/pipe-collar-inspector.d.ts +5 -0
  718. package/dist/shared/pipe-collar-inspector.d.ts.map +1 -0
  719. package/dist/shared/pipe-collar-inspector.js +27 -0
  720. package/dist/shared/refrigerant-line-selection.d.ts.map +1 -1
  721. package/dist/shared/refrigerant-line-selection.js +46 -29
  722. package/dist/shared/relative-roof-drag.d.ts.map +1 -1
  723. package/dist/shared/relative-roof-drag.js +5 -4
  724. package/dist/shared/roof-surface.d.ts.map +1 -1
  725. package/dist/shared/roof-surface.js +2 -0
  726. package/dist/shared/run-hangers.d.ts.map +1 -1
  727. package/dist/shared/run-hangers.js +2 -2
  728. package/dist/shared/run-move-connectivity.d.ts +15 -6
  729. package/dist/shared/run-move-connectivity.d.ts.map +1 -1
  730. package/dist/shared/run-move-connectivity.js +14 -5
  731. package/dist/shared/run-tool-options.d.ts +8 -0
  732. package/dist/shared/run-tool-options.d.ts.map +1 -0
  733. package/dist/shared/run-tool-options.js +166 -0
  734. package/dist/shared/system-checks.d.ts.map +1 -1
  735. package/dist/shared/system-checks.js +2 -1
  736. package/dist/shared/vertical-offset.js +1 -1
  737. package/dist/shared/wall-opening-ceiling.d.ts +6 -0
  738. package/dist/shared/wall-opening-ceiling.d.ts.map +1 -1
  739. package/dist/shared/wall-opening-ceiling.js +36 -7
  740. package/dist/shelf/definition.d.ts +108 -3
  741. package/dist/shelf/definition.d.ts.map +1 -1
  742. package/dist/shelf/definition.edit.d.ts +4 -0
  743. package/dist/shelf/definition.edit.d.ts.map +1 -0
  744. package/dist/shelf/definition.edit.js +155 -0
  745. package/dist/shelf/definition.js +4 -272
  746. package/dist/shelf/definition.render.d.ts +6 -0
  747. package/dist/shelf/definition.render.d.ts.map +1 -0
  748. package/dist/shelf/definition.render.js +122 -0
  749. package/dist/site/definition.d.ts +312 -9
  750. package/dist/site/definition.d.ts.map +1 -1
  751. package/dist/site/definition.edit.d.ts +4 -0
  752. package/dist/site/definition.edit.d.ts.map +1 -0
  753. package/dist/site/definition.edit.js +4 -0
  754. package/dist/site/definition.js +4 -55
  755. package/dist/site/definition.render.d.ts +6 -0
  756. package/dist/site/definition.render.d.ts.map +1 -0
  757. package/dist/site/definition.render.js +47 -0
  758. package/dist/skylight/definition.d.ts +158 -9
  759. package/dist/skylight/definition.d.ts.map +1 -1
  760. package/dist/skylight/definition.edit.d.ts +4 -0
  761. package/dist/skylight/definition.edit.d.ts.map +1 -0
  762. package/dist/skylight/definition.edit.js +218 -0
  763. package/dist/skylight/definition.js +4 -271
  764. package/dist/skylight/definition.render.d.ts +6 -0
  765. package/dist/skylight/definition.render.d.ts.map +1 -0
  766. package/dist/skylight/definition.render.js +50 -0
  767. package/dist/skylight/move-tool.d.ts.map +1 -1
  768. package/dist/skylight/move-tool.js +7 -5
  769. package/dist/slab/definition.d.ts +289 -20
  770. package/dist/slab/definition.d.ts.map +1 -1
  771. package/dist/slab/definition.edit.d.ts +4 -0
  772. package/dist/slab/definition.edit.d.ts.map +1 -0
  773. package/dist/slab/definition.edit.js +230 -0
  774. package/dist/slab/definition.js +4 -334
  775. package/dist/slab/definition.render.d.ts +6 -0
  776. package/dist/slab/definition.render.d.ts.map +1 -0
  777. package/dist/slab/definition.render.js +92 -0
  778. package/dist/slab/panel.js +2 -2
  779. package/dist/solar-panel/definition.d.ts +145 -14
  780. package/dist/solar-panel/definition.d.ts.map +1 -1
  781. package/dist/solar-panel/definition.edit.d.ts +4 -0
  782. package/dist/solar-panel/definition.edit.d.ts.map +1 -0
  783. package/dist/solar-panel/definition.edit.js +213 -0
  784. package/dist/solar-panel/definition.js +4 -263
  785. package/dist/solar-panel/definition.render.d.ts +6 -0
  786. package/dist/solar-panel/definition.render.d.ts.map +1 -0
  787. package/dist/solar-panel/definition.render.js +42 -0
  788. package/dist/solar-panel/move-tool.d.ts.map +1 -1
  789. package/dist/solar-panel/move-tool.js +7 -5
  790. package/dist/spawn/definition.d.ts +48 -3
  791. package/dist/spawn/definition.d.ts.map +1 -1
  792. package/dist/spawn/definition.edit.d.ts +4 -0
  793. package/dist/spawn/definition.edit.d.ts.map +1 -0
  794. package/dist/spawn/definition.edit.js +64 -0
  795. package/dist/spawn/definition.js +4 -109
  796. package/dist/spawn/definition.render.d.ts +6 -0
  797. package/dist/spawn/definition.render.d.ts.map +1 -0
  798. package/dist/spawn/definition.render.js +48 -0
  799. package/dist/stair/definition.d.ts +334 -8
  800. package/dist/stair/definition.d.ts.map +1 -1
  801. package/dist/stair/definition.edit.d.ts +4 -0
  802. package/dist/stair/definition.edit.d.ts.map +1 -0
  803. package/dist/stair/definition.edit.js +377 -0
  804. package/dist/stair/definition.js +4 -443
  805. package/dist/stair/definition.render.d.ts +6 -0
  806. package/dist/stair/definition.render.d.ts.map +1 -0
  807. package/dist/stair/definition.render.js +65 -0
  808. package/dist/stair/panel.js +2 -2
  809. package/dist/stair/structure-controls.d.ts.map +1 -1
  810. package/dist/stair/structure-controls.js +2 -2
  811. package/dist/stair-segment/definition.d.ts +130 -7
  812. package/dist/stair-segment/definition.d.ts.map +1 -1
  813. package/dist/stair-segment/definition.edit.d.ts +4 -0
  814. package/dist/stair-segment/definition.edit.d.ts.map +1 -0
  815. package/dist/stair-segment/definition.edit.js +135 -0
  816. package/dist/stair-segment/definition.js +4 -172
  817. package/dist/stair-segment/definition.render.d.ts +6 -0
  818. package/dist/stair-segment/definition.render.d.ts.map +1 -0
  819. package/dist/stair-segment/definition.render.js +38 -0
  820. package/dist/structural-grid/definition.d.ts +50 -3
  821. package/dist/structural-grid/definition.d.ts.map +1 -1
  822. package/dist/structural-grid/definition.edit.d.ts +4 -0
  823. package/dist/structural-grid/definition.edit.d.ts.map +1 -0
  824. package/dist/structural-grid/definition.edit.js +18 -0
  825. package/dist/structural-grid/definition.js +4 -51
  826. package/dist/structural-grid/definition.render.d.ts +6 -0
  827. package/dist/structural-grid/definition.render.d.ts.map +1 -0
  828. package/dist/structural-grid/definition.render.js +35 -0
  829. package/dist/turbine-vent/definition.d.ts +97 -23
  830. package/dist/turbine-vent/definition.d.ts.map +1 -1
  831. package/dist/turbine-vent/definition.edit.d.ts +4 -0
  832. package/dist/turbine-vent/definition.edit.d.ts.map +1 -0
  833. package/dist/turbine-vent/definition.edit.js +66 -0
  834. package/dist/turbine-vent/definition.js +4 -121
  835. package/dist/turbine-vent/definition.render.d.ts +6 -0
  836. package/dist/turbine-vent/definition.render.d.ts.map +1 -0
  837. package/dist/turbine-vent/definition.render.js +40 -0
  838. package/dist/turbine-vent/move-tool.d.ts.map +1 -1
  839. package/dist/turbine-vent/move-tool.js +6 -5
  840. package/dist/unit/definition.d.ts +53 -9
  841. package/dist/unit/definition.d.ts.map +1 -1
  842. package/dist/unit/definition.edit.d.ts +4 -0
  843. package/dist/unit/definition.edit.d.ts.map +1 -0
  844. package/dist/unit/definition.edit.js +4 -0
  845. package/dist/unit/definition.js +4 -38
  846. package/dist/unit/definition.render.d.ts +6 -0
  847. package/dist/unit/definition.render.d.ts.map +1 -0
  848. package/dist/unit/definition.render.js +30 -0
  849. package/dist/unit/unit-panel.d.ts.map +1 -1
  850. package/dist/unit/unit-panel.js +2 -2
  851. package/dist/wall/contextual-dimensions.d.ts.map +1 -1
  852. package/dist/wall/contextual-dimensions.js +2 -2
  853. package/dist/wall/curtain-wall-panel.d.ts.map +1 -1
  854. package/dist/wall/curtain-wall-panel.js +2 -2
  855. package/dist/wall/definition.d.ts +809 -3
  856. package/dist/wall/definition.d.ts.map +1 -1
  857. package/dist/wall/definition.edit.d.ts +4 -0
  858. package/dist/wall/definition.edit.d.ts.map +1 -0
  859. package/dist/wall/definition.edit.js +184 -0
  860. package/dist/wall/definition.js +4 -279
  861. package/dist/wall/definition.render.d.ts +6 -0
  862. package/dist/wall/definition.render.d.ts.map +1 -0
  863. package/dist/wall/definition.render.js +100 -0
  864. package/dist/wall/floorplan.js +1 -1
  865. package/dist/wall/measurement.d.ts.map +1 -1
  866. package/dist/wall/measurement.js +22 -5
  867. package/dist/wall/move-endpoint-tool.d.ts.map +1 -1
  868. package/dist/wall/move-endpoint-tool.js +3 -3
  869. package/dist/wall/move-shared.js +1 -1
  870. package/dist/wall/panel-model.d.ts.map +1 -1
  871. package/dist/wall/panel-model.js +4 -3
  872. package/dist/wall/panel.d.ts.map +1 -1
  873. package/dist/wall/panel.js +15 -6
  874. package/dist/wall/quick-measurement.js +1 -1
  875. package/dist/wall/rectangle-command.d.ts +1 -0
  876. package/dist/wall/rectangle-command.d.ts.map +1 -1
  877. package/dist/wall/rectangle-tool.js +2 -2
  878. package/dist/wall/split-floorplan-layer.d.ts.map +1 -1
  879. package/dist/wall/split-floorplan-layer.js +2 -2
  880. package/dist/wall/split-tool.d.ts.map +1 -1
  881. package/dist/wall/split-tool.js +2 -2
  882. package/dist/wall/tool.d.ts.map +1 -1
  883. package/dist/wall/tool.js +138 -36
  884. package/dist/wall/treatments.d.ts.map +1 -1
  885. package/dist/wall/treatments.js +36 -16
  886. package/dist/window/definition.d.ts +356 -15
  887. package/dist/window/definition.d.ts.map +1 -1
  888. package/dist/window/definition.edit.d.ts +4 -0
  889. package/dist/window/definition.edit.d.ts.map +1 -0
  890. package/dist/window/definition.edit.js +255 -0
  891. package/dist/window/definition.js +5 -338
  892. package/dist/window/definition.render.d.ts +8 -0
  893. package/dist/window/definition.render.d.ts.map +1 -0
  894. package/dist/window/definition.render.js +83 -0
  895. package/dist/window/floorplan-move.d.ts.map +1 -1
  896. package/dist/window/floorplan-move.js +7 -4
  897. package/dist/window/mechanism.js +1 -1
  898. package/dist/window/move-tool.d.ts.map +1 -1
  899. package/dist/window/move-tool.js +7 -11
  900. package/dist/window/tool.d.ts.map +1 -1
  901. package/dist/window/tool.js +5 -2
  902. package/dist/zone/contextual-dimensions.d.ts.map +1 -1
  903. package/dist/zone/contextual-dimensions.js +1 -2
  904. package/dist/zone/definition.d.ts +264 -9
  905. package/dist/zone/definition.d.ts.map +1 -1
  906. package/dist/zone/definition.edit.d.ts +4 -0
  907. package/dist/zone/definition.edit.d.ts.map +1 -0
  908. package/dist/zone/definition.edit.js +38 -0
  909. package/dist/zone/definition.js +4 -97
  910. package/dist/zone/definition.render.d.ts +6 -0
  911. package/dist/zone/definition.render.d.ts.map +1 -0
  912. package/dist/zone/definition.render.js +55 -0
  913. package/dist/zone/quantities-panel.d.ts.map +1 -1
  914. package/dist/zone/quantities-panel.js +2 -2
  915. package/package.json +21 -10
@@ -0,0 +1,305 @@
1
+ import { getActiveRoofHeight, getPitchFromActiveRoofHeight, getRoofSegmentResizePatch, MAX_ROOF_PITCH, MIN_ROOF_SEGMENT_DIMENSION, snapScalar, } from '@pascal-app/core';
2
+ import { getSegmentGridStep, isGridSnapActive, isMagneticSnapActive, PANEL_MODEL_EXTENSION, } from '@pascal-app/editor';
3
+ import { roofFloorplanAffectedIds } from '../roof/floorplan-overrides.js';
4
+ import { bearingWallThickness, catchRoofSideOnWalls, roofCatchWalls, segmentWallLine, } from '../roof/wall-catch.js';
5
+ import { buildRoofSegmentFloorplan } from './floorplan.js';
6
+ import { roofSegmentMoveTarget, roofSegmentResizeAffordance, roofSegmentRotateAffordance, } from './floorplan-affordances.js';
7
+ import { roofSegmentPaint } from './paint.js';
8
+ import { roofSegmentPanelModel } from './panel-model.js';
9
+ import { roofSegmentParametrics } from './parametrics.js';
10
+ const SIDE_HANDLE_OFFSET = 0.3;
11
+ const HEIGHT_HANDLE_OFFSET = 0.3;
12
+ const ROOF_HANDLE_CLEARANCE = 0.15;
13
+ const ROTATE_CORNER_OFFSET = 0.4;
14
+ const ROTATE_RING_OFFSET = 0.08;
15
+ const MIN_ROOF_DIM = MIN_ROOF_SEGMENT_DIMENSION;
16
+ const MIN_WALL_HEIGHT = 0;
17
+ // Clamp used for handle Y placement so arrows stay visible on flat /
18
+ // wall-less segments where `wallHeight ≈ 0` would put them on the floor.
19
+ const MIN_WALL_DISPLAY = 0.3;
20
+ // Pitch is stored in degrees on the schema; same clamp the panel applies.
21
+ const MIN_PITCH = 0;
22
+ const MAX_PITCH = MAX_ROOF_PITCH;
23
+ // Floor-to-peak height of the assembled segment. Pitch drag drives this
24
+ // value directly and back-solves the pitch angle via the slope-frame
25
+ // math in core.
26
+ function getPeakHeight(n) {
27
+ return n.wallHeight + getActiveRoofHeight(n);
28
+ }
29
+ function getSideResizeHandleY(n, localZ) {
30
+ if (n.roofType !== 'shed')
31
+ return Math.max(n.wallHeight, MIN_WALL_DISPLAY) / 2;
32
+ const halfDepth = Math.max(n.depth, MIN_ROOF_DIM) / 2;
33
+ const roofHeight = getActiveRoofHeight(n);
34
+ const t = halfDepth > 0 ? (localZ + halfDepth) / (2 * halfDepth) : 0.5;
35
+ const roofY = n.wallHeight + roofHeight * (1 - Math.max(0, Math.min(1, t)));
36
+ return Math.max(roofY, MIN_WALL_DISPLAY) + ROOF_HANDLE_CLEARANCE;
37
+ }
38
+ function roofOf(n, sceneApi) {
39
+ const roof = n.parentId ? sceneApi?.get(n.parentId) : undefined;
40
+ return roof?.type === 'roof' ? roof : undefined;
41
+ }
42
+ // A dragged side lands on a wall under it in grid and lines, ahead of the grid, as a move does.
43
+ // The arrows leave `gridSnap` off so the catch sees the raw size, and grid it here when nothing
44
+ // catches; Alt skips this hook, so the side follows the cursor.
45
+ function snapSideOntoWalls(axis, side) {
46
+ return (n, value, sceneApi) => {
47
+ const grid = isGridSnapActive();
48
+ if (!grid && !isMagneticSnapActive())
49
+ return value;
50
+ const roof = roofOf(n, sceneApi);
51
+ if (roof) {
52
+ const caught = catchRoofSideOnWalls({
53
+ line: segmentWallLine(roof, n),
54
+ axis,
55
+ side,
56
+ value,
57
+ walls: roofCatchWalls(sceneApi.nodes(), roof.parentId),
58
+ });
59
+ if (caught !== null)
60
+ return caught;
61
+ }
62
+ return grid ? snapScalar(value, getSegmentGridStep()) : value;
63
+ };
64
+ }
65
+ // Sized onto the walls under it, a segment's gable and heel walls take their thickness; off them,
66
+ // its own (written either way, so a drag back off the walls drops the thickness it previewed).
67
+ function onBearingWalls(n, patch, sceneApi) {
68
+ const roof = roofOf(n, sceneApi);
69
+ if (!(roof && sceneApi))
70
+ return patch;
71
+ const thickness = bearingWallThickness(segmentWallLine(roof, { ...n, ...patch }), roofCatchWalls(sceneApi.nodes(), roof.parentId));
72
+ return { ...patch, wallThickness: thickness ?? n.wallThickness };
73
+ }
74
+ // Width arrow on the +X (right) or -X (left) side. Asymmetric resize:
75
+ // dragging one arrow grows the segment outward from its own edge while
76
+ // the opposite edge stays world-fixed — the same pattern doors use
77
+ // (`door/definition.ts:35-73`). The arrow's chevron points outward
78
+ // (`rotationY: Math.PI` flips the left arrow's chevron to face -X) so
79
+ // you read "this edge is what moves" at a glance.
80
+ //
81
+ // `apply` recomputes `position` so the anchored edge stays at the same
82
+ // world point even when the segment is Y-rotated: project the segment's
83
+ // local +X onto world via (cos r, -sin r), find the anchored edge's
84
+ // world XZ from the pre-drag node, then place the new center half a
85
+ // new-width away from that anchor in the same direction.
86
+ function roofSegmentWidthHandle(side) {
87
+ const sign = side === 'right' ? 1 : -1;
88
+ return {
89
+ kind: 'linear-resize',
90
+ axis: 'x',
91
+ // 'min' = -X edge anchored (right arrow grows the +X edge outward).
92
+ // 'max' = +X edge anchored (left arrow grows the -X edge outward).
93
+ anchor: side === 'right' ? 'min' : 'max',
94
+ min: MIN_ROOF_DIM,
95
+ connectionSnap: snapSideOntoWalls('x', sign),
96
+ currentValue: (n) => n.width,
97
+ apply: (initial, newWidth, sceneApi) => onBearingWalls(initial, getRoofSegmentResizePatch(initial, 'x', sign, newWidth), sceneApi),
98
+ placement: {
99
+ position: (n) => [sign * (n.width / 2 + SIDE_HANDLE_OFFSET), getSideResizeHandleY(n, 0), 0],
100
+ // Flip the left chevron so it points outward toward -X. The
101
+ // generic LinearArrow only auto-orients for axis 'z' (rotates the
102
+ // chevron 90° to face +Z); +X / -X facing is up to the descriptor.
103
+ rotationY: () => (side === 'right' ? 0 : Math.PI),
104
+ },
105
+ };
106
+ }
107
+ // Depth arrow on the +Z (front) or -Z (back) side. Asymmetric: the
108
+ // dragged edge follows the pointer, the opposite edge stays world-fixed
109
+ // — mirrors the width-handle pattern (`roofSegmentWidthHandle`). Because
110
+ // segment depth feeds the pitch math via `getActiveRoofHeight`, growing
111
+ // depth at constant pitch ramps the peak up too, which reads as
112
+ // scaling. We hold the peak height constant by back-solving a new pitch
113
+ // for the new depth (same recipe the pitch handle uses, run in
114
+ // reverse). MIN/MAX_PITCH clamps cover degenerate cases where the new
115
+ // depth would demand a negative or beyond-vertical pitch.
116
+ function roofSegmentDepthHandle(side) {
117
+ const sign = side === 'front' ? 1 : -1;
118
+ return {
119
+ kind: 'linear-resize',
120
+ axis: 'z',
121
+ anchor: side === 'front' ? 'min' : 'max',
122
+ min: MIN_ROOF_DIM,
123
+ connectionSnap: snapSideOntoWalls('z', sign),
124
+ currentValue: (n) => n.depth,
125
+ apply: (initial, newDepth, sceneApi) => onBearingWalls(initial, getRoofSegmentResizePatch(initial, 'z', sign, newDepth), sceneApi),
126
+ placement: {
127
+ position: (n) => [
128
+ 0,
129
+ getSideResizeHandleY(n, sign * (n.depth / 2)),
130
+ sign * (n.depth / 2 + SIDE_HANDLE_OFFSET),
131
+ ],
132
+ // For axis 'z', `LinearArrow` adds -π/2 around Y so the chevron
133
+ // points +Z by default. Flip the back arrow by π so it points -Z.
134
+ rotationY: () => (side === 'front' ? 0 : Math.PI),
135
+ },
136
+ };
137
+ }
138
+ function conicalRoofSegmentRadiusHandle() {
139
+ return {
140
+ kind: 'radial-resize',
141
+ axis: 'x',
142
+ min: MIN_ROOF_DIM / 2,
143
+ currentValue: (n) => n.width / 2,
144
+ apply: (_initial, radius) => ({ width: radius * 2, depth: radius * 2 }),
145
+ placement: {
146
+ position: (n) => [n.width / 2 + SIDE_HANDLE_OFFSET, getSideResizeHandleY(n, 0), 0],
147
+ },
148
+ decoration: {
149
+ kind: 'ring',
150
+ radius: (n) => n.width / 2,
151
+ y: (n) => getSideResizeHandleY(n, 0),
152
+ },
153
+ };
154
+ }
155
+ // Wall-height tracker — dashed vertical leader from the floor up to a
156
+ // draggable cube at the wall top, centred on the footprint. Replaces
157
+ // the old -X-side chevron so the wall-top control reads as "the wall is
158
+ // THIS tall" instead of "there's an arrow on the side." Drag math is
159
+ // unchanged: same linear-resize axis='y' / anchor='min' pipeline as
160
+ // every other height handle; the `shape: 'tracker'` flag only swaps the
161
+ // visual. Wall-height clamps to MIN_WALL_DISPLAY for placement so the
162
+ // cube stays grabbable on flat / wall-less segments where the real
163
+ // `wallHeight` is ~0 and the leader would collapse to nothing.
164
+ function roofSegmentWallHeightHandle() {
165
+ return {
166
+ kind: 'linear-resize',
167
+ axis: 'y',
168
+ anchor: 'min',
169
+ shape: 'tracker',
170
+ min: MIN_WALL_HEIGHT,
171
+ gridSnap: true,
172
+ currentValue: (n) => n.wallHeight,
173
+ apply: (_n, newValue) => ({ wallHeight: newValue }),
174
+ placement: {
175
+ position: (n) => [0, Math.max(n.wallHeight, MIN_WALL_DISPLAY), 0],
176
+ },
177
+ };
178
+ }
179
+ // Pitch arrow — drag the peak vertically to steepen / flatten the roof.
180
+ // The handle exposes the floor-to-peak height as its currentValue so the
181
+ // drag delta is a meters value the user can read in the dimension chip;
182
+ // `apply` inverts the slope-frame math (run = primary-slope footprint
183
+ // span, rise fraction depends on roofType) to recover the pitch degrees
184
+ // the new peak corresponds to. Clamped to the schema range [0, 85].
185
+ //
186
+ // Placed at the peak's center so it visually attaches to the ridge for
187
+ // gable / hip / dutch / mansard / gambrel; on shed roofs the geometric
188
+ // peak sits at one edge, so the arrow floats slightly inboard of the
189
+ // ridge — acceptable as a "peak-height" affordance and matches the
190
+ // floorplan-center origin every other handle uses.
191
+ function roofSegmentPitchHandle() {
192
+ return {
193
+ kind: 'linear-resize',
194
+ axis: 'y',
195
+ anchor: 'min',
196
+ min: (n) => n.wallHeight,
197
+ gridSnap: true,
198
+ currentValue: (n) => getPeakHeight(n),
199
+ visible: (n) => !n.managedByParent,
200
+ apply: (initial, newPeakHeight) => {
201
+ const roofHeight = Math.max(0, newPeakHeight - initial.wallHeight);
202
+ if (initial.roofType === 'barrel')
203
+ return { barrelRise: Math.max(0.01, Math.min(initial.depth / 2, roofHeight)) };
204
+ const pitch = getPitchFromActiveRoofHeight({
205
+ roofType: initial.roofType,
206
+ width: initial.width,
207
+ depth: initial.depth,
208
+ roofHeight,
209
+ gambrelLowerWidthRatio: initial.gambrelLowerWidthRatio,
210
+ gambrelLowerHeightRatio: initial.gambrelLowerHeightRatio,
211
+ mansardSteepWidthRatio: initial.mansardSteepWidthRatio,
212
+ mansardSteepHeightRatio: initial.mansardSteepHeightRatio,
213
+ dutchHipWidthRatio: initial.dutchHipWidthRatio,
214
+ dutchHipHeightRatio: initial.dutchHipHeightRatio,
215
+ });
216
+ return { pitch: Math.max(MIN_PITCH, Math.min(MAX_PITCH, pitch)) };
217
+ },
218
+ placement: {
219
+ position: (n) => [0, getPeakHeight(n) + HEIGHT_HANDLE_OFFSET, 0],
220
+ },
221
+ };
222
+ }
223
+ // Whole-segment rotation gizmo — curved two-headed arrow at the +X / +Z
224
+ // corner of the footprint, guide ring traces the corner-diagonal radius
225
+ // on hover / drag. Same pattern as the elevator / column rotate gizmo;
226
+ // roof-segment stores rotation as a scalar (radians) so the apply patch
227
+ // just writes back the new scalar.
228
+ function roofSegmentRotateHandle() {
229
+ return {
230
+ kind: 'arc-resize',
231
+ axis: 'angular',
232
+ shape: 'rotate',
233
+ // Negate the cursor delta to match three.js Y-rotation handedness
234
+ // (cursor atan2 ticks opposite-handed from `rotation-y`).
235
+ apply: (initial, delta) => ({ rotation: (initial.rotation ?? 0) - delta }),
236
+ placement: {
237
+ position: (n) => {
238
+ const halfX = n.width / 2;
239
+ const halfZ = n.depth / 2;
240
+ const yMid = Math.max(n.wallHeight, MIN_WALL_DISPLAY) / 2;
241
+ return [halfX, yMid, halfZ + ROTATE_CORNER_OFFSET];
242
+ },
243
+ rotationY: () => -Math.PI / 4,
244
+ },
245
+ decoration: {
246
+ kind: 'ring',
247
+ radius: (n) => Math.hypot(n.width / 2, n.depth / 2) + ROTATE_RING_OFFSET,
248
+ y: (n) => Math.max(n.wallHeight, MIN_WALL_DISPLAY) / 2,
249
+ },
250
+ };
251
+ }
252
+ const roofSegmentHandles = [
253
+ roofSegmentWidthHandle('right'),
254
+ roofSegmentWidthHandle('left'),
255
+ roofSegmentDepthHandle('front'),
256
+ roofSegmentDepthHandle('back'),
257
+ roofSegmentWallHeightHandle(),
258
+ roofSegmentPitchHandle(),
259
+ roofSegmentRotateHandle(),
260
+ ];
261
+ const conicalRoofSegmentHandles = [
262
+ conicalRoofSegmentRadiusHandle(),
263
+ roofSegmentWallHeightHandle(),
264
+ roofSegmentPitchHandle(),
265
+ ];
266
+ function resolveRoofSegmentHandles(node) {
267
+ if (node.managedByParent)
268
+ return [];
269
+ return node.roofType === 'conical' ? conicalRoofSegmentHandles : roofSegmentHandles;
270
+ }
271
+ export const roofSegmentEditContribution = {
272
+ // Mirrors the parent roof: a body-move resolves the no-angle `polygon`
273
+ // snap context (grid / lines / off), so dragging a segment shows the
274
+ // snapping chip and honours the active mode like every other structural
275
+ // move. Resize / rotate run through their own reshaping scope.
276
+ snapProfile: 'structural',
277
+ extensions: {
278
+ [PANEL_MODEL_EXTENSION]: roofSegmentPanelModel,
279
+ },
280
+ capabilities: {
281
+ paint: roofSegmentPaint,
282
+ },
283
+ // Bespoke move shared with roof / stair / stair-segment via
284
+ // `shared/move-roof-tool` — routed through `MoveTool`'s registry-
285
+ // affordance lookup rather than a hardcoded dispatcher arm.
286
+ affordanceTools: {
287
+ move: () => import('../shared/move-roof-tool.js'),
288
+ },
289
+ parametrics: roofSegmentParametrics,
290
+ handles: resolveRoofSegmentHandles,
291
+ floorplan: buildRoofSegmentFloorplan,
292
+ // Its roof draws the outline and creases from it: a live edit rebuilds that roof's plan.
293
+ floorplanAffectedIds: roofFloorplanAffectedIds,
294
+ // Body-move target. The generic Path 2 fallback writes plan coords
295
+ // directly to `position`, which is wrong here because the segment's
296
+ // position is roof-local. `roofSegmentMoveTarget` inverts the parent
297
+ // roof's transform so the segment lands at the world-plan cursor.
298
+ floorplanMoveTarget: roofSegmentMoveTarget,
299
+ // 2D drag affordances for the side resize arrows + corner rotate
300
+ // arrow emitted by `buildRoofSegmentFloorplan`.
301
+ floorplanAffordances: {
302
+ 'roof-segment-resize': roofSegmentResizeAffordance,
303
+ 'roof-segment-rotate': roofSegmentRotateAffordance,
304
+ },
305
+ };
@@ -1,364 +1,4 @@
1
- import { getActiveRoofHeight, getPitchFromActiveRoofHeight, getRoofSegmentResizePatch, RoofSegmentNode as RoofSegmentNodeSchema, snapScalar, } from '@pascal-app/core';
2
- import { getSegmentGridStep, isGridSnapActive, isMagneticSnapActive, PANEL_MODEL_EXTENSION, } from '@pascal-app/editor';
3
- import { roofFloorplanAffectedIds } from '../roof/floorplan-overrides.js';
4
- import { bearingWallThickness, catchRoofSideOnWalls, roofCatchWalls, segmentWallLine, } from '../roof/wall-catch.js';
5
- import { buildRoofSegmentFloorplan } from './floorplan.js';
6
- import { roofSegmentMoveTarget, roofSegmentResizeAffordance, roofSegmentRotateAffordance, } from './floorplan-affordances.js';
7
- import { matchRoofSegmentMeasurementFeature, roofSegmentMeasurementFeatures } from './measurement.js';
8
- import { roofSegmentPaint, roofSegmentSlots } from './paint.js';
9
- import { roofSegmentPanelModel } from './panel-model.js';
10
- import { roofSegmentParametrics } from './parametrics.js';
11
- import { RoofSegmentNode } from './schema.js';
12
- const SIDE_HANDLE_OFFSET = 0.3;
13
- const HEIGHT_HANDLE_OFFSET = 0.3;
14
- const ROOF_HANDLE_CLEARANCE = 0.15;
15
- const ROTATE_CORNER_OFFSET = 0.4;
16
- const ROTATE_RING_OFFSET = 0.08;
17
- const MIN_ROOF_DIM = 1;
18
- const MIN_WALL_HEIGHT = 0;
19
- // Clamp used for handle Y placement so arrows stay visible on flat /
20
- // wall-less segments where `wallHeight ≈ 0` would put them on the floor.
21
- const MIN_WALL_DISPLAY = 0.3;
22
- // Pitch is stored in degrees on the schema; same clamp the panel applies.
23
- const MIN_PITCH = 0;
24
- const MAX_PITCH = 85;
25
- // Floor-to-peak height of the assembled segment. Pitch drag drives this
26
- // value directly and back-solves the pitch angle via the slope-frame
27
- // math in core.
28
- function getPeakHeight(n) {
29
- return n.wallHeight + getActiveRoofHeight(n);
30
- }
31
- function getSideResizeHandleY(n, localZ) {
32
- if (n.roofType !== 'shed')
33
- return Math.max(n.wallHeight, MIN_WALL_DISPLAY) / 2;
34
- const halfDepth = Math.max(n.depth, MIN_ROOF_DIM) / 2;
35
- const roofHeight = getActiveRoofHeight(n);
36
- const t = halfDepth > 0 ? (localZ + halfDepth) / (2 * halfDepth) : 0.5;
37
- const roofY = n.wallHeight + roofHeight * (1 - Math.max(0, Math.min(1, t)));
38
- return Math.max(roofY, MIN_WALL_DISPLAY) + ROOF_HANDLE_CLEARANCE;
39
- }
40
- function roofOf(n, sceneApi) {
41
- const roof = n.parentId ? sceneApi?.get(n.parentId) : undefined;
42
- return roof?.type === 'roof' ? roof : undefined;
43
- }
44
- // A dragged side lands on a wall under it in grid and lines, ahead of the grid, as a move does.
45
- // The arrows leave `gridSnap` off so the catch sees the raw size, and grid it here when nothing
46
- // catches; Alt skips this hook, so the side follows the cursor.
47
- function snapSideOntoWalls(axis, side) {
48
- return (n, value, sceneApi) => {
49
- const grid = isGridSnapActive();
50
- if (!grid && !isMagneticSnapActive())
51
- return value;
52
- const roof = roofOf(n, sceneApi);
53
- if (roof) {
54
- const caught = catchRoofSideOnWalls({
55
- line: segmentWallLine(roof, n),
56
- axis,
57
- side,
58
- value,
59
- walls: roofCatchWalls(sceneApi.nodes(), roof.parentId),
60
- });
61
- if (caught !== null)
62
- return caught;
63
- }
64
- return grid ? snapScalar(value, getSegmentGridStep()) : value;
65
- };
66
- }
67
- // Sized onto the walls under it, a segment's gable and heel walls take their thickness; off them,
68
- // its own (written either way, so a drag back off the walls drops the thickness it previewed).
69
- function onBearingWalls(n, patch, sceneApi) {
70
- const roof = roofOf(n, sceneApi);
71
- if (!(roof && sceneApi))
72
- return patch;
73
- const thickness = bearingWallThickness(segmentWallLine(roof, { ...n, ...patch }), roofCatchWalls(sceneApi.nodes(), roof.parentId));
74
- return { ...patch, wallThickness: thickness ?? n.wallThickness };
75
- }
76
- // Width arrow on the +X (right) or -X (left) side. Asymmetric resize:
77
- // dragging one arrow grows the segment outward from its own edge while
78
- // the opposite edge stays world-fixed — the same pattern doors use
79
- // (`door/definition.ts:35-73`). The arrow's chevron points outward
80
- // (`rotationY: Math.PI` flips the left arrow's chevron to face -X) so
81
- // you read "this edge is what moves" at a glance.
82
- //
83
- // `apply` recomputes `position` so the anchored edge stays at the same
84
- // world point even when the segment is Y-rotated: project the segment's
85
- // local +X onto world via (cos r, -sin r), find the anchored edge's
86
- // world XZ from the pre-drag node, then place the new center half a
87
- // new-width away from that anchor in the same direction.
88
- function roofSegmentWidthHandle(side) {
89
- const sign = side === 'right' ? 1 : -1;
90
- return {
91
- kind: 'linear-resize',
92
- axis: 'x',
93
- // 'min' = -X edge anchored (right arrow grows the +X edge outward).
94
- // 'max' = +X edge anchored (left arrow grows the -X edge outward).
95
- anchor: side === 'right' ? 'min' : 'max',
96
- min: MIN_ROOF_DIM,
97
- connectionSnap: snapSideOntoWalls('x', sign),
98
- currentValue: (n) => n.width,
99
- apply: (initial, newWidth, sceneApi) => onBearingWalls(initial, getRoofSegmentResizePatch(initial, 'x', sign, newWidth), sceneApi),
100
- placement: {
101
- position: (n) => [sign * (n.width / 2 + SIDE_HANDLE_OFFSET), getSideResizeHandleY(n, 0), 0],
102
- // Flip the left chevron so it points outward toward -X. The
103
- // generic LinearArrow only auto-orients for axis 'z' (rotates the
104
- // chevron 90° to face +Z); +X / -X facing is up to the descriptor.
105
- rotationY: () => (side === 'right' ? 0 : Math.PI),
106
- },
107
- };
108
- }
109
- // Depth arrow on the +Z (front) or -Z (back) side. Asymmetric: the
110
- // dragged edge follows the pointer, the opposite edge stays world-fixed
111
- // — mirrors the width-handle pattern (`roofSegmentWidthHandle`). Because
112
- // segment depth feeds the pitch math via `getActiveRoofHeight`, growing
113
- // depth at constant pitch ramps the peak up too, which reads as
114
- // scaling. We hold the peak height constant by back-solving a new pitch
115
- // for the new depth (same recipe the pitch handle uses, run in
116
- // reverse). MIN/MAX_PITCH clamps cover degenerate cases where the new
117
- // depth would demand a negative or beyond-vertical pitch.
118
- function roofSegmentDepthHandle(side) {
119
- const sign = side === 'front' ? 1 : -1;
120
- return {
121
- kind: 'linear-resize',
122
- axis: 'z',
123
- anchor: side === 'front' ? 'min' : 'max',
124
- min: MIN_ROOF_DIM,
125
- connectionSnap: snapSideOntoWalls('z', sign),
126
- currentValue: (n) => n.depth,
127
- apply: (initial, newDepth, sceneApi) => onBearingWalls(initial, getRoofSegmentResizePatch(initial, 'z', sign, newDepth), sceneApi),
128
- placement: {
129
- position: (n) => [
130
- 0,
131
- getSideResizeHandleY(n, sign * (n.depth / 2)),
132
- sign * (n.depth / 2 + SIDE_HANDLE_OFFSET),
133
- ],
134
- // For axis 'z', `LinearArrow` adds -π/2 around Y so the chevron
135
- // points +Z by default. Flip the back arrow by π so it points -Z.
136
- rotationY: () => (side === 'front' ? 0 : Math.PI),
137
- },
138
- };
139
- }
140
- function conicalRoofSegmentRadiusHandle() {
141
- return {
142
- kind: 'radial-resize',
143
- axis: 'x',
144
- min: MIN_ROOF_DIM / 2,
145
- currentValue: (n) => n.width / 2,
146
- apply: (_initial, radius) => ({ width: radius * 2, depth: radius * 2 }),
147
- placement: {
148
- position: (n) => [n.width / 2 + SIDE_HANDLE_OFFSET, getSideResizeHandleY(n, 0), 0],
149
- },
150
- decoration: {
151
- kind: 'ring',
152
- radius: (n) => n.width / 2,
153
- y: (n) => getSideResizeHandleY(n, 0),
154
- },
155
- };
156
- }
157
- // Wall-height tracker — dashed vertical leader from the floor up to a
158
- // draggable cube at the wall top, centred on the footprint. Replaces
159
- // the old -X-side chevron so the wall-top control reads as "the wall is
160
- // THIS tall" instead of "there's an arrow on the side." Drag math is
161
- // unchanged: same linear-resize axis='y' / anchor='min' pipeline as
162
- // every other height handle; the `shape: 'tracker'` flag only swaps the
163
- // visual. Wall-height clamps to MIN_WALL_DISPLAY for placement so the
164
- // cube stays grabbable on flat / wall-less segments where the real
165
- // `wallHeight` is ~0 and the leader would collapse to nothing.
166
- function roofSegmentWallHeightHandle() {
167
- return {
168
- kind: 'linear-resize',
169
- axis: 'y',
170
- anchor: 'min',
171
- shape: 'tracker',
172
- min: MIN_WALL_HEIGHT,
173
- gridSnap: true,
174
- currentValue: (n) => n.wallHeight,
175
- apply: (_n, newValue) => ({ wallHeight: newValue }),
176
- placement: {
177
- position: (n) => [0, Math.max(n.wallHeight, MIN_WALL_DISPLAY), 0],
178
- },
179
- };
180
- }
181
- // Pitch arrow — drag the peak vertically to steepen / flatten the roof.
182
- // The handle exposes the floor-to-peak height as its currentValue so the
183
- // drag delta is a meters value the user can read in the dimension chip;
184
- // `apply` inverts the slope-frame math (run = primary-slope footprint
185
- // span, rise fraction depends on roofType) to recover the pitch degrees
186
- // the new peak corresponds to. Clamped to the schema range [0, 85].
187
- //
188
- // Placed at the peak's center so it visually attaches to the ridge for
189
- // gable / hip / dutch / mansard / gambrel; on shed roofs the geometric
190
- // peak sits at one edge, so the arrow floats slightly inboard of the
191
- // ridge — acceptable as a "peak-height" affordance and matches the
192
- // floorplan-center origin every other handle uses.
193
- function roofSegmentPitchHandle() {
194
- return {
195
- kind: 'linear-resize',
196
- axis: 'y',
197
- anchor: 'min',
198
- min: (n) => n.wallHeight,
199
- gridSnap: true,
200
- currentValue: (n) => getPeakHeight(n),
201
- visible: (n) => !n.managedByParent,
202
- apply: (initial, newPeakHeight) => {
203
- const roofHeight = Math.max(0, newPeakHeight - initial.wallHeight);
204
- if (initial.roofType === 'barrel')
205
- return { barrelRise: Math.max(0.01, Math.min(initial.depth / 2, roofHeight)) };
206
- const pitch = getPitchFromActiveRoofHeight({
207
- roofType: initial.roofType,
208
- width: initial.width,
209
- depth: initial.depth,
210
- roofHeight,
211
- gambrelLowerWidthRatio: initial.gambrelLowerWidthRatio,
212
- gambrelLowerHeightRatio: initial.gambrelLowerHeightRatio,
213
- mansardSteepWidthRatio: initial.mansardSteepWidthRatio,
214
- mansardSteepHeightRatio: initial.mansardSteepHeightRatio,
215
- dutchHipWidthRatio: initial.dutchHipWidthRatio,
216
- dutchHipHeightRatio: initial.dutchHipHeightRatio,
217
- });
218
- return { pitch: Math.max(MIN_PITCH, Math.min(MAX_PITCH, pitch)) };
219
- },
220
- placement: {
221
- position: (n) => [0, getPeakHeight(n) + HEIGHT_HANDLE_OFFSET, 0],
222
- },
223
- };
224
- }
225
- // Whole-segment rotation gizmo — curved two-headed arrow at the +X / +Z
226
- // corner of the footprint, guide ring traces the corner-diagonal radius
227
- // on hover / drag. Same pattern as the elevator / column rotate gizmo;
228
- // roof-segment stores rotation as a scalar (radians) so the apply patch
229
- // just writes back the new scalar.
230
- function roofSegmentRotateHandle() {
231
- return {
232
- kind: 'arc-resize',
233
- axis: 'angular',
234
- shape: 'rotate',
235
- // Negate the cursor delta to match three.js Y-rotation handedness
236
- // (cursor atan2 ticks opposite-handed from `rotation-y`).
237
- apply: (initial, delta) => ({ rotation: (initial.rotation ?? 0) - delta }),
238
- placement: {
239
- position: (n) => {
240
- const halfX = n.width / 2;
241
- const halfZ = n.depth / 2;
242
- const yMid = Math.max(n.wallHeight, MIN_WALL_DISPLAY) / 2;
243
- return [halfX, yMid, halfZ + ROTATE_CORNER_OFFSET];
244
- },
245
- rotationY: () => -Math.PI / 4,
246
- },
247
- decoration: {
248
- kind: 'ring',
249
- radius: (n) => Math.hypot(n.width / 2, n.depth / 2) + ROTATE_RING_OFFSET,
250
- y: (n) => Math.max(n.wallHeight, MIN_WALL_DISPLAY) / 2,
251
- },
252
- };
253
- }
254
- const roofSegmentHandles = [
255
- roofSegmentWidthHandle('right'),
256
- roofSegmentWidthHandle('left'),
257
- roofSegmentDepthHandle('front'),
258
- roofSegmentDepthHandle('back'),
259
- roofSegmentWallHeightHandle(),
260
- roofSegmentPitchHandle(),
261
- roofSegmentRotateHandle(),
262
- ];
263
- const conicalRoofSegmentHandles = [
264
- conicalRoofSegmentRadiusHandle(),
265
- roofSegmentWallHeightHandle(),
266
- roofSegmentPitchHandle(),
267
- ];
268
- function resolveRoofSegmentHandles(node) {
269
- if (node.managedByParent)
270
- return [];
271
- return node.roofType === 'conical' ? conicalRoofSegmentHandles : roofSegmentHandles;
272
- }
273
- /**
274
- * Roof segment — Stage A. Child of a roof node, owns the per-segment
275
- * polygon + pitch. Geometry is generated by `RoofSystem` (registered
276
- * under the parent roof's `def.system`), so the segment kind itself
277
- * only needs a renderer wrap.
278
- */
279
- export const roofSegmentDefinition = {
280
- kind: 'roof-segment',
281
- schemaVersion: 7,
282
- schema: RoofSegmentNode,
283
- category: 'structure',
284
- surfaceRole: 'roof',
285
- // Mirrors the parent roof: a body-move resolves the no-angle `polygon`
286
- // snap context (grid / lines / off), so dragging a segment shows the
287
- // snapping chip and honours the active mode like every other structural
288
- // move. Resize / rotate run through their own reshaping scope.
289
- snapProfile: 'structural',
290
- extensions: {
291
- [PANEL_MODEL_EXTENSION]: roofSegmentPanelModel,
292
- },
293
- defaults: () => {
294
- const stub = RoofSegmentNodeSchema.parse({
295
- id: 'roof-segment_default',
296
- type: 'roof-segment',
297
- });
298
- const { id: _id, type: _type, ...rest } = stub;
299
- return rest;
300
- },
301
- capabilities: {
302
- exterior: true,
303
- revealOnEdit: [
304
- 'roofType',
305
- 'width',
306
- 'depth',
307
- 'wallHeight',
308
- 'pitch',
309
- 'overhang',
310
- 'wallThickness',
311
- 'deckThickness',
312
- 'barrelRise',
313
- 'barrelSegments',
314
- 'roofSystem',
315
- 'glazing',
316
- ],
317
- paint: roofSegmentPaint,
318
- slots: (node) => roofSegmentSlots(node),
319
- selectable: { hitVolume: 'bbox' },
320
- duplicable: true,
321
- deletable: true,
322
- },
323
- // Bespoke move shared with roof / stair / stair-segment via
324
- // `shared/move-roof-tool` — routed through `MoveTool`'s registry-
325
- // affordance lookup rather than a hardcoded dispatcher arm.
326
- affordanceTools: {
327
- move: () => import('../shared/move-roof-tool.js'),
328
- },
329
- parametrics: roofSegmentParametrics,
330
- handles: resolveRoofSegmentHandles,
331
- rendersChildren: false,
332
- renderer: {
333
- kind: 'parametric',
334
- module: () => import('./renderer.js'),
335
- },
336
- floorplan: buildRoofSegmentFloorplan,
337
- // Its roof draws the outline and creases from it: a live edit rebuilds that roof's plan.
338
- floorplanAffectedIds: roofFloorplanAffectedIds,
339
- measurement: {
340
- features: (node, ctx) => roofSegmentMeasurementFeatures(node, ctx.parent?.type === 'roof' ? ctx.parent : null),
341
- match: (node, ctx, point, maxDistance) => matchRoofSegmentMeasurementFeature(node, ctx.parent?.type === 'roof' ? ctx.parent : null, point, maxDistance),
342
- },
343
- // Body-move target. The generic Path 2 fallback writes plan coords
344
- // directly to `position`, which is wrong here because the segment's
345
- // position is roof-local. `roofSegmentMoveTarget` inverts the parent
346
- // roof's transform so the segment lands at the world-plan cursor.
347
- floorplanMoveTarget: roofSegmentMoveTarget,
348
- // 2D drag affordances for the side resize arrows + corner rotate
349
- // arrow emitted by `buildRoofSegmentFloorplan`.
350
- floorplanAffordances: {
351
- 'roof-segment-resize': roofSegmentResizeAffordance,
352
- 'roof-segment-rotate': roofSegmentRotateAffordance,
353
- },
354
- presentation: {
355
- label: 'Roof Segment',
356
- description: 'A single pitched plane of a parent roof.',
357
- icon: { kind: 'url', src: '/icons/roof.webp' },
358
- paletteSection: 'structure',
359
- paletteOrder: 101,
360
- },
361
- mcp: {
362
- description: 'A single roof segment with polygon footprint + pitch.',
363
- },
364
- };
1
+ import { composeNodeDefinition } from '../definition-contributions.js';
2
+ import { roofSegmentEditContribution } from './definition.edit.js';
3
+ import { roofSegmentRenderDefinition } from './definition.render.js';
4
+ export const roofSegmentDefinition = composeNodeDefinition(roofSegmentRenderDefinition, roofSegmentEditContribution);
@@ -0,0 +1,6 @@
1
+ import type { NodeRenderDefinition } from '../definition-contributions.js';
2
+ import { RoofSegmentNode } from './schema.js';
3
+ export declare const roofSegmentRenderDefinition: NodeRenderDefinition<typeof RoofSegmentNode> & {
4
+ kind: 'roof-segment';
5
+ };
6
+ //# sourceMappingURL=definition.render.d.ts.map