@pascal-app/core 0.8.0 → 0.9.2

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 (471) hide show
  1. package/dist/events/bus.d.ts +67 -13
  2. package/dist/events/bus.d.ts.map +1 -1
  3. package/dist/hooks/scene-registry/item-clip-registry.d.ts +18 -0
  4. package/dist/hooks/scene-registry/item-clip-registry.d.ts.map +1 -0
  5. package/dist/hooks/scene-registry/item-clip-registry.js +10 -0
  6. package/dist/hooks/scene-registry/scene-registry.d.ts +14 -23
  7. package/dist/hooks/scene-registry/scene-registry.d.ts.map +1 -1
  8. package/dist/hooks/scene-registry/scene-registry.js +59 -26
  9. package/dist/hooks/scene-registry/scene-registry.test.d.ts +2 -0
  10. package/dist/hooks/scene-registry/scene-registry.test.d.ts.map +1 -0
  11. package/dist/hooks/scene-registry/scene-registry.test.js +26 -0
  12. package/dist/hooks/spatial-grid/floor-placed-elevation.d.ts +14 -0
  13. package/dist/hooks/spatial-grid/floor-placed-elevation.d.ts.map +1 -0
  14. package/dist/hooks/spatial-grid/floor-placed-elevation.js +51 -0
  15. package/dist/hooks/spatial-grid/floor-placed-elevation.test.d.ts +2 -0
  16. package/dist/hooks/spatial-grid/floor-placed-elevation.test.d.ts.map +1 -0
  17. package/dist/hooks/spatial-grid/floor-placed-elevation.test.js +366 -0
  18. package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts +79 -11
  19. package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts.map +1 -1
  20. package/dist/hooks/spatial-grid/spatial-grid-manager.js +508 -141
  21. package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts +28 -1
  22. package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts.map +1 -1
  23. package/dist/hooks/spatial-grid/spatial-grid-sync.js +109 -18
  24. package/dist/hooks/spatial-grid/wall-slab-overlap.test.d.ts +2 -0
  25. package/dist/hooks/spatial-grid/wall-slab-overlap.test.d.ts.map +1 -0
  26. package/dist/hooks/spatial-grid/wall-slab-overlap.test.js +363 -0
  27. package/dist/index.d.ts +36 -8
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +33 -6
  30. package/dist/lib/level-name.d.ts +4 -0
  31. package/dist/lib/level-name.d.ts.map +1 -0
  32. package/dist/lib/level-name.js +10 -0
  33. package/dist/lib/measurement-geometry.d.ts +19 -0
  34. package/dist/lib/measurement-geometry.d.ts.map +1 -0
  35. package/dist/lib/measurement-geometry.js +232 -0
  36. package/dist/lib/measurement-geometry.test.d.ts +2 -0
  37. package/dist/lib/measurement-geometry.test.d.ts.map +1 -0
  38. package/dist/lib/measurement-geometry.test.js +102 -0
  39. package/dist/lib/polygon-geometry.d.ts +0 -1
  40. package/dist/lib/polygon-geometry.d.ts.map +1 -1
  41. package/dist/lib/polygon-geometry.js +0 -18
  42. package/dist/lib/polygon-relations.d.ts +10 -0
  43. package/dist/lib/polygon-relations.d.ts.map +1 -0
  44. package/dist/lib/polygon-relations.js +73 -0
  45. package/dist/lib/selection-proxy.d.ts +4 -0
  46. package/dist/lib/selection-proxy.d.ts.map +1 -0
  47. package/dist/lib/selection-proxy.js +12 -0
  48. package/dist/lib/slab-polygon.d.ts +31 -2
  49. package/dist/lib/slab-polygon.d.ts.map +1 -1
  50. package/dist/lib/slab-polygon.js +525 -31
  51. package/dist/lib/slab-polygon.test.d.ts +2 -0
  52. package/dist/lib/slab-polygon.test.d.ts.map +1 -0
  53. package/dist/lib/slab-polygon.test.js +635 -0
  54. package/dist/lib/slots.d.ts +14 -0
  55. package/dist/lib/slots.d.ts.map +1 -0
  56. package/dist/lib/slots.js +26 -0
  57. package/dist/lib/space-detection-pause.test.d.ts +2 -0
  58. package/dist/lib/space-detection-pause.test.d.ts.map +1 -0
  59. package/dist/lib/space-detection-pause.test.js +42 -0
  60. package/dist/lib/space-detection.d.ts +54 -2
  61. package/dist/lib/space-detection.d.ts.map +1 -1
  62. package/dist/lib/space-detection.js +599 -124
  63. package/dist/lib/space-detection.test.d.ts +2 -0
  64. package/dist/lib/space-detection.test.d.ts.map +1 -0
  65. package/dist/lib/space-detection.test.js +376 -0
  66. package/dist/lib/wall-distance.d.ts +60 -0
  67. package/dist/lib/wall-distance.d.ts.map +1 -0
  68. package/dist/lib/wall-distance.js +85 -0
  69. package/dist/lib/zone-quantities.d.ts +21 -0
  70. package/dist/lib/zone-quantities.d.ts.map +1 -0
  71. package/dist/lib/zone-quantities.js +183 -0
  72. package/dist/lib/zone-quantities.test.d.ts +2 -0
  73. package/dist/lib/zone-quantities.test.d.ts.map +1 -0
  74. package/dist/lib/zone-quantities.test.js +82 -0
  75. package/dist/material-library.d.ts +20 -1
  76. package/dist/material-library.d.ts.map +1 -1
  77. package/dist/material-library.js +3737 -200
  78. package/dist/registry/__bench__/relations-resolver.bench.d.ts +15 -0
  79. package/dist/registry/__bench__/relations-resolver.bench.d.ts.map +1 -0
  80. package/dist/registry/__bench__/relations-resolver.bench.js +170 -0
  81. package/dist/registry/handles.d.ts +394 -0
  82. package/dist/registry/handles.d.ts.map +1 -0
  83. package/dist/registry/handles.js +24 -0
  84. package/dist/registry/index.d.ts +7 -0
  85. package/dist/registry/index.d.ts.map +1 -0
  86. package/dist/registry/index.js +4 -0
  87. package/dist/registry/registry.d.ts +136 -0
  88. package/dist/registry/registry.d.ts.map +1 -0
  89. package/dist/registry/registry.js +282 -0
  90. package/dist/registry/registry.test.d.ts +2 -0
  91. package/dist/registry/registry.test.d.ts.map +1 -0
  92. package/dist/registry/registry.test.js +196 -0
  93. package/dist/registry/relations-resolver.d.ts +42 -0
  94. package/dist/registry/relations-resolver.d.ts.map +1 -0
  95. package/dist/registry/relations-resolver.js +77 -0
  96. package/dist/registry/relations-resolver.test.d.ts +2 -0
  97. package/dist/registry/relations-resolver.test.d.ts.map +1 -0
  98. package/dist/registry/relations-resolver.test.js +183 -0
  99. package/dist/registry/scene-api.d.ts +44 -0
  100. package/dist/registry/scene-api.d.ts.map +1 -0
  101. package/dist/registry/scene-api.js +111 -0
  102. package/dist/registry/scene-api.test.d.ts +2 -0
  103. package/dist/registry/scene-api.test.d.ts.map +1 -0
  104. package/dist/registry/scene-api.test.js +183 -0
  105. package/dist/registry/subtree.d.ts +67 -0
  106. package/dist/registry/subtree.d.ts.map +1 -0
  107. package/dist/registry/subtree.js +123 -0
  108. package/dist/registry/subtree.test.d.ts +2 -0
  109. package/dist/registry/subtree.test.d.ts.map +1 -0
  110. package/dist/registry/subtree.test.js +163 -0
  111. package/dist/registry/types.d.ts +2099 -0
  112. package/dist/registry/types.d.ts.map +1 -0
  113. package/dist/registry/types.js +1 -0
  114. package/dist/schema/index.d.ts +35 -4
  115. package/dist/schema/index.d.ts.map +1 -1
  116. package/dist/schema/index.js +32 -4
  117. package/dist/schema/material.d.ts +13 -2
  118. package/dist/schema/material.d.ts.map +1 -1
  119. package/dist/schema/material.js +17 -5
  120. package/dist/schema/material.test.d.ts +2 -0
  121. package/dist/schema/material.test.d.ts.map +1 -0
  122. package/dist/schema/material.test.js +43 -0
  123. package/dist/schema/nodes/box-vent.d.ts +74 -0
  124. package/dist/schema/nodes/box-vent.d.ts.map +1 -0
  125. package/dist/schema/nodes/box-vent.js +63 -0
  126. package/dist/schema/nodes/building.d.ts +1 -1
  127. package/dist/schema/nodes/building.d.ts.map +1 -1
  128. package/dist/schema/nodes/building.js +3 -2
  129. package/dist/schema/nodes/cabinet.d.ts +534 -0
  130. package/dist/schema/nodes/cabinet.d.ts.map +1 -0
  131. package/dist/schema/nodes/cabinet.js +137 -0
  132. package/dist/schema/nodes/ceiling.d.ts +5 -2
  133. package/dist/schema/nodes/ceiling.d.ts.map +1 -1
  134. package/dist/schema/nodes/ceiling.js +5 -1
  135. package/dist/schema/nodes/chimney.d.ts +158 -0
  136. package/dist/schema/nodes/chimney.d.ts.map +1 -0
  137. package/dist/schema/nodes/chimney.js +67 -0
  138. package/dist/schema/nodes/column.d.ts +600 -7
  139. package/dist/schema/nodes/column.d.ts.map +1 -1
  140. package/dist/schema/nodes/column.js +589 -6
  141. package/dist/schema/nodes/cupola.d.ts +66 -0
  142. package/dist/schema/nodes/cupola.d.ts.map +1 -0
  143. package/dist/schema/nodes/cupola.js +28 -0
  144. package/dist/schema/nodes/door.d.ts +13 -5
  145. package/dist/schema/nodes/door.d.ts.map +1 -1
  146. package/dist/schema/nodes/door.js +12 -0
  147. package/dist/schema/nodes/dormer.d.ts +228 -0
  148. package/dist/schema/nodes/dormer.d.ts.map +1 -0
  149. package/dist/schema/nodes/dormer.js +119 -0
  150. package/dist/schema/nodes/downspout.d.ts +75 -0
  151. package/dist/schema/nodes/downspout.d.ts.map +1 -0
  152. package/dist/schema/nodes/downspout.js +63 -0
  153. package/dist/schema/nodes/duct-fitting.d.ts +91 -0
  154. package/dist/schema/nodes/duct-fitting.d.ts.map +1 -0
  155. package/dist/schema/nodes/duct-fitting.js +92 -0
  156. package/dist/schema/nodes/duct-segment.d.ts +61 -0
  157. package/dist/schema/nodes/duct-segment.d.ts.map +1 -0
  158. package/dist/schema/nodes/duct-segment.js +73 -0
  159. package/dist/schema/nodes/duct-terminal.d.ts +57 -0
  160. package/dist/schema/nodes/duct-terminal.d.ts.map +1 -0
  161. package/dist/schema/nodes/duct-terminal.js +51 -0
  162. package/dist/schema/nodes/elevator.d.ts +106 -0
  163. package/dist/schema/nodes/elevator.d.ts.map +1 -0
  164. package/dist/schema/nodes/elevator.js +57 -0
  165. package/dist/schema/nodes/eyebrow-vent.d.ts +68 -0
  166. package/dist/schema/nodes/eyebrow-vent.d.ts.map +1 -0
  167. package/dist/schema/nodes/eyebrow-vent.js +40 -0
  168. package/dist/schema/nodes/fence.d.ts +19 -2
  169. package/dist/schema/nodes/fence.d.ts.map +1 -1
  170. package/dist/schema/nodes/fence.js +27 -2
  171. package/dist/schema/nodes/gutter.d.ts +84 -0
  172. package/dist/schema/nodes/gutter.d.ts.map +1 -0
  173. package/dist/schema/nodes/gutter.js +76 -0
  174. package/dist/schema/nodes/hvac-equipment.d.ts +63 -0
  175. package/dist/schema/nodes/hvac-equipment.d.ts.map +1 -0
  176. package/dist/schema/nodes/hvac-equipment.js +55 -0
  177. package/dist/schema/nodes/item.d.ts +12 -0
  178. package/dist/schema/nodes/item.d.ts.map +1 -1
  179. package/dist/schema/nodes/item.js +20 -0
  180. package/dist/schema/nodes/level.d.ts +1 -1
  181. package/dist/schema/nodes/level.d.ts.map +1 -1
  182. package/dist/schema/nodes/level.js +4 -0
  183. package/dist/schema/nodes/lineset.d.ts +42 -0
  184. package/dist/schema/nodes/lineset.d.ts.map +1 -0
  185. package/dist/schema/nodes/lineset.js +38 -0
  186. package/dist/schema/nodes/liquid-line.d.ts +34 -0
  187. package/dist/schema/nodes/liquid-line.d.ts.map +1 -0
  188. package/dist/schema/nodes/liquid-line.js +24 -0
  189. package/dist/schema/nodes/measurement.d.ts +306 -0
  190. package/dist/schema/nodes/measurement.d.ts.map +1 -0
  191. package/dist/schema/nodes/measurement.js +87 -0
  192. package/dist/schema/nodes/measurement.test.d.ts +2 -0
  193. package/dist/schema/nodes/measurement.test.d.ts.map +1 -0
  194. package/dist/schema/nodes/measurement.test.js +139 -0
  195. package/dist/schema/nodes/pipe-fitting.d.ts +56 -0
  196. package/dist/schema/nodes/pipe-fitting.d.ts.map +1 -0
  197. package/dist/schema/nodes/pipe-fitting.js +45 -0
  198. package/dist/schema/nodes/pipe-segment.d.ts +48 -0
  199. package/dist/schema/nodes/pipe-segment.d.ts.map +1 -0
  200. package/dist/schema/nodes/pipe-segment.js +36 -0
  201. package/dist/schema/nodes/pipe-trap.d.ts +43 -0
  202. package/dist/schema/nodes/pipe-trap.d.ts.map +1 -0
  203. package/dist/schema/nodes/pipe-trap.js +36 -0
  204. package/dist/schema/nodes/ridge-vent-defaults.test.d.ts +2 -0
  205. package/dist/schema/nodes/ridge-vent-defaults.test.d.ts.map +1 -0
  206. package/dist/schema/nodes/ridge-vent-defaults.test.js +205 -0
  207. package/dist/schema/nodes/ridge-vent.d.ts +82 -0
  208. package/dist/schema/nodes/ridge-vent.d.ts.map +1 -0
  209. package/dist/schema/nodes/ridge-vent.js +248 -0
  210. package/dist/schema/nodes/roof-segment-shape.d.ts +90 -0
  211. package/dist/schema/nodes/roof-segment-shape.d.ts.map +1 -0
  212. package/dist/schema/nodes/roof-segment-shape.js +318 -0
  213. package/dist/schema/nodes/roof-segment-shape.test.d.ts +2 -0
  214. package/dist/schema/nodes/roof-segment-shape.test.d.ts.map +1 -0
  215. package/dist/schema/nodes/roof-segment-shape.test.js +175 -0
  216. package/dist/schema/nodes/roof-segment-surface.test.d.ts +2 -0
  217. package/dist/schema/nodes/roof-segment-surface.test.d.ts.map +1 -0
  218. package/dist/schema/nodes/roof-segment-surface.test.js +48 -0
  219. package/dist/schema/nodes/roof-segment-trim.test.d.ts +2 -0
  220. package/dist/schema/nodes/roof-segment-trim.test.d.ts.map +1 -0
  221. package/dist/schema/nodes/roof-segment-trim.test.js +107 -0
  222. package/dist/schema/nodes/roof-segment-walls.d.ts +101 -0
  223. package/dist/schema/nodes/roof-segment-walls.d.ts.map +1 -0
  224. package/dist/schema/nodes/roof-segment-walls.js +330 -0
  225. package/dist/schema/nodes/roof-segment-walls.test.d.ts +2 -0
  226. package/dist/schema/nodes/roof-segment-walls.test.d.ts.map +1 -0
  227. package/dist/schema/nodes/roof-segment-walls.test.js +92 -0
  228. package/dist/schema/nodes/roof-segment.d.ts +273 -3
  229. package/dist/schema/nodes/roof-segment.d.ts.map +1 -1
  230. package/dist/schema/nodes/roof-segment.js +539 -3
  231. package/dist/schema/nodes/roof.d.ts +8 -8
  232. package/dist/schema/nodes/roof.d.ts.map +1 -1
  233. package/dist/schema/nodes/roof.js +4 -16
  234. package/dist/schema/nodes/shelf.d.ts +106 -0
  235. package/dist/schema/nodes/shelf.d.ts.map +1 -0
  236. package/dist/schema/nodes/shelf.js +90 -0
  237. package/dist/schema/nodes/site.d.ts +1 -122
  238. package/dist/schema/nodes/site.d.ts.map +1 -1
  239. package/dist/schema/nodes/site.js +2 -6
  240. package/dist/schema/nodes/skylight.d.ts +279 -0
  241. package/dist/schema/nodes/skylight.d.ts.map +1 -0
  242. package/dist/schema/nodes/skylight.js +152 -0
  243. package/dist/schema/nodes/slab.d.ts +5 -2
  244. package/dist/schema/nodes/slab.d.ts.map +1 -1
  245. package/dist/schema/nodes/slab.js +5 -1
  246. package/dist/schema/nodes/solar-panel.d.ts +117 -0
  247. package/dist/schema/nodes/solar-panel.d.ts.map +1 -0
  248. package/dist/schema/nodes/solar-panel.js +47 -0
  249. package/dist/schema/nodes/stair-segment.d.ts +4 -4
  250. package/dist/schema/nodes/stair.d.ts +13 -12
  251. package/dist/schema/nodes/stair.d.ts.map +1 -1
  252. package/dist/schema/nodes/stair.js +3 -0
  253. package/dist/schema/nodes/surface-hole-metadata.d.ts +2 -0
  254. package/dist/schema/nodes/surface-hole-metadata.d.ts.map +1 -1
  255. package/dist/schema/nodes/surface-hole-metadata.js +3 -1
  256. package/dist/schema/nodes/turbine-vent.d.ts +68 -0
  257. package/dist/schema/nodes/turbine-vent.d.ts.map +1 -0
  258. package/dist/schema/nodes/turbine-vent.js +41 -0
  259. package/dist/schema/nodes/wall.d.ts +245 -6
  260. package/dist/schema/nodes/wall.d.ts.map +1 -1
  261. package/dist/schema/nodes/wall.js +257 -0
  262. package/dist/schema/nodes/wall.test.d.ts +2 -0
  263. package/dist/schema/nodes/wall.test.d.ts.map +1 -0
  264. package/dist/schema/nodes/wall.test.js +208 -0
  265. package/dist/schema/nodes/window.d.ts +11 -3
  266. package/dist/schema/nodes/window.d.ts.map +1 -1
  267. package/dist/schema/nodes/window.js +12 -0
  268. package/dist/schema/nodes/zone.d.ts +2 -0
  269. package/dist/schema/nodes/zone.d.ts.map +1 -1
  270. package/dist/schema/nodes/zone.js +6 -0
  271. package/dist/schema/scene-material.d.ts +41 -0
  272. package/dist/schema/scene-material.d.ts.map +1 -0
  273. package/dist/schema/scene-material.js +9 -0
  274. package/dist/schema/types.d.ts +2850 -655
  275. package/dist/schema/types.d.ts.map +1 -1
  276. package/dist/schema/types.js +49 -0
  277. package/dist/services/alignment-anchors.d.ts +100 -0
  278. package/dist/services/alignment-anchors.d.ts.map +1 -0
  279. package/dist/services/alignment-anchors.js +312 -0
  280. package/dist/services/alignment-anchors.test.d.ts +2 -0
  281. package/dist/services/alignment-anchors.test.d.ts.map +1 -0
  282. package/dist/services/alignment-anchors.test.js +383 -0
  283. package/dist/services/alignment.d.ts +131 -0
  284. package/dist/services/alignment.d.ts.map +1 -0
  285. package/dist/services/alignment.js +171 -0
  286. package/dist/services/alignment.test.d.ts +2 -0
  287. package/dist/services/alignment.test.d.ts.map +1 -0
  288. package/dist/services/alignment.test.js +92 -0
  289. package/dist/services/drag-session.d.ts +47 -0
  290. package/dist/services/drag-session.d.ts.map +1 -0
  291. package/dist/services/drag-session.js +100 -0
  292. package/dist/services/drag-session.test.d.ts +2 -0
  293. package/dist/services/drag-session.test.d.ts.map +1 -0
  294. package/dist/services/drag-session.test.js +219 -0
  295. package/dist/services/hosting.d.ts +88 -0
  296. package/dist/services/hosting.d.ts.map +1 -0
  297. package/dist/services/hosting.js +131 -0
  298. package/dist/services/hosting.test.d.ts +2 -0
  299. package/dist/services/hosting.test.d.ts.map +1 -0
  300. package/dist/services/hosting.test.js +230 -0
  301. package/dist/services/index.d.ts +13 -0
  302. package/dist/services/index.d.ts.map +1 -0
  303. package/dist/services/index.js +12 -0
  304. package/dist/services/level-height.d.ts +28 -0
  305. package/dist/services/level-height.d.ts.map +1 -0
  306. package/dist/services/level-height.js +62 -0
  307. package/dist/services/movement.d.ts +48 -0
  308. package/dist/services/movement.d.ts.map +1 -0
  309. package/dist/services/movement.js +65 -0
  310. package/dist/services/movement.test.d.ts +2 -0
  311. package/dist/services/movement.test.d.ts.map +1 -0
  312. package/dist/services/movement.test.js +133 -0
  313. package/dist/services/opening-guides.d.ts +141 -0
  314. package/dist/services/opening-guides.d.ts.map +1 -0
  315. package/dist/services/opening-guides.js +267 -0
  316. package/dist/services/opening-guides.test.d.ts +2 -0
  317. package/dist/services/opening-guides.test.d.ts.map +1 -0
  318. package/dist/services/opening-guides.test.js +208 -0
  319. package/dist/services/port-connectivity.d.ts +115 -0
  320. package/dist/services/port-connectivity.d.ts.map +1 -0
  321. package/dist/services/port-connectivity.js +300 -0
  322. package/dist/services/port-connectivity.test.d.ts +2 -0
  323. package/dist/services/port-connectivity.test.d.ts.map +1 -0
  324. package/dist/services/port-connectivity.test.js +297 -0
  325. package/dist/services/riser-diagram.d.ts +40 -0
  326. package/dist/services/riser-diagram.d.ts.map +1 -0
  327. package/dist/services/riser-diagram.js +110 -0
  328. package/dist/services/riser-diagram.test.d.ts +2 -0
  329. package/dist/services/riser-diagram.test.d.ts.map +1 -0
  330. package/dist/services/riser-diagram.test.js +66 -0
  331. package/dist/services/single-undo-dance.test.d.ts +2 -0
  332. package/dist/services/single-undo-dance.test.d.ts.map +1 -0
  333. package/dist/services/single-undo-dance.test.js +210 -0
  334. package/dist/services/snap.d.ts +80 -0
  335. package/dist/services/snap.d.ts.map +1 -0
  336. package/dist/services/snap.js +140 -0
  337. package/dist/services/snap.test.d.ts +2 -0
  338. package/dist/services/snap.test.d.ts.map +1 -0
  339. package/dist/services/snap.test.js +137 -0
  340. package/dist/services/system-graph.d.ts +30 -0
  341. package/dist/services/system-graph.d.ts.map +1 -0
  342. package/dist/services/system-graph.js +164 -0
  343. package/dist/services/system-graph.test.d.ts +2 -0
  344. package/dist/services/system-graph.test.d.ts.map +1 -0
  345. package/dist/services/system-graph.test.js +138 -0
  346. package/dist/services/validate-dwv.d.ts +32 -0
  347. package/dist/services/validate-dwv.d.ts.map +1 -0
  348. package/dist/services/validate-dwv.js +118 -0
  349. package/dist/services/validate-dwv.test.d.ts +2 -0
  350. package/dist/services/validate-dwv.test.d.ts.map +1 -0
  351. package/dist/services/validate-dwv.test.js +109 -0
  352. package/dist/solar-panel-presets.d.ts +17 -0
  353. package/dist/solar-panel-presets.d.ts.map +1 -0
  354. package/dist/solar-panel-presets.js +43 -0
  355. package/dist/store/actions/node-actions.d.ts +14 -2
  356. package/dist/store/actions/node-actions.d.ts.map +1 -1
  357. package/dist/store/actions/node-actions.js +585 -15
  358. package/dist/store/actions/node-mutation-sanitize.test.d.ts +2 -0
  359. package/dist/store/actions/node-mutation-sanitize.test.d.ts.map +1 -0
  360. package/dist/store/actions/node-mutation-sanitize.test.js +147 -0
  361. package/dist/store/actions/reparent.test.d.ts +2 -0
  362. package/dist/store/actions/reparent.test.d.ts.map +1 -0
  363. package/dist/store/actions/reparent.test.js +212 -0
  364. package/dist/store/actions/ridge-vent-update.test.d.ts +2 -0
  365. package/dist/store/actions/ridge-vent-update.test.d.ts.map +1 -0
  366. package/dist/store/actions/ridge-vent-update.test.js +264 -0
  367. package/dist/store/history-control.d.ts +11 -0
  368. package/dist/store/history-control.d.ts.map +1 -1
  369. package/dist/store/history-control.js +33 -0
  370. package/dist/store/use-interactive.d.ts +39 -0
  371. package/dist/store/use-interactive.d.ts.map +1 -1
  372. package/dist/store/use-interactive.js +75 -0
  373. package/dist/store/use-live-node-overrides.d.ts +22 -0
  374. package/dist/store/use-live-node-overrides.d.ts.map +1 -0
  375. package/dist/store/use-live-node-overrides.js +59 -0
  376. package/dist/store/use-scene-dirty-tracking.test.d.ts +2 -0
  377. package/dist/store/use-scene-dirty-tracking.test.d.ts.map +1 -0
  378. package/dist/store/use-scene-dirty-tracking.test.js +68 -0
  379. package/dist/store/use-scene-elevator-migration.test.d.ts +2 -0
  380. package/dist/store/use-scene-elevator-migration.test.d.ts.map +1 -0
  381. package/dist/store/use-scene-elevator-migration.test.js +109 -0
  382. package/dist/store/use-scene-measurement-roundtrip.test.d.ts +2 -0
  383. package/dist/store/use-scene-measurement-roundtrip.test.d.ts.map +1 -0
  384. package/dist/store/use-scene-measurement-roundtrip.test.js +97 -0
  385. package/dist/store/use-scene-plugins.test.d.ts +2 -0
  386. package/dist/store/use-scene-plugins.test.d.ts.map +1 -0
  387. package/dist/store/use-scene-plugins.test.js +51 -0
  388. package/dist/store/use-scene-wall-slot-migration.test.d.ts +2 -0
  389. package/dist/store/use-scene-wall-slot-migration.test.d.ts.map +1 -0
  390. package/dist/store/use-scene-wall-slot-migration.test.js +210 -0
  391. package/dist/store/use-scene-window-migration.test.d.ts +2 -0
  392. package/dist/store/use-scene-window-migration.test.d.ts.map +1 -0
  393. package/dist/store/use-scene-window-migration.test.js +85 -0
  394. package/dist/store/use-scene.d.ts +28 -2
  395. package/dist/store/use-scene.d.ts.map +1 -1
  396. package/dist/store/use-scene.js +546 -49
  397. package/dist/systems/elevator/elevator-dispatch.d.ts +12 -0
  398. package/dist/systems/elevator/elevator-dispatch.d.ts.map +1 -0
  399. package/dist/systems/elevator/elevator-dispatch.js +57 -0
  400. package/dist/systems/elevator/elevator-geometry.d.ts +15 -0
  401. package/dist/systems/elevator/elevator-geometry.d.ts.map +1 -0
  402. package/dist/systems/elevator/elevator-geometry.js +50 -0
  403. package/dist/systems/elevator/elevator-opening-sync.d.ts +6 -0
  404. package/dist/systems/elevator/elevator-opening-sync.d.ts.map +1 -0
  405. package/dist/systems/elevator/elevator-opening-sync.js +218 -0
  406. package/dist/systems/elevator/elevator-opening-sync.test.d.ts +2 -0
  407. package/dist/systems/elevator/elevator-opening-sync.test.d.ts.map +1 -0
  408. package/dist/systems/elevator/elevator-opening-sync.test.js +146 -0
  409. package/dist/systems/elevator/elevator-opening-system.d.ts +2 -0
  410. package/dist/systems/elevator/elevator-opening-system.d.ts.map +1 -0
  411. package/dist/systems/elevator/elevator-opening-system.js +48 -0
  412. package/dist/systems/elevator/elevator-runtime-system.d.ts +2 -0
  413. package/dist/systems/elevator/elevator-runtime-system.d.ts.map +1 -0
  414. package/dist/systems/elevator/elevator-runtime-system.js +8 -0
  415. package/dist/systems/elevator/elevator-runtime.d.ts +18 -0
  416. package/dist/systems/elevator/elevator-runtime.d.ts.map +1 -0
  417. package/dist/systems/elevator/elevator-runtime.js +225 -0
  418. package/dist/systems/elevator/elevator-runtime.test.d.ts +2 -0
  419. package/dist/systems/elevator/elevator-runtime.test.d.ts.map +1 -0
  420. package/dist/systems/elevator/elevator-runtime.test.js +64 -0
  421. package/dist/systems/elevator/elevator-service.d.ts +19 -0
  422. package/dist/systems/elevator/elevator-service.d.ts.map +1 -0
  423. package/dist/systems/elevator/elevator-service.js +111 -0
  424. package/dist/systems/fence/fence-centerline.d.ts +12 -0
  425. package/dist/systems/fence/fence-centerline.d.ts.map +1 -0
  426. package/dist/systems/fence/fence-centerline.js +37 -0
  427. package/dist/systems/fence/fence-spline.d.ts +39 -0
  428. package/dist/systems/fence/fence-spline.d.ts.map +1 -0
  429. package/dist/systems/fence/fence-spline.js +196 -0
  430. package/dist/systems/fence/fence-spline.test.d.ts +2 -0
  431. package/dist/systems/fence/fence-spline.test.d.ts.map +1 -0
  432. package/dist/systems/fence/fence-spline.test.js +136 -0
  433. package/dist/systems/stair/stair-footprint.d.ts +44 -0
  434. package/dist/systems/stair/stair-footprint.d.ts.map +1 -0
  435. package/dist/systems/stair/stair-footprint.js +178 -0
  436. package/dist/systems/stair/stair-opening-preview.d.ts +2447 -0
  437. package/dist/systems/stair/stair-opening-preview.d.ts.map +1 -0
  438. package/dist/systems/stair/stair-opening-preview.js +93 -0
  439. package/dist/systems/stair/stair-opening-preview.test.d.ts +2 -0
  440. package/dist/systems/stair/stair-opening-preview.test.d.ts.map +1 -0
  441. package/dist/systems/stair/stair-opening-preview.test.js +80 -0
  442. package/dist/systems/stair/stair-opening-sync.d.ts.map +1 -1
  443. package/dist/systems/stair/stair-opening-sync.js +155 -147
  444. package/dist/systems/stair/stair-opening-sync.test.js +424 -2
  445. package/dist/systems/stair/stair-opening-system.d.ts +2 -0
  446. package/dist/systems/stair/stair-opening-system.d.ts.map +1 -0
  447. package/dist/systems/stair/stair-opening-system.js +104 -0
  448. package/dist/systems/wall/wall-mitering.d.ts.map +1 -1
  449. package/dist/systems/wall/wall-mitering.js +38 -2
  450. package/dist/systems/wall/wall-mitering.test.d.ts +2 -0
  451. package/dist/systems/wall/wall-mitering.test.d.ts.map +1 -0
  452. package/dist/systems/wall/wall-mitering.test.js +63 -0
  453. package/dist/systems/wall/wall-move.d.ts +48 -0
  454. package/dist/systems/wall/wall-move.d.ts.map +1 -0
  455. package/dist/systems/wall/wall-move.js +193 -0
  456. package/dist/utils/clone-scene-graph.d.ts +7 -4
  457. package/dist/utils/clone-scene-graph.d.ts.map +1 -1
  458. package/dist/utils/clone-scene-graph.js +29 -7
  459. package/dist/utils/clone-scene-graph.test.d.ts +2 -0
  460. package/dist/utils/clone-scene-graph.test.d.ts.map +1 -0
  461. package/dist/utils/clone-scene-graph.test.js +62 -0
  462. package/dist/utils/heal-scene-graph.d.ts +18 -0
  463. package/dist/utils/heal-scene-graph.d.ts.map +1 -0
  464. package/dist/utils/heal-scene-graph.js +90 -0
  465. package/dist/utils/heal-scene-graph.test.d.ts +2 -0
  466. package/dist/utils/heal-scene-graph.test.d.ts.map +1 -0
  467. package/dist/utils/heal-scene-graph.test.js +88 -0
  468. package/dist/validation/validate-build-json.d.ts +44 -0
  469. package/dist/validation/validate-build-json.d.ts.map +1 -0
  470. package/dist/validation/validate-build-json.js +256 -0
  471. package/package.json +11 -4
