@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
@@ -1,64 +1,72 @@
1
1
  // Base
2
- export { SOLAR_PANEL_PRESET_LABELS, SOLAR_PANEL_PRESETS, SolarPanelPresetKey, } from '../solar-panel-presets';
2
+ export { ProceduralItemNode } from '../procedural-items/node.js';
3
+ export { SOLAR_PANEL_PRESET_LABELS, SOLAR_PANEL_PRESETS, SolarPanelPresetKey, } from '../solar-panel-presets.js';
3
4
  // Asset URL allowlist
4
- export { ALLOWED_ORIGINS_ENV, ALLOWED_SCHEMES, AssetUrl } from './asset-url';
5
- export { BaseNode, generateId, Material, nodeType, objectId } from './base';
5
+ export { ALLOWED_ORIGINS_ENV, ALLOWED_SCHEMES, AssetUrl } from './asset-url.js';
6
+ export { BaseNode, generateId, Material, nodeType, objectId } from './base.js';
6
7
  // Camera
7
- export { CameraSchema } from './camera';
8
+ export { CameraSchema } from './camera.js';
8
9
  // Collections
9
- export { generateCollectionId } from './collections';
10
+ export { generateCollectionId } from './collections.js';
11
+ // Compiled per-kind parsers (opt-in)
12
+ export { compiledNodeParsersEnabled, enableCompiledNodeParsers, parseNode, } from './compiled-node-parsers.js';
10
13
  // Material
