@pascal-app/core 1.0.0 → 1.0.3

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 (345) hide show
  1. package/dist/capture/index.d.ts +2 -2
  2. package/dist/capture/index.js +2 -2
  3. package/dist/capture/schema.d.ts.map +1 -1
  4. package/dist/capture/schema.js +2 -0
  5. package/dist/capture/source.d.ts +1 -1
  6. package/dist/capture/source.js +1 -1
  7. package/dist/events/bus.d.ts +6 -3
  8. package/dist/events/bus.d.ts.map +1 -1
  9. package/dist/hooks/spatial-grid/floor-placed-elevation.d.ts +4 -4
  10. package/dist/hooks/spatial-grid/floor-placed-elevation.d.ts.map +1 -1
  11. package/dist/hooks/spatial-grid/floor-placed-elevation.js +7 -12
  12. package/dist/hooks/spatial-grid/floor-placed-footprints.d.ts +4 -0
  13. package/dist/hooks/spatial-grid/floor-placed-footprints.d.ts.map +1 -0
  14. package/dist/hooks/spatial-grid/floor-placed-footprints.js +7 -0
  15. package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts +5 -8
  16. package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts.map +1 -1
  17. package/dist/hooks/spatial-grid/spatial-grid-manager.js +23 -106
  18. package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts +263 -84
  19. package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts.map +1 -1
  20. package/dist/hooks/spatial-grid/spatial-grid-sync.js +77 -13
  21. package/dist/hooks/spatial-grid/support-host-patch.d.ts +1 -1
  22. package/dist/hooks/spatial-grid/support-host-patch.js +6 -6
  23. package/dist/hooks/spatial-grid/use-spatial-query.d.ts +1 -1
  24. package/dist/hooks/spatial-grid/use-spatial-query.js +1 -1
  25. package/dist/index.d.ts +77 -72
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js +74 -69
  28. package/dist/lib/door-operation.d.ts +1 -1
  29. package/dist/lib/item-polygon-overlap.d.ts +6 -0
  30. package/dist/lib/item-polygon-overlap.d.ts.map +1 -0
  31. package/dist/lib/item-polygon-overlap.js +67 -0
  32. package/dist/lib/level-name.d.ts +1 -1
  33. package/dist/lib/measurement-geometry.d.ts +4 -4
  34. package/dist/lib/node-visibility.d.ts +12 -0
  35. package/dist/lib/node-visibility.d.ts.map +1 -0
  36. package/dist/lib/node-visibility.js +12 -0
  37. package/dist/lib/plan-footprint.d.ts +41 -0
  38. package/dist/lib/plan-footprint.d.ts.map +1 -0
  39. package/dist/lib/plan-footprint.js +58 -0
  40. package/dist/lib/room-topology-index.d.ts +1 -1
  41. package/dist/lib/room-topology-index.js +1 -1
  42. package/dist/lib/selection-proxy.d.ts +1 -1
  43. package/dist/lib/slab-polygon.d.ts +2 -2
  44. package/dist/lib/slab-polygon.js +2 -2
  45. package/dist/lib/space-detection.d.ts +1 -1
  46. package/dist/lib/space-detection.d.ts.map +1 -1
  47. package/dist/lib/space-detection.js +16 -11
  48. package/dist/lib/terrain-brush.d.ts +1 -1
  49. package/dist/lib/terrain-brush.js +1 -1
  50. package/dist/lib/terrain-codec.d.ts +2 -2
  51. package/dist/lib/terrain-codec.js +1 -1
  52. package/dist/lib/terrain-raycast.d.ts +1 -1
  53. package/dist/lib/terrain-raycast.js +1 -1
  54. package/dist/lib/terrain-source.d.ts +3 -3
  55. package/dist/lib/terrain-source.js +3 -3
  56. package/dist/lib/terrain-support.d.ts +1 -1
  57. package/dist/lib/terrain-support.js +3 -3
  58. package/dist/lib/unit-containment.d.ts +19 -0
  59. package/dist/lib/unit-containment.d.ts.map +1 -0
  60. package/dist/lib/unit-containment.js +158 -0
  61. package/dist/lib/unit-report.d.ts +19 -0
  62. package/dist/lib/unit-report.d.ts.map +1 -0
  63. package/dist/lib/unit-report.js +36 -0
  64. package/dist/lib/wall-distance.d.ts +2 -2
  65. package/dist/lib/wall-distance.js +1 -1
  66. package/dist/lib/zone-quantities.d.ts +1 -1
  67. package/dist/lib/zone-quantities.js +7 -7
  68. package/dist/material-library.d.ts +1 -1
  69. package/dist/material-library.js +1 -1
  70. package/dist/procedural-items/fixtures.d.ts +261 -0
  71. package/dist/procedural-items/fixtures.d.ts.map +1 -0
  72. package/dist/procedural-items/fixtures.js +349 -0
  73. package/dist/procedural-items/index.d.ts +10 -0
  74. package/dist/procedural-items/index.d.ts.map +1 -0
  75. package/dist/procedural-items/index.js +9 -0
  76. package/dist/procedural-items/integration.d.ts +92 -0
  77. package/dist/procedural-items/integration.d.ts.map +1 -0
  78. package/dist/procedural-items/integration.js +19 -0
  79. package/dist/procedural-items/library-colors.d.ts +56 -0
  80. package/dist/procedural-items/library-colors.d.ts.map +1 -0
  81. package/dist/procedural-items/library-colors.js +84 -0
  82. package/dist/procedural-items/materials.d.ts +5 -0
  83. package/dist/procedural-items/materials.d.ts.map +1 -0
  84. package/dist/procedural-items/materials.js +47 -0
  85. package/dist/procedural-items/node.d.ts +280 -0
  86. package/dist/procedural-items/node.d.ts.map +1 -0
  87. package/dist/procedural-items/node.js +71 -0
  88. package/dist/procedural-items/placement.d.ts +7 -0
  89. package/dist/procedural-items/placement.d.ts.map +1 -0
  90. package/dist/procedural-items/placement.js +48 -0
  91. package/dist/procedural-items/query.d.ts +51 -0
  92. package/dist/procedural-items/query.d.ts.map +1 -0
  93. package/dist/procedural-items/query.js +342 -0
  94. package/dist/procedural-items/recipe.d.ts +144 -0
  95. package/dist/procedural-items/recipe.d.ts.map +1 -0
  96. package/dist/procedural-items/recipe.js +372 -0
  97. package/dist/procedural-items/spatial.d.ts +19 -0
  98. package/dist/procedural-items/spatial.d.ts.map +1 -0
  99. package/dist/procedural-items/spatial.js +39 -0
  100. package/dist/registry/__bench__/relations-resolver.bench.js +2 -2
  101. package/dist/registry/handles.d.ts +40 -5
  102. package/dist/registry/handles.d.ts.map +1 -1
  103. package/dist/registry/index.d.ts +6 -6
  104. package/dist/registry/index.d.ts.map +1 -1
  105. package/dist/registry/index.js +4 -4
  106. package/dist/registry/registry.d.ts +1 -1
  107. package/dist/registry/relations-resolver.d.ts +2 -2
  108. package/dist/registry/relations-resolver.js +1 -1
  109. package/dist/registry/scene-api.d.ts +2 -2
  110. package/dist/registry/scene-api.js +2 -2
  111. package/dist/registry/subtree.d.ts +1 -1
  112. package/dist/registry/subtree.d.ts.map +1 -1
  113. package/dist/registry/subtree.js +8 -2
  114. package/dist/registry/types.d.ts +32 -10
  115. package/dist/registry/types.d.ts.map +1 -1
  116. package/dist/registry/use-registry-version.js +1 -1
  117. package/dist/registry/validate-relations.d.ts +4 -0
  118. package/dist/registry/validate-relations.d.ts.map +1 -0
  119. package/dist/registry/validate-relations.js +22 -0
  120. package/dist/schema/__bench__/node-parsers.bench.js +3 -3
  121. package/dist/schema/__fixtures__/node-fixtures.d.ts +1 -1
  122. package/dist/schema/__fixtures__/node-fixtures.d.ts.map +1 -1
  123. package/dist/schema/__fixtures__/node-fixtures.js +4 -2
  124. package/dist/schema/base.js +1 -1
  125. package/dist/schema/collections.d.ts +1 -1
  126. package/dist/schema/collections.js +1 -1
  127. package/dist/schema/compiled-node-parsers.d.ts +1 -1
  128. package/dist/schema/compiled-node-parsers.js +1 -1
  129. package/dist/schema/index.d.ts +74 -70
  130. package/dist/schema/index.d.ts.map +1 -1
  131. package/dist/schema/index.js +65 -61
  132. package/dist/schema/material.d.ts +1 -1
  133. package/dist/schema/material.js +1 -1
  134. package/dist/schema/nodes/automatic-downspout.d.ts +4 -4
  135. package/dist/schema/nodes/automatic-downspout.js +5 -5
  136. package/dist/schema/nodes/block.d.ts +3 -3
  137. package/dist/schema/nodes/block.d.ts.map +1 -1
  138. package/dist/schema/nodes/block.js +24 -12
  139. package/dist/schema/nodes/box-vent.js +2 -2
  140. package/dist/schema/nodes/building.d.ts +1 -1
  141. package/dist/schema/nodes/building.d.ts.map +1 -1
  142. package/dist/schema/nodes/building.js +8 -5
  143. package/dist/schema/nodes/cabinet.d.ts +4 -4
  144. package/dist/schema/nodes/cabinet.js +4 -4
  145. package/dist/schema/nodes/ceiling.d.ts +1 -1
  146. package/dist/schema/nodes/ceiling.js +5 -5
  147. package/dist/schema/nodes/chimney.js +2 -2
  148. package/dist/schema/nodes/column.d.ts +1 -0
  149. package/dist/schema/nodes/column.d.ts.map +1 -1
  150. package/dist/schema/nodes/column.js +3 -2
  151. package/dist/schema/nodes/construction-dimension.d.ts +3 -3
  152. package/dist/schema/nodes/construction-dimension.js +2 -2
  153. package/dist/schema/nodes/cupola.d.ts +1 -1
  154. package/dist/schema/nodes/cupola.js +2 -2
  155. package/dist/schema/nodes/curtain-wall.d.ts +129 -0
  156. package/dist/schema/nodes/curtain-wall.d.ts.map +1 -0
  157. package/dist/schema/nodes/curtain-wall.js +49 -0
  158. package/dist/schema/nodes/door.d.ts +2 -2
  159. package/dist/schema/nodes/door.js +2 -2
  160. package/dist/schema/nodes/dormer.d.ts +3 -3
  161. package/dist/schema/nodes/dormer.js +4 -4
  162. package/dist/schema/nodes/downspout.js +2 -2
  163. package/dist/schema/nodes/duct-fitting.js +1 -1
  164. package/dist/schema/nodes/duct-segment.js +2 -2
  165. package/dist/schema/nodes/duct-terminal.js +1 -1
  166. package/dist/schema/nodes/elevator.js +2 -2
  167. package/dist/schema/nodes/eyebrow-vent.js +2 -2
  168. package/dist/schema/nodes/fence.js +2 -2
  169. package/dist/schema/nodes/guide.js +2 -2
  170. package/dist/schema/nodes/gutter.d.ts +1 -1
  171. package/dist/schema/nodes/gutter.js +4 -4
  172. package/dist/schema/nodes/hvac-equipment.js +1 -1
  173. package/dist/schema/nodes/imported-mesh.d.ts +40 -0
  174. package/dist/schema/nodes/imported-mesh.d.ts.map +1 -0
  175. package/dist/schema/nodes/imported-mesh.js +27 -0
  176. package/dist/schema/nodes/item.d.ts +3 -3
  177. package/dist/schema/nodes/item.js +3 -3
  178. package/dist/schema/nodes/lean-to-extension.js +4 -4
  179. package/dist/schema/nodes/level.d.ts +1 -1
  180. package/dist/schema/nodes/level.d.ts.map +1 -1
  181. package/dist/schema/nodes/level.js +1 -1
  182. package/dist/schema/nodes/lineset.js +1 -1
  183. package/dist/schema/nodes/liquid-line.js +1 -1
  184. package/dist/schema/nodes/measurement.js +2 -2
  185. package/dist/schema/nodes/pipe-fitting.d.ts +1 -1
  186. package/dist/schema/nodes/pipe-fitting.js +1 -1
  187. package/dist/schema/nodes/pipe-segment.d.ts +1 -1
  188. package/dist/schema/nodes/pipe-segment.js +2 -2
  189. package/dist/schema/nodes/pipe-trap.d.ts +1 -1
  190. package/dist/schema/nodes/pipe-trap.js +1 -1
  191. package/dist/schema/nodes/ridge-vent.d.ts +1 -1
  192. package/dist/schema/nodes/ridge-vent.js +3 -3
  193. package/dist/schema/nodes/roof-segment-shape.d.ts +1 -1
  194. package/dist/schema/nodes/roof-segment-shape.js +1 -1
  195. package/dist/schema/nodes/roof-segment-walls.d.ts +1 -1
  196. package/dist/schema/nodes/roof-segment-walls.js +1 -1
  197. package/dist/schema/nodes/roof-segment.d.ts +2 -2
  198. package/dist/schema/nodes/roof-segment.js +2 -2
  199. package/dist/schema/nodes/roof.d.ts +1 -1
  200. package/dist/schema/nodes/roof.js +3 -3
  201. package/dist/schema/nodes/scan.js +3 -3
  202. package/dist/schema/nodes/shelf.d.ts +1 -1
  203. package/dist/schema/nodes/shelf.d.ts.map +1 -1
  204. package/dist/schema/nodes/shelf.js +3 -4
  205. package/dist/schema/nodes/site.js +2 -2
  206. package/dist/schema/nodes/skylight.d.ts +4 -4
  207. package/dist/schema/nodes/skylight.js +2 -2
  208. package/dist/schema/nodes/slab.js +3 -3
  209. package/dist/schema/nodes/solar-panel.js +3 -3
  210. package/dist/schema/nodes/spawn.js +1 -1
  211. package/dist/schema/nodes/stair-segment.js +2 -2
  212. package/dist/schema/nodes/stair.d.ts +1 -1
  213. package/dist/schema/nodes/stair.js +3 -3
  214. package/dist/schema/nodes/structural-grid.js +1 -1
  215. package/dist/schema/nodes/turbine-vent.d.ts +1 -1
  216. package/dist/schema/nodes/turbine-vent.js +2 -2
  217. package/dist/schema/nodes/unit.d.ts +33 -0
  218. package/dist/schema/nodes/unit.d.ts.map +1 -0
  219. package/dist/schema/nodes/unit.js +13 -0
  220. package/dist/schema/nodes/wall.d.ts +75 -2
  221. package/dist/schema/nodes/wall.d.ts.map +1 -1
  222. package/dist/schema/nodes/wall.js +10 -6
  223. package/dist/schema/nodes/window.js +2 -2
  224. package/dist/schema/nodes/zone.js +1 -1
  225. package/dist/schema/scene-material.js +2 -2
  226. package/dist/schema/types.d.ts +417 -22
  227. package/dist/schema/types.d.ts.map +1 -1
  228. package/dist/schema/types.js +56 -49
  229. package/dist/services/__fixtures__/hosting.d.ts +3 -0
  230. package/dist/services/__fixtures__/hosting.d.ts.map +1 -0
  231. package/dist/services/__fixtures__/hosting.js +9 -0
  232. package/dist/services/__fixtures__/shelf-surface-rows.d.ts +4 -0
  233. package/dist/services/__fixtures__/shelf-surface-rows.d.ts.map +1 -0
  234. package/dist/services/__fixtures__/shelf-surface-rows.js +18 -0
  235. package/dist/services/alignment-anchors.d.ts +6 -11
  236. package/dist/services/alignment-anchors.d.ts.map +1 -1
  237. package/dist/services/alignment-anchors.js +7 -34
  238. package/dist/services/drag-session.d.ts +4 -4
  239. package/dist/services/drag-session.js +1 -1
  240. package/dist/services/hosting.d.ts +5 -8
  241. package/dist/services/hosting.d.ts.map +1 -1
  242. package/dist/services/hosting.js +25 -18
  243. package/dist/services/index.d.ts +16 -13
  244. package/dist/services/index.d.ts.map +1 -1
  245. package/dist/services/index.js +16 -13
  246. package/dist/services/level-height.d.ts +2 -2
  247. package/dist/services/level-height.js +3 -3
  248. package/dist/services/movement.d.ts +3 -3
  249. package/dist/services/movement.js +2 -2
  250. package/dist/services/port-connectivity.d.ts +1 -1
  251. package/dist/services/port-connectivity.js +1 -1
  252. package/dist/services/riser-diagram.d.ts +1 -1
  253. package/dist/services/shelf-board.d.ts +5 -0
  254. package/dist/services/shelf-board.d.ts.map +1 -0
  255. package/dist/services/shelf-board.js +15 -0
  256. package/dist/services/snap.d.ts +3 -0
  257. package/dist/services/snap.d.ts.map +1 -1
  258. package/dist/services/snap.js +11 -0
  259. package/dist/services/storey.d.ts +2 -2
  260. package/dist/services/storey.js +2 -2
  261. package/dist/services/surface-hosting-procedural-parity.fixtures.d.ts +13 -0
  262. package/dist/services/surface-hosting-procedural-parity.fixtures.d.ts.map +1 -0
  263. package/dist/services/surface-hosting-procedural-parity.fixtures.js +4691 -0
  264. package/dist/services/surface-hosting-shelf-parity.fixtures.d.ts +1060 -0
  265. package/dist/services/surface-hosting-shelf-parity.fixtures.d.ts.map +1 -0
  266. package/dist/services/surface-hosting-shelf-parity.fixtures.js +3127 -0
  267. package/dist/services/surface-hosting.d.ts +92 -0
  268. package/dist/services/surface-hosting.d.ts.map +1 -0
  269. package/dist/services/surface-hosting.js +305 -0
  270. package/dist/services/surface-region.d.ts +8 -0
  271. package/dist/services/surface-region.d.ts.map +1 -0
  272. package/dist/services/surface-region.js +44 -0
  273. package/dist/services/system-graph.d.ts +2 -2
  274. package/dist/services/system-graph.js +2 -2
  275. package/dist/services/validate-dwv.d.ts +1 -1
  276. package/dist/services/validate-dwv.js +1 -1
  277. package/dist/store/actions/node-actions.d.ts +2 -2
  278. package/dist/store/actions/node-actions.d.ts.map +1 -1
  279. package/dist/store/actions/node-actions.js +50 -104
  280. package/dist/store/history-control.d.ts +3 -3
  281. package/dist/store/history-invalidation.d.ts +1 -1
  282. package/dist/store/history-invalidation.js +1 -1
  283. package/dist/store/use-interactive.d.ts +2 -2
  284. package/dist/store/use-live-terrain.d.ts +1 -1
  285. package/dist/store/use-scene.d.ts +4 -4
  286. package/dist/store/use-scene.d.ts.map +1 -1
  287. package/dist/store/use-scene.js +50 -32
  288. package/dist/systems/elevator/elevator-dispatch.d.ts +2 -2
  289. package/dist/systems/elevator/elevator-dispatch.js +1 -1
  290. package/dist/systems/elevator/elevator-geometry.d.ts +1 -1
  291. package/dist/systems/elevator/elevator-opening-sync.d.ts +1 -1
  292. package/dist/systems/elevator/elevator-opening-sync.js +2 -2
  293. package/dist/systems/elevator/elevator-opening-system.js +3 -3
  294. package/dist/systems/elevator/elevator-runtime.d.ts +3 -3
  295. package/dist/systems/elevator/elevator-runtime.js +3 -3
  296. package/dist/systems/elevator/elevator-service.d.ts +1 -1
  297. package/dist/systems/elevator/elevator-service.js +1 -1
  298. package/dist/systems/fence/fence-centerline.d.ts +2 -2
  299. package/dist/systems/fence/fence-centerline.js +2 -2
  300. package/dist/systems/fence/fence-spline.d.ts +2 -2
  301. package/dist/systems/roof/roof-elevation-system.js +3 -3
  302. package/dist/systems/roof/roof-elevation.d.ts +2 -2
  303. package/dist/systems/roof/roof-elevation.js +6 -6
  304. package/dist/systems/roof/roof-footprint.d.ts +1 -1
  305. package/dist/systems/roof/roof-footprint.js +3 -3
  306. package/dist/systems/slab/slab-placement.d.ts +1 -1
  307. package/dist/systems/slab/slab-support.d.ts +1 -1
  308. package/dist/systems/slab/slab-support.js +4 -4
  309. package/dist/systems/stair/stair-flight.d.ts +2 -2
  310. package/dist/systems/stair/stair-flight.js +2 -2
  311. package/dist/systems/stair/stair-footprint.d.ts +1 -1
  312. package/dist/systems/stair/stair-opening-preview.d.ts +248 -87
  313. package/dist/systems/stair/stair-opening-preview.d.ts.map +1 -1
  314. package/dist/systems/stair/stair-opening-preview.js +2 -2
  315. package/dist/systems/stair/stair-opening-sync.d.ts +1 -1
  316. package/dist/systems/stair/stair-opening-sync.js +6 -6
  317. package/dist/systems/stair/stair-opening-system.js +8 -8
  318. package/dist/systems/stair/stair-rise.d.ts +1 -1
  319. package/dist/systems/stair/stair-rise.js +3 -3
  320. package/dist/systems/wall/wall-curve.d.ts +2 -2
  321. package/dist/systems/wall/wall-footprint.d.ts +3 -3
  322. package/dist/systems/wall/wall-footprint.js +3 -3
  323. package/dist/systems/wall/wall-merge.d.ts +38 -0
  324. package/dist/systems/wall/wall-merge.d.ts.map +1 -0
  325. package/dist/systems/wall/wall-merge.js +240 -0
  326. package/dist/systems/wall/wall-mitering.d.ts +1 -1
  327. package/dist/systems/wall/wall-mitering.js +1 -1
  328. package/dist/systems/wall/wall-move.d.ts +1 -1
  329. package/dist/systems/wall/wall-operations.d.ts +28 -0
  330. package/dist/systems/wall/wall-operations.d.ts.map +1 -0
  331. package/dist/systems/wall/wall-operations.js +145 -0
  332. package/dist/systems/wall/wall-top.d.ts +1 -1
  333. package/dist/systems/wall/wall-topology.d.ts +9 -2
  334. package/dist/systems/wall/wall-topology.d.ts.map +1 -1
  335. package/dist/systems/wall/wall-topology.js +57 -9
  336. package/dist/utils/clone-scene-graph.d.ts +3 -3
  337. package/dist/utils/clone-scene-graph.d.ts.map +1 -1
  338. package/dist/utils/clone-scene-graph.js +9 -3
  339. package/dist/utils/scene-migrations.d.ts +3 -3
  340. package/dist/utils/scene-migrations.js +3 -3
  341. package/dist/utils/vertical-scene-migration.js +5 -5
  342. package/dist/validation/validate-build-json.d.ts +5 -2
  343. package/dist/validation/validate-build-json.d.ts.map +1 -1
  344. package/dist/validation/validate-build-json.js +57 -4
  345. package/package.json +15 -4
