@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
@@ -2,10 +2,12 @@
2
2
  import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { COLUMN_BASE_DEFAULT, COLUMN_CAPITAL_DEFAULT, COLUMN_FRAME_DEFAULT, COLUMN_SHAFT_DEFAULT, collectDescendants, createSceneApi, useLiveNodeOverrides, useLiveTransforms, useRegistry, useScene, } from '@pascal-app/core';
4
4
  import { baseMaterial, createColumnBoxGeometry, createColumnCylinderGeometry, createColumnSphereGeometry, createColumnTorusGeometry, createMaterial, createMaterialFromPresetRef, createSurfaceRoleMaterial, NodeRenderer, resolveMaterialRef, resolveSlotDefaultMaterial, useNodeEvents, useViewer, } from '@pascal-app/viewer';
5
- import { createContext, useContext, useEffect, useMemo, useRef } from 'react';
5
+ import { createContext, memo, useContext, useEffect, useMemo, useRef } from 'react';
6
6
  import { BufferGeometry, Float32BufferAttribute } from 'three';
7
7
  import { ScriptedOpeningModel } from '../shared/scripted-opening.js';
8
- import { columnCapitalBlocks, columnShaftLayout, getSegments, getShaftScaleAt, getShaftSegmentCount, getShaftTwistRadians, } from './shape.js';
8
+ import { createColumnBandGeometry, createColumnPanelGeometry, createColumnShaftGeometry, createColumnSpiralGeometry, } from './geometry.js';
9
+ import { ColumnInspectorOverlay } from './inspector-highlight.js';
10
+ import { columnCapitalBlocks, columnShaftLayout, getSegments } from './shape.js';
9
11
  const DEFAULT_COLUMN_MATERIAL = baseMaterial();
10
12
  const DEFAULT_COLUMN_SLOT_MATERIALS = createSingleColumnMaterialMap(DEFAULT_COLUMN_MATERIAL);
11
13
  const ColumnMaterialContext = createContext(DEFAULT_COLUMN_SLOT_MATERIALS);
