@pascal-app/core 1.0.0-beta.5 → 1.0.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 (417) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +23 -0
  3. package/dist/capture/index.d.ts +3 -0
  4. package/dist/capture/index.d.ts.map +1 -0
  5. package/dist/capture/index.js +2 -0
  6. package/dist/capture/schema.d.ts +417 -0
  7. package/dist/capture/schema.d.ts.map +1 -0
  8. package/dist/capture/schema.js +350 -0
  9. package/dist/capture/source.d.ts +60 -0
  10. package/dist/capture/source.d.ts.map +1 -0
  11. package/dist/capture/source.js +254 -0
  12. package/dist/events/bus.d.ts +58 -7
  13. package/dist/events/bus.d.ts.map +1 -1
  14. package/dist/events/hidden-wall-pointer-hold.d.ts +28 -0
  15. package/dist/events/hidden-wall-pointer-hold.d.ts.map +1 -0
  16. package/dist/events/hidden-wall-pointer-hold.js +37 -0
  17. package/dist/hooks/spatial-grid/floor-placed-elevation.d.ts +4 -4
  18. package/dist/hooks/spatial-grid/floor-placed-elevation.d.ts.map +1 -1
  19. package/dist/hooks/spatial-grid/floor-placed-elevation.js +7 -12
  20. package/dist/hooks/spatial-grid/floor-placed-footprints.d.ts +4 -0
  21. package/dist/hooks/spatial-grid/floor-placed-footprints.d.ts.map +1 -0
  22. package/dist/hooks/spatial-grid/floor-placed-footprints.js +7 -0
  23. package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts +5 -8
  24. package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts.map +1 -1
  25. package/dist/hooks/spatial-grid/spatial-grid-manager.js +23 -106
  26. package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts +2931 -2
  27. package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts.map +1 -1
  28. package/dist/hooks/spatial-grid/spatial-grid-sync.js +207 -30
  29. package/dist/hooks/spatial-grid/support-host-patch.d.ts +45 -1
  30. package/dist/hooks/spatial-grid/support-host-patch.d.ts.map +1 -1
  31. package/dist/hooks/spatial-grid/support-host-patch.js +174 -9
  32. package/dist/hooks/spatial-grid/use-spatial-query.d.ts +1 -1
  33. package/dist/hooks/spatial-grid/use-spatial-query.js +1 -1
  34. package/dist/index.d.ts +74 -64
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +74 -61
  37. package/dist/lib/asset-storage.d.ts.map +1 -1
  38. package/dist/lib/asset-storage.js +4 -1
  39. package/dist/lib/door-operation.d.ts +1 -1
  40. package/dist/lib/item-polygon-overlap.d.ts +6 -0
  41. package/dist/lib/item-polygon-overlap.d.ts.map +1 -0
  42. package/dist/lib/item-polygon-overlap.js +67 -0
  43. package/dist/lib/level-name.d.ts +1 -1
  44. package/dist/lib/measurement-geometry.d.ts +4 -4
  45. package/dist/lib/plan-footprint.d.ts +41 -0
  46. package/dist/lib/plan-footprint.d.ts.map +1 -0
  47. package/dist/lib/plan-footprint.js +58 -0
  48. package/dist/lib/polygon-union.d.ts +4 -0
  49. package/dist/lib/polygon-union.d.ts.map +1 -0
  50. package/dist/lib/polygon-union.js +306 -0
  51. package/dist/lib/roof-overlap.d.ts +32 -0
  52. package/dist/lib/roof-overlap.d.ts.map +1 -0
  53. package/dist/lib/roof-overlap.js +72 -0
  54. package/dist/lib/room-topology-index.d.ts +1 -1
  55. package/dist/lib/room-topology-index.js +1 -1
  56. package/dist/lib/selection-proxy.d.ts +1 -1
  57. package/dist/lib/slab-polygon.d.ts +36 -3
  58. package/dist/lib/slab-polygon.d.ts.map +1 -1
  59. package/dist/lib/slab-polygon.js +135 -29
  60. package/dist/lib/space-detection.d.ts +12 -1
  61. package/dist/lib/space-detection.d.ts.map +1 -1
  62. package/dist/lib/space-detection.js +58 -25
  63. package/dist/lib/terrain-brush.d.ts +1 -1
  64. package/dist/lib/terrain-brush.js +1 -1
  65. package/dist/lib/terrain-codec.d.ts +2 -2
  66. package/dist/lib/terrain-codec.js +1 -1
  67. package/dist/lib/terrain-raycast.d.ts +1 -1
  68. package/dist/lib/terrain-raycast.js +1 -1
  69. package/dist/lib/terrain-source.d.ts +3 -3
  70. package/dist/lib/terrain-source.js +3 -3
  71. package/dist/lib/terrain-support.d.ts +1 -1
  72. package/dist/lib/terrain-support.js +3 -3
  73. package/dist/lib/unit-containment.d.ts +19 -0
  74. package/dist/lib/unit-containment.d.ts.map +1 -0
  75. package/dist/lib/unit-containment.js +158 -0
  76. package/dist/lib/unit-report.d.ts +19 -0
  77. package/dist/lib/unit-report.d.ts.map +1 -0
  78. package/dist/lib/unit-report.js +36 -0
  79. package/dist/lib/wall-distance.d.ts +2 -2
  80. package/dist/lib/wall-distance.js +1 -1
  81. package/dist/lib/zone-quantities.d.ts +1 -1
  82. package/dist/lib/zone-quantities.js +7 -7
  83. package/dist/material-library.d.ts +1 -1
  84. package/dist/material-library.js +1 -1
  85. package/dist/procedural-items/fixtures.d.ts +261 -0
  86. package/dist/procedural-items/fixtures.d.ts.map +1 -0
  87. package/dist/procedural-items/fixtures.js +349 -0
  88. package/dist/procedural-items/index.d.ts +10 -0
  89. package/dist/procedural-items/index.d.ts.map +1 -0
  90. package/dist/procedural-items/index.js +9 -0
  91. package/dist/procedural-items/integration.d.ts +92 -0
  92. package/dist/procedural-items/integration.d.ts.map +1 -0
  93. package/dist/procedural-items/integration.js +19 -0
  94. package/dist/procedural-items/library-colors.d.ts +56 -0
  95. package/dist/procedural-items/library-colors.d.ts.map +1 -0
  96. package/dist/procedural-items/library-colors.js +84 -0
  97. package/dist/procedural-items/materials.d.ts +5 -0
  98. package/dist/procedural-items/materials.d.ts.map +1 -0
  99. package/dist/procedural-items/materials.js +47 -0
  100. package/dist/procedural-items/node.d.ts +280 -0
  101. package/dist/procedural-items/node.d.ts.map +1 -0
  102. package/dist/procedural-items/node.js +71 -0
  103. package/dist/procedural-items/placement.d.ts +7 -0
  104. package/dist/procedural-items/placement.d.ts.map +1 -0
  105. package/dist/procedural-items/placement.js +48 -0
  106. package/dist/procedural-items/query.d.ts +50 -0
  107. package/dist/procedural-items/query.d.ts.map +1 -0
  108. package/dist/procedural-items/query.js +298 -0
  109. package/dist/procedural-items/recipe.d.ts +144 -0
  110. package/dist/procedural-items/recipe.d.ts.map +1 -0
  111. package/dist/procedural-items/recipe.js +372 -0
  112. package/dist/procedural-items/spatial.d.ts +19 -0
  113. package/dist/procedural-items/spatial.d.ts.map +1 -0
  114. package/dist/procedural-items/spatial.js +39 -0
  115. package/dist/registry/__bench__/relations-resolver.bench.js +2 -2
  116. package/dist/registry/handles.d.ts +36 -7
  117. package/dist/registry/handles.d.ts.map +1 -1
  118. package/dist/registry/index.d.ts +6 -7
  119. package/dist/registry/index.d.ts.map +1 -1
  120. package/dist/registry/index.js +4 -5
  121. package/dist/registry/registry.d.ts +13 -6
  122. package/dist/registry/registry.d.ts.map +1 -1
  123. package/dist/registry/registry.js +37 -4
  124. package/dist/registry/relations-resolver.d.ts +2 -2
  125. package/dist/registry/relations-resolver.js +1 -1
  126. package/dist/registry/scene-api.d.ts +18 -2
  127. package/dist/registry/scene-api.d.ts.map +1 -1
  128. package/dist/registry/scene-api.js +50 -2
  129. package/dist/registry/subtree.d.ts +1 -1
  130. package/dist/registry/subtree.js +2 -2
  131. package/dist/registry/types.d.ts +246 -21
  132. package/dist/registry/types.d.ts.map +1 -1
  133. package/dist/registry/use-registry-version.js +1 -1
  134. package/dist/registry/validate-relations.d.ts +4 -0
  135. package/dist/registry/validate-relations.d.ts.map +1 -0
  136. package/dist/registry/validate-relations.js +22 -0
  137. package/dist/schema/__bench__/node-parsers.bench.d.ts +24 -0
  138. package/dist/schema/__bench__/node-parsers.bench.d.ts.map +1 -0
  139. package/dist/schema/__bench__/node-parsers.bench.js +314 -0
  140. package/dist/schema/__fixtures__/node-fixtures.d.ts +28 -0
  141. package/dist/schema/__fixtures__/node-fixtures.d.ts.map +1 -0
  142. package/dist/schema/__fixtures__/node-fixtures.js +127 -0
  143. package/dist/schema/base.d.ts +1 -1
  144. package/dist/schema/base.d.ts.map +1 -1
  145. package/dist/schema/base.js +9 -2
  146. package/dist/schema/collections.d.ts +1 -1
  147. package/dist/schema/collections.js +1 -1
  148. package/dist/schema/compiled-node-parsers.d.ts +40 -0
  149. package/dist/schema/compiled-node-parsers.d.ts.map +1 -0
  150. package/dist/schema/compiled-node-parsers.js +95 -0
  151. package/dist/schema/index.d.ts +73 -66
  152. package/dist/schema/index.d.ts.map +1 -1
  153. package/dist/schema/index.js +65 -57
  154. package/dist/schema/material.d.ts +1 -0
  155. package/dist/schema/material.d.ts.map +1 -1
  156. package/dist/schema/material.js +2 -1
  157. package/dist/schema/nodes/automatic-downspout.d.ts +17 -0
  158. package/dist/schema/nodes/automatic-downspout.d.ts.map +1 -0
  159. package/dist/schema/nodes/automatic-downspout.js +237 -0
  160. package/dist/schema/nodes/block.d.ts +107 -0
  161. package/dist/schema/nodes/block.d.ts.map +1 -0
  162. package/dist/schema/nodes/block.js +206 -0
  163. package/dist/schema/nodes/box-vent.d.ts +8 -2
  164. package/dist/schema/nodes/box-vent.d.ts.map +1 -1
  165. package/dist/schema/nodes/box-vent.js +4 -2
  166. package/dist/schema/nodes/building.d.ts +2 -2
  167. package/dist/schema/nodes/building.d.ts.map +1 -1
  168. package/dist/schema/nodes/building.js +8 -5
  169. package/dist/schema/nodes/cabinet.d.ts +26 -4
  170. package/dist/schema/nodes/cabinet.d.ts.map +1 -1
  171. package/dist/schema/nodes/cabinet.js +29 -8
  172. package/dist/schema/nodes/ceiling.d.ts +2 -2
  173. package/dist/schema/nodes/ceiling.js +5 -5
  174. package/dist/schema/nodes/chimney.d.ts +2 -2
  175. package/dist/schema/nodes/chimney.js +2 -2
  176. package/dist/schema/nodes/column.d.ts +7 -6
  177. package/dist/schema/nodes/column.d.ts.map +1 -1
  178. package/dist/schema/nodes/column.js +3 -2
  179. package/dist/schema/nodes/construction-dimension.d.ts +1 -1
  180. package/dist/schema/nodes/construction-dimension.js +2 -2
  181. package/dist/schema/nodes/cupola.d.ts +9 -1
  182. package/dist/schema/nodes/cupola.d.ts.map +1 -1
  183. package/dist/schema/nodes/cupola.js +4 -2
  184. package/dist/schema/nodes/door.d.ts +1 -1
  185. package/dist/schema/nodes/door.js +2 -2
  186. package/dist/schema/nodes/dormer.d.ts +45 -2
  187. package/dist/schema/nodes/dormer.d.ts.map +1 -1
  188. package/dist/schema/nodes/dormer.js +133 -9
  189. package/dist/schema/nodes/downspout.d.ts +11 -1
  190. package/dist/schema/nodes/downspout.d.ts.map +1 -1
  191. package/dist/schema/nodes/downspout.js +26 -2
  192. package/dist/schema/nodes/duct-fitting.d.ts +18 -1
  193. package/dist/schema/nodes/duct-fitting.d.ts.map +1 -1
  194. package/dist/schema/nodes/duct-fitting.js +26 -5
  195. package/dist/schema/nodes/duct-segment.d.ts +23 -1
  196. package/dist/schema/nodes/duct-segment.d.ts.map +1 -1
  197. package/dist/schema/nodes/duct-segment.js +21 -1
  198. package/dist/schema/nodes/duct-terminal.d.ts +1 -1
  199. package/dist/schema/nodes/duct-terminal.js +1 -1
  200. package/dist/schema/nodes/elevator.d.ts +1 -1
  201. package/dist/schema/nodes/elevator.js +2 -2
  202. package/dist/schema/nodes/eyebrow-vent.d.ts +8 -2
  203. package/dist/schema/nodes/eyebrow-vent.d.ts.map +1 -1
  204. package/dist/schema/nodes/eyebrow-vent.js +4 -2
  205. package/dist/schema/nodes/fence.d.ts +1 -1
  206. package/dist/schema/nodes/fence.js +2 -2
  207. package/dist/schema/nodes/guide.d.ts +1 -1
  208. package/dist/schema/nodes/guide.js +2 -2
  209. package/dist/schema/nodes/gutter.d.ts +36 -2
  210. package/dist/schema/nodes/gutter.d.ts.map +1 -1
  211. package/dist/schema/nodes/gutter.js +310 -3
  212. package/dist/schema/nodes/hanger-overrides.d.ts +7 -0
  213. package/dist/schema/nodes/hanger-overrides.d.ts.map +1 -0
  214. package/dist/schema/nodes/hanger-overrides.js +6 -0
  215. package/dist/schema/nodes/hvac-equipment.d.ts +1 -1
  216. package/dist/schema/nodes/hvac-equipment.js +1 -1
  217. package/dist/schema/nodes/imported-mesh.d.ts +40 -0
  218. package/dist/schema/nodes/imported-mesh.d.ts.map +1 -0
  219. package/dist/schema/nodes/imported-mesh.js +27 -0
  220. package/dist/schema/nodes/item.d.ts +3 -2
  221. package/dist/schema/nodes/item.d.ts.map +1 -1
  222. package/dist/schema/nodes/item.js +8 -3
  223. package/dist/schema/nodes/lean-to-extension.d.ts +212 -0
  224. package/dist/schema/nodes/lean-to-extension.d.ts.map +1 -0
  225. package/dist/schema/nodes/lean-to-extension.js +114 -0
  226. package/dist/schema/nodes/level.d.ts +2 -2
  227. package/dist/schema/nodes/level.d.ts.map +1 -1
  228. package/dist/schema/nodes/level.js +1 -1
  229. package/dist/schema/nodes/lineset.d.ts +1 -1
  230. package/dist/schema/nodes/lineset.js +1 -1
  231. package/dist/schema/nodes/liquid-line.d.ts +1 -1
  232. package/dist/schema/nodes/liquid-line.js +1 -1
  233. package/dist/schema/nodes/measurement.d.ts +1 -1
  234. package/dist/schema/nodes/measurement.js +2 -2
  235. package/dist/schema/nodes/pipe-fitting.d.ts +10 -2
  236. package/dist/schema/nodes/pipe-fitting.d.ts.map +1 -1
  237. package/dist/schema/nodes/pipe-fitting.js +7 -3
  238. package/dist/schema/nodes/pipe-segment.d.ts +24 -2
  239. package/dist/schema/nodes/pipe-segment.d.ts.map +1 -1
  240. package/dist/schema/nodes/pipe-segment.js +21 -1
  241. package/dist/schema/nodes/pipe-trap.d.ts +2 -2
  242. package/dist/schema/nodes/pipe-trap.js +1 -1
  243. package/dist/schema/nodes/ridge-vent.d.ts +2 -2
  244. package/dist/schema/nodes/ridge-vent.d.ts.map +1 -1
  245. package/dist/schema/nodes/ridge-vent.js +7 -4
  246. package/dist/schema/nodes/roof-segment-shape.d.ts +5 -1
  247. package/dist/schema/nodes/roof-segment-shape.d.ts.map +1 -1
  248. package/dist/schema/nodes/roof-segment-shape.js +65 -2
  249. package/dist/schema/nodes/roof-segment-walls.d.ts +4 -2
  250. package/dist/schema/nodes/roof-segment-walls.d.ts.map +1 -1
  251. package/dist/schema/nodes/roof-segment-walls.js +2 -2
  252. package/dist/schema/nodes/roof-segment.d.ts +42 -2
  253. package/dist/schema/nodes/roof-segment.d.ts.map +1 -1
  254. package/dist/schema/nodes/roof-segment.js +81 -4
  255. package/dist/schema/nodes/roof.d.ts +23 -2
  256. package/dist/schema/nodes/roof.d.ts.map +1 -1
  257. package/dist/schema/nodes/roof.js +17 -3
  258. package/dist/schema/nodes/scan.d.ts +19 -2
  259. package/dist/schema/nodes/scan.d.ts.map +1 -1
  260. package/dist/schema/nodes/scan.js +13 -3
  261. package/dist/schema/nodes/shelf.d.ts +3 -3
  262. package/dist/schema/nodes/shelf.d.ts.map +1 -1
  263. package/dist/schema/nodes/shelf.js +3 -4
  264. package/dist/schema/nodes/site.d.ts +1 -1
  265. package/dist/schema/nodes/site.js +2 -2
  266. package/dist/schema/nodes/skylight.d.ts +5 -5
  267. package/dist/schema/nodes/skylight.js +2 -2
  268. package/dist/schema/nodes/slab.d.ts +1 -1
  269. package/dist/schema/nodes/slab.js +3 -3
  270. package/dist/schema/nodes/solar-panel.d.ts +1 -1
  271. package/dist/schema/nodes/solar-panel.js +3 -3
  272. package/dist/schema/nodes/spawn.d.ts +1 -1
  273. package/dist/schema/nodes/spawn.js +1 -1
  274. package/dist/schema/nodes/stair-segment.d.ts +1 -1
  275. package/dist/schema/nodes/stair-segment.js +2 -2
  276. package/dist/schema/nodes/stair.d.ts +2 -2
  277. package/dist/schema/nodes/stair.js +3 -3
  278. package/dist/schema/nodes/structural-grid.d.ts +1 -1
  279. package/dist/schema/nodes/structural-grid.js +1 -1
  280. package/dist/schema/nodes/turbine-vent.d.ts +8 -2
  281. package/dist/schema/nodes/turbine-vent.d.ts.map +1 -1
  282. package/dist/schema/nodes/turbine-vent.js +4 -2
  283. package/dist/schema/nodes/unit.d.ts +33 -0
  284. package/dist/schema/nodes/unit.d.ts.map +1 -0
  285. package/dist/schema/nodes/unit.js +13 -0
  286. package/dist/schema/nodes/wall.d.ts +5 -5
  287. package/dist/schema/nodes/wall.d.ts.map +1 -1
  288. package/dist/schema/nodes/wall.js +13 -6
  289. package/dist/schema/nodes/window.d.ts +10 -3
  290. package/dist/schema/nodes/window.d.ts.map +1 -1
  291. package/dist/schema/nodes/window.js +6 -2
  292. package/dist/schema/nodes/zone.d.ts +2 -2
  293. package/dist/schema/nodes/zone.js +2 -2
  294. package/dist/schema/scene-material.js +2 -2
  295. package/dist/schema/types.d.ts +815 -118
  296. package/dist/schema/types.d.ts.map +1 -1
  297. package/dist/schema/types.js +79 -46
  298. package/dist/services/alignment-anchors.d.ts +6 -11
  299. package/dist/services/alignment-anchors.d.ts.map +1 -1
  300. package/dist/services/alignment-anchors.js +7 -34
  301. package/dist/services/drag-session.d.ts +4 -4
  302. package/dist/services/drag-session.js +1 -1
  303. package/dist/services/hosting.d.ts +4 -10
  304. package/dist/services/hosting.d.ts.map +1 -1
  305. package/dist/services/hosting.js +6 -16
  306. package/dist/services/index.d.ts +16 -13
  307. package/dist/services/index.d.ts.map +1 -1
  308. package/dist/services/index.js +16 -13
  309. package/dist/services/level-height.d.ts +2 -2
  310. package/dist/services/level-height.js +3 -3
  311. package/dist/services/movement.d.ts +3 -3
  312. package/dist/services/movement.js +2 -2
  313. package/dist/services/port-connectivity.d.ts +1 -1
  314. package/dist/services/port-connectivity.js +1 -1
  315. package/dist/services/riser-diagram.d.ts +1 -1
  316. package/dist/services/shelf-board.d.ts +5 -0
  317. package/dist/services/shelf-board.d.ts.map +1 -0
  318. package/dist/services/shelf-board.js +15 -0
  319. package/dist/services/storey.d.ts +2 -2
  320. package/dist/services/storey.js +2 -2
  321. package/dist/services/surface-hosting-procedural-parity.fixtures.d.ts +13 -0
  322. package/dist/services/surface-hosting-procedural-parity.fixtures.d.ts.map +1 -0
  323. package/dist/services/surface-hosting-procedural-parity.fixtures.js +4691 -0
  324. package/dist/services/surface-hosting-shelf-parity.fixtures.d.ts +1060 -0
  325. package/dist/services/surface-hosting-shelf-parity.fixtures.d.ts.map +1 -0
  326. package/dist/services/surface-hosting-shelf-parity.fixtures.js +3127 -0
  327. package/dist/services/surface-hosting.d.ts +88 -0
  328. package/dist/services/surface-hosting.d.ts.map +1 -0
  329. package/dist/services/surface-hosting.js +268 -0
  330. package/dist/services/surface-region.d.ts +8 -0
  331. package/dist/services/surface-region.d.ts.map +1 -0
  332. package/dist/services/surface-region.js +44 -0
  333. package/dist/services/system-graph.d.ts +12 -1
  334. package/dist/services/system-graph.d.ts.map +1 -1
  335. package/dist/services/system-graph.js +36 -6
  336. package/dist/services/validate-dwv.d.ts +1 -1
  337. package/dist/services/validate-dwv.js +1 -1
  338. package/dist/store/actions/node-actions.d.ts +9 -2
  339. package/dist/store/actions/node-actions.d.ts.map +1 -1
  340. package/dist/store/actions/node-actions.js +475 -24
  341. package/dist/store/history-control.d.ts +3 -3
  342. package/dist/store/history-invalidation.d.ts +3 -0
  343. package/dist/store/history-invalidation.d.ts.map +1 -0
  344. package/dist/store/history-invalidation.js +72 -0
  345. package/dist/store/scene-hydration.d.ts +5 -0
  346. package/dist/store/scene-hydration.d.ts.map +1 -0
  347. package/dist/store/scene-hydration.js +57 -0
  348. package/dist/store/use-interactive.d.ts +2 -2
  349. package/dist/store/use-live-terrain.d.ts +1 -1
  350. package/dist/store/use-scene.d.ts +7 -4
  351. package/dist/store/use-scene.d.ts.map +1 -1
  352. package/dist/store/use-scene.js +361 -87
  353. package/dist/systems/elevator/elevator-dispatch.d.ts +2 -2
  354. package/dist/systems/elevator/elevator-dispatch.js +1 -1
  355. package/dist/systems/elevator/elevator-geometry.d.ts +1 -1
  356. package/dist/systems/elevator/elevator-opening-sync.d.ts +1 -1
  357. package/dist/systems/elevator/elevator-opening-sync.js +2 -2
  358. package/dist/systems/elevator/elevator-opening-system.js +3 -3
  359. package/dist/systems/elevator/elevator-runtime.d.ts +3 -3
  360. package/dist/systems/elevator/elevator-runtime.js +3 -3
  361. package/dist/systems/elevator/elevator-service.d.ts +1 -1
  362. package/dist/systems/elevator/elevator-service.js +1 -1
  363. package/dist/systems/fence/fence-centerline.d.ts +2 -2
  364. package/dist/systems/fence/fence-centerline.js +2 -2
  365. package/dist/systems/fence/fence-spline.d.ts +2 -2
  366. package/dist/systems/roof/roof-elevation-system.d.ts +3 -0
  367. package/dist/systems/roof/roof-elevation-system.d.ts.map +1 -0
  368. package/dist/systems/roof/roof-elevation-system.js +94 -0
  369. package/dist/systems/roof/roof-elevation.d.ts +4 -0
  370. package/dist/systems/roof/roof-elevation.d.ts.map +1 -0
  371. package/dist/systems/roof/roof-elevation.js +95 -0
  372. package/dist/systems/roof/roof-footprint.d.ts +17 -0
  373. package/dist/systems/roof/roof-footprint.d.ts.map +1 -0
  374. package/dist/systems/roof/roof-footprint.js +83 -0
  375. package/dist/systems/slab/slab-placement.d.ts +1 -1
  376. package/dist/systems/slab/slab-support.d.ts +1 -1
  377. package/dist/systems/slab/slab-support.js +4 -4
  378. package/dist/systems/stair/stair-flight.d.ts +17 -0
  379. package/dist/systems/stair/stair-flight.d.ts.map +1 -0
  380. package/dist/systems/stair/stair-flight.js +27 -0
  381. package/dist/systems/stair/stair-footprint.d.ts +1 -1
  382. package/dist/systems/stair/stair-opening-preview.d.ts +1621 -1267
  383. package/dist/systems/stair/stair-opening-preview.d.ts.map +1 -1
  384. package/dist/systems/stair/stair-opening-preview.js +2 -2
  385. package/dist/systems/stair/stair-opening-sync.d.ts +1 -1
  386. package/dist/systems/stair/stair-opening-sync.js +6 -6
  387. package/dist/systems/stair/stair-opening-system.d.ts +1 -0
  388. package/dist/systems/stair/stair-opening-system.d.ts.map +1 -1
  389. package/dist/systems/stair/stair-opening-system.js +100 -103
  390. package/dist/systems/stair/stair-rise.d.ts +1 -1
  391. package/dist/systems/stair/stair-rise.d.ts.map +1 -1
  392. package/dist/systems/stair/stair-rise.js +23 -24
  393. package/dist/systems/wall/wall-curve.d.ts +3 -2
  394. package/dist/systems/wall/wall-curve.d.ts.map +1 -1
  395. package/dist/systems/wall/wall-curve.js +73 -0
  396. package/dist/systems/wall/wall-footprint.d.ts +3 -2
  397. package/dist/systems/wall/wall-footprint.d.ts.map +1 -1
  398. package/dist/systems/wall/wall-footprint.js +3 -2
  399. package/dist/systems/wall/wall-mitering.d.ts +1 -1
  400. package/dist/systems/wall/wall-mitering.js +1 -1
  401. package/dist/systems/wall/wall-move.d.ts +1 -1
  402. package/dist/systems/wall/wall-top.d.ts +1 -1
  403. package/dist/systems/wall/wall-topology.d.ts +2 -2
  404. package/dist/systems/wall/wall-topology.js +4 -4
  405. package/dist/utils/clone-scene-graph.d.ts +3 -3
  406. package/dist/utils/clone-scene-graph.d.ts.map +1 -1
  407. package/dist/utils/clone-scene-graph.js +35 -3
  408. package/dist/utils/scene-migrations.d.ts +3 -3
  409. package/dist/utils/scene-migrations.js +3 -3
  410. package/dist/utils/vertical-scene-migration.js +5 -5
  411. package/dist/validation/validate-build-json.d.ts +7 -1
  412. package/dist/validation/validate-build-json.d.ts.map +1 -1
  413. package/dist/validation/validate-build-json.js +92 -4
  414. package/package.json +23 -5
  415. package/dist/systems/elevator/elevator-runtime-system.d.ts +0 -2
  416. package/dist/systems/elevator/elevator-runtime-system.d.ts.map +0 -1
  417. package/dist/systems/elevator/elevator-runtime-system.js +0 -8
