@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,213 @@
1
+ import { buildSolarPanelFloorplan } from './floorplan.js';
2
+ import { solarPanelParametrics } from './parametrics.js';
3
+ // Handle constants — same scheme as the skylight: edge-to-arrow-center
4
+ // offsets that need to clear half the chevron's body (~13 cm at default
5
+ // scale) plus the frame thickness before the gap reads. 0.35 m matches
6
+ // the skylight's visual cadence; rotate gizmo gets a matching offset +
7
+ // a small +X bump so it sits beside (not on) the +X corner.
8
+ const SIDE_HANDLE_OFFSET = 0.35;
9
+ const ROTATE_CORNER_OFFSET = 0.35;
10
+ const ROTATE_CORNER_X_OFFSET = 0.2;
11
+ const ROTATE_CORNER_Y_OFFSET = 0.18;
12
+ const ROTATE_RING_OFFSET = 0.06;
13
+ const MIN_PANEL_DIM = 0.1;
14
+ const MIN_FRAME_THICKNESS = 0.005;
15
+ const MIN_FRAME_DEPTH = 0.005;
16
+ // Small gap above the current frame top so the chevron stays grabbable
17
+ // when frameDepth collapses near zero and floats above the frame for
18
+ // thicker frames.
19
+ const FRAME_DEPTH_HANDLE_OFFSET = 0.15;
20
+ // Total array footprint (meters). `panelWidth` / `panelHeight` are
21
+ // per-cell dimensions; arrays multiply by columns/rows and add the
22
+ // inter-cell gaps. Handles operate on the TOTAL footprint so the
23
+ // dimension label and drag distance feel intuitive (drag the right edge
24
+ // by 1 m → array grows 1 m on that side, not 1 m per cell).
25
+ function totalArrayWidth(n) {
26
+ return n.columns * n.panelWidth + Math.max(0, n.columns - 1) * (n.gapX ?? 0);
27
+ }
28
+ function totalArrayHeight(n) {
29
+ return n.rows * n.panelHeight + Math.max(0, n.rows - 1) * (n.gapY ?? 0);
30
+ }
31
+ // Width arrows on ±X (left / right edges of the array). Asymmetric
32
+ // resize — same pattern as the skylight: anchored edge stays world-fixed,
33
+ // per-cell `panelWidth` is back-solved from the new total width, and
34
+ // `position` shifts by half the actual change along the panel's local
35
+ // +X axis (projected to segment-local via the panel's yaw). Clears
36
+ // `panelTypePreset` since the dimensions no longer match a saved preset.
37
+ function solarPanelWidthHandle(side) {
38
+ const sign = side === 'right' ? 1 : -1;
39
+ return {
40
+ kind: 'linear-resize',
41
+ axis: 'x',
42
+ anchor: side === 'right' ? 'min' : 'max',
43
+ min: MIN_PANEL_DIM,
44
+ currentValue: (n) => totalArrayWidth(n),
45
+ apply: (initial, newTotalWidth) => {
46
+ const cols = initial.columns;
47
+ const gapTotal = Math.max(0, cols - 1) * (initial.gapX ?? 0);
48
+ const newPanelWidth = Math.max(MIN_PANEL_DIM, (newTotalWidth - gapTotal) / cols);
49
+ const actualNewTotal = cols * newPanelWidth + gapTotal;
50
+ const initialTotal = totalArrayWidth(initial);
51
+ const rotY = initial.rotation ?? 0;
52
+ const armX = Math.cos(rotY);
53
+ const armZ = -Math.sin(rotY);
54
+ const anchorX = initial.position[0] - sign * (initialTotal / 2) * armX;
55
+ const anchorZ = initial.position[2] - sign * (initialTotal / 2) * armZ;
56
+ const newCenterX = anchorX + sign * (actualNewTotal / 2) * armX;
57
+ const newCenterZ = anchorZ + sign * (actualNewTotal / 2) * armZ;
58
+ return {
59
+ panelWidth: newPanelWidth,
60
+ position: [newCenterX, initial.position[1], newCenterZ],
61
+ panelTypePreset: undefined,
62
+ };
63
+ },
64
+ placement: {
65
+ position: (n) => [sign * (totalArrayWidth(n) / 2 + SIDE_HANDLE_OFFSET), 0, 0],
66
+ rotationY: () => (side === 'right' ? 0 : Math.PI),
67
+ },
68
+ portal: 'grandparent',
69
+ };
70
+ }
71
+ // Height arrows on ±Z. Same shape as width but acts on `panelHeight`
72
+ // (back-solved from new total height) and projects onto +Z instead of
73
+ // +X. The skylight-axis convention applies: +Z is the dimension along
74
+ // the roof's slope direction.
75
+ function solarPanelHeightHandle(side) {
76
+ const sign = side === 'top' ? 1 : -1;
77
+ return {
78
+ kind: 'linear-resize',
79
+ axis: 'z',
80
+ anchor: side === 'top' ? 'min' : 'max',
81
+ min: MIN_PANEL_DIM,
82
+ currentValue: (n) => totalArrayHeight(n),
83
+ apply: (initial, newTotalHeight) => {
84
+ const rws = initial.rows;
85
+ const gapTotal = Math.max(0, rws - 1) * (initial.gapY ?? 0);
86
+ const newPanelHeight = Math.max(MIN_PANEL_DIM, (newTotalHeight - gapTotal) / rws);
87
+ const actualNewTotal = rws * newPanelHeight + gapTotal;
88
+ const initialTotal = totalArrayHeight(initial);
89
+ const rotY = initial.rotation ?? 0;
90
+ // Panel-local +Z projects to segment-local (sin r, cos r) —
91
+ // orthogonal to the panel-local +X basis used for width.
92
+ const armX = Math.sin(rotY);
93
+ const armZ = Math.cos(rotY);
94
+ const anchorX = initial.position[0] - sign * (initialTotal / 2) * armX;
95
+ const anchorZ = initial.position[2] - sign * (initialTotal / 2) * armZ;
96
+ const newCenterX = anchorX + sign * (actualNewTotal / 2) * armX;
97
+ const newCenterZ = anchorZ + sign * (actualNewTotal / 2) * armZ;
98
+ return {
99
+ panelHeight: newPanelHeight,
100
+ position: [newCenterX, initial.position[1], newCenterZ],
101
+ panelTypePreset: undefined,
102
+ };
103
+ },
104
+ placement: {
105
+ position: (n) => [0, 0, sign * (totalArrayHeight(n) / 2 + SIDE_HANDLE_OFFSET)],
106
+ rotationY: () => (side === 'top' ? 0 : Math.PI),
107
+ },
108
+ portal: 'grandparent',
109
+ };
110
+ }
111
+ // Rotate gizmo at the +X+Z corner of the total array footprint, lifted
112
+ // slightly off the surface so it doesn't sink into the frame. Negate
113
+ // the cursor delta to match three.js Y-rotation handedness.
114
+ function solarPanelRotateHandle() {
115
+ return {
116
+ kind: 'arc-resize',
117
+ axis: 'angular',
118
+ shape: 'rotate',
119
+ apply: (initial, delta) => ({ rotation: (initial.rotation ?? 0) - delta }),
120
+ placement: {
121
+ position: (n) => {
122
+ const halfX = totalArrayWidth(n) / 2;
123
+ const halfZ = totalArrayHeight(n) / 2;
124
+ return [
125
+ halfX + ROTATE_CORNER_X_OFFSET,
126
+ ROTATE_CORNER_Y_OFFSET,
127
+ halfZ + ROTATE_CORNER_OFFSET,
128
+ ];
129
+ },
130
+ rotationY: () => -Math.PI / 4,
131
+ },
132
+ decoration: {
133
+ kind: 'ring',
134
+ radius: (n) => Math.hypot(totalArrayWidth(n) / 2, totalArrayHeight(n) / 2) + ROTATE_RING_OFFSET,
135
+ y: () => 0,
136
+ },
137
+ portal: 'grandparent',
138
+ };
139
+ }
140
+ // Frame-depth arrow — vertical chevron above the array, centred on the
141
+ // panel surface. Drag up to grow `frameDepth` (how far the frame sticks
142
+ // out from the surface). axis='y' / anchor='min' so the bottom of the
143
+ // frame stays pinned at the surface (Y=0 in panel-local) and the top
144
+ // follows the cursor. Clears `panelTypePreset` since dimensions no
145
+ // longer match a saved preset.
146
+ function solarPanelFrameDepthHandle() {
147
+ return {
148
+ kind: 'linear-resize',
149
+ axis: 'y',
150
+ anchor: 'min',
151
+ min: MIN_FRAME_DEPTH,
152
+ currentValue: (n) => n.frameDepth ?? 0.04,
153
+ apply: (_n, newValue) => ({
154
+ frameDepth: newValue,
155
+ panelTypePreset: undefined,
156
+ }),
157
+ placement: {
158
+ position: (n) => [0, (n.frameDepth ?? 0.04) + FRAME_DEPTH_HANDLE_OFFSET, 0],
159
+ },
160
+ portal: 'grandparent',
161
+ };
162
+ }
163
+ // Frame-thickness arrow — diagonal chevron at the -X+Z (top-left) corner,
164
+ // mirroring the skylight handle. axis='z' so dragging outward toward +Z
165
+ // grows the value; rotationY = -π/4 swings the auto-rotated +Z chevron
166
+ // to point along the -X+Z corner bisector. Clears `panelTypePreset`
167
+ // since the frame dimensions no longer match a saved preset.
168
+ function solarPanelFrameThicknessHandle() {
169
+ return {
170
+ kind: 'linear-resize',
171
+ axis: 'z',
172
+ anchor: 'min',
173
+ min: MIN_FRAME_THICKNESS,
174
+ currentValue: (n) => n.frameThickness ?? 0.04,
175
+ apply: (_n, newValue) => ({
176
+ frameThickness: newValue,
177
+ panelTypePreset: undefined,
178
+ }),
179
+ placement: {
180
+ position: (n) => [
181
+ -(totalArrayWidth(n) / 2) - SIDE_HANDLE_OFFSET,
182
+ 0,
183
+ totalArrayHeight(n) / 2 + SIDE_HANDLE_OFFSET,
184
+ ],
185
+ rotationY: () => -Math.PI / 4,
186
+ },
187
+ portal: 'grandparent',
188
+ };
189
+ }
190
+ const solarPanelHandles = [
191
+ solarPanelWidthHandle('right'),
192
+ solarPanelWidthHandle('left'),
193
+ solarPanelHeightHandle('top'),
194
+ solarPanelHeightHandle('bottom'),
195
+ solarPanelFrameDepthHandle(),
196
+ solarPanelRotateHandle(),
197
+ solarPanelFrameThicknessHandle(),
198
+ ];
199
+ export const solarPanelEditContribution = {
200
+ snapProfile: 'item',
201
+ parametrics: solarPanelParametrics,
202
+ handles: solarPanelHandles,
203
+ floorplan: buildSolarPanelFloorplan,
204
+ preview: () => import('./preview.js'),
205
+ tool: () => import('./tool.js'),
206
+ affordanceTools: {
207
+ move: () => import('./move-tool.js'),
208
+ },
209
+ toolHints: [
210
+ { key: 'Left click', label: 'Place solar panel array on roof' },
211
+ { key: 'Esc', label: 'Cancel' },
212
+ ],
213
+ };
@@ -1,263 +1,4 @@
1
- import { SolarPanelNode as SolarPanelNodeSchema, } from '@pascal-app/core';
2
- import { buildSolarPanelFloorplan } from './floorplan.js';
3
- import { solarPanelParametrics } from './parametrics.js';
4
- import { SolarPanelNode } from './schema.js';
5
- // Handle constants — same scheme as the skylight: edge-to-arrow-center
6
- // offsets that need to clear half the chevron's body (~13 cm at default
7
- // scale) plus the frame thickness before the gap reads. 0.35 m matches
8
- // the skylight's visual cadence; rotate gizmo gets a matching offset +
9
- // a small +X bump so it sits beside (not on) the +X corner.
10
- const SIDE_HANDLE_OFFSET = 0.35;
11
- const ROTATE_CORNER_OFFSET = 0.35;
12
- const ROTATE_CORNER_X_OFFSET = 0.2;
13
- const ROTATE_CORNER_Y_OFFSET = 0.18;
14
- const ROTATE_RING_OFFSET = 0.06;
15
- const MIN_PANEL_DIM = 0.1;
16
- const MIN_FRAME_THICKNESS = 0.005;
17
- const MIN_FRAME_DEPTH = 0.005;
18
- // Small gap above the current frame top so the chevron stays grabbable
19
- // when frameDepth collapses near zero and floats above the frame for
20
- // thicker frames.
21
- const FRAME_DEPTH_HANDLE_OFFSET = 0.15;
22
- // Total array footprint (meters). `panelWidth` / `panelHeight` are
23
- // per-cell dimensions; arrays multiply by columns/rows and add the
24
- // inter-cell gaps. Handles operate on the TOTAL footprint so the
25
- // dimension label and drag distance feel intuitive (drag the right edge
26
- // by 1 m → array grows 1 m on that side, not 1 m per cell).
27
- function totalArrayWidth(n) {
28
- return n.columns * n.panelWidth + Math.max(0, n.columns - 1) * (n.gapX ?? 0);
29
- }
30
- function totalArrayHeight(n) {
31
- return n.rows * n.panelHeight + Math.max(0, n.rows - 1) * (n.gapY ?? 0);
32
- }
33
- // Width arrows on ±X (left / right edges of the array). Asymmetric
34
- // resize — same pattern as the skylight: anchored edge stays world-fixed,
35
- // per-cell `panelWidth` is back-solved from the new total width, and
36
- // `position` shifts by half the actual change along the panel's local
37
- // +X axis (projected to segment-local via the panel's yaw). Clears
38
- // `panelTypePreset` since the dimensions no longer match a saved preset.
39
- function solarPanelWidthHandle(side) {
40
- const sign = side === 'right' ? 1 : -1;
41
- return {
42
- kind: 'linear-resize',
43
- axis: 'x',
44
- anchor: side === 'right' ? 'min' : 'max',
45
- min: MIN_PANEL_DIM,
46
- currentValue: (n) => totalArrayWidth(n),
47
- apply: (initial, newTotalWidth) => {
48
- const cols = initial.columns;
49
- const gapTotal = Math.max(0, cols - 1) * (initial.gapX ?? 0);
50
- const newPanelWidth = Math.max(MIN_PANEL_DIM, (newTotalWidth - gapTotal) / cols);
51
- const actualNewTotal = cols * newPanelWidth + gapTotal;
52
- const initialTotal = totalArrayWidth(initial);
53
- const rotY = initial.rotation ?? 0;
54
- const armX = Math.cos(rotY);
55
- const armZ = -Math.sin(rotY);
56
- const anchorX = initial.position[0] - sign * (initialTotal / 2) * armX;
57
- const anchorZ = initial.position[2] - sign * (initialTotal / 2) * armZ;
58
- const newCenterX = anchorX + sign * (actualNewTotal / 2) * armX;
59
- const newCenterZ = anchorZ + sign * (actualNewTotal / 2) * armZ;
60
- return {
61
- panelWidth: newPanelWidth,
62
- position: [newCenterX, initial.position[1], newCenterZ],
63
- panelTypePreset: undefined,
64
- };
65
- },
66
- placement: {
67
- position: (n) => [sign * (totalArrayWidth(n) / 2 + SIDE_HANDLE_OFFSET), 0, 0],
68
- rotationY: () => (side === 'right' ? 0 : Math.PI),
69
- },
70
- portal: 'grandparent',
71
- };
72
- }
73
- // Height arrows on ±Z. Same shape as width but acts on `panelHeight`
74
- // (back-solved from new total height) and projects onto +Z instead of
75
- // +X. The skylight-axis convention applies: +Z is the dimension along
76
- // the roof's slope direction.
77
- function solarPanelHeightHandle(side) {
78
- const sign = side === 'top' ? 1 : -1;
79
- return {
80
- kind: 'linear-resize',
81
- axis: 'z',
82
- anchor: side === 'top' ? 'min' : 'max',
83
- min: MIN_PANEL_DIM,
84
- currentValue: (n) => totalArrayHeight(n),
85
- apply: (initial, newTotalHeight) => {
86
- const rws = initial.rows;
87
- const gapTotal = Math.max(0, rws - 1) * (initial.gapY ?? 0);
88
- const newPanelHeight = Math.max(MIN_PANEL_DIM, (newTotalHeight - gapTotal) / rws);
89
- const actualNewTotal = rws * newPanelHeight + gapTotal;
90
- const initialTotal = totalArrayHeight(initial);
91
- const rotY = initial.rotation ?? 0;
92
- // Panel-local +Z projects to segment-local (sin r, cos r) —
93
- // orthogonal to the panel-local +X basis used for width.
94
- const armX = Math.sin(rotY);
95
- const armZ = Math.cos(rotY);
96
- const anchorX = initial.position[0] - sign * (initialTotal / 2) * armX;
97
- const anchorZ = initial.position[2] - sign * (initialTotal / 2) * armZ;
98
- const newCenterX = anchorX + sign * (actualNewTotal / 2) * armX;
99
- const newCenterZ = anchorZ + sign * (actualNewTotal / 2) * armZ;
100
- return {
101
- panelHeight: newPanelHeight,
102
- position: [newCenterX, initial.position[1], newCenterZ],
103
- panelTypePreset: undefined,
104
- };
105
- },
106
- placement: {
107
- position: (n) => [0, 0, sign * (totalArrayHeight(n) / 2 + SIDE_HANDLE_OFFSET)],
108
- rotationY: () => (side === 'top' ? 0 : Math.PI),
109
- },
110
- portal: 'grandparent',
111
- };
112
- }
113
- // Rotate gizmo at the +X+Z corner of the total array footprint, lifted
114
- // slightly off the surface so it doesn't sink into the frame. Negate
115
- // the cursor delta to match three.js Y-rotation handedness.
116
- function solarPanelRotateHandle() {
117
- return {
118
- kind: 'arc-resize',
119
- axis: 'angular',
120
- shape: 'rotate',
121
- apply: (initial, delta) => ({ rotation: (initial.rotation ?? 0) - delta }),
122
- placement: {
123
- position: (n) => {
124
- const halfX = totalArrayWidth(n) / 2;
125
- const halfZ = totalArrayHeight(n) / 2;
126
- return [
127
- halfX + ROTATE_CORNER_X_OFFSET,
128
- ROTATE_CORNER_Y_OFFSET,
129
- halfZ + ROTATE_CORNER_OFFSET,
130
- ];
131
- },
132
- rotationY: () => -Math.PI / 4,
133
- },
134
- decoration: {
135
- kind: 'ring',
136
- radius: (n) => Math.hypot(totalArrayWidth(n) / 2, totalArrayHeight(n) / 2) + ROTATE_RING_OFFSET,
137
- y: () => 0,
138
- },
139
- portal: 'grandparent',
140
- };
141
- }
142
- // Frame-depth arrow — vertical chevron above the array, centred on the
143
- // panel surface. Drag up to grow `frameDepth` (how far the frame sticks
144
- // out from the surface). axis='y' / anchor='min' so the bottom of the
145
- // frame stays pinned at the surface (Y=0 in panel-local) and the top
146
- // follows the cursor. Clears `panelTypePreset` since dimensions no
147
- // longer match a saved preset.
148
- function solarPanelFrameDepthHandle() {
149
- return {
150
- kind: 'linear-resize',
151
- axis: 'y',
152
- anchor: 'min',
153
- min: MIN_FRAME_DEPTH,
154
- currentValue: (n) => n.frameDepth ?? 0.04,
155
- apply: (_n, newValue) => ({
156
- frameDepth: newValue,
157
- panelTypePreset: undefined,
158
- }),
159
- placement: {
160
- position: (n) => [0, (n.frameDepth ?? 0.04) + FRAME_DEPTH_HANDLE_OFFSET, 0],
161
- },
162
- portal: 'grandparent',
163
- };
164
- }
165
- // Frame-thickness arrow — diagonal chevron at the -X+Z (top-left) corner,
166
- // mirroring the skylight handle. axis='z' so dragging outward toward +Z
167
- // grows the value; rotationY = -π/4 swings the auto-rotated +Z chevron
168
- // to point along the -X+Z corner bisector. Clears `panelTypePreset`
169
- // since the frame dimensions no longer match a saved preset.
170
- function solarPanelFrameThicknessHandle() {
171
- return {
172
- kind: 'linear-resize',
173
- axis: 'z',
174
- anchor: 'min',
175
- min: MIN_FRAME_THICKNESS,
176
- currentValue: (n) => n.frameThickness ?? 0.04,
177
- apply: (_n, newValue) => ({
178
- frameThickness: newValue,
179
- panelTypePreset: undefined,
180
- }),
181
- placement: {
182
- position: (n) => [
183
- -(totalArrayWidth(n) / 2) - SIDE_HANDLE_OFFSET,
184
- 0,
185
- totalArrayHeight(n) / 2 + SIDE_HANDLE_OFFSET,
186
- ],
187
- rotationY: () => -Math.PI / 4,
188
- },
189
- portal: 'grandparent',
190
- };
191
- }
192
- const solarPanelHandles = [
193
- solarPanelWidthHandle('right'),
194
- solarPanelWidthHandle('left'),
195
- solarPanelHeightHandle('top'),
196
- solarPanelHeightHandle('bottom'),
197
- solarPanelFrameDepthHandle(),
198
- solarPanelRotateHandle(),
199
- solarPanelFrameThicknessHandle(),
200
- ];
201
- /**
202
- * Solar panel array — a grid of photovoltaic panels mounted on a roof
203
- * segment. Position is segment-local; the surface normal stored on
204
- * the node orients the array flat to the slope.
205
- *
206
- * Three-checkbox model: custom `def.renderer` for the parent-segment
207
- * lookup + analytical surface normal fallback. No `geometry` (the
208
- * builder lives in `./geometry` and is shared with the preview), no
209
- * `system` (the orientation quaternion is computed once per render,
210
- * not per frame — see renderer notes).
211
- */
212
- export const solarPanelDefinition = {
213
- kind: 'solar-panel',
214
- schemaVersion: 1,
215
- schema: SolarPanelNode,
216
- category: 'structure',
217
- surfaceRole: 'roof',
218
- defaults: () => {
219
- const stub = SolarPanelNodeSchema.parse({
220
- id: 'solarpanel_default',
221
- type: 'solar-panel',
222
- });
223
- const { id: _id, type: _type, ...rest } = stub;
224
- return rest;
225
- },
226
- capabilities: {
227
- exterior: true,
228
- selectable: { hitVolume: 'bbox' },
229
- duplicable: true,
230
- deletable: true,
231
- // Mounts on a roof segment via `roofSegmentId`. Sits ON TOP of the
232
- // shell — no `buildCut`, just the dirty cascade so the parent
233
- // roof's merged shell rebuilds when the array moves / resizes.
234
- roofAccessory: {},
235
- },
236
- parametrics: solarPanelParametrics,
237
- handles: solarPanelHandles,
238
- floorplan: buildSolarPanelFloorplan,
239
- rendersChildren: false,
240
- renderer: {
241
- kind: 'parametric',
242
- module: () => import('./renderer.js'),
243
- },
244
- preview: () => import('./preview.js'),
245
- tool: () => import('./tool.js'),
246
- affordanceTools: {
247
- move: () => import('./move-tool.js'),
248
- },
249
- toolHints: [
250
- { key: 'Left click', label: 'Place solar panel array on roof' },
251
- { key: 'Esc', label: 'Cancel' },
252
- ],
253
- presentation: {
254
- label: 'Solar Panel',
255
- description: 'Grid of photovoltaic panels mounted on a roof segment.',
256
- icon: { kind: 'url', src: '/icons/solar-panel.webp' },
257
- paletteSection: 'structure',
258
- paletteOrder: 123,
259
- },
260
- mcp: {
261
- description: 'A solar panel array on a roof segment. rows × columns grid of individual panels with configurable size, gap, mounting (flush / tilted), and frame.',
262
- },
263
- };
1
+ import { composeNodeDefinition } from '../definition-contributions.js';
2
+ import { solarPanelEditContribution } from './definition.edit.js';
3
+ import { solarPanelRenderDefinition } from './definition.render.js';
4
+ export const solarPanelDefinition = composeNodeDefinition(solarPanelRenderDefinition, solarPanelEditContribution);
@@ -0,0 +1,6 @@
1
+ import type { NodeRenderDefinition } from '../definition-contributions.js';
2
+ import { SolarPanelNode } from './schema.js';
3
+ export declare const solarPanelRenderDefinition: NodeRenderDefinition<typeof SolarPanelNode> & {
4
+ kind: 'solar-panel';
5
+ };
6
+ //# sourceMappingURL=definition.render.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definition.render.d.ts","sourceRoot":"","sources":["../../src/solar-panel/definition.render.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAEzC,eAAO,MAAM,0BAA0B,EAAE,oBAAoB,CAAC,OAAO,cAAc,CAAC,GAAG;IACrF,IAAI,EAAE,aAAa,CAAA;CAyCpB,CAAA"}
@@ -0,0 +1,42 @@
1
+ import { SolarPanelNode as SolarPanelNodeSchema } from '@pascal-app/core';
2
+ import { SolarPanelNode } from './schema.js';
3
+ export const solarPanelRenderDefinition = {
4
+ kind: 'solar-panel',
5
+ schemaVersion: 1,
6
+ schema: SolarPanelNode,
7
+ category: 'structure',
8
+ surfaceRole: 'roof',
9
+ defaults: () => {
10
+ const stub = SolarPanelNodeSchema.parse({
11
+ id: 'solarpanel_default',
12
+ type: 'solar-panel',
13
+ });
14
+ const { id: _id, type: _type, ...rest } = stub;
15
+ return rest;
16
+ },
17
+ capabilities: {
18
+ exterior: true,
19
+ selectable: { hitVolume: 'bbox' },
20
+ duplicable: true,
21
+ deletable: true,
22
+ // Mounts on a roof segment via `roofSegmentId`. Sits ON TOP of the
23
+ // shell — no `buildCut`, just the dirty cascade so the parent
24
+ // roof's merged shell rebuilds when the array moves / resizes.
25
+ roofAccessory: {},
26
+ },
27
+ rendersChildren: false,
28
+ renderer: {
29
+ kind: 'parametric',
30
+ module: () => import('./renderer.js'),
31
+ },
32
+ presentation: {
33
+ label: 'Solar Panel',
34
+ description: 'Grid of photovoltaic panels mounted on a roof segment.',
35
+ icon: { kind: 'url', src: '/icons/solar-panel.webp' },
36
+ paletteSection: 'structure',
37
+ paletteOrder: 123,
38
+ },
39
+ mcp: {
40
+ description: 'A solar panel array on a roof segment. rows × columns grid of individual panels with configurable size, gap, mounting (flush / tilted), and frame.',
41
+ },
42
+ };
@@ -1 +1 @@
1
- {"version":3,"file":"move-tool.d.ts","sourceRoot":"","sources":["../../src/solar-panel/move-tool.tsx"],"names":[],"mappings":"AAEA,OAAO,EAML,KAAK,cAAc,EAGpB,MAAM,kBAAkB,CAAA;AAmCzB,MAAM,CAAC,OAAO,UAAU,kBAAkB,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,cAAc,CAAA;CAAE,+BAiR5E"}
1
+ {"version":3,"file":"move-tool.d.ts","sourceRoot":"","sources":["../../src/solar-panel/move-tool.tsx"],"names":[],"mappings":"AAEA,OAAO,EAML,KAAK,cAAc,EAGpB,MAAM,kBAAkB,CAAA;AAsCzB,MAAM,CAAC,OAAO,UAAU,kBAAkB,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,cAAc,CAAA;CAAE,+BAqR5E"}
@@ -1,7 +1,7 @@
1
1
  'use client';
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
3
  import { emitter, sceneRegistry, useScene, } from '@pascal-app/core';
