@pascal-app/nodes 1.0.0 → 1.0.3

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 (439) hide show
  1. package/dist/block/definition.d.ts.map +1 -1
  2. package/dist/block/definition.js +4 -1
  3. package/dist/block/face-host.d.ts.map +1 -1
  4. package/dist/block/face-host.js +19 -2
  5. package/dist/block/hosted-edit.d.ts +13 -0
  6. package/dist/block/hosted-edit.d.ts.map +1 -0
  7. package/dist/block/hosted-edit.js +205 -0
  8. package/dist/block/last-operation.d.ts +1 -1
  9. package/dist/block/last-operation.d.ts.map +1 -1
  10. package/dist/block/last-operation.js +6 -4
  11. package/dist/block/modal-session.d.ts +2 -1
  12. package/dist/block/modal-session.d.ts.map +1 -1
  13. package/dist/block/modal-session.js +2 -2
  14. package/dist/block/selection.d.ts.map +1 -1
  15. package/dist/block/selection.js +82 -24
  16. package/dist/block/surface.d.ts +4 -0
  17. package/dist/block/surface.d.ts.map +1 -0
  18. package/dist/block/surface.js +54 -0
  19. package/dist/block/use-block-face-operation.d.ts +2 -2
  20. package/dist/block/use-block-face-operation.d.ts.map +1 -1
  21. package/dist/block/use-block-face-operation.js +25 -11
  22. package/dist/box-vent/definition.d.ts.map +1 -1
  23. package/dist/box-vent/definition.js +1 -0
  24. package/dist/box-vent/panel.js +4 -4
  25. package/dist/building/renderer.d.ts.map +1 -1
  26. package/dist/building/renderer.js +1 -1
  27. package/dist/cabinet/appliance-layout.d.ts +26 -0
  28. package/dist/cabinet/appliance-layout.d.ts.map +1 -0
  29. package/dist/cabinet/appliance-layout.js +52 -0
  30. package/dist/cabinet/countertop-layout.d.ts +173 -0
  31. package/dist/cabinet/countertop-layout.d.ts.map +1 -0
  32. package/dist/cabinet/countertop-layout.js +80 -0
  33. package/dist/cabinet/definition.d.ts.map +1 -1
  34. package/dist/cabinet/definition.js +17 -8
  35. package/dist/cabinet/geometry/cooktop.d.ts.map +1 -1
  36. package/dist/cabinet/geometry/cooktop.js +2 -2
  37. package/dist/cabinet/geometry/run.d.ts.map +1 -1
  38. package/dist/cabinet/geometry/run.js +10 -71
  39. package/dist/cabinet/geometry/sink.d.ts +2 -12
  40. package/dist/cabinet/geometry/sink.d.ts.map +1 -1
  41. package/dist/cabinet/geometry/sink.js +8 -39
  42. package/dist/cabinet/hosted-resize.d.ts +5 -0
  43. package/dist/cabinet/hosted-resize.d.ts.map +1 -0
  44. package/dist/cabinet/hosted-resize.js +14 -0
  45. package/dist/cabinet/placement-snap.d.ts.map +1 -1
  46. package/dist/cabinet/placement-snap.js +4 -2
  47. package/dist/cabinet/run-layout.d.ts +8 -1
  48. package/dist/cabinet/run-layout.d.ts.map +1 -1
  49. package/dist/cabinet/run-layout.js +22 -14
  50. package/dist/cabinet/run-ops.d.ts +3 -3
  51. package/dist/cabinet/run-ops.js +3 -3
  52. package/dist/cabinet/run-panel.d.ts +1 -1
  53. package/dist/cabinet/run-panel.d.ts.map +1 -1
  54. package/dist/cabinet/run-panel.js +16 -7
  55. package/dist/cabinet/surfaces.d.ts +5 -0
  56. package/dist/cabinet/surfaces.d.ts.map +1 -0
  57. package/dist/cabinet/surfaces.js +113 -0
  58. package/dist/cabinet/tool.d.ts.map +1 -1
  59. package/dist/cabinet/tool.js +8 -4
  60. package/dist/cabinet/tree-structure.d.ts.map +1 -1
  61. package/dist/cabinet/tree-structure.js +10 -9
  62. package/dist/ceiling/definition.d.ts.map +1 -1
  63. package/dist/ceiling/definition.js +6 -1
  64. package/dist/ceiling/floorplan-affordances.d.ts +4 -4
  65. package/dist/ceiling/panel.js +1 -1
  66. package/dist/ceiling/renderer.d.ts.map +1 -1
  67. package/dist/ceiling/renderer.js +3 -2
  68. package/dist/chimney/definition.d.ts.map +1 -1
  69. package/dist/chimney/definition.js +1 -0
  70. package/dist/chimney/panel.js +9 -9
  71. package/dist/column/definition.d.ts.map +1 -1
  72. package/dist/column/definition.js +10 -3
  73. package/dist/column/floorplan-affordances.d.ts.map +1 -1
  74. package/dist/column/floorplan-affordances.js +6 -1
  75. package/dist/column/floorplan.d.ts.map +1 -1
  76. package/dist/column/floorplan.js +23 -11
  77. package/dist/column/hosted-resize.d.ts +116 -0
  78. package/dist/column/hosted-resize.d.ts.map +1 -0
  79. package/dist/column/hosted-resize.js +9 -0
  80. package/dist/column/panel.d.ts.map +1 -1
  81. package/dist/column/panel.js +6 -3
  82. package/dist/column/renderer.d.ts.map +1 -1
  83. package/dist/column/renderer.js +25 -103
  84. package/dist/column/shape.d.ts +22 -0
  85. package/dist/column/shape.d.ts.map +1 -0
  86. package/dist/column/shape.js +120 -0
  87. package/dist/column/surface.d.ts +4 -0
  88. package/dist/column/surface.d.ts.map +1 -0
  89. package/dist/column/surface.js +66 -0
  90. package/dist/cupola/definition.d.ts.map +1 -1
  91. package/dist/cupola/definition.js +1 -0
  92. package/dist/cupola/panel.js +1 -1
  93. package/dist/door/definition.d.ts.map +1 -1
  94. package/dist/door/definition.js +40 -1
  95. package/dist/door/door-math.d.ts +1 -1
  96. package/dist/door/door-math.d.ts.map +1 -1
  97. package/dist/door/door-math.js +7 -10
  98. package/dist/door/floorplan-affordances.d.ts.map +1 -1
  99. package/dist/door/floorplan-affordances.js +8 -12
  100. package/dist/door/move-tool.d.ts.map +1 -1
  101. package/dist/door/move-tool.js +3 -4
  102. package/dist/door/panel.d.ts.map +1 -1
  103. package/dist/door/panel.js +28 -57
  104. package/dist/door/tool.d.ts.map +1 -1
  105. package/dist/door/tool.js +20 -2
  106. package/dist/dormer/definition.d.ts.map +1 -1
  107. package/dist/dormer/definition.js +1 -0
  108. package/dist/dormer/panel-position-section.js +2 -2
  109. package/dist/dormer/panel.js +1 -1
  110. package/dist/downspout/definition.d.ts.map +1 -1
  111. package/dist/downspout/definition.js +1 -0
  112. package/dist/duct-segment/parametrics.d.ts.map +1 -1
  113. package/dist/duct-segment/parametrics.js +5 -1
  114. package/dist/duct-segment/tool.d.ts +1 -0
  115. package/dist/duct-segment/tool.d.ts.map +1 -1
  116. package/dist/duct-segment/tool.js +21 -8
  117. package/dist/duct-terminal/tool.d.ts.map +1 -1
  118. package/dist/duct-terminal/tool.js +77 -8
  119. package/dist/elevator/definition.d.ts.map +1 -1
  120. package/dist/elevator/definition.js +2 -0
  121. package/dist/elevator/parametrics.d.ts.map +1 -1
  122. package/dist/elevator/parametrics.js +98 -1
  123. package/dist/eyebrow-vent/definition.d.ts.map +1 -1
  124. package/dist/eyebrow-vent/definition.js +1 -0
  125. package/dist/eyebrow-vent/panel.js +1 -1
  126. package/dist/fence/definition.d.ts.map +1 -1
  127. package/dist/fence/definition.js +1 -0
  128. package/dist/fence/inspector-editors.js +1 -1
  129. package/dist/fence/tool.js +2 -2
  130. package/dist/guide/definition.d.ts.map +1 -1
  131. package/dist/guide/definition.js +1 -0
  132. package/dist/gutter/definition.d.ts.map +1 -1
  133. package/dist/gutter/definition.js +1 -0
  134. package/dist/hvac-equipment/tool.d.ts.map +1 -1
  135. package/dist/hvac-equipment/tool.js +8 -2
  136. package/dist/imported-mesh/definition.d.ts +5 -0
  137. package/dist/imported-mesh/definition.d.ts.map +1 -0
  138. package/dist/imported-mesh/definition.js +38 -0
  139. package/dist/imported-mesh/floorplan.d.ts +4 -0
  140. package/dist/imported-mesh/floorplan.d.ts.map +1 -0
  141. package/dist/imported-mesh/floorplan.js +34 -0
  142. package/dist/imported-mesh/geometry.d.ts +5 -0
  143. package/dist/imported-mesh/geometry.d.ts.map +1 -0
  144. package/dist/imported-mesh/geometry.js +34 -0
  145. package/dist/imported-mesh/index.d.ts +4 -0
  146. package/dist/imported-mesh/index.d.ts.map +1 -0
  147. package/dist/imported-mesh/index.js +3 -0
  148. package/dist/imported-mesh/schema.d.ts +2 -0
  149. package/dist/imported-mesh/schema.d.ts.map +1 -0
  150. package/dist/imported-mesh/schema.js +1 -0
  151. package/dist/index.d.ts +2 -0
  152. package/dist/index.d.ts.map +1 -1
  153. package/dist/index.js +8 -0
  154. package/dist/item/__fixtures__/main-floorplan.d.ts +26 -0
  155. package/dist/item/__fixtures__/main-floorplan.d.ts.map +1 -0
  156. package/dist/item/__fixtures__/main-floorplan.js +297 -0
  157. package/dist/item/definition.d.ts.map +1 -1
  158. package/dist/item/definition.js +3 -1
  159. package/dist/item/floorplan-move.d.ts +9 -1
  160. package/dist/item/floorplan-move.d.ts.map +1 -1
  161. package/dist/item/floorplan-move.js +231 -99
  162. package/dist/item/floorplan.d.ts +22 -0
  163. package/dist/item/floorplan.d.ts.map +1 -1
  164. package/dist/item/floorplan.js +72 -2
  165. package/dist/item/move-tool.d.ts +1 -1
  166. package/dist/item/move-tool.d.ts.map +1 -1
  167. package/dist/item/move-tool.js +15 -7
  168. package/dist/item/panel.js +1 -1
  169. package/dist/item/renderer.d.ts.map +1 -1
  170. package/dist/item/renderer.js +8 -2
  171. package/dist/level/renderer.js +1 -1
  172. package/dist/lineset/tool.d.ts.map +1 -1
  173. package/dist/lineset/tool.js +1 -0
  174. package/dist/liquid-line/tool.d.ts.map +1 -1
  175. package/dist/liquid-line/tool.js +5 -1
  176. package/dist/measurement/definition.d.ts.map +1 -1
  177. package/dist/measurement/definition.js +1 -0
  178. package/dist/pipe-segment/parametrics.d.ts.map +1 -1
  179. package/dist/pipe-segment/parametrics.js +5 -1
  180. package/dist/pipe-segment/tool.d.ts.map +1 -1
  181. package/dist/pipe-segment/tool.js +14 -3
  182. package/dist/pipe-trap/tool.d.ts.map +1 -1
  183. package/dist/pipe-trap/tool.js +7 -8
  184. package/dist/procedural-item/definition.d.ts +4 -0
  185. package/dist/procedural-item/definition.d.ts.map +1 -0
  186. package/dist/procedural-item/definition.js +257 -0
  187. package/dist/procedural-item/geometry.d.ts +31 -0
  188. package/dist/procedural-item/geometry.d.ts.map +1 -0
  189. package/dist/procedural-item/geometry.js +88 -0
  190. package/dist/procedural-item/index.d.ts +3 -0
  191. package/dist/procedural-item/index.d.ts.map +1 -0
  192. package/dist/procedural-item/index.js +2 -0
  193. package/dist/procedural-item/move-session.d.ts +15 -0
  194. package/dist/procedural-item/move-session.d.ts.map +1 -0
  195. package/dist/procedural-item/move-session.js +197 -0
  196. package/dist/procedural-item/move-tool.d.ts +5 -0
  197. package/dist/procedural-item/move-tool.d.ts.map +1 -0
  198. package/dist/procedural-item/move-tool.js +193 -0
  199. package/dist/procedural-item/renderer.d.ts +5 -0
  200. package/dist/procedural-item/renderer.d.ts.map +1 -0
  201. package/dist/procedural-item/renderer.js +66 -0
  202. package/dist/ridge-vent/definition.d.ts.map +1 -1
  203. package/dist/ridge-vent/definition.js +1 -0
  204. package/dist/ridge-vent/panel.js +4 -4
  205. package/dist/roof/definition.d.ts.map +1 -1
  206. package/dist/roof/definition.js +4 -1
  207. package/dist/roof/panel-model.d.ts +4 -0
  208. package/dist/roof/panel-model.d.ts.map +1 -0
  209. package/dist/roof/panel-model.js +151 -0
  210. package/dist/roof/panel.d.ts.map +1 -1
  211. package/dist/roof/panel.js +9 -8
  212. package/dist/roof/parametrics.d.ts.map +1 -1
  213. package/dist/roof/parametrics.js +16 -1
  214. package/dist/roof-segment/definition.d.ts.map +1 -1
  215. package/dist/roof-segment/definition.js +1 -0
  216. package/dist/roof-segment/panel.d.ts.map +1 -1
  217. package/dist/roof-segment/panel.js +5 -5
  218. package/dist/roof-segment/parametrics.d.ts.map +1 -1
  219. package/dist/roof-segment/parametrics.js +176 -1
  220. package/dist/scan/definition.d.ts.map +1 -1
  221. package/dist/scan/definition.js +1 -0
  222. package/dist/shared/automatic-run-end-cap.d.ts +1 -0
  223. package/dist/shared/automatic-run-end-cap.d.ts.map +1 -1
  224. package/dist/shared/automatic-run-end-cap.js +10 -0
  225. package/dist/shared/commit-opening-move.d.ts +4 -0
  226. package/dist/shared/commit-opening-move.d.ts.map +1 -0
  227. package/dist/shared/commit-opening-move.js +9 -0
  228. package/dist/shared/curtain-opening-limits.d.ts +14 -0
  229. package/dist/shared/curtain-opening-limits.d.ts.map +1 -0
  230. package/dist/shared/curtain-opening-limits.js +53 -0
  231. package/dist/shared/distribution-run-tool.d.ts +10 -0
  232. package/dist/shared/distribution-run-tool.d.ts.map +1 -1
  233. package/dist/shared/distribution-run-tool.js +56 -11
  234. package/dist/shared/draft-axis-guides.d.ts +0 -6
  235. package/dist/shared/draft-axis-guides.d.ts.map +1 -1
  236. package/dist/shared/draft-axis-guides.js +1 -8
  237. package/dist/shared/hosted-resize.d.ts +12 -0
  238. package/dist/shared/hosted-resize.d.ts.map +1 -0
  239. package/dist/shared/hosted-resize.js +166 -0
  240. package/dist/shared/opening-grid-follow.d.ts +8 -0
  241. package/dist/shared/opening-grid-follow.d.ts.map +1 -0
  242. package/dist/shared/opening-grid-follow.js +12 -0
  243. package/dist/shared/opening-property-preview-host.d.ts +3 -0
  244. package/dist/shared/opening-property-preview-host.d.ts.map +1 -0
  245. package/dist/shared/opening-property-preview-host.js +21 -0
  246. package/dist/shared/opening-property-preview.d.ts +19 -0
  247. package/dist/shared/opening-property-preview.d.ts.map +1 -0
  248. package/dist/shared/opening-property-preview.js +99 -0
  249. package/dist/shared/panel-fields.d.ts +15 -0
  250. package/dist/shared/panel-fields.d.ts.map +1 -0
  251. package/dist/shared/panel-fields.js +31 -0
  252. package/dist/shared/resting-surface-plan.d.ts +4 -0
  253. package/dist/shared/resting-surface-plan.d.ts.map +1 -0
  254. package/dist/shared/resting-surface-plan.js +53 -0
  255. package/dist/shared/surface-counterparts.d.ts +12 -0
  256. package/dist/shared/surface-counterparts.d.ts.map +1 -0
  257. package/dist/shared/surface-counterparts.js +27 -0
  258. package/dist/shared/wall-attach-target.d.ts +1 -0
  259. package/dist/shared/wall-attach-target.d.ts.map +1 -1
  260. package/dist/shared/wall-attach-target.js +4 -1
  261. package/dist/shared/wall-event-from-grid.d.ts +5 -0
  262. package/dist/shared/wall-event-from-grid.d.ts.map +1 -0
  263. package/dist/shared/wall-event-from-grid.js +36 -0
  264. package/dist/shelf/definition.d.ts.map +1 -1
  265. package/dist/shelf/definition.js +5 -2
  266. package/dist/shelf/floorplan-affordances.d.ts.map +1 -1
  267. package/dist/shelf/floorplan-affordances.js +5 -3
  268. package/dist/shelf/floorplan-move.d.ts.map +1 -1
  269. package/dist/shelf/floorplan-move.js +3 -2
  270. package/dist/shelf/floorplan.d.ts.map +1 -1
  271. package/dist/shelf/floorplan.js +9 -2
  272. package/dist/shelf/geometry.d.ts.map +1 -1
  273. package/dist/shelf/geometry.js +2 -10
  274. package/dist/site/renderer.d.ts.map +1 -1
  275. package/dist/site/renderer.js +9 -2
  276. package/dist/skylight/definition.d.ts.map +1 -1
  277. package/dist/skylight/definition.js +1 -0
  278. package/dist/skylight/panel.js +6 -6
  279. package/dist/slab/definition.d.ts.map +1 -1
  280. package/dist/slab/definition.js +4 -0
  281. package/dist/slab/panel.js +1 -1
  282. package/dist/solar-panel/definition.d.ts.map +1 -1
  283. package/dist/solar-panel/definition.js +1 -0
  284. package/dist/solar-panel/panel.js +2 -2
  285. package/dist/spawn/definition.d.ts.map +1 -1
  286. package/dist/spawn/definition.js +1 -0
  287. package/dist/spawn/panel.js +1 -1
  288. package/dist/stair/definition.d.ts.map +1 -1
  289. package/dist/stair/definition.js +2 -0
  290. package/dist/stair/panel.d.ts.map +1 -1
  291. package/dist/stair/panel.js +9 -7
  292. package/dist/stair/parametrics.d.ts.map +1 -1
  293. package/dist/stair/parametrics.js +164 -1
  294. package/dist/stair-segment/definition.d.ts.map +1 -1
  295. package/dist/stair-segment/definition.js +1 -0
  296. package/dist/stair-segment/panel.js +4 -4
  297. package/dist/stair-segment/parametrics.d.ts.map +1 -1
  298. package/dist/stair-segment/parametrics.js +81 -1
  299. package/dist/turbine-vent/definition.d.ts.map +1 -1
  300. package/dist/turbine-vent/definition.js +1 -0
  301. package/dist/turbine-vent/panel.js +1 -1
  302. package/dist/unit/definition.d.ts +10 -0
  303. package/dist/unit/definition.d.ts.map +1 -0
  304. package/dist/unit/definition.js +38 -0
  305. package/dist/unit/index.d.ts +2 -0
  306. package/dist/unit/index.d.ts.map +1 -0
  307. package/dist/unit/index.js +1 -0
  308. package/dist/unit/parametrics.d.ts +3 -0
  309. package/dist/unit/parametrics.d.ts.map +1 -0
  310. package/dist/unit/parametrics.js +4 -0
  311. package/dist/unit/schema.d.ts +2 -0
  312. package/dist/unit/schema.d.ts.map +1 -0
  313. package/dist/unit/schema.js +1 -0
  314. package/dist/unit/unit-panel.d.ts +5 -0
  315. package/dist/unit/unit-panel.d.ts.map +1 -0
  316. package/dist/unit/unit-panel.js +61 -0
  317. package/dist/wall/actions.d.ts +3 -0
  318. package/dist/wall/actions.d.ts.map +1 -0
  319. package/dist/wall/actions.js +56 -0
  320. package/dist/wall/curtain-opening-frame.d.ts +14 -0
  321. package/dist/wall/curtain-opening-frame.d.ts.map +1 -0
  322. package/dist/wall/curtain-opening-frame.js +111 -0
  323. package/dist/wall/curtain-panel-highlight.d.ts +3 -0
  324. package/dist/wall/curtain-panel-highlight.d.ts.map +1 -0
  325. package/dist/wall/curtain-panel-highlight.js +113 -0
  326. package/dist/wall/curtain-wall-adapter.d.ts +3 -0
  327. package/dist/wall/curtain-wall-adapter.d.ts.map +1 -0
  328. package/dist/wall/curtain-wall-adapter.js +55 -0
  329. package/dist/wall/curtain-wall-floorplan.d.ts +3 -0
  330. package/dist/wall/curtain-wall-floorplan.d.ts.map +1 -0
  331. package/dist/wall/curtain-wall-floorplan.js +91 -0
  332. package/dist/wall/curtain-wall-geometry.d.ts +4 -0
  333. package/dist/wall/curtain-wall-geometry.d.ts.map +1 -0
  334. package/dist/wall/curtain-wall-geometry.js +226 -0
  335. package/dist/wall/curtain-wall-layout.d.ts +16 -0
  336. package/dist/wall/curtain-wall-layout.d.ts.map +1 -0
  337. package/dist/wall/curtain-wall-layout.js +176 -0
  338. package/dist/wall/curtain-wall-materials.d.ts +5 -0
  339. package/dist/wall/curtain-wall-materials.d.ts.map +1 -0
  340. package/dist/wall/curtain-wall-materials.js +55 -0
  341. package/dist/wall/curtain-wall-panel.d.ts +14 -0
  342. package/dist/wall/curtain-wall-panel.d.ts.map +1 -0
  343. package/dist/wall/curtain-wall-panel.js +167 -0
  344. package/dist/wall/curtain-wall-piece-geometry.d.ts +5 -0
  345. package/dist/wall/curtain-wall-piece-geometry.d.ts.map +1 -0
  346. package/dist/wall/curtain-wall-piece-geometry.js +220 -0
  347. package/dist/wall/curtain-wall-shadow.d.ts +4 -0
  348. package/dist/wall/curtain-wall-shadow.d.ts.map +1 -0
  349. package/dist/wall/curtain-wall-shadow.js +15 -0
  350. package/dist/wall/definition.d.ts +0 -15
  351. package/dist/wall/definition.d.ts.map +1 -1
  352. package/dist/wall/definition.js +65 -4
  353. package/dist/wall/drawing-mode.d.ts +12 -0
  354. package/dist/wall/drawing-mode.d.ts.map +1 -0
  355. package/dist/wall/drawing-mode.js +38 -0
  356. package/dist/wall/floorplan-tool.d.ts +4 -0
  357. package/dist/wall/floorplan-tool.d.ts.map +1 -0
  358. package/dist/wall/floorplan-tool.js +107 -0
  359. package/dist/wall/floorplan.d.ts.map +1 -1
  360. package/dist/wall/floorplan.js +6 -2
  361. package/dist/wall/length-patch.d.ts +3 -0
  362. package/dist/wall/length-patch.d.ts.map +1 -0
  363. package/dist/wall/length-patch.js +14 -0
  364. package/dist/wall/move-tool.d.ts.map +1 -1
  365. package/dist/wall/move-tool.js +23 -1
  366. package/dist/wall/paint.d.ts.map +1 -1
  367. package/dist/wall/paint.js +39 -4
  368. package/dist/wall/panel-model.d.ts +4 -0
  369. package/dist/wall/panel-model.d.ts.map +1 -0
  370. package/dist/wall/panel-model.js +117 -0
  371. package/dist/wall/panel.d.ts.map +1 -1
  372. package/dist/wall/panel.js +20 -24
  373. package/dist/wall/property-preview.d.ts +7 -0
  374. package/dist/wall/property-preview.d.ts.map +1 -0
  375. package/dist/wall/property-preview.js +31 -0
  376. package/dist/wall/rectangle-command.d.ts +149 -0
  377. package/dist/wall/rectangle-command.d.ts.map +1 -0
  378. package/dist/wall/rectangle-command.js +22 -0
  379. package/dist/wall/rectangle-tool.d.ts +2 -0
  380. package/dist/wall/rectangle-tool.d.ts.map +1 -0
  381. package/dist/wall/rectangle-tool.js +147 -0
  382. package/dist/wall/renderer.d.ts.map +1 -1
  383. package/dist/wall/renderer.js +7 -4
  384. package/dist/wall/slots.d.ts +2 -2
  385. package/dist/wall/slots.d.ts.map +1 -1
  386. package/dist/wall/slots.js +10 -2
  387. package/dist/wall/split-floorplan-layer.d.ts +4 -0
  388. package/dist/wall/split-floorplan-layer.d.ts.map +1 -0
  389. package/dist/wall/split-floorplan-layer.js +71 -0
  390. package/dist/wall/split-pointer.d.ts +3 -0
  391. package/dist/wall/split-pointer.d.ts.map +1 -0
  392. package/dist/wall/split-pointer.js +95 -0
  393. package/dist/wall/split-preview.d.ts +55 -0
  394. package/dist/wall/split-preview.d.ts.map +1 -0
  395. package/dist/wall/split-preview.js +106 -0
  396. package/dist/wall/split-session.d.ts +16 -0
  397. package/dist/wall/split-session.d.ts.map +1 -0
  398. package/dist/wall/split-session.js +138 -0
  399. package/dist/wall/split-store.d.ts +16 -0
  400. package/dist/wall/split-store.d.ts.map +1 -0
  401. package/dist/wall/split-store.js +6 -0
  402. package/dist/wall/split-tool.d.ts +10 -0
  403. package/dist/wall/split-tool.d.ts.map +1 -0
  404. package/dist/wall/split-tool.js +95 -0
  405. package/dist/wall/system.d.ts.map +1 -1
  406. package/dist/wall/system.js +3 -1
  407. package/dist/wall/tool.d.ts.map +1 -1
  408. package/dist/wall/tool.js +14 -6
  409. package/dist/wall/wall-batch-system.d.ts.map +1 -1
  410. package/dist/wall/wall-batch-system.js +3 -0
  411. package/dist/window/definition.d.ts.map +1 -1
  412. package/dist/window/definition.js +48 -1
  413. package/dist/window/floorplan-affordances.d.ts.map +1 -1
  414. package/dist/window/floorplan-affordances.js +8 -10
  415. package/dist/window/move-tool.d.ts.map +1 -1
  416. package/dist/window/move-tool.js +4 -6
  417. package/dist/window/panel.d.ts.map +1 -1
  418. package/dist/window/panel.js +22 -60
  419. package/dist/window/tool.d.ts.map +1 -1
  420. package/dist/window/tool.js +34 -2
  421. package/dist/window/window-math.d.ts +1 -1
  422. package/dist/window/window-math.d.ts.map +1 -1
  423. package/dist/window/window-math.js +8 -11
  424. package/dist/zone/definition.d.ts.map +1 -1
  425. package/dist/zone/definition.js +8 -1
  426. package/dist/zone/floorplan.d.ts +1 -3
  427. package/dist/zone/floorplan.d.ts.map +1 -1
  428. package/dist/zone/floorplan.js +43 -28
  429. package/dist/zone/quantities-panel.d.ts.map +1 -1
  430. package/dist/zone/quantities-panel.js +32 -44
  431. package/dist/zone/renderer.d.ts.map +1 -1
  432. package/dist/zone/renderer.js +21 -7
  433. package/dist/zone/unit-membership.d.ts +12 -0
  434. package/dist/zone/unit-membership.d.ts.map +1 -0
  435. package/dist/zone/unit-membership.js +22 -0
  436. package/package.json +15 -9
  437. package/dist/shared/opening-documentation-fields.d.ts +0 -16
  438. package/dist/shared/opening-documentation-fields.d.ts.map +0 -1
  439. package/dist/shared/opening-documentation-fields.js +0 -54
