@pascal-app/nodes 1.0.7 → 1.1.1

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