4
- import { consumePlacementDragRelease, EDITOR_LAYER, markToolCancelConsumed, triggerSFX, useEditor, } from '@pascal-app/editor';
4
+ import { consumePlacementDragRelease, EDITOR_LAYER, isGridSnapActive, isMagneticSnapActive, markToolCancelConsumed, stripPlacementMetadataFlags, triggerSFX, useEditor, } from '@pascal-app/editor';
5
5
  import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
6
6
  import * as THREE from 'three';
7
7
  import { createRelativeRoofDrag, roofSegmentLocalToBuildingLocal, snapRelativeRoofDragTarget, } from '../shared/relative-roof-drag.js';
@@ -81,9 +81,9 @@ export default function MoveSolarPanelTool({ node }) {
81
81
  if (!rawTarget)
82
82
  return null;
83
83
  return snapRoofSurfaceNodeTarget({
84
- target: snapRelativeRoofDragTarget(rawTarget, event.nativeEvent?.shiftKey === true),
84
+ target: snapRelativeRoofDragTarget(rawTarget, event.nativeEvent?.altKey === true),
85
85
  node,
86
- bypass: event.nativeEvent?.shiftKey === true,
86
+ bypass: !isMagneticSnapActive() || event.nativeEvent?.altKey === true,
87
87
  });
88
88
  };
