@pascal-app/core 0.9.1 → 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 (321) hide show
  1. package/dist/events/bus.d.ts +30 -2
  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 +8 -1
  7. package/dist/hooks/scene-registry/scene-registry.d.ts.map +1 -1
  8. package/dist/hooks/scene-registry/scene-registry.js +27 -1
  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.test.js +93 -0
  13. package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts +69 -12
  14. package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts.map +1 -1
  15. package/dist/hooks/spatial-grid/spatial-grid-manager.js +476 -195
  16. package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts.map +1 -1
  17. package/dist/hooks/spatial-grid/spatial-grid-sync.js +19 -1
  18. package/dist/hooks/spatial-grid/wall-slab-overlap.test.d.ts +2 -0
  19. package/dist/hooks/spatial-grid/wall-slab-overlap.test.d.ts.map +1 -0
  20. package/dist/hooks/spatial-grid/wall-slab-overlap.test.js +363 -0
  21. package/dist/index.d.ts +16 -6
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +15 -5
  24. package/dist/lib/level-name.d.ts +4 -0
  25. package/dist/lib/level-name.d.ts.map +1 -0
  26. package/dist/lib/level-name.js +10 -0
  27. package/dist/lib/measurement-geometry.d.ts +19 -0
  28. package/dist/lib/measurement-geometry.d.ts.map +1 -0
  29. package/dist/lib/measurement-geometry.js +232 -0
  30. package/dist/lib/measurement-geometry.test.d.ts +2 -0
  31. package/dist/lib/measurement-geometry.test.d.ts.map +1 -0
  32. package/dist/lib/measurement-geometry.test.js +102 -0
  33. package/dist/lib/polygon-geometry.d.ts +0 -1
  34. package/dist/lib/polygon-geometry.d.ts.map +1 -1
  35. package/dist/lib/polygon-geometry.js +0 -18
  36. package/dist/lib/selection-proxy.d.ts +4 -0
  37. package/dist/lib/selection-proxy.d.ts.map +1 -0
  38. package/dist/lib/selection-proxy.js +12 -0
  39. package/dist/lib/slab-polygon.d.ts +31 -2
  40. package/dist/lib/slab-polygon.d.ts.map +1 -1
  41. package/dist/lib/slab-polygon.js +525 -31
  42. package/dist/lib/slab-polygon.test.d.ts +2 -0
  43. package/dist/lib/slab-polygon.test.d.ts.map +1 -0
  44. package/dist/lib/slab-polygon.test.js +635 -0
  45. package/dist/lib/slots.d.ts +14 -0
  46. package/dist/lib/slots.d.ts.map +1 -0
  47. package/dist/lib/slots.js +26 -0
  48. package/dist/lib/space-detection.d.ts +25 -2
  49. package/dist/lib/space-detection.d.ts.map +1 -1
  50. package/dist/lib/space-detection.js +414 -118
  51. package/dist/lib/space-detection.test.js +301 -2
  52. package/dist/lib/wall-distance.d.ts +60 -0
  53. package/dist/lib/wall-distance.d.ts.map +1 -0
  54. package/dist/lib/wall-distance.js +85 -0
  55. package/dist/lib/zone-quantities.d.ts +21 -0
  56. package/dist/lib/zone-quantities.d.ts.map +1 -0
  57. package/dist/lib/zone-quantities.js +183 -0
  58. package/dist/lib/zone-quantities.test.d.ts +2 -0
  59. package/dist/lib/zone-quantities.test.d.ts.map +1 -0
  60. package/dist/lib/zone-quantities.test.js +82 -0
  61. package/dist/material-library.d.ts +20 -1
  62. package/dist/material-library.d.ts.map +1 -1
  63. package/dist/material-library.js +2181 -441
  64. package/dist/registry/handles.d.ts +75 -2
  65. package/dist/registry/handles.d.ts.map +1 -1
  66. package/dist/registry/index.d.ts +3 -3
  67. package/dist/registry/index.d.ts.map +1 -1
  68. package/dist/registry/index.js +1 -1
  69. package/dist/registry/registry.d.ts +46 -3
  70. package/dist/registry/registry.d.ts.map +1 -1
  71. package/dist/registry/registry.js +82 -1
  72. package/dist/registry/registry.test.js +14 -1
  73. package/dist/registry/subtree.d.ts.map +1 -1
  74. package/dist/registry/subtree.js +4 -0
  75. package/dist/registry/subtree.test.js +30 -0
  76. package/dist/registry/types.d.ts +717 -38
  77. package/dist/registry/types.d.ts.map +1 -1
  78. package/dist/schema/index.d.ts +21 -5
  79. package/dist/schema/index.d.ts.map +1 -1
  80. package/dist/schema/index.js +17 -3
  81. package/dist/schema/material.d.ts +3 -2
  82. package/dist/schema/material.d.ts.map +1 -1
  83. package/dist/schema/material.js +7 -5
  84. package/dist/schema/material.test.d.ts +2 -0
  85. package/dist/schema/material.test.d.ts.map +1 -0
  86. package/dist/schema/material.test.js +43 -0
  87. package/dist/schema/nodes/box-vent.d.ts +2 -2
  88. package/dist/schema/nodes/cabinet.d.ts +534 -0
  89. package/dist/schema/nodes/cabinet.d.ts.map +1 -0
  90. package/dist/schema/nodes/cabinet.js +137 -0
  91. package/dist/schema/nodes/ceiling.d.ts +3 -2
  92. package/dist/schema/nodes/ceiling.d.ts.map +1 -1
  93. package/dist/schema/nodes/ceiling.js +4 -0
  94. package/dist/schema/nodes/chimney.d.ts +4 -4
  95. package/dist/schema/nodes/column.d.ts +3 -2
  96. package/dist/schema/nodes/column.d.ts.map +1 -1
  97. package/dist/schema/nodes/column.js +3 -0
  98. package/dist/schema/nodes/cupola.d.ts +2 -2
  99. package/dist/schema/nodes/door.d.ts +13 -5
  100. package/dist/schema/nodes/door.d.ts.map +1 -1
  101. package/dist/schema/nodes/door.js +12 -0
  102. package/dist/schema/nodes/dormer.d.ts +8 -8
  103. package/dist/schema/nodes/dormer.js +1 -1
  104. package/dist/schema/nodes/downspout.d.ts +2 -2
  105. package/dist/schema/nodes/duct-fitting.d.ts +91 -0
  106. package/dist/schema/nodes/duct-fitting.d.ts.map +1 -0
  107. package/dist/schema/nodes/duct-fitting.js +92 -0
  108. package/dist/schema/nodes/duct-segment.d.ts +61 -0
  109. package/dist/schema/nodes/duct-segment.d.ts.map +1 -0
  110. package/dist/schema/nodes/duct-segment.js +73 -0
  111. package/dist/schema/nodes/duct-terminal.d.ts +57 -0
  112. package/dist/schema/nodes/duct-terminal.d.ts.map +1 -0
  113. package/dist/schema/nodes/duct-terminal.js +51 -0
  114. package/dist/schema/nodes/elevator.d.ts +3 -2
  115. package/dist/schema/nodes/elevator.d.ts.map +1 -1
  116. package/dist/schema/nodes/elevator.js +3 -0
  117. package/dist/schema/nodes/eyebrow-vent.d.ts +2 -2
  118. package/dist/schema/nodes/fence.d.ts +18 -2
  119. package/dist/schema/nodes/fence.d.ts.map +1 -1
  120. package/dist/schema/nodes/fence.js +25 -2
  121. package/dist/schema/nodes/gutter.d.ts +2 -2
  122. package/dist/schema/nodes/hvac-equipment.d.ts +63 -0
  123. package/dist/schema/nodes/hvac-equipment.d.ts.map +1 -0
  124. package/dist/schema/nodes/hvac-equipment.js +55 -0
  125. package/dist/schema/nodes/item.d.ts +8 -0
  126. package/dist/schema/nodes/item.d.ts.map +1 -1
  127. package/dist/schema/nodes/item.js +11 -0
  128. package/dist/schema/nodes/level.d.ts +1 -1
  129. package/dist/schema/nodes/level.d.ts.map +1 -1
  130. package/dist/schema/nodes/level.js +2 -0
  131. package/dist/schema/nodes/lineset.d.ts +42 -0
  132. package/dist/schema/nodes/lineset.d.ts.map +1 -0
  133. package/dist/schema/nodes/lineset.js +38 -0
  134. package/dist/schema/nodes/liquid-line.d.ts +34 -0
  135. package/dist/schema/nodes/liquid-line.d.ts.map +1 -0
  136. package/dist/schema/nodes/liquid-line.js +24 -0
  137. package/dist/schema/nodes/measurement.d.ts +306 -0
  138. package/dist/schema/nodes/measurement.d.ts.map +1 -0
  139. package/dist/schema/nodes/measurement.js +87 -0
  140. package/dist/schema/nodes/measurement.test.d.ts +2 -0
  141. package/dist/schema/nodes/measurement.test.d.ts.map +1 -0
  142. package/dist/schema/nodes/measurement.test.js +139 -0
  143. package/dist/schema/nodes/pipe-fitting.d.ts +56 -0
  144. package/dist/schema/nodes/pipe-fitting.d.ts.map +1 -0
  145. package/dist/schema/nodes/pipe-fitting.js +45 -0
  146. package/dist/schema/nodes/pipe-segment.d.ts +48 -0
  147. package/dist/schema/nodes/pipe-segment.d.ts.map +1 -0
  148. package/dist/schema/nodes/pipe-segment.js +36 -0
  149. package/dist/schema/nodes/pipe-trap.d.ts +43 -0
  150. package/dist/schema/nodes/pipe-trap.d.ts.map +1 -0
  151. package/dist/schema/nodes/pipe-trap.js +36 -0
  152. package/dist/schema/nodes/ridge-vent-defaults.test.d.ts +2 -0
  153. package/dist/schema/nodes/ridge-vent-defaults.test.d.ts.map +1 -0
  154. package/dist/schema/nodes/ridge-vent-defaults.test.js +205 -0
  155. package/dist/schema/nodes/ridge-vent.d.ts +18 -3
  156. package/dist/schema/nodes/ridge-vent.d.ts.map +1 -1
  157. package/dist/schema/nodes/ridge-vent.js +221 -3
  158. package/dist/schema/nodes/roof-segment-shape.d.ts +90 -0
  159. package/dist/schema/nodes/roof-segment-shape.d.ts.map +1 -0
  160. package/dist/schema/nodes/roof-segment-shape.js +318 -0
  161. package/dist/schema/nodes/roof-segment-shape.test.d.ts +2 -0
  162. package/dist/schema/nodes/roof-segment-shape.test.d.ts.map +1 -0
  163. package/dist/schema/nodes/roof-segment-shape.test.js +175 -0
  164. package/dist/schema/nodes/roof-segment-surface.test.d.ts +2 -0
  165. package/dist/schema/nodes/roof-segment-surface.test.d.ts.map +1 -0
  166. package/dist/schema/nodes/roof-segment-surface.test.js +48 -0
  167. package/dist/schema/nodes/roof-segment-trim.test.d.ts +2 -0
  168. package/dist/schema/nodes/roof-segment-trim.test.d.ts.map +1 -0
  169. package/dist/schema/nodes/roof-segment-trim.test.js +107 -0
  170. package/dist/schema/nodes/roof-segment-walls.d.ts +101 -0
  171. package/dist/schema/nodes/roof-segment-walls.d.ts.map +1 -0
  172. package/dist/schema/nodes/roof-segment-walls.js +330 -0
  173. package/dist/schema/nodes/roof-segment-walls.test.d.ts +2 -0
  174. package/dist/schema/nodes/roof-segment-walls.test.d.ts.map +1 -0
  175. package/dist/schema/nodes/roof-segment-walls.test.js +92 -0
  176. package/dist/schema/nodes/roof-segment.d.ts +84 -8
  177. package/dist/schema/nodes/roof-segment.d.ts.map +1 -1
  178. package/dist/schema/nodes/roof-segment.js +290 -5
  179. package/dist/schema/nodes/roof.d.ts +8 -8
  180. package/dist/schema/nodes/shelf.d.ts +3 -2
  181. package/dist/schema/nodes/shelf.d.ts.map +1 -1
  182. package/dist/schema/nodes/shelf.js +6 -0
  183. package/dist/schema/nodes/skylight.d.ts +10 -10
  184. package/dist/schema/nodes/slab.d.ts +3 -2
  185. package/dist/schema/nodes/slab.d.ts.map +1 -1
  186. package/dist/schema/nodes/slab.js +4 -0
  187. package/dist/schema/nodes/solar-panel.d.ts +4 -4
  188. package/dist/schema/nodes/stair-segment.d.ts +4 -4
  189. package/dist/schema/nodes/stair.d.ts +13 -12
  190. package/dist/schema/nodes/stair.d.ts.map +1 -1
  191. package/dist/schema/nodes/stair.js +3 -0
  192. package/dist/schema/nodes/turbine-vent.d.ts +2 -2
  193. package/dist/schema/nodes/wall.d.ts +245 -6
  194. package/dist/schema/nodes/wall.d.ts.map +1 -1
  195. package/dist/schema/nodes/wall.js +257 -0
  196. package/dist/schema/nodes/wall.test.d.ts +2 -0
  197. package/dist/schema/nodes/wall.test.d.ts.map +1 -0
  198. package/dist/schema/nodes/wall.test.js +208 -0
  199. package/dist/schema/nodes/window.d.ts +11 -3
  200. package/dist/schema/nodes/window.d.ts.map +1 -1
  201. package/dist/schema/nodes/window.js +12 -0
  202. package/dist/schema/nodes/zone.d.ts +2 -0
  203. package/dist/schema/nodes/zone.d.ts.map +1 -1
  204. package/dist/schema/nodes/zone.js +6 -0
  205. package/dist/schema/scene-material.d.ts +41 -0
  206. package/dist/schema/scene-material.d.ts.map +1 -0
  207. package/dist/schema/scene-material.js +9 -0
  208. package/dist/schema/types.d.ts +1089 -94
  209. package/dist/schema/types.d.ts.map +1 -1
  210. package/dist/schema/types.js +23 -0
  211. package/dist/services/alignment-anchors.d.ts.map +1 -1
  212. package/dist/services/alignment-anchors.js +30 -1
  213. package/dist/services/alignment.d.ts +5 -0
  214. package/dist/services/alignment.d.ts.map +1 -1
  215. package/dist/services/alignment.js +2 -0
  216. package/dist/services/hosting.d.ts +8 -0
  217. package/dist/services/hosting.d.ts.map +1 -1
  218. package/dist/services/hosting.js +13 -4
  219. package/dist/services/hosting.test.js +32 -1
  220. package/dist/services/index.d.ts +8 -2
  221. package/dist/services/index.d.ts.map +1 -1
  222. package/dist/services/index.js +8 -2
  223. package/dist/services/level-height.d.ts +28 -0
  224. package/dist/services/level-height.d.ts.map +1 -0
  225. package/dist/services/level-height.js +62 -0
  226. package/dist/services/opening-guides.d.ts +141 -0
  227. package/dist/services/opening-guides.d.ts.map +1 -0
  228. package/dist/services/opening-guides.js +267 -0
  229. package/dist/services/opening-guides.test.d.ts +2 -0
  230. package/dist/services/opening-guides.test.d.ts.map +1 -0
  231. package/dist/services/opening-guides.test.js +208 -0
  232. package/dist/services/port-connectivity.d.ts +115 -0
  233. package/dist/services/port-connectivity.d.ts.map +1 -0
  234. package/dist/services/port-connectivity.js +300 -0
  235. package/dist/services/port-connectivity.test.d.ts +2 -0
  236. package/dist/services/port-connectivity.test.d.ts.map +1 -0
  237. package/dist/services/port-connectivity.test.js +297 -0
  238. package/dist/services/riser-diagram.d.ts +40 -0
  239. package/dist/services/riser-diagram.d.ts.map +1 -0
  240. package/dist/services/riser-diagram.js +110 -0
  241. package/dist/services/riser-diagram.test.d.ts +2 -0
  242. package/dist/services/riser-diagram.test.d.ts.map +1 -0
  243. package/dist/services/riser-diagram.test.js +66 -0
  244. package/dist/services/snap.d.ts +9 -1
  245. package/dist/services/snap.d.ts.map +1 -1
  246. package/dist/services/snap.js +21 -1
  247. package/dist/services/snap.test.js +43 -1
  248. package/dist/services/system-graph.d.ts +30 -0
  249. package/dist/services/system-graph.d.ts.map +1 -0
  250. package/dist/services/system-graph.js +164 -0
  251. package/dist/services/system-graph.test.d.ts +2 -0
  252. package/dist/services/system-graph.test.d.ts.map +1 -0
  253. package/dist/services/system-graph.test.js +138 -0
  254. package/dist/services/validate-dwv.d.ts +32 -0
  255. package/dist/services/validate-dwv.d.ts.map +1 -0
  256. package/dist/services/validate-dwv.js +118 -0
  257. package/dist/services/validate-dwv.test.d.ts +2 -0
  258. package/dist/services/validate-dwv.test.d.ts.map +1 -0
  259. package/dist/services/validate-dwv.test.js +109 -0
  260. package/dist/store/actions/node-actions.d.ts.map +1 -1
  261. package/dist/store/actions/node-actions.js +94 -1
  262. package/dist/store/actions/ridge-vent-update.test.d.ts +2 -0
  263. package/dist/store/actions/ridge-vent-update.test.d.ts.map +1 -0
  264. package/dist/store/actions/ridge-vent-update.test.js +264 -0
  265. package/dist/store/history-control.d.ts +11 -0
  266. package/dist/store/history-control.d.ts.map +1 -1
  267. package/dist/store/history-control.js +33 -0
  268. package/dist/store/use-scene-dirty-tracking.test.d.ts +2 -0
  269. package/dist/store/use-scene-dirty-tracking.test.d.ts.map +1 -0
  270. package/dist/store/use-scene-dirty-tracking.test.js +68 -0
  271. package/dist/store/use-scene-measurement-roundtrip.test.d.ts +2 -0
  272. package/dist/store/use-scene-measurement-roundtrip.test.d.ts.map +1 -0
  273. package/dist/store/use-scene-measurement-roundtrip.test.js +97 -0
  274. package/dist/store/use-scene-plugins.test.d.ts +2 -0
  275. package/dist/store/use-scene-plugins.test.d.ts.map +1 -0
  276. package/dist/store/use-scene-plugins.test.js +51 -0
  277. package/dist/store/use-scene-wall-slot-migration.test.d.ts +2 -0
  278. package/dist/store/use-scene-wall-slot-migration.test.d.ts.map +1 -0
  279. package/dist/store/use-scene-wall-slot-migration.test.js +210 -0
  280. package/dist/store/use-scene-window-migration.test.d.ts +2 -0
  281. package/dist/store/use-scene-window-migration.test.d.ts.map +1 -0
  282. package/dist/store/use-scene-window-migration.test.js +85 -0
  283. package/dist/store/use-scene.d.ts +17 -2
  284. package/dist/store/use-scene.d.ts.map +1 -1
  285. package/dist/store/use-scene.js +358 -51
  286. package/dist/systems/elevator/elevator-service.js +1 -1
  287. package/dist/systems/fence/fence-centerline.d.ts +12 -0
  288. package/dist/systems/fence/fence-centerline.d.ts.map +1 -0
  289. package/dist/systems/fence/fence-centerline.js +37 -0
  290. package/dist/systems/fence/fence-spline.d.ts +39 -0
  291. package/dist/systems/fence/fence-spline.d.ts.map +1 -0
  292. package/dist/systems/fence/fence-spline.js +196 -0
  293. package/dist/systems/fence/fence-spline.test.d.ts +2 -0
  294. package/dist/systems/fence/fence-spline.test.d.ts.map +1 -0
  295. package/dist/systems/fence/fence-spline.test.js +136 -0
  296. package/dist/systems/stair/stair-footprint.d.ts.map +1 -1
  297. package/dist/systems/stair/stair-footprint.js +21 -11
  298. package/dist/systems/stair/stair-opening-preview.d.ts +1139 -469
  299. package/dist/systems/stair/stair-opening-preview.d.ts.map +1 -1
  300. package/dist/systems/stair/stair-opening-sync.d.ts.map +1 -1
  301. package/dist/systems/stair/stair-opening-sync.js +1 -18
  302. package/dist/systems/stair/stair-opening-sync.test.js +39 -0
  303. package/dist/systems/wall/wall-mitering.d.ts.map +1 -1
  304. package/dist/systems/wall/wall-mitering.js +38 -2
  305. package/dist/systems/wall/wall-mitering.test.d.ts +2 -0
  306. package/dist/systems/wall/wall-mitering.test.d.ts.map +1 -0
  307. package/dist/systems/wall/wall-mitering.test.js +63 -0
  308. package/dist/utils/clone-scene-graph.d.ts +1 -0
  309. package/dist/utils/clone-scene-graph.d.ts.map +1 -1
  310. package/dist/utils/clone-scene-graph.js +23 -3
  311. package/dist/utils/clone-scene-graph.test.js +3 -0
  312. package/dist/utils/heal-scene-graph.d.ts +18 -0
  313. package/dist/utils/heal-scene-graph.d.ts.map +1 -0
  314. package/dist/utils/heal-scene-graph.js +90 -0
  315. package/dist/utils/heal-scene-graph.test.d.ts +2 -0
  316. package/dist/utils/heal-scene-graph.test.d.ts.map +1 -0
  317. package/dist/utils/heal-scene-graph.test.js +88 -0
  318. package/dist/validation/validate-build-json.d.ts +1 -0
  319. package/dist/validation/validate-build-json.d.ts.map +1 -1
  320. package/dist/validation/validate-build-json.js +31 -2
  321. package/package.json +3 -3