11
- export { DEFAULT_MATERIALS, MaterialMapPropertiesSchema, MaterialMapsSchema, MaterialPreset, MaterialPresetPayloadSchema, MaterialProperties, MaterialSchema, MaterialTarget, resolveMaterial, TextureWrapMode, } from './material';
12
- export { BoxVentNode } from './nodes/box-vent';
13
- export { BuildingNode } from './nodes/building';
14
- export { CabinetModuleNode, CabinetNode } from './nodes/cabinet';
15
- export { CeilingNode } from './nodes/ceiling';
16
- export { ChimneyMaterialRole, ChimneyNode } from './nodes/chimney';
17
- export { COLUMN_PRESETS, ColumnBaseStyle, ColumnCapitalStyle, ColumnCarvingPlacement, ColumnCrossSection, ColumnNode, ColumnPanelShape, ColumnRingPlacement, ColumnShaftDetail, ColumnShaftProfile, ColumnStyle, ColumnSupportStyle, } from './nodes/column';
18
- export { CONSTRUCTION_DRAWING_TYPES, ConstructionDimensionBaseline, ConstructionDimensionChainMode, ConstructionDimensionDatumPolicy, ConstructionDimensionDrawingOverride, ConstructionDimensionDrawingPresentation, ConstructionDimensionImperialPrecision, ConstructionDimensionMetricNotation, ConstructionDimensionMode, ConstructionDimensionNode, ConstructionDimensionTerminator, ConstructionDimensionTextPosition, ConstructionDrawingType, constructionDimensionRequiredAnchorCount, resolveConstructionDimensionDrawingOverride, resolveConstructionDimensionDrawingPresentation, setConstructionDimensionDrawingPresentation, setConstructionDimensionDrawingSuppressedSegments, } from './nodes/construction-dimension';
19
- export { CupolaNode } from './nodes/cupola';
20
- export { DoorNode, DoorSegment, OpeningConstructionType, OpeningDimensionReference, } from './nodes/door';
21
- export { DormerNode, getEffectiveDormerSurfaceMaterial, } from './nodes/dormer';
22
- export { DownspoutNode } from './nodes/downspout';
23
- export { DuctFittingNode } from './nodes/duct-fitting';
24
- export { DuctSegmentNode } from './nodes/duct-segment';
25
- export { DuctTerminalNode } from './nodes/duct-terminal';
26
- export { ElevatorDoorPanelStyle, ElevatorDoorStyle, ElevatorNode, ElevatorShaftStyle, } from './nodes/elevator';
27
- export { EyebrowVentNode } from './nodes/eyebrow-vent';
28
- export { FenceBaseStyle, FenceNode, FenceStyle } from './nodes/fence';
29
- export { GuideNode, GuideScaleReference } from './nodes/guide';
30
- export { GutterNode, GutterOutlet } from './nodes/gutter';
31
- export { HvacEquipmentNode } from './nodes/hvac-equipment';
32
- export { getScaledDimensions, ItemNode, isLowProfileItemSurface, LOW_PROFILE_ITEM_SURFACE_MAX_HEIGHT, } from './nodes/item';
33
- export { LevelNode } from './nodes/level';
34
- export { LinesetNode } from './nodes/lineset';
35
- export { LiquidLineNode } from './nodes/liquid-line';
36
- export { AngleMeasurement, AreaMeasurement, DistanceMeasurement, MeasurementAnchor, MeasurementFeatureAnchor, MeasurementFeatureParameter, MeasurementFeatureReference, MeasurementNode, MeasurementPayload, MeasurementPoint, PerimeterMeasurement, VolumeMeasurement, } from './nodes/measurement';
37
- export { PipeFittingNode } from './nodes/pipe-fitting';
38
- export { PipeSegmentNode } from './nodes/pipe-segment';
39
- export { PipeTrapNode } from './nodes/pipe-trap';
14
+ export { DEFAULT_MATERIALS, MaterialMapPropertiesSchema, MaterialMapsSchema, MaterialPreset, MaterialPresetPayloadSchema, MaterialProperties, MaterialSchema, MaterialTarget, resolveMaterial, TextureWrapMode, } from './material.js';
15
+ export { planAutomaticDownspouts, resolveAutomaticDownspoutLength, } from './nodes/automatic-downspout.js';
16
+ export { BlockEdge, BlockFace, BlockNode, BlockTopology, BlockVertex, blockUndirectedEdgeKey, createBoxBlockTopology, getBlockFaceCentroid, getBlockFaceFrame, getBlockFaceNormal, inspectBlockTopology, } from './nodes/block.js';
17
+ export { BoxVentMaterialRole, BoxVentNode } from './nodes/box-vent.js';
18
+ export { BuildingNode } from './nodes/building.js';
19
+ export { CABINET_METRIC_DEFAULTS, CabinetFrontStyleSchema, CabinetModuleNode, CabinetNode, CabinetTopFinishSchema, } from './nodes/cabinet.js';
20
+ export { CeilingNode } from './nodes/ceiling.js';
21
+ export { ChimneyMaterialRole, ChimneyNode } from './nodes/chimney.js';
22
+ export { COLUMN_PRESETS, ColumnBaseStyle, ColumnCapitalStyle, ColumnCarvingPlacement, ColumnCrossSection, ColumnNode, ColumnPanelShape, ColumnRingPlacement, ColumnShaftDetail, ColumnShaftProfile, ColumnStyle, ColumnSupportStyle, } from './nodes/column.js';
23
+ export { CONSTRUCTION_DRAWING_TYPES, ConstructionDimensionBaseline, ConstructionDimensionChainMode, ConstructionDimensionDatumPolicy, ConstructionDimensionDrawingOverride, ConstructionDimensionDrawingPresentation, ConstructionDimensionImperialPrecision, ConstructionDimensionMetricNotation, ConstructionDimensionMode, ConstructionDimensionNode, ConstructionDimensionTerminator, ConstructionDimensionTextPosition, ConstructionDrawingType, constructionDimensionRequiredAnchorCount, resolveConstructionDimensionDrawingOverride, resolveConstructionDimensionDrawingPresentation, setConstructionDimensionDrawingPresentation, setConstructionDimensionDrawingSuppressedSegments, } from './nodes/construction-dimension.js';
24
+ export { CupolaMaterialRole, CupolaNode } from './nodes/cupola.js';
25
+ export { DoorNode, DoorSegment, OpeningConstructionType, OpeningDimensionReference, } from './nodes/door.js';
26
+ export { createDormerDefaultWindow, DormerNode, DormerWallFace, dormerPointToWallFace, dormerWallFacePointToDormer, getDormerDefaultWindowFace, getDormerExposedFaces, getDormerWallFaceFrame, getDormerWallHorizontalBoundsAtHeight, getDormerWallOpeningVerticalBounds, getDormerWallVerticalBounds, getEffectiveDormerSurfaceMaterial, } from './nodes/dormer.js';
27
+ export { DownspoutNode, defaultDownspoutMetadata, isDefaultDownspoutNode, usesAutomaticDownspoutLength, } from './nodes/downspout.js';
28
+ export { DuctFittingNode } from './nodes/duct-fitting.js';
29
+ export { DuctSegmentNode } from './nodes/duct-segment.js';
30
+ export { DuctTerminalNode } from './nodes/duct-terminal.js';
31
+ export { ElevatorDoorPanelStyle, ElevatorDoorStyle, ElevatorNode, ElevatorShaftStyle, } from './nodes/elevator.js';
32
+ export { EyebrowVentMaterialRole, EyebrowVentNode } from './nodes/eyebrow-vent.js';
33
+ export { FenceBaseStyle, FenceNode, FenceStyle } from './nodes/fence.js';
34
+ export { GuideNode, GuideScaleReference } from './nodes/guide.js';
35
+ export { computeGutterEaveY, createDefaultGuttersForSegment, GUTTER_EAVE_TUCK_INWARD, GUTTER_EAVE_TUCK_UP, GutterNode, GutterOutlet, getDefaultGutterSide, getGutterRunsForSegment, hasAutoGutterMetadata, isAutoGutterEnabled, isDefaultGutterNode, } from './nodes/gutter.js';
36
+ export { HvacEquipmentNode } from './nodes/hvac-equipment.js';
37
+ export { ImportedMeshNode, ImportedMeshPrimitive, } from './nodes/imported-mesh.js';
38
+ export { getScaledDimensions, ItemNode, isLowProfileItemSurface, LOW_PROFILE_ITEM_SURFACE_MAX_HEIGHT, } from './nodes/item.js';
39
+ export { LeanToCanopyForm, LeanToConnectionMode, LeanToEndCondition, LeanToExtensionNode, LeanToResizeLock, LeanToRoofEdge, } from './nodes/lean-to-extension.js';
40
+ export { LevelNode } from './nodes/level.js';
41
+ export { LinesetNode } from './nodes/lineset.js';
42
+ export { LiquidLineNode } from './nodes/liquid-line.js';
43
+ export { AngleMeasurement, AreaMeasurement, DistanceMeasurement, MeasurementAnchor, MeasurementFeatureAnchor, MeasurementFeatureParameter, MeasurementFeatureReference, MeasurementNode, MeasurementPayload, MeasurementPoint, PerimeterMeasurement, VolumeMeasurement, } from './nodes/measurement.js';
44
+ export { PipeFittingNode } from './nodes/pipe-fitting.js';
45
+ export { PipeSegmentNode } from './nodes/pipe-segment.js';
46
+ export { PipeTrapNode } from './nodes/pipe-trap.js';
40
47
  // Nodes