@@ -0,0 +1,40 @@
1
+ import { z } from 'zod';
2
+ export declare const ImportedMeshPrimitive: z.ZodObject<{
3
+ positions: z.ZodArray<z.ZodNumber>;
4
+ normals: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
5
+ indices: z.ZodDefault<z.ZodArray<z.ZodNumber>>;
6
+ color: z.ZodDefault<z.ZodString>;
7
+ opacity: z.ZodDefault<z.ZodNumber>;
8
+ }, z.core.$strip>;
9
+ export type ImportedMeshPrimitive = z.infer<typeof ImportedMeshPrimitive>;
10
+ /** Triangle geometry retained when an import has no native Pascal shape. */
11
+ export declare const ImportedMeshNode: z.ZodObject<{
12
+ object: z.ZodDefault<z.ZodLiteral<"node">>;
13
+ name: z.ZodOptional<z.ZodString>;
14
+ parentId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
15
+ visible: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
16
+ camera: z.ZodOptional<z.ZodObject<{
17
+ position: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
18
+ target: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
19
+ mode: z.ZodDefault<z.ZodEnum<{
20
+ perspective: "perspective";
21
+ orthographic: "orthographic";
22
+ }>>;
23
+ fov: z.ZodOptional<z.ZodNumber>;
24
+ zoom: z.ZodOptional<z.ZodNumber>;
25
+ }, z.core.$strip>>;
26
+ metadata: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
27
+ id: z.ZodDefault<z.ZodTemplateLiteral<`imesh_${string}`>>;
28
+ type: z.ZodDefault<z.ZodLiteral<"imported-mesh">>;
29
+ position: z.ZodDefault<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
30
+ rotation: z.ZodDefault<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
31
+ primitives: z.ZodDefault<z.ZodArray<z.ZodObject<{
32
+ positions: z.ZodArray<z.ZodNumber>;
33
+ normals: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
34
+ indices: z.ZodDefault<z.ZodArray<z.ZodNumber>>;
35
+ color: z.ZodDefault<z.ZodString>;
36
+ opacity: z.ZodDefault<z.ZodNumber>;
37
+ }, z.core.$strip>>>;
38
+ }, z.core.$strip>;
39
+ export type ImportedMeshNode = z.infer<typeof ImportedMeshNode>;
40
+ //# sourceMappingURL=imported-mesh.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"imported-mesh.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/imported-mesh.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAQvB,eAAO,MAAM,qBAAqB;;;;;;iBAMhC,CAAA;AAEF,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAA;AAEzE,4EAA4E;AAC5E,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAa5B,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAA"}
@@ -0,0 +1,27 @@
1
+ import dedent from 'dedent';
2
+ import { z } from 'zod';
3
+ import { BaseNode, nodeType, objectId } from '../base.js';
4
+ const finiteNumber = z.number().finite();
5
+ const vector3Array = z
6
+ .array(finiteNumber)
7
+ .refine((values) => values.length % 3 === 0, 'Expected XYZ triples');
8
+ export const ImportedMeshPrimitive = z.object({
9
+ positions: vector3Array,
10
+ normals: vector3Array.optional(),
11
+ indices: z.array(z.number().int().nonnegative()).default([]),
12
+ color: z.string().default('#94a3b8'),
13
+ opacity: z.number().min(0).max(1).default(1),
14
+ });
15
+ /** Triangle geometry retained when an import has no native Pascal shape. */
16
+ export const ImportedMeshNode = BaseNode.extend({
17
+ id: objectId('imesh'),
18
+ type: nodeType('imported-mesh'),
19
+ position: z.tuple([finiteNumber, finiteNumber, finiteNumber]).default([0, 0, 0]),
20
+ rotation: z.tuple([finiteNumber, finiteNumber, finiteNumber]).default([0, 0, 0]),
21
+ primitives: z.array(ImportedMeshPrimitive).default([]),
22
+ }).describe(dedent `
23
+ Imported mesh node - triangle geometry preserved from an external model
24
+ - position / rotation: transform in the parent coordinate system
25
+ - primitives: indexed triangle buffers in meters with source display colors
26
+ - metadata: source-format identity and properties
27
+ `);
@@ -228,7 +228,7 @@ export declare const ItemNode: z.ZodObject<{
228
228
  fov: z.ZodOptional<z.ZodNumber>;
229
229
  zoom: z.ZodOptional<z.ZodNumber>;
230
230
  }, z.core.$strip>>;