@@ -1,7 +1,7 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { DuctTerminalNode, emitter, pointInPolygon, resolveCeilingHeight, resolveLevelId, resolveSupportSlabPatch, sceneRegistry, useScene, } from '@pascal-app/core';
4
- import { CursorSphere, getFloorStackPreviewPosition, isGridSnapActive, isMagneticSnapActive, triggerSFX, useEditor, } from '@pascal-app/editor';
4
+ import { CursorSphere, getFloorStackPreviewPosition, getSpatialPointerId, isGridSnapActive, isMagneticSnapActive, triggerSFX, useEditor, } from '@pascal-app/editor';
5
5
  import { useViewer } from '@pascal-app/viewer';
6
6
  import { Html } from '@react-three/drei';
7
7
  import { useThree } from '@react-three/fiber';
@@ -111,6 +111,7 @@ function resolvePortSnap(position, fallbackYaw) {
111
111
  const DuctTerminalTool = () => {
112
112
  const { camera, gl } = useThree();
113
113
  const activeLevelId = useViewer((s) => s.selection.levelId);
114
+ const toolDefaults = useEditor((s) => s.toolDefaults['duct-terminal']);
114
115
  const [mount, setMount] = useState('floor');
115
116
  const [placement, setPlacement] = useState(null);
116
117
  const mountRef = useRef('floor');
@@ -121,11 +122,12 @@ const DuctTerminalTool = () => {
121
122
  // override the manual M selection (port direction picks floor / ceiling /
122
123
  // wall), so the preview must show the inferred mount, not the toolbar one.
123
124
  const effectiveMount = placement?.mount ?? mount;
124
- const previewNode = useMemo(() => DuctTerminalNode.parse({
125
+ const configuredNode = useMemo(() => DuctTerminalNode.parse({
125
126
  ...ductTerminalDefinition.defaults(),
127
+ ...toolDefaults,
126
128
  name: 'Register',
127
- mount: effectiveMount,
128
- }), [effectiveMount]);
129
+ }), [toolDefaults]);
130
+ const previewNode = useMemo(() => DuctTerminalNode.parse({ ...configuredNode, mount: effectiveMount }), [configuredNode, effectiveMount]);
129
131
  const ghost = useMemo(() => {
130
132
  const group = buildDuctTerminalGeometry(previewNode);
131
133
  group.traverse((child) => {
@@ -137,6 +139,11 @@ const DuctTerminalTool = () => {
137
139
  });
138
140
  return group;
139
141
  }, [previewNode]);
142
+ useEffect(() => {
143
+ mountRef.current = configuredNode.mount;
144
+ setMount(configuredNode.mount);
145
+ setPlacement(null);
146
+ }, [configuredNode.mount]);
140
147
  useEffect(() => {
141
148
  if (!activeLevelId)
142
149
  return;
@@ -237,6 +244,7 @@ const DuctTerminalTool = () => {
237
244
  const commit = (p) => {
238
245
  const terminal = DuctTerminalNode.parse({
239
246
  ...ductTerminalDefinition.defaults(),
247
+ ...toolDefaults,
240
248
  name: 'Register',
241
249
  mount: p.mount,
242
250
  position: p.position,
@@ -251,17 +259,63 @@ const DuctTerminalTool = () => {
251
259
  useViewer.getState().setSelection({ selectedIds: [committedTerminal.id] });
252
260
  triggerSFX('sfx:item-place');
253
261
  };
254
- // ---- Floor / ceiling: own raycast against a horizontal plane ----
255
262
  let lastPointer = null;
256
263
  let lastWall = null;
264
+ let lastGrid = null;
265
+ let lastXRNode = null;
266
+ const resolveGrid = (event) => {
267
+ const step = isGridSnapActive() ? useEditor.getState().gridSnapStep : 0;
268
+ const position = alignDrawPoint([snap(event.localPosition[0], step), 0, snap(event.localPosition[2], step)], { applySnap: isMagneticSnapActive(), bypass: !isMagneticSnapActive() });
269
+ const snapEnabled = isGridSnapActive() || isMagneticSnapActive();
270
+ const mated = snapEnabled ? resolvePortSnap(position, yawRef.current) : null;
271
+ return mated
272
+ ? { position: mated.position, yaw: mated.yaw, mount: mated.mount, snapped: true }
273
+ : { position, yaw: yawRef.current, mount: 'floor' };
274
+ };
275
+ const onGridMove = (event) => {
276
+ lastGrid = event;
277
+ if (mountRef.current === 'floor')
278
+ setPlacement(resolveGrid(event));
279
+ };
280
+ const onGridClick = (event) => {
281
+ if (mountRef.current === 'floor')
282
+ commit(resolveGrid(event));
283
+ };
284
+ const resolveXRCeiling = (event) => {
285
+ if (mountRef.current !== 'ceiling' || event.node.type !== 'ceiling')
286
+ return null;
287
+ if (getSpatialPointerId(event.nativeEvent) == null)
288
+ return null;
289
+ const world = new Vector3(...event.position);
290
+ const level = activeLevelMesh();
291
+ const local = level ? level.worldToLocal(world) : world;
292
+ return {
293
+ position: [local.x, resolveCeilingHeight(event.node, useScene.getState().nodes), local.z],
294
+ yaw: yawRef.current,
295
+ mount: 'ceiling',
296
+ };
297
+ };
298
+ const onXRNodeMove = (event) => {
299
+ lastXRNode = event;
300
+ const p = resolveXRCeiling(event);
301
+ if (p)
302
+ setPlacement(p);
303
+ };
304
+ const onXRNodeClick = (event) => {
305
+ const p = resolveXRCeiling(event);
306
+ if (p)
307
+ commit(p);
308
+ };
309
+ // ---- Ceiling: desktop owns a canvas ray; XR uses the spatial node ray. ----
257
310
  const onPointerMove = (e) => {
258
311
  lastPointer = e;
259
- if (mountRef.current === 'wall')
312
+ lastXRNode = null;
313
+ if (mountRef.current !== 'ceiling')
260
314
  return;
261
315
  setPlacement(resolvePlanar(e));
262
316
  };
263
317
  const onCanvasClick = (e) => {
264
- if (mountRef.current === 'wall')
318
+ if (mountRef.current !== 'ceiling')
265
319
  return;
266
320
  if (useViewer.getState().cameraDragging)
267
321
  return;
@@ -350,11 +404,22 @@ const DuctTerminalTool = () => {
350
404
  if (lastWall)
351
405
  onWallMove(lastWall);
352
406
  }
407
+ else if (mountRef.current === 'floor') {
408
+ if (lastGrid)
409
+ onGridMove(lastGrid);
410
+ }
411
+ else if (lastXRNode && getSpatialPointerId(lastXRNode.nativeEvent) != null) {
412
+ onXRNodeMove(lastXRNode);
413
+ }
353
414
  else if (lastPointer)
354
415
  onPointerMove(lastPointer);
355
416
  });
356
417
  canvas.addEventListener('pointermove', onPointerMove);
357
418
  canvas.addEventListener('click', onCanvasClick);
419
+ emitter.on('grid:move', onGridMove);
420
+ emitter.on('grid:click', onGridClick);
421
+ emitter.on('node:move', onXRNodeMove);
422
+ emitter.on('node:click', onXRNodeClick);
358
423
  emitter.on('wall:move', onWallMove);
359
424
  emitter.on('wall:click', onWallClick);
360
425
  window.addEventListener('keydown', onKeyDown, true);
@@ -362,12 +427,16 @@ const DuctTerminalTool = () => {
362
427
  unsubscribeSnapping();
363
428
  canvas.removeEventListener('pointermove', onPointerMove);
364
429
  canvas.removeEventListener('click', onCanvasClick);
430
+ emitter.off('grid:move', onGridMove);
431
+ emitter.off('grid:click', onGridClick);
432
+ emitter.off('node:move', onXRNodeMove);
433
+ emitter.off('node:click', onXRNodeClick);
365
434
  emitter.off('wall:move', onWallMove);
366
435
  emitter.off('wall:click', onWallClick);
367
436
  window.removeEventListener('keydown', onKeyDown, true);
368
437
  clearDrawAlignment();
369
438
  };
370
- }, [activeLevelId, camera, gl]);
439
+ }, [activeLevelId, camera, gl, toolDefaults]);
371
440
  if (!activeLevelId || !placement)
372
441
  return null;
373
442
  const mountLabel = effectiveMount.charAt(0).toUpperCase() + effectiveMount.slice(1);
@@ -1 +1 @@
1
- {"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/elevator/definition.ts"],"names":[],"mappings":"AAAA,OAAO,EASL,KAAK,cAAc,EAEpB,MAAM,kBAAkB,CAAA;AAKzB,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAsJvC;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,EAAE,cAAc,CAAC,OAAO,YAAY,CA8GlE,CAAA"}
1
+ {"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/elevator/definition.ts"],"names":[],"mappings":"AAAA,OAAO,EASL,KAAK,cAAc,EAEpB,MAAM,kBAAkB,CAAA;AAKzB,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAsJvC;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,EAAE,cAAc,CAAC,OAAO,YAAY,CAgHlE,CAAA"}
@@ -173,6 +173,7 @@ export const elevatorDefinition = {
173
173
  return rest;
174
174
  },
175
175
  capabilities: {
176
+ surfacePlacement: 'floor-only',
176
177
  selectable: { hitVolume: 'bbox' },
177
178
  // Generic XZ translate so the floating action menu's Move button
178
179
  // (and the side move-arrows emitted from `def.floorplan`) drive the
@@ -220,6 +221,7 @@ export const elevatorDefinition = {
220
221
  handles: elevatorHandles,
221
222
  // No dirty consumer rebuilds this kind — see NodeDefinition.dirtyTracking.
222
223
  dirtyTracking: false,
224
+ rendersChildren: false,
223
225
  renderer: {
224
226
  kind: 'parametric',
225
227
  module: () => import('./renderer'),
@@ -1 +1 @@
1
- {"version":3,"file":"parametrics.d.ts","sourceRoot":"","sources":["../../src/elevator/parametrics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AAE1E,eAAO,MAAM,mBAAmB,EAAE,oBAAoB,CAAC,YAAY,CAGlE,CAAA"}
1
+ {"version":3,"file":"parametrics.d.ts","sourceRoot":"","sources":["../../src/elevator/parametrics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AAE1E,eAAO,MAAM,mBAAmB,EAAE,oBAAoB,CAAC,YAAY,CAoGlE,CAAA"}
@@ -1,4 +1,101 @@
1
1
  export const elevatorParametrics = {
2
- groups: [],
2
+ groups: [
3
+ {
4
+ label: 'Position',
5
+ fields: [
6
+ { key: 'position', kind: 'vec3' },
7
+ {
8
+ key: 'rotation',
9
+ kind: 'number',
10
+ label: 'Rotation (rad)',
11
+ min: -Math.PI,
12
+ max: Math.PI,
13
+ step: Math.PI / 36,
14
+ },
15
+ ],
16
+ },
17
+ {
18
+ label: 'Cab',
19
+ fields: [
20
+ { key: 'width', kind: 'number', unit: 'm', min: 0.8, max: 1000, step: 0.05 },
21
+ { key: 'depth', kind: 'number', unit: 'm', min: 0.8, max: 1000, step: 0.05 },
22
+ { key: 'cabHeight', kind: 'number', unit: 'm', min: 1.8, max: 1000, step: 0.05 },
23
+ ],
24
+ },
25
+ {
26
+ label: 'Shaft',
27
+ fields: [
28
+ {
29
+ key: 'shaftWallThickness',
30
+ kind: 'number',
31
+ label: 'Wall thickness',
32
+ unit: 'm',
33
+ min: 0.04,
34
+ max: 0.4,
35
+ step: 0.01,
36
+ },
37
+ {
38
+ key: 'shaftStyle',
39
+ kind: 'enum',
40
+ options: ['solid', 'glass'],
41
+ display: 'segmented',
42
+ },
43
+ ],
44
+ },
45
+ {
46
+ label: 'Doors',
47
+ fields: [
48
+ { key: 'doorWidth', kind: 'number', unit: 'm', min: 0.45, max: 1000, step: 0.05 },
49
+ { key: 'doorHeight', kind: 'number', unit: 'm', min: 1.2, max: 1000, step: 0.05 },
50
+ {
51
+ key: 'doorStyle',
52
+ kind: 'enum',
53
+ options: ['center-opening', 'single-left', 'single-right'],
54
+ },
55
+ {
56
+ key: 'doorPanelStyle',
57
+ kind: 'enum',
58
+ label: 'Panel style',
59
+ options: ['glass-frame', 'solid-panel', 'segmented-panel'],
60
+ },
61
+ ],
62
+ },
63
+ {
64
+ label: 'Levels',
65
+ fields: [
66
+ { key: 'fromLevelId', kind: 'ref', label: 'From level', refKind: 'level' },
67
+ { key: 'toLevelId', kind: 'ref', label: 'To level', refKind: 'level' },
68
+ { key: 'defaultLevelId', kind: 'ref', label: 'Default level', refKind: 'level' },
69
+ ],
70
+ },
71
+ {
72
+ label: 'Motion',
73
+ fields: [
74
+ { key: 'speed', kind: 'number', unit: 'm/s', min: 0.5, max: 8, step: 0.1 },
75
+ {
76
+ key: 'doorDurationMs',
77
+ kind: 'number',
78
+ label: 'Door time',
79
+ unit: 'ms',
80
+ min: 300,
81
+ max: 2200,
82
+ step: 50,
83
+ },
84
+ {
85
+ key: 'dwellMs',
86
+ kind: 'number',
87
+ label: 'Dwell',
88
+ unit: 'ms',
89
+ min: 300,
90
+ max: 5000,
91
+ step: 100,
92
+ },
93
+ ],
94
+ },
95
+ ],
96
+ derive: (next) => ({
97
+ doorHeight: Math.min(next.doorHeight, Math.max(1.2, next.cabHeight - 0.1)),
98
+ doorWidth: Math.min(next.doorWidth, Math.max(0.45, next.width - 0.1)),
99
+ }),
3
100
  customPanel: () => import('./panel'),
4
101
  };
@@ -1 +1 @@
1
- {"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/eyebrow-vent/definition.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,cAAc,EACpB,MAAM,kBAAkB,CAAA;AAIzB,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AA+F1C;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB,EAAE,cAAc,CAAC,OAAO,eAAe,CA8DxE,CAAA"}
1
+ {"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/eyebrow-vent/definition.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,cAAc,EACpB,MAAM,kBAAkB,CAAA;AAIzB,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AA+F1C;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB,EAAE,cAAc,CAAC,OAAO,eAAe,CA+DxE,CAAA"}
@@ -127,6 +127,7 @@ export const eyebrowVentDefinition = {
127
127
  parametrics: eyebrowVentParametrics,
128
128
  handles: eyebrowVentHandles,
129
129
  floorplan: buildEyebrowVentFloorplan,
130
+ rendersChildren: false,
130
131
  renderer: {
131
132
  kind: 'parametric',
132
133
  module: () => import('./renderer'),
@@ -102,5 +102,5 @@ export default function EyebrowVentPanel() {
102
102
  { label: 'Scoop', value: 'scoop' },
103
103
  { label: 'Half-round', value: 'half-round' },
104
104
  { label: 'Slant-box', value: 'slant-box' },
105
- ], value: node.style ?? 'scoop' }), _jsx(SliderControl, { label: "Louvers", max: 8, min: 0, onChange: (v) => previewProp({ louverCount: Math.round(v) }), onCommit: (v) => handleUpdate({ louverCount: Math.round(v) }), precision: 0, restoreOnCommit: false, step: 1, value: node.louverCount ?? 3 }), node.style === 'slant-box' ? (_jsx(SliderControl, { label: "Back height", max: 1, min: 0.15, onChange: (v) => previewProp({ backRatio: v }), onCommit: (v) => handleUpdate({ backRatio: v }), precision: 2, restoreOnCommit: false, step: 0.05, value: Math.round((node.backRatio ?? 0.5) * 100) / 100 })) : null] }), _jsxs(PanelSection, { title: "Dimensions", children: [_jsx(SliderControl, { label: "Width", max: 1000, min: 0.4, onChange: (v) => previewProp({ width: v }), onCommit: (v) => handleUpdate({ width: v }), precision: 2, restoreOnCommit: false, step: 0.05, unit: "m", value: Math.round(node.width * 100) / 100 }), _jsx(SliderControl, { label: "Depth", max: 1000, min: 0.2, onChange: (v) => previewProp({ depth: v }), onCommit: (v) => handleUpdate({ depth: v }), precision: 2, restoreOnCommit: false, step: 0.05, unit: "m", value: Math.round(node.depth * 100) / 100 }), _jsx(SliderControl, { label: "Height", max: 1000, min: 0.08, onChange: (v) => previewProp({ height: v }), onCommit: (v) => handleUpdate({ height: v }), precision: 2, restoreOnCommit: false, step: 0.02, unit: "m", value: Math.round(node.height * 100) / 100 })] }), _jsxs(PanelSection, { title: "Position", children: [_jsx(SliderControl, { label: "X", max: Math.round(((segment?.width ?? 10) / 2) * 100) / 100, min: -Math.round(((segment?.width ?? 10) / 2) * 100) / 100, onChange: (v) => previewProp({ position: [v, node.position[1] ?? 0, node.position[2] ?? 0] }), onCommit: (v) => handleUpdate({ position: [v, node.position[1] ?? 0, node.position[2] ?? 0] }), precision: 2, restoreOnCommit: false, step: 0.05, unit: "m", value: Math.round((node.position[0] ?? 0) * 100) / 100 }), _jsx(SliderControl, { label: "Y", max: Math.max((segment?.wallHeight ?? 3) + (segment ? getActiveRoofHeight(segment) : 3) + 2, (node.position[1] ?? 0) + 0.1), min: Math.min(0, (node.position[1] ?? 0) - 0.5), onChange: (v) => previewProp({ position: [node.position[0] ?? 0, v, node.position[2] ?? 0] }), onCommit: (v) => handleUpdate({ position: [node.position[0] ?? 0, v, node.position[2] ?? 0] }), precision: 2, restoreOnCommit: false, step: 0.05, unit: "m", value: Math.round((node.position[1] ?? 0) * 100) / 100 }), _jsx(SliderControl, { label: "Z", max: Math.round(((segment?.depth ?? 10) / 2) * 100) / 100, min: -Math.round(((segment?.depth ?? 10) / 2) * 100) / 100, onChange: (v) => previewProp({ position: [node.position[0] ?? 0, node.position[1] ?? 0, v] }), onCommit: (v) => handleUpdate({ position: [node.position[0] ?? 0, node.position[1] ?? 0, v] }), precision: 2, restoreOnCommit: false, step: 0.05, unit: "m", value: Math.round((node.position[2] ?? 0) * 100) / 100 }), _jsx(SliderControl, { label: "Rotation", max: 180, min: -180, onChange: (deg) => previewProp({ rotation: (deg * Math.PI) / 180 }), onCommit: (deg) => handleUpdate({ rotation: (deg * Math.PI) / 180 }), precision: 0, restoreOnCommit: false, step: 1, unit: "\u00B0", value: Math.round(((node.rotation ?? 0) * 180) / Math.PI) })] }), _jsx(PanelSection, { title: "Actions", children: _jsxs(ActionGroup, { children: [_jsx(ActionButton, { icon: _jsx(Move, { className: "h-3.5 w-3.5" }), label: "Move", onClick: handleMove }), _jsx(ActionButton, { icon: _jsx(Copy, { className: "h-3.5 w-3.5" }), label: "Duplicate", onClick: handleDuplicate }), _jsx(ActionButton, { className: "hover:bg-red-500/20", icon: _jsx(Trash2, { className: "h-3.5 w-3.5 text-red-400" }), label: "Delete", onClick: handleDelete })] }) })] }));
105
+ ], value: node.style ?? 'scoop' }), _jsx(SliderControl, { label: "Louvers", max: 8, min: 0, onChange: (v) => previewProp({ louverCount: Math.round(v) }), onCommit: (v) => handleUpdate({ louverCount: Math.round(v) }), precision: 0, restoreOnCommit: false, step: 1, value: node.louverCount ?? 3 }), node.style === 'slant-box' ? (_jsx(SliderControl, { label: "Back height", max: 1, min: 0.15, onChange: (v) => previewProp({ backRatio: v }), onCommit: (v) => handleUpdate({ backRatio: v }), precision: 2, restoreOnCommit: false, step: 0.05, value: Math.round((node.backRatio ?? 0.5) * 100) / 100 })) : null] }), _jsxs(PanelSection, { title: "Dimensions", children: [_jsx(SliderControl, { label: "Width", max: 1000, min: 0.4, onChange: (v) => previewProp({ width: v }), onCommit: (v) => handleUpdate({ width: v }), precision: 2, restoreOnCommit: false, step: 0.05, unit: "m", value: node.width }), _jsx(SliderControl, { label: "Depth", max: 1000, min: 0.2, onChange: (v) => previewProp({ depth: v }), onCommit: (v) => handleUpdate({ depth: v }), precision: 2, restoreOnCommit: false, step: 0.05, unit: "m", value: node.depth }), _jsx(SliderControl, { label: "Height", max: 1000, min: 0.08, onChange: (v) => previewProp({ height: v }), onCommit: (v) => handleUpdate({ height: v }), precision: 2, restoreOnCommit: false, step: 0.02, unit: "m", value: node.height })] }), _jsxs(PanelSection, { title: "Position", children: [_jsx(SliderControl, { label: "X", max: Math.round(((segment?.width ?? 10) / 2) * 100) / 100, min: -Math.round(((segment?.width ?? 10) / 2) * 100) / 100, onChange: (v) => previewProp({ position: [v, node.position[1] ?? 0, node.position[2] ?? 0] }), onCommit: (v) => handleUpdate({ position: [v, node.position[1] ?? 0, node.position[2] ?? 0] }), precision: 2, restoreOnCommit: false, step: 0.05, unit: "m", value: node.position[0] ?? 0 }), _jsx(SliderControl, { label: "Y", max: Math.max((segment?.wallHeight ?? 3) + (segment ? getActiveRoofHeight(segment) : 3) + 2, (node.position[1] ?? 0) + 0.1), min: Math.min(0, (node.position[1] ?? 0) - 0.5), onChange: (v) => previewProp({ position: [node.position[0] ?? 0, v, node.position[2] ?? 0] }), onCommit: (v) => handleUpdate({ position: [node.position[0] ?? 0, v, node.position[2] ?? 0] }), precision: 2, restoreOnCommit: false, step: 0.05, unit: "m", value: node.position[1] ?? 0 }), _jsx(SliderControl, { label: "Z", max: Math.round(((segment?.depth ?? 10) / 2) * 100) / 100, min: -Math.round(((segment?.depth ?? 10) / 2) * 100) / 100, onChange: (v) => previewProp({ position: [node.position[0] ?? 0, node.position[1] ?? 0, v] }), onCommit: (v) => handleUpdate({ position: [node.position[0] ?? 0, node.position[1] ?? 0, v] }), precision: 2, restoreOnCommit: false, step: 0.05, unit: "m", value: node.position[2] ?? 0 }), _jsx(SliderControl, { label: "Rotation", max: 180, min: -180, onChange: (deg) => previewProp({ rotation: (deg * Math.PI) / 180 }), onCommit: (deg) => handleUpdate({ rotation: (deg * Math.PI) / 180 }), precision: 0, restoreOnCommit: false, step: 1, unit: "\u00B0", value: Math.round(((node.rotation ?? 0) * 180) / Math.PI) })] }), _jsx(PanelSection, { title: "Actions", children: _jsxs(ActionGroup, { children: [_jsx(ActionButton, { icon: _jsx(Move, { className: "h-3.5 w-3.5" }), label: "Move", onClick: handleMove }), _jsx(ActionButton, { icon: _jsx(Copy, { className: "h-3.5 w-3.5" }), label: "Duplicate", onClick: handleDuplicate }), _jsx(ActionButton, { className: "hover:bg-red-500/20", icon: _jsx(Trash2, { className: "h-3.5 w-3.5 text-red-400" }), label: "Delete", onClick: handleDelete })] }) })] }));
106
106
  }