41
- export { createDefaultRidgeVentsForSegment, getRidgeVentLinesForSegment, hasAutoRidgeVentMetadata, isAutoRidgeVentEnabled, isDefaultRidgeVentNode, RidgeVentNode, } from './nodes/ridge-vent';
42
- export { getEffectiveRoofSurfaceMaterial, RoofNode } from './nodes/roof';
43
- export { getActiveRoofHeight, getDutchRoofMetrics, getEffectiveSegmentSurfaceMaterial, getPitchFromActiveRoofHeight, getRoofSegmentSurfaceY, getRoofSegmentVisibleTopBounds, getSegmentSlopeFrame, hasSegmentMaterialOverride, MIN_ROOF_SEGMENT_TRIM_SPAN, normalizeRoofSegmentTrim, ROOF_SHAPE_DEFAULTS, RoofSegmentNode, RoofSegmentTrim, RoofType, } from './nodes/roof-segment';
44
- export { getDutchEndSlopeFaces, getDutchRoofShapeMetrics, getRoofModuleFaces, getRoofShapeInsets, getRoofShapeRatios, } from './nodes/roof-segment-shape';
45
- export { clampRectToRoofWallFace, getMaxRoofRectHeightFromAnchor, getMaxRoofRectWidthFromAnchor, getRoofSegmentWallFace, getRoofSegmentWallFaces, getRoofWallFaceFrame, roofFacePointToSegment, segmentPointToRoofWallFace, } from './nodes/roof-segment-walls';
46
- export { ScanNode } from './nodes/scan';
47
- export { ShelfNode } from './nodes/shelf';
48
- export { SiteNode } from './nodes/site';
49
- export { SKYLIGHT_TYPE_ORDER, SKYLIGHT_TYPE_PRESETS, SkylightMaterialRole, SkylightNode, SkylightOpeningSide, SkylightSlideDirection, SkylightType, } from './nodes/skylight';
50
- export { MIN_SLAB_THICKNESS, SlabNode } from './nodes/slab';
51
- export { SolarPanelMaterialRole, SolarPanelNode, } from './nodes/solar-panel';
52
- export { SpawnNode } from './nodes/spawn';
53
- export { getEffectiveStairSurfaceMaterial, StairNode, StairRailingMode, StairSlabOpeningMode, StairTopLandingMode, StairType, } from './nodes/stair';
54
- export { AttachmentSide, StairSegmentNode, StairSegmentType } from './nodes/stair-segment';
55
- export { StructuralGridNode } from './nodes/structural-grid';
56
- export { SurfaceHoleMetadata } from './nodes/surface-hole-metadata';
57
- export { TurbineVentNode } from './nodes/turbine-vent';
58
- export { buildEnabledWallFaceBandPatch, buildWallFaceBandCountPatch, getEffectiveWallSurfaceMaterial, getWallBandSlotId, getWallFaceBandConfig, getWallFaceBandForHeight, getWallSurfaceMaterialSignature, getWallSurfaceSideFromBandSlot, WALL_CHAIR_RAIL_DEFAULT, WALL_CHAIR_RAIL_SLOT_DEFAULT, WALL_CROWN_DEFAULT, WALL_CROWN_SLOT_DEFAULT, WALL_FACE_BAND_DEFAULT, WALL_SKIRTING_DEFAULT, WALL_SKIRTING_SLOT_DEFAULT, WALL_SLOT_DEFAULT, WALL_SURFACE_SLOT_DEFAULTS, WALL_TRIM_DEFAULTS, WallNode, WallTreatmentSide, WallTrimProfile, } from './nodes/wall';
59
- export { WindowConstructionType, WindowDimensionReference, WindowNode, WindowType, } from './nodes/window';
60
- export { ZoneNode } from './nodes/zone';
61
- export { generateSceneMaterialId, SceneMaterial } from './scene-material';
62
- export { MAX_TERRAIN_SIDE, TerrainData } from './terrain';
48
+ export { createDefaultRidgeVentsForSegment, getRidgeVentLinesForSegment, hasAutoRidgeVentMetadata, isAutoRidgeVentEnabled, isDefaultRidgeVentNode, RidgeVentNode, } from './nodes/ridge-vent.js';
49
+ export { getEffectiveRoofSurfaceMaterial, RoofNode } from './nodes/roof.js';
50
+ export { getActiveRoofHeight, getConicalRoofCoverage, getDutchRoofMetrics, getEffectiveSegmentSurfaceMaterial, getPitchFromActiveRoofHeight, getRoofSegmentSurfaceY, getRoofSegmentVisibleTopBounds, getSegmentSlopeFrame, hasSegmentMaterialOverride, isBandedShedSegment, MIN_ROOF_SEGMENT_TRIM_SPAN, normalizeRoofSegmentTrim, ROOF_SHAPE_DEFAULTS, RoofSegmentNode, RoofSegmentTrim, RoofType, } from './nodes/roof-segment.js';
51
+ export { getDutchEndSlopeFaces, getDutchRoofShapeMetrics, getRoofModuleFaces, getRoofShapeEaveSides, getRoofShapeInsets, getRoofShapeRatios, } from './nodes/roof-segment-shape.js';
52
+ export { clampRectToRoofWallFace, getMaxRoofRectHeightFromAnchor, getMaxRoofRectWidthFromAnchor, getRoofSegmentWallFace, getRoofSegmentWallFaces, getRoofWallFaceFrame, roofFacePointToSegment, segmentPointToRoofWallFace, } from './nodes/roof-segment-walls.js';
53
+ export { CaptureSessionReference, ScanNode, } from './nodes/scan.js';
54
+ export { ShelfNode } from './nodes/shelf.js';
55
+ export { SiteNode } from './nodes/site.js';
56
+ export { SKYLIGHT_TYPE_ORDER, SKYLIGHT_TYPE_PRESETS, SkylightMaterialRole, SkylightNode, SkylightOpeningSide, SkylightSlideDirection, SkylightType, } from './nodes/skylight.js';
57
+ export { MIN_SLAB_THICKNESS, SlabNode } from './nodes/slab.js';
58
+ export { SolarPanelMaterialRole, SolarPanelNode, } from './nodes/solar-panel.js';
59
+ export { SpawnNode } from './nodes/spawn.js';
60
+ export { getEffectiveStairSurfaceMaterial, StairNode, StairRailingMode, StairSlabOpeningMode, StairTopLandingMode, StairType, } from './nodes/stair.js';
61
+ export { AttachmentSide, StairSegmentNode, StairSegmentType } from './nodes/stair-segment.js';
62
+ export { StructuralGridNode } from './nodes/structural-grid.js';
63
+ export { SurfaceHoleMetadata } from './nodes/surface-hole-metadata.js';
64
+ export { TurbineVentMaterialRole, TurbineVentNode } from './nodes/turbine-vent.js';
65
+ export { DEFAULT_UNIT_COLOR, UNIT_KINDS, UnitNode } from './nodes/unit.js';
66
+ export { buildEnabledWallFaceBandPatch, buildWallFaceBandCountPatch, getEffectiveWallSurfaceMaterial, getWallBandSlotId, getWallFaceBandConfig, getWallFaceBandForHeight, getWallSurfaceMaterialSignature, getWallSurfaceSideFromBandSlot, WALL_CHAIR_RAIL_DEFAULT, WALL_CHAIR_RAIL_SLOT_DEFAULT, WALL_CROWN_DEFAULT, WALL_CROWN_SLOT_DEFAULT, WALL_FACE_BAND_DEFAULT, WALL_SKIRTING_DEFAULT, WALL_SKIRTING_SLOT_DEFAULT, WALL_SLOT_DEFAULT, WALL_SURFACE_SLOT_DEFAULTS, WALL_TRIM_DEFAULTS, WallNode, WallTreatmentSide, WallTrimProfile, } from './nodes/wall.js';
67
+ export { WindowConstructionType, WindowDimensionReference, WindowNode, WindowType, } from './nodes/window.js';
68
+ export { ZoneNode } from './nodes/zone.js';
69
+ export { generateSceneMaterialId, SceneMaterial } from './scene-material.js';
70
+ export { MAX_TERRAIN_SIDE, TerrainData } from './terrain.js';
63
71
  // Union types