231
- metadata: z.ZodDefault<z.ZodOptional<z.ZodJSONSchema>>;
231
+ metadata: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
232
232
  id: z.ZodDefault<z.ZodTemplateLiteral<`item_${string}`>>;
233
233
  type: z.ZodDefault<z.ZodLiteral<"item">>;
234
234
  position: z.ZodDefault<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
@@ -238,7 +238,7 @@ export declare const ItemNode: z.ZodObject<{
238
238
  front: "front";
239
239
  back: "back";
240
240
  }>>;
241
- children: z.ZodDefault<z.ZodArray<z.ZodDefault<z.ZodTemplateLiteral<`item_${string}`>>>>;
241
+ children: z.ZodDefault<z.ZodArray<z.ZodString>>;
242
242
  wallId: z.ZodOptional<z.ZodString>;
243
243
  wallT: z.ZodOptional<z.ZodNumber>;
244
244
  roofSegmentId: z.ZodOptional<z.ZodString>;
@@ -248,6 +248,7 @@ export declare const ItemNode: z.ZodObject<{
248
248
  right: "right";
249
249
  left: "left";
250
250
  }>>;
251
+ blockFaceId: z.ZodOptional<z.ZodString>;
251
252
  supportSlabId: z.ZodOptional<z.ZodString>;