@@ -81,4 +81,10 @@ export const ShelfNode = BaseNode.extend({
81
81
  // unchanged once `'shelf'` is added to `MaterialTarget`.
82
82
  material: MaterialSchema.optional(),
83
83
  materialPreset: z.string().optional(),
84
+ // Per-slot material overrides, mirroring `ItemNode.slots`. Key = slot id
85
+ // (`shelves` / `frame` / `back`, see `shelfSlots`), value = a `MaterialRef`
86
+ // string (`library:<id>` or `scene:<id>`). Absent slot = fall back to the
87
+ // legacy whole-shelf `material` / `materialPreset`, then the registry slot
88
+ // default. A dangling ref renders the default (never blocks).
89
+ slots: z.record(z.string(), z.string()).optional(),
84
90
  });
@@ -14,15 +14,15 @@ export declare const SkylightType: z.ZodEnum<{
14
14
  }>;
15
15
  export type SkylightType = (typeof SKYLIGHT_TYPE_ORDER)[number];
16
16
  export declare const SkylightOpeningSide: z.ZodEnum<{
17
+ right: "right";
18
+ left: "left";
17
19
  top: "top";
18
20
  bottom: "bottom";
19
- left: "left";
20
- right: "right";
21
21
  }>;
22
22
  export type SkylightOpeningSide = z.infer<typeof SkylightOpeningSide>;