64
- export { AnyNode } from './types';
72
+ export { AnyNode, nodeKindOf } from './types.js';
@@ -81,6 +81,7 @@ export declare const MaterialTarget: z.ZodEnum<{
81
81
  cupola: "cupola";
82
82
  "eyebrow-vent": "eyebrow-vent";
83
83
  gutter: "gutter";
84
+ downspout: "downspout";
84
85
  }>;
85
86
  export type MaterialTarget = z.infer<typeof MaterialTarget>;
86
87
  export declare const TextureWrapMode: z.ZodEnum<{
@@ -1 +1 @@
1
- {"version":3,"file":"material.d.ts","sourceRoot":"","sources":["../../src/schema/material.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,eAAO,MAAM,cAAc;;;;;;;;;;;EAWzB,CAAA;AACF,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAA;AAE3D,eAAO,MAAM,kBAAkB;;;;;;;;;;;iBAO7B,CAAA;AACF,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAEnE,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAYzB,CAAA;AACF,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAA;AAE3D,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;EAuBzB,CAAA;AACF,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAA;AAE3D,eAAO,MAAM,eAAe;;;;EAAsD,CAAA;AAClF,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAA;AAE7D,eAAO,MAAM,kBAAkB;;;;;;;;;;;iBAW7B,CAAA;AACF,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAE7D,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAqBtC,CAAA;AACF,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAA;AAE/E,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAGtC,CAAA;AACF,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAA;AAE/E,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,cAAc,EAAE,kBAAkB,CAiFxE,CAAA;AAED,wBAAgB,eAAe,CAAC,QAAQ,CAAC,EAAE,cAAc,GAAG,kBAAkB,CAiB7E"}
1
+ {"version":3,"file":"material.d.ts","sourceRoot":"","sources":["../../src/schema/material.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,eAAO,MAAM,cAAc;;;;;;;;;;;EAWzB,CAAA;AACF,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAA;AAE3D,eAAO,MAAM,kBAAkB;;;;;;;;;;;iBAO7B,CAAA;AACF,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAEnE,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAYzB,CAAA;AACF,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAA;AAE3D,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;EAwBzB,CAAA;AACF,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAA;AAE3D,eAAO,MAAM,eAAe;;;;EAAsD,CAAA;AAClF,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAA;AAE7D,eAAO,MAAM,kBAAkB;;;;;;;;;;;iBAW7B,CAAA;AACF,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAE7D,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAqBtC,CAAA;AACF,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAA;AAE/E,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAGtC,CAAA;AACF,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAA;AAE/E,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,cAAc,EAAE,kBAAkB,CAiFxE,CAAA;AAED,wBAAgB,eAAe,CAAC,QAAQ,CAAC,EAAE,cAAc,GAAG,kBAAkB,CAiB7E"}
@@ -1,5 +1,5 @@
1
1
  import { z } from 'zod';
2
- import { AssetUrl } from './asset-url';
2
+ import { AssetUrl } from './asset-url.js';
3
3
  export const MaterialPreset = z.enum([
4
4
  'white',
5
5
  'brick',
@@ -56,6 +56,7 @@ export const MaterialTarget = z.enum([
56
56
  'cupola',
57
57
  'eyebrow-vent',
58
58
  'gutter',
59
+ 'downspout',
59
60
  ]);
60
61
  export const TextureWrapMode = z.enum(['Repeat', 'ClampToEdge', 'MirroredRepeat']);
61
62
  export const MaterialMapsSchema = z.object({
@@ -0,0 +1,17 @@
1
+ import type { AnyNode, AnyNodeId } from '../types.js';
2
+ import type { DownspoutNode } from './downspout.js';
3
+ import { type GutterNode } from './gutter.js';
4
+ import type { RoofSegmentNode } from './roof-segment.js';
5
+ export type AutoDownspoutPlacement = {
6
+ gutterId: GutterNode['id'];
7
+ offset: number;
8
+ };
9
+ export type AutomaticDownspoutInput = {
10
+ segments: readonly RoofSegmentNode[];
11
+ gutters: readonly GutterNode[];
12
+ downspouts: readonly DownspoutNode[];
13
+ maxRunPerDownspout?: number;
14
+ };
15
+ export declare function resolveAutomaticDownspoutLength(nodes: Record<AnyNodeId, AnyNode>, segment: RoofSegmentNode, gutter: GutterNode, outletOffset: number): number;
16
+ export declare function planAutomaticDownspouts({ segments, gutters, downspouts, maxRunPerDownspout, }: AutomaticDownspoutInput): AutoDownspoutPlacement[];
17
+ //# sourceMappingURL=automatic-downspout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"automatic-downspout.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/automatic-downspout.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAElD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,EAAsB,KAAK,UAAU,EAAE,MAAM,UAAU,CAAA;AAI9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAiBrD,MAAM,MAAM,sBAAsB,GAAG;IACnC,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC,CAAA;IAC1B,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED,MAAM,MAAM,uBAAuB,GAAG;IACpC,QAAQ,EAAE,SAAS,eAAe,EAAE,CAAA;IACpC,OAAO,EAAE,SAAS,UAAU,EAAE,CAAA;IAC9B,UAAU,EAAE,SAAS,aAAa,EAAE,CAAA;IACpC,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAC5B,CAAA;AAuED,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,EACjC,OAAO,EAAE,eAAe,EACxB,MAAM,EAAE,UAAU,EAClB,YAAY,EAAE,MAAM,GACnB,MAAM,CA+CR;AAmCD,wBAAgB,uBAAuB,CAAC,EACtC,QAAQ,EACR,OAAO,EACP,UAAU,EACV,kBAAoD,GACrD,EAAE,uBAAuB,GAAG,sBAAsB,EAAE,CAmHpD"}
@@ -0,0 +1,237 @@
1
+ import { getWallBaseElevationForNodes } from '../../hooks/spatial-grid/spatial-grid-manager.js';
2
+ import { heightAt } from '../../lib/terrain-field.js';
3
+ import { persistedTerrainFieldOf } from '../../lib/terrain-source.js';
4
+ import { getLevelElevations } from '../../services/storey.js';
5
+ import { computeGutterEaveY } from './gutter.js';
6
+ const DEFAULT_MAX_RUN_PER_DOWNSPOUT_M = 10;
7
+ const OUTLET_END_INSET_M = 0.16;
8
+ const CONNECTION_TOLERANCE_M = 0.1;
9
+ const CONNECTION_TOLERANCE_SQ = CONNECTION_TOLERANCE_M * CONNECTION_TOLERANCE_M;
10
+ const FLAT_GROUND_Y = 0;
11
+ // A point on the gutter's own mesh, expressed in gutter-mesh-local
12
+ // coordinates: `alongX` is the signed distance from the gutter center along
13
+ // its length, `outwardZ` the outward offset from the eave line. For a curved
14
+ // run the flat (alongX, outwardZ) is bent onto the concentric arc descriptor
15
+ // (matches the mapping the outlet lookup + gutter geometry use); a straight
16
+ // gutter passes through unchanged.
17
+ function gutterMeshPoint(gutter, alongX, outwardZ) {
18
+ const arc = gutter.arc;
19
+ if (!arc)
20
+ return [alongX, outwardZ];
21
+ const signedRef = (Math.sign(arc.centerZ) || 1) * arc.radius;
22
+ if (Math.abs(signedRef) < 1e-9)
23
+ return [alongX, outwardZ];
24
+ const phi = (alongX - arc.centerX) / signedRef;
25
+ const radial = outwardZ - arc.centerZ;
26
+ return [arc.centerX - radial * Math.sin(phi), arc.centerZ + radial * Math.cos(phi)];
27
+ }
28
+ function gutterPointInRoofFrame(gutter, segment, offset) {
29
+ const gutterRotation = gutter.rotation ?? 0;
30
+ const [meshX, meshZ] = gutterMeshPoint(gutter, offset, 0);
31
+ const localX = gutter.position[0] + Math.cos(gutterRotation) * meshX + Math.sin(gutterRotation) * meshZ;
32
+ const localZ = gutter.position[2] - Math.sin(gutterRotation) * meshX + Math.cos(gutterRotation) * meshZ;
33
+ if (!segment)
34
+ return [localX, localZ];
35
+ const segmentRotation = segment.rotation ?? 0;
36
+ const cos = Math.cos(segmentRotation);
37
+ const sin = Math.sin(segmentRotation);
38
+ return [
39
+ (segment.position?.[0] ?? 0) + localX * cos + localZ * sin,
40
+ (segment.position?.[2] ?? 0) - localX * sin + localZ * cos,
41
+ ];
42
+ }
43
+ function rotateAndTranslate(point, position, rotation) {
44
+ const cos = Math.cos(rotation);
45
+ const sin = Math.sin(rotation);
46
+ return [
47
+ (position?.[0] ?? 0) + point[0] * cos + point[1] * sin,
48
+ (position?.[2] ?? 0) - point[0] * sin + point[1] * cos,
49
+ ];
50
+ }
51
+ function gutterFloorMidZ(gutter) {
52
+ const size = Math.max(0.04, gutter.size);
53
+ if (gutter.profile === 'half-round')
54
+ return size;
55
+ if (gutter.profile === 'box')
56
+ return size / 2;
57
+ return size * 0.4;
58
+ }
59
+ // The gutter's mount height in the host segment's local frame. Lean-to gutters
60
+ // can be raised to a shared eave line (stored as `leanToGutterEaveY` metadata by
61
+ // the lean-to assembly); the renderer mounts there rather than at the segment's
62
+ // own eave, so the outlet elevation must read the prescribed value when present.
63
+ function prescribedGutterEaveY(gutter) {
64
+ const metadata = gutter.metadata;
65
+ if (!(metadata && typeof metadata === 'object' && !Array.isArray(metadata)))
66
+ return null;
67
+ const value = metadata.leanToGutterEaveY;
68
+ return typeof value === 'number' && Number.isFinite(value) ? value : null;
69
+ }
70
+ export function resolveAutomaticDownspoutLength(nodes, segment, gutter, outletOffset) {
71
+ const roofCandidate = segment.parentId ? nodes[segment.parentId] : undefined;
72
+ const roof = roofCandidate?.type === 'roof' ? roofCandidate : undefined;
73
+ const roofParent = roof?.parentId ? nodes[roof.parentId] : undefined;
74
+ const leanTo = roofParent?.type === 'lean-to-extension' ? roofParent : undefined;
75
+ const wallCandidate = leanTo?.parentId ? nodes[leanTo.parentId] : undefined;
76
+ const wall = wallCandidate?.type === 'wall' ? wallCandidate : undefined;
77
+ const levelCandidate = wall?.parentId ? nodes[wall.parentId] : roofParent;
78
+ const level = levelCandidate?.type === 'level' ? levelCandidate : undefined;
79
+ const buildingCandidate = level?.parentId ? nodes[level.parentId] : undefined;
80
+ const building = buildingCandidate?.type === 'building' ? buildingCandidate : undefined;
81
+ const gutterRotation = gutter.rotation ?? 0;
82
+ const gutterFloorPoint = rotateAndTranslate(gutterMeshPoint(gutter, outletOffset, gutterFloorMidZ(gutter)), gutter.position, gutterRotation);
83
+ const roofPoint = rotateAndTranslate(gutterFloorPoint, segment.position, segment.rotation ?? 0);
84
+ const leanToPoint = rotateAndTranslate(roofPoint, roof?.position, roof?.rotation ?? 0);
85
+ const wallLocalPoint = leanTo
86
+ ? rotateAndTranslate(leanToPoint, leanTo.position, leanTo.rotation[1])
87
+ : leanToPoint;
88
+ const wallAngle = wall ? Math.atan2(wall.end[1] - wall.start[1], wall.end[0] - wall.start[0]) : 0;
89
+ const levelPoint = wall
90
+ ? rotateAndTranslate(wallLocalPoint, [wall.start[0], 0, wall.start[1]], -wallAngle)
91
+ : wallLocalPoint;
92
+ const buildingRotation = building?.rotation?.[1] ?? 0;
93
+ const worldPoint = rotateAndTranslate(levelPoint, building?.position, buildingRotation);
94
+ const site = Object.values(nodes).find((node) => node?.type === 'site');
95
+ const terrain = persistedTerrainFieldOf(site);
96
+ const groundY = terrain ? heightAt(terrain, worldPoint[0], worldPoint[1]) : FLAT_GROUND_Y;
97
+ const levelBaseY = level ? (getLevelElevations(nodes).get(level.id)?.baseY ?? 0) : 0;
98
+ const outletWorldY = (building?.position?.[1] ?? 0) +
99
+ levelBaseY +
100
+ (wall ? getWallBaseElevationForNodes(wall, nodes) : 0) +
101
+ (leanTo?.position[1] ?? 0) +
102
+ (roof?.position?.[1] ?? 0) +
103
+ (segment.position?.[1] ?? 0) +
104
+ (prescribedGutterEaveY(gutter) ?? computeGutterEaveY(segment)) -
105
+ Math.max(0.04, gutter.size);
106
+ return Math.max(0.1, outletWorldY - groundY);
107
+ }
108
+ function distanceSquared(a, b) {
109
+ return (a[0] - b[0]) ** 2 + (a[1] - b[1]) ** 2;
110
+ }
111
+ function find(parent, value) {
112
+ let root = value;
113
+ while (parent[root] !== root)
114
+ root = parent[root];
115
+ while (parent[value] !== value) {
116
+ const next = parent[value];
117
+ parent[value] = root;
118
+ value = next;
119
+ }
120
+ return root;
121
+ }
122
+ function union(parent, a, b) {
123
+ const rootA = find(parent, a);
124
+ const rootB = find(parent, b);
125
+ if (rootA !== rootB)
126
+ parent[rootB] = rootA;
127
+ }
128
+ function addUniquePlacement(placements, seen, gutter, offset) {
129
+ const key = `${gutter.id}:${offset.toFixed(6)}`;
130
+ if (seen.has(key))
131
+ return;
132
+ seen.add(key);
133
+ placements.push({ gutterId: gutter.id, offset });
134
+ }
135
+ export function planAutomaticDownspouts({ segments, gutters, downspouts, maxRunPerDownspout = DEFAULT_MAX_RUN_PER_DOWNSPOUT_M, }) {
136
+ if (gutters.length === 0)
137
+ return [];
138
+ const segmentById = new Map(segments.map((segment) => [segment.id, segment]));
139
+ const parent = gutters.map((_, index) => index);
140
+ const ends = [];
141
+ for (let gutterIndex = 0; gutterIndex < gutters.length; gutterIndex++) {
142
+ const gutter = gutters[gutterIndex];
143
+ const halfLength = Math.max(0, gutter.length) / 2;
144
+ const segment = gutter.roofSegmentId ? segmentById.get(gutter.roofSegmentId) : undefined;
145
+ ends.push({
146
+ gutterIndex,
147
+ offset: halfLength,
148
+ point: gutterPointInRoofFrame(gutter, segment, halfLength),
149
+ }, {
150
+ gutterIndex,
151
+ offset: -halfLength,
152
+ point: gutterPointInRoofFrame(gutter, segment, -halfLength),
153
+ });
154
+ }
155
+ const connectedEnds = new Set();
156
+ for (let i = 0; i < ends.length; i++) {
157
+ for (let j = i + 1; j < ends.length; j++) {
158
+ const a = ends[i];
159
+ const b = ends[j];
160
+ if (a.gutterIndex === b.gutterIndex)
161
+ continue;
162
+ if (distanceSquared(a.point, b.point) > CONNECTION_TOLERANCE_SQ)
163
+ continue;
164
+ connectedEnds.add(i);
165
+ connectedEnds.add(j);
166
+ union(parent, a.gutterIndex, b.gutterIndex);
167
+ }
168
+ }
169
+ const componentIndices = new Map();
170
+ for (let index = 0; index < gutters.length; index++) {
171
+ const root = find(parent, index);
172
+ const indices = componentIndices.get(root) ?? [];
173
+ indices.push(index);
174
+ componentIndices.set(root, indices);
175
+ }
176
+ const gutterIndexById = new Map(gutters.map((gutter, index) => [gutter.id, index]));
177
+ const placements = [];
178
+ const seen = new Set();
179
+ const safeMaxRun = Math.max(0.5, maxRunPerDownspout);
180
+ for (const indices of componentIndices.values()) {
181
+ const indexSet = new Set(indices);
182
+ const totalLength = indices.reduce((sum, index) => sum + Math.max(0, gutters[index]?.length ?? 0), 0);
183
+ const requiredCount = Math.max(1, Math.ceil(totalLength / safeMaxRun));
184
+ const manualCount = downspouts.filter((downspout) => {
185
+ if (!downspout.gutterId)
186
+ return false;
187
+ const gutterIndex = gutterIndexById.get(downspout.gutterId);
188
+ if (gutterIndex === undefined || !indexSet.has(gutterIndex))
189
+ return false;
190
+ const gutter = gutters[gutterIndex];
191
+ return Boolean(gutter &&
192
+ downspout.outletId &&
193
+ (gutter.outlets ?? []).some((outlet) => outlet.id === downspout.outletId));
194
+ }).length;
195
+ let remaining = Math.max(0, requiredCount - manualCount);
196
+ if (remaining === 0)
197
+ continue;
198
+ const freeEnds = ends.filter((end, endIndex) => indexSet.has(end.gutterIndex) && !connectedEnds.has(endIndex));
199
+ for (const end of freeEnds) {
200
+ if (remaining === 0)
201
+ break;
202
+ const gutter = gutters[end.gutterIndex];
203
+ const bound = Math.max(0, gutter.length / 2 - OUTLET_END_INSET_M);
204
+ addUniquePlacement(placements, seen, gutter, end.offset >= 0 ? bound : -bound);
205
+ remaining--;
206
+ }
207
+ if (remaining === 0)
208
+ continue;
209
+ const componentGutters = indices
210
+ .map((index) => gutters[index])
211
+ .sort((a, b) => b.length - a.length || a.id.localeCompare(b.id));
212
+ const interiorCandidates = [];
213
+ let round = 0;
214
+ while (interiorCandidates.length < remaining) {
215
+ let addedThisRound = 0;
216
+ for (const gutter of componentGutters) {
217
+ const interiorSlots = Math.max(1, Math.ceil(gutter.length / safeMaxRun) - 1);
218
+ if (round >= interiorSlots)
219
+ continue;
220
+ const offset = -gutter.length / 2 + (gutter.length * (round + 1)) / (interiorSlots + 1);
221
+ interiorCandidates.push({ gutterId: gutter.id, offset });
222
+ addedThisRound++;
223
+ }
224
+ if (addedThisRound === 0)
225
+ break;
226
+ round++;
227
+ }
228
+ for (const candidate of interiorCandidates) {
229
+ if (remaining === 0)
230
+ break;
231
+ const gutter = gutters[gutterIndexById.get(candidate.gutterId)];
232
+ addUniquePlacement(placements, seen, gutter, candidate.offset);
233
+ remaining--;
234
+ }
235
+ }
236
+ return placements;
237
+ }
@@ -0,0 +1,107 @@
1
+ import { z } from 'zod';
2
+ export declare const BlockVertex: z.ZodObject<{
3
+ id: z.ZodString;
4
+ position: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
5
+ }, z.core.$strip>;
6
+ export declare const BlockEdge: z.ZodObject<{
7
+ id: z.ZodString;
8
+ vertexIds: z.ZodTuple<[z.ZodString, z.ZodString], null>;
9
+ }, z.core.$strip>;
10
+ export declare const BlockFace: z.ZodObject<{
11
+ id: z.ZodString;
12
+ vertexIds: z.ZodArray<z.ZodString>;
13
+ materialSlot: z.ZodDefault<z.ZodString>;
14
+ }, z.core.$strip>;
15
+ declare const BlockTopologyShape: z.ZodObject<{
16
+ vertices: z.ZodArray<z.ZodObject<{
17
+ id: z.ZodString;
18
+ position: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
19
+ }, z.core.$strip>>;
20
+ edges: z.ZodArray<z.ZodObject<{
21
+ id: z.ZodString;
22
+ vertexIds: z.ZodTuple<[z.ZodString, z.ZodString], null>;
23
+ }, z.core.$strip>>;
24
+ faces: z.ZodArray<z.ZodObject<{
25
+ id: z.ZodString;
26
+ vertexIds: z.ZodArray<z.ZodString>;
27
+ materialSlot: z.ZodDefault<z.ZodString>;
28
+ }, z.core.$strip>>;
29
+ }, z.core.$strip>;
30
+ export type BlockVertex = z.infer<typeof BlockVertex>;
31
+ export type BlockEdge = z.infer<typeof BlockEdge>;
32
+ export type BlockFace = z.infer<typeof BlockFace>;
33
+ export type BlockTopology = z.infer<typeof BlockTopologyShape>;
34
+ export type BlockFaceFrame = {
35
+ origin: [number, number, number];
36
+ xAxis: [number, number, number];
37
+ yAxis: [number, number, number];
38
+ normal: [number, number, number];
39
+ };
40
+ export declare function getBlockFaceNormal(topology: BlockTopology, face: BlockFace): [number, number, number] | null;
41
+ export declare function getBlockFaceCentroid(topology: BlockTopology, face: BlockFace): [number, number, number] | null;
42
+ export declare function getBlockFaceFrame(topology: BlockTopology, faceId: string): BlockFaceFrame | null;
43
+ export type BlockTopologyIssue = {
44
+ path: (string | number)[];
45
+ message: string;
46
+ };
47
+ export declare function blockUndirectedEdgeKey(a: string, b: string): string;
48
+ export declare function inspectBlockTopology(topology: BlockTopology): BlockTopologyIssue[];
49
+ export declare const BlockTopology: z.ZodObject<{
50
+ vertices: z.ZodArray<z.ZodObject<{
51
+ id: z.ZodString;
52
+ position: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
53
+ }, z.core.$strip>>;
54
+ edges: z.ZodArray<z.ZodObject<{
55
+ id: z.ZodString;
56
+ vertexIds: z.ZodTuple<[z.ZodString, z.ZodString], null>;
57
+ }, z.core.$strip>>;
58
+ faces: z.ZodArray<z.ZodObject<{
59
+ id: z.ZodString;
60
+ vertexIds: z.ZodArray<z.ZodString>;
61
+ materialSlot: z.ZodDefault<z.ZodString>;
62
+ }, z.core.$strip>>;
63
+ }, z.core.$strip>;
64
+ export declare function createBoxBlockTopology(width?: number, height?: number, depth?: number): BlockTopology;
65
+ export declare const BlockNode: z.ZodObject<{
66
+ object: z.ZodDefault<z.ZodLiteral<"node">>;
67
+ name: z.ZodOptional<z.ZodString>;
68
+ parentId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
69
+ visible: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
70
+ camera: z.ZodOptional<z.ZodObject<{
71
+ position: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
72
+ target: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
73
+ mode: z.ZodDefault<z.ZodEnum<{
74
+ perspective: "perspective";
75
+ orthographic: "orthographic";
76
+ }>>;
77
+ fov: z.ZodOptional<z.ZodNumber>;
78
+ zoom: z.ZodOptional<z.ZodNumber>;
79
+ }, z.core.$strip>>;
80
+ metadata: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
81
+ id: z.ZodDefault<z.ZodTemplateLiteral<`block_${string}`>>;
82
+ type: z.ZodDefault<z.ZodLiteral<"block">>;
83
+ children: z.ZodDefault<z.ZodArray<z.ZodString>>;
84
+ position: z.ZodDefault<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
85
+ rotation: z.ZodDefault<z.ZodNumber>;
86
+ supportSlabId: z.ZodOptional<z.ZodString>;
87
+ topology: z.ZodDefault<z.ZodObject<{
88
+ vertices: z.ZodArray<z.ZodObject<{
89
+ id: z.ZodString;
90
+ position: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
91
+ }, z.core.$strip>>;
92
+ edges: z.ZodArray<z.ZodObject<{
93
+ id: z.ZodString;
94
+ vertexIds: z.ZodTuple<[z.ZodString, z.ZodString], null>;
95
+ }, z.core.$strip>>;
96
+ faces: z.ZodArray<z.ZodObject<{
97
+ id: z.ZodString;
98
+ vertexIds: z.ZodArray<z.ZodString>;
99
+ materialSlot: z.ZodDefault<z.ZodString>;
100
+ }, z.core.$strip>>;
101
+ }, z.core.$strip>>;
102
+ slots: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
103
+ slotNames: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
104
+ }, z.core.$strip>;
105
+ export type BlockNode = z.infer<typeof BlockNode>;
106
+ export {};
107
+ //# sourceMappingURL=block.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"block.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/block.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,eAAO,MAAM,WAAW;;;iBAGtB,CAAA;AAEF,eAAO,MAAM,SAAS;;;iBAGpB,CAAA;AAEF,eAAO,MAAM,SAAS;;;;iBAIpB,CAAA;AAEF,QAAA,MAAM,kBAAkB;;;;;;;;;;;;;;iBAItB,CAAA;AAEF,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAA;AACrD,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAA;AACjD,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAA;AACjD,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAE9D,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;CACjC,CAAA;AAQD,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,aAAa,EACvB,IAAI,EAAE,SAAS,GACd,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAgBjC;AAED,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,aAAa,EACvB,IAAI,EAAE,SAAS,GACd,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAWjC;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAuBhG;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAA;IACzB,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,UAE1D;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,aAAa,GAAG,kBAAkB,EAAE,CAgElF;AAED,eAAO,MAAM,aAAa;;;;;;;;;;;;;;iBAIxB,CAAA;AAEF,wBAAgB,sBAAsB,CAAC,KAAK,SAAI,EAAE,MAAM,SAAM,EAAE,KAAK,SAAI,GAAG,aAAa,CAqCxF;AAED,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAkBpB,CAAA;AAEF,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAA"}