252
253
  collectionIds: z.ZodOptional<z.ZodArray<z.ZodCustom<`collection_${string}`, `collection_${string}`>>>;
253
254
  slots: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
@@ -1 +1 @@
1
- {"version":3,"file":"item.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/item.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAOvB,QAAA,MAAM,mBAAmB;;;;iBAIvB,CAAA;AAEF,QAAA,MAAM,mBAAmB;;;;;;;;;;;;;iBASvB,CAAA;AAEF,QAAA,MAAM,wBAAwB;;;;;;;;;;iBAO5B,CAAA;AAEF,QAAA,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;2BAIjB,CAAA;AAIF,QAAA,MAAM,qBAAqB;;;;;;;iBAOzB,CAAA;AAEF,QAAA,MAAM,iBAAiB;;;;;;iBAMrB,CAAA;AAEF,QAAA,MAAM,YAAY;;;;;;;;;;;;;2BAA2E,CAAA;AAI7F,QAAA,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAGrB,CAAA;AAEF,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAC/D,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAC/D,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAA;AACzE,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAA;AACnD,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAA;AACnE,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAA;AAC3D,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAA;AACjD,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAA;AAE3D,QAAA,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA2Cf,CAAA;AAEF,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAA;AACpD,MAAM,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAA;AAE/C,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAuDnB,CAAA;AAEF,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,QAAQ,CAAC,CAAA;AAE/C,eAAO,MAAM,mCAAmC,MAAM,CAAA;AAEtD;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAM/D;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,QAAQ,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAI5E"}
1
+ {"version":3,"file":"item.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/item.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAOvB,QAAA,MAAM,mBAAmB;;;;iBAIvB,CAAA;AAEF,QAAA,MAAM,mBAAmB;;;;;;;;;;;;;iBASvB,CAAA;AAEF,QAAA,MAAM,wBAAwB;;;;;;;;;;iBAO5B,CAAA;AAEF,QAAA,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;2BAIjB,CAAA;AAIF,QAAA,MAAM,qBAAqB;;;;;;;iBAOzB,CAAA;AAEF,QAAA,MAAM,iBAAiB;;;;;;iBAMrB,CAAA;AAEF,QAAA,MAAM,YAAY;;;;;;;;;;;;;2BAA2E,CAAA;AAI7F,QAAA,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAGrB,CAAA;AAEF,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAC/D,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAC/D,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAA;AACzE,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAA;AACnD,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAA;AACnE,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAA;AAC3D,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAA;AACjD,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAA;AAE3D,QAAA,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA2Cf,CAAA;AAEF,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAA;AACpD,MAAM,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAA;AAE/C,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA4DnB,CAAA;AAEF,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,QAAQ,CAAC,CAAA;AAE/C,eAAO,MAAM,mCAAmC,MAAM,CAAA;AAEtD;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAM/D;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,QAAQ,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAI5E"}
@@ -1,7 +1,7 @@
1
1
  import dedent from 'dedent';