89
89
  const updateGhost = (event) => {
@@ -95,7 +95,9 @@ export default function MoveSolarPanelTool({ node }) {
95
95
  lastTarget = target;
96
96
  const sx = Math.round(target.localX * 20) / 20;
97
97
  const sz = Math.round(target.localZ * 20) / 20;
98
- if (event.nativeEvent?.shiftKey !== true && (sx !== lastSnapX || sz !== lastSnapZ)) {
98
+ if (isGridSnapActive() &&
99
+ event.nativeEvent?.altKey !== true &&
100
+ (sx !== lastSnapX || sz !== lastSnapZ)) {
99
101
  triggerSFX('sfx:grid-snap');
100
102
  lastSnapX = sx;
101
103
  lastSnapZ = sz;
@@ -153,7 +155,7 @@ export default function MoveSolarPanelTool({ node }) {
153
155
  // semantics so the renderer's surfaceQuat is in the correct frame.
154
156
  surfaceNormal: [segLocalNormal.x, segLocalNormal.y, segLocalNormal.z],
155
157
  visible: true,
156
- metadata: {},
158
+ metadata: stripPlacementMetadataFlags(original.metadata),
157
159
  });
158
160
  if (original.roofSegmentId && original.roofSegmentId !== targetSegmentId) {
159
161
  const oldSeg = st.nodes[original.roofSegmentId];
@@ -1,4 +1,49 @@
1
- import type { NodeDefinition } from '@pascal-app/core';
2
- import { SpawnNode } from './schema.js';
3
- export declare const spawnDefinition: NodeDefinition<typeof SpawnNode>;
1
+ export declare const spawnDefinition: import("@pascal-app/core").NodeDefinition<import("zod").ZodObject<{
2
+ object: import("zod").ZodDefault<import("zod").ZodLiteral<"node">>;
3
+ name: import("zod").ZodOptional<import("zod").ZodString>;
4
+ parentId: import("zod").ZodDefault<import("zod").ZodNullable<import("zod").ZodString>>;
5
+ visible: import("zod").ZodDefault<import("zod").ZodOptional<import("zod").ZodBoolean>>;
6
+ camera: import("zod").ZodOptional<import("zod").ZodObject<{
7
+ position: import("zod").ZodTuple<[import("zod").ZodNumber, import("zod").ZodNumber, import("zod").ZodNumber], null>;
8
+ target: import("zod").ZodTuple<[import("zod").ZodNumber, import("zod").ZodNumber, import("zod").ZodNumber], null>;
9
+ mode: import("zod").ZodDefault<import("zod").ZodEnum<{
10
+ orthographic: "orthographic";
11
+ perspective: "perspective";
12
+ }>>;
13
+ fov: import("zod").ZodOptional<import("zod").ZodNumber>;
14
+ zoom: import("zod").ZodOptional<import("zod").ZodNumber>;
15
+ }, import("zod/v4/core").$strip>>;
16
+ metadata: import("zod").ZodDefault<import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>>>;
17
+ provenance: import("zod").ZodOptional<import("zod").ZodObject<{
18
+ refs: import("zod").ZodArray<import("zod").ZodObject<{
19
+ ns: import("zod").ZodOptional<import("zod").ZodString>;
20
+ id: import("zod").ZodString;
21
+ role: import("zod").ZodOptional<import("zod").ZodEnum<{
22
+ absorbed: "absorbed";
23
+ alias: "alias";
24
+ derived: "derived";
25
+ piece: "piece";
26
+ primary: "primary";
27
+ }>>;
28
+ }, import("zod/v4/core").$strip>>;
29
+ lineage: import("zod").ZodOptional<import("zod").ZodObject<{
30
+ op: import("zod").ZodEnum<{
31
+ attach: "attach";
32
+ convert: "convert";
33
+ duplicate: "duplicate";
34
+ import: "import";
35
+ "make-independent": "make-independent";
36
+ merge: "merge";
37
+ promote: "promote";
38
+ split: "split";
39
+ }>;
40
+ fromIds: import("zod").ZodArray<import("zod").ZodString>;
41
+ }, import("zod/v4/core").$strip>>;
42
+ }, import("zod/v4/core").$strip>>;
43
+ id: import("zod").ZodDefault<import("zod").ZodTemplateLiteral<`spawn_${string}`>>;
44
+ type: import("zod").ZodDefault<import("zod").ZodLiteral<"spawn">>;
45
+ position: import("zod").ZodDefault<import("zod").ZodTuple<[import("zod").ZodNumber, import("zod").ZodNumber, import("zod").ZodNumber], null>>;
46
+ rotation: import("zod").ZodDefault<import("zod").ZodNumber>;
47
+ supportSlabId: import("zod").ZodOptional<import("zod").ZodString>;
48
+ }, import("zod/v4/core").$strip>>;
4
49
  //# sourceMappingURL=definition.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/spawn/definition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAoB,cAAc,EAA8B,MAAM,kBAAkB,CAAA;AAKpG,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AA0CpC,eAAO,MAAM,eAAe,EAAE,cAAc,CAAC,OAAO,SAAS,CAwE5D,CAAA"}
1
+ {"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/spawn/definition.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iCAAsE,CAAA"}
@@ -0,0 +1,4 @@
1
+ import type { NodeEditContribution } from '../definition-contributions.js';
2
+ import type { SpawnNode } from './schema.js';
3
+ export declare const spawnEditContribution: NodeEditContribution<typeof SpawnNode>;
4
+ //# sourceMappingURL=definition.edit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definition.edit.d.ts","sourceRoot":"","sources":["../../src/spawn/definition.edit.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAKvE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AA8CzC,eAAO,MAAM,qBAAqB,EAAE,oBAAoB,CAAC,OAAO,SAAS,CAsBxE,CAAA"}