@@ -38,7 +40,7 @@ function createLegacyColumnMaterial({ material, materialPreset, shading, texture
38
40
  return createMaterial(material, shading);
39
41
  return baseMaterial(shading);
40
42
  }
41
- function resolveColumnSlotMaterial({ colorPreset, legacyMaterial, node, sceneMaterials, shading, slotId, textures, }) {
43
+ export function resolveColumnSlotMaterial({ colorPreset, legacyMaterial, node, sceneMaterials, shading, slotId, textures, }) {
42
44
  if (!textures)
43
45
  return createSurfaceRoleMaterial('wall', colorPreset);
44
46
  const slotRef = node.slots?.[slotId];
@@ -113,6 +115,7 @@ function MappedBox({ depth, height, position, rotation, softenEdges = true, widt
113
115
  return null;
114
116
  return createColumnBoxGeometry(width, height, depth, bevelRadius);
115
117
  }, [bevelRadius, depth, height, width]);
118
+ useEffect(() => () => geometry?.dispose(), [geometry]);
116
119
  if (!geometry)
117
120
  return null;
118
121
  return (_jsxs("mesh", { castShadow: true, dispose: null, position: position, receiveShadow: true, rotation: rotation, userData: { slotId }, children: [_jsx("primitive", { attach: "geometry", dispose: null, object: geometry }), _jsx(ColumnMaterial, {})] }));
@@ -197,14 +200,15 @@ function FlatEndedBeam({ depth, end, start, width, }) {
197
200
  geometry.computeVertexNormals();
198
201
  return geometry;
199
202
  }, [depth, length, start, end, width]);
203
+ useEffect(() => () => geometry?.dispose(), [geometry]);
200
204
  if (!geometry)
201
205
  return null;
202
206
  return (_jsxs("mesh", { castShadow: true, dispose: null, receiveShadow: true, userData: { slotId }, children: [_jsx("primitive", { attach: "geometry", dispose: null, object: geometry }), _jsx(ColumnMaterial, {})] }));
203
207
  }
204
208
  function AFrameSupport({ node }) {
205
209
  const height = Math.max(0.2, node.height);
206
- const braceWidth = clamp(node.braceWidth ?? node.width, 0.04, 1.6);
207
- const braceDepth = clamp(node.braceDepth ?? node.depth, 0.04, 1.6);
210
+ const braceWidth = Math.max(0.04, node.braceWidth ?? node.width);
211
+ const braceDepth = Math.max(0.04, node.braceDepth ?? node.depth);
208
212
  const bottomSpread = Math.max(0.2, node.braceBottomSpread ?? Math.max(node.width * 3, 1.2));
209
213
  const topSpread = clamp(node.braceTopSpread ?? 0.12, 0, bottomSpread);
210
214
  const bottomY = 0;
@@ -222,8 +226,8 @@ function AFrameSupport({ node }) {
222
226
  }
223
227
  function YFrameSupport({ node }) {
224
228
  const height = Math.max(0.2, node.height);
225
- const braceWidth = clamp(node.braceWidth ?? node.width, 0.04, 1.6);
226
- const braceDepth = clamp(node.braceDepth ?? node.depth, 0.04, 1.6);
229
+ const braceWidth = Math.max(0.04, node.braceWidth ?? node.width);
230
+ const braceDepth = Math.max(0.04, node.braceDepth ?? node.depth);
227
231
  const topSpread = Math.max(0.2, node.braceTopSpread ?? 0.9);
228
232
  const splitY = height * 0.56;
229
233
  const foot = [0, 0, 0];
@@ -239,8 +243,8 @@ function YFrameSupport({ node }) {
239
243
  }
240
244
  function VFrameSupport({ node }) {
241
245
  const height = Math.max(0.2, node.height);
242
- const braceWidth = clamp(node.braceWidth ?? node.width, 0.04, 1.6);
243
- const braceDepth = clamp(node.braceDepth ?? node.depth, 0.04, 1.6);
246
+ const braceWidth = Math.max(0.04, node.braceWidth ?? node.width);
247
+ const braceDepth = Math.max(0.04, node.braceDepth ?? node.depth);
244
248
  const topSpread = Math.max(0.2, node.braceTopSpread ?? 1);
245
249
  const foot = [0, 0, 0];
246
250
  const leftTop = [-topSpread / 2, height, 0];
@@ -254,8 +258,8 @@ function VFrameSupport({ node }) {
254
258
  }
255
259
  function XBraceSupport({ node }) {
256
260
  const height = Math.max(0.2, node.height);
257
- const braceWidth = clamp(node.braceWidth ?? node.width, 0.04, 1.6);
258
- const braceDepth = clamp(node.braceDepth ?? node.depth, 0.04, 1.6);
261
+ const braceWidth = Math.max(0.04, node.braceWidth ?? node.width);
262
+ const braceDepth = Math.max(0.04, node.braceDepth ?? node.depth);
259
263
  const bottomSpread = Math.max(0.2, node.braceBottomSpread ?? 1);
260
264
  const topSpread = Math.max(0.2, node.braceTopSpread ?? 1);
261
265
  const leftBottom = [-bottomSpread / 2, 0, 0];
@@ -271,8 +275,8 @@ function XBraceSupport({ node }) {
271
275
  }
272
276
  function KBraceSupport({ node }) {
273
277
  const height = Math.max(0.2, node.height);
274
- const braceWidth = clamp(node.braceWidth ?? node.width, 0.04, 1.6);
275
- const braceDepth = clamp(node.braceDepth ?? node.depth, 0.04, 1.6);
278
+ const braceWidth = Math.max(0.04, node.braceWidth ?? node.width);
279
+ const braceDepth = Math.max(0.04, node.braceDepth ?? node.depth);
276
280
  const spread = Math.max(0.2, Math.max(node.braceBottomSpread ?? 1, node.braceTopSpread ?? 1));
277
281
  const leftBottom = [-spread / 2, 0, 0];
278
282
  const leftTop = [-spread / 2, height, 0];
@@ -286,8 +290,8 @@ function KBraceSupport({ node }) {
286
290
  }
287
291
  function SingleStrutSupport({ node }) {
288
292
  const height = Math.max(0.2, node.height);
289
- const braceWidth = clamp(node.braceWidth ?? node.width, 0.04, 1.6);
290
- const braceDepth = clamp(node.braceDepth ?? node.depth, 0.04, 1.6);
293
+ const braceWidth = Math.max(0.04, node.braceWidth ?? node.width);
294
+ const braceDepth = Math.max(0.04, node.braceDepth ?? node.depth);
291
295
  const spread = Math.max(0.2, Math.max(node.braceBottomSpread ?? 1, node.braceTopSpread ?? 1));
292
296
  const bottom = [-spread / 2, 0, 0];
293
297
  const top = [spread / 2, height, 0];
@@ -298,8 +302,8 @@ function SingleStrutSupport({ node }) {
298
302
  }
299
303
  function TripodSupport({ node }) {
300
304
  const height = Math.max(0.2, node.height);
301
- const braceWidth = clamp(node.braceWidth ?? node.width, 0.04, 1.6);
302
- const braceDepth = clamp(node.braceDepth ?? node.depth, 0.04, 1.6);
305
+ const braceWidth = Math.max(0.04, node.braceWidth ?? node.width);
306
+ const braceDepth = Math.max(0.04, node.braceDepth ?? node.depth);
303
307
  const width = Math.max(0.2, node.braceBottomSpread ?? 1.1);
304
308
  const depth = Math.max(0.2, node.braceTopSpread ?? 1.1);
305
309
  const top = [0, height, 0];
@@ -315,8 +319,8 @@ function TripodSupport({ node }) {
315
319
  }
316
320
  function TrestleSupport({ node }) {
317
321
  const height = Math.max(0.2, node.height);
318
- const braceWidth = clamp(node.braceWidth ?? node.width, 0.04, 1.6);
319
- const braceDepth = clamp(node.braceDepth ?? node.depth, 0.04, 1.6);
322
+ const braceWidth = Math.max(0.04, node.braceWidth ?? node.width);
323
+ const braceDepth = Math.max(0.04, node.braceDepth ?? node.depth);
320
324
  const width = Math.max(0.2, node.braceBottomSpread ?? 1.2);
321
325
  const depth = Math.max(0.2, node.braceTopSpread ?? 1);
322
326
  const zPositions = [-depth / 2, depth / 2];
@@ -337,8 +341,8 @@ function TrestleSupport({ node }) {
337
341
  }
338
342
  function PortalFrameSupport({ node }) {
339
343
  const height = Math.max(0.2, node.height);
340
- const braceWidth = clamp(node.braceWidth ?? node.width, 0.04, 1.6);
341
- const braceDepth = clamp(node.braceDepth ?? node.depth, 0.04, 1.6);
344
+ const braceWidth = Math.max(0.04, node.braceWidth ?? node.width);
345
+ const braceDepth = Math.max(0.04, node.braceDepth ?? node.depth);
342
346
  const width = Math.max(0.2, node.braceBottomSpread ?? 1.4);
343
347
  const leftBottom = [-width / 2, 0, 0];
344
348
  const rightBottom = [width / 2, 0, 0];
@@ -351,8 +355,8 @@ function PortalFrameSupport({ node }) {
351
355
  }
352
356
  function BoxFrameSupport({ node }) {
353
357
  const height = Math.max(0.2, node.height);
354
- const braceWidth = clamp(node.braceWidth ?? node.width, 0.04, 1.6);
355
- const braceDepth = clamp(node.braceDepth ?? node.depth, 0.04, 1.6);
358
+ const braceWidth = Math.max(0.04, node.braceWidth ?? node.width);
359
+ const braceDepth = Math.max(0.04, node.braceDepth ?? node.depth);
356
360
  const width = Math.max(0.2, node.braceBottomSpread ?? 1.4);
357
361
  const depth = Math.max(0.2, node.braceTopSpread ?? 1);
358
362
  const corners = [
@@ -381,6 +385,7 @@ function MappedCylinder({ height, position, radius, radiusBottom = radius, radiu
381
385
  segments,
382
386
  });
383
387
  }, [height, radius, radiusBottom, radiusTop, radiusX, radiusZ, segments]);
388
+ useEffect(() => () => geometry?.dispose(), [geometry]);
384
389
  if (!geometry)
385
390
  return null;
386
391
  return (_jsxs("mesh", { castShadow: true, dispose: null, position: position, receiveShadow: true, rotation: rotation, userData: { slotId }, children: [_jsx("primitive", { attach: "geometry", dispose: null, object: geometry }), _jsx(ColumnMaterial, {})] }));
@@ -399,6 +404,7 @@ function MappedCone({ height, position, radiusX, radiusZ = radiusX, rotation, se
399
404
  segments,
400
405
  });
401
406
  }, [height, radiusX, radiusZ, segments]);
407
+ useEffect(() => () => geometry?.dispose(), [geometry]);
402
408
  if (!geometry)
403
409
  return null;
404
410
  return (_jsxs("mesh", { castShadow: true, dispose: null, position: position, receiveShadow: true, rotation: rotation, userData: { slotId }, children: [_jsx("primitive", { attach: "geometry", dispose: null, object: geometry }), _jsx(ColumnMaterial, {})] }));
@@ -410,6 +416,7 @@ function MappedSphere({ position, radius, segments = 10, verticalSegments = 8, }
410
416
  return null;
411
417
  return createColumnSphereGeometry(radius, segments, verticalSegments);
412
418
  }, [radius, segments, verticalSegments]);
419
+ useEffect(() => () => geometry?.dispose(), [geometry]);
413
420
  if (!geometry)
414
421
  return null;
415
422
  return (_jsxs("mesh", { castShadow: true, dispose: null, position: position, receiveShadow: true, userData: { slotId }, children: [_jsx("primitive", { attach: "geometry", dispose: null, object: geometry }), _jsx(ColumnMaterial, {})] }));
@@ -428,6 +435,7 @@ function MappedTorus({ arc, position, ringRadius, rotation, scaleX, scaleY, scal
428
435
  tubeRadius,
429
436
  });
430
437
  }, [arc, ringRadius, scaleX, scaleY, scaleZ, tubeRadius]);
438
+ useEffect(() => () => geometry?.dispose(), [geometry]);
431
439
  if (!geometry)
432
440
  return null;
433
441
  return (_jsxs("mesh", { castShadow: true, dispose: null, position: position, receiveShadow: true, rotation: rotation, userData: { slotId }, children: [_jsx("primitive", { attach: "geometry", dispose: null, object: geometry }), _jsx(ColumnMaterial, {})] }));
@@ -435,29 +443,48 @@ function MappedTorus({ arc, position, ringRadius, rotation, scaleX, scaleY, scal
435
443
  function SquareBlock({ y, height, width, depth, softenEdges = true, }) {
436
444
  return (_jsx(MappedBox, { depth: depth, height: height, position: [0, y + height / 2, 0], softenEdges: softenEdges, width: width }));
437
445
  }
438
- function RoundBlock({ x = 0, y, z = 0, height, radius, segments = 32, }) {
439
- return (_jsx(MappedCylinder, { height: height, position: [x, y + height / 2, z], radius: radius, segments: segments }));
440
- }
441
- function RoundedRectangleShaftSegment({ y, height, width, depth, cornerRadius, }) {
442
- if (height <= 0)
443
- return null;
444
- const radius = Math.min(Math.max(0, cornerRadius), Math.min(width, depth) * 0.45);
445
- if (radius <= 0.001) {
446
- return _jsx(SquareBlock, { depth: depth, height: height, width: width, y: y });
447
- }
448
- const innerWidth = Math.max(0, width - radius * 2);
449
- const innerDepth = Math.max(0, depth - radius * 2);
450
- const cornerX = width / 2 - radius;
451
- const cornerZ = depth / 2 - radius;
452
- return (_jsxs("group", { children: [innerWidth > 0 && (_jsx(SquareBlock, { depth: depth, height: height, softenEdges: false, width: innerWidth, y: y })), innerDepth > 0 && (_jsx(SquareBlock, { depth: innerDepth, height: height, softenEdges: false, width: width, y: y })), [
453
- [cornerX, cornerZ],
454
- [cornerX, -cornerZ],
455
- [-cornerX, cornerZ],
456
- [-cornerX, -cornerZ],
457
- ].map(([x, z], index) => (_jsx(RoundBlock, { height: height, radius: radius, segments: 18, x: x, y: y, z: z }, index)))] }));
446
+ function RoundBlock({ y, height, radius, radiusX = 1, radiusZ = 1, segments = 32, x = 0, z = 0, }) {
447
+ const edgeSoftness = useContext(ColumnEdgeSoftnessContext);
448
+ const slotId = useContext(ColumnSlotContext);
449
+ const geometry = useMemo(() => {
450
+ const geometry = createColumnShaftGeometry({
451
+ crossSection: segments === 8 ? 'octagonal' : segments === 16 ? 'sixteen-sided' : 'round',
452
+ radius,
453
+ width: radius * 2,
454
+ depth: radius * 2,
455
+ shaftProfile: 'straight',
456
+ shaftTaper: 0,
457
+ shaftBulge: 0,
458
+ shaftStartScale: 1,
459
+ shaftEndScale: 1,
460
+ shaftSegmentCount: 1,
461
+ shaftTwistStep: 0,
462
+ shaftCornerRadius: 0,
463
+ edgeSoftness: edgeSoftness / Math.max(1, radiusX, radiusZ),
464
+ fluteCount: 0,
465
+ fluteWidth: 0.02,
466
+ fluteDepth: 0,
467
+ shaftDetail: 'none',
468
+ }, height);
469
+ geometry.scale(radiusX, 1, radiusZ);
470
+ const uv = geometry.getAttribute('uv');
471
+ const circumferenceRatio = Math.sqrt((radiusX ** 2 + radiusZ ** 2) / 2);
472
+ const positions = geometry.getAttribute('position'), normals = geometry.getAttribute('normal');
473
+ for (let i = 0; i < uv.count; i++) {
474
+ if (Math.abs(normals.getY(i)) > 0.99)
475
+ uv.setXY(i, positions.getX(i), positions.getZ(i));
476
+ else
477
+ uv.setX(i, uv.getX(i) * circumferenceRatio);
478
+ }
479
+ geometry.setAttribute('uv2', uv.clone());
480
+ return geometry;
481
+ }, [radius, radiusX, radiusZ, segments, height, edgeSoftness]);
482
+ useEffect(() => () => geometry.dispose(), [geometry]);
483
+ return (_jsxs("mesh", { castShadow: true, receiveShadow: true, dispose: null, position: [x, y, z], userData: { slotId }, children: [_jsx("primitive", { attach: "geometry", object: geometry, dispose: null }), _jsx(ColumnMaterial, {})] }));
458
484
  }
459
485
  function OvalBlock({ y, height, width, depth, segments = 32, }) {
460
- return (_jsx(MappedCylinder, { height: height, position: [0, y + height / 2, 0], radius: 1, radiusX: width / 2, radiusZ: depth / 2, segments: segments }));
486
+ const radius = Math.min(width, depth) / 2;
487
+ return (_jsx(RoundBlock, { y: y, height: height, radius: radius, radiusX: width / (radius * 2), radiusZ: depth / (radius * 2), segments: segments }));
461
488
  }
462
489
  function ColumnBlock({ node, y, height, scale = 1, }) {
463
490
  if (height <= 0)
@@ -470,23 +497,50 @@ function ColumnBlock({ node, y, height, scale = 1, }) {
470
497
  }
471
498
  return _jsx(RoundBlock, { height: height, radius: radius, segments: getSegments(node), y: y });
472
499
  }
473
- function TaperedRoundShaft({ node, y, height }) {
474
- const segmentCount = getShaftSegmentCount(node);
475
- const segmentHeight = height / segmentCount;
476
- return (_jsx("group", { children: Array.from({ length: segmentCount }, (_, index) => {
477
- const t = (index + 0.5) / segmentCount;
478
- const profileScale = getShaftScaleAt(node, t);
479
- return (_jsx("group", { rotation: [0, getShaftTwistRadians(node, index), 0], children: _jsx(RoundBlock, { height: segmentHeight * 1.015, radius: node.radius * profileScale, segments: getSegments(node), y: y + index * segmentHeight }) }, index));
480
- }) }));
481
- }
482
- function TaperedSquareShaft({ node, y, height }) {
483
- const segmentCount = getShaftSegmentCount(node);
484
- const segmentHeight = height / segmentCount;
485
- return (_jsx("group", { children: Array.from({ length: segmentCount }, (_, index) => {
486
- const t = (index + 0.5) / segmentCount;
487
- const profileScale = getShaftScaleAt(node, t);
488
- return (_jsx("group", { rotation: [0, getShaftTwistRadians(node, index), 0], children: _jsx(RoundedRectangleShaftSegment, { cornerRadius: (node.shaftCornerRadius ?? 0.035) * profileScale, depth: node.depth * profileScale, height: segmentHeight * 1.015, width: node.width * profileScale, y: y + index * segmentHeight }) }, index));
489
- }) }));
500
+ function MergedShaft({ node, y, height }) {
501
+ const { crossSection, radius, width, depth, shaftProfile, shaftTaper, shaftBulge, shaftStartScale, shaftEndScale, shaftSegmentCount, shaftTwistStep, shaftCornerRadius, edgeSoftness, fluteCount, fluteWidth, fluteDepth, shaftDetail, } = node;
502
+ const geometry = useMemo(() => createColumnShaftGeometry({
503
+ crossSection,
504
+ radius,
505
+ width,
506
+ depth,
507
+ shaftProfile,
508
+ shaftTaper,
509
+ shaftBulge,
510
+ shaftStartScale,
511
+ shaftEndScale,
512
+ shaftSegmentCount,
513
+ shaftTwistStep,
514
+ shaftCornerRadius,
515
+ edgeSoftness,
516
+ fluteCount,
517
+ fluteWidth,
518
+ fluteDepth,
519
+ shaftDetail,
520
+ }, height), [
521
+ height,
522
+ crossSection,
523
+ radius,
524
+ width,
525
+ depth,
526
+ shaftProfile,
527
+ shaftTaper,
528
+ shaftBulge,
529
+ shaftStartScale,
530
+ shaftEndScale,
531
+ shaftSegmentCount,
532
+ shaftTwistStep,
533
+ shaftCornerRadius,
534
+ edgeSoftness,
535
+ fluteCount,
536
+ fluteWidth,
537
+ fluteDepth,
538
+ shaftDetail,
539
+ ]);
540
+ useEffect(() => () => geometry?.dispose(), [geometry]);
541
+ if (!geometry)
542
+ return null;
543
+ return (_jsxs("mesh", { castShadow: true, receiveShadow: true, dispose: null, position: [0, y, 0], userData: { slotId: 'shaft' }, children: [_jsx("primitive", { attach: "geometry", object: geometry, dispose: null }), _jsx(ColumnMaterial, {})] }));
490
544
  }
491
545
  function Shaft({ node, y, height }) {
492
546
  if (height <= 0)
@@ -501,12 +555,7 @@ function Shaft({ node, y, height }) {
501
555
  [0, -offset],
502
556
  ].map(([x, z], index) => (_jsx(RoundBlock, { height: height, radius: sideRadius, segments: 16, x: x, y: y, z: z }, `${x}-${z}-${index}`)))] }));
503
557
  }
504
- if (node.crossSection === 'round' ||
505
- node.crossSection === 'octagonal' ||
506
- node.crossSection === 'sixteen-sided') {
507
- return _jsx(TaperedRoundShaft, { height: height, node: node, y: y });
508
- }
509
- return _jsx(TaperedSquareShaft, { height: height, node: node, y: y });
558
+ return _jsx(MergedShaft, { height: height, node: node, y: y });
510
559
  }
511
560
  function Base({ node, height }) {
512
561
  if (height <= 0)
@@ -530,7 +579,7 @@ function Base({ node, height }) {
530
579
  const t = index / Math.max(1, tierCount - 1);
531
580
  const widthScaleAt = Math.max(0.5, widthScale - t * stepSpread);
532
581
  const depthScaleAt = Math.max(0.5, depthScale - t * stepSpread);
533
- return (_jsx(SquareBlock, { depth: node.depth * depthScaleAt, height: tierHeight * 1.01, width: node.width * widthScaleAt, y: index * tierHeight }, index));
582
+ return (_jsx(SquareBlock, { depth: node.depth * depthScaleAt, height: tierHeight, width: node.width * widthScaleAt, y: index * tierHeight }, index));
534
583
  }) }));
535
584
  }