@@ -0,0 +1,57 @@
1
+ import dedent from 'dedent';
2
+ import { z } from 'zod';
3
+ import { BaseNode, nodeType, objectId } from '../base';
4
+ import { MaterialSchema } from '../material';
5
+ export const ElevatorDoorStyle = z.enum(['center-opening', 'single-left', 'single-right']);
6
+ export const ElevatorDoorPanelStyle = z.enum(['glass-frame', 'solid-panel', 'segmented-panel']);
7
+ export const ElevatorShaftStyle = z.enum(['solid', 'glass']);
8
+ export const ElevatorNode = BaseNode.extend({
9
+ id: objectId('elevator'),
10
+ type: nodeType('elevator'),
11
+ material: MaterialSchema.optional(),
12
+ materialPreset: z.string().optional(),
13
+ // Unified paint-slot refs (`scene:`/`library:` MaterialRef per slot id),
14
+ // matching the slot model items/slab/shelf use. Absent = declared default.
15
+ slots: z.record(z.string(), z.string()).optional(),
16
+ position: z.tuple([z.number(), z.number(), z.number()]).default([0, 0, 0]),
17
+ // Rotation around the Y axis in radians.
18
+ rotation: z.number().default(0),
19
+ width: z.number().default(1.84),
20
+ depth: z.number().default(1.84),
21
+ shaftWidth: z.number().optional(),
22
+ shaftDepth: z.number().optional(),
23
+ shaftWallThickness: z.number().default(0.09),
24
+ shaftStyle: ElevatorShaftStyle.default('solid'),
25
+ cabHeight: z.number().default(2.35),
26
+ doorWidth: z.number().default(0.95),
27
+ doorHeight: z.number().default(2.1),
28
+ doorStyle: ElevatorDoorStyle.default('center-opening'),
29
+ doorPanelStyle: ElevatorDoorPanelStyle.default('glass-frame'),
30
+ fromLevelId: z.string().nullable().default(null),
31
+ toLevelId: z.string().nullable().default(null),
32
+ servedLevelIds: z.array(z.string()).optional(),
33
+ disabledLevelIds: z.array(z.string()).default([]),
34
+ serviceOnlyLevelIds: z.array(z.string()).default([]),
35
+ defaultLevelId: z.string().nullable().default(null),
36
+ speed: z.number().default(2.2),
37
+ doorDurationMs: z.number().default(900),
38
+ dwellMs: z.number().default(1400),
39
+ }).describe(dedent `
40
+ Elevator node - a vertical transport core attached to a building.
41
+ - parentId: building that owns this elevator
42
+ - position: building-local shaft center on the X/Z plane
43
+ - rotation: rotation around the Y axis
44
+ - width/depth: cab footprint
45
+ - shaftWidth/shaftDepth: optional clear shaft footprint; falls back to cab footprint
46
+ - shaftWallThickness: visible shaft shell thickness
47
+ - shaftStyle: solid or glass shaft shell presentation
48
+ - cabHeight: visible elevator cab height
49
+ - doorWidth/doorHeight/doorStyle: landing and cab door movement/opening presentation
50
+ - doorPanelStyle: visual leaf style for glass-frame, solid-panel, or segmented-panel doors
51
+ - fromLevelId / toLevelId: source and destination levels used for service range and auto cutouts
52
+ - servedLevelIds: legacy optional explicit level list; used only when from/to are missing
53
+ - disabledLevelIds: stops visible in the service range but unavailable for public/cab requests
54
+ - serviceOnlyLevelIds: stops unavailable from landing calls but available from cab/admin controls
55
+ - defaultLevelId: starting/resting level, falling back to the lowest served level
56
+ - speed/doorDurationMs/dwellMs: runtime animation defaults
57
+ `);
@@ -0,0 +1,68 @@
1
+ import { z } from 'zod';
2
+ export declare const EyebrowVentNode: z.ZodObject<{
3
+ object: z.ZodDefault<z.ZodLiteral<"node">>;
4
+ name: z.ZodOptional<z.ZodString>;
5
+ parentId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
6
+ visible: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
7
+ camera: z.ZodOptional<z.ZodObject<{
8
+ position: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
9
+ target: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
10
+ mode: z.ZodDefault<z.ZodEnum<{
11
+ perspective: "perspective";
12
+ orthographic: "orthographic";
13
+ }>>;
14
+ fov: z.ZodOptional<z.ZodNumber>;
15
+ zoom: z.ZodOptional<z.ZodNumber>;
16
+ }, z.core.$strip>>;
17
+ metadata: z.ZodDefault<z.ZodOptional<z.ZodJSONSchema>>;
18
+ id: z.ZodDefault<z.ZodTemplateLiteral<`eyebrow-vent_${string}`>>;
19
+ type: z.ZodDefault<z.ZodLiteral<"eyebrow-vent">>;
20
+ material: z.ZodOptional<z.ZodObject<{
21
+ id: z.ZodOptional<z.ZodString>;
22
+ preset: z.ZodOptional<z.ZodCatch<z.ZodEnum<{
23
+ custom: "custom";
24
+ white: "white";
25
+ brick: "brick";
26
+ concrete: "concrete";
27
+ wood: "wood";
28
+ glass: "glass";
29
+ metal: "metal";
30
+ plaster: "plaster";
31
+ tile: "tile";
32
+ marble: "marble";
33
+ }>>>;
34
+ properties: z.ZodOptional<z.ZodObject<{
35
+ color: z.ZodDefault<z.ZodString>;
36
+ roughness: z.ZodDefault<z.ZodNumber>;
37
+ metalness: z.ZodDefault<z.ZodNumber>;
38
+ opacity: z.ZodDefault<z.ZodNumber>;
39
+ transparent: z.ZodDefault<z.ZodBoolean>;
40
+ side: z.ZodDefault<z.ZodEnum<{
41
+ front: "front";
42
+ back: "back";
43
+ double: "double";
44
+ }>>;
45
+ }, z.core.$strip>>;
46
+ texture: z.ZodOptional<z.ZodObject<{
47
+ url: z.ZodString;
48
+ repeat: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>;
49
+ scale: z.ZodOptional<z.ZodNumber>;
50
+ }, z.core.$strip>>;
51
+ }, z.core.$strip>>;
52
+ materialPreset: z.ZodDefault<z.ZodString>;
53
+ roofSegmentId: z.ZodOptional<z.ZodString>;
54
+ position: z.ZodDefault<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
55
+ rotation: z.ZodDefault<z.ZodNumber>;
56
+ width: z.ZodDefault<z.ZodNumber>;
57
+ depth: z.ZodDefault<z.ZodNumber>;
58
+ height: z.ZodDefault<z.ZodNumber>;
59
+ style: z.ZodDefault<z.ZodEnum<{
60
+ scoop: "scoop";
61
+ "half-round": "half-round";
62
+ "slant-box": "slant-box";
63
+ }>>;
64
+ louverCount: z.ZodDefault<z.ZodNumber>;
65
+ backRatio: z.ZodDefault<z.ZodNumber>;
66
+ }, z.core.$strip>;
67
+ export type EyebrowVentNode = z.infer<typeof EyebrowVentNode>;
68
+ //# sourceMappingURL=eyebrow-vent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eyebrow-vent.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/eyebrow-vent.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA2C3B,CAAA;AAED,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAA"}
@@ -0,0 +1,40 @@
1
+ import dedent from 'dedent';
2
+ import { z } from 'zod';
3
+ import { BaseNode, nodeType, objectId } from '../base';
4
+ import { MaterialSchema } from '../material';
5
+ export const EyebrowVentNode = BaseNode.extend({
6
+ id: objectId('eyebrow-vent'),
7
+ type: nodeType('eyebrow-vent'),
8
+ material: MaterialSchema.optional(),
9
+ // Default to the white preset so a freshly-placed vent reads as clean
10
+ // painted metal and the paint inspector shows "White" (matches box-vent).
11
+ materialPreset: z.string().default('preset-white'),
12
+ roofSegmentId: z.string().optional(),
13
+ position: z.tuple([z.number(), z.number(), z.number()]).default([0, 0, 0]),
14
+ rotation: z.number().default(0),
15
+ // `width` is the opening width (left↔right across the louvered face),
16
+ // `depth` the front-to-back projection along the roof, `height` the rise.
17
+ width: z.number().default(0.5),
18
+ depth: z.number().default(0.6),
19
+ height: z.number().default(0.3),
20
+ // Body shape:
21
+ // - `scoop` : rounded louvered opening that sweeps back and tapers
22
+ // into the flashing plate (the classic dormer "eyebrow").
23
+ // - `half-round` : a D-shaped half-round louver vent (flat louvered face,
24
+ // semicircular curved top, short body).
25
+ // - `slant-box` : a low box with a slanted top and a screened front.
26
+ style: z.enum(['scoop', 'half-round', 'slant-box']).default('scoop'),
27
+ // Number of horizontal louver slats across the front opening (0 = open /
28
+ // screened only).
29
+ louverCount: z.number().int().min(0).max(8).default(3),
30
+ // `slant-box` only: the low rear edge as a fraction of the tall front edge.
31
+ // 1 = flat-topped box, lower = the top slopes down more steeply toward the
32
+ // back.
33
+ backRatio: z.number().min(0.15).max(1).default(0.5),
34
+ }).describe(dedent `
35
+ Eyebrow vent — a low roof ventilator with a rounded, louvered front that
36
+ sits on a flashing plate. Three styles: a swept "scoop" eyebrow, a D-shaped
37
+ "half-round" louver vent, and a "slant-box" hood. Parented to a roof-segment;
38
+ position is segment-local. Rotation is around the segment's vertical axis
39
+ (post-slope tilt).
40
+ `);
@@ -3,11 +3,17 @@ export declare const FenceStyle: z.ZodEnum<{
3
3
  slat: "slat";
4
4
  rail: "rail";
5
5
  privacy: "privacy";
6
+ horizontal: "horizontal";
6
7
  }>;