2
2
  import { z } from 'zod';
3
- import { AssetUrl } from '../asset-url';
4
- import { BaseNode, nodeType, objectId } from '../base';
3
+ import { AssetUrl } from '../asset-url.js';
4
+ import { BaseNode, nodeType, objectId } from '../base.js';
5
5
  // --- Control descriptors ---
6
6
  const toggleControlSchema = z.object({
7
7
  kind: z.literal('toggle'),
@@ -104,7 +104,7 @@ export const ItemNode = BaseNode.extend({
104
104
  rotation: z.tuple([z.number(), z.number(), z.number()]).default([0, 0, 0]),
105
105
  scale: z.tuple([z.number(), z.number(), z.number()]).default([1, 1, 1]),
106
106
  side: z.enum(['front', 'back']).optional(),
107
- children: z.array(objectId('item')).default([]),
107
+ children: z.array(z.string()).default([]),
108
108
  // Wall attachment properties (only used when asset.attachTo is "wall" or "wall-side")
109
109
  wallId: z.string().optional(),
110
110
  wallT: z.number().optional(), // 0-1 parametric position along wall
@@ -115,6 +115,11 @@ export const ItemNode = BaseNode.extend({
115
115
  // mounts the node inside the face frame (`getRoofWallFaceFrame`).
116
116
  roofSegmentId: z.string().optional(),
117
117
  roofFace: z.enum(['front', 'back', 'right', 'left']).optional(),
118
+ // Alternative wall-like host: a planar block face. Position is
119
+ // FACE-LOCAL [u, v, normal offset], relative to the live face centroid.
120
+ // The renderer rebuilds the frame from the face normal so the item follows
121
+ // later edits that translate or slope the face.
122
+ blockFaceId: z.string().optional(),
118
123
  // Persisted floor-support host (canonical doc — the same field on other
119
124
  // floor-placed kinds and walls follows these rules). Written at
120
125
  // placement/commit ONLY when overlapping slabs disagree on elevation
@@ -0,0 +1,212 @@
1
+ import { z } from 'zod';
2
+ export declare const LeanToConnectionMode: z.ZodEnum<{
3
+ manual: "manual";
4
+ auto: "auto";
5
+ }>;
6
+ export declare const LeanToCanopyForm: z.ZodEnum<{
7
+ gable: "gable";
8
+ mono: "mono";
9
+ butterfly: "butterfly";
10
+ }>;
11
+ export declare const LeanToHostKind: z.ZodEnum<{
12
+ wall: "wall";
13
+ "slab-edge": "slab-edge";
14
+ freestanding: "freestanding";
15
+ "conical-roof": "conical-roof";
16
+ }>;
17
+ export declare const LeanToRoofEdge: z.ZodEnum<{
18
+ "+X": "+X";
19
+ "-X": "-X";
20
+ "+Z": "+Z";
21
+ "-Z": "-Z";
22
+ }>;
23
+ export declare const LeanToResizeLock: z.ZodEnum<{
24
+ "preserve-high-edge": "preserve-high-edge";
25
+ "preserve-low-edge": "preserve-low-edge";
26
+ "preserve-pitch": "preserve-pitch";
27
+ }>;
28
+ export declare const LeanToEndCondition: z.ZodEnum<{
29
+ open: "open";
30
+ "wall-abutment": "wall-abutment";
31
+ joined: "joined";
32
+ }>;
33
+ export declare const LeanToFramingStrategy: z.ZodEnum<{
34
+ hidden: "hidden";
35
+ rafters: "rafters";
36
+ purlins: "purlins";
37
+ "covering-specific": "covering-specific";
38
+ }>;
39
+ export declare const LeanToHighSideMode: z.ZodEnum<{
40
+ "wall-ledger": "wall-ledger";
41
+ "independent-high-beam": "independent-high-beam";
42
+ }>;
43
+ export declare const LeanToPostLayoutMode: z.ZodEnum<{
44
+ count: "count";
45
+ "target-spacing": "target-spacing";
46
+ }>;
47
+ export declare const LeanToFootingStyle: z.ZodEnum<{
48
+ none: "none";
49
+ "base-plate": "base-plate";
50
+ "concrete-pad": "concrete-pad";
51
+ }>;
52
+ export declare const LeanToCoveringType: z.ZodEnum<{
53
+ generic: "generic";
54
+ shingle: "shingle";
55
+ "metal-panel": "metal-panel";
56
+ }>;
57
+ export type LeanToConnectionMode = z.infer<typeof LeanToConnectionMode>;
58
+ export type LeanToCanopyForm = z.infer<typeof LeanToCanopyForm>;
59
+ export type LeanToRoofEdge = z.infer<typeof LeanToRoofEdge>;
60
+ export declare const LeanToExtensionNode: z.ZodObject<{
61
+ object: z.ZodDefault<z.ZodLiteral<"node">>;
62
+ name: z.ZodOptional<z.ZodString>;
63
+ parentId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
64
+ visible: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
65
+ camera: z.ZodOptional<z.ZodObject<{
66
+ position: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
67
+ target: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
68
+ mode: z.ZodDefault<z.ZodEnum<{
69
+ perspective: "perspective";
70
+ orthographic: "orthographic";
71
+ }>>;
72
+ fov: z.ZodOptional<z.ZodNumber>;
73
+ zoom: z.ZodOptional<z.ZodNumber>;
74
+ }, z.core.$strip>>;
75
+ metadata: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
76
+ id: z.ZodDefault<z.ZodTemplateLiteral<`leanto_${string}`>>;
77
+ type: z.ZodDefault<z.ZodLiteral<"lean-to-extension">>;
78
+ position: z.ZodDefault<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
79
+ rotation: z.ZodDefault<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
80
+ children: z.ZodDefault<z.ZodArray<z.ZodUnion<readonly [z.ZodDefault<z.ZodTemplateLiteral<`column_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`roof_${string}`>>]>>>;
81
+ canopyForm: z.ZodDefault<z.ZodEnum<{
82
+ gable: "gable";
83
+ mono: "mono";
84
+ butterfly: "butterfly";
85
+ }>>;
86
+ hostKind: z.ZodDefault<z.ZodEnum<{
87
+ wall: "wall";
88
+ "slab-edge": "slab-edge";
89
+ freestanding: "freestanding";
90
+ "conical-roof": "conical-roof";
91
+ }>>;
92
+ hostHeightOffset: z.ZodDefault<z.ZodNumber>;
93
+ hostSlabId: z.ZodOptional<z.ZodDefault<z.ZodTemplateLiteral<`slab_${string}`>>>;
94
+ hostSlabEdgeIndex: z.ZodOptional<z.ZodNumber>;
95
+ hostSlabEdgeT: z.ZodOptional<z.ZodNumber>;
96
+ span: z.ZodDefault<z.ZodNumber>;
97
+ autoSpan: z.ZodDefault<z.ZodBoolean>;
98
+ projection: z.ZodDefault<z.ZodNumber>;
99
+ spanArcCenterZ: z.ZodOptional<z.ZodNumber>;
100
+ spanArcRadius: z.ZodOptional<z.ZodNumber>;
101
+ highEdgeHeight: z.ZodDefault<z.ZodNumber>;
102
+ lowEdgeHeight: z.ZodDefault<z.ZodNumber>;
103
+ pitch: z.ZodDefault<z.ZodNumber>;
104
+ resizeLock: z.ZodDefault<z.ZodEnum<{
105
+ "preserve-high-edge": "preserve-high-edge";
106
+ "preserve-low-edge": "preserve-low-edge";
107
+ "preserve-pitch": "preserve-pitch";
108
+ }>>;
109
+ leftEndCondition: z.ZodDefault<z.ZodEnum<{
110
+ open: "open";
111
+ "wall-abutment": "wall-abutment";
112
+ joined: "joined";
113
+ }>>;
114
+ rightEndCondition: z.ZodDefault<z.ZodEnum<{
115
+ open: "open";
116
+ "wall-abutment": "wall-abutment";
117
+ joined: "joined";
118
+ }>>;
119
+ autoMiterCorners: z.ZodDefault<z.ZodBoolean>;
120
+ sideFlashing: z.ZodDefault<z.ZodBoolean>;
121
+ flashingProjection: z.ZodDefault<z.ZodNumber>;
122
+ flashingHeight: z.ZodDefault<z.ZodNumber>;
123
+ slots: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
124
+ highSideMode: z.ZodDefault<z.ZodEnum<{
125
+ "wall-ledger": "wall-ledger";
126
+ "independent-high-beam": "independent-high-beam";
127
+ }>>;
128
+ ledgerVerticalOffset: z.ZodDefault<z.ZodNumber>;
129
+ lowBeamInset: z.ZodDefault<z.ZodNumber>;
130
+ gutterEnabled: z.ZodDefault<z.ZodBoolean>;
131
+ gutterProfile: z.ZodDefault<z.ZodEnum<{
132
+ box: "box";
133
+ "k-style": "k-style";
134
+ "half-round": "half-round";
135
+ }>>;
136
+ gutterSize: z.ZodDefault<z.ZodNumber>;
137
+ downspoutEnabled: z.ZodDefault<z.ZodBoolean>;
138
+ downspoutPosition: z.ZodDefault<z.ZodNumber>;
139
+ connectionMode: z.ZodDefault<z.ZodEnum<{
140
+ manual: "manual";
141
+ auto: "auto";
142
+ }>>;
143
+ hostRoofId: z.ZodOptional<z.ZodDefault<z.ZodTemplateLiteral<`roof_${string}`>>>;
144
+ hostRoofSegmentId: z.ZodOptional<z.ZodString>;
145
+ hostRoofEdge: z.ZodOptional<z.ZodEnum<{
146
+ "+X": "+X";
147
+ "-X": "-X";
148
+ "+Z": "+Z";
149
+ "-Z": "-Z";
150
+ }>>;
151
+ hostRoofEdgeRange: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>;
152
+ connectionOffset: z.ZodDefault<z.ZodNumber>;
153
+ connectionInset: z.ZodDefault<z.ZodNumber>;
154
+ matchHostRoofMaterial: z.ZodDefault<z.ZodBoolean>;
155
+ matchHostRoofStructure: z.ZodDefault<z.ZodBoolean>;
156
+ roofThickness: z.ZodDefault<z.ZodNumber>;
157
+ shingleThickness: z.ZodDefault<z.ZodNumber>;
158
+ highOverhang: z.ZodDefault<z.ZodNumber>;
159
+ lowOverhang: z.ZodDefault<z.ZodNumber>;
160
+ leftOverhang: z.ZodDefault<z.ZodNumber>;
161
+ rightOverhang: z.ZodDefault<z.ZodNumber>;
162
+ coveringType: z.ZodDefault<z.ZodEnum<{
163
+ generic: "generic";
164
+ shingle: "shingle";
165
+ "metal-panel": "metal-panel";
166
+ }>>;
167
+ beamWidth: z.ZodDefault<z.ZodNumber>;
168
+ beamHeight: z.ZodDefault<z.ZodNumber>;
169
+ ledgerDepth: z.ZodDefault<z.ZodNumber>;
170
+ ledgerHeight: z.ZodDefault<z.ZodNumber>;
171
+ rafterWidth: z.ZodDefault<z.ZodNumber>;
172
+ rafterHeight: z.ZodDefault<z.ZodNumber>;
173
+ rafterSpacing: z.ZodDefault<z.ZodNumber>;
174
+ rafterEndInset: z.ZodDefault<z.ZodNumber>;
175
+ framingStrategy: z.ZodDefault<z.ZodEnum<{
176
+ hidden: "hidden";
177
+ rafters: "rafters";
178
+ purlins: "purlins";
179
+ "covering-specific": "covering-specific";
180
+ }>>;
181
+ purlinWidth: z.ZodDefault<z.ZodNumber>;
182
+ purlinHeight: z.ZodDefault<z.ZodNumber>;
183
+ purlinSpacing: z.ZodDefault<z.ZodNumber>;
184
+ postWidth: z.ZodDefault<z.ZodNumber>;
185
+ postDepth: z.ZodDefault<z.ZodNumber>;
186
+ postCount: z.ZodDefault<z.ZodNumber>;
187
+ postLayoutMode: z.ZodDefault<z.ZodEnum<{
188
+ count: "count";
189
+ "target-spacing": "target-spacing";
190
+ }>>;
191
+ postSpacing: z.ZodDefault<z.ZodNumber>;
192
+ postInset: z.ZodDefault<z.ZodNumber>;
193
+ omittedPostSlots: z.ZodDefault<z.ZodArray<z.ZodObject<{
194
+ side: z.ZodEnum<{
195
+ low: "low";
196
+ high: "high";
197
+ }>;
198
+ index: z.ZodNumber;
199
+ layoutCount: z.ZodNumber;
200
+ }, z.core.$strip>>>;
201
+ postBracing: z.ZodDefault<z.ZodEnum<{
202
+ none: "none";
203
+ knee: "knee";
204
+ }>>;
205
+ footingStyle: z.ZodDefault<z.ZodEnum<{
206
+ none: "none";
207
+ "base-plate": "base-plate";
208
+ "concrete-pad": "concrete-pad";
209
+ }>>;
210
+ }, z.core.$strip>;
211
+ export type LeanToExtensionNode = z.infer<typeof LeanToExtensionNode>;
212
+ //# sourceMappingURL=lean-to-extension.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lean-to-extension.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/lean-to-extension.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAMvB,eAAO,MAAM,oBAAoB;;;EAA6B,CAAA;AAC9D,eAAO,MAAM,gBAAgB;;;;EAAyC,CAAA;AACtE,eAAO,MAAM,cAAc;;;;;EAAgE,CAAA;AAC3F,eAAO,MAAM,cAAc;;;;;EAAmC,CAAA;AAC9D,eAAO,MAAM,gBAAgB;;;;EAI3B,CAAA;AACF,eAAO,MAAM,kBAAkB;;;;EAA8C,CAAA;AAC7E,eAAO,MAAM,qBAAqB;;;;;EAAgE,CAAA;AAClG,eAAO,MAAM,kBAAkB;;;EAAmD,CAAA;AAClF,eAAO,MAAM,oBAAoB;;;EAAsC,CAAA;AACvE,eAAO,MAAM,kBAAkB;;;;EAAiD,CAAA;AAChF,eAAO,MAAM,kBAAkB;;;;EAAgD,CAAA;AAQ/E,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA;AACvE,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAA;AAC/D,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAA;AAE3D,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAgG/B,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA"}
@@ -0,0 +1,114 @@
1
+ import dedent from 'dedent';
2
+ import { z } from 'zod';
3
+ import { BaseNode, nodeType, objectId } from '../base.js';
4
+ import { ColumnNode } from './column.js';
5
+ import { RoofNode } from './roof.js';
6
+ import { SlabNode } from './slab.js';
7
+ export const LeanToConnectionMode = z.enum(['auto', 'manual']);
8
+ export const LeanToCanopyForm = z.enum(['mono', 'gable', 'butterfly']);
9
+ export const LeanToHostKind = z.enum(['wall', 'slab-edge', 'freestanding', 'conical-roof']);
10
+ export const LeanToRoofEdge = z.enum(['+X', '-X', '+Z', '-Z']);
11
+ export const LeanToResizeLock = z.enum([
12
+ 'preserve-high-edge',
13
+ 'preserve-low-edge',
14
+ 'preserve-pitch',
15
+ ]);
16
+ export const LeanToEndCondition = z.enum(['open', 'wall-abutment', 'joined']);
17
+ export const LeanToFramingStrategy = z.enum(['hidden', 'rafters', 'purlins', 'covering-specific']);
18
+ export const LeanToHighSideMode = z.enum(['wall-ledger', 'independent-high-beam']);
19
+ export const LeanToPostLayoutMode = z.enum(['count', 'target-spacing']);
20
+ export const LeanToFootingStyle = z.enum(['none', 'base-plate', 'concrete-pad']);
21
+ export const LeanToCoveringType = z.enum(['generic', 'shingle', 'metal-panel']);
22
+ const LeanToOmittedPostSlot = z.object({
23
+ side: z.enum(['low', 'high']),
24
+ index: z.number().int(),
25
+ layoutCount: z.number().int().min(1),
26
+ });
27
+ const DEFAULT_LOW_EDGE_HEIGHT = 2.7 - 3 * Math.tan((5 * Math.PI) / 180);
28
+ const DEFAULT_LEAN_TO_POST_SPACING = 3;
29
+ export const LeanToExtensionNode = BaseNode.extend({
30
+ id: objectId('leanto'),
31
+ type: nodeType('lean-to-extension'),
32
+ position: z.tuple([z.number(), z.number(), z.number()]).default([0, 0, 0]),
33
+ rotation: z.tuple([z.number(), z.number(), z.number()]).default([0, 0, 0]),
34
+ children: z.array(z.union([ColumnNode.shape.id, RoofNode.shape.id])).default([]),
35
+ canopyForm: LeanToCanopyForm.default('mono'),
36
+ hostKind: LeanToHostKind.default('wall'),
37
+ hostHeightOffset: z.number().min(-10).max(10).default(0),
38
+ hostSlabId: SlabNode.shape.id.optional(),
39
+ hostSlabEdgeIndex: z.number().int().min(0).optional(),
40
+ hostSlabEdgeT: z.number().min(0).max(1).optional(),
41
+ span: z.number().min(0.5).max(100).default(4),
42
+ autoSpan: z.boolean().default(true),
43
+ projection: z.number().min(0.5).max(10).default(2.5),
44
+ spanArcCenterZ: z
45
+ .number()
46
+ .optional()
47
+ .describe('Local-Z of the host wall arc center in the lean-to local frame (the crown sits on the local Z axis, so center X = 0). Derived from the host wall arc; absent for straight walls.'),
48
+ spanArcRadius: z
49
+ .number()
50
+ .optional()
51
+ .describe("The host wall's true arc radius, in metres. Derived from the host wall arc; absent for straight walls."),
52
+ highEdgeHeight: z.number().min(0.8).max(10).default(2.8),
53
+ lowEdgeHeight: z.number().min(0.2).max(10).default(DEFAULT_LOW_EDGE_HEIGHT),
54
+ pitch: z.number().min(1).max(45).default(10),
55
+ resizeLock: LeanToResizeLock.default('preserve-high-edge'),
56
+ leftEndCondition: LeanToEndCondition.default('open'),
57
+ rightEndCondition: LeanToEndCondition.default('open'),
58
+ autoMiterCorners: z.boolean().default(true),
59
+ sideFlashing: z.boolean().default(true),
60
+ flashingProjection: z.number().min(0.01).max(0.5).default(0.025),
61
+ flashingHeight: z.number().min(0.03).max(0.5).default(0.14),
62
+ slots: z.record(z.string(), z.string()).optional(),
63
+ highSideMode: LeanToHighSideMode.default('wall-ledger'),
64
+ ledgerVerticalOffset: z.number().min(-1).max(1).default(0),
65
+ lowBeamInset: z.number().min(0).max(2).default(0),
66
+ gutterEnabled: z.boolean().default(true),
67
+ gutterProfile: z.enum(['k-style', 'half-round', 'box']).default('k-style'),
68
+ gutterSize: z.number().min(0.04).max(0.3).default(0.13),
69
+ downspoutEnabled: z.boolean().default(true),
70
+ downspoutPosition: z.number().min(-1).max(1).default(1),
71
+ connectionMode: LeanToConnectionMode.default('auto'),
72
+ hostRoofId: RoofNode.shape.id.optional(),
73
+ hostRoofSegmentId: z.string().optional(),
74
+ hostRoofEdge: LeanToRoofEdge.optional(),
75
+ hostRoofEdgeRange: z.tuple([z.number().min(0).max(1), z.number().min(0).max(1)]).optional(),
76
+ connectionOffset: z.number().min(-1).max(1).default(0),
77
+ connectionInset: z.number().min(0).max(10).default(0),
78
+ matchHostRoofMaterial: z.boolean().default(true),
79
+ matchHostRoofStructure: z.boolean().default(true),
80
+ roofThickness: z.number().min(0.02).max(0.5).default(0.1),
81
+ shingleThickness: z.number().min(0).max(0.5).default(0.025),
82
+ highOverhang: z.number().min(0).max(1.5).default(0),
83
+ lowOverhang: z.number().min(0).max(1.5).default(0.25),
84
+ leftOverhang: z.number().min(0).max(1.5).default(0.15),
85
+ rightOverhang: z.number().min(0).max(1.5).default(0.15),
86
+ coveringType: LeanToCoveringType.default('generic'),
87
+ beamWidth: z.number().min(0.05).max(0.6).default(0.16),
88
+ beamHeight: z.number().min(0.05).max(0.8).default(0.24),
89
+ ledgerDepth: z.number().min(0.03).max(0.5).default(0.1),
90
+ ledgerHeight: z.number().min(0.05).max(0.8).default(0.18),
91
+ rafterWidth: z.number().min(0.03).max(0.4).default(0.08),
92
+ rafterHeight: z.number().min(0.03).max(0.5).default(0.14),
93
+ rafterSpacing: z.number().min(0.2).max(3).default(1.2),
94
+ rafterEndInset: z.number().min(0).max(3).default(0),
95
+ framingStrategy: LeanToFramingStrategy.default('rafters'),
96
+ purlinWidth: z.number().min(0.03).max(0.4).default(0.08),
97
+ purlinHeight: z.number().min(0.03).max(0.5).default(0.1),
98
+ purlinSpacing: z.number().min(0.2).max(3).default(0.8),
99
+ postWidth: z.number().min(0.05).max(0.6).default(0.16),
100
+ postDepth: z.number().min(0.05).max(0.6).default(0.16),
101
+ postCount: z.number().int().min(2).max(20).default(3),
102
+ postLayoutMode: LeanToPostLayoutMode.default('target-spacing'),
103
+ postSpacing: z.number().min(0.3).max(10).default(DEFAULT_LEAN_TO_POST_SPACING),
104
+ postInset: z.number().min(0).max(3).default(0),
105
+ omittedPostSlots: z.array(LeanToOmittedPostSlot).default([]),
106
+ postBracing: z.enum(['none', 'knee']).default('none'),
107
+ footingStyle: LeanToFootingStyle.default('none'),
108
+ }).describe(dedent `
109
+ Open parametric canopy.
110
+ The high edge can attach to a wall, attach to an upper slab edge, stand on an independent
111
+ high beam, or wrap around a conical roof's cylindrical base. Attached canopies use a mono-pitch
112
+ roof. Freestanding canopies can use a mono-pitch, gable, or butterfly roof with managed columns,
113
+ framing, gutters, and downspouts.
114
+ `);
@@ -16,10 +16,10 @@ export declare const LevelNode: z.ZodObject<{
16
16
  fov: z.ZodOptional<z.ZodNumber>;
17
17
  zoom: z.ZodOptional<z.ZodNumber>;
18
18
  }, z.core.$strip>>;
19
- metadata: z.ZodDefault<z.ZodOptional<z.ZodJSONSchema>>;
19
+ metadata: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
20
20
  id: z.ZodDefault<z.ZodTemplateLiteral<`level_${string}`>>;
21
21
  type: z.ZodDefault<z.ZodLiteral<"level">>;
22
- children: z.ZodDefault<z.ZodArray<z.ZodPipe<z.ZodString, z.ZodTransform<`item_${string}` | `ceiling_${string}` | `column_${string}` | `wall_${string}` | `fence_${string}` | `construction-dimension_${string}` | `structural-grid_${string}` | `zone_${string}` | `slab_${string}` | `roof_${string}` | `stair_${string}` | `scan_${string}` | `guide_${string}` | `measurement_${string}` | `spawn_${string}` | `shelf_${string}` | `duct-segment_${string}` | `duct-fitting_${string}` | `duct-terminal_${string}` | `hvac-equipment_${string}` | `lineset_${string}` | `liquid-line_${string}` | `pipe-segment_${string}` | `pipe-fitting_${string}` | `pipe-trap_${string}`, string>>>>;
22
+ children: z.ZodDefault<z.ZodArray<z.ZodPipe<z.ZodString, z.ZodTransform<`block_${string}` | `ceiling_${string}` | `item_${string}` | `procedural-item_${string}` | `column_${string}` | `construction-dimension_${string}` | `wall_${string}` | `roof_${string}` | `slab_${string}` | `fence_${string}` | `structural-grid_${string}` | `imesh_${string}` | `zone_${string}` | `stair_${string}` | `scan_${string}` | `guide_${string}` | `measurement_${string}` | `spawn_${string}` | `shelf_${string}` | `duct-segment_${string}` | `duct-fitting_${string}` | `duct-terminal_${string}` | `hvac-equipment_${string}` | `lineset_${string}` | `liquid-line_${string}` | `pipe-segment_${string}` | `pipe-fitting_${string}` | `pipe-trap_${string}`, string>>>>;
23
23
  level: z.ZodDefault<z.ZodNumber>;
24
24
  baseElevation: z.ZodDefault<z.ZodNumber>;
25
25
  height: z.ZodOptional<z.ZodNumber>;
@@ -1 +1 @@
1
- {"version":3,"file":"level.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/level.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAyDvB,eAAO,MAAM,4BAA4B,IAAI,CAAA;AAE7C,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAElE;AAED,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;iBA0BrB,CAAA;AAED,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAA"}
1
+ {"version":3,"file":"level.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/level.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AA+DvB,eAAO,MAAM,4BAA4B,IAAI,CAAA;AAE7C,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAElE;AAED,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;iBA0BrB,CAAA;AAED,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAA"}
@@ -1,6 +1,6 @@
1
1
  import dedent from 'dedent';
2
2
  import { z } from 'zod';
3
- import { BaseNode, nodeType, objectId } from '../base';
3
+ import { BaseNode, nodeType, objectId } from '../base.js';
4
4
  const LevelChildId = z.string().transform((id) => id);
5
5
  export const DEFAULT_LEVEL_BASE_ELEVATION = 0;
6
6
  export function normalizeLevelBaseElevation(value) {
@@ -29,7 +29,7 @@ export declare const LinesetNode: z.ZodObject<{
29
29
  fov: z.ZodOptional<z.ZodNumber>;
30
30
  zoom: z.ZodOptional<z.ZodNumber>;
31
31
  }, z.core.$strip>>;
32
- metadata: z.ZodDefault<z.ZodOptional<z.ZodJSONSchema>>;
32
+ metadata: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
33
33
  id: z.ZodDefault<z.ZodTemplateLiteral<`lineset_${string}`>>;
34
34
  type: z.ZodDefault<z.ZodLiteral<"lineset">>;
35
35
  path: z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
@@ -1,6 +1,6 @@
1
1
  import dedent from 'dedent';
2
2
  import { z } from 'zod';
3
- import { BaseNode, nodeType, objectId } from '../base';
3
+ import { BaseNode, nodeType, objectId } from '../base.js';
4
4
  /**
5
5
  * Refrigerant lineset — the copper pipe pair that links the outdoor
6
6
  * condenser to the indoor coil (furnace / air handler) of a split system.
@@ -23,7 +23,7 @@ export declare const LiquidLineNode: z.ZodObject<{
23
23
  fov: z.ZodOptional<z.ZodNumber>;
24
24
  zoom: z.ZodOptional<z.ZodNumber>;
25
25
  }, z.core.$strip>>;
26
- metadata: z.ZodDefault<z.ZodOptional<z.ZodJSONSchema>>;
26
+ metadata: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
27
27
  id: z.ZodDefault<z.ZodTemplateLiteral<`liquid-line_${string}`>>;
28
28
  type: z.ZodDefault<z.ZodLiteral<"liquid-line">>;
29
29
  path: z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
@@ -1,6 +1,6 @@
1
1
  import dedent from 'dedent';
2
2
  import { z } from 'zod';
3
- import { BaseNode, nodeType, objectId } from '../base';
3
+ import { BaseNode, nodeType, objectId } from '../base.js';
4
4
  /**
5
5
  * Standalone refrigerant liquid line — the thin bare-copper line that carries
6
6
  * warm liquid out to the indoor coil. It is the line that used to be drawn as
@@ -206,7 +206,7 @@ export declare const MeasurementNode: z.ZodObject<{
206
206
  fov: z.ZodOptional<z.ZodNumber>;
207
207
  zoom: z.ZodOptional<z.ZodNumber>;
208
208
  }, z.core.$strip>>;
209
- metadata: z.ZodDefault<z.ZodOptional<z.ZodJSONSchema>>;
209
+ metadata: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
210
210
  id: z.ZodDefault<z.ZodTemplateLiteral<`measurement_${string}`>>;
211
211
  type: z.ZodDefault<z.ZodLiteral<"measurement">>;
212
212
  measurement: z.ZodDiscriminatedUnion<[z.ZodObject<{
@@ -1,7 +1,7 @@
1
1
  import dedent from 'dedent';
2
2
  import { z } from 'zod';
3
- import { areMeasurementPointsCoplanar, MEASUREMENT_PLANAR_TOLERANCE, measurementNormal, } from '../../lib/measurement-geometry';
4
- import { BaseNode, nodeType, objectId } from '../base';
3
+ import { areMeasurementPointsCoplanar, MEASUREMENT_PLANAR_TOLERANCE, measurementNormal, } from '../../lib/measurement-geometry.js';
4
+ import { BaseNode, nodeType, objectId } from '../base.js';
5
5
  const FiniteCoordinate = z.number().finite();
6
6
  export const MeasurementPoint = z.tuple([FiniteCoordinate, FiniteCoordinate, FiniteCoordinate]);
7
7
  export const MeasurementFeatureParameter = z.union([z.string(), z.boolean(), FiniteCoordinate]);
@@ -27,7 +27,7 @@ export declare const PipeFittingNode: z.ZodObject<{
27
27
  fov: z.ZodOptional<z.ZodNumber>;
28
28
  zoom: z.ZodOptional<z.ZodNumber>;
29
29
  }, z.core.$strip>>;
30
- metadata: z.ZodDefault<z.ZodOptional<z.ZodJSONSchema>>;
30
+ metadata: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
31
31
  id: z.ZodDefault<z.ZodTemplateLiteral<`pipe-fitting_${string}`>>;
32
32
  type: z.ZodDefault<z.ZodLiteral<"pipe-fitting">>;
33
33
  position: z.ZodDefault<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
@@ -35,15 +35,23 @@ export declare const PipeFittingNode: z.ZodObject<{
35
35
  fittingType: z.ZodDefault<z.ZodEnum<{
36
36
  elbow: "elbow";
37
37
  cross: "cross";
38
+ reducer: "reducer";
39
+ "end-cap": "end-cap";
40
+ coupling: "coupling";
38
41
  wye: "wye";
39
42
  "sanitary-tee": "sanitary-tee";
43
+ cleanout: "cleanout";
40
44
  }>>;
41
45
  angle: z.ZodDefault<z.ZodNumber>;
42
46
  diameter: z.ZodDefault<z.ZodNumber>;
43
47
  diameter2: z.ZodDefault<z.ZodNumber>;
48
+ cleanoutStyle: z.ZodDefault<z.ZodEnum<{
49
+ end: "end";
50
+ inline: "inline";
51
+ }>>;
44
52
  pipeMaterial: z.ZodDefault<z.ZodEnum<{
45
- pvc: "pvc";
46
53
  abs: "abs";
54
+ pvc: "pvc";
47
55
  "cast-iron": "cast-iron";
48
56
  }>>;
49
57
  system: z.ZodDefault<z.ZodEnum<{
@@ -1 +1 @@
1
- {"version":3,"file":"pipe-fitting.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/pipe-fitting.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA8B3B,CAAA;AACD,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAA;AAC7D,MAAM,MAAM,iBAAiB,GAAG,eAAe,CAAC,IAAI,CAAC,CAAA"}
1
+ {"version":3,"file":"pipe-fitting.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/pipe-fitting.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAkC3B,CAAA;AACD,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAA;AAC7D,MAAM,MAAM,iBAAiB,GAAG,eAAe,CAAC,IAAI,CAAC,CAAA"}
@@ -1,6 +1,6 @@
1
1
  import dedent from 'dedent';
2
2
  import { z } from 'zod';
3
- import { BaseNode, nodeType, objectId } from '../base';
3
+ import { BaseNode, nodeType, objectId } from '../base.js';
4
4
  /**
5
5
  * DWV pipe fitting — the joints drain systems are actually built from:
6
6
  * elbows (bends), wyes (45° branch entries, the code-preferred way to
@@ -21,7 +21,9 @@ export const PipeFittingNode = BaseNode.extend({
21
21
  position: z.tuple([z.number(), z.number(), z.number()]).default([0, 0, 0]),
22
22
  // XYZ euler radians.
23
23
  rotation: z.tuple([z.number(), z.number(), z.number()]).default([0, 0, 0]),
24
- fittingType: z.enum(['elbow', 'wye', 'sanitary-tee', 'cross']).default('elbow'),
24
+ fittingType: z
25
+ .enum(['elbow', 'wye', 'sanitary-tee', 'cross', 'end-cap', 'cleanout', 'reducer', 'coupling'])
26
+ .default('elbow'),
25
27
  // Elbow turn in degrees — DWV bends ship as 22.5 / 45 / 90 ("long
26
28
  // sweep" for drains); adjustable range matches the duct elbow. 0° is a
27
29
  // straight coupling — what an elbow flattens to when its run is dragged
@@ -31,13 +33,15 @@ export const PipeFittingNode = BaseNode.extend({
31
33
  diameter: z.number().min(1.25).max(8).default(2),
32
34
  // Branch collar size (wye / sanitary-tee).
33
35
  diameter2: z.number().min(1.25).max(8).default(2),
36
+ cleanoutStyle: z.enum(['end', 'inline']).default('end'),
34
37
  pipeMaterial: z.enum(['pvc', 'abs', 'cast-iron']).default('pvc'),
35
38
  system: z.enum(['waste', 'vent']).default('waste'),
36
39
  }).describe(dedent `
37
40
  DWV pipe fitting - elbow (bend), wye (45° branch), sanitary tee (square branch), or cross (two opposed branches).
38
41
  - position: [x, y, z] level-local meters
39
42
  - rotation: [x, y, z] euler radians
40
- - fittingType: elbow | wye | sanitary-tee | cross
43
+ - fittingType: elbow | wye | sanitary-tee | cross | end-cap | cleanout | reducer | coupling
44
+ - cleanoutStyle: end (one flow port) or inline (two flow ports with a capped service branch)
41
45
  - angle: elbow turn in degrees (22.5 / 45 / 90 typical)
42
46
  - diameter: run size in inches; diameter2: branch collar size (both branches for a cross)
43
47
  - pipeMaterial: pvc | abs | cast-iron