536
585
  if (baseStyle === 'round-rings') {
@@ -556,7 +605,7 @@ function Base({ node, height }) {
556
605
  height * 0.58,
557
606
  Math.sin(angle) * baseRadius * 0.86,
558
607
  ], radius: ribRadius, rotation: [0, -angle, 0], segments: 6 }, index));
559
- }), _jsx(RoundBlock, { height: height * 0.16, radius: baseRadius * 0.72, segments: 32, y: height * 0.82 })] }));
608
+ }), _jsx(RoundBlock, { height: height * 0.18, radius: baseRadius * 0.72, segments: 32, y: height * 0.82 })] }));
560
609
  }
561
610
  if (baseStyle === 'panelled-pedestal') {
562
611
  const inset = node.basePanelInset ?? 0.02;
@@ -583,140 +632,66 @@ function BaseCarvings({ node, height }) {
583
632
  return (_jsx(MappedCone, { height: height * 0.28, position: [Math.cos(angle) * radius, y, Math.sin(angle) * radius], radiusX: 0.014, radiusZ: 0.01, rotation: [0.36, -angle, 0], segments: 5 }, index));
584
633
  }) }));
585
634
  }
586
- function Rings({ node, shaftY, shaftHeight, }) {
587
- if (node.ringCount <= 0 || shaftHeight <= 0)
588
- return null;
589
- const ringPlacement = node.ringPlacement ?? 'ends';
590
- const ringSpread = Math.min(0.45, Math.max(0.04, node.ringSpread ?? 0.16));
591
- const ringHeight = Math.min(node.ringThickness ?? 0.055, shaftHeight / Math.max(8, node.ringCount * 3));
592
- const rings = Array.from({ length: node.ringCount }, (_, index) => {
593
- const pairIndex = Math.floor(index / 2);
594
- const nearTop = index % 2 === 1;
595
- const pairCount = Math.ceil(node.ringCount / 2);
596
- const pairT = pairCount <= 1 ? 0 : pairIndex / (pairCount - 1);
597
- const offset = Math.min(0.48, 0.06 + pairT * Math.max(0, ringSpread - 0.06));
598
- const oneSideT = 0.06 + (index / Math.max(1, node.ringCount - 1)) * Math.max(0, ringSpread - 0.06);
599
- const t = ringPlacement === 'even'
600
- ? (index + 1) / (node.ringCount + 1)
601
- : ringPlacement === 'top'
602
- ? 1 - Math.min(0.48, oneSideT)
603
- : ringPlacement === 'bottom'
604
- ? Math.min(0.48, oneSideT)
605
- : nearTop
606
- ? 1 - offset
607
- : offset;
608
- return {
609
- scale: Math.min(1.4, getShaftScaleAt(node, t) + 0.12),
610
- y: shaftY + shaftHeight * t - ringHeight / 2,
611
- };
612
- }).sort((a, b) => a.y - b.y);
613
- return (_jsx("group", { children: rings.map((ring, index) => (_jsx(ColumnBlock, { height: ringHeight, node: node, scale: ring.scale, y: ring.y }, index))) }));
614
- }
615
- function LatheBands({ node, shaftY, shaftHeight, }) {
616
- const latheRingCount = Math.max(node.latheRingCount ?? 0, node.shaftDetail === 'lathe-turned' ? 8 : 0);
617
- if (latheRingCount <= 0 || shaftHeight <= 0)
618
- return null;
619
- const placement = node.latheRingSpacing ?? 'ends';
620
- const bandHeight = Math.min(0.04, shaftHeight / Math.max(12, latheRingCount * 3));
621
- const bands = Array.from({ length: latheRingCount }, (_, index) => {
622
- const pairIndex = Math.floor(index / 2);
623
- const nearTop = index % 2 === 1;
624
- const offset = Math.min(0.48, 0.1 + pairIndex * 0.04);
625
- const t = placement === 'even'
626
- ? (index + 1) / (latheRingCount + 1)
627
- : placement === 'top'
628
- ? 1 - Math.min(0.48, 0.08 + index * 0.04)
629
- : placement === 'bottom'
630
- ? Math.min(0.48, 0.08 + index * 0.04)
631
- : nearTop
632
- ? 1 - offset
633
- : offset;
634
- return shaftY + shaftHeight * t - bandHeight / 2;
635
- }).sort((a, b) => a - b);
636
- return (_jsx("group", { children: bands.map((y, index) => (_jsx(ColumnBlock, { height: bandHeight, node: node, scale: 0.82 + (index % 2) * 0.08, y: y }, index))) }));
637
- }
638
- function Flutes({ node, shaftY, shaftHeight, }) {
639
- const fluteCount = Math.max(node.fluteCount, node.shaftDetail === 'fluted' ? 16 : 0);
640
- if (fluteCount <= 0 || shaftHeight <= 0 || node.crossSection !== 'round')
635
+ const detailFields = [
636
+ 'crossSection',
637
+ 'radius',
638
+ 'width',
639
+ 'depth',
640
+ 'shaftProfile',
641
+ 'shaftTaper',
642
+ 'shaftBulge',
643
+ 'shaftStartScale',
644
+ 'shaftEndScale',
645
+ 'shaftSegmentCount',
646
+ 'shaftTwistStep',
647
+ 'shaftCornerRadius',
648
+ 'edgeSoftness',
649
+ 'fluteCount',
650
+ 'fluteWidth',
651
+ 'fluteDepth',
652
+ 'shaftDetail',
653
+ 'spiralRibCount',
654
+ 'spiralTwist',
655
+ 'panelCount',
656
+ 'style',
657
+ 'panelShape',
658
+ 'panelInsetDepth',
659
+ 'ringCount',
660
+ 'ringSpread',
661
+ 'ringThickness',
662
+ 'ringPlacement',
663
+ 'latheRingCount',
664
+ 'latheRingSpacing',
665
+ 'lowerBandEnabled',
666
+ 'lowerBandHeight',
667
+ 'lowerBandCarvingLevel',
668
+ 'carvingPlacement',
669
+ ];
670
+ const ShaftDetails = memo(function ShaftDetails(props) {
671
+ return (_jsxs(_Fragment, { children: [_jsx(ShaftBands, { ...props }), _jsx(DravidianShaftPanels, { ...props }), _jsx(SpiralRibs, { ...props })] }));
672
+ }, (a, b) => a.shaftHeight === b.shaftHeight &&
673
+ a.shaftY === b.shaftY &&
674
+ detailFields.every((key) => a.node[key] === b.node[key]));
675
+ function ShaftBands({ node, shaftY, shaftHeight, }) {
676
+ const geometry = useMemo(() => createColumnBandGeometry(node, shaftHeight), [node, shaftHeight]);
677
+ useEffect(() => () => geometry?.dispose(), [geometry]);
678
+ if (!geometry)
641
679
  return null;
642
- const fluteDepth = node.fluteDepth ?? 0.02;
643
- const fluteWidth = node.fluteWidth ?? fluteDepth;
644
- const fluteRadius = Math.max(0.006, fluteWidth * 0.42);
645
- const shaftRadius = node.radius * 0.74;
646
- return (_jsx("group", { children: Array.from({ length: fluteCount }, (_, index) => {
647
- const angle = (index / fluteCount) * Math.PI * 2;
648
- const x = Math.cos(angle) * shaftRadius;
649
- const z = Math.sin(angle) * shaftRadius;
650
- return (_jsx(MappedCylinder, { height: shaftHeight * 0.92, position: [x, shaftY + shaftHeight / 2, z], radius: fluteRadius, segments: 8 }, index));
651
- }) }));
652
- }
653
- function DravidianPanelFace({ position, rotation = 0, panelHeight, panelWidth, rail, reliefDepth, panelShape, }) {
654
- return (_jsxs("group", { position: position, rotation: [0, rotation, 0], children: [_jsx(MappedBox, { depth: reliefDepth, height: rail, position: [0, panelHeight / 2, 0], softenEdges: false, width: panelWidth }), _jsx(MappedBox, { depth: reliefDepth, height: rail, position: [0, -panelHeight / 2, 0], softenEdges: false, width: panelWidth }), _jsx(MappedBox, { depth: reliefDepth, height: panelHeight, position: [panelWidth / 2, 0, 0], softenEdges: false, width: rail }), _jsx(MappedBox, { depth: reliefDepth, height: panelHeight, position: [-panelWidth / 2, 0, 0], softenEdges: false, width: rail }), panelShape === 'diamond' && (_jsx(MappedBox, { depth: reliefDepth, height: panelHeight * 0.42, position: [0, 0, 0], rotation: [0, 0, Math.PI / 4], softenEdges: false, width: rail * 1.2 })), panelShape === 'arched' && (_jsx(MappedTorus, { arc: Math.PI, position: [0, panelHeight * 0.28, 0], ringRadius: panelWidth * 0.42, scaleX: panelWidth * 0.42, scaleY: rail, scaleZ: reliefDepth, tubeRadius: Math.max(rail, reliefDepth) * 0.18 }))] }));
680
+ return (_jsxs("mesh", { castShadow: true, receiveShadow: true, dispose: null, position: [0, shaftY, 0], userData: { slotId: 'shaft' }, children: [_jsx("primitive", { attach: "geometry", object: geometry, dispose: null }), _jsx(ColumnMaterial, {})] }));
655
681
  }
656
682
  function DravidianShaftPanels({ node, shaftY, shaftHeight, }) {
657
- const panelCount = Math.max(node.panelCount ?? 0, node.style === 'dravidian-carved' || node.shaftDetail === 'panelled' ? 3 : 0);
658
- if (panelCount <= 0 || shaftHeight <= 0)
683
+ const geometry = useMemo(() => createColumnPanelGeometry(node, shaftHeight), [node, shaftHeight]);
684
+ useEffect(() => () => geometry?.dispose(), [geometry]);
685
+ if (!geometry)
659
686
  return null;
660
- const shaftWidth = node.width * 0.72;
661
- const shaftDepth = node.depth * 0.72;
662
- const panelHeight = Math.min(0.42, shaftHeight / Math.max(4, panelCount + 2));
663
- const panelWidth = node.width * 0.26;
664
- const rail = Math.max(0.012, node.width * 0.028);
665
- const reliefDepth = Math.max(0.012, node.panelInsetDepth ?? node.width * 0.025);
666
- const rows = Array.from({ length: panelCount }, (_, index) => (index + 1) / (panelCount + 1));
667
- const panelShape = node.panelShape ?? 'rectangle';
668
- const faceProps = { panelHeight, panelWidth, rail, reliefDepth, panelShape };
669
- return (_jsx("group", { children: rows.map((t, rowIndex) => {
670
- const y = shaftY + shaftHeight * t;
671
- return (_jsxs("group", { children: [_jsx(DravidianPanelFace, { position: [0, y, shaftDepth / 2 + reliefDepth / 2], ...faceProps }), _jsx(DravidianPanelFace, { position: [0, y, -shaftDepth / 2 - reliefDepth / 2], ...faceProps }), _jsx(DravidianPanelFace, { position: [shaftWidth / 2 + reliefDepth / 2, y, 0], rotation: Math.PI / 2, ...faceProps }), _jsx(DravidianPanelFace, { position: [-shaftWidth / 2 - reliefDepth / 2, y, 0], rotation: Math.PI / 2, ...faceProps })] }, rowIndex));
672
- }) }));
687
+ return (_jsxs("mesh", { castShadow: true, receiveShadow: true, dispose: null, position: [0, shaftY, 0], userData: { slotId: 'shaft' }, children: [_jsx("primitive", { attach: "geometry", object: geometry, dispose: null }), _jsx(ColumnMaterial, {})] }));
673
688
  }
674
689
  function SpiralRibs({ node, shaftY, shaftHeight, }) {
675
- const spiralRibCount = node.spiralRibCount ?? 0;
676
- const spiralTwist = node.spiralTwist ?? 0;
677
- const shaftTaper = node.shaftTaper ?? 0;
678
- const ribCountSetting = Math.max(spiralRibCount, node.shaftDetail === 'spiral' ? 12 : 0);
679
- if (ribCountSetting <= 0 || spiralTwist === 0 || shaftHeight <= 0)
680
- return null;
681
- const ribCount = Math.min(ribCountSetting, 24);
682
- const stepCount = 28;
683
- const ribDistance = node.radius * 0.78;
684
- const ribWidth = Math.max(0.012, node.radius * 0.06);
685
- const segmentHeight = (shaftHeight / stepCount) * 1.18;
686
- const lean = spiralTwist > 0 ? -0.55 : 0.55;
687
- return (_jsx("group", { children: Array.from({ length: ribCount * stepCount }, (_, index) => {
688
- const ribIndex = index % ribCount;
689
- const stepIndex = Math.floor(index / ribCount);
690
- const t = (stepIndex + 0.5) / stepCount;
691
- const angle = (ribIndex / ribCount) * Math.PI * 2 + t * spiralTwist * Math.PI * 2;
692
- const taperScale = 1 - Math.min(shaftTaper, 0.85) * t;
693
- return (_jsx(MappedCylinder, { height: segmentHeight, position: [
694
- Math.cos(angle) * ribDistance * taperScale,
695
- shaftY + shaftHeight * t,
696
- Math.sin(angle) * ribDistance * taperScale,
697
- ], radius: ribWidth, rotation: [0, -angle, lean], segments: 8 }, index));
698
- }) }));
699
- }
700
- function LowerCarvedBand({ node, shaftY, shaftHeight, }) {
701
- const placement = node.carvingPlacement ?? 'capital';
702
- if (!node.lowerBandEnabled ||
703
- shaftHeight <= 0 ||
704
- (placement !== 'shaft' && placement !== 'all')) {
690
+ const geometry = useMemo(() => createColumnSpiralGeometry(node, shaftHeight), [node, shaftHeight]);
691
+ useEffect(() => () => geometry?.dispose(), [geometry]);
692
+ if (!geometry)
705
693
  return null;
706
- }
707
- const bandHeight = Math.min(node.lowerBandHeight ?? 0.24, shaftHeight * 0.35);
708
- const y = shaftY + shaftHeight * 0.12;
709
- const level = Math.max(1, node.lowerBandCarvingLevel ?? 1);
710
- const count = Math.max(6, level * 6);
711
- const distance = Math.max(node.radius * 0.82, Math.max(node.width, node.depth) * 0.36);
712
- return (_jsxs("group", { children: [_jsx(ColumnBlock, { height: bandHeight, node: node, scale: 0.84, y: y }), Array.from({ length: count }, (_, index) => {
713
- const angle = (index / count) * Math.PI * 2;
714
- return (_jsx(MappedCylinder, { height: bandHeight * 0.62, position: [
715
- Math.cos(angle) * distance,
716
- y + bandHeight * 0.5,
717
- Math.sin(angle) * distance,
718
- ], radius: 0.012, rotation: [0, -angle, 0], segments: 5 }, index));
719
- })] }));
694
+ return (_jsxs("mesh", { castShadow: true, receiveShadow: true, dispose: null, position: [0, shaftY, 0], userData: { slotId: 'shaft' }, children: [_jsx("primitive", { attach: "geometry", object: geometry, dispose: null }), _jsx(ColumnMaterial, {})] }));
720
695
  }
721
696
  function CapitalCarvings({ node, capitalY, capitalHeight, }) {
722
697
  const placement = node.carvingPlacement ?? 'capital';
@@ -849,7 +824,7 @@ function ColumnBody({ node }) {
849
824
  const support = node.supportStyle === 'a-frame' ? (_jsx(AFrameSupport, { node: node })) : node.supportStyle === 'y-frame' ? (_jsx(YFrameSupport, { node: node })) : node.supportStyle === 'v-frame' ? (_jsx(VFrameSupport, { node: node })) : node.supportStyle === 'x-brace' ? (_jsx(XBraceSupport, { node: node })) : node.supportStyle === 'k-brace' ? (_jsx(KBraceSupport, { node: node })) : node.supportStyle === 'single-strut' ? (_jsx(SingleStrutSupport, { node: node })) : node.supportStyle === 'tripod' ? (_jsx(TripodSupport, { node: node })) : node.supportStyle === 'trestle' ? (_jsx(TrestleSupport, { node: node })) : node.supportStyle === 'portal-frame' ? (_jsx(PortalFrameSupport, { node: node })) : (_jsx(BoxFrameSupport, { node: node }));
850
825
  return _jsx(ColumnSlot, { slotId: "frame", children: support });
851
826
  }
852
- return (_jsxs(_Fragment, { children: [_jsxs(ColumnSlot, { slotId: "base", children: [_jsx(Base, { height: shaftLayout.baseHeight, node: node }), _jsx(BaseCarvings, { height: shaftLayout.baseHeight, node: node })] }), _jsxs(ColumnSlot, { slotId: "shaft", children: [_jsx(Shaft, { height: shaftLayout.shaftHeight, node: node, y: shaftLayout.shaftY }), _jsx(Rings, { node: node, shaftHeight: shaftLayout.shaftHeight, shaftY: shaftLayout.shaftY }), _jsx(LatheBands, { node: node, shaftHeight: shaftLayout.shaftHeight, shaftY: shaftLayout.shaftY }), _jsx(Flutes, { node: node, shaftHeight: shaftLayout.shaftHeight, shaftY: shaftLayout.shaftY }), _jsx(LowerCarvedBand, { node: node, shaftHeight: shaftLayout.shaftHeight, shaftY: shaftLayout.shaftY }), _jsx(DravidianShaftPanels, { node: node, shaftHeight: shaftLayout.shaftHeight, shaftY: shaftLayout.shaftY }), _jsx(SpiralRibs, { node: node, shaftHeight: shaftLayout.shaftHeight, shaftY: shaftLayout.shaftY })] }), _jsxs(ColumnSlot, { slotId: "capital", children: [_jsx(Capital, { height: shaftLayout.capitalHeight, node: node, y: shaftLayout.baseHeight + shaftLayout.shaftHeight }), _jsx(CapitalCarvings, { capitalHeight: shaftLayout.capitalHeight, capitalY: shaftLayout.baseHeight + shaftLayout.shaftHeight, node: node })] })] }));
827
+ return (_jsxs(_Fragment, { children: [_jsxs(ColumnSlot, { slotId: "base", children: [_jsx(Base, { height: shaftLayout.baseHeight, node: node }), _jsx(BaseCarvings, { height: shaftLayout.baseHeight, node: node })] }), _jsxs(ColumnSlot, { slotId: "shaft", children: [_jsx(Shaft, { height: shaftLayout.shaftHeight, node: node, y: shaftLayout.shaftY }), _jsx(ShaftDetails, { node: node, shaftHeight: shaftLayout.shaftHeight, shaftY: shaftLayout.shaftY })] }), _jsxs(ColumnSlot, { slotId: "capital", children: [_jsx(Capital, { height: shaftLayout.capitalHeight, node: node, y: shaftLayout.baseHeight + shaftLayout.shaftHeight }), _jsx(CapitalCarvings, { capitalHeight: shaftLayout.capitalHeight, capitalY: shaftLayout.baseHeight + shaftLayout.shaftHeight, node: node })] })] }));
853
828
  }
854
829
  /**
855
830
  * Translucent, non-interactive ghost of a column — the placement tool's
@@ -897,6 +872,7 @@ export const ColumnPreview = ({ node }) => {
897
872
  };
898
873
  export const ColumnRenderer = ({ node: rawNode }) => {
899
874
  const ref = useRef(null);
875
+ const bodyRef = useRef(null);
900
876
  // Merge any live drag override so width / depth / radius / height
901
877
  // arrows update the mesh on every pointer move, with zustand only
902
878
  // hearing the commit on release. Subscribes narrowly to this node's
@@ -935,6 +911,6 @@ export const ColumnRenderer = ({ node: rawNode }) => {
935
911
  dirtySubtree();
936
912
  });
937
913
  }, [node]);
938
- return (_jsx(ColumnMaterialContext.Provider, { value: materials, children: _jsx(ColumnEdgeSoftnessContext.Provider, { value: node.edgeSoftness ?? 0.025, children: _jsxs("group", { position: liveTransform?.position ?? node.position, ref: ref, rotation: [0, liveTransform?.rotation ?? node.rotation, 0], visible: node.visible, userData: modelData, ...handlers, children: [node.source ? _jsx(ScriptedOpeningModel, { node: node }) : _jsx(ColumnBody, { node: node }), node.children.map((id) => (_jsx(NodeRenderer, { nodeId: id }, id)))] }) }) }));
914
+ return (_jsx(ColumnMaterialContext.Provider, { value: materials, children: _jsxs(ColumnEdgeSoftnessContext.Provider, { value: node.edgeSoftness ?? 0.025, children: [_jsxs("group", { position: liveTransform?.position ?? node.position, ref: ref, rotation: [0, liveTransform?.rotation ?? node.rotation, 0], visible: node.visible, userData: modelData, ...handlers, children: [_jsx("group", { ref: bodyRef, name: "column-body", children: node.source ? _jsx(ScriptedOpeningModel, { node: node }) : _jsx(ColumnBody, { node: node }) }), node.children.map((id) => (_jsx(NodeRenderer, { nodeId: id }, id)))] }), _jsx(ColumnInspectorOverlay, { nodeId: node.id, body: bodyRef, node: node, position: liveTransform?.position ?? node.position, rotation: liveTransform?.rotation ?? node.rotation })] }) }));
939
915
  };
940
916
  export default ColumnRenderer;
@@ -1,8 +1,8 @@
1
1
  import type { ColumnNode } from '@pascal-app/core';
2
- export declare function getSegments(node: ColumnNode): 8 | 16 | 32;
3
- export declare function getShaftSegmentCount(node: ColumnNode): number;
4
- export declare function getShaftTwistRadians(node: ColumnNode, index: number): number;
5
- export declare function getShaftScaleAt(node: ColumnNode, t: number): number;
2
+ export declare function getSegments(node: Pick<ColumnNode, 'crossSection'>): 8 | 16 | 32;
3
+ export declare function getShaftSegmentCount(node: Pick<ColumnNode, 'shaftProfile' | 'shaftTaper' | 'shaftTwistStep' | 'shaftSegmentCount'>): number;
4
+ export declare function getShaftTwistRadians(node: Pick<ColumnNode, 'shaftTwistStep'>, index: number): number;
5
+ export declare function getShaftScaleAt(node: Pick<ColumnNode, 'shaftProfile' | 'shaftTaper' | 'shaftStartScale' | 'shaftEndScale' | 'shaftBulge'>, t: number): number;
6
6
  export declare function columnShaftLayout(node: ColumnNode): {
7
7
  baseHeight: number;
8
8
  capitalHeight: number;
@@ -1 +1 @@
1
- {"version":3,"file":"shape.d.ts","sourceRoot":"","sources":["../../src/column/shape.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAClD,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,eAI3C;AAMD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,UAAU,UAUpD;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,UAEnE;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE,MAAM,UA0B1D;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,UAAU;;;;;EAMjD;AACD,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAA;IACzC,CAAC,EAAE,MAAM,CAAA;IACT,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AACD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,YAAY,EAAE,CAyE/F"}
1
+ {"version":3,"file":"shape.d.ts","sourceRoot":"","sources":["../../src/column/shape.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAClD,wBAAgB,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,eAIjE;AAMD,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,cAAc,GAAG,YAAY,GAAG,gBAAgB,GAAG,mBAAmB,CAAC,UAW/F;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,gBAAgB,CAAC,EAAE,KAAK,EAAE,MAAM,UAE3F;AAED,wBAAgB,eAAe,CAC7B,IAAI,EAAE,IAAI,CACR,UAAU,EACV,cAAc,GAAG,YAAY,GAAG,iBAAiB,GAAG,eAAe,GAAG,YAAY,CACnF,EACD,CAAC,EAAE,MAAM,UA2BV;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,UAAU;;;;;EAMjD;AACD,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAA;IACzC,CAAC,EAAE,MAAM,CAAA;IACT,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AACD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,YAAY,EAAE,CAyE/F"}
@@ -87,7 +87,7 @@ export function columnCapitalBlocks(node, y, height) {
87
87
  return {
88
88
  kind: 'box',
89
89
  y: y + (index * height) / count,
90
- height: (height / count) * 1.01,
90
+ height: height / count,
91
91
  width: node.width * Math.max(0.5, widthScale - spread),
92
92
  depth: node.depth * Math.max(0.5, depthScale - spread),
93
93
  };
@@ -1 +1 @@
1
- {"version":3,"file":"surface.d.ts","sourceRoot":"","sources":["../../src/column/surface.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,UAAU,EACf,KAAK,mBAAmB,EAExB,KAAK,eAAe,EAErB,MAAM,kBAAkB,CAAA;AAoBzB,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,UAAU,GAAG,mBAAmB,EAAE,CAuDzE;AAED,eAAO,MAAM,qBAAqB,EAAE,eAUnC,CAAA"}
1
+ {"version":3,"file":"surface.d.ts","sourceRoot":"","sources":["../../src/column/surface.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,UAAU,EACf,KAAK,mBAAmB,EAExB,KAAK,eAAe,EAErB,MAAM,kBAAkB,CAAA;AAoBzB,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,UAAU,GAAG,mBAAmB,EAAE,CAyEzE;AAED,eAAO,MAAM,qBAAqB,EAAE,eAUnC,CAAA"}