7
8
  export declare const FenceBaseStyle: z.ZodEnum<{
8
9
  floating: "floating";
9
10
  grounded: "grounded";
10
11
  }>;
12
+ export declare const FencePostCap: z.ZodEnum<{
13
+ flat: "flat";
14
+ none: "none";
15
+ pyramid: "pyramid";
16
+ }>;
11
17
  export declare const FenceNode: z.ZodObject<{
12
18
  object: z.ZodDefault<z.ZodLiteral<"node">>;
13
19
  name: z.ZodOptional<z.ZodString>;
@@ -28,7 +34,7 @@ export declare const FenceNode: z.ZodObject<{
28
34
  type: z.ZodDefault<z.ZodLiteral<"fence">>;
29
35
  material: z.ZodOptional<z.ZodObject<{
30
36
  id: z.ZodOptional<z.ZodString>;
31
- preset: z.ZodOptional<z.ZodEnum<{
37
+ preset: z.ZodOptional<z.ZodCatch<z.ZodEnum<{
32
38
  custom: "custom";
33
39
  white: "white";
34
40
  brick: "brick";
@@ -39,7 +45,7 @@ export declare const FenceNode: z.ZodObject<{
39
45
  plaster: "plaster";
40
46
  tile: "tile";
41
47
  marble: "marble";
42
- }>>;
48
+ }>>>;
43
49
  properties: z.ZodOptional<z.ZodObject<{
44
50
  color: z.ZodDefault<z.ZodString>;
45
51
  roughness: z.ZodDefault<z.ZodNumber>;
@@ -59,8 +65,11 @@ export declare const FenceNode: z.ZodObject<{
59
65
  }, z.core.$strip>>;
60
66
  }, z.core.$strip>>;
61
67
  materialPreset: z.ZodOptional<z.ZodString>;
68
+ slots: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
62
69
  start: z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>;
63
70
  end: z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>;
71
+ path: z.ZodOptional<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>>;
72
+ tangents: z.ZodOptional<z.ZodArray<z.ZodNullable<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>>>;
64
73
  height: z.ZodDefault<z.ZodNumber>;
65
74
  thickness: z.ZodDefault<z.ZodNumber>;
66
75
  curveOffset: z.ZodOptional<z.ZodNumber>;
@@ -70,15 +79,23 @@ export declare const FenceNode: z.ZodObject<{
70
79
  topRailHeight: z.ZodDefault<z.ZodNumber>;
71
80
  groundClearance: z.ZodDefault<z.ZodNumber>;
72
81
  edgeInset: z.ZodDefault<z.ZodNumber>;
82
+ slatGap: z.ZodDefault<z.ZodNumber>;
83
+ postCap: z.ZodDefault<z.ZodEnum<{
84
+ flat: "flat";
85
+ none: "none";
86
+ pyramid: "pyramid";
87
+ }>>;
73
88
  baseStyle: z.ZodDefault<z.ZodEnum<{
74
89
  floating: "floating";
75
90
  grounded: "grounded";
76
91
  }>>;
92
+ showInfill: z.ZodDefault<z.ZodBoolean>;
77
93
  color: z.ZodDefault<z.ZodString>;
78
94
  style: z.ZodDefault<z.ZodEnum<{
79
95
  slat: "slat";
80
96
  rail: "rail";
81
97
  privacy: "privacy";
98
+ horizontal: "horizontal";
82
99
  }>>;
83
100
  }, z.core.$strip>;
84
101
  export type FenceNode = z.infer<typeof FenceNode>;
@@ -1 +1 @@
1
- {"version":3,"file":"fence.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/fence.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,eAAO,MAAM,UAAU;;;;EAAsC,CAAA;AAC7D,eAAO,MAAM,cAAc;;;EAAmC,CAAA;AAE9D,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA6BrB,CAAA;AAED,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAA"}
1
+ {"version":3,"file":"fence.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/fence.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,eAAO,MAAM,UAAU;;;;;EAAoD,CAAA;AAC3E,eAAO,MAAM,cAAc;;;EAAmC,CAAA;AAC9D,eAAO,MAAM,YAAY;;;;EAAsC,CAAA;AAE/D,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAqDrB,CAAA;AAED,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAA"}
@@ -2,15 +2,32 @@ import dedent from 'dedent';
2
2
  import { z } from 'zod';
3
3
  import { BaseNode, nodeType, objectId } from '../base';
4
4
  import { MaterialSchema } from '../material';
5
- export const FenceStyle = z.enum(['slat', 'rail', 'privacy']);
5
+ export const FenceStyle = z.enum(['slat', 'rail', 'privacy', 'horizontal']);
6
6
  export const FenceBaseStyle = z.enum(['floating', 'grounded']);
7
+ export const FencePostCap = z.enum(['none', 'flat', 'pyramid']);
7
8
  export const FenceNode = BaseNode.extend({
8
9
  id: objectId('fence'),
9
10
  type: nodeType('fence'),
10
11
  material: MaterialSchema.optional(),
11
12
  materialPreset: z.string().optional(),
13
+ // Unified paint-slot refs (`scene:`/`library:` MaterialRef per slot id),
14
+ // matching the slot model items/slab/shelf use. Absent = declared default.
15
+ slots: z.record(z.string(), z.string()).optional(),
12
16
  start: z.tuple([z.number(), z.number()]),
13
17
  end: z.tuple([z.number(), z.number()]),
18
+ // Optional spline control points in level coordinate meters. When present
19
+ // (>= 2 points) the fence centerline is a smooth Catmull-Rom curve through
20
+ // these points and start/end/curveOffset no longer define the centerline.
21
+ // start/end are kept in sync with the first/last path point so consumers
22
+ // that read endpoints (handles, bbox, miter references) stay valid. Absent =
23
+ // the straight or single-arc fence defined by start/end (+ curveOffset).
24
+ path: z.array(z.tuple([z.number(), z.number()])).optional(),
25
+ // Optional per-control-point tangent handles, parallel to `path` (same
26
+ // length when present). Each entry is the OUT-handle offset vector [dx, dy]
27
+ // from its path point, in level meters; the IN handle is its mirror so the
28
+ // curve stays smooth through the point. `null` = use the automatic
29
+ // Catmull-Rom tangent for that point. Only meaningful for spline fences.
30
+ tangents: z.array(z.tuple([z.number(), z.number()]).nullable()).optional(),
14
31
  height: z.number().default(1.8),
15
32
  thickness: z.number().default(0.08),
16
33
  curveOffset: z.number().optional(),
@@ -20,15 +37,23 @@ export const FenceNode = BaseNode.extend({
20
37
  topRailHeight: z.number().default(0.04),
21
38
  groundClearance: z.number().default(0),
22
39
  edgeInset: z.number().default(0.015),
40
+ // Reveal between the boards of a `horizontal` fence (0 = flush cladding).
41
+ slatGap: z.number().default(0.01),
42
+ // Topper drawn on each `horizontal`-fence post.
43
+ postCap: FencePostCap.default('pyramid'),
23
44
  baseStyle: FenceBaseStyle.default('grounded'),
45
+ showInfill: z.boolean().default(true),
24
46
  color: z.string().default('#ffffff'),
25
47
  style: FenceStyle.default('slat'),
26
48
  }).describe(dedent `
27
49
  Fence node - used to represent a fence segment in the building/site level coordinate system
28
50
  - start/end: fence endpoints in level coordinate system
51
+ - path: optional list of [x, y] points; when set (>= 2) the centerline is a smooth spline through them
52
+ - tangents: optional per-point handle vectors (parallel to path); null entries fall back to the automatic tangent
29
53
  - height/thickness: overall fence dimensions in meters
30
- - curveOffset: midpoint sagitta offset used to bend the fence into an arc
54
+ - curveOffset: midpoint sagitta offset used to bend the fence into an arc (ignored when path is set)
31
55
  - baseHeight/postSpacing/postSize/topRailHeight: exact geometric controls from the plan3D fence model
32
56
  - groundClearance/edgeInset/baseStyle: fence support and inset configuration
57
+ - showInfill: whether to draw intermediate posts/slats between end posts
33
58
  - color/style: visual appearance options
34
59
  `);
@@ -0,0 +1,84 @@
1
+ import { z } from 'zod';
2
+ export declare const GutterOutlet: z.ZodObject<{
3
+ id: z.ZodString;
4
+ offset: z.ZodDefault<z.ZodNumber>;
5
+ diameter: z.ZodDefault<z.ZodNumber>;
6
+ }, z.core.$strip>;
7
+ export type GutterOutlet = z.infer<typeof GutterOutlet>;
8
+ export declare const GutterNode: z.ZodObject<{
9
+ object: z.ZodDefault<z.ZodLiteral<"node">>;
10
+ name: z.ZodOptional<z.ZodString>;
11
+ parentId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
12
+ visible: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
13
+ camera: z.ZodOptional<z.ZodObject<{
14
+ position: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
15
+ target: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
16
+ mode: z.ZodDefault<z.ZodEnum<{
17
+ perspective: "perspective";
18
+ orthographic: "orthographic";
19
+ }>>;
20
+ fov: z.ZodOptional<z.ZodNumber>;
21
+ zoom: z.ZodOptional<z.ZodNumber>;
22
+ }, z.core.$strip>>;
23
+ metadata: z.ZodDefault<z.ZodOptional<z.ZodJSONSchema>>;
24
+ id: z.ZodDefault<z.ZodTemplateLiteral<`gutter_${string}`>>;
25
+ type: z.ZodDefault<z.ZodLiteral<"gutter">>;
26
+ material: z.ZodOptional<z.ZodObject<{
27
+ id: z.ZodOptional<z.ZodString>;
28
+ preset: z.ZodOptional<z.ZodCatch<z.ZodEnum<{
29
+ custom: "custom";
30
+ white: "white";
31
+ brick: "brick";
32
+ concrete: "concrete";
33
+ wood: "wood";
34
+ glass: "glass";
35
+ metal: "metal";
36
+ plaster: "plaster";
37
+ tile: "tile";
38
+ marble: "marble";
39
+ }>>>;
40
+ properties: z.ZodOptional<z.ZodObject<{
41
+ color: z.ZodDefault<z.ZodString>;
42
+ roughness: z.ZodDefault<z.ZodNumber>;
43
+ metalness: z.ZodDefault<z.ZodNumber>;
44
+ opacity: z.ZodDefault<z.ZodNumber>;
45
+ transparent: z.ZodDefault<z.ZodBoolean>;
46
+ side: z.ZodDefault<z.ZodEnum<{
47
+ front: "front";
48
+ back: "back";
49
+ double: "double";
50
+ }>>;
51
+ }, z.core.$strip>>;
52
+ texture: z.ZodOptional<z.ZodObject<{
53
+ url: z.ZodString;
54
+ repeat: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>;
55
+ scale: z.ZodOptional<z.ZodNumber>;
56
+ }, z.core.$strip>>;
57
+ }, z.core.$strip>>;
58
+ materialPreset: z.ZodDefault<z.ZodString>;
59
+ roofSegmentId: z.ZodOptional<z.ZodString>;
60
+ position: z.ZodDefault<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
61
+ rotation: z.ZodDefault<z.ZodNumber>;
62
+ length: z.ZodDefault<z.ZodNumber>;
63
+ size: z.ZodDefault<z.ZodNumber>;
64
+ thickness: z.ZodDefault<z.ZodNumber>;
65
+ profile: z.ZodDefault<z.ZodEnum<{
66
+ box: "box";
67
+ "half-round": "half-round";
68
+ "k-style": "k-style";
69
+ }>>;
70
+ endCapLeft: z.ZodDefault<z.ZodBoolean>;
71
+ endCapRight: z.ZodDefault<z.ZodBoolean>;
72
+ hangerStyle: z.ZodDefault<z.ZodEnum<{
73
+ none: "none";
74
+ strap: "strap";
75
+ }>>;
76
+ hangerSpacing: z.ZodDefault<z.ZodNumber>;
77
+ outlets: z.ZodDefault<z.ZodArray<z.ZodObject<{
78
+ id: z.ZodString;
79
+ offset: z.ZodDefault<z.ZodNumber>;
80
+ diameter: z.ZodDefault<z.ZodNumber>;
81
+ }, z.core.$strip>>>;
82
+ }, z.core.$strip>;
83
+ export type GutterNode = z.infer<typeof GutterNode>;
84
+ //# sourceMappingURL=gutter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gutter.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/gutter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAOvB,eAAO,MAAM,YAAY;;;;iBAUvB,CAAA;AACF,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAA;AAEvD,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAkEtB,CAAA;AAED,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAA"}
@@ -0,0 +1,76 @@
1
+ import dedent from 'dedent';
2
+ import { z } from 'zod';
3
+ import { BaseNode, nodeType, objectId } from '../base';
4
+ import { MaterialSchema } from '../material';
5
+ // A single drop outlet drilled in the gutter floor. A gutter can carry
6
+ // several so a long run can split between multiple downspouts (each
7
+ // downspout links to one outlet via its `outletId`).
8
+ export const GutterOutlet = z.object({
9
+ // Stable id the downspout references. Generated with `generateId('outlet')`.
10
+ id: z.string(),
11
+ // Position along the gutter length (gutter-local +X), signed from the
12
+ // CENTER. The geometry clamps it inside the end caps at build time, so
13
+ // a stored value that no longer fits just rides the nearest bound.
14
+ offset: z.number().default(0),
15
+ // Bore diameter of this drop. Default 0.07 m ≈ 3″. The cross-section
16
+ // SHAPE (round vs rectangular) follows the gutter's profile, not this.
17
+ diameter: z.number().default(0.07),
18
+ });
19
+ export const GutterNode = BaseNode.extend({
20
+ id: objectId('gutter'),
21
+ type: nodeType('gutter'),
22
+ material: MaterialSchema.optional(),
23
+ // White preset by default — matches the rest of the roof accessory
24
+ // family (box-vent / ridge-vent) so the paint inspector reads as
25
+ // "White" instead of "no material" on a freshly-placed gutter.
26
+ materialPreset: z.string().default('preset-white'),
27
+ roofSegmentId: z.string().optional(),
28
+ // Segment-local. The placement tool snaps to the eave line (Z =
29
+ // +depth/2, Y = wallHeight) of the segment under the cursor; X is
30
+ // wherever the user clicked. After placement the inspector + length
31
+ // handles can shift X along the eave.
32
+ position: z.tuple([z.number(), z.number(), z.number()]).default([0, 0, 0]),
33
+ // Rotation around the gutter's own local Y. Kept at 0 by default
34
+ // because the gutter's length axis is constrained to the eave
35
+ // direction (segment-local +X) — but exposed in case the user wants
36
+ // to tilt for a custom run.
37
+ rotation: z.number().default(0),
38
+ // Length along the eave (gutter-local +X).
39
+ length: z.number().default(2.0),
40
+ // Profile size — the vertical drop of the U-channel below the eave
41
+ // line. 5″ (0.127 m) is the most common residential gutter size; 6″
42
+ // (0.152 m) is the common commercial / heavy-duty size. Default
43
+ // rounds the residential value to 0.13 m.
44
+ size: z.number().default(0.13),
45
+ // Wall thickness of the U-channel. Visible on the rim from above; too
46
+ // thin reads as a paper strip, too thick reads as a curb.
47
+ thickness: z.number().default(0.006),
48
+ profile: z.enum(['k-style', 'half-round', 'box']).default('k-style'),
49
+ // End caps close the open ends of the U-channel so water can't run
50
+ // out the sides. Independent per-end because a downspout typically
51
+ // joins the gutter at one end while the other stays capped. Default
52
+ // true on both — matches a freshly-installed residential gutter.
53
+ endCapLeft: z.boolean().default(true),
54
+ endCapRight: z.boolean().default(true),
55
+ // Hangers are the metal straps that hold the gutter onto the
56
+ // fascia. 'strap' renders periodic bars across the rim; 'none'
57
+ // hides them (some plastic gutters use hidden clips). Spacing is
58
+ // metres between hanger centers; real residential code is roughly
59
+ // 0.6 m for snow-load areas, 0.75 m elsewhere.
60
+ hangerStyle: z.enum(['strap', 'none']).default('strap'),
61
+ hangerSpacing: z.number().default(0.6),
62
+ // Downspout outlets — short drop tubes descending from the gutter
63
+ // floor where downspouts connect. Empty by default so existing
64
+ // gutters don't sprout outlets on schema upgrade. Each is drilled
65
+ // through the trough floor via CSG; a downspout links to one by id.
66
+ outlets: z.array(GutterOutlet).default([]),
67
+ }).describe(dedent `
68
+ Gutter — a rain-water channel running along the eave of a roof
69
+ segment. Parented to a roof-segment; position is segment-local.
70
+ - length: span along the eave (gutter-local +X)
71
+ - size: profile drop below the eave line (vertical extent)
72
+ - profile: k-style (ogee fascia), half-round, or square box
73
+ - endCapLeft / endCapRight: close the trough at gutter-local -X / +X
74
+ - hangerStyle / hangerSpacing: visible metal straps across the rim
75
+ - outlets: drop-tube outlets (id + along-length offset + bore diameter)
76
+ `);
@@ -0,0 +1,63 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * HVAC equipment — the boxes duct systems start and end at: furnace,
4
+ * air handler, outdoor condenser.
5
+ *
6
+ * Phase 3 of the HVAC node system. Furnaces and air handlers expose
7
+ * typed duct ports (supply plenum on top, return drop on the side) so
8
+ * duct runs and fittings snap onto them. Every unit also exposes a
9
+ * refrigerant service port on its valve face — a condenser, the outdoor
10
+ * half of a split system, carries no duct ports but pipes to the indoor
11
+ * coil through a `lineset` run mating onto that port.
12
+ *
13
+ * Floor-placed: `position` is level-local meters with y at the base,
14
+ * `rotation` is yaw radians (the editor's default R-rotate applies).
15
+ */
16
+ export declare const HvacEquipmentNode: z.ZodObject<{
17
+ object: z.ZodDefault<z.ZodLiteral<"node">>;
18
+ name: z.ZodOptional<z.ZodString>;
19
+ parentId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
20
+ visible: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
21
+ camera: z.ZodOptional<z.ZodObject<{
22
+ position: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
23
+ target: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
24
+ mode: z.ZodDefault<z.ZodEnum<{
25
+ perspective: "perspective";
26
+ orthographic: "orthographic";
27
+ }>>;
28
+ fov: z.ZodOptional<z.ZodNumber>;
29
+ zoom: z.ZodOptional<z.ZodNumber>;
30
+ }, z.core.$strip>>;
31
+ metadata: z.ZodDefault<z.ZodOptional<z.ZodJSONSchema>>;
32
+ id: z.ZodDefault<z.ZodTemplateLiteral<`hvac-equipment_${string}`>>;
33
+ type: z.ZodDefault<z.ZodLiteral<"hvac-equipment">>;
34
+ position: z.ZodDefault<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
35
+ rotation: z.ZodDefault<z.ZodNumber>;
36
+ equipmentType: z.ZodDefault<z.ZodEnum<{
37
+ furnace: "furnace";
38
+ "air-handler": "air-handler";
39
+ condenser: "condenser";
40
+ }>>;
41
+ width: z.ZodDefault<z.ZodNumber>;
42
+ depth: z.ZodDefault<z.ZodNumber>;
43
+ height: z.ZodDefault<z.ZodNumber>;
44
+ supplyShape: z.ZodDefault<z.ZodEnum<{
45
+ round: "round";
46
+ rect: "rect";
47
+ oval: "oval";
48
+ }>>;
49
+ returnShape: z.ZodDefault<z.ZodEnum<{
50
+ round: "round";
51
+ rect: "rect";
52
+ oval: "oval";
53
+ }>>;
54
+ supplyDiameter: z.ZodDefault<z.ZodNumber>;
55
+ returnDiameter: z.ZodDefault<z.ZodNumber>;
56
+ supplyWidth: z.ZodDefault<z.ZodNumber>;
57
+ supplyHeight: z.ZodDefault<z.ZodNumber>;
58
+ returnWidth: z.ZodDefault<z.ZodNumber>;
59
+ returnHeight: z.ZodDefault<z.ZodNumber>;
60
+ }, z.core.$strip>;
61
+ export type HvacEquipmentNode = z.infer<typeof HvacEquipmentNode>;
62
+ export type HvacEquipmentNodeId = HvacEquipmentNode['id'];
63
+ //# sourceMappingURL=hvac-equipment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hvac-equipment.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/hvac-equipment.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAuC7B,CAAA;AACD,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAA;AACjE,MAAM,MAAM,mBAAmB,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAA"}
@@ -0,0 +1,55 @@
1
+ import dedent from 'dedent';
2
+ import { z } from 'zod';
3
+ import { BaseNode, nodeType, objectId } from '../base';
4
+ /**
5
+ * HVAC equipment — the boxes duct systems start and end at: furnace,
6
+ * air handler, outdoor condenser.
7
+ *
8
+ * Phase 3 of the HVAC node system. Furnaces and air handlers expose
9
+ * typed duct ports (supply plenum on top, return drop on the side) so
10
+ * duct runs and fittings snap onto them. Every unit also exposes a
11
+ * refrigerant service port on its valve face — a condenser, the outdoor
12
+ * half of a split system, carries no duct ports but pipes to the indoor
13
+ * coil through a `lineset` run mating onto that port.
14
+ *
15
+ * Floor-placed: `position` is level-local meters with y at the base,
16
+ * `rotation` is yaw radians (the editor's default R-rotate applies).
17
+ */
18
+ export const HvacEquipmentNode = BaseNode.extend({
19
+ id: objectId('hvac-equipment'),
20
+ type: nodeType('hvac-equipment'),
21
+ // Level-local meters, y at the unit's base.
22
+ position: z.tuple([z.number(), z.number(), z.number()]).default([0, 0, 0]),
23
+ // Yaw in radians.
24
+ rotation: z.number().default(0),
25
+ equipmentType: z.enum(['furnace', 'air-handler', 'condenser']).default('furnace'),
26
+ // Cabinet dimensions in meters. Defaults match a typical upflow
27
+ // furnace cabinet (~22" × 28" footprint, ~43" tall).
28
+ width: z.number().min(0.3).max(2).default(0.56),
29
+ depth: z.number().min(0.3).max(2).default(0.71),
30
+ height: z.number().min(0.4).max(2.5).default(1.1),
31
+ // Duct collar cross-section on the supply / return connections. Round is
32
+ // the default; rect and oval (flat-oval) match the duct shapes a run
33
+ // might mate with. Condensers carry no duct collars (ignored).
34
+ supplyShape: z.enum(['round', 'rect', 'oval']).default('round'),
35
+ returnShape: z.enum(['round', 'rect', 'oval']).default('round'),
36
+ // Round collar diameters in inches.
37
+ supplyDiameter: z.number().min(6).max(30).default(8),
38
+ returnDiameter: z.number().min(6).max(30).default(8),
39
+ // Rect / oval collar cross-section in inches: width is the horizontal
40
+ // face, height the vertical. For oval, height is also the end-cap
41
+ // semicircle diameter (width ≥ height).
42
+ supplyWidth: z.number().min(6).max(30).default(12),
43
+ supplyHeight: z.number().min(6).max(30).default(8),
44
+ returnWidth: z.number().min(6).max(30).default(14),
45
+ returnHeight: z.number().min(6).max(30).default(8),
46
+ }).describe(dedent `
47
+ HVAC equipment cabinet - furnace, air handler, or outdoor condenser.
48
+ - position: [x, y, z] level-local meters (y = base)
49
+ - rotation: yaw radians
50
+ - equipmentType: furnace | air-handler | condenser
51
+ - width / depth / height: cabinet size in meters
52
+ - supplyShape / returnShape: round | rect | oval duct collar cross-section (ignored by condenser)
53
+ - supplyDiameter / returnDiameter: round collar sizes in inches
54
+ - supplyWidth / supplyHeight / returnWidth / returnHeight: rect / oval collar cross-section in inches
55
+ `);
@@ -157,7 +157,9 @@ declare const assetSchema: z.ZodObject<{
157
157
  ceiling: "ceiling";
158
158
  "wall-side": "wall-side";
159
159
  }>>;
160
+ recessed: z.ZodOptional<z.ZodBoolean>;
160
161
  tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
162
+ functionTags: z.ZodOptional<z.ZodArray<z.ZodString>>;
161
163
  offset: z.ZodDefault<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
162
164
  rotation: z.ZodDefault<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
163
165
  scale: z.ZodDefault<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
@@ -239,7 +241,15 @@ export declare const ItemNode: z.ZodObject<{
239
241
  children: z.ZodDefault<z.ZodArray<z.ZodDefault<z.ZodTemplateLiteral<`item_${string}`>>>>;
240
242
  wallId: z.ZodOptional<z.ZodString>;
241
243
  wallT: z.ZodOptional<z.ZodNumber>;
244
+ roofSegmentId: z.ZodOptional<z.ZodString>;
245
+ roofFace: z.ZodOptional<z.ZodEnum<{
246
+ front: "front";
247
+ back: "back";
248
+ right: "right";
249
+ left: "left";
250
+ }>>;
242
251
  collectionIds: z.ZodOptional<z.ZodArray<z.ZodCustom<`collection_${string}`, `collection_${string}`>>>;
252
+ slots: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
243
253
  asset: z.ZodObject<{
244
254
  id: z.ZodString;
245
255
  category: z.ZodString;
@@ -259,7 +269,9 @@ export declare const ItemNode: z.ZodObject<{
259
269
  ceiling: "ceiling";
260
270
  "wall-side": "wall-side";
261
271
  }>>;
272
+ recessed: z.ZodOptional<z.ZodBoolean>;
262
273
  tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
274
+ functionTags: z.ZodOptional<z.ZodArray<z.ZodString>>;
263
275
  offset: z.ZodDefault<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
264
276
  rotation: z.ZodDefault<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
265
277
  scale: z.ZodDefault<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
@@ -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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAkCf,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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA6BnB,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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAyCnB,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"}