@@ -1,4 +1,4 @@
1
- import type { AnyNode, AnyNodeId, LevelNode, SlabNode } from '../../schema';
1
+ import type { AnyNode, AnyNodeId, LevelNode, SlabNode } from '../../schema/index.js';
2
2
  export declare function resolveLevelId(node: AnyNode, nodes: Record<string, AnyNode>): string;
3
3
  /**
4
4
  * Walks the parent chain of `nodeId` and returns the id of the first ancestor
@@ -28,6 +28,24 @@ export declare function findLevelAncestorId(nodeId: AnyNodeId, nodes: Record<str
28
28
  */
29
29
  export declare function resolveBuildingForLevel(levelId: AnyNodeId, nodes: Record<AnyNodeId, AnyNode>): AnyNodeId | null;
30
30
  export declare function initSpatialGridSync(): () => void;
31
+ /**
32
+ * Bulk slab-change guard. A scene load, reload, paste or import changes tens to
33
+ * thousands of slabs in one store write, and scanning every node twice per slab
34
+ * is O(slabs × nodes): a 4,600-slab scene blocked the main thread for ~5 s on
35
+ * every load. When at least this many slabs are added, removed or reshaped in
36
+ * one write, `markAllSlabDependents` dirties every node any slab could affect,
37
+ * once, and the per-slab scans are skipped. The marks are a superset of the
38
+ * per-slab result — and `setScene` marks every node dirty right after `set()`
39
+ * regardless — so load-time behaviour is unchanged; the saving is the scans.
40
+ */
41
+ export declare const BULK_SLAB_CHANGE_THRESHOLD = 32;
42
+ export declare function countBulkSlabChanges(nodes: Record<string, AnyNode>, prevNodes: Record<string, AnyNode>): number;
43
+ /**
44
+ * Every node a slab change can dirty, without looking at any slab: walls and
45
+ * ceilings (overlap and covering-below rules), stairs (deck attachment) and
46
+ * level-hosted floor-placed kinds (the generic re-elevation sweep).
47
+ */
48
+ export declare function markAllSlabDependents(nodes: Record<string, AnyNode>, markDirty: (id: AnyNodeId) => void): void;
31
49
  /**
32
50
  * A level's stored height moved: plane-bound walls follow the new plane,
33
51
  * stair rise re-derives, and ceilings/fences re-resolve their clamp — mark
@@ -82,7 +100,7 @@ export declare function markSlabChangeDependents(previous: SlabNode, next: SlabN
82
100
  visible: boolean;
83
101
  metadata: Record<string, unknown>;
84
102
  rotation: [number, number, number];
85
- children: (`elevator_${string}` | `level_${string}`)[];
103
+ children: (`elevator_${string}` | `level_${string}` | `unit_${string}`)[];
86
104
  type: "building";
87
105
  name?: string | undefined;
88
106
  camera?: {
@@ -148,13 +166,31 @@ export declare function markSlabChangeDependents(previous: SlabNode, next: SlabN
148
166
  shaftWidth?: number | undefined;
149
167
  shaftDepth?: number | undefined;
150
168
  servedLevelIds?: string[] | undefined;
169
+ } | {
170
+ object: "node";
171
+ id: `unit_${string}`;
172
+ name: string;
173
+ parentId: string | null;
174
+ visible: boolean;
175
+ metadata: Record<string, unknown>;
176
+ color: string;
177
+ kind: "apartment" | "hotel-room" | "commercial" | "common";
178
+ members: `zone_${string}`[];
179
+ type: "unit";
180
+ camera?: {
181
+ position: [number, number, number];
182
+ target: [number, number, number];
183
+ mode: "perspective" | "orthographic";
184
+ fov?: number | undefined;
185
+ zoom?: number | undefined;
186
+ } | undefined;
151
187
  } | {
152
188
  object: "node";
153
189
  id: `level_${string}`;
154
190
  parentId: string | null;
155
191
  visible: boolean;
156
192
  metadata: Record<string, unknown>;
157
- children: (`item_${string}` | `block_${string}` | `ceiling_${string}` | `column_${string}` | `wall_${string}` | `roof_${string}` | `slab_${string}` | `fence_${string}` | `construction-dimension_${string}` | `structural-grid_${string}` | `zone_${string}` | `stair_${string}` | `scan_${string}` | `guide_${string}` | `measurement_${string}` | `spawn_${string}` | `shelf_${string}` | `duct-segment_${string}` | `duct-fitting_${string}` | `duct-terminal_${string}` | `hvac-equipment_${string}` | `lineset_${string}` | `liquid-line_${string}` | `pipe-segment_${string}` | `pipe-fitting_${string}` | `pipe-trap_${string}`)[];
193
+ children: (`block_${string}` | `ceiling_${string}` | `item_${string}` | `procedural-item_${string}` | `column_${string}` | `construction-dimension_${string}` | `wall_${string}` | `roof_${string}` | `slab_${string}` | `fence_${string}` | `structural-grid_${string}` | `imesh_${string}` | `zone_${string}` | `stair_${string}` | `scan_${string}` | `guide_${string}` | `measurement_${string}` | `spawn_${string}` | `shelf_${string}` | `duct-segment_${string}` | `duct-fitting_${string}` | `duct-terminal_${string}` | `hvac-equipment_${string}` | `lineset_${string}` | `liquid-line_${string}` | `pipe-segment_${string}` | `pipe-fitting_${string}` | `pipe-trap_${string}`)[];
158
194
  level: number;
159
195
  baseElevation: number;
160
196
  type: "level";
@@ -264,9 +300,10 @@ export declare function markSlabChangeDependents(previous: SlabNode, next: SlabN
264
300
  visible: boolean;
265
301
  metadata: Record<string, unknown>;
266
302
  rotation: number;
267
- height: number;
303
+ children: string[];
268
304
  width: number;
269
305
  depth: number;
306
+ height: number;
270
307
  baseHeight: number;
271
308
  style: "plain" | "faceted" | "fluted" | "lathe-turned" | "dravidian-carved" | "cluster";
272
309
  crossSection: "round" | "square" | "rectangular" | "octagonal" | "sixteen-sided";
@@ -400,7 +437,7 @@ export declare function markSlabChangeDependents(previous: SlabNode, next: SlabN
400
437
  drawingType: "floor-plan" | "foundation-plan" | "reflected-ceiling-plan" | "roof-plan" | "site-plan";
401
438
  drawingOverrides: {
402
439
  drawingType: "floor-plan" | "foundation-plan" | "reflected-ceiling-plan" | "roof-plan" | "site-plan";
403
- presentation: "omit" | "shown" | "controlled";
440
+ presentation: "shown" | "omit" | "controlled";
404
441
  suppressedSegmentIndexes: number[];
405
442
  }[];
406
443
  controllingDimensionId: `construction-dimension_${string}` | null;
@@ -421,8 +458,7 @@ export declare function markSlabChangeDependents(previous: SlabNode, next: SlabN
421
458
  visible: boolean;
422
459
  metadata: Record<string, unknown>;
423
460
  rotation: number;
424
- children: `item_${string}`[];
425
- slots: Record<string, string>;
461
+ children: string[];
426
462
  topology: {
427
463
  vertices: {
428
464
  id: string;
@@ -438,6 +474,7 @@ export declare function markSlabChangeDependents(previous: SlabNode, next: SlabN
438
474
  materialSlot: string;
439
475
  }[];
440
476
  };
477
+ slots: Record<string, string>;
441
478
  slotNames: Record<string, string>;
442
479
  type: "block";
443
480
  name?: string | undefined;
@@ -475,7 +512,7 @@ export declare function markSlabChangeDependents(previous: SlabNode, next: SlabN
475
512
  parentId: string | null;
476
513
  visible: boolean;
477
514
  metadata: Record<string, unknown>;
478
- children: (`item_${string}` | `door_${string}` | `window_${string}` | `leanto_${string}`)[];
515
+ children: (`item_${string}` | `procedural-item_${string}` | `door_${string}` | `window_${string}` | `leanto_${string}`)[];
479
516
  start: [number, number];
480
517
  end: [number, number];
481
518
  frontSide: "unknown" | "interior" | "exterior";
@@ -489,7 +526,6 @@ export declare function markSlabChangeDependents(previous: SlabNode, next: SlabN
489
526
  fov?: number | undefined;
490
527
  zoom?: number | undefined;
491
528
  } | undefined;
492
- height?: number | undefined;
493
529
  supportSlabId?: string | undefined;
494
530
  slots?: Record<string, string> | undefined;
495
531
  material?: {
@@ -510,6 +546,41 @@ export declare function markSlabChangeDependents(previous: SlabNode, next: SlabN
510
546
  } | undefined;
511
547
  } | undefined;
512
548
  materialPreset?: string | undefined;
549
+ height?: number | undefined;
550
+ wallType?: "standard" | "curtain" | undefined;
551
+ curtainWall?: {
552
+ construction: "stick" | "unitized";
553
+ framing: "capped" | "vertical-caps" | "horizontal-caps" | "structural-glazing";
554
+ columns: {
555
+ layout: "count" | "maximum-spacing" | "fixed-spacing";
556
+ count: number;
557
+ spacing: number;
558
+ alignment: "start" | "center" | "end";
559
+ };
560
+ rows: {
561
+ layout: "count" | "maximum-spacing" | "fixed-spacing";
562
+ count: number;
563
+ spacing: number;
564
+ alignment: "start" | "center" | "end";
565
+ };
566
+ mullionWidth: number;
567
+ transomWidth: number;
568
+ perimeterWidth: number;
569
+ jointWidth: number;
570
+ glassThickness: number;
571
+ panelType: "glass" | "solid" | "empty";
572
+ spandrel: "top" | "none" | "bottom";
573
+ frameColor: string;
574
+ glassColor: string;
575
+ solidColor: string;
576
+ glassOpacity: number;
577
+ glassRoughness: number;
578
+ panels: {
579
+ column: number;
580
+ row: number;
581
+ type: "glass" | "solid" | "empty";
582
+ }[];
583
+ } | undefined;
513
584
  thickness?: number | undefined;
514
585
  fillToTerrain?: boolean | undefined;
515
586
  interiorMaterial?: {
@@ -592,10 +663,10 @@ export declare function markSlabChangeDependents(previous: SlabNode, next: SlabN
592
663
  baseHeight: number;
593
664
  style: "slat" | "rail" | "privacy" | "horizontal";
594
665
  baseStyle: "floating" | "grounded";
595
- thickness: number;
596
- postSpacing: number;
597
666
  start: [number, number];
598
667
  end: [number, number];
668
+ thickness: number;
669
+ postSpacing: number;
599
670
  postSize: number;
600
671
  topRailHeight: number;
601
672
  groundClearance: number;
@@ -604,7 +675,6 @@ export declare function markSlabChangeDependents(previous: SlabNode, next: SlabN
604
675
  postCap: "flat" | "none" | "pyramid";
605
676
  showInfill: boolean;
606
677
  type: "fence";
607
- path?: [number, number][] | undefined;
608
678
  name?: string | undefined;
609
679
  camera?: {
610
680
  position: [number, number, number];
@@ -613,6 +683,7 @@ export declare function markSlabChangeDependents(previous: SlabNode, next: SlabN
613
683
  fov?: number | undefined;
614
684
  zoom?: number | undefined;
615
685
  } | undefined;
686
+ path?: [number, number][] | undefined;
616
687
  supportSlabId?: string | undefined;
617
688
  slots?: Record<string, string> | undefined;
618
689
  material?: {
@@ -644,7 +715,7 @@ export declare function markSlabChangeDependents(previous: SlabNode, next: SlabN
644
715
  visible: boolean;
645
716
  metadata: Record<string, unknown>;
646
717
  rotation: number;
647
- children: (`cabinet_${string}` | `cabinet-module_${string}`)[];
718
+ children: string[];
648
719
  width: number;
649
720
  depth: number;
650
721
  operationState: number;
@@ -664,7 +735,7 @@ export declare function markSlabChangeDependents(previous: SlabNode, next: SlabN
664
735
  frontStyle: "slab" | "shaker" | "raised-arch";
665
736
  panelReady: boolean;
666
737
  handleStyle: "none" | "bar" | "cutout" | "hole" | "knob";
667
- handlePosition: "top" | "auto" | "center";
738
+ handlePosition: "top" | "center" | "auto";
668
739
  frontOverlay: "full" | "inset";
669
740
  withBottomPanel: boolean;
670
741
  showPlinth: boolean;
@@ -793,7 +864,7 @@ export declare function markSlabChangeDependents(previous: SlabNode, next: SlabN
793
864
  visible: boolean;
794
865
  metadata: Record<string, unknown>;
795
866
  rotation: number;
796
- children: (`cabinet_${string}` | `cabinet-module_${string}`)[];
867
+ children: string[];
797
868
  width: number;
798
869
  depth: number;
799
870
  operationState: number;
@@ -810,7 +881,7 @@ export declare function markSlabChangeDependents(previous: SlabNode, next: SlabN
810
881
  frontStyle: "slab" | "shaker" | "raised-arch";
811
882
  panelReady: boolean;
812
883
  handleStyle: "none" | "bar" | "cutout" | "hole" | "knob";
813
- handlePosition: "top" | "auto" | "center";
884
+ handlePosition: "top" | "center" | "auto";
814
885
  frontOverlay: "full" | "inset";
815
886
  withBottomPanel: boolean;
816
887
  showPlinth: boolean;
@@ -940,9 +1011,9 @@ export declare function markSlabChangeDependents(previous: SlabNode, next: SlabN
940
1011
  parentId: string | null;
941
1012
  visible: boolean;
942
1013
  metadata: Record<string, unknown>;
943
- rotation: [number, number, number];
944
1014
  scale: [number, number, number];
945
- children: `item_${string}`[];
1015
+ rotation: [number, number, number];
1016
+ children: string[];
946
1017
  asset: {
947
1018
  id: string;
948
1019
  category: string;
@@ -956,7 +1027,7 @@ export declare function markSlabChangeDependents(previous: SlabNode, next: SlabN
956
1027
  scale: [number, number, number];
957
1028
  floorPlanUrl?: string | undefined;
958
1029
  isDraft?: boolean | undefined;
959
- attachTo?: "wall" | "wall-side" | "ceiling" | undefined;
1030
+ attachTo?: "wall" | "ceiling" | "wall-side" | undefined;
960
1031
  recessed?: boolean | undefined;
961
1032
  tags?: string[] | undefined;
962
1033
  functionTags?: string[] | undefined;
@@ -1011,14 +1082,122 @@ export declare function markSlabChangeDependents(previous: SlabNode, next: SlabN
1011
1082
  zoom?: number | undefined;
1012
1083
  } | undefined;
1013
1084
  side?: "front" | "back" | undefined;
1085
+ supportSlabId?: string | undefined;
1086
+ slots?: Record<string, string> | undefined;
1087
+ roofSegmentId?: string | undefined;
1014
1088
  wallId?: string | undefined;
1015
1089
  wallT?: number | undefined;
1016
- roofSegmentId?: string | undefined;
1017
1090
  roofFace?: "front" | "back" | "right" | "left" | undefined;
1018
1091
  blockFaceId?: string | undefined;
1019
- supportSlabId?: string | undefined;
1020
1092
  collectionIds?: `collection_${string}`[] | undefined;
1021
- slots?: Record<string, string> | undefined;
1093
+ } | {
1094
+ object: "node";
1095
+ position: [number, number, number];
1096
+ id: `procedural-item_${string}`;
1097
+ parentId: string | null;
1098
+ visible: boolean;
1099
+ metadata: Record<string, unknown>;
1100
+ rotation: [number, number, number];
1101
+ children: string[];
1102
+ slots: Record<string, string>;
1103
+ parameters: Record<string, number>;
1104
+ recipe: {
1105
+ version: 1;
1106
+ name: string;
1107
+ description: string;
1108
+ parameters: {
1109
+ id: string;
1110
+ label: string;
1111
+ default: number;
1112
+ min: number;
1113
+ max: number;
1114
+ step: number;
1115
+ unit: "count" | "m" | "rad";
1116
+ part?: string | undefined;
1117
+ axis?: "x" | "y" | "z" | undefined;
1118
+ }[];
1119
+ slots: {
1120
+ id: string;
1121
+ label: string;
1122
+ color: string;
1123
+ finish?: "wood" | "glass" | "metal" | undefined;
1124
+ }[];
1125
+ parts: {
1126
+ id: string;
1127
+ label: string;
1128
+ count: import("../../procedural-items/index.js").Expr;
1129
+ shapes: {
1130
+ id: string;
1131
+ primitive: "box" | "roundedBox" | "cylinder";
1132
+ slot: string;
1133
+ size: [import("../../procedural-items/index.js").Expr, import("../../procedural-items/index.js").Expr, import("../../procedural-items/index.js").Expr];
1134
+ position: [import("../../procedural-items/index.js").Expr, import("../../procedural-items/index.js").Expr, import("../../procedural-items/index.js").Expr];
1135
+ rotation?: [import("../../procedural-items/index.js").Expr, import("../../procedural-items/index.js").Expr, import("../../procedural-items/index.js").Expr] | undefined;
1136
+ radius?: import("../../procedural-items/index.js").Expr | undefined;
1137
+ support?: boolean | undefined;
1138
+ }[];
1139
+ }[];
1140
+ constraints: {
1141
+ left: import("../../procedural-items/index.js").Expr;
1142
+ relation: "lte" | "gte";
1143
+ right: import("../../procedural-items/index.js").Expr;
1144
+ message: string;
1145
+ }[];
1146
+ classification?: {
1147
+ category: string;
1148
+ functionTags: string[];
1149
+ tags: string[];
1150
+ } | undefined;
1151
+ mounting?: {
1152
+ attachTo: "ceiling" | "wall-side";
1153
+ reference: string;
1154
+ } | undefined;
1155
+ surfaces?: {
1156
+ id: string;
1157
+ label: string;
1158
+ position: [import("../../procedural-items/index.js").Expr, import("../../procedural-items/index.js").Expr, import("../../procedural-items/index.js").Expr];
1159
+ size: [import("../../procedural-items/index.js").Expr, import("../../procedural-items/index.js").Expr];
1160
+ part?: string | undefined;
1161
+ rotation?: [import("../../procedural-items/index.js").Expr, import("../../procedural-items/index.js").Expr, import("../../procedural-items/index.js").Expr] | undefined;
1162
+ }[] | undefined;
1163
+ };
1164
+ attachments: Record<string, string>;
1165
+ type: "procedural-item";
1166
+ name?: string | undefined;
1167
+ camera?: {
1168
+ position: [number, number, number];
1169
+ target: [number, number, number];
1170
+ mode: "perspective" | "orthographic";
1171
+ fov?: number | undefined;
1172
+ zoom?: number | undefined;
1173
+ } | undefined;
1174
+ side?: "front" | "back" | undefined;
1175
+ supportSlabId?: string | undefined;
1176
+ wallId?: string | undefined;
1177
+ } | {
1178
+ object: "node";
1179
+ position: [number, number, number];
1180
+ id: `imesh_${string}`;
1181
+ parentId: string | null;
1182
+ visible: boolean;
1183
+ metadata: Record<string, unknown>;
1184
+ rotation: [number, number, number];
1185
+ primitives: {
1186
+ positions: number[];
1187
+ indices: number[];
1188
+ color: string;
1189
+ opacity: number;
1190
+ normals?: number[] | undefined;
1191
+ }[];
1192
+ type: "imported-mesh";
1193
+ name?: string | undefined;
1194
+ camera?: {
1195
+ position: [number, number, number];
1196
+ target: [number, number, number];
1197
+ mode: "perspective" | "orthographic";
1198
+ fov?: number | undefined;
1199
+ zoom?: number | undefined;
1200
+ } | undefined;
1022
1201
  } | {
1023
1202
  object: "node";
1024
1203
  id: `zone_${string}`;
@@ -1100,7 +1279,7 @@ export declare function markSlabChangeDependents(previous: SlabNode, next: SlabN
1100
1279
  parentId: string | null;
1101
1280
  visible: boolean;
1102
1281
  metadata: Record<string, unknown>;
1103
- children: `item_${string}`[];
1282
+ children: (`item_${string}` | `procedural-item_${string}`)[];
1104
1283
  polygon: [number, number][];
1105
1284
  holes: [number, number][][];
1106
1285
  holeMetadata: {
@@ -1118,7 +1297,6 @@ export declare function markSlabChangeDependents(previous: SlabNode, next: SlabN
1118
1297
  fov?: number | undefined;
1119
1298
  zoom?: number | undefined;
1120
1299
  } | undefined;
1121
- height?: number | undefined;
1122
1300
  slots?: Record<string, string> | undefined;
1123
1301
  material?: {
1124
1302
  id?: string | undefined;
@@ -1138,6 +1316,7 @@ export declare function markSlabChangeDependents(previous: SlabNode, next: SlabN
1138
1316
  } | undefined;
1139
1317
  } | undefined;
1140
1318
  materialPreset?: string | undefined;
1319
+ height?: number | undefined;
1141
1320
  } | {
1142
1321
  object: "node";
1143
1322
  position: [number, number, number];
@@ -1275,7 +1454,7 @@ export declare function markSlabChangeDependents(previous: SlabNode, next: SlabN
1275
1454
  overhang: number;
1276
1455
  shingleThickness: number;
1277
1456
  managedByParent: boolean;
1278
- wallShell: "auto" | "include" | "omit";
1457
+ wallShell: "omit" | "auto" | "include";
1279
1458
  shedInsetEndPanels: boolean;
1280
1459
  gambrelLowerWidthRatio: number;
1281
1460
  gambrelLowerHeightRatio: number;
@@ -1395,14 +1574,14 @@ export declare function markSlabChangeDependents(previous: SlabNode, next: SlabN
1395
1574
  visible: boolean;
1396
1575
  metadata: Record<string, unknown>;
1397
1576
  rotation: [number, number, number];
1398
- height: number;
1399
- children: `item_${string}`[];
1577
+ children: string[];
1400
1578
  width: number;
1401
1579
  depth: number;
1580
+ height: number;
1402
1581
  style: "wall-shelf" | "bookshelf" | "open-rack" | "cubby";
1403
1582
  rows: number;
1404
- thickness: number;
1405
1583
  columns: number;
1584
+ thickness: number;
1406
1585
  withBack: boolean;
1407
1586
  withSides: boolean;
1408
1587
  withBottom: boolean;
@@ -1549,15 +1728,15 @@ export declare function markSlabChangeDependents(previous: SlabNode, next: SlabN
1549
1728
  totalRise?: number | undefined;
1550
1729
  } | {
1551
1730
  object: "node";
1552
- length: number;
1553
1731
  position: [number, number, number];
1554
1732
  id: `sseg_${string}`;
1555
1733
  parentId: string | null;
1556
1734
  visible: boolean;
1557
1735
  metadata: Record<string, unknown>;
1736
+ length: number;
1558
1737
  rotation: number;
1559
- height: number;
1560
1738
  width: number;
1739
+ height: number;
1561
1740
  thickness: number;
1562
1741
  stepCount: number;
1563
1742
  fillToFloor: boolean;
@@ -1597,10 +1776,10 @@ export declare function markSlabChangeDependents(previous: SlabNode, next: SlabN
1597
1776
  parentId: string | null;
1598
1777
  visible: boolean;
1599
1778
  metadata: Record<string, unknown>;
1600
- rotation: [number, number, number];
1601
- scale: number;
1602
- url: string | null;
1603
1779
  opacity: number;
1780
+ url: string | null;
1781
+ scale: number;
1782
+ rotation: [number, number, number];
1604
1783
  captureSession: {
1605
1784
  sessionId: string;
1606
1785
  schemaVersion?: number | undefined;
@@ -1624,10 +1803,10 @@ export declare function markSlabChangeDependents(previous: SlabNode, next: SlabN
1624
1803
  parentId: string | null;
1625
1804
  visible: boolean;
1626
1805
  metadata: Record<string, unknown>;
1627
- rotation: [number, number, number];
1628
- scale: number;
1629
- url: string;
1630
1806
  opacity: number;
1807
+ url: string;
1808
+ scale: number;
1809
+ rotation: [number, number, number];
1631
1810
  scaleReference: {
1632
1811
  start: [number, number];
1633
1812
  end: [number, number];
@@ -1767,8 +1946,8 @@ export declare function markSlabChangeDependents(previous: SlabNode, next: SlabN
1767
1946
  visible: boolean;
1768
1947
  metadata: Record<string, unknown>;
1769
1948
  rotation: [number, number, number];
1770
- height: number;
1771
1949
  width: number;
1950
+ height: number;
1772
1951
  constructionType: "framed" | "masonry";
1773
1952
  dimensionReference: "nominal" | "rough-opening" | "masonry-opening" | "finish-opening";
1774
1953
  operationState: number;
@@ -1802,9 +1981,6 @@ export declare function markSlabChangeDependents(previous: SlabNode, next: SlabN
1802
1981
  zoom?: number | undefined;
1803
1982
  } | undefined;
1804
1983
  side?: "front" | "back" | undefined;
1805
- wallId?: string | undefined;
1806
- roofSegmentId?: string | undefined;
1807
- roofFace?: "front" | "back" | "right" | "left" | undefined;
1808
1984
  slots?: Record<string, string> | undefined;
1809
1985
  material?: {
1810
1986
  id?: string | undefined;
@@ -1823,6 +1999,9 @@ export declare function markSlabChangeDependents(previous: SlabNode, next: SlabN
1823
1999
  scale?: number | undefined;
1824
2000
  } | undefined;
1825
2001
  } | undefined;
2002
+ roofSegmentId?: string | undefined;
2003
+ wallId?: string | undefined;
2004
+ roofFace?: "front" | "back" | "right" | "left" | undefined;
1826
2005
  mark?: string | undefined;
1827
2006
  roughOpeningWidth?: number | undefined;
1828
2007
  roughOpeningHeight?: number | undefined;
@@ -1840,9 +2019,9 @@ export declare function markSlabChangeDependents(previous: SlabNode, next: SlabN
1840
2019
  visible: boolean;
1841
2020
  metadata: Record<string, unknown>;
1842
2021
  rotation: [number, number, number];
1843
- height: number;
1844
2022
  width: number;
1845
- leafCount: 4 | 1 | 2 | 3;
2023
+ height: number;
2024
+ leafCount: 3 | 2 | 1 | 4;
1846
2025
  constructionType: "framed" | "masonry";
1847
2026
  dimensionReference: "nominal" | "rough-opening" | "masonry-opening" | "finish-opening";
1848
2027
  doorCategory: "interior" | "garage";
@@ -1866,7 +2045,7 @@ export declare function markSlabChangeDependents(previous: SlabNode, next: SlabN
1866
2045
  swingDirection: "inward" | "outward";
1867
2046
  swingAngle: number;
1868
2047
  segments: {
1869
- type: "glass" | "panel" | "empty";
2048
+ type: "glass" | "empty" | "panel";
1870
2049
  heightRatio: number;
1871
2050
  columnRatios: number[];
1872
2051
  dividerThickness: number;
@@ -1890,9 +2069,6 @@ export declare function markSlabChangeDependents(previous: SlabNode, next: SlabN
1890
2069
  zoom?: number | undefined;
1891
2070
  } | undefined;
1892
2071
  side?: "front" | "back" | undefined;
1893
- wallId?: string | undefined;
1894
- roofSegmentId?: string | undefined;
1895
- roofFace?: "front" | "back" | "right" | "left" | undefined;
1896
2072
  slots?: Record<string, string> | undefined;
1897
2073
  material?: {
1898
2074
  id?: string | undefined;
@@ -1911,6 +2087,9 @@ export declare function markSlabChangeDependents(previous: SlabNode, next: SlabN
1911
2087
  scale?: number | undefined;
1912
2088
  } | undefined;
1913
2089
  } | undefined;
2090
+ roofSegmentId?: string | undefined;
2091
+ wallId?: string | undefined;
2092
+ roofFace?: "front" | "back" | "right" | "left" | undefined;
1914
2093
  mark?: string | undefined;
1915
2094
  roughOpeningWidth?: number | undefined;
1916
2095
  roughOpeningHeight?: number | undefined;
@@ -1926,10 +2105,10 @@ export declare function markSlabChangeDependents(previous: SlabNode, next: SlabN
1926
2105
  visible: boolean;
1927
2106
  metadata: Record<string, unknown>;
1928
2107
  rotation: number;
1929
- height: number;
1930
2108
  materialPreset: string;
1931
2109
  width: number;
1932
2110
  depth: number;
2111
+ height: number;
1933
2112
  hoodOverhang: number;
1934
2113
  topTaper: number;
1935
2114
  capHeight: number;
@@ -1948,7 +2127,6 @@ export declare function markSlabChangeDependents(previous: SlabNode, next: SlabN
1948
2127
  fov?: number | undefined;
1949
2128
  zoom?: number | undefined;
1950
2129
  } | undefined;
1951
- roofSegmentId?: string | undefined;
1952
2130
  slots?: Record<string, string> | undefined;
1953
2131
  material?: {
1954
2132
  id?: string | undefined;
@@ -1967,17 +2145,18 @@ export declare function markSlabChangeDependents(previous: SlabNode, next: SlabN
1967
2145
  scale?: number | undefined;
1968
2146
  } | undefined;
1969
2147
  } | undefined;
2148
+ roofSegmentId?: string | undefined;
1970
2149
  } | {
1971
2150
  object: "node";
1972
- length: number;
1973
2151
  position: [number, number, number];
1974
2152
  id: `rvent_${string}`;
1975
2153
  parentId: string | null;
1976
2154
  visible: boolean;
1977
2155
  metadata: Record<string, unknown>;
2156
+ length: number;
1978
2157
  rotation: number;
1979
- height: number;
1980
2158
  width: number;
2159
+ height: number;
1981
2160
  style: "metal" | "standard" | "shingled";
1982
2161
  endCaps: boolean;
1983
2162
  type: "ridge-vent";
@@ -1989,7 +2168,6 @@ export declare function markSlabChangeDependents(previous: SlabNode, next: SlabN
1989
2168
  fov?: number | undefined;
1990
2169
  zoom?: number | undefined;
1991
2170
  } | undefined;
1992
- roofSegmentId?: string | undefined;
1993
2171
  material?: {
1994
2172
  id?: string | undefined;
1995
2173
  preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
@@ -2008,6 +2186,7 @@ export declare function markSlabChangeDependents(previous: SlabNode, next: SlabN
2008
2186
  } | undefined;
2009
2187
  } | undefined;
2010
2188
  materialPreset?: string | undefined;
2189
+ roofSegmentId?: string | undefined;
2011
2190
  } | {
2012
2191
  object: "node";
2013
2192
  position: [number, number, number];
@@ -2016,9 +2195,9 @@ export declare function markSlabChangeDependents(previous: SlabNode, next: SlabN
2016
2195
  visible: boolean;
2017
2196
  metadata: Record<string, unknown>;
2018
2197
  rotation: number;
2019
- height: number;
2020
2198
  materialPreset: string;
2021
- style: "globe" | "cylinder";
2199
+ height: number;
2200
+ style: "cylinder" | "globe";
2022
2201
  diameter: number;
2023
2202
  neckHeight: number;
2024
2203
  baseOverhang: number;
@@ -2033,7 +2212,6 @@ export declare function markSlabChangeDependents(previous: SlabNode, next: SlabN
2033
2212
  fov?: number | undefined;
2034
2213
  zoom?: number | undefined;
2035
2214
  } | undefined;
2036
- roofSegmentId?: string | undefined;
2037
2215
  slots?: Record<string, string> | undefined;
2038
2216
  material?: {
2039
2217
  id?: string | undefined;
@@ -2052,6 +2230,7 @@ export declare function markSlabChangeDependents(previous: SlabNode, next: SlabN
2052
2230
  scale?: number | undefined;
2053
2231
  } | undefined;
2054
2232
  } | undefined;
2233
+ roofSegmentId?: string | undefined;
2055
2234
  } | {
2056
2235
  object: "node";
2057
2236
  position: [number, number, number];
@@ -2060,10 +2239,10 @@ export declare function markSlabChangeDependents(previous: SlabNode, next: SlabN
2060
2239
  visible: boolean;
2061
2240
  metadata: Record<string, unknown>;
2062
2241
  rotation: number;
2063
- height: number;
2064
2242
  materialPreset: string;
2065
2243
  width: number;
2066
2244
  depth: number;
2245
+ height: number;
2067
2246
  roofStyle: "dome" | "pyramid";
2068
2247
  finial: boolean;
2069
2248
  type: "cupola";
@@ -2075,7 +2254,6 @@ export declare function markSlabChangeDependents(previous: SlabNode, next: SlabN
2075
2254
  fov?: number | undefined;
2076
2255
  zoom?: number | undefined;
2077
2256
  } | undefined;
2078
- roofSegmentId?: string | undefined;
2079
2257
  slots?: Record<string, string> | undefined;
2080
2258
  material?: {
2081
2259
  id?: string | undefined;
@@ -2094,6 +2272,7 @@ export declare function markSlabChangeDependents(previous: SlabNode, next: SlabN
2094
2272
  scale?: number | undefined;
2095
2273
  } | undefined;
2096
2274
  } | undefined;
2275
+ roofSegmentId?: string | undefined;
2097
2276
  } | {
2098
2277
  object: "node";
2099
2278
  position: [number, number, number];
@@ -2102,10 +2281,10 @@ export declare function markSlabChangeDependents(previous: SlabNode, next: SlabN
2102
2281
  visible: boolean;
2103
2282
  metadata: Record<string, unknown>;
2104
2283
  rotation: number;
2105
- height: number;
2106
2284
  materialPreset: string;
2107
2285
  width: number;
2108
2286
  depth: number;
2287
+ height: number;
2109
2288
  style: "half-round" | "scoop" | "slant-box";
2110
2289
  louverCount: number;
2111
2290
  backRatio: number;
@@ -2118,7 +2297,6 @@ export declare function markSlabChangeDependents(previous: SlabNode, next: SlabN
2118
2297
  fov?: number | undefined;
2119
2298
  zoom?: number | undefined;
2120
2299
  } | undefined;
2121
- roofSegmentId?: string | undefined;
2122
2300
  slots?: Record<string, string> | undefined;
2123
2301
  material?: {
2124
2302
  id?: string | undefined;
@@ -2137,21 +2315,22 @@ export declare function markSlabChangeDependents(previous: SlabNode, next: SlabN
2137
2315
  scale?: number | undefined;
2138
2316
  } | undefined;
2139
2317
  } | undefined;
2318
+ roofSegmentId?: string | undefined;
2140
2319
  } | {
2141
2320
  object: "node";
2142
- length: number;
2143
2321
  position: [number, number, number];
2144
2322
  id: `gutter_${string}`;
2145
2323
  parentId: string | null;
2146
2324
  visible: boolean;
2147
2325
  metadata: Record<string, unknown>;
2326
+ length: number;
2148
2327
  rotation: number;
2149
2328
  materialPreset: string;
2150
2329
  thickness: number;
2151
2330
  profile: "box" | "k-style" | "half-round";
2331
+ size: number;
2152
2332
  hangerStyle: "none" | "strap";
2153
2333
  hangerSpacing: number;
2154
- size: number;
2155
2334
  endCapLeft: boolean;
2156
2335
  endCapRight: boolean;
2157
2336
  outlets: {
@@ -2169,7 +2348,6 @@ export declare function markSlabChangeDependents(previous: SlabNode, next: SlabN
2169
2348
  fov?: number | undefined;
2170
2349
  zoom?: number | undefined;
2171
2350
  } | undefined;
2172
- roofSegmentId?: string | undefined;
2173
2351
  slots?: Record<string, string> | undefined;
2174
2352
  material?: {
2175
2353
  id?: string | undefined;
@@ -2188,6 +2366,7 @@ export declare function markSlabChangeDependents(previous: SlabNode, next: SlabN
2188
2366
  scale?: number | undefined;
2189
2367
  } | undefined;
2190
2368
  } | undefined;
2369
+ roofSegmentId?: string | undefined;
2191
2370
  arc?: {
2192
2371
  centerX: number;
2193
2372
  centerZ: number;
@@ -2244,7 +2423,6 @@ export declare function markSlabChangeDependents(previous: SlabNode, next: SlabN
2244
2423
  fov?: number | undefined;
2245
2424
  zoom?: number | undefined;
2246
2425
  } | undefined;
2247
- roofSegmentId?: string | undefined;
2248
2426
  material?: {
2249
2427
  id?: string | undefined;
2250
2428
  preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
@@ -2263,6 +2441,7 @@ export declare function markSlabChangeDependents(previous: SlabNode, next: SlabN
2263
2441
  } | undefined;
2264
2442
  } | undefined;
2265
2443
  materialPreset?: string | undefined;
2444
+ roofSegmentId?: string | undefined;
2266
2445
  topMaterial?: {
2267
2446
  id?: string | undefined;
2268
2447
  preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
@@ -2290,9 +2469,9 @@ export declare function markSlabChangeDependents(previous: SlabNode, next: SlabN
2290
2469
  metadata: Record<string, unknown>;
2291
2470
  rotation: number;
2292
2471
  rows: number;
2472
+ columns: number;
2293
2473
  frameThickness: number;
2294
2474
  frameDepth: number;
2295
- columns: number;
2296
2475
  panelWidth: number;
2297
2476
  panelHeight: number;
2298
2477
  gapX: number;
@@ -2309,7 +2488,6 @@ export declare function markSlabChangeDependents(previous: SlabNode, next: SlabN
2309
2488
  fov?: number | undefined;
2310
2489
  zoom?: number | undefined;
2311
2490
  } | undefined;
2312
- roofSegmentId?: string | undefined;
2313
2491
  material?: {
2314
2492
  id?: string | undefined;
2315
2493
  preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
@@ -2328,6 +2506,7 @@ export declare function markSlabChangeDependents(previous: SlabNode, next: SlabN
2328
2506
  } | undefined;
2329
2507
  } | undefined;
2330
2508
  materialPreset?: string | undefined;
2509
+ roofSegmentId?: string | undefined;
2331
2510
  panelMaterial?: {
2332
2511
  id?: string | undefined;
2333
2512
  preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
@@ -2356,20 +2535,20 @@ export declare function markSlabChangeDependents(previous: SlabNode, next: SlabN
2356
2535
  visible: boolean;
2357
2536
  metadata: Record<string, unknown>;
2358
2537
  rotation: number;
2359
- height: number;
2360
2538
  width: number;
2539
+ height: number;
2540
+ glassThickness: number;
2361
2541
  operationState: number;
2362
- slideDirection: "z" | "x";
2542
+ slideDirection: "x" | "z";
2363
2543
  frameThickness: number;
2364
2544
  frameDepth: number;
2365
2545
  curbHeight: number;
2366
2546
  cutoutOffset: number;
2367
2547
  skylightType: "flat" | "sliding" | "opening" | "walk-on" | "lantern";
2368
- glassThickness: number;
2369
2548
  lanternHeight: number;
2370
2549
  lanternTopScale: number;
2371
2550
  openingAngle: number;
2372
- openingSide: "right" | "left" | "top" | "bottom";
2551
+ openingSide: "top" | "right" | "left" | "bottom";
2373
2552
  motorHousing: boolean;
2374
2553
  slideFraction: number;
2375
2554
  trackWidth: number;
@@ -2384,7 +2563,6 @@ export declare function markSlabChangeDependents(previous: SlabNode, next: SlabN
2384
2563
  fov?: number | undefined;
2385
2564
  zoom?: number | undefined;
2386
2565
  } | undefined;
2387
- roofSegmentId?: string | undefined;
2388
2566
  material?: {
2389
2567
  id?: string | undefined;
2390
2568
  preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
@@ -2403,6 +2581,7 @@ export declare function markSlabChangeDependents(previous: SlabNode, next: SlabN
2403
2581
  } | undefined;
2404
2582
  } | undefined;
2405
2583
  materialPreset?: string | undefined;
2584
+ roofSegmentId?: string | undefined;
2406
2585
  surfaceNormal?: [number, number, number] | undefined;
2407
2586
  glassMaterial?: {
2408
2587
  id?: string | undefined;
@@ -2430,10 +2609,10 @@ export declare function markSlabChangeDependents(previous: SlabNode, next: SlabN
2430
2609
  visible: boolean;
2431
2610
  metadata: Record<string, unknown>;
2432
2611
  rotation: number;
2433
- height: number;
2434
2612
  children: `window_${string}`[];
2435
2613
  width: number;
2436
2614
  depth: number;
2615
+ height: number;
2437
2616
  roofType: "flat" | "hip" | "gable" | "shed" | "gambrel" | "dutch" | "mansard" | "conical";
2438
2617
  roofHeight: number;
2439
2618
  shedHighSide: "front" | "back";
@@ -2462,7 +2641,6 @@ export declare function markSlabChangeDependents(previous: SlabNode, next: SlabN
2462
2641
  fov?: number | undefined;
2463
2642
  zoom?: number | undefined;
2464
2643
  } | undefined;
2465
- roofSegmentId?: string | undefined;
2466
2644
  material?: {
2467
2645
  id?: string | undefined;
2468
2646
  preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
@@ -2481,6 +2659,7 @@ export declare function markSlabChangeDependents(previous: SlabNode, next: SlabN
2481
2659
  } | undefined;
2482
2660
  } | undefined;
2483
2661
  materialPreset?: string | undefined;
2662
+ roofSegmentId?: string | undefined;
2484
2663
  topMaterial?: {
2485
2664
  id?: string | undefined;
2486
2665
  preset?: "custom" | "white" | "brick" | "concrete" | "wood" | "glass" | "metal" | "plaster" | "tile" | "marble" | undefined;
@@ -2537,11 +2716,11 @@ export declare function markSlabChangeDependents(previous: SlabNode, next: SlabN
2537
2716
  sideMaterialPreset?: string | undefined;
2538
2717
  } | {
2539
2718
  object: "node";
2540
- length: number;
2541
2719
  id: `downspout_${string}`;
2542
2720
  parentId: string | null;
2543
2721
  visible: boolean;
2544
2722
  metadata: Record<string, unknown>;
2723
+ length: number;
2545
2724
  materialPreset: string;
2546
2725
  diameter: number;
2547
2726
  shape: "round" | "auto" | "rect";
@@ -2581,13 +2760,13 @@ export declare function markSlabChangeDependents(previous: SlabNode, next: SlabN
2581
2760
  lengthMode?: "manual" | "to-ground" | undefined;
2582
2761
  } | {
2583
2762
  object: "node";
2584
- path: [number, number, number][];
2585
2763
  id: `duct-segment_${string}`;
2586
2764
  parentId: string | null;
2587
2765
  visible: boolean;
2588
2766
  metadata: Record<string, unknown>;
2589
- height: number;
2767
+ path: [number, number, number][];
2590
2768
  width: number;
2769
+ height: number;
2591
2770
  diameter: number;
2592
2771
  shape: "round" | "rect" | "oval";
2593
2772
  roll: number;
@@ -2630,10 +2809,10 @@ export declare function markSlabChangeDependents(previous: SlabNode, next: SlabN
2630
2809
  visible: boolean;
2631
2810
  metadata: Record<string, unknown>;
2632
2811
  rotation: [number, number, number];
2633
- height: number;
2634
2812
  width: number;
2635
- diameter: number;
2813
+ height: number;
2636
2814
  angle: number;
2815
+ diameter: number;
2637
2816
  shape: "round" | "rect" | "oval";
2638
2817
  ductMaterial: "sheet-metal" | "flex" | "duct-board";
2639
2818
  system: "supply" | "return";
@@ -2692,9 +2871,9 @@ export declare function markSlabChangeDependents(previous: SlabNode, next: SlabN
2692
2871
  visible: boolean;
2693
2872
  metadata: Record<string, unknown>;
2694
2873
  rotation: number;
2695
- height: number;
2696
2874
  width: number;
2697
2875
  depth: number;
2876
+ height: number;
2698
2877
  equipmentType: "furnace" | "air-handler" | "condenser";
2699
2878
  supplyShape: "round" | "rect" | "oval";
2700
2879
  returnShape: "round" | "rect" | "oval";
@@ -2716,11 +2895,11 @@ export declare function markSlabChangeDependents(previous: SlabNode, next: SlabN
2716
2895
  supportSlabId?: string | undefined;
2717
2896
  } | {
2718
2897
  object: "node";
2719
- path: [number, number, number][];
2720
2898
  id: `lineset_${string}`;
2721
2899
  parentId: string | null;
2722
2900
  visible: boolean;
2723
2901
  metadata: Record<string, unknown>;
2902
+ path: [number, number, number][];
2724
2903
  insulated: boolean;
2725
2904
  suctionDiameter: number;
2726
2905
  liquidDiameter: number;
@@ -2735,11 +2914,11 @@ export declare function markSlabChangeDependents(previous: SlabNode, next: SlabN
2735
2914
  } | undefined;
2736
2915
  } | {
2737
2916
  object: "node";
2738
- path: [number, number, number][];
2739
2917
  id: `liquid-line_${string}`;
2740
2918
  parentId: string | null;
2741
2919
  visible: boolean;
2742
2920
  metadata: Record<string, unknown>;
2921
+ path: [number, number, number][];
2743
2922
  diameter: number;
2744
2923
  type: "liquid-line";
2745
2924
  name?: string | undefined;
@@ -2752,14 +2931,14 @@ export declare function markSlabChangeDependents(previous: SlabNode, next: SlabN
2752
2931
  } | undefined;
2753
2932
  } | {
2754
2933
  object: "node";
2755
- path: [number, number, number][];
2756
2934
  id: `pipe-segment_${string}`;
2757
2935
  parentId: string | null;
2758
2936
  visible: boolean;
2759
2937
  metadata: Record<string, unknown>;
2938
+ path: [number, number, number][];
2760
2939
  diameter: number;
2761
2940
  system: "waste" | "vent";
2762
- pipeMaterial: "pvc" | "abs" | "cast-iron";
2941
+ pipeMaterial: "abs" | "pvc" | "cast-iron";
2763
2942
  type: "pipe-segment";
2764
2943
  name?: string | undefined;
2765
2944
  camera?: {
@@ -2793,12 +2972,12 @@ export declare function markSlabChangeDependents(previous: SlabNode, next: SlabN
2793
2972
  visible: boolean;
2794
2973
  metadata: Record<string, unknown>;
2795
2974
  rotation: [number, number, number];
2796
- diameter: number;
2797
2975
  angle: number;
2976
+ diameter: number;
2798
2977
  system: "waste" | "vent";
2799
2978
  fittingType: "elbow" | "cross" | "reducer" | "end-cap" | "coupling" | "wye" | "sanitary-tee" | "cleanout";
2800
2979
  diameter2: number;
2801
- pipeMaterial: "pvc" | "abs" | "cast-iron";
2980
+ pipeMaterial: "abs" | "pvc" | "cast-iron";
2802
2981
  cleanoutStyle: "end" | "inline";
2803
2982
  type: "pipe-fitting";
2804
2983
  name?: string | undefined;
@@ -2818,7 +2997,7 @@ export declare function markSlabChangeDependents(previous: SlabNode, next: SlabN
2818
2997
  metadata: Record<string, unknown>;
2819
2998
  rotation: number;
2820
2999
  diameter: number;
2821
- pipeMaterial: "pvc" | "abs" | "cast-iron";
3000
+ pipeMaterial: "abs" | "pvc" | "cast-iron";
2822
3001
  armLengthM: number;
2823
3002
  type: "pipe-trap";
2824
3003
  name?: string | undefined;