23
23
  export declare const SkylightSlideDirection: z.ZodEnum<{
24
- x: "x";
25
24
  z: "z";
25
+ x: "x";
26
26
  }>;
27
27
  export type SkylightSlideDirection = z.infer<typeof SkylightSlideDirection>;
28
28
  export type SkylightTypePreset = {
@@ -173,7 +173,7 @@ export declare const SkylightNode: z.ZodObject<{
173
173
  type: z.ZodDefault<z.ZodLiteral<"skylight">>;
174
174
  material: z.ZodOptional<z.ZodObject<{
175
175
  id: z.ZodOptional<z.ZodString>;
176
- preset: z.ZodOptional<z.ZodEnum<{
176
+ preset: z.ZodOptional<z.ZodCatch<z.ZodEnum<{
177
177
  custom: "custom";
178
178
  white: "white";
179
179
  brick: "brick";
@@ -184,7 +184,7 @@ export declare const SkylightNode: z.ZodObject<{
184
184
  plaster: "plaster";
185
185
  tile: "tile";
186
186
  marble: "marble";
187
- }>>;
187
+ }>>>;
188
188
  properties: z.ZodOptional<z.ZodObject<{
189
189
  color: z.ZodDefault<z.ZodString>;
190
190
  roughness: z.ZodDefault<z.ZodNumber>;
@@ -206,7 +206,7 @@ export declare const SkylightNode: z.ZodObject<{
206
206
  materialPreset: z.ZodOptional<z.ZodString>;
207
207
  glassMaterial: z.ZodOptional<z.ZodObject<{
208
208
  id: z.ZodOptional<z.ZodString>;
209
- preset: z.ZodOptional<z.ZodEnum<{
209
+ preset: z.ZodOptional<z.ZodCatch<z.ZodEnum<{
210
210
  custom: "custom";
211
211
  white: "white";
212
212
  brick: "brick";
@@ -217,7 +217,7 @@ export declare const SkylightNode: z.ZodObject<{
217
217
  plaster: "plaster";
218
218
  tile: "tile";
219
219
  marble: "marble";
220
- }>>;
220
+ }>>>;
221
221
  properties: z.ZodOptional<z.ZodObject<{
222
222
  color: z.ZodDefault<z.ZodString>;
223
223
  roughness: z.ZodDefault<z.ZodNumber>;
@@ -256,17 +256,17 @@ export declare const SkylightNode: z.ZodObject<{
256
256
  lanternTopScale: z.ZodDefault<z.ZodNumber>;
257
257
  openingAngle: z.ZodDefault<z.ZodNumber>;
258
258
  openingSide: z.ZodDefault<z.ZodEnum<{
259
+ right: "right";
260
+ left: "left";
259
261
  top: "top";
260
262
  bottom: "bottom";
261
- left: "left";
262
- right: "right";
263
263
  }>>;
264
264
  operationState: z.ZodDefault<z.ZodNumber>;
265
265
  motorHousing: z.ZodDefault<z.ZodBoolean>;
266
266
  slideFraction: z.ZodDefault<z.ZodNumber>;
267
267
  slideDirection: z.ZodDefault<z.ZodEnum<{
268
- x: "x";
269
268
  z: "z";
269
+ x: "x";
270
270
  }>>;
271
271
  trackWidth: z.ZodDefault<z.ZodNumber>;
272
272
  motorHousingSize: z.ZodDefault<z.ZodNumber>;
@@ -19,7 +19,7 @@ export declare const SlabNode: z.ZodObject<{
19
19
  type: z.ZodDefault<z.ZodLiteral<"slab">>;
20
20
  material: z.ZodOptional<z.ZodObject<{
21
21
  id: z.ZodOptional<z.ZodString>;
22
- preset: z.ZodOptional<z.ZodEnum<{
22
+ preset: z.ZodOptional<z.ZodCatch<z.ZodEnum<{
23
23
  custom: "custom";
24
24
  white: "white";
25
25
  brick: "brick";
@@ -30,7 +30,7 @@ export declare const SlabNode: z.ZodObject<{
30
30
  plaster: "plaster";
31
31
  tile: "tile";
32
32
  marble: "marble";
33
- }>>;
33
+ }>>>;
34
34
  properties: z.ZodOptional<z.ZodObject<{
35
35
  color: z.ZodDefault<z.ZodString>;
36
36
  roughness: z.ZodDefault<z.ZodNumber>;
@@ -50,6 +50,7 @@ export declare const SlabNode: z.ZodObject<{
50
50
  }, z.core.$strip>>;
51
51
  }, z.core.$strip>>;
52
52
  materialPreset: z.ZodOptional<z.ZodString>;
53
+ slots: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
53
54
  polygon: z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>;
54
55
  holes: z.ZodDefault<z.ZodArray<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>>>;
55
56
  holeMetadata: z.ZodDefault<z.ZodArray<z.ZodObject<{
@@ -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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAuBpB,CAAA;AAED,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,QAAQ,CAAC,CAAA"}
@@ -8,6 +8,10 @@ export const SlabNode = BaseNode.extend({
8
8
  type: nodeType('slab'),
9
9
  material: MaterialSchema.optional(),
10
10
  materialPreset: z.string().optional(),
11
+ // Per-slot material overrides on the unified slot model, mirroring
12
+ // `ShelfNode.slots`. Key = slot id (`surface`), value = a `MaterialRef`
13
+ // (`library:<id>` / `scene:<id>`). Absent = the declared slot default.
14
+ slots: z.record(z.string(), z.string()).optional(),
11
15
  polygon: z.array(z.tuple([z.number(), z.number()])),
12
16
  holes: z.array(z.array(z.tuple([z.number(), z.number()]))).default([]),
13
17
  holeMetadata: z.array(SurfaceHoleMetadata).default([]),
@@ -24,7 +24,7 @@ export declare const SolarPanelNode: z.ZodObject<{
24
24
  type: z.ZodDefault<z.ZodLiteral<"solar-panel">>;
25
25
  material: z.ZodOptional<z.ZodObject<{
26
26
  id: z.ZodOptional<z.ZodString>;
27
- preset: z.ZodOptional<z.ZodEnum<{
27
+ preset: z.ZodOptional<z.ZodCatch<z.ZodEnum<{
28
28
  custom: "custom";
29
29
  white: "white";
30
30
  brick: "brick";
@@ -35,7 +35,7 @@ export declare const SolarPanelNode: z.ZodObject<{
35
35
  plaster: "plaster";
36
36
  tile: "tile";
37
37
  marble: "marble";
38
- }>>;
38
+ }>>>;
39
39
  properties: z.ZodOptional<z.ZodObject<{
40
40
  color: z.ZodDefault<z.ZodString>;
41
41
  roughness: z.ZodDefault<z.ZodNumber>;
@@ -57,7 +57,7 @@ export declare const SolarPanelNode: z.ZodObject<{
57
57
  materialPreset: z.ZodOptional<z.ZodString>;
58
58
  panelMaterial: z.ZodOptional<z.ZodObject<{
59
59
  id: z.ZodOptional<z.ZodString>;
60
- preset: z.ZodOptional<z.ZodEnum<{
60
+ preset: z.ZodOptional<z.ZodCatch<z.ZodEnum<{
61
61
  custom: "custom";
62
62
  white: "white";
63
63
  brick: "brick";
@@ -68,7 +68,7 @@ export declare const SolarPanelNode: z.ZodObject<{
68
68
  plaster: "plaster";
69
69
  tile: "tile";
70
70
  marble: "marble";
71
- }>>;
71
+ }>>>;
72
72
  properties: z.ZodOptional<z.ZodObject<{
73
73
  color: z.ZodDefault<z.ZodString>;
74
74
  roughness: z.ZodDefault<z.ZodNumber>;
@@ -6,8 +6,8 @@ export declare const StairSegmentType: z.ZodEnum<{
6
6
  export type StairSegmentType = z.infer<typeof StairSegmentType>;
7
7
  export declare const AttachmentSide: z.ZodEnum<{
8
8
  front: "front";
9
- left: "left";
10
9
  right: "right";
10
+ left: "left";
11
11
  }>;
12
12
  export type AttachmentSide = z.infer<typeof AttachmentSide>;
13
13
  export declare const StairSegmentNode: z.ZodObject<{
@@ -30,7 +30,7 @@ export declare const StairSegmentNode: z.ZodObject<{
30
30
  type: z.ZodDefault<z.ZodLiteral<"stair-segment">>;
31
31
  material: z.ZodOptional<z.ZodObject<{
32
32
  id: z.ZodOptional<z.ZodString>;
33
- preset: z.ZodOptional<z.ZodEnum<{
33
+ preset: z.ZodOptional<z.ZodCatch<z.ZodEnum<{
34
34
  custom: "custom";
35
35
  white: "white";
36
36
  brick: "brick";
@@ -41,7 +41,7 @@ export declare const StairSegmentNode: z.ZodObject<{
41
41
  plaster: "plaster";
42
42
  tile: "tile";
43
43
  marble: "marble";
44
- }>>;
44
+ }>>>;
45
45
  properties: z.ZodOptional<z.ZodObject<{
46
46
  color: z.ZodDefault<z.ZodString>;
47
47
  roughness: z.ZodDefault<z.ZodNumber>;
@@ -73,8 +73,8 @@ export declare const StairSegmentNode: z.ZodObject<{
73
73
  stepCount: z.ZodDefault<z.ZodNumber>;
74
74
  attachmentSide: z.ZodDefault<z.ZodEnum<{
75
75
  front: "front";
76
- left: "left";
77
76
  right: "right";
77
+ left: "left";
78
78
  }>>;
79
79
  fillToFloor: z.ZodDefault<z.ZodBoolean>;
80
80
  thickness: z.ZodDefault<z.ZodNumber>;
@@ -1,9 +1,9 @@
1
1
  import { z } from 'zod';
2
2
  import type { MaterialSchema as MaterialSchemaType } from '../material';
3
3
  export declare const StairRailingMode: z.ZodEnum<{
4
- none: "none";
5
- left: "left";
6
4
  right: "right";
5
+ left: "left";
6
+ none: "none";
7
7
  both: "both";
8
8
  }>;
9
9
  export declare const StairType: z.ZodEnum<{
@@ -48,7 +48,7 @@ export declare const StairNode: z.ZodObject<{
48
48
  type: z.ZodDefault<z.ZodLiteral<"stair">>;
49
49
  material: z.ZodOptional<z.ZodObject<{
50
50
  id: z.ZodOptional<z.ZodString>;
51
- preset: z.ZodOptional<z.ZodEnum<{
51
+ preset: z.ZodOptional<z.ZodCatch<z.ZodEnum<{
52
52
  custom: "custom";
53
53
  white: "white";
54
54
  brick: "brick";
@@ -59,7 +59,7 @@ export declare const StairNode: z.ZodObject<{
59
59
  plaster: "plaster";
60
60
  tile: "tile";
61
61
  marble: "marble";
62
- }>>;
62
+ }>>>;
63
63
  properties: z.ZodOptional<z.ZodObject<{
64
64
  color: z.ZodDefault<z.ZodString>;
65
65
  roughness: z.ZodDefault<z.ZodNumber>;
@@ -81,7 +81,7 @@ export declare const StairNode: z.ZodObject<{
81
81
  materialPreset: z.ZodOptional<z.ZodString>;
82
82
  railingMaterial: z.ZodOptional<z.ZodObject<{
83
83
  id: z.ZodOptional<z.ZodString>;
84
- preset: z.ZodOptional<z.ZodEnum<{
84
+ preset: z.ZodOptional<z.ZodCatch<z.ZodEnum<{
85
85
  custom: "custom";
86
86
  white: "white";
87
87
  brick: "brick";
@@ -92,7 +92,7 @@ export declare const StairNode: z.ZodObject<{
92
92
  plaster: "plaster";
93
93
  tile: "tile";
94
94
  marble: "marble";
95
- }>>;
95
+ }>>>;
96
96
  properties: z.ZodOptional<z.ZodObject<{
97
97
  color: z.ZodDefault<z.ZodString>;
98
98
  roughness: z.ZodDefault<z.ZodNumber>;
@@ -114,7 +114,7 @@ export declare const StairNode: z.ZodObject<{
114
114
  railingMaterialPreset: z.ZodOptional<z.ZodString>;
115
115
  treadMaterial: z.ZodOptional<z.ZodObject<{
116
116
  id: z.ZodOptional<z.ZodString>;
117
- preset: z.ZodOptional<z.ZodEnum<{
117
+ preset: z.ZodOptional<z.ZodCatch<z.ZodEnum<{
118
118
  custom: "custom";
119
119
  white: "white";
120
120
  brick: "brick";
@@ -125,7 +125,7 @@ export declare const StairNode: z.ZodObject<{
125
125
  plaster: "plaster";
126
126
  tile: "tile";
127
127
  marble: "marble";
128
- }>>;
128
+ }>>>;
129
129
  properties: z.ZodOptional<z.ZodObject<{
130
130
  color: z.ZodDefault<z.ZodString>;
131
131
  roughness: z.ZodDefault<z.ZodNumber>;
@@ -147,7 +147,7 @@ export declare const StairNode: z.ZodObject<{
147
147
  treadMaterialPreset: z.ZodOptional<z.ZodString>;
148
148
  sideMaterial: z.ZodOptional<z.ZodObject<{
149
149
  id: z.ZodOptional<z.ZodString>;
150
- preset: z.ZodOptional<z.ZodEnum<{
150
+ preset: z.ZodOptional<z.ZodCatch<z.ZodEnum<{
151
151
  custom: "custom";
152
152
  white: "white";
153
153
  brick: "brick";
@@ -158,7 +158,7 @@ export declare const StairNode: z.ZodObject<{
158
158
  plaster: "plaster";
159
159
  tile: "tile";
160
160
  marble: "marble";
161
- }>>;
161
+ }>>>;
162
162
  properties: z.ZodOptional<z.ZodObject<{
163
163
  color: z.ZodDefault<z.ZodString>;
164
164
  roughness: z.ZodDefault<z.ZodNumber>;
@@ -178,6 +178,7 @@ export declare const StairNode: z.ZodObject<{
178
178
  }, z.core.$strip>>;
179
179
  }, z.core.$strip>>;
180
180
  sideMaterialPreset: z.ZodOptional<z.ZodString>;
181
+ slots: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
181
182
  position: z.ZodDefault<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
182
183
  rotation: z.ZodDefault<z.ZodNumber>;
183
184
  stairType: z.ZodDefault<z.ZodEnum<{
@@ -207,9 +208,9 @@ export declare const StairNode: z.ZodObject<{
207
208
  showCenterColumn: z.ZodDefault<z.ZodBoolean>;
208
209
  showStepSupports: z.ZodDefault<z.ZodBoolean>;
209
210
  railingMode: z.ZodDefault<z.ZodEnum<{
210
- none: "none";
211
- left: "left";
212
211
  right: "right";
212
+ left: "left";
213
+ none: "none";
213
214
  both: "both";
214
215
  }>>;
215
216
  railingHeight: z.ZodDefault<z.ZodNumber>;
@@ -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,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
+ {"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA+DrB,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"}
@@ -18,6 +18,9 @@ export const StairNode = BaseNode.extend({
18
18
  treadMaterialPreset: z.string().optional(),
19
19
  sideMaterial: MaterialSchema.optional(),
20
20
  sideMaterialPreset: z.string().optional(),
21
+ // Unified paint-slot refs (`scene:`/`library:` MaterialRef per slot id),
22
+ // matching the slot model items/slab/shelf use. Absent = declared default.
23
+ slots: z.record(z.string(), z.string()).optional(),
21
24
  position: z.tuple([z.number(), z.number(), z.number()]).default([0, 0, 0]),
22
25
  // Rotation around Y axis in radians
23
26
  rotation: z.number().default(0),
@@ -19,7 +19,7 @@ export declare const TurbineVentNode: z.ZodObject<{
19
19
  type: z.ZodDefault<z.ZodLiteral<"turbine-vent">>;
20
20
  material: z.ZodOptional<z.ZodObject<{
21
21
  id: z.ZodOptional<z.ZodString>;
22
- preset: z.ZodOptional<z.ZodEnum<{
22
+ preset: z.ZodOptional<z.ZodCatch<z.ZodEnum<{
23
23
  custom: "custom";
24
24
  white: "white";
25
25
  brick: "brick";
@@ -30,7 +30,7 @@ export declare const TurbineVentNode: z.ZodObject<{
30
30
  plaster: "plaster";
31
31
  tile: "tile";
32
32
  marble: "marble";
33
- }>>;
33
+ }>>>;
34
34
  properties: z.ZodOptional<z.ZodObject<{
35
35
  color: z.ZodDefault<z.ZodString>;
36
36
  roughness: z.ZodDefault<z.ZodNumber>;
@@ -1,5 +1,128 @@
1
1
  import { z } from 'zod';
2
2
  import { MaterialSchema } from '../material';
3
+ export declare const WallTreatmentSide: z.ZodEnum<{
4
+ interior: "interior";
5
+ exterior: "exterior";
6
+ both: "both";
7
+ }>;
8
+ export type WallTreatmentSide = z.infer<typeof WallTreatmentSide>;
9
+ export declare const WallTrimProfile: z.ZodEnum<{
10
+ flat: "flat";
11
+ bevel: "bevel";
12
+ triangle: "triangle";
13
+ cove: "cove";
14
+ bullnose: "bullnose";
15
+ "base-modern": "base-modern";
16
+ "base-colonial": "base-colonial";
17
+ "base-shoe": "base-shoe";
18
+ "base-ogee": "base-ogee";
19
+ "crown-cove": "crown-cove";
20
+ "crown-ogee": "crown-ogee";
21
+ "crown-craftsman": "crown-craftsman";
22
+ "crown-layered": "crown-layered";
23
+ "rail-rounded": "rail-rounded";
24
+ "rail-ogee": "rail-ogee";
25
+ "rail-picture": "rail-picture";
26
+ "rail-stepped": "rail-stepped";
27
+ }>;
28
+ export type WallTrimProfile = z.infer<typeof WallTrimProfile>;
29
+ export declare const WallTrimConfig: z.ZodObject<{
30
+ enabled: z.ZodDefault<z.ZodBoolean>;
31
+ sides: z.ZodDefault<z.ZodEnum<{
32
+ interior: "interior";
33
+ exterior: "exterior";
34
+ both: "both";
35
+ }>>;
36
+ height: z.ZodDefault<z.ZodNumber>;
37
+ proud: z.ZodDefault<z.ZodNumber>;
38
+ profile: z.ZodDefault<z.ZodEnum<{
39
+ flat: "flat";
40
+ bevel: "bevel";
41
+ triangle: "triangle";
42
+ cove: "cove";
43
+ bullnose: "bullnose";
44
+ "base-modern": "base-modern";
45
+ "base-colonial": "base-colonial";
46
+ "base-shoe": "base-shoe";
47
+ "base-ogee": "base-ogee";
48
+ "crown-cove": "crown-cove";
49
+ "crown-ogee": "crown-ogee";
50
+ "crown-craftsman": "crown-craftsman";
51
+ "crown-layered": "crown-layered";
52
+ "rail-rounded": "rail-rounded";
53
+ "rail-ogee": "rail-ogee";
54
+ "rail-picture": "rail-picture";
55
+ "rail-stepped": "rail-stepped";
56
+ }>>;
57
+ offsetY: z.ZodOptional<z.ZodNumber>;
58
+ }, z.core.$strip>;
59
+ export type WallTrimConfig = z.infer<typeof WallTrimConfig>;
60
+ export declare const WALL_SKIRTING_DEFAULT: WallTrimConfig;
61
+ export declare const WALL_CROWN_DEFAULT: WallTrimConfig;
62
+ export declare const WALL_CHAIR_RAIL_DEFAULT: WallTrimConfig;
63
+ export declare const WALL_TRIM_DEFAULTS: {
64
+ readonly skirting: {
65
+ enabled: boolean;
66
+ sides: "interior" | "exterior" | "both";
67
+ height: number;
68
+ proud: number;
69
+ profile: "flat" | "bevel" | "triangle" | "cove" | "bullnose" | "base-modern" | "base-colonial" | "base-shoe" | "base-ogee" | "crown-cove" | "crown-ogee" | "crown-craftsman" | "crown-layered" | "rail-rounded" | "rail-ogee" | "rail-picture" | "rail-stepped";
70
+ offsetY?: number | undefined;
71
+ };
72
+ readonly crown: {
73
+ enabled: boolean;
74
+ sides: "interior" | "exterior" | "both";
75
+ height: number;
76
+ proud: number;
77
+ profile: "flat" | "bevel" | "triangle" | "cove" | "bullnose" | "base-modern" | "base-colonial" | "base-shoe" | "base-ogee" | "crown-cove" | "crown-ogee" | "crown-craftsman" | "crown-layered" | "rail-rounded" | "rail-ogee" | "rail-picture" | "rail-stepped";
78
+ offsetY?: number | undefined;
79
+ };
80
+ readonly chairRail: {
81
+ enabled: boolean;
82
+ sides: "interior" | "exterior" | "both";
83
+ height: number;
84
+ proud: number;
85
+ profile: "flat" | "bevel" | "triangle" | "cove" | "bullnose" | "base-modern" | "base-colonial" | "base-shoe" | "base-ogee" | "crown-cove" | "crown-ogee" | "crown-craftsman" | "crown-layered" | "rail-rounded" | "rail-ogee" | "rail-picture" | "rail-stepped";
86
+ offsetY?: number | undefined;
87
+ };
88
+ };
89
+ export declare const WallFaceBandConfig: z.ZodPreprocess<z.ZodObject<{
90
+ enabled: z.ZodDefault<z.ZodBoolean>;
91
+ count: z.ZodDefault<z.ZodNumber>;
92
+ lowerHeight: z.ZodDefault<z.ZodNumber>;
93
+ middleHeight: z.ZodDefault<z.ZodNumber>;
94
+ upperHeight: z.ZodDefault<z.ZodNumber>;
95
+ }, z.core.$strip>>;
96
+ export type WallFaceBandConfig = z.infer<typeof WallFaceBandConfig>;
97
+ export declare const WALL_FACE_BAND_DEFAULT: WallFaceBandConfig;
98
+ export declare const WALL_SKIRTING_SLOT_DEFAULT = "library:preset-softwhite";
99
+ export declare const WALL_CROWN_SLOT_DEFAULT = "library:preset-white";
100
+ export declare const WALL_CHAIR_RAIL_SLOT_DEFAULT = "library:preset-cream";
101
+ export declare const WALL_FACE_BAND_SOLID_SLOT_DEFAULTS: {
102
+ readonly lower: "library:preset-white";
103
+ readonly middle: "library:preset-lightgrey";
104
+ readonly upper: "library:preset-greige";
105
+ readonly top: "library:preset-softwhite";
106
+ };
107
+ export declare const WALL_SURFACE_SLOT_DEFAULTS: {
108
+ readonly interior: "library:concrete-drywall";
109
+ readonly exterior: "library:concrete-drywall";
110
+ readonly lowerInterior: "library:concrete-drywall";
111
+ readonly middleInterior: "library:concrete-drywall";
112
+ readonly upperInterior: "library:concrete-drywall";
113
+ readonly topInterior: "library:concrete-drywall";
114
+ readonly lowerExterior: "library:concrete-drywall";
115
+ readonly middleExterior: "library:concrete-drywall";
116
+ readonly upperExterior: "library:concrete-drywall";
117
+ readonly topExterior: "library:concrete-drywall";
118
+ readonly skirtingInterior: "library:preset-softwhite";
119
+ readonly skirtingExterior: "library:preset-softwhite";
120
+ readonly crownInterior: "library:preset-white";
121
+ readonly crownExterior: "library:preset-white";
122
+ readonly chairRailInterior: "library:preset-cream";
123
+ readonly chairRailExterior: "library:preset-cream";
124
+ };
125
+ export type WallSurfaceSlotId = keyof typeof WALL_SURFACE_SLOT_DEFAULTS;
3
126
  export declare const WallNode: z.ZodObject<{
4
127
  object: z.ZodDefault<z.ZodLiteral<"node">>;
5
128
  name: z.ZodOptional<z.ZodString>;
@@ -21,7 +144,7 @@ export declare const WallNode: z.ZodObject<{
21
144
  children: z.ZodDefault<z.ZodArray<z.ZodUnion<readonly [z.ZodDefault<z.ZodTemplateLiteral<`item_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`door_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`window_${string}`>>]>>>;
22
145
  material: z.ZodOptional<z.ZodObject<{
23
146
  id: z.ZodOptional<z.ZodString>;
24
- preset: z.ZodOptional<z.ZodEnum<{
147
+ preset: z.ZodOptional<z.ZodCatch<z.ZodEnum<{
25
148
  custom: "custom";
26
149
  white: "white";
27
150
  brick: "brick";
@@ -32,7 +155,7 @@ export declare const WallNode: z.ZodObject<{
32
155
  plaster: "plaster";
33
156
  tile: "tile";
34
157
  marble: "marble";
35
- }>>;
158
+ }>>>;
36
159
  properties: z.ZodOptional<z.ZodObject<{
37
160
  color: z.ZodDefault<z.ZodString>;
38
161
  roughness: z.ZodDefault<z.ZodNumber>;
@@ -54,7 +177,7 @@ export declare const WallNode: z.ZodObject<{
54
177
  materialPreset: z.ZodOptional<z.ZodString>;
55
178
  interiorMaterial: z.ZodOptional<z.ZodObject<{
56
179
  id: z.ZodOptional<z.ZodString>;
57
- preset: z.ZodOptional<z.ZodEnum<{
180
+ preset: z.ZodOptional<z.ZodCatch<z.ZodEnum<{
58
181
  custom: "custom";
59
182
  white: "white";
60
183
  brick: "brick";
@@ -65,7 +188,7 @@ export declare const WallNode: z.ZodObject<{
65
188
  plaster: "plaster";
66
189
  tile: "tile";
67
190
  marble: "marble";
68
- }>>;
191
+ }>>>;
69
192
  properties: z.ZodOptional<z.ZodObject<{
70
193
  color: z.ZodDefault<z.ZodString>;
71
194
  roughness: z.ZodDefault<z.ZodNumber>;
@@ -87,7 +210,7 @@ export declare const WallNode: z.ZodObject<{
87
210
  interiorMaterialPreset: z.ZodOptional<z.ZodString>;
88
211
  exteriorMaterial: z.ZodOptional<z.ZodObject<{
89
212
  id: z.ZodOptional<z.ZodString>;
90
- preset: z.ZodOptional<z.ZodEnum<{
213
+ preset: z.ZodOptional<z.ZodCatch<z.ZodEnum<{
91
214
  custom: "custom";
92
215
  white: "white";
93
216
  brick: "brick";
@@ -98,7 +221,7 @@ export declare const WallNode: z.ZodObject<{
98
221
  plaster: "plaster";
99
222
  tile: "tile";
100
223
  marble: "marble";
101
- }>>;
224
+ }>>>;
102
225
  properties: z.ZodOptional<z.ZodObject<{
103
226
  color: z.ZodDefault<z.ZodString>;
104
227
  roughness: z.ZodDefault<z.ZodNumber>;
@@ -118,9 +241,107 @@ export declare const WallNode: z.ZodObject<{
118
241
  }, z.core.$strip>>;
119
242
  }, z.core.$strip>>;
120
243
  exteriorMaterialPreset: z.ZodOptional<z.ZodString>;
244
+ slots: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
121
245
  thickness: z.ZodOptional<z.ZodNumber>;
122
246
  height: z.ZodOptional<z.ZodNumber>;
123
247
  curveOffset: z.ZodOptional<z.ZodNumber>;
248
+ faceBands: z.ZodOptional<z.ZodPreprocess<z.ZodObject<{
249
+ enabled: z.ZodDefault<z.ZodBoolean>;
250
+ count: z.ZodDefault<z.ZodNumber>;
251
+ lowerHeight: z.ZodDefault<z.ZodNumber>;
252
+ middleHeight: z.ZodDefault<z.ZodNumber>;
253
+ upperHeight: z.ZodDefault<z.ZodNumber>;
254
+ }, z.core.$strip>>>;
255
+ skirting: z.ZodOptional<z.ZodObject<{
256
+ enabled: z.ZodDefault<z.ZodBoolean>;
257
+ sides: z.ZodDefault<z.ZodEnum<{
258
+ interior: "interior";
259
+ exterior: "exterior";
260
+ both: "both";
261
+ }>>;
262
+ height: z.ZodDefault<z.ZodNumber>;
263
+ proud: z.ZodDefault<z.ZodNumber>;
264
+ profile: z.ZodDefault<z.ZodEnum<{
265
+ flat: "flat";
266
+ bevel: "bevel";
267
+ triangle: "triangle";
268
+ cove: "cove";
269
+ bullnose: "bullnose";
270
+ "base-modern": "base-modern";
271
+ "base-colonial": "base-colonial";
272
+ "base-shoe": "base-shoe";
273
+ "base-ogee": "base-ogee";
274
+ "crown-cove": "crown-cove";
275
+ "crown-ogee": "crown-ogee";
276
+ "crown-craftsman": "crown-craftsman";
277
+ "crown-layered": "crown-layered";
278
+ "rail-rounded": "rail-rounded";
279
+ "rail-ogee": "rail-ogee";
280
+ "rail-picture": "rail-picture";
281
+ "rail-stepped": "rail-stepped";
282
+ }>>;
283
+ offsetY: z.ZodOptional<z.ZodNumber>;
284
+ }, z.core.$strip>>;
285
+ crown: z.ZodOptional<z.ZodObject<{
286
+ enabled: z.ZodDefault<z.ZodBoolean>;
287
+ sides: z.ZodDefault<z.ZodEnum<{
288
+ interior: "interior";
289
+ exterior: "exterior";
290
+ both: "both";
291
+ }>>;
292
+ height: z.ZodDefault<z.ZodNumber>;
293
+ proud: z.ZodDefault<z.ZodNumber>;
294
+ profile: z.ZodDefault<z.ZodEnum<{
295
+ flat: "flat";
296
+ bevel: "bevel";
297
+ triangle: "triangle";
298
+ cove: "cove";
299
+ bullnose: "bullnose";
300
+ "base-modern": "base-modern";
301
+ "base-colonial": "base-colonial";
302
+ "base-shoe": "base-shoe";
303
+ "base-ogee": "base-ogee";
304
+ "crown-cove": "crown-cove";
305
+ "crown-ogee": "crown-ogee";
306
+ "crown-craftsman": "crown-craftsman";
307
+ "crown-layered": "crown-layered";
308
+ "rail-rounded": "rail-rounded";
309
+ "rail-ogee": "rail-ogee";
310
+ "rail-picture": "rail-picture";
311
+ "rail-stepped": "rail-stepped";
312
+ }>>;
313
+ offsetY: z.ZodOptional<z.ZodNumber>;
314
+ }, z.core.$strip>>;
315
+ chairRail: z.ZodOptional<z.ZodObject<{
316
+ enabled: z.ZodDefault<z.ZodBoolean>;
317
+ sides: z.ZodDefault<z.ZodEnum<{
318
+ interior: "interior";
319
+ exterior: "exterior";
320
+ both: "both";
321
+ }>>;
322
+ height: z.ZodDefault<z.ZodNumber>;
323
+ proud: z.ZodDefault<z.ZodNumber>;
324
+ profile: z.ZodDefault<z.ZodEnum<{
325
+ flat: "flat";
326
+ bevel: "bevel";
327
+ triangle: "triangle";
328
+ cove: "cove";
329
+ bullnose: "bullnose";
330
+ "base-modern": "base-modern";
331
+ "base-colonial": "base-colonial";
332
+ "base-shoe": "base-shoe";
333
+ "base-ogee": "base-ogee";
334
+ "crown-cove": "crown-cove";
335
+ "crown-ogee": "crown-ogee";
336
+ "crown-craftsman": "crown-craftsman";
337
+ "crown-layered": "crown-layered";
338
+ "rail-rounded": "rail-rounded";
339
+ "rail-ogee": "rail-ogee";
340
+ "rail-picture": "rail-picture";
341
+ "rail-stepped": "rail-stepped";
342
+ }>>;
343
+ offsetY: z.ZodOptional<z.ZodNumber>;
344
+ }, z.core.$strip>>;
124
345
  start: z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>;
125
346
  end: z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>;
126
347
  frontSide: z.ZodDefault<z.ZodEnum<{
@@ -136,6 +357,24 @@ export declare const WallNode: z.ZodObject<{
136
357
  }, z.core.$strip>;
137
358
  export type WallNode = z.infer<typeof WallNode>;
138
359
  export type WallSurfaceSide = 'interior' | 'exterior';
360
+ export type WallFaceBand = 'lower' | 'middle' | 'upper' | 'top';
361
+ export type WallBandSurfaceSlotId = 'lowerInterior' | 'middleInterior' | 'upperInterior' | 'topInterior' | 'lowerExterior' | 'middleExterior' | 'upperExterior' | 'topExterior';
362
+ export declare const WALL_SLOT_DEFAULT: Record<WallSurfaceSide, string>;
363
+ export declare function getWallFaceBandConfig(wall: Pick<WallNode, 'height' | 'faceBands'>): {
364
+ enabled: boolean;
365
+ count: number;
366
+ lowerHeight: number;
367
+ middleHeight: number;
368
+ upperHeight: number;
369
+ lowerTop: number;
370
+ middleTop: number;
371
+ upperTop: number;
372
+ };
373
+ export declare function getWallFaceBandForHeight(wall: Pick<WallNode, 'height' | 'faceBands'>, y: number): WallFaceBand;
374
+ export declare function getWallBandSlotId(side: WallSurfaceSide, band: WallFaceBand): WallBandSurfaceSlotId;
375
+ export declare function buildWallFaceBandCountPatch(wall: Pick<WallNode, 'faceBands' | 'slots'>, count: number): Pick<WallNode, 'faceBands' | 'slots'>;
376
+ export declare function buildEnabledWallFaceBandPatch(wall: Pick<WallNode, 'faceBands' | 'slots'>): Pick<WallNode, 'faceBands' | 'slots'>;
377
+ export declare function getWallSurfaceSideFromBandSlot(slotId: string): WallSurfaceSide | null;
139
378
  export type WallSurfaceMaterialSpec = {
140
379
  material?: z.infer<typeof MaterialSchema>;
141
380
  materialPreset?: string;