@pascal-app/core 0.7.0 → 0.9.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 (318) hide show
  1. package/dist/events/bus.d.ts +47 -18
  2. package/dist/events/bus.d.ts.map +1 -1
  3. package/dist/events/bus.js +1 -1
  4. package/dist/hooks/scene-registry/scene-registry.d.ts +6 -22
  5. package/dist/hooks/scene-registry/scene-registry.d.ts.map +1 -1
  6. package/dist/hooks/scene-registry/scene-registry.js +33 -26
  7. package/dist/hooks/spatial-grid/floor-placed-elevation.d.ts +14 -0
  8. package/dist/hooks/spatial-grid/floor-placed-elevation.d.ts.map +1 -0
  9. package/dist/hooks/spatial-grid/floor-placed-elevation.js +51 -0
  10. package/dist/hooks/spatial-grid/floor-placed-elevation.test.d.ts +2 -0
  11. package/dist/hooks/spatial-grid/floor-placed-elevation.test.d.ts.map +1 -0
  12. package/dist/hooks/spatial-grid/floor-placed-elevation.test.js +273 -0
  13. package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts +13 -2
  14. package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts.map +1 -1
  15. package/dist/hooks/spatial-grid/spatial-grid-manager.js +95 -9
  16. package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts +28 -1
  17. package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts.map +1 -1
  18. package/dist/hooks/spatial-grid/spatial-grid-sync.js +91 -18
  19. package/dist/index.d.ts +22 -4
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +19 -2
  22. package/dist/lib/polygon-geometry.d.ts.map +1 -1
  23. package/dist/lib/polygon-relations.d.ts +10 -0
  24. package/dist/lib/polygon-relations.d.ts.map +1 -0
  25. package/dist/lib/polygon-relations.js +73 -0
  26. package/dist/lib/space-detection-pause.test.d.ts +2 -0
  27. package/dist/lib/space-detection-pause.test.d.ts.map +1 -0
  28. package/dist/lib/space-detection-pause.test.js +42 -0
  29. package/dist/lib/space-detection.d.ts +30 -1
  30. package/dist/lib/space-detection.d.ts.map +1 -1
  31. package/dist/lib/space-detection.js +222 -41
  32. package/dist/lib/space-detection.test.d.ts +2 -0
  33. package/dist/lib/space-detection.test.d.ts.map +1 -0
  34. package/dist/lib/space-detection.test.js +77 -0
  35. package/dist/material-library.d.ts +1 -1
  36. package/dist/material-library.d.ts.map +1 -1
  37. package/dist/material-library.js +1957 -141
  38. package/dist/registry/__bench__/relations-resolver.bench.d.ts +15 -0
  39. package/dist/registry/__bench__/relations-resolver.bench.d.ts.map +1 -0
  40. package/dist/registry/__bench__/relations-resolver.bench.js +170 -0
  41. package/dist/registry/handles.d.ts +321 -0
  42. package/dist/registry/handles.d.ts.map +1 -0
  43. package/dist/registry/handles.js +24 -0
  44. package/dist/registry/index.d.ts +7 -0
  45. package/dist/registry/index.d.ts.map +1 -0
  46. package/dist/registry/index.js +4 -0
  47. package/dist/registry/registry.d.ts +93 -0
  48. package/dist/registry/registry.d.ts.map +1 -0
  49. package/dist/registry/registry.js +201 -0
  50. package/dist/registry/registry.test.d.ts +2 -0
  51. package/dist/registry/registry.test.d.ts.map +1 -0
  52. package/dist/registry/registry.test.js +183 -0
  53. package/dist/registry/relations-resolver.d.ts +42 -0
  54. package/dist/registry/relations-resolver.d.ts.map +1 -0
  55. package/dist/registry/relations-resolver.js +77 -0
  56. package/dist/registry/relations-resolver.test.d.ts +2 -0
  57. package/dist/registry/relations-resolver.test.d.ts.map +1 -0
  58. package/dist/registry/relations-resolver.test.js +183 -0
  59. package/dist/registry/scene-api.d.ts +44 -0
  60. package/dist/registry/scene-api.d.ts.map +1 -0
  61. package/dist/registry/scene-api.js +111 -0
  62. package/dist/registry/scene-api.test.d.ts +2 -0
  63. package/dist/registry/scene-api.test.d.ts.map +1 -0
  64. package/dist/registry/scene-api.test.js +183 -0
  65. package/dist/registry/subtree.d.ts +67 -0
  66. package/dist/registry/subtree.d.ts.map +1 -0
  67. package/dist/registry/subtree.js +119 -0
  68. package/dist/registry/subtree.test.d.ts +2 -0
  69. package/dist/registry/subtree.test.d.ts.map +1 -0
  70. package/dist/registry/subtree.test.js +133 -0
  71. package/dist/registry/types.d.ts +1420 -0
  72. package/dist/registry/types.d.ts.map +1 -0
  73. package/dist/registry/types.js +1 -0
  74. package/dist/schema/asset-url.test.js +0 -4
  75. package/dist/schema/index.d.ts +17 -2
  76. package/dist/schema/index.d.ts.map +1 -1
  77. package/dist/schema/index.js +17 -3
  78. package/dist/schema/material.d.ts +12 -2
  79. package/dist/schema/material.d.ts.map +1 -1
  80. package/dist/schema/material.js +10 -0
  81. package/dist/schema/nodes/box-vent.d.ts +74 -0
  82. package/dist/schema/nodes/box-vent.d.ts.map +1 -0
  83. package/dist/schema/nodes/box-vent.js +63 -0
  84. package/dist/schema/nodes/building.d.ts +1 -1
  85. package/dist/schema/nodes/building.d.ts.map +1 -1
  86. package/dist/schema/nodes/building.js +3 -2
  87. package/dist/schema/nodes/ceiling.d.ts +3 -1
  88. package/dist/schema/nodes/ceiling.d.ts.map +1 -1
  89. package/dist/schema/nodes/ceiling.js +1 -1
  90. package/dist/schema/nodes/chimney.d.ts +158 -0
  91. package/dist/schema/nodes/chimney.d.ts.map +1 -0
  92. package/dist/schema/nodes/chimney.js +67 -0
  93. package/dist/schema/nodes/column.d.ts +598 -6
  94. package/dist/schema/nodes/column.d.ts.map +1 -1
  95. package/dist/schema/nodes/column.js +586 -6
  96. package/dist/schema/nodes/cupola.d.ts +66 -0
  97. package/dist/schema/nodes/cupola.d.ts.map +1 -0
  98. package/dist/schema/nodes/cupola.js +28 -0
  99. package/dist/schema/nodes/door.d.ts +1 -1
  100. package/dist/schema/nodes/dormer.d.ts +228 -0
  101. package/dist/schema/nodes/dormer.d.ts.map +1 -0
  102. package/dist/schema/nodes/dormer.js +119 -0
  103. package/dist/schema/nodes/downspout.d.ts +75 -0
  104. package/dist/schema/nodes/downspout.d.ts.map +1 -0
  105. package/dist/schema/nodes/downspout.js +63 -0
  106. package/dist/schema/nodes/elevator.d.ts +105 -0
  107. package/dist/schema/nodes/elevator.d.ts.map +1 -0
  108. package/dist/schema/nodes/elevator.js +54 -0
  109. package/dist/schema/nodes/eyebrow-vent.d.ts +68 -0
  110. package/dist/schema/nodes/eyebrow-vent.d.ts.map +1 -0
  111. package/dist/schema/nodes/eyebrow-vent.js +40 -0
  112. package/dist/schema/nodes/fence.d.ts +3 -2
  113. package/dist/schema/nodes/fence.d.ts.map +1 -1
  114. package/dist/schema/nodes/fence.js +4 -2
  115. package/dist/schema/nodes/gutter.d.ts +84 -0
  116. package/dist/schema/nodes/gutter.d.ts.map +1 -0
  117. package/dist/schema/nodes/gutter.js +76 -0
  118. package/dist/schema/nodes/item.d.ts +16 -0
  119. package/dist/schema/nodes/item.d.ts.map +1 -1
  120. package/dist/schema/nodes/item.js +21 -0
  121. package/dist/schema/nodes/level.d.ts +1 -1
  122. package/dist/schema/nodes/level.d.ts.map +1 -1
  123. package/dist/schema/nodes/level.js +2 -0
  124. package/dist/schema/nodes/ridge-vent.d.ts +67 -0
  125. package/dist/schema/nodes/ridge-vent.d.ts.map +1 -0
  126. package/dist/schema/nodes/ridge-vent.js +30 -0
  127. package/dist/schema/nodes/roof-segment.d.ts +198 -4
  128. package/dist/schema/nodes/roof-segment.d.ts.map +1 -1
  129. package/dist/schema/nodes/roof-segment.js +254 -3
  130. package/dist/schema/nodes/roof.d.ts +6 -6
  131. package/dist/schema/nodes/roof.d.ts.map +1 -1
  132. package/dist/schema/nodes/roof.js +9 -21
  133. package/dist/schema/nodes/shelf.d.ts +105 -0
  134. package/dist/schema/nodes/shelf.d.ts.map +1 -0
  135. package/dist/schema/nodes/shelf.js +84 -0
  136. package/dist/schema/nodes/site.d.ts +1 -116
  137. package/dist/schema/nodes/site.d.ts.map +1 -1
  138. package/dist/schema/nodes/site.js +2 -6
  139. package/dist/schema/nodes/skylight.d.ts +279 -0
  140. package/dist/schema/nodes/skylight.d.ts.map +1 -0
  141. package/dist/schema/nodes/skylight.js +152 -0
  142. package/dist/schema/nodes/slab.d.ts +3 -1
  143. package/dist/schema/nodes/slab.d.ts.map +1 -1
  144. package/dist/schema/nodes/slab.js +1 -1
  145. package/dist/schema/nodes/solar-panel.d.ts +117 -0
  146. package/dist/schema/nodes/solar-panel.d.ts.map +1 -0
  147. package/dist/schema/nodes/solar-panel.js +47 -0
  148. package/dist/schema/nodes/stair-segment.d.ts +1 -1
  149. package/dist/schema/nodes/stair.d.ts +6 -6
  150. package/dist/schema/nodes/stair.d.ts.map +1 -1
  151. package/dist/schema/nodes/stair.js +9 -7
  152. package/dist/schema/nodes/surface-hole-metadata.d.ts +2 -0
  153. package/dist/schema/nodes/surface-hole-metadata.d.ts.map +1 -1
  154. package/dist/schema/nodes/surface-hole-metadata.js +3 -1
  155. package/dist/schema/nodes/turbine-vent.d.ts +68 -0
  156. package/dist/schema/nodes/turbine-vent.d.ts.map +1 -0
  157. package/dist/schema/nodes/turbine-vent.js +41 -0
  158. package/dist/schema/nodes/wall.d.ts +3 -3
  159. package/dist/schema/nodes/window.d.ts +1 -1
  160. package/dist/schema/types.d.ts +1448 -236
  161. package/dist/schema/types.d.ts.map +1 -1
  162. package/dist/schema/types.js +26 -0
  163. package/dist/services/alignment-anchors.d.ts +100 -0
  164. package/dist/services/alignment-anchors.d.ts.map +1 -0
  165. package/dist/services/alignment-anchors.js +283 -0
  166. package/dist/services/alignment-anchors.test.d.ts +2 -0
  167. package/dist/services/alignment-anchors.test.d.ts.map +1 -0
  168. package/dist/services/alignment-anchors.test.js +383 -0
  169. package/dist/services/alignment.d.ts +126 -0
  170. package/dist/services/alignment.d.ts.map +1 -0
  171. package/dist/services/alignment.js +169 -0
  172. package/dist/services/alignment.test.d.ts +2 -0
  173. package/dist/services/alignment.test.d.ts.map +1 -0
  174. package/dist/services/alignment.test.js +92 -0
  175. package/dist/services/drag-session.d.ts +47 -0
  176. package/dist/services/drag-session.d.ts.map +1 -0
  177. package/dist/services/drag-session.js +100 -0
  178. package/dist/services/drag-session.test.d.ts +2 -0
  179. package/dist/services/drag-session.test.d.ts.map +1 -0
  180. package/dist/services/drag-session.test.js +219 -0
  181. package/dist/services/hosting.d.ts +80 -0
  182. package/dist/services/hosting.d.ts.map +1 -0
  183. package/dist/services/hosting.js +122 -0
  184. package/dist/services/hosting.test.d.ts +2 -0
  185. package/dist/services/hosting.test.d.ts.map +1 -0
  186. package/dist/services/hosting.test.js +199 -0
  187. package/dist/services/index.d.ts +7 -0
  188. package/dist/services/index.d.ts.map +1 -0
  189. package/dist/services/index.js +6 -0
  190. package/dist/services/movement.d.ts +48 -0
  191. package/dist/services/movement.d.ts.map +1 -0
  192. package/dist/services/movement.js +65 -0
  193. package/dist/services/movement.test.d.ts +2 -0
  194. package/dist/services/movement.test.d.ts.map +1 -0
  195. package/dist/services/movement.test.js +133 -0
  196. package/dist/services/single-undo-dance.test.d.ts +2 -0
  197. package/dist/services/single-undo-dance.test.d.ts.map +1 -0
  198. package/dist/services/single-undo-dance.test.js +210 -0
  199. package/dist/services/snap.d.ts +72 -0
  200. package/dist/services/snap.d.ts.map +1 -0
  201. package/dist/services/snap.js +120 -0
  202. package/dist/services/snap.test.d.ts +2 -0
  203. package/dist/services/snap.test.d.ts.map +1 -0
  204. package/dist/services/snap.test.js +95 -0
  205. package/dist/solar-panel-presets.d.ts +17 -0
  206. package/dist/solar-panel-presets.d.ts.map +1 -0
  207. package/dist/solar-panel-presets.js +43 -0
  208. package/dist/store/actions/node-actions.d.ts +14 -2
  209. package/dist/store/actions/node-actions.d.ts.map +1 -1
  210. package/dist/store/actions/node-actions.js +499 -20
  211. package/dist/store/actions/node-mutation-sanitize.test.d.ts +2 -0
  212. package/dist/store/actions/node-mutation-sanitize.test.d.ts.map +1 -0
  213. package/dist/store/actions/node-mutation-sanitize.test.js +147 -0
  214. package/dist/store/actions/reparent.test.d.ts +2 -0
  215. package/dist/store/actions/reparent.test.d.ts.map +1 -0
  216. package/dist/store/actions/reparent.test.js +212 -0
  217. package/dist/store/use-interactive.d.ts +39 -0
  218. package/dist/store/use-interactive.d.ts.map +1 -1
  219. package/dist/store/use-interactive.js +75 -0
  220. package/dist/store/use-live-node-overrides.d.ts +22 -0
  221. package/dist/store/use-live-node-overrides.d.ts.map +1 -0
  222. package/dist/store/use-live-node-overrides.js +59 -0
  223. package/dist/store/use-scene-elevator-migration.test.d.ts +2 -0
  224. package/dist/store/use-scene-elevator-migration.test.d.ts.map +1 -0
  225. package/dist/store/use-scene-elevator-migration.test.js +109 -0
  226. package/dist/store/use-scene.d.ts +11 -0
  227. package/dist/store/use-scene.d.ts.map +1 -1
  228. package/dist/store/use-scene.js +207 -11
  229. package/dist/systems/elevator/elevator-dispatch.d.ts +12 -0
  230. package/dist/systems/elevator/elevator-dispatch.d.ts.map +1 -0
  231. package/dist/systems/elevator/elevator-dispatch.js +57 -0
  232. package/dist/systems/elevator/elevator-geometry.d.ts +15 -0
  233. package/dist/systems/elevator/elevator-geometry.d.ts.map +1 -0
  234. package/dist/systems/elevator/elevator-geometry.js +50 -0
  235. package/dist/systems/elevator/elevator-opening-sync.d.ts +6 -0
  236. package/dist/systems/elevator/elevator-opening-sync.d.ts.map +1 -0
  237. package/dist/systems/elevator/elevator-opening-sync.js +218 -0
  238. package/dist/systems/elevator/elevator-opening-sync.test.d.ts +2 -0
  239. package/dist/systems/elevator/elevator-opening-sync.test.d.ts.map +1 -0
  240. package/dist/systems/elevator/elevator-opening-sync.test.js +146 -0
  241. package/dist/systems/elevator/elevator-opening-system.d.ts +2 -0
  242. package/dist/systems/elevator/elevator-opening-system.d.ts.map +1 -0
  243. package/dist/systems/elevator/elevator-opening-system.js +48 -0
  244. package/dist/systems/elevator/elevator-runtime-system.d.ts +2 -0
  245. package/dist/systems/elevator/elevator-runtime-system.d.ts.map +1 -0
  246. package/dist/systems/elevator/elevator-runtime-system.js +8 -0
  247. package/dist/systems/elevator/elevator-runtime.d.ts +18 -0
  248. package/dist/systems/elevator/elevator-runtime.d.ts.map +1 -0
  249. package/dist/systems/elevator/elevator-runtime.js +225 -0
  250. package/dist/systems/elevator/elevator-runtime.test.d.ts +2 -0
  251. package/dist/systems/elevator/elevator-runtime.test.d.ts.map +1 -0
  252. package/dist/systems/elevator/elevator-runtime.test.js +64 -0
  253. package/dist/systems/elevator/elevator-service.d.ts +19 -0
  254. package/dist/systems/elevator/elevator-service.d.ts.map +1 -0
  255. package/dist/systems/elevator/elevator-service.js +111 -0
  256. package/dist/systems/stair/stair-footprint.d.ts +44 -0
  257. package/dist/systems/stair/stair-footprint.d.ts.map +1 -0
  258. package/dist/systems/stair/stair-footprint.js +168 -0
  259. package/dist/systems/stair/stair-opening-preview.d.ts +1777 -0
  260. package/dist/systems/stair/stair-opening-preview.d.ts.map +1 -0
  261. package/dist/systems/stair/stair-opening-preview.js +93 -0
  262. package/dist/systems/stair/stair-opening-preview.test.d.ts +2 -0
  263. package/dist/systems/stair/stair-opening-preview.test.d.ts.map +1 -0
  264. package/dist/systems/stair/stair-opening-preview.test.js +80 -0
  265. package/dist/systems/stair/stair-opening-sync.d.ts.map +1 -1
  266. package/dist/systems/stair/stair-opening-sync.js +183 -185
  267. package/dist/systems/stair/stair-opening-sync.test.js +385 -4
  268. package/dist/systems/stair/stair-opening-system.d.ts +2 -0
  269. package/dist/systems/stair/stair-opening-system.d.ts.map +1 -0
  270. package/dist/systems/stair/stair-opening-system.js +104 -0
  271. package/dist/systems/wall/wall-curve.d.ts +1 -1
  272. package/dist/systems/wall/wall-curve.d.ts.map +1 -1
  273. package/dist/systems/wall/wall-curve.js +1 -1
  274. package/dist/systems/wall/wall-mitering.d.ts.map +1 -1
  275. package/dist/systems/wall/wall-mitering.js +2 -6
  276. package/dist/systems/wall/wall-move.d.ts +48 -0
  277. package/dist/systems/wall/wall-move.d.ts.map +1 -0
  278. package/dist/systems/wall/wall-move.js +193 -0
  279. package/dist/utils/clone-scene-graph.d.ts +6 -4
  280. package/dist/utils/clone-scene-graph.d.ts.map +1 -1
  281. package/dist/utils/clone-scene-graph.js +6 -4
  282. package/dist/utils/clone-scene-graph.test.d.ts +2 -0
  283. package/dist/utils/clone-scene-graph.test.d.ts.map +1 -0
  284. package/dist/utils/clone-scene-graph.test.js +59 -0
  285. package/dist/validation/validate-build-json.d.ts +43 -0
  286. package/dist/validation/validate-build-json.d.ts.map +1 -0
  287. package/dist/validation/validate-build-json.js +227 -0
  288. package/package.json +11 -3
  289. package/dist/materials.d.ts +0 -10
  290. package/dist/materials.d.ts.map +0 -1
  291. package/dist/materials.js +0 -22
  292. package/dist/systems/ceiling/ceiling-system.d.ts +0 -8
  293. package/dist/systems/ceiling/ceiling-system.d.ts.map +0 -1
  294. package/dist/systems/ceiling/ceiling-system.js +0 -92
  295. package/dist/systems/door/door-system.d.ts +0 -2
  296. package/dist/systems/door/door-system.d.ts.map +0 -1
  297. package/dist/systems/door/door-system.js +0 -195
  298. package/dist/systems/fence/fence-system.d.ts +0 -2
  299. package/dist/systems/fence/fence-system.d.ts.map +0 -1
  300. package/dist/systems/fence/fence-system.js +0 -187
  301. package/dist/systems/item/item-system.d.ts +0 -2
  302. package/dist/systems/item/item-system.d.ts.map +0 -1
  303. package/dist/systems/item/item-system.js +0 -48
  304. package/dist/systems/roof/roof-system.d.ts +0 -16
  305. package/dist/systems/roof/roof-system.d.ts.map +0 -1
  306. package/dist/systems/roof/roof-system.js +0 -797
  307. package/dist/systems/slab/slab-system.d.ts +0 -8
  308. package/dist/systems/slab/slab-system.d.ts.map +0 -1
  309. package/dist/systems/slab/slab-system.js +0 -214
  310. package/dist/systems/stair/stair-system.d.ts +0 -2
  311. package/dist/systems/stair/stair-system.d.ts.map +0 -1
  312. package/dist/systems/stair/stair-system.js +0 -776
  313. package/dist/systems/wall/wall-system.d.ts +0 -12
  314. package/dist/systems/wall/wall-system.d.ts.map +0 -1
  315. package/dist/systems/wall/wall-system.js +0 -455
  316. package/dist/systems/window/window-system.d.ts +0 -2
  317. package/dist/systems/window/window-system.d.ts.map +0 -1
  318. package/dist/systems/window/window-system.js +0 -131
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skylight.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/skylight.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,eAAO,MAAM,oBAAoB;;;EAA6B,CAAA;AAC9D,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA;AAEvE,eAAO,MAAM,mBAAmB,+DAAgE,CAAA;AAEhG,eAAO,MAAM,YAAY;;;;;;EAA8B,CAAA;AACvD,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAA;AAE/D,eAAO,MAAM,mBAAmB;;;;;EAA6C,CAAA;AAC7E,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAErE,eAAO,MAAM,sBAAsB;;;EAAqB,CAAA;AACxD,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAA;AAE3E,MAAM,MAAM,kBAAkB,GAAG;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,cAAc,EAAE,MAAM,CAAA;IACtB,UAAU,EAAE,MAAM,CAAA;IAClB,cAAc,EAAE,MAAM,CAAA;IACtB,IAAI,EAAE,OAAO,CAAA;IACb,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,MAAM,CAAA;IACrB,eAAe,EAAE,MAAM,CAAA;IACvB,YAAY,EAAE,MAAM,CAAA;IACpB,WAAW,EAAE,mBAAmB,CAAA;IAChC,cAAc,EAAE,MAAM,CAAA;IACtB,YAAY,EAAE,OAAO,CAAA;IACrB,aAAa,EAAE,MAAM,CAAA;IACrB,cAAc,EAAE,sBAAsB,CAAA;IACtC,UAAU,EAAE,MAAM,CAAA;IAClB,gBAAgB,EAAE,MAAM,CAAA;CACzB,CAAA;AAED,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0G2B,CAAA;AAI7D,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA8CxB,CAAA;AAED,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAA"}
@@ -0,0 +1,152 @@
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 SkylightMaterialRole = z.enum(['frame', 'glass']);
6
+ export const SKYLIGHT_TYPE_ORDER = ['flat', 'walk-on', 'lantern', 'opening', 'sliding'];
7
+ export const SkylightType = z.enum(SKYLIGHT_TYPE_ORDER);
8
+ export const SkylightOpeningSide = z.enum(['top', 'bottom', 'left', 'right']);
9
+ export const SkylightSlideDirection = z.enum(['x', 'z']);
10
+ export const SKYLIGHT_TYPE_PRESETS = {
11
+ flat: {
12
+ label: 'Flat roof skylight',
13
+ width: 0.9,
14
+ height: 1.2,
15
+ frameThickness: 0.055,
16
+ frameDepth: 0.08,
17
+ glassThickness: 0.012,
18
+ curb: true,
19
+ curbHeight: 0.08,
20
+ cutoutOffset: 0,
21
+ lanternHeight: 0.25,
22
+ lanternTopScale: 0,
23
+ openingAngle: 0,
24
+ openingSide: 'top',
25
+ operationState: 0,
26
+ motorHousing: false,
27
+ slideFraction: 0,
28
+ slideDirection: 'z',
29
+ trackWidth: 0.04,
30
+ motorHousingSize: 0.08,
31
+ },
32
+ 'walk-on': {
33
+ label: 'Walk-on rooflight',
34
+ width: 1.2,
35
+ height: 1.8,
36
+ frameThickness: 0.035,
37
+ frameDepth: 0.045,
38
+ glassThickness: 0.04,
39
+ curb: false,
40
+ curbHeight: 0,
41
+ cutoutOffset: 0,
42
+ lanternHeight: 0.25,
43
+ lanternTopScale: 0,
44
+ openingAngle: 0,
45
+ openingSide: 'top',
46
+ operationState: 0,
47
+ motorHousing: false,
48
+ slideFraction: 0,
49
+ slideDirection: 'z',
50
+ trackWidth: 0.04,
51
+ motorHousingSize: 0.08,
52
+ },
53
+ lantern: {
54
+ label: 'Roof lantern',
55
+ width: 1.4,
56
+ height: 1.4,
57
+ frameThickness: 0.06,
58
+ frameDepth: 0.08,
59
+ glassThickness: 0.012,
60
+ curb: true,
61
+ curbHeight: 0.16,
62
+ cutoutOffset: 0,
63
+ lanternHeight: 0.45,
64
+ lanternTopScale: 0,
65
+ openingAngle: 0,
66
+ openingSide: 'top',
67
+ operationState: 0,
68
+ motorHousing: false,
69
+ slideFraction: 0,
70
+ slideDirection: 'z',
71
+ trackWidth: 0.04,
72
+ motorHousingSize: 0.08,
73
+ },
74
+ opening: {
75
+ label: 'Opening skylight',
76
+ width: 0.9,
77
+ height: 1.2,
78
+ frameThickness: 0.06,
79
+ frameDepth: 0.035,
80
+ glassThickness: 0.014,
81
+ curb: true,
82
+ curbHeight: 0.1,
83
+ cutoutOffset: 0,
84
+ lanternHeight: 0.25,
85
+ lanternTopScale: 0,
86
+ openingAngle: Math.PI / 8,
87
+ openingSide: 'top',
88
+ operationState: 1,
89
+ motorHousing: false,
90
+ slideFraction: 0,
91
+ slideDirection: 'z',
92
+ trackWidth: 0.04,
93
+ motorHousingSize: 0.08,
94
+ },
95
+ sliding: {
96
+ label: 'Sliding skylight',
97
+ width: 1.4,
98
+ height: 1.1,
99
+ frameThickness: 0.055,
100
+ frameDepth: 0.08,
101
+ glassThickness: 0.012,
102
+ curb: true,
103
+ curbHeight: 0.08,
104
+ cutoutOffset: 0,
105
+ lanternHeight: 0.25,
106
+ lanternTopScale: 0,
107
+ openingAngle: 0,
108
+ openingSide: 'top',
109
+ operationState: 0.35,
110
+ motorHousing: false,
111
+ slideFraction: 0.35,
112
+ slideDirection: 'x',
113
+ trackWidth: 0.045,
114
+ motorHousingSize: 0.08,
115
+ },
116
+ };
117
+ const DEFAULT = SKYLIGHT_TYPE_PRESETS.flat;
118
+ export const SkylightNode = BaseNode.extend({
119
+ id: objectId('skylight'),
120
+ type: nodeType('skylight'),
121
+ material: MaterialSchema.optional(),
122
+ materialPreset: z.string().optional(),
123
+ glassMaterial: MaterialSchema.optional(),
124
+ glassMaterialPreset: z.string().optional(),
125
+ roofSegmentId: z.string().optional(),
126
+ position: z.tuple([z.number(), z.number(), z.number()]).default([0, 0, 0]),
127
+ rotation: z.number().default(0),
128
+ width: z.number().default(DEFAULT.width),
129
+ height: z.number().default(DEFAULT.height),
130
+ frameThickness: z.number().default(DEFAULT.frameThickness),
131
+ frameDepth: z.number().default(DEFAULT.frameDepth),
132
+ skylightType: SkylightType.default('flat'),
133
+ glassThickness: z.number().default(DEFAULT.glassThickness),
134
+ lanternHeight: z.number().default(DEFAULT.lanternHeight),
135
+ lanternTopScale: z.number().default(DEFAULT.lanternTopScale),
136
+ openingAngle: z.number().default(DEFAULT.openingAngle),
137
+ openingSide: SkylightOpeningSide.default(DEFAULT.openingSide),
138
+ operationState: z.number().min(0).max(1).default(DEFAULT.operationState),
139
+ motorHousing: z.boolean().default(DEFAULT.motorHousing),
140
+ slideFraction: z.number().min(0).max(1).default(DEFAULT.slideFraction),
141
+ slideDirection: SkylightSlideDirection.default(DEFAULT.slideDirection),
142
+ trackWidth: z.number().default(DEFAULT.trackWidth),
143
+ motorHousingSize: z.number().default(DEFAULT.motorHousingSize),
144
+ curb: z.boolean().default(DEFAULT.curb),
145
+ curbHeight: z.number().default(DEFAULT.curbHeight),
146
+ cutoutOffset: z.number().default(DEFAULT.cutoutOffset),
147
+ surfaceNormal: z.tuple([z.number(), z.number(), z.number()]).optional(),
148
+ }).describe(dedent `
149
+ Skylight — a framed glass opening hosted on a roof segment. Five
150
+ type variants drive different geometry (flat / walk-on / lantern /
151
+ opening / sliding) and animation states.
152
+ `);
@@ -20,6 +20,7 @@ export declare const SlabNode: z.ZodObject<{
20
20
  material: z.ZodOptional<z.ZodObject<{
21
21
  id: z.ZodOptional<z.ZodString>;
22
22
  preset: z.ZodOptional<z.ZodEnum<{
23
+ custom: "custom";
23
24
  white: "white";
24
25
  brick: "brick";
25
26
  concrete: "concrete";
@@ -29,7 +30,6 @@ export declare const SlabNode: z.ZodObject<{
29
30
  plaster: "plaster";
30
31
  tile: "tile";
31
32
  marble: "marble";
32
- custom: "custom";
33
33
  }>>;
34
34
  properties: z.ZodOptional<z.ZodObject<{
35
35
  color: z.ZodDefault<z.ZodString>;
@@ -55,9 +55,11 @@ export declare const SlabNode: z.ZodObject<{
55
55
  holeMetadata: z.ZodDefault<z.ZodArray<z.ZodObject<{
56
56
  source: z.ZodDefault<z.ZodEnum<{
57
57
  stair: "stair";
58
+ elevator: "elevator";
58
59
  manual: "manual";
59
60
  }>>;
60
61
  stairId: z.ZodOptional<z.ZodString>;
62
+ elevatorId: z.ZodOptional<z.ZodString>;
61
63
  }, z.core.$strip>>>;
62
64
  elevation: z.ZodDefault<z.ZodNumber>;
63
65
  autoFromWalls: z.ZodDefault<z.ZodBoolean>;
@@ -1 +1 @@
1
- {"version":3,"file":"slab.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/slab.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAKvB,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAmBpB,CAAA;AAED,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,QAAQ,CAAC,CAAA"}
1
+ {"version":3,"file":"slab.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/slab.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAKvB,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAmBpB,CAAA;AAED,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,QAAQ,CAAC,CAAA"}
@@ -17,7 +17,7 @@ export const SlabNode = BaseNode.extend({
17
17
  Slab node - used to represent a slab/floor in the building
18
18
  - polygon: array of [x, z] points defining the slab boundary
19
19
  - holes: array of [x, z] polygons representing cutouts in the slab
20
- - holeMetadata: metadata parallel to holes, used to preserve manual and stair-managed cutouts
20
+ - holeMetadata: metadata parallel to holes, used to preserve manual and auto-managed cutouts
21
21
  - elevation: elevation in meters
22
22
  - autoFromWalls: whether the slab is automatically generated from a closed wall loop
23
23
  `);
@@ -0,0 +1,117 @@
1
+ import { z } from 'zod';
2
+ export declare const SolarPanelMaterialRole: z.ZodEnum<{
3
+ panel: "panel";
4
+ frame: "frame";
5
+ }>;
6
+ export type SolarPanelMaterialRole = z.infer<typeof SolarPanelMaterialRole>;
7
+ export declare const SolarPanelNode: z.ZodObject<{
8
+ object: z.ZodDefault<z.ZodLiteral<"node">>;
9
+ name: z.ZodOptional<z.ZodString>;
10
+ parentId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
11
+ visible: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
12
+ camera: z.ZodOptional<z.ZodObject<{
13
+ position: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
14
+ target: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
15
+ mode: z.ZodDefault<z.ZodEnum<{
16
+ perspective: "perspective";
17
+ orthographic: "orthographic";
18
+ }>>;
19
+ fov: z.ZodOptional<z.ZodNumber>;
20
+ zoom: z.ZodOptional<z.ZodNumber>;
21
+ }, z.core.$strip>>;
22
+ metadata: z.ZodDefault<z.ZodOptional<z.ZodJSONSchema>>;
23
+ id: z.ZodDefault<z.ZodTemplateLiteral<`solarpanel_${string}`>>;
24
+ type: z.ZodDefault<z.ZodLiteral<"solar-panel">>;
25
+ material: z.ZodOptional<z.ZodObject<{
26
+ id: z.ZodOptional<z.ZodString>;
27
+ preset: z.ZodOptional<z.ZodEnum<{
28
+ custom: "custom";
29
+ white: "white";
30
+ brick: "brick";
31
+ concrete: "concrete";
32
+ wood: "wood";
33
+ glass: "glass";
34
+ metal: "metal";
35
+ plaster: "plaster";
36
+ tile: "tile";
37
+ marble: "marble";
38
+ }>>;
39
+ properties: z.ZodOptional<z.ZodObject<{
40
+ color: z.ZodDefault<z.ZodString>;
41
+ roughness: z.ZodDefault<z.ZodNumber>;
42
+ metalness: z.ZodDefault<z.ZodNumber>;
43
+ opacity: z.ZodDefault<z.ZodNumber>;
44
+ transparent: z.ZodDefault<z.ZodBoolean>;
45
+ side: z.ZodDefault<z.ZodEnum<{
46
+ front: "front";
47
+ back: "back";
48
+ double: "double";
49
+ }>>;
50
+ }, z.core.$strip>>;
51
+ texture: z.ZodOptional<z.ZodObject<{
52
+ url: z.ZodString;
53
+ repeat: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>;
54
+ scale: z.ZodOptional<z.ZodNumber>;
55
+ }, z.core.$strip>>;
56
+ }, z.core.$strip>>;
57
+ materialPreset: z.ZodOptional<z.ZodString>;
58
+ panelMaterial: z.ZodOptional<z.ZodObject<{
59
+ id: z.ZodOptional<z.ZodString>;
60
+ preset: z.ZodOptional<z.ZodEnum<{
61
+ custom: "custom";
62
+ white: "white";
63
+ brick: "brick";
64
+ concrete: "concrete";
65
+ wood: "wood";
66
+ glass: "glass";
67
+ metal: "metal";
68
+ plaster: "plaster";
69
+ tile: "tile";
70
+ marble: "marble";
71
+ }>>;
72
+ properties: z.ZodOptional<z.ZodObject<{
73
+ color: z.ZodDefault<z.ZodString>;
74
+ roughness: z.ZodDefault<z.ZodNumber>;
75
+ metalness: z.ZodDefault<z.ZodNumber>;
76
+ opacity: z.ZodDefault<z.ZodNumber>;
77
+ transparent: z.ZodDefault<z.ZodBoolean>;
78
+ side: z.ZodDefault<z.ZodEnum<{
79
+ front: "front";
80
+ back: "back";
81
+ double: "double";
82
+ }>>;
83
+ }, z.core.$strip>>;
84
+ texture: z.ZodOptional<z.ZodObject<{
85
+ url: z.ZodString;
86
+ repeat: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>;
87
+ scale: z.ZodOptional<z.ZodNumber>;
88
+ }, z.core.$strip>>;
89
+ }, z.core.$strip>>;
90
+ panelMaterialPreset: z.ZodOptional<z.ZodString>;
91
+ panelTypePreset: z.ZodOptional<z.ZodEnum<{
92
+ residential: "residential";
93
+ "residential-large": "residential-large";
94
+ compact: "compact";
95
+ frameless: "frameless";
96
+ }>>;
97
+ roofSegmentId: z.ZodOptional<z.ZodString>;
98
+ position: z.ZodDefault<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
99
+ rotation: z.ZodDefault<z.ZodNumber>;
100
+ rows: z.ZodDefault<z.ZodNumber>;
101
+ columns: z.ZodDefault<z.ZodNumber>;
102
+ panelWidth: z.ZodDefault<z.ZodNumber>;
103
+ panelHeight: z.ZodDefault<z.ZodNumber>;
104
+ gapX: z.ZodDefault<z.ZodNumber>;
105
+ gapY: z.ZodDefault<z.ZodNumber>;
106
+ mountingType: z.ZodDefault<z.ZodEnum<{
107
+ flush: "flush";
108
+ tilted: "tilted";
109
+ }>>;
110
+ tiltAngle: z.ZodDefault<z.ZodNumber>;
111
+ standoffHeight: z.ZodDefault<z.ZodNumber>;
112
+ frameThickness: z.ZodDefault<z.ZodNumber>;
113
+ frameDepth: z.ZodDefault<z.ZodNumber>;
114
+ surfaceNormal: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
115
+ }, z.core.$strip>;
116
+ export type SolarPanelNode = z.infer<typeof SolarPanelNode>;
117
+ //# sourceMappingURL=solar-panel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solar-panel.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/solar-panel.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAKvB,eAAO,MAAM,sBAAsB;;;EAA6B,CAAA;AAChE,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAA;AAE3E,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAmD1B,CAAA;AAED,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAA"}
@@ -0,0 +1,47 @@
1
+ import dedent from 'dedent';
2
+ import { z } from 'zod';
3
+ import { SolarPanelPresetKey } from '../../solar-panel-presets';
4
+ import { BaseNode, nodeType, objectId } from '../base';
5
+ import { MaterialSchema } from '../material';
6
+ export const SolarPanelMaterialRole = z.enum(['frame', 'panel']);
7
+ export const SolarPanelNode = BaseNode.extend({
8
+ id: objectId('solarpanel'),
9
+ type: nodeType('solar-panel'),
10
+ // Frame / rail material — aluminum mounting rails.
11
+ material: MaterialSchema.optional(),
12
+ materialPreset: z.string().optional(),
13
+ // Panel surface material — dark photovoltaic glass.
14
+ panelMaterial: MaterialSchema.optional(),
15
+ panelMaterialPreset: z.string().optional(),
16
+ // Visual preset that drove panelWidth / panelHeight / frameThickness /
17
+ // frameDepth. Cleared whenever any of those four is edited manually.
18
+ panelTypePreset: SolarPanelPresetKey.optional(),
19
+ roofSegmentId: z.string().optional(),
20
+ position: z.tuple([z.number(), z.number(), z.number()]).default([0, 0, 0]),
21
+ rotation: z.number().default(0),
22
+ // Grid layout.
23
+ rows: z.number().int().min(1).max(20).default(2),
24
+ columns: z.number().int().min(1).max(20).default(3),
25
+ // Individual panel dimensions (meters). Defaults match the 'residential' preset.
26
+ panelWidth: z.number().default(1.0),
27
+ panelHeight: z.number().default(1.65),
28
+ // Gaps between panels.
29
+ gapX: z.number().default(0.02),
30
+ gapY: z.number().default(0.02),
31
+ // Mounting type — flush (flat on the slope) or tilted (angled up).
32
+ mountingType: z.enum(['flush', 'tilted']).default('flush'),
33
+ tiltAngle: z.number().default(15),
34
+ standoffHeight: z.number().default(0.05),
35
+ // Frame.
36
+ frameThickness: z.number().default(0.04),
37
+ frameDepth: z.number().default(0.04),
38
+ // Surface normal at placement point (segment-local). Captured from a
39
+ // raycast on the shingle surface during placement / move. Falls back
40
+ // to the analytical normal in the renderer if absent.
41
+ surfaceNormal: z.tuple([z.number(), z.number(), z.number()]).optional(),
42
+ }).describe(dedent `
43
+ Solar panel array — a grid of photovoltaic panels mounted on a roof
44
+ segment. Position is segment-local (x along width, z along depth);
45
+ the Y component is captured from the raycast hit on the shingle
46
+ surface, with an analytical fallback in the renderer when it's 0.
47
+ `);
@@ -31,6 +31,7 @@ export declare const StairSegmentNode: z.ZodObject<{
31
31
  material: z.ZodOptional<z.ZodObject<{
32
32
  id: z.ZodOptional<z.ZodString>;
33
33
  preset: z.ZodOptional<z.ZodEnum<{
34
+ custom: "custom";
34
35
  white: "white";
35
36
  brick: "brick";
36
37
  concrete: "concrete";
@@ -40,7 +41,6 @@ export declare const StairSegmentNode: z.ZodObject<{
40
41
  plaster: "plaster";
41
42
  tile: "tile";
42
43
  marble: "marble";
43
- custom: "custom";
44
44
  }>>;
45
45
  properties: z.ZodOptional<z.ZodObject<{
46
46
  color: z.ZodDefault<z.ZodString>;
@@ -1,5 +1,5 @@
1
1
  import { z } from 'zod';
2
- import { type MaterialSchema } from '../material';
2
+ import type { MaterialSchema as MaterialSchemaType } from '../material';
3
3
  export declare const StairRailingMode: z.ZodEnum<{
4
4
  none: "none";
5
5
  left: "left";
@@ -25,7 +25,7 @@ export type StairTopLandingMode = z.infer<typeof StairTopLandingMode>;
25
25
  export type StairSlabOpeningMode = z.infer<typeof StairSlabOpeningMode>;
26
26
  export type StairSurfaceMaterialRole = 'railing' | 'tread' | 'side';
27
27
  export type StairSurfaceMaterialSpec = {
28
- material?: MaterialSchema;
28
+ material?: MaterialSchemaType;
29
29
  materialPreset?: string;
30
30
  };
31
31
  export declare const StairNode: z.ZodObject<{
@@ -49,6 +49,7 @@ export declare const StairNode: z.ZodObject<{
49
49
  material: z.ZodOptional<z.ZodObject<{
50
50
  id: z.ZodOptional<z.ZodString>;
51
51
  preset: z.ZodOptional<z.ZodEnum<{
52
+ custom: "custom";
52
53
  white: "white";
53
54
  brick: "brick";
54
55
  concrete: "concrete";
@@ -58,7 +59,6 @@ export declare const StairNode: z.ZodObject<{
58
59
  plaster: "plaster";
59
60
  tile: "tile";
60
61
  marble: "marble";
61
- custom: "custom";
62
62
  }>>;
63
63
  properties: z.ZodOptional<z.ZodObject<{
64
64
  color: z.ZodDefault<z.ZodString>;
@@ -82,6 +82,7 @@ export declare const StairNode: z.ZodObject<{
82
82
  railingMaterial: z.ZodOptional<z.ZodObject<{
83
83
  id: z.ZodOptional<z.ZodString>;
84
84
  preset: z.ZodOptional<z.ZodEnum<{
85
+ custom: "custom";
85
86
  white: "white";
86
87
  brick: "brick";
87
88
  concrete: "concrete";
@@ -91,7 +92,6 @@ export declare const StairNode: z.ZodObject<{
91
92
  plaster: "plaster";
92
93
  tile: "tile";
93
94
  marble: "marble";
94
- custom: "custom";
95
95
  }>>;
96
96
  properties: z.ZodOptional<z.ZodObject<{
97
97
  color: z.ZodDefault<z.ZodString>;
@@ -115,6 +115,7 @@ export declare const StairNode: z.ZodObject<{
115
115
  treadMaterial: z.ZodOptional<z.ZodObject<{
116
116
  id: z.ZodOptional<z.ZodString>;
117
117
  preset: z.ZodOptional<z.ZodEnum<{
118
+ custom: "custom";
118
119
  white: "white";
119
120
  brick: "brick";
120
121
  concrete: "concrete";
@@ -124,7 +125,6 @@ export declare const StairNode: z.ZodObject<{
124
125
  plaster: "plaster";
125
126
  tile: "tile";
126
127
  marble: "marble";
127
- custom: "custom";
128
128
  }>>;
129
129
  properties: z.ZodOptional<z.ZodObject<{
130
130
  color: z.ZodDefault<z.ZodString>;
@@ -148,6 +148,7 @@ export declare const StairNode: z.ZodObject<{
148
148
  sideMaterial: z.ZodOptional<z.ZodObject<{
149
149
  id: z.ZodOptional<z.ZodString>;
150
150
  preset: z.ZodOptional<z.ZodEnum<{
151
+ custom: "custom";
151
152
  white: "white";
152
153
  brick: "brick";
153
154
  concrete: "concrete";
@@ -157,7 +158,6 @@ export declare const StairNode: z.ZodObject<{
157
158
  plaster: "plaster";
158
159
  tile: "tile";
159
160
  marble: "marble";
160
- custom: "custom";
161
161
  }>>;
162
162
  properties: z.ZodOptional<z.ZodObject<{
163
163
  color: z.ZodDefault<z.ZodString>;
@@ -1 +1 @@
1
- {"version":3,"file":"stair.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/stair.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,OAAO,EAAE,KAAK,cAAc,EAA0C,MAAM,aAAa,CAAA;AAGzF,eAAO,MAAM,gBAAgB;;;;;EAA4C,CAAA;AACzE,eAAO,MAAM,SAAS;;;;EAA2C,CAAA;AACjE,eAAO,MAAM,mBAAmB;;;EAAiC,CAAA;AACjE,eAAO,MAAM,oBAAoB;;;EAAkC,CAAA;AAEnE,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAA;AAC/D,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAA;AACjD,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AACrE,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA;AACvE,MAAM,MAAM,wBAAwB,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,CAAA;AACnE,MAAM,MAAM,wBAAwB,GAAG;IACrC,QAAQ,CAAC,EAAE,cAAc,CAAA;IACzB,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB,CAAA;AAED,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA4DrB,CAAA;AAED,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAA;AASjD,wBAAgB,gCAAgC,CAC9C,IAAI,EAAE,SAAS,EACf,IAAI,EAAE,wBAAwB,GAC7B,wBAAwB,CA2D1B"}
1
+ {"version":3,"file":"stair.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/stair.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,OAAO,KAAK,EAAE,cAAc,IAAI,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAIvE,eAAO,MAAM,gBAAgB;;;;;EAA4C,CAAA;AACzE,eAAO,MAAM,SAAS;;;;EAA2C,CAAA;AACjE,eAAO,MAAM,mBAAmB;;;EAAiC,CAAA;AACjE,eAAO,MAAM,oBAAoB;;;EAAkC,CAAA;AAEnE,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAA;AAC/D,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAA;AACjD,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AACrE,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA;AACvE,MAAM,MAAM,wBAAwB,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,CAAA;AACnE,MAAM,MAAM,wBAAwB,GAAG;IACrC,QAAQ,CAAC,EAAE,kBAAkB,CAAA;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB,CAAA;AAED,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA4DrB,CAAA;AAED,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAA;AASjD,wBAAgB,gCAAgC,CAC9C,IAAI,EAAE,SAAS,EACf,IAAI,EAAE,wBAAwB,GAC7B,wBAAwB,CAmE1B"}
@@ -1,7 +1,7 @@
1
1
  import dedent from 'dedent';
2
2
  import { z } from 'zod';
3
3
  import { BaseNode, nodeType, objectId } from '../base';
4
- import { MaterialSchema as MaterialSchemaSchema } from '../material';
4
+ import { MaterialSchema } from '../material';
5
5
  import { StairSegmentNode } from './stair-segment';
6
6
  export const StairRailingMode = z.enum(['none', 'left', 'right', 'both']);
7
7
  export const StairType = z.enum(['straight', 'curved', 'spiral']);
@@ -10,13 +10,13 @@ export const StairSlabOpeningMode = z.enum(['none', 'destination']);
10
10
  export const StairNode = BaseNode.extend({
11
11
  id: objectId('stair'),
12
12
  type: nodeType('stair'),
13
- material: MaterialSchemaSchema.optional(),
13
+ material: MaterialSchema.optional(),
14
14
  materialPreset: z.string().optional(),
15
- railingMaterial: MaterialSchemaSchema.optional(),
15
+ railingMaterial: MaterialSchema.optional(),
16
16
  railingMaterialPreset: z.string().optional(),
17
- treadMaterial: MaterialSchemaSchema.optional(),
17
+ treadMaterial: MaterialSchema.optional(),
18
18
  treadMaterialPreset: z.string().optional(),
19
- sideMaterial: MaterialSchemaSchema.optional(),
19
+ sideMaterial: MaterialSchema.optional(),
20
20
  sideMaterialPreset: z.string().optional(),
21
21
  position: z.tuple([z.number(), z.number(), z.number()]).default([0, 0, 0]),
22
22
  // Rotation around Y axis in radians
@@ -105,10 +105,12 @@ export function getEffectiveStairSurfaceMaterial(node, role) {
105
105
  material: node.sideMaterial,
106
106
  materialPreset: typeof node.sideMaterialPreset === 'string' ? node.sideMaterialPreset : undefined,
107
107
  };
108
- if (role === 'tread' && (sideFallback.material !== undefined || sideFallback.materialPreset !== undefined)) {
108
+ if (role === 'tread' &&
109
+ (sideFallback.material !== undefined || sideFallback.materialPreset !== undefined)) {
109
110
  return sideFallback;
110
111
  }
111
- if (role === 'side' && (treadFallback.material !== undefined || treadFallback.materialPreset !== undefined)) {
112
+ if (role === 'side' &&
113
+ (treadFallback.material !== undefined || treadFallback.materialPreset !== undefined)) {
112
114
  return treadFallback;
113
115
  }
114
116
  if (role === 'railing') {
@@ -2,9 +2,11 @@ import { z } from 'zod';
2
2
  export declare const SurfaceHoleMetadata: z.ZodObject<{
3
3
  source: z.ZodDefault<z.ZodEnum<{
4
4
  stair: "stair";
5
+ elevator: "elevator";
5
6
  manual: "manual";
6
7
  }>>;
7
8
  stairId: z.ZodOptional<z.ZodString>;
9
+ elevatorId: z.ZodOptional<z.ZodString>;
8
10
  }, z.core.$strip>;
9
11
  export type SurfaceHoleMetadata = z.infer<typeof SurfaceHoleMetadata>;
10
12
  //# sourceMappingURL=surface-hole-metadata.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"surface-hole-metadata.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/surface-hole-metadata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,eAAO,MAAM,mBAAmB;;;;;;iBAG9B,CAAA;AAEF,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA"}
1
+ {"version":3,"file":"surface-hole-metadata.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/surface-hole-metadata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,eAAO,MAAM,mBAAmB;;;;;;;;iBAK9B,CAAA;AAEF,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA"}
@@ -1,5 +1,7 @@
1
1
  import { z } from 'zod';
2
2
  export const SurfaceHoleMetadata = z.object({
3
- source: z.enum(['manual', 'stair']).default('manual'),
3
+ // Stair/elevator auto-openings use stairId/elevatorId so sync can replace only its own holes.
4
+ source: z.enum(['manual', 'stair', 'elevator']).default('manual'),
4
5
  stairId: z.string().optional(),
6
+ elevatorId: z.string().optional(),
5
7
  });
@@ -0,0 +1,68 @@
1
+ import { z } from 'zod';
2
+ export declare const TurbineVentNode: 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<`tvent_${string}`>>;
19
+ type: z.ZodDefault<z.ZodLiteral<"turbine-vent">>;
20
+ material: z.ZodOptional<z.ZodObject<{
21
+ id: z.ZodOptional<z.ZodString>;
22
+ preset: z.ZodOptional<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
+ diameter: z.ZodDefault<z.ZodNumber>;
57
+ height: z.ZodDefault<z.ZodNumber>;
58
+ neckHeight: z.ZodDefault<z.ZodNumber>;
59
+ baseOverhang: z.ZodDefault<z.ZodNumber>;
60
+ vaneCount: z.ZodDefault<z.ZodNumber>;
61
+ spinSpeed: z.ZodDefault<z.ZodNumber>;
62
+ style: z.ZodDefault<z.ZodEnum<{
63
+ globe: "globe";
64
+ cylinder: "cylinder";
65
+ }>>;
66
+ }, z.core.$strip>;
67
+ export type TurbineVentNode = z.infer<typeof TurbineVentNode>;
68
+ //# sourceMappingURL=turbine-vent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"turbine-vent.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/turbine-vent.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA0C3B,CAAA;AAED,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAA"}
@@ -0,0 +1,41 @@
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 TurbineVentNode = BaseNode.extend({
6
+ id: objectId('tvent'),
7
+ type: nodeType('turbine-vent'),
8
+ material: MaterialSchema.optional(),
9
+ // Default to the white preset so a freshly-placed turbine reads as
10
+ // clean painted/galvanised metal and the paint inspector shows "White"
11
+ // as the current selection (matches box-vent's reasoning).
12
+ materialPreset: z.string().default('preset-white'),
13
+ roofSegmentId: z.string().optional(),
14
+ position: z.tuple([z.number(), z.number(), z.number()]).default([0, 0, 0]),
15
+ rotation: z.number().default(0),
16
+ // Overall diameter of the spinning head at its widest point.
17
+ diameter: z.number().default(0.32),
18
+ // Total height from the flange base to the top knob.
19
+ height: z.number().default(0.42),
20
+ // Height of the throat cylinder between the flange and the head. The
21
+ // head occupies the remaining `height - neckHeight`.
22
+ neckHeight: z.number().default(0.09),
23
+ // How far the flange flashing flares past the throat on every side.
24
+ baseOverhang: z.number().default(0.05),
25
+ // Number of curved vanes around the head. More vanes read denser /
26
+ // finer; fewer read as a chunkier industrial turbine.
27
+ vaneCount: z.number().int().default(20),
28
+ // Idle spin speed in radians/second. 0 = static (the head holds still),
29
+ // which is the default — a newly-placed turbine starts paused and is set
30
+ // spinning via the panel's Play toggle or the Spin Speed slider. Driven by
31
+ // the renderer's `useFrame`, not stored per-frame.
32
+ spinSpeed: z.number().default(0),
33
+ // `globe` → classic spherical whirlybird (bulged barrel + domed top)
34
+ // `cylinder`→ straight-barrel turbine with a flat disc top
35
+ style: z.enum(['globe', 'cylinder']).default('globe'),
36
+ }).describe(dedent `
37
+ Turbine vent (whirlybird) — a wind-driven spinning exhaust vent that
38
+ sits on a roof slope. A finned head spins on a throat above a flange.
39
+ Parented to a roof-segment; position is segment-local. Rotation is
40
+ around the segment's vertical axis (post-slope tilt).
41
+ `);