@@ -1 +1 @@
1
- {"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/fence/definition.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,cAAc,EAEpB,MAAM,kBAAkB,CAAA;AAmBzB,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAgPpC;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,eAAe,EAAE,cAAc,CAAC,OAAO,SAAS,CA0H5D,CAAA"}
1
+ {"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/fence/definition.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,cAAc,EAEpB,MAAM,kBAAkB,CAAA;AAmBzB,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAgPpC;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,eAAe,EAAE,cAAc,CAAC,OAAO,SAAS,CA2H5D,CAAA"}
@@ -256,6 +256,7 @@ export const fenceDefinition = {
256
256
  style: 'slat',
257
257
  }),
258
258
  capabilities: {
259
+ surfacePlacement: 'floor-only',
259
260
  selectable: { hitVolume: 'bbox' },
260
261
  surfaces: { sides: { faces: 'all' } },
261
262
  duplicable: true,
@@ -39,5 +39,5 @@ export function FenceLengthEditor({ node, onUpdate, }) {
39
39
  export function FenceCurveEditor({ node, onUpdate, }) {
40
40
  const curveOffset = getClampedWallCurveOffset(node);
41
41
  const maxCurveOffset = getMaxWallCurveOffset(node);
42
- return (_jsx(SliderControl, { label: "Curve", max: Math.max(0.01, maxCurveOffset), min: -Math.max(0.01, maxCurveOffset), onChange: (value) => onUpdate({ curveOffset: normalizeWallCurveOffset(node, value) }), precision: 2, step: 0.1, unit: "m", value: Math.round(curveOffset * 100) / 100 }));
42
+ return (_jsx(SliderControl, { label: "Curve", max: Math.max(0.01, maxCurveOffset), min: -Math.max(0.01, maxCurveOffset), onChange: (value) => onUpdate({ curveOffset: normalizeWallCurveOffset(node, value) }), precision: 2, step: 0.1, unit: "m", value: curveOffset }));
43
43
  }
@@ -1,12 +1,12 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
3
  import { calculateLevelMiters, collectAlignmentAnchors, emitter, getTwoPointFenceCurveTangents, getWallMiterBoundaryPoints, resolveAlignment, sampleFenceSpline, useScene, } from '@pascal-app/core';
4
- import { CursorSphere, clearPlacementSurface, createFenceOnCurrentLevel, createSplineFenceOnCurrentLevel, EDITOR_LAYER, formatAngleRadians, formatLinearMeasurement, getAngleArcToSegmentReference, getAngleToSegmentReference, getSegmentAngleReferenceAtPoint, getSegmentGridStep, isAlignmentGuideActive, isAngleSnapActive, isGridSnapActive, isMagneticSnapActive, markToolCancelConsumed, publishPlacementSurface, resolvePointerSupportSurface, snapFenceDraftPoint, snapScalarToGrid, triggerSFX, useAlignmentGuides, useEditor, useFenceCurveDraft, useFloorplanDraftPreview, useSegmentDraftChain, } from '@pascal-app/editor';
4
+ import { CursorSphere, clearPlacementSurface, createFenceOnCurrentLevel, createSplineFenceOnCurrentLevel, DraftMeasurementLabel, EDITOR_LAYER, formatAngleRadians, formatLinearMeasurement, getAngleArcToSegmentReference, getAngleToSegmentReference, getSegmentAngleReferenceAtPoint, getSegmentGridStep, isAlignmentGuideActive, isAngleSnapActive, isGridSnapActive, isMagneticSnapActive, markToolCancelConsumed, publishPlacementSurface, resolvePointerSupportSurface, snapFenceDraftPoint, snapScalarToGrid, triggerSFX, useAlignmentGuides, useEditor, useFenceCurveDraft, useFloorplanDraftPreview, useSegmentDraftChain, } from '@pascal-app/editor';
5
5
  import { getSceneTheme, useViewer } from '@pascal-app/viewer';
6
6
  import { useThree } from '@react-three/fiber';
7
7
  import { useEffect, useMemo, useRef, useState } from 'react';
8
8
  import { BufferGeometry, DoubleSide, Vector3 } from 'three';
9
- import { DraftAngleArc, DraftAxisGuides, DraftMeasurementLabel, getNearestAxisAngleLabel, } from '../shared/draft-axis-guides';
9
+ import { DraftAngleArc, DraftAxisGuides, getNearestAxisAngleLabel, } from '../shared/draft-axis-guides';
10
10
  const FENCE_PREVIEW_HEIGHT = 1.8;
11
11
  const FENCE_PREVIEW_THICKNESS = 0.08;
12
12
  // Grid-plane surface publish (pointer-decided): scratch + constant normal so
@@ -1 +1 @@
1
- {"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/guide/definition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgC,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEpF,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAEpC;;;;;GAKG;AACH,eAAO,MAAM,eAAe,EAAE,cAAc,CAAC,OAAO,SAAS,CAgD5D,CAAA"}
1
+ {"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/guide/definition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgC,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEpF,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAEpC;;;;;GAKG;AACH,eAAO,MAAM,eAAe,EAAE,cAAc,CAAC,OAAO,SAAS,CAiD5D,CAAA"}
@@ -31,6 +31,7 @@ export const guideDefinition = {
31
31
  parametrics: guideParametrics,
32
32
  // No dirty consumer rebuilds this kind — see NodeDefinition.dirtyTracking.
33
33
  dirtyTracking: false,
34
+ rendersChildren: false,
34
35
  renderer: {
35
36
  kind: 'parametric',
36
37
  module: () => import('./renderer'),
@@ -1 +1 @@
1
- {"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/gutter/definition.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,cAAc,EACpB,MAAM,kBAAkB,CAAA;AAKzB,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAoHrC;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,gBAAgB,EAAE,cAAc,CAAC,OAAO,UAAU,CA8D9D,CAAA"}
1
+ {"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/gutter/definition.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,cAAc,EACpB,MAAM,kBAAkB,CAAA;AAKzB,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAoHrC;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,gBAAgB,EAAE,cAAc,CAAC,OAAO,UAAU,CA+D9D,CAAA"}
@@ -148,6 +148,7 @@ export const gutterDefinition = {
148
148
  handles: gutterHandles,
149
149
  floorplan: buildGutterFloorplan,
150
150
  floorplanDependsOnSiblings: true,
151
+ rendersChildren: false,
151
152
  renderer: {
152
153
  kind: 'parametric',
153
154
  module: () => import('./renderer'),
@@ -1 +1 @@
1
- {"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../src/hvac-equipment/tool.tsx"],"names":[],"mappings":"AA4BA;;;;;;;GAOG;AACH,QAAA,MAAM,iBAAiB,0CAiHtB,CAAA;AAED,eAAe,iBAAiB,CAAA"}
1
+ {"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../src/hvac-equipment/tool.tsx"],"names":[],"mappings":"AA4BA;;;;;;;GAOG;AACH,QAAA,MAAM,iBAAiB,0CAwHtB,CAAA;AAED,eAAe,iBAAiB,CAAA"}
@@ -28,10 +28,15 @@ function snap(value, step) {
28
28
  */
29
29
  const HvacEquipmentTool = () => {
30
30
  const activeLevelId = useViewer((s) => s.selection.levelId);
31
+ const toolDefaults = useEditor((s) => s.toolDefaults['hvac-equipment']);
31
32
  const [cursor, setCursor] = useState(null);
32
33
  const [yaw, setYaw] = useState(0);
33
34
  const yawRef = useRef(0);
34
- const previewNode = useMemo(() => HvacEquipmentNode.parse({ ...hvacEquipmentDefinition.defaults(), name: 'Furnace' }), []);
35
+ const previewNode = useMemo(() => HvacEquipmentNode.parse({
36
+ ...hvacEquipmentDefinition.defaults(),
37
+ ...toolDefaults,
38
+ name: 'Furnace',
39
+ }), [toolDefaults]);
35
40
  const ghost = useMemo(() => {
36
41
  const group = buildHvacEquipmentGeometry(previewNode);
37
42
  group.traverse((child) => {
@@ -67,6 +72,7 @@ const HvacEquipmentTool = () => {
67
72
  const position = resolveAligned(event);
68
73
  const unit = HvacEquipmentNode.parse({
69
74
  ...hvacEquipmentDefinition.defaults(),
75
+ ...toolDefaults,
70
76
  name: 'Furnace',
71
77
  position,
72
78
  rotation: yawRef.current,
@@ -110,7 +116,7 @@ const HvacEquipmentTool = () => {
110
116
  window.removeEventListener('keydown', onKeyDown, true);
111
117
  clearDrawAlignment();
112
118
  };
113
- }, [activeLevelId]);
119
+ }, [activeLevelId, toolDefaults]);
114
120
  if (!activeLevelId || !cursor)
115
121
  return null;
116
122
  return (_jsxs(LevelOffsetGroup, { children: [_jsx("group", { position: cursor, rotation: [0, yaw, 0], children: _jsx("primitive", { object: ghost }) }), _jsx(Html, { center: true, position: [cursor[0], cursor[1] + previewNode.height + 0.4, cursor[2]], style: { pointerEvents: 'none', userSelect: 'none' }, zIndexRange: [100, 0], children: _jsx("div", { className: "flex items-center gap-2 whitespace-nowrap rounded-full border border-border/60 bg-background/90 px-4 py-1.5 text-xs tabular-nums shadow-sm backdrop-blur", children: _jsx("span", { className: "font-medium text-foreground", children: "R/T rotate" }) }) })] }));
@@ -0,0 +1,5 @@
1
+ import type { NodeDefinition } from '@pascal-app/core';
2
+ import { ImportedMeshNode } from './schema';
3
+ /** Format-neutral fallback for imported objects without a parametric node. */
4
+ export declare const importedMeshDefinition: NodeDefinition<typeof ImportedMeshNode>;
5
+ //# sourceMappingURL=definition.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/imported-mesh/definition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAGtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAE3C,8EAA8E;AAC9E,eAAO,MAAM,sBAAsB,EAAE,cAAc,CAAC,OAAO,gBAAgB,CAiC1E,CAAA"}
@@ -0,0 +1,38 @@
1
+ import { buildImportedMeshFloorplan } from './floorplan';
2
+ import { buildImportedMeshGeometry } from './geometry';
3
+ import { ImportedMeshNode } from './schema';
4
+ /** Format-neutral fallback for imported objects without a parametric node. */
5
+ export const importedMeshDefinition = {
6
+ kind: 'imported-mesh',
7
+ schemaVersion: 1,
8
+ schema: ImportedMeshNode,
9
+ category: 'structure',
10
+ snapProfile: 'item',
11
+ defaults: () => ({
12
+ object: 'node',
13
+ parentId: null,
14
+ visible: true,
15
+ metadata: {},
16
+ position: [0, 0, 0],
17
+ rotation: [0, 0, 0],
18
+ primitives: [],
19
+ }),
20
+ capabilities: {
21
+ selectable: { hitVolume: 'bbox' },
22
+ duplicable: true,
23
+ deletable: true,
24
+ presettable: false,
25
+ },
26
+ geometryKey: (node) => `${node.id}:${node.primitives.length}`,
27
+ geometry: buildImportedMeshGeometry,
28
+ floorplan: buildImportedMeshFloorplan,
29
+ presentation: {
30
+ label: 'Imported Mesh',
31
+ description: 'Geometry preserved from an imported model when no native Pascal shape exists.',
32
+ icon: { kind: 'url', src: '/icons/item.webp' },
33
+ hidden: true,
34
+ },
35
+ mcp: {
36
+ description: 'Imported triangle geometry with source identity and properties in metadata.',
37
+ },
38
+ };
@@ -0,0 +1,4 @@
1
+ import type { FloorplanGeometry, GeometryContext, ImportedMeshNode } from '@pascal-app/core';
2
+ /** A compact plan proxy for imported geometry, derived from its XZ bounds. */
3
+ export declare function buildImportedMeshFloorplan(node: ImportedMeshNode, ctx: GeometryContext): FloorplanGeometry | null;
4
+ //# sourceMappingURL=floorplan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"floorplan.d.ts","sourceRoot":"","sources":["../../src/imported-mesh/floorplan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EAEjB,eAAe,EACf,gBAAgB,EACjB,MAAM,kBAAkB,CAAA;AAEzB,8EAA8E;AAC9E,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,gBAAgB,EACtB,GAAG,EAAE,eAAe,GACnB,iBAAiB,GAAG,IAAI,CAgC1B"}
@@ -0,0 +1,34 @@
1
+ /** A compact plan proxy for imported geometry, derived from its XZ bounds. */
2
+ export function buildImportedMeshFloorplan(node, ctx) {
3
+ let minX = Number.POSITIVE_INFINITY;
4
+ let maxX = Number.NEGATIVE_INFINITY;
5
+ let minZ = Number.POSITIVE_INFINITY;
6
+ let maxZ = Number.NEGATIVE_INFINITY;
7
+ for (const primitive of node.primitives) {
8
+ for (let i = 0; i + 2 < primitive.positions.length; i += 3) {
9
+ minX = Math.min(minX, primitive.positions[i]);
10
+ maxX = Math.max(maxX, primitive.positions[i]);
11
+ minZ = Math.min(minZ, primitive.positions[i + 2]);
12
+ maxZ = Math.max(maxZ, primitive.positions[i + 2]);
13
+ }
14
+ }
15
+ if (![minX, maxX, minZ, maxZ].every(Number.isFinite))
16
+ return null;
17
+ const yaw = node.rotation[1];
18
+ const cos = Math.cos(-yaw);
19
+ const sin = Math.sin(-yaw);
20
+ const toPlan = (x, z) => [
21
+ node.position[0] + x * cos - z * sin,
22
+ node.position[2] + x * sin + z * cos,
23
+ ];
24
+ const selected = Boolean(ctx.viewState?.selected || ctx.viewState?.highlighted);
25
+ return {
26
+ kind: 'polygon',
27
+ points: [toPlan(minX, minZ), toPlan(maxX, minZ), toPlan(maxX, maxZ), toPlan(minX, maxZ)],
28
+ fill: '#94a3b8',
29
+ fillOpacity: selected ? 0.28 : 0.14,
30
+ stroke: selected ? (ctx.viewState?.palette?.selectedStroke ?? '#f97316') : '#64748b',
31
+ strokeWidth: selected ? 0.04 : 0.025,
32
+ vectorEffect: 'non-scaling-stroke',
33
+ };
34
+ }
@@ -0,0 +1,5 @@
1
+ import type { ImportedMeshNode } from '@pascal-app/core';
2
+ import { Group } from 'three';
3
+ /** Build serialized imported triangle buffers without source-format coupling. */
4
+ export declare function buildImportedMeshGeometry(node: ImportedMeshNode): Group;
5
+ //# sourceMappingURL=geometry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"geometry.d.ts","sourceRoot":"","sources":["../../src/imported-mesh/geometry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AACxD,OAAO,EAIL,KAAK,EAGN,MAAM,OAAO,CAAA;AAEd,iFAAiF;AACjF,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,gBAAgB,GAAG,KAAK,CA6BvE"}
@@ -0,0 +1,34 @@
1
+ import { BufferGeometry, Float32BufferAttribute, FrontSide, Group, Mesh, MeshStandardMaterial, } from 'three';
2
+ /** Build serialized imported triangle buffers without source-format coupling. */
3
+ export function buildImportedMeshGeometry(node) {
4
+ const group = new Group();
5
+ for (const [primitiveIndex, primitive] of node.primitives.entries()) {
6
+ if (primitive.positions.length < 9)
7
+ continue;
8
+ const geometry = new BufferGeometry();
9
+ geometry.setAttribute('position', new Float32BufferAttribute(primitive.positions, 3));
10
+ if (primitive.normals?.length === primitive.positions.length) {
11
+ geometry.setAttribute('normal', new Float32BufferAttribute(primitive.normals, 3));
12
+ }
13
+ else {
14
+ geometry.computeVertexNormals();
15
+ }
16
+ if (primitive.indices.length >= 3)
17
+ geometry.setIndex(primitive.indices);
18
+ geometry.computeBoundingBox();
19
+ geometry.computeBoundingSphere();
20
+ const material = new MeshStandardMaterial({
21
+ color: primitive.color,
22
+ opacity: primitive.opacity,
23
+ transparent: primitive.opacity < 1,
24
+ depthWrite: primitive.opacity >= 1,
25
+ metalness: 0.05,
26
+ roughness: 0.8,
27
+ side: FrontSide,
28
+ });
29
+ const mesh = new Mesh(geometry, material);
30
+ mesh.name = `${node.name ?? 'Imported mesh'} primitive ${primitiveIndex + 1}`;
31
+ group.add(mesh);
32
+ }
33
+ return group;
34
+ }
@@ -0,0 +1,4 @@
1
+ export { importedMeshDefinition } from './definition';
2
+ export { buildImportedMeshGeometry } from './geometry';
3
+ export { ImportedMeshNode } from './schema';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/imported-mesh/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAA;AACrD,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAA;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA"}
@@ -0,0 +1,3 @@
1
+ export { importedMeshDefinition } from './definition';
2
+ export { buildImportedMeshGeometry } from './geometry';
3
+ export { ImportedMeshNode } from './schema';
@@ -0,0 +1,2 @@
1
+ export { ImportedMeshNode } from '@pascal-app/core';
2
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/imported-mesh/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA"}
@@ -0,0 +1 @@
1
+ export { ImportedMeshNode } from '@pascal-app/core';
package/dist/index.d.ts CHANGED
@@ -38,6 +38,7 @@ export { fenceDefinition } from './fence';
38
38
  export { guideDefinition } from './guide';
39
39
  export { gutterDefinition } from './gutter';
40
40
  export { hvacEquipmentDefinition } from './hvac-equipment';
41
+ export { importedMeshDefinition } from './imported-mesh';
41
42
  export { itemDefinition } from './item';
42
43
  export { leanToExtensionDefinition } from './lean-to-extension';
43
44
  export { levelDefinition } from './level';
@@ -61,6 +62,7 @@ export { stairDefinition } from './stair';
61
62
  export { stairSegmentDefinition } from './stair-segment';
62
63
  export { structuralGridDefinition } from './structural-grid';
63
64
  export { turbineVentDefinition } from './turbine-vent';
65
+ export { unitDefinition } from './unit';
64
66
  export { wallDefinition } from './wall';
65
67
  export { windowDefinition } from './window';
66
68
  export { zoneDefinition } from './zone';