@pascal-app/core 0.9.2 → 1.0.0-beta.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 (339) hide show
  1. package/README.md +17 -10
  2. package/dist/events/bus.d.ts +21 -2
  3. package/dist/events/bus.d.ts.map +1 -1
  4. package/dist/hooks/spatial-grid/floor-placed-elevation.d.ts +17 -1
  5. package/dist/hooks/spatial-grid/floor-placed-elevation.d.ts.map +1 -1
  6. package/dist/hooks/spatial-grid/floor-placed-elevation.js +61 -8
  7. package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts +116 -66
  8. package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts.map +1 -1
  9. package/dist/hooks/spatial-grid/spatial-grid-manager.js +319 -441
  10. package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts +46 -1
  11. package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts.map +1 -1
  12. package/dist/hooks/spatial-grid/spatial-grid-sync.js +204 -12
  13. package/dist/hooks/spatial-grid/support-host-id.d.ts +3 -0
  14. package/dist/hooks/spatial-grid/support-host-id.d.ts.map +1 -0
  15. package/dist/hooks/spatial-grid/support-host-id.js +2 -0
  16. package/dist/hooks/spatial-grid/support-host-patch.d.ts +51 -0
  17. package/dist/hooks/spatial-grid/support-host-patch.d.ts.map +1 -0
  18. package/dist/hooks/spatial-grid/support-host-patch.js +164 -0
  19. package/dist/index.d.ts +23 -11
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +22 -10
  22. package/dist/lib/measurement-geometry.d.ts +4 -0
  23. package/dist/lib/measurement-geometry.d.ts.map +1 -1
  24. package/dist/lib/measurement-geometry.js +27 -10
  25. package/dist/lib/slab-polygon.d.ts.map +1 -1
  26. package/dist/lib/slab-polygon.js +33 -1
  27. package/dist/lib/space-detection.d.ts +15 -4
  28. package/dist/lib/space-detection.d.ts.map +1 -1
  29. package/dist/lib/space-detection.js +232 -91
  30. package/dist/lib/terrain-brush.d.ts +163 -0
  31. package/dist/lib/terrain-brush.d.ts.map +1 -0
  32. package/dist/lib/terrain-brush.js +359 -0
  33. package/dist/lib/terrain-codec.d.ts +51 -0
  34. package/dist/lib/terrain-codec.d.ts.map +1 -0
  35. package/dist/lib/terrain-codec.js +167 -0
  36. package/dist/lib/terrain-field.d.ts +150 -0
  37. package/dist/lib/terrain-field.d.ts.map +1 -0
  38. package/dist/lib/terrain-field.js +248 -0
  39. package/dist/lib/terrain-raycast.d.ts +44 -0
  40. package/dist/lib/terrain-raycast.d.ts.map +1 -0
  41. package/dist/lib/terrain-raycast.js +188 -0
  42. package/dist/lib/terrain-source.d.ts +60 -0
  43. package/dist/lib/terrain-source.d.ts.map +1 -0
  44. package/dist/lib/terrain-source.js +90 -0
  45. package/dist/lib/terrain-support.d.ts +85 -0
  46. package/dist/lib/terrain-support.d.ts.map +1 -0
  47. package/dist/lib/terrain-support.js +218 -0
  48. package/dist/lib/zone-quantities.d.ts +1 -1
  49. package/dist/lib/zone-quantities.d.ts.map +1 -1
  50. package/dist/lib/zone-quantities.js +311 -66
  51. package/dist/material-library.d.ts +9 -1
  52. package/dist/material-library.d.ts.map +1 -1
  53. package/dist/material-library.js +56 -4
  54. package/dist/registry/handles.d.ts +16 -1
  55. package/dist/registry/handles.d.ts.map +1 -1
  56. package/dist/registry/index.d.ts +1 -1
  57. package/dist/registry/index.d.ts.map +1 -1
  58. package/dist/registry/subtree.d.ts.map +1 -1
  59. package/dist/registry/subtree.js +5 -2
  60. package/dist/registry/types.d.ts +83 -1
  61. package/dist/registry/types.d.ts.map +1 -1
  62. package/dist/schema/index.d.ts +6 -3
  63. package/dist/schema/index.d.ts.map +1 -1
  64. package/dist/schema/index.js +6 -3
  65. package/dist/schema/nodes/cabinet.d.ts +2 -0
  66. package/dist/schema/nodes/cabinet.d.ts.map +1 -1
  67. package/dist/schema/nodes/cabinet.js +4 -2
  68. package/dist/schema/nodes/ceiling.d.ts +1 -1
  69. package/dist/schema/nodes/ceiling.d.ts.map +1 -1
  70. package/dist/schema/nodes/ceiling.js +7 -1
  71. package/dist/schema/nodes/column.d.ts +1 -0
  72. package/dist/schema/nodes/column.d.ts.map +1 -1
  73. package/dist/schema/nodes/column.js +2 -0
  74. package/dist/schema/nodes/construction-dimension.d.ts +195 -0
  75. package/dist/schema/nodes/construction-dimension.d.ts.map +1 -0
  76. package/dist/schema/nodes/construction-dimension.js +151 -0
  77. package/dist/schema/nodes/door.d.ts +29 -0
  78. package/dist/schema/nodes/door.d.ts.map +1 -1
  79. package/dist/schema/nodes/door.js +20 -0
  80. package/dist/schema/nodes/duct-terminal.d.ts +1 -0
  81. package/dist/schema/nodes/duct-terminal.d.ts.map +1 -1
  82. package/dist/schema/nodes/duct-terminal.js +2 -0
  83. package/dist/schema/nodes/fence.d.ts +2 -0
  84. package/dist/schema/nodes/fence.d.ts.map +1 -1
  85. package/dist/schema/nodes/fence.js +8 -0
  86. package/dist/schema/nodes/hvac-equipment.d.ts +1 -0
  87. package/dist/schema/nodes/hvac-equipment.d.ts.map +1 -1
  88. package/dist/schema/nodes/hvac-equipment.js +2 -0
  89. package/dist/schema/nodes/item.d.ts +1 -0
  90. package/dist/schema/nodes/item.d.ts.map +1 -1
  91. package/dist/schema/nodes/item.js +13 -0
  92. package/dist/schema/nodes/level.d.ts +2 -1
  93. package/dist/schema/nodes/level.d.ts.map +1 -1
  94. package/dist/schema/nodes/level.js +12 -33
  95. package/dist/schema/nodes/shelf.d.ts +1 -0
  96. package/dist/schema/nodes/shelf.d.ts.map +1 -1
  97. package/dist/schema/nodes/shelf.js +2 -0
  98. package/dist/schema/nodes/site.d.ts +9 -0
  99. package/dist/schema/nodes/site.d.ts.map +1 -1
  100. package/dist/schema/nodes/site.js +8 -6
  101. package/dist/schema/nodes/slab.d.ts +5 -0
  102. package/dist/schema/nodes/slab.d.ts.map +1 -1
  103. package/dist/schema/nodes/slab.js +14 -2
  104. package/dist/schema/nodes/spawn.d.ts +1 -0
  105. package/dist/schema/nodes/spawn.d.ts.map +1 -1
  106. package/dist/schema/nodes/spawn.js +2 -0
  107. package/dist/schema/nodes/stair.d.ts +3 -1
  108. package/dist/schema/nodes/stair.d.ts.map +1 -1
  109. package/dist/schema/nodes/stair.js +8 -1
  110. package/dist/schema/nodes/structural-grid.d.ts +27 -0
  111. package/dist/schema/nodes/structural-grid.d.ts.map +1 -0
  112. package/dist/schema/nodes/structural-grid.js +17 -0
  113. package/dist/schema/nodes/wall.d.ts +5 -2
  114. package/dist/schema/nodes/wall.d.ts.map +1 -1
  115. package/dist/schema/nodes/wall.js +13 -4
  116. package/dist/schema/nodes/window.d.ts +29 -0
  117. package/dist/schema/nodes/window.d.ts.map +1 -1
  118. package/dist/schema/nodes/window.js +18 -0
  119. package/dist/schema/nodes/zone.d.ts +20 -0
  120. package/dist/schema/nodes/zone.d.ts.map +1 -1
  121. package/dist/schema/nodes/zone.js +15 -0
  122. package/dist/schema/terrain.d.ts +28 -0
  123. package/dist/schema/terrain.d.ts.map +1 -0
  124. package/dist/schema/terrain.js +30 -0
  125. package/dist/schema/types.d.ts +211 -3
  126. package/dist/schema/types.d.ts.map +1 -1
  127. package/dist/schema/types.js +4 -0
  128. package/dist/services/__fixtures__/wall-plane-top-boundary-repro.d.ts +80 -0
  129. package/dist/services/__fixtures__/wall-plane-top-boundary-repro.d.ts.map +1 -0
  130. package/dist/services/__fixtures__/wall-plane-top-boundary-repro.js +89 -0
  131. package/dist/services/index.d.ts +2 -1
  132. package/dist/services/index.d.ts.map +1 -1
  133. package/dist/services/index.js +2 -1
  134. package/dist/services/level-height.d.ts +8 -9
  135. package/dist/services/level-height.d.ts.map +1 -1
  136. package/dist/services/level-height.js +48 -16
  137. package/dist/services/storey.d.ts +103 -0
  138. package/dist/services/storey.d.ts.map +1 -0
  139. package/dist/services/storey.js +296 -0
  140. package/dist/store/actions/node-actions.d.ts.map +1 -1
  141. package/dist/store/actions/node-actions.js +47 -3
  142. package/dist/store/history-control.d.ts +20 -0
  143. package/dist/store/history-control.d.ts.map +1 -1
  144. package/dist/store/history-control.js +110 -13
  145. package/dist/store/use-live-terrain.d.ts +65 -0
  146. package/dist/store/use-live-terrain.d.ts.map +1 -0
  147. package/dist/store/use-live-terrain.js +31 -0
  148. package/dist/store/use-live-transforms.d.ts +8 -0
  149. package/dist/store/use-live-transforms.d.ts.map +1 -1
  150. package/dist/store/use-scene.d.ts +31 -2
  151. package/dist/store/use-scene.d.ts.map +1 -1
  152. package/dist/store/use-scene.js +638 -8
  153. package/dist/systems/elevator/elevator-opening-system.d.ts +1 -0
  154. package/dist/systems/elevator/elevator-opening-system.d.ts.map +1 -1
  155. package/dist/systems/elevator/elevator-opening-system.js +27 -21
  156. package/dist/systems/elevator/elevator-service.d.ts +0 -2
  157. package/dist/systems/elevator/elevator-service.d.ts.map +1 -1
  158. package/dist/systems/elevator/elevator-service.js +2 -24
  159. package/dist/systems/slab/slab-placement.d.ts +11 -0
  160. package/dist/systems/slab/slab-placement.d.ts.map +1 -0
  161. package/dist/systems/slab/slab-placement.js +14 -0
  162. package/dist/systems/slab/slab-support.d.ts +150 -0
  163. package/dist/systems/slab/slab-support.d.ts.map +1 -0
  164. package/dist/systems/slab/slab-support.js +575 -0
  165. package/dist/systems/stair/stair-opening-preview.d.ts +1060 -935
  166. package/dist/systems/stair/stair-opening-preview.d.ts.map +1 -1
  167. package/dist/systems/stair/stair-opening-sync.d.ts.map +1 -1
  168. package/dist/systems/stair/stair-opening-sync.js +18 -15
  169. package/dist/systems/stair/stair-opening-system.d.ts.map +1 -1
  170. package/dist/systems/stair/stair-opening-system.js +32 -4
  171. package/dist/systems/stair/stair-rise.d.ts +22 -0
  172. package/dist/systems/stair/stair-rise.d.ts.map +1 -0
  173. package/dist/systems/stair/stair-rise.js +79 -0
  174. package/dist/systems/wall/wall-curve.d.ts +10 -0
  175. package/dist/systems/wall/wall-curve.d.ts.map +1 -1
  176. package/dist/systems/wall/wall-curve.js +1 -1
  177. package/dist/systems/wall/wall-mitering.js +6 -6
  178. package/dist/systems/wall/wall-top.d.ts +40 -0
  179. package/dist/systems/wall/wall-top.d.ts.map +1 -0
  180. package/dist/systems/wall/wall-top.js +46 -0
  181. package/dist/utils/clone-scene-graph.d.ts.map +1 -1
  182. package/dist/utils/clone-scene-graph.js +34 -3
  183. package/dist/utils/heal-scene-graph.d.ts +1 -1
  184. package/dist/utils/heal-scene-graph.d.ts.map +1 -1
  185. package/dist/utils/heal-scene-graph.js +25 -9
  186. package/dist/validation/validate-build-json.d.ts +2 -0
  187. package/dist/validation/validate-build-json.d.ts.map +1 -1
  188. package/dist/validation/validate-build-json.js +59 -3
  189. package/package.json +2 -2
  190. package/dist/hooks/scene-registry/scene-registry.test.d.ts +0 -2
  191. package/dist/hooks/scene-registry/scene-registry.test.d.ts.map +0 -1
  192. package/dist/hooks/scene-registry/scene-registry.test.js +0 -26
  193. package/dist/hooks/spatial-grid/floor-placed-elevation.test.d.ts +0 -2
  194. package/dist/hooks/spatial-grid/floor-placed-elevation.test.d.ts.map +0 -1
  195. package/dist/hooks/spatial-grid/floor-placed-elevation.test.js +0 -366
  196. package/dist/hooks/spatial-grid/wall-slab-overlap.test.d.ts +0 -2
  197. package/dist/hooks/spatial-grid/wall-slab-overlap.test.d.ts.map +0 -1
  198. package/dist/hooks/spatial-grid/wall-slab-overlap.test.js +0 -363
  199. package/dist/lib/measurement-geometry.test.d.ts +0 -2
  200. package/dist/lib/measurement-geometry.test.d.ts.map +0 -1
  201. package/dist/lib/measurement-geometry.test.js +0 -102
  202. package/dist/lib/slab-polygon.test.d.ts +0 -2
  203. package/dist/lib/slab-polygon.test.d.ts.map +0 -1
  204. package/dist/lib/slab-polygon.test.js +0 -635
  205. package/dist/lib/space-detection-pause.test.d.ts +0 -2
  206. package/dist/lib/space-detection-pause.test.d.ts.map +0 -1
  207. package/dist/lib/space-detection-pause.test.js +0 -42
  208. package/dist/lib/space-detection.test.d.ts +0 -2
  209. package/dist/lib/space-detection.test.d.ts.map +0 -1
  210. package/dist/lib/space-detection.test.js +0 -376
  211. package/dist/lib/zone-quantities.test.d.ts +0 -2
  212. package/dist/lib/zone-quantities.test.d.ts.map +0 -1
  213. package/dist/lib/zone-quantities.test.js +0 -82
  214. package/dist/registry/registry.test.d.ts +0 -2
  215. package/dist/registry/registry.test.d.ts.map +0 -1
  216. package/dist/registry/registry.test.js +0 -196
  217. package/dist/registry/relations-resolver.test.d.ts +0 -2
  218. package/dist/registry/relations-resolver.test.d.ts.map +0 -1
  219. package/dist/registry/relations-resolver.test.js +0 -183
  220. package/dist/registry/scene-api.test.d.ts +0 -2
  221. package/dist/registry/scene-api.test.d.ts.map +0 -1
  222. package/dist/registry/scene-api.test.js +0 -183
  223. package/dist/registry/subtree.test.d.ts +0 -2
  224. package/dist/registry/subtree.test.d.ts.map +0 -1
  225. package/dist/registry/subtree.test.js +0 -163
  226. package/dist/schema/asset-url.test.d.ts +0 -2
  227. package/dist/schema/asset-url.test.d.ts.map +0 -1
  228. package/dist/schema/asset-url.test.js +0 -134
  229. package/dist/schema/material.test.d.ts +0 -2
  230. package/dist/schema/material.test.d.ts.map +0 -1
  231. package/dist/schema/material.test.js +0 -43
  232. package/dist/schema/nodes/measurement.test.d.ts +0 -2
  233. package/dist/schema/nodes/measurement.test.d.ts.map +0 -1
  234. package/dist/schema/nodes/measurement.test.js +0 -139
  235. package/dist/schema/nodes/ridge-vent-defaults.test.d.ts +0 -2
  236. package/dist/schema/nodes/ridge-vent-defaults.test.d.ts.map +0 -1
  237. package/dist/schema/nodes/ridge-vent-defaults.test.js +0 -205
  238. package/dist/schema/nodes/roof-segment-shape.test.d.ts +0 -2
  239. package/dist/schema/nodes/roof-segment-shape.test.d.ts.map +0 -1
  240. package/dist/schema/nodes/roof-segment-shape.test.js +0 -175
  241. package/dist/schema/nodes/roof-segment-surface.test.d.ts +0 -2
  242. package/dist/schema/nodes/roof-segment-surface.test.d.ts.map +0 -1
  243. package/dist/schema/nodes/roof-segment-surface.test.js +0 -48
  244. package/dist/schema/nodes/roof-segment-trim.test.d.ts +0 -2
  245. package/dist/schema/nodes/roof-segment-trim.test.d.ts.map +0 -1
  246. package/dist/schema/nodes/roof-segment-trim.test.js +0 -107
  247. package/dist/schema/nodes/roof-segment-walls.test.d.ts +0 -2
  248. package/dist/schema/nodes/roof-segment-walls.test.d.ts.map +0 -1
  249. package/dist/schema/nodes/roof-segment-walls.test.js +0 -92
  250. package/dist/schema/nodes/wall.test.d.ts +0 -2
  251. package/dist/schema/nodes/wall.test.d.ts.map +0 -1
  252. package/dist/schema/nodes/wall.test.js +0 -208
  253. package/dist/services/alignment-anchors.test.d.ts +0 -2
  254. package/dist/services/alignment-anchors.test.d.ts.map +0 -1
  255. package/dist/services/alignment-anchors.test.js +0 -383
  256. package/dist/services/alignment.test.d.ts +0 -2
  257. package/dist/services/alignment.test.d.ts.map +0 -1
  258. package/dist/services/alignment.test.js +0 -92
  259. package/dist/services/drag-session.test.d.ts +0 -2
  260. package/dist/services/drag-session.test.d.ts.map +0 -1
  261. package/dist/services/drag-session.test.js +0 -219
  262. package/dist/services/hosting.test.d.ts +0 -2
  263. package/dist/services/hosting.test.d.ts.map +0 -1
  264. package/dist/services/hosting.test.js +0 -230
  265. package/dist/services/movement.test.d.ts +0 -2
  266. package/dist/services/movement.test.d.ts.map +0 -1
  267. package/dist/services/movement.test.js +0 -133
  268. package/dist/services/opening-guides.test.d.ts +0 -2
  269. package/dist/services/opening-guides.test.d.ts.map +0 -1
  270. package/dist/services/opening-guides.test.js +0 -208
  271. package/dist/services/port-connectivity.test.d.ts +0 -2
  272. package/dist/services/port-connectivity.test.d.ts.map +0 -1
  273. package/dist/services/port-connectivity.test.js +0 -297
  274. package/dist/services/riser-diagram.test.d.ts +0 -2
  275. package/dist/services/riser-diagram.test.d.ts.map +0 -1
  276. package/dist/services/riser-diagram.test.js +0 -66
  277. package/dist/services/single-undo-dance.test.d.ts +0 -2
  278. package/dist/services/single-undo-dance.test.d.ts.map +0 -1
  279. package/dist/services/single-undo-dance.test.js +0 -210
  280. package/dist/services/snap.test.d.ts +0 -2
  281. package/dist/services/snap.test.d.ts.map +0 -1
  282. package/dist/services/snap.test.js +0 -137
  283. package/dist/services/system-graph.test.d.ts +0 -2
  284. package/dist/services/system-graph.test.d.ts.map +0 -1
  285. package/dist/services/system-graph.test.js +0 -138
  286. package/dist/services/validate-dwv.test.d.ts +0 -2
  287. package/dist/services/validate-dwv.test.d.ts.map +0 -1
  288. package/dist/services/validate-dwv.test.js +0 -109
  289. package/dist/store/actions/node-mutation-sanitize.test.d.ts +0 -2
  290. package/dist/store/actions/node-mutation-sanitize.test.d.ts.map +0 -1
  291. package/dist/store/actions/node-mutation-sanitize.test.js +0 -147
  292. package/dist/store/actions/reparent.test.d.ts +0 -2
  293. package/dist/store/actions/reparent.test.d.ts.map +0 -1
  294. package/dist/store/actions/reparent.test.js +0 -212
  295. package/dist/store/actions/ridge-vent-update.test.d.ts +0 -2
  296. package/dist/store/actions/ridge-vent-update.test.d.ts.map +0 -1
  297. package/dist/store/actions/ridge-vent-update.test.js +0 -264
  298. package/dist/store/use-scene-dirty-tracking.test.d.ts +0 -2
  299. package/dist/store/use-scene-dirty-tracking.test.d.ts.map +0 -1
  300. package/dist/store/use-scene-dirty-tracking.test.js +0 -68
  301. package/dist/store/use-scene-elevator-migration.test.d.ts +0 -2
  302. package/dist/store/use-scene-elevator-migration.test.d.ts.map +0 -1
  303. package/dist/store/use-scene-elevator-migration.test.js +0 -109
  304. package/dist/store/use-scene-measurement-roundtrip.test.d.ts +0 -2
  305. package/dist/store/use-scene-measurement-roundtrip.test.d.ts.map +0 -1
  306. package/dist/store/use-scene-measurement-roundtrip.test.js +0 -97
  307. package/dist/store/use-scene-plugins.test.d.ts +0 -2
  308. package/dist/store/use-scene-plugins.test.d.ts.map +0 -1
  309. package/dist/store/use-scene-plugins.test.js +0 -51
  310. package/dist/store/use-scene-wall-slot-migration.test.d.ts +0 -2
  311. package/dist/store/use-scene-wall-slot-migration.test.d.ts.map +0 -1
  312. package/dist/store/use-scene-wall-slot-migration.test.js +0 -210
  313. package/dist/store/use-scene-window-migration.test.d.ts +0 -2
  314. package/dist/store/use-scene-window-migration.test.d.ts.map +0 -1
  315. package/dist/store/use-scene-window-migration.test.js +0 -85
  316. package/dist/systems/elevator/elevator-opening-sync.test.d.ts +0 -2
  317. package/dist/systems/elevator/elevator-opening-sync.test.d.ts.map +0 -1
  318. package/dist/systems/elevator/elevator-opening-sync.test.js +0 -146
  319. package/dist/systems/elevator/elevator-runtime.test.d.ts +0 -2
  320. package/dist/systems/elevator/elevator-runtime.test.d.ts.map +0 -1
  321. package/dist/systems/elevator/elevator-runtime.test.js +0 -64
  322. package/dist/systems/fence/fence-spline.test.d.ts +0 -2
  323. package/dist/systems/fence/fence-spline.test.d.ts.map +0 -1
  324. package/dist/systems/fence/fence-spline.test.js +0 -136
  325. package/dist/systems/stair/stair-opening-preview.test.d.ts +0 -2
  326. package/dist/systems/stair/stair-opening-preview.test.d.ts.map +0 -1
  327. package/dist/systems/stair/stair-opening-preview.test.js +0 -80
  328. package/dist/systems/stair/stair-opening-sync.test.d.ts +0 -2
  329. package/dist/systems/stair/stair-opening-sync.test.d.ts.map +0 -1
  330. package/dist/systems/stair/stair-opening-sync.test.js +0 -485
  331. package/dist/systems/wall/wall-mitering.test.d.ts +0 -2
  332. package/dist/systems/wall/wall-mitering.test.d.ts.map +0 -1
  333. package/dist/systems/wall/wall-mitering.test.js +0 -63
  334. package/dist/utils/clone-scene-graph.test.d.ts +0 -2
  335. package/dist/utils/clone-scene-graph.test.d.ts.map +0 -1
  336. package/dist/utils/clone-scene-graph.test.js +0 -62
  337. package/dist/utils/heal-scene-graph.test.d.ts +0 -2
  338. package/dist/utils/heal-scene-graph.test.d.ts.map +0 -1
  339. package/dist/utils/heal-scene-graph.test.js +0 -88
@@ -0,0 +1,195 @@
1
+ import { z } from 'zod';
2
+ export declare const ConstructionDimensionBaseline: z.ZodObject<{
3
+ origin: z.ZodDefault<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>;
4
+ direction: z.ZodDefault<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>;
5
+ }, z.core.$strip>;
6
+ export declare const ConstructionDimensionChainMode: z.ZodEnum<{
7
+ "point-to-point": "point-to-point";
8
+ continuous: "continuous";
9
+ }>;
10
+ export declare const ConstructionDimensionMode: z.ZodEnum<{
11
+ radius: "radius";
12
+ linear: "linear";
13
+ diameter: "diameter";
14
+ "center-mark": "center-mark";
15
+ chord: "chord";
16
+ "arc-length": "arc-length";
17
+ angular: "angular";
18
+ coordinate: "coordinate";
19
+ }>;
20
+ export declare const ConstructionDrawingType: z.ZodEnum<{
21
+ "floor-plan": "floor-plan";
22
+ "foundation-plan": "foundation-plan";
23
+ "reflected-ceiling-plan": "reflected-ceiling-plan";
24
+ "roof-plan": "roof-plan";
25
+ "site-plan": "site-plan";
26
+ }>;
27
+ export declare const ConstructionDimensionDrawingPresentation: z.ZodEnum<{
28
+ shown: "shown";
29
+ omit: "omit";
30
+ controlled: "controlled";
31
+ }>;
32
+ export declare const ConstructionDimensionDrawingOverride: z.ZodObject<{
33
+ drawingType: z.ZodEnum<{
34
+ "floor-plan": "floor-plan";
35
+ "foundation-plan": "foundation-plan";
36
+ "reflected-ceiling-plan": "reflected-ceiling-plan";
37
+ "roof-plan": "roof-plan";
38
+ "site-plan": "site-plan";
39
+ }>;
40
+ presentation: z.ZodEnum<{
41
+ shown: "shown";
42
+ omit: "omit";
43
+ controlled: "controlled";
44
+ }>;
45
+ suppressedSegmentIndexes: z.ZodDefault<z.ZodArray<z.ZodNumber>>;
46
+ }, z.core.$strip>;
47
+ export declare const ConstructionDimensionDatumPolicy: z.ZodEnum<{
48
+ centerline: "centerline";
49
+ "wall-face": "wall-face";
50
+ "structural-face": "structural-face";
51
+ "finish-face": "finish-face";
52
+ }>;
53
+ export declare const ConstructionDimensionTerminator: z.ZodEnum<{
54
+ "architectural-tick": "architectural-tick";
55
+ "filled-arrow": "filled-arrow";
56
+ "open-arrow": "open-arrow";
57
+ dot: "dot";
58
+ }>;
59
+ export declare const ConstructionDimensionTextPosition: z.ZodEnum<{
60
+ above: "above";
61
+ centered: "centered";
62
+ }>;
63
+ export declare const ConstructionDimensionImperialPrecision: z.ZodEnum<{
64
+ 1: "1";
65
+ "1/2": "1/2";
66
+ "1/4": "1/4";
67
+ "1/8": "1/8";
68
+ "1/16": "1/16";
69
+ }>;
70
+ export declare const ConstructionDimensionMetricNotation: z.ZodEnum<{
71
+ meters: "meters";
72
+ millimeters: "millimeters";
73
+ }>;
74
+ export declare const ConstructionDimensionNode: z.ZodObject<{
75
+ object: z.ZodDefault<z.ZodLiteral<"node">>;
76
+ name: z.ZodOptional<z.ZodString>;
77
+ parentId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
78
+ visible: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
79
+ camera: z.ZodOptional<z.ZodObject<{
80
+ position: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
81
+ target: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
82
+ mode: z.ZodDefault<z.ZodEnum<{
83
+ perspective: "perspective";
84
+ orthographic: "orthographic";
85
+ }>>;
86
+ fov: z.ZodOptional<z.ZodNumber>;
87
+ zoom: z.ZodOptional<z.ZodNumber>;
88
+ }, z.core.$strip>>;
89
+ metadata: z.ZodDefault<z.ZodOptional<z.ZodJSONSchema>>;
90
+ id: z.ZodDefault<z.ZodTemplateLiteral<`construction-dimension_${string}`>>;
91
+ type: z.ZodDefault<z.ZodLiteral<"construction-dimension">>;
92
+ anchors: z.ZodDefault<z.ZodArray<z.ZodUnion<readonly [z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>, z.ZodObject<{
93
+ kind: z.ZodLiteral<"feature">;
94
+ reference: z.ZodObject<{
95
+ nodeId: z.ZodString;
96
+ featureId: z.ZodString;
97
+ parameters: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodBoolean, z.ZodNumber]>>>;
98
+ }, z.core.$strip>;
99
+ fallback: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
100
+ }, z.core.$strip>]>>>;
101
+ baseline: z.ZodDefault<z.ZodObject<{
102
+ origin: z.ZodDefault<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>;
103
+ direction: z.ZodDefault<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>;
104
+ }, z.core.$strip>>;
105
+ chainMode: z.ZodDefault<z.ZodEnum<{
106
+ "point-to-point": "point-to-point";
107
+ continuous: "continuous";
108
+ }>>;
109
+ mode: z.ZodDefault<z.ZodEnum<{
110
+ radius: "radius";
111
+ linear: "linear";
112
+ diameter: "diameter";
113
+ "center-mark": "center-mark";
114
+ chord: "chord";
115
+ "arc-length": "arc-length";
116
+ angular: "angular";
117
+ coordinate: "coordinate";
118
+ }>>;
119
+ featureCount: z.ZodDefault<z.ZodNumber>;
120
+ showCenterMark: z.ZodDefault<z.ZodBoolean>;
121
+ prefix: z.ZodDefault<z.ZodString>;
122
+ suffix: z.ZodDefault<z.ZodString>;
123
+ textOverride: z.ZodDefault<z.ZodNullable<z.ZodString>>;
124
+ datumPolicy: z.ZodDefault<z.ZodEnum<{
125
+ centerline: "centerline";
126
+ "wall-face": "wall-face";
127
+ "structural-face": "structural-face";
128
+ "finish-face": "finish-face";
129
+ }>>;
130
+ terminator: z.ZodDefault<z.ZodEnum<{
131
+ "architectural-tick": "architectural-tick";
132
+ "filled-arrow": "filled-arrow";
133
+ "open-arrow": "open-arrow";
134
+ dot: "dot";
135
+ }>>;
136
+ textPosition: z.ZodDefault<z.ZodEnum<{
137
+ above: "above";
138
+ centered: "centered";
139
+ }>>;
140
+ imperialPrecision: z.ZodDefault<z.ZodEnum<{
141
+ 1: "1";
142
+ "1/2": "1/2";
143
+ "1/4": "1/4";
144
+ "1/8": "1/8";
145
+ "1/16": "1/16";
146
+ }>>;
147
+ metricNotation: z.ZodDefault<z.ZodEnum<{
148
+ meters: "meters";
149
+ millimeters: "millimeters";
150
+ }>>;
151
+ extensionStartGap: z.ZodDefault<z.ZodNumber>;
152
+ extensionOvershoot: z.ZodDefault<z.ZodNumber>;
153
+ drawingType: z.ZodDefault<z.ZodEnum<{
154
+ "floor-plan": "floor-plan";
155
+ "foundation-plan": "foundation-plan";
156
+ "reflected-ceiling-plan": "reflected-ceiling-plan";
157
+ "roof-plan": "roof-plan";
158
+ "site-plan": "site-plan";
159
+ }>>;
160
+ drawingOverrides: z.ZodDefault<z.ZodArray<z.ZodObject<{
161
+ drawingType: z.ZodEnum<{
162
+ "floor-plan": "floor-plan";
163
+ "foundation-plan": "foundation-plan";
164
+ "reflected-ceiling-plan": "reflected-ceiling-plan";
165
+ "roof-plan": "roof-plan";
166
+ "site-plan": "site-plan";
167
+ }>;
168
+ presentation: z.ZodEnum<{
169
+ shown: "shown";
170
+ omit: "omit";
171
+ controlled: "controlled";
172
+ }>;
173
+ suppressedSegmentIndexes: z.ZodDefault<z.ZodArray<z.ZodNumber>>;
174
+ }, z.core.$strip>>>;
175
+ controllingDimensionId: z.ZodDefault<z.ZodNullable<z.ZodDefault<z.ZodTemplateLiteral<`construction-dimension_${string}`>>>>;
176
+ }, z.core.$strip>;
177
+ export type ConstructionDimensionBaseline = z.infer<typeof ConstructionDimensionBaseline>;
178
+ export type ConstructionDimensionChainMode = z.infer<typeof ConstructionDimensionChainMode>;
179
+ export type ConstructionDimensionMode = z.infer<typeof ConstructionDimensionMode>;
180
+ export type ConstructionDrawingType = z.infer<typeof ConstructionDrawingType>;
181
+ export type ConstructionDimensionDrawingPresentation = z.infer<typeof ConstructionDimensionDrawingPresentation>;
182
+ export type ConstructionDimensionDrawingOverride = z.infer<typeof ConstructionDimensionDrawingOverride>;
183
+ export type ConstructionDimensionDatumPolicy = z.infer<typeof ConstructionDimensionDatumPolicy>;
184
+ export type ConstructionDimensionTerminator = z.infer<typeof ConstructionDimensionTerminator>;
185
+ export type ConstructionDimensionTextPosition = z.infer<typeof ConstructionDimensionTextPosition>;
186
+ export type ConstructionDimensionImperialPrecision = z.infer<typeof ConstructionDimensionImperialPrecision>;
187
+ export type ConstructionDimensionMetricNotation = z.infer<typeof ConstructionDimensionMetricNotation>;
188
+ export type ConstructionDimensionNode = z.infer<typeof ConstructionDimensionNode>;
189
+ export declare const CONSTRUCTION_DRAWING_TYPES: ("floor-plan" | "foundation-plan" | "reflected-ceiling-plan" | "roof-plan" | "site-plan")[];
190
+ export declare function resolveConstructionDimensionDrawingPresentation(node: Pick<ConstructionDimensionNode, 'drawingType' | 'drawingOverrides'>, drawingType: ConstructionDrawingType): ConstructionDimensionDrawingPresentation;
191
+ export declare function resolveConstructionDimensionDrawingOverride(node: Pick<ConstructionDimensionNode, 'drawingOverrides'>, drawingType: ConstructionDrawingType): ConstructionDimensionDrawingOverride | null;
192
+ export declare function setConstructionDimensionDrawingPresentation(node: Pick<ConstructionDimensionNode, 'drawingType' | 'drawingOverrides'>, drawingType: ConstructionDrawingType, presentation: ConstructionDimensionDrawingPresentation): ConstructionDimensionDrawingOverride[];
193
+ export declare function setConstructionDimensionDrawingSuppressedSegments(node: Pick<ConstructionDimensionNode, 'drawingType' | 'drawingOverrides'>, drawingType: ConstructionDrawingType, suppressedSegmentIndexes: readonly number[]): ConstructionDimensionDrawingOverride[];
194
+ export declare function constructionDimensionRequiredAnchorCount(mode: ConstructionDimensionMode): number;
195
+ //# sourceMappingURL=construction-dimension.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"construction-dimension.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/construction-dimension.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAMvB,eAAO,MAAM,6BAA6B;;;iBAatC,CAAA;AAEJ,eAAO,MAAM,8BAA8B;;;EAA2C,CAAA;AACtF,eAAO,MAAM,yBAAyB;;;;;;;;;EASpC,CAAA;AACF,eAAO,MAAM,uBAAuB;;;;;;EAMlC,CAAA;AACF,eAAO,MAAM,wCAAwC;;;;EAA0C,CAAA;AAC/F,eAAO,MAAM,oCAAoC;;;;;;;;;;;;;;iBAI/C,CAAA;AACF,eAAO,MAAM,gCAAgC;;;;;EAK3C,CAAA;AACF,eAAO,MAAM,+BAA+B;;;;;EAK1C,CAAA;AACF,eAAO,MAAM,iCAAiC;;;EAAgC,CAAA;AAC9E,eAAO,MAAM,sCAAsC;;;;;;EAA6C,CAAA;AAChG,eAAO,MAAM,mCAAmC;;;EAAoC,CAAA;AAEpF,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA4CrC,CAAA;AAED,MAAM,MAAM,6BAA6B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAA;AACzF,MAAM,MAAM,8BAA8B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,8BAA8B,CAAC,CAAA;AAC3F,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAA;AACjF,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAA;AAC7E,MAAM,MAAM,wCAAwC,GAAG,CAAC,CAAC,KAAK,CAC5D,OAAO,wCAAwC,CAChD,CAAA;AACD,MAAM,MAAM,oCAAoC,GAAG,CAAC,CAAC,KAAK,CACxD,OAAO,oCAAoC,CAC5C,CAAA;AACD,MAAM,MAAM,gCAAgC,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gCAAgC,CAAC,CAAA;AAC/F,MAAM,MAAM,+BAA+B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,+BAA+B,CAAC,CAAA;AAC7F,MAAM,MAAM,iCAAiC,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iCAAiC,CAAC,CAAA;AACjG,MAAM,MAAM,sCAAsC,GAAG,CAAC,CAAC,KAAK,CAC1D,OAAO,sCAAsC,CAC9C,CAAA;AACD,MAAM,MAAM,mCAAmC,GAAG,CAAC,CAAC,KAAK,CACvD,OAAO,mCAAmC,CAC3C,CAAA;AACD,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAA;AAEjF,eAAO,MAAM,0BAA0B,6FAAkC,CAAA;AAEzE,wBAAgB,+CAA+C,CAC7D,IAAI,EAAE,IAAI,CAAC,yBAAyB,EAAE,aAAa,GAAG,kBAAkB,CAAC,EACzE,WAAW,EAAE,uBAAuB,GACnC,wCAAwC,CAM1C;AAED,wBAAgB,2CAA2C,CACzD,IAAI,EAAE,IAAI,CAAC,yBAAyB,EAAE,kBAAkB,CAAC,EACzD,WAAW,EAAE,uBAAuB,GACnC,oCAAoC,GAAG,IAAI,CAM7C;AAED,wBAAgB,2CAA2C,CACzD,IAAI,EAAE,IAAI,CAAC,yBAAyB,EAAE,aAAa,GAAG,kBAAkB,CAAC,EACzE,WAAW,EAAE,uBAAuB,EACpC,YAAY,EAAE,wCAAwC,GACrD,oCAAoC,EAAE,CAYxC;AAED,wBAAgB,iDAAiD,CAC/D,IAAI,EAAE,IAAI,CAAC,yBAAyB,EAAE,aAAa,GAAG,kBAAkB,CAAC,EACzE,WAAW,EAAE,uBAAuB,EACpC,wBAAwB,EAAE,SAAS,MAAM,EAAE,GAC1C,oCAAoC,EAAE,CAUxC;AAED,wBAAgB,wCAAwC,CAAC,IAAI,EAAE,yBAAyB,GAAG,MAAM,CAEhG"}
@@ -0,0 +1,151 @@
1
+ import dedent from 'dedent';
2
+ import { z } from 'zod';
3
+ import { BaseNode, nodeType, objectId } from '../base';
4
+ import { MeasurementAnchor } from './measurement';
5
+ const FiniteCoordinate = z.number().finite();
6
+ export const ConstructionDimensionBaseline = z
7
+ .object({
8
+ origin: z.tuple([FiniteCoordinate, FiniteCoordinate]).default([0, 0.6]),
9
+ direction: z.tuple([FiniteCoordinate, FiniteCoordinate]).default([1, 0]),
10
+ })
11
+ .superRefine((baseline, ctx) => {
12
+ if (Math.hypot(baseline.direction[0], baseline.direction[1]) <= 1e-9) {
13
+ ctx.addIssue({
14
+ code: 'custom',
15
+ path: ['direction'],
16
+ message: 'Construction dimension baseline direction must be non-zero',
17
+ });
18
+ }
19
+ });
20
+ export const ConstructionDimensionChainMode = z.enum(['point-to-point', 'continuous']);
21
+ export const ConstructionDimensionMode = z.enum([
22
+ 'linear',
23
+ 'radius',
24
+ 'diameter',
25
+ 'center-mark',
26
+ 'chord',
27
+ 'arc-length',
28
+ 'angular',
29
+ 'coordinate',
30
+ ]);
31
+ export const ConstructionDrawingType = z.enum([
32
+ 'floor-plan',
33
+ 'foundation-plan',
34
+ 'reflected-ceiling-plan',
35
+ 'roof-plan',
36
+ 'site-plan',
37
+ ]);
38
+ export const ConstructionDimensionDrawingPresentation = z.enum(['shown', 'omit', 'controlled']);
39
+ export const ConstructionDimensionDrawingOverride = z.object({
40
+ drawingType: ConstructionDrawingType,
41
+ presentation: ConstructionDimensionDrawingPresentation,
42
+ suppressedSegmentIndexes: z.array(z.number().int().min(0).max(999)).max(200).default([]),
43
+ });
44
+ export const ConstructionDimensionDatumPolicy = z.enum([
45
+ 'centerline',
46
+ 'wall-face',
47
+ 'structural-face',
48
+ 'finish-face',
49
+ ]);
50
+ export const ConstructionDimensionTerminator = z.enum([
51
+ 'architectural-tick',
52
+ 'filled-arrow',
53
+ 'open-arrow',
54
+ 'dot',
55
+ ]);
56
+ export const ConstructionDimensionTextPosition = z.enum(['above', 'centered']);
57
+ export const ConstructionDimensionImperialPrecision = z.enum(['1', '1/2', '1/4', '1/8', '1/16']);
58
+ export const ConstructionDimensionMetricNotation = z.enum(['meters', 'millimeters']);
59
+ export const ConstructionDimensionNode = BaseNode.extend({
60
+ id: objectId('construction-dimension'),
61
+ type: nodeType('construction-dimension'),
62
+ anchors: z
63
+ .array(MeasurementAnchor)
64
+ .min(2)
65
+ .default([
66
+ [0, 0, 0],
67
+ [1, 0, 0],
68
+ ]),
69
+ baseline: ConstructionDimensionBaseline.default({ origin: [0, 0.6], direction: [1, 0] }),
70
+ chainMode: ConstructionDimensionChainMode.default('point-to-point'),
71
+ mode: ConstructionDimensionMode.default('linear'),
72
+ featureCount: z.number().int().min(1).max(999).default(1),
73
+ showCenterMark: z.boolean().default(true),
74
+ prefix: z.string().max(40).default(''),
75
+ suffix: z.string().max(40).default(''),
76
+ textOverride: z.string().trim().min(1).max(120).nullable().default(null),
77
+ datumPolicy: ConstructionDimensionDatumPolicy.default('centerline'),
78
+ terminator: ConstructionDimensionTerminator.default('architectural-tick'),
79
+ textPosition: ConstructionDimensionTextPosition.default('above'),
80
+ imperialPrecision: ConstructionDimensionImperialPrecision.default('1/16'),
81
+ metricNotation: ConstructionDimensionMetricNotation.default('meters'),
82
+ extensionStartGap: z.number().finite().min(0).max(1).default(0.075),
83
+ extensionOvershoot: z.number().finite().min(0).max(1).default(0.12),
84
+ drawingType: ConstructionDrawingType.default('floor-plan'),
85
+ drawingOverrides: z.array(ConstructionDimensionDrawingOverride).max(5).default([]),
86
+ controllingDimensionId: objectId('construction-dimension').nullable().default(null),
87
+ }).describe(dedent `
88
+ Construction dimension node - an associative floor-plan construction dimension
89
+ - anchors: two or more free or semantic feature anchors that supply the witness origins
90
+ - baseline.origin: a point on the independently placed dimension line
91
+ - baseline.direction: the fixed plan direction used to project the witness origins
92
+ - chainMode: point-to-point for one segment or continuous for adjacent dimension strings
93
+ - mode: linear, radius, diameter, center mark, chord, arc length, angular, or coordinate
94
+ - featureCount: repeated-feature multiplier used by diameter/radius and other notation
95
+ - showCenterMark: displays the resolved circle/angle center where applicable
96
+ - prefix/suffix/textOverride: document notation overrides without changing geometry
97
+ - datumPolicy/terminator/textPosition/imperialPrecision/metricNotation/extensionStartGap/extensionOvershoot: dimension-standard overrides
98
+ - drawingType: the primary persistent drawing that owns the dimension
99
+ - drawingOverrides: omit, show, or foundation-control presentation per drawing type
100
+ - controllingDimensionId: foundation dimension whose associative geometry controls this dimension
101
+ `);
102
+ export const CONSTRUCTION_DRAWING_TYPES = ConstructionDrawingType.options;
103
+ export function resolveConstructionDimensionDrawingPresentation(node, drawingType) {
104
+ let override;
105
+ for (const entry of node.drawingOverrides) {
106
+ if (entry.drawingType === drawingType)
107
+ override = entry;
108
+ }
109
+ return override?.presentation ?? (node.drawingType === drawingType ? 'shown' : 'omit');
110
+ }
111
+ export function resolveConstructionDimensionDrawingOverride(node, drawingType) {
112
+ let override;
113
+ for (const entry of node.drawingOverrides) {
114
+ if (entry.drawingType === drawingType)
115
+ override = entry;
116
+ }
117
+ return override ?? null;
118
+ }
119
+ export function setConstructionDimensionDrawingPresentation(node, drawingType, presentation) {
120
+ const defaultPresentation = node.drawingType === drawingType ? 'shown' : 'omit';
121
+ const existing = resolveConstructionDimensionDrawingOverride(node, drawingType);
122
+ const withoutDrawing = node.drawingOverrides.filter((entry) => entry.drawingType !== drawingType);
123
+ const next = {
124
+ drawingType,
125
+ presentation,
126
+ suppressedSegmentIndexes: existing?.suppressedSegmentIndexes ?? [],
127
+ };
128
+ return isDefaultConstructionDimensionDrawingOverride(next, defaultPresentation)
129
+ ? withoutDrawing
130
+ : [...withoutDrawing, next];
131
+ }
132
+ export function setConstructionDimensionDrawingSuppressedSegments(node, drawingType, suppressedSegmentIndexes) {
133
+ const defaultPresentation = node.drawingType === drawingType ? 'shown' : 'omit';
134
+ const existing = resolveConstructionDimensionDrawingOverride(node, drawingType);
135
+ const presentation = existing?.presentation ?? defaultPresentation;
136
+ const suppressed = normalizeSuppressedSegmentIndexes(suppressedSegmentIndexes);
137
+ const withoutDrawing = node.drawingOverrides.filter((entry) => entry.drawingType !== drawingType);
138
+ const next = { drawingType, presentation, suppressedSegmentIndexes: suppressed };
139
+ return isDefaultConstructionDimensionDrawingOverride(next, defaultPresentation)
140
+ ? withoutDrawing
141
+ : [...withoutDrawing, next];
142
+ }
143
+ export function constructionDimensionRequiredAnchorCount(mode) {
144
+ return mode === 'arc-length' || mode === 'angular' ? 3 : 2;
145
+ }
146
+ function isDefaultConstructionDimensionDrawingOverride(override, defaultPresentation) {
147
+ return (override.presentation === defaultPresentation && override.suppressedSegmentIndexes.length === 0);
148
+ }
149
+ function normalizeSuppressedSegmentIndexes(indexes) {
150
+ return [...new Set(indexes.filter((index) => Number.isInteger(index) && index >= 0))].sort((left, right) => left - right);
151
+ }
@@ -16,6 +16,16 @@ export declare const DoorCategory: z.ZodEnum<{
16
16
  interior: "interior";
17
17
  garage: "garage";
18
18
  }>;
19
+ export declare const OpeningConstructionType: z.ZodEnum<{
20
+ framed: "framed";
21
+ masonry: "masonry";
22
+ }>;
23
+ export declare const OpeningDimensionReference: z.ZodEnum<{
24
+ nominal: "nominal";
25
+ "rough-opening": "rough-opening";
26
+ "masonry-opening": "masonry-opening";
27
+ "finish-opening": "finish-opening";
28
+ }>;
19
29
  export declare const DoorType: z.ZodEnum<{
20
30
  double: "double";
21
31
  hinged: "hinged";
@@ -35,6 +45,8 @@ export declare const DoorTrackStyle: z.ZodEnum<{
35
45
  overhead: "overhead";
36
46
  }>;
37
47
  export type DoorCategory = z.infer<typeof DoorCategory>;
48
+ export type OpeningConstructionType = z.infer<typeof OpeningConstructionType>;
49
+ export type OpeningDimensionReference = z.infer<typeof OpeningDimensionReference>;
38
50
  export type DoorType = z.infer<typeof DoorType>;
39
51
  export type DoorTrackStyle = z.infer<typeof DoorTrackStyle>;
40
52
  export declare const DoorNode: z.ZodObject<{
@@ -104,6 +116,23 @@ export declare const DoorNode: z.ZodObject<{
104
116
  }>>;
105
117
  width: z.ZodDefault<z.ZodNumber>;
106
118
  height: z.ZodDefault<z.ZodNumber>;
119
+ mark: z.ZodOptional<z.ZodString>;
120
+ constructionType: z.ZodDefault<z.ZodEnum<{
121
+ framed: "framed";
122
+ masonry: "masonry";
123
+ }>>;
124
+ dimensionReference: z.ZodDefault<z.ZodEnum<{
125
+ nominal: "nominal";
126
+ "rough-opening": "rough-opening";
127
+ "masonry-opening": "masonry-opening";
128
+ "finish-opening": "finish-opening";
129
+ }>>;
130
+ roughOpeningWidth: z.ZodOptional<z.ZodNumber>;
131
+ roughOpeningHeight: z.ZodOptional<z.ZodNumber>;
132
+ masonryOpeningWidth: z.ZodOptional<z.ZodNumber>;
133
+ masonryOpeningHeight: z.ZodOptional<z.ZodNumber>;
134
+ finishOpeningWidth: z.ZodOptional<z.ZodNumber>;
135
+ finishOpeningHeight: z.ZodOptional<z.ZodNumber>;
107
136
  doorCategory: z.ZodDefault<z.ZodEnum<{
108
137
  interior: "interior";
109
138
  garage: "garage";
@@ -1 +1 @@
1
- {"version":3,"file":"door.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/door.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,eAAO,MAAM,WAAW;;;;;;;;;;;iBAWtB,CAAA;AAEF,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAA;AAErD,eAAO,MAAM,YAAY;;;EAAiC,CAAA;AAC1D,eAAO,MAAM,QAAQ;;;;;;;;;;;EAWnB,CAAA;AACF,eAAO,MAAM,cAAc;;;;;EAAoD,CAAA;AAE/E,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAA;AACvD,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,QAAQ,CAAC,CAAA;AAC/C,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAA;AAE3D,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAmGnB,CAAA;AAEF,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,QAAQ,CAAC,CAAA"}
1
+ {"version":3,"file":"door.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/door.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,eAAO,MAAM,WAAW;;;;;;;;;;;iBAWtB,CAAA;AAEF,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAA;AAErD,eAAO,MAAM,YAAY;;;EAAiC,CAAA;AAC1D,eAAO,MAAM,uBAAuB;;;EAAgC,CAAA;AACpE,eAAO,MAAM,yBAAyB;;;;;EAKpC,CAAA;AACF,eAAO,MAAM,QAAQ;;;;;;;;;;;EAWnB,CAAA;AACF,eAAO,MAAM,cAAc;;;;;EAAoD,CAAA;AAE/E,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAA;AACvD,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAA;AAC7E,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAA;AACjF,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,QAAQ,CAAC,CAAA;AAC/C,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAA;AAE3D,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAiHnB,CAAA;AAEF,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,QAAQ,CAAC,CAAA"}
@@ -13,6 +13,13 @@ export const DoorSegment = z.object({
13
13
  panelInset: z.number().default(0.04),
14
14
  });
15
15
  export const DoorCategory = z.enum(['interior', 'garage']);
16
+ export const OpeningConstructionType = z.enum(['framed', 'masonry']);
17
+ export const OpeningDimensionReference = z.enum([
18
+ 'nominal',
19
+ 'rough-opening',
20
+ 'masonry-opening',
21
+ 'finish-opening',
22
+ ]);
16
23
  export const DoorType = z.enum([
17
24
  'hinged',
18
25
  'double',
@@ -49,6 +56,19 @@ export const DoorNode = BaseNode.extend({
49
56
  // Overall dimensions
50
57
  width: z.number().default(0.9),
51
58
  height: z.number().default(2.1),
59
+ // Construction-document identity. `mark` overrides the deterministic
60
+ // level fallback (101, 102, ...). Rough-opening dimensions stay optional
61
+ // because they are manufacturer/framing inputs, not safe derivations from
62
+ // the nominal modeled size.
63
+ mark: z.string().trim().max(16).optional(),
64
+ constructionType: OpeningConstructionType.default('framed'),
65
+ dimensionReference: OpeningDimensionReference.default('nominal'),
66
+ roughOpeningWidth: z.number().positive().optional(),
67
+ roughOpeningHeight: z.number().positive().optional(),
68
+ masonryOpeningWidth: z.number().positive().optional(),
69
+ masonryOpeningHeight: z.number().positive().optional(),
70
+ finishOpeningWidth: z.number().positive().optional(),
71
+ finishOpeningHeight: z.number().positive().optional(),
52
72
  // Door family
53
73
  doorCategory: DoorCategory.default('interior'),
54
74
  doorType: DoorType.default('hinged'),
@@ -31,6 +31,7 @@ export declare const DuctTerminalNode: z.ZodObject<{
31
31
  type: z.ZodDefault<z.ZodLiteral<"duct-terminal">>;
32
32
  position: z.ZodDefault<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
33
33
  rotation: z.ZodDefault<z.ZodNumber>;
34
+ supportSlabId: z.ZodOptional<z.ZodString>;
34
35
  terminalType: z.ZodDefault<z.ZodEnum<{
35
36
  "supply-register": "supply-register";
36
37
  diffuser: "diffuser";
@@ -1 +1 @@
1
- {"version":3,"file":"duct-terminal.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/duct-terminal.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAqC5B,CAAA;AACD,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAA;AAC/D,MAAM,MAAM,kBAAkB,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAA"}
1
+ {"version":3,"file":"duct-terminal.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/duct-terminal.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAuC5B,CAAA;AACD,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAA;AAC/D,MAAM,MAAM,kBAAkB,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAA"}
@@ -20,6 +20,8 @@ export const DuctTerminalNode = BaseNode.extend({
20
20
  position: z.tuple([z.number(), z.number(), z.number()]).default([0, 0, 0]),
21
21
  // Yaw in radians.
22
22
  rotation: z.number().default(0),
23
+ // Persisted slab-support host — see ItemNode.supportSlabId for the rules.
24
+ supportSlabId: z.string().optional(),
23
25
  terminalType: z.enum(['supply-register', 'diffuser', 'return-grille']).default('supply-register'),
24
26
  // Which surface the terminal mounts on. Drives face orientation and
25
27
  // which way the collar (and its port) points.
@@ -72,6 +72,8 @@ export declare const FenceNode: z.ZodObject<{
72
72
  tangents: z.ZodOptional<z.ZodArray<z.ZodNullable<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>>>;
73
73
  height: z.ZodDefault<z.ZodNumber>;
74
74
  thickness: z.ZodDefault<z.ZodNumber>;
75
+ supportSlabId: z.ZodOptional<z.ZodString>;
76
+ supportOffset: z.ZodOptional<z.ZodNumber>;
75
77
  curveOffset: z.ZodOptional<z.ZodNumber>;
76
78
  baseHeight: z.ZodDefault<z.ZodNumber>;
77
79
  postSpacing: z.ZodDefault<z.ZodNumber>;
@@ -1 +1 @@
1
- {"version":3,"file":"fence.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/fence.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,eAAO,MAAM,UAAU;;;;;EAAoD,CAAA;AAC3E,eAAO,MAAM,cAAc;;;EAAmC,CAAA;AAC9D,eAAO,MAAM,YAAY;;;;EAAsC,CAAA;AAE/D,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAqDrB,CAAA;AAED,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAA"}
1
+ {"version":3,"file":"fence.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/fence.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,eAAO,MAAM,UAAU;;;;;EAAoD,CAAA;AAC3E,eAAO,MAAM,cAAc;;;EAAmC,CAAA;AAC9D,eAAO,MAAM,YAAY;;;;EAAsC,CAAA;AAE/D,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA6DrB,CAAA;AAED,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAA"}
@@ -30,6 +30,12 @@ export const FenceNode = BaseNode.extend({
30
30
  tangents: z.array(z.tuple([z.number(), z.number()]).nullable()).optional(),
31
31
  height: z.number().default(1.8),
32
32
  thickness: z.number().default(0.08),
33
+ // Persisted slab-support host — the fence sits on that slab's walking
34
+ // surface (see ItemNode.supportSlabId for the host rules).
35
+ supportSlabId: z.string().optional(),
36
+ // Manual vertical offset from the elected slab or level support. This moves
37
+ // the complete fence body without changing its height.
38
+ supportOffset: z.number().finite().optional(),
33
39
  curveOffset: z.number().optional(),
34
40
  baseHeight: z.number().default(0.22),
35
41
  postSpacing: z.number().default(2),
@@ -51,6 +57,8 @@ export const FenceNode = BaseNode.extend({
51
57
  - path: optional list of [x, y] points; when set (>= 2) the centerline is a smooth spline through them
52
58
  - tangents: optional per-point handle vectors (parallel to path); null entries fall back to the automatic tangent
53
59
  - height/thickness: overall fence dimensions in meters
60
+ - supportSlabId: optional slab host; the fence stands on that slab's walking surface (elevation)
61
+ - supportOffset: manual vertical offset from the elected support surface
54
62
  - curveOffset: midpoint sagitta offset used to bend the fence into an arc (ignored when path is set)
55
63
  - baseHeight/postSpacing/postSize/topRailHeight: exact geometric controls from the plan3D fence model
56
64
  - groundClearance/edgeInset/baseStyle: fence support and inset configuration
@@ -33,6 +33,7 @@ export declare const HvacEquipmentNode: z.ZodObject<{
33
33
  type: z.ZodDefault<z.ZodLiteral<"hvac-equipment">>;
34
34
  position: z.ZodDefault<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
35
35
  rotation: z.ZodDefault<z.ZodNumber>;
36
+ supportSlabId: z.ZodOptional<z.ZodString>;
36
37
  equipmentType: z.ZodDefault<z.ZodEnum<{
37
38
  furnace: "furnace";
38
39
  "air-handler": "air-handler";
@@ -1 +1 @@
1
- {"version":3,"file":"hvac-equipment.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/hvac-equipment.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAuC7B,CAAA;AACD,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAA;AACjE,MAAM,MAAM,mBAAmB,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAA"}
1
+ {"version":3,"file":"hvac-equipment.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/hvac-equipment.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAyC7B,CAAA;AACD,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAA;AACjE,MAAM,MAAM,mBAAmB,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAA"}
@@ -22,6 +22,8 @@ export const HvacEquipmentNode = BaseNode.extend({
22
22
  position: z.tuple([z.number(), z.number(), z.number()]).default([0, 0, 0]),
23
23
  // Yaw in radians.
24
24
  rotation: z.number().default(0),
25
+ // Persisted slab-support host — see ItemNode.supportSlabId for the rules.
26
+ supportSlabId: z.string().optional(),
25
27
  equipmentType: z.enum(['furnace', 'air-handler', 'condenser']).default('furnace'),
26
28
  // Cabinet dimensions in meters. Defaults match a typical upflow
27
29
  // furnace cabinet (~22" × 28" footprint, ~43" tall).
@@ -248,6 +248,7 @@ export declare const ItemNode: z.ZodObject<{
248
248
  right: "right";
249
249
  left: "left";
250
250
  }>>;
251
+ supportSlabId: z.ZodOptional<z.ZodString>;
251
252
  collectionIds: z.ZodOptional<z.ZodArray<z.ZodCustom<`collection_${string}`, `collection_${string}`>>>;
252
253
  slots: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
253
254
  asset: z.ZodObject<{
@@ -1 +1 @@
1
- {"version":3,"file":"item.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/item.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAOvB,QAAA,MAAM,mBAAmB;;;;iBAIvB,CAAA;AAEF,QAAA,MAAM,mBAAmB;;;;;;;;;;;;;iBASvB,CAAA;AAEF,QAAA,MAAM,wBAAwB;;;;;;;;;;iBAO5B,CAAA;AAEF,QAAA,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;2BAIjB,CAAA;AAIF,QAAA,MAAM,qBAAqB;;;;;;;iBAOzB,CAAA;AAEF,QAAA,MAAM,iBAAiB;;;;;;iBAMrB,CAAA;AAEF,QAAA,MAAM,YAAY;;;;;;;;;;;;;2BAA2E,CAAA;AAI7F,QAAA,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAGrB,CAAA;AAEF,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAC/D,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAC/D,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAA;AACzE,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAA;AACnD,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAA;AACnE,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAA;AAC3D,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAA;AACjD,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAA;AAE3D,QAAA,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA2Cf,CAAA;AAEF,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAA;AACpD,MAAM,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAA;AAE/C,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAyCnB,CAAA;AAEF,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,QAAQ,CAAC,CAAA;AAE/C,eAAO,MAAM,mCAAmC,MAAM,CAAA;AAEtD;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAM/D;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,QAAQ,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAI5E"}
1
+ {"version":3,"file":"item.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/item.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAOvB,QAAA,MAAM,mBAAmB;;;;iBAIvB,CAAA;AAEF,QAAA,MAAM,mBAAmB;;;;;;;;;;;;;iBASvB,CAAA;AAEF,QAAA,MAAM,wBAAwB;;;;;;;;;;iBAO5B,CAAA;AAEF,QAAA,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;2BAIjB,CAAA;AAIF,QAAA,MAAM,qBAAqB;;;;;;;iBAOzB,CAAA;AAEF,QAAA,MAAM,iBAAiB;;;;;;iBAMrB,CAAA;AAEF,QAAA,MAAM,YAAY;;;;;;;;;;;;;2BAA2E,CAAA;AAI7F,QAAA,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAGrB,CAAA;AAEF,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAC/D,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAC/D,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAA;AACzE,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAA;AACnD,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAA;AACnE,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAA;AAC3D,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAA;AACjD,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAA;AAE3D,QAAA,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA2Cf,CAAA;AAEF,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAA;AACpD,MAAM,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAA;AAE/C,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAuDnB,CAAA;AAEF,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,QAAQ,CAAC,CAAA;AAE/C,eAAO,MAAM,mCAAmC,MAAM,CAAA;AAEtD;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAM/D;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,QAAQ,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAI5E"}
@@ -115,6 +115,19 @@ export const ItemNode = BaseNode.extend({
115
115
  // mounts the node inside the face frame (`getRoofWallFaceFrame`).
116
116
  roofSegmentId: z.string().optional(),
117
117
  roofFace: z.enum(['front', 'back', 'right', 'left']).optional(),
118
+ // Persisted floor-support host (canonical doc — the same field on other
119
+ // floor-placed kinds and walls follows these rules). Written at
120
+ // placement/commit ONLY when overlapping slabs disagree on elevation
121
+ // (ambiguity); absent/null means "elect the support fresh on every
122
+ // read", which is the historical behavior. Read paths PREFER this slab
123
+ // while it still exists and still overlaps the node's footprint, and
124
+ // silently fall back to election otherwise. Deleting the host slab
125
+ // strips the field (deleteNodesAction); a host merely reshaped away is
126
+ // deliberately kept so hosting resumes if the slab's polygon returns.
127
+ // The sentinel value 'ground' (GROUND_SUPPORT_ID) pins the node to the
128
+ // level base — written when a pointer-capped commit elected the ground
129
+ // while a slab (e.g. an elevated deck) still overlapped the footprint.
130
+ supportSlabId: z.string().optional(),
118
131
  // Denormalized references to collections this node belongs to
119
132
  collectionIds: z.array(z.custom()).optional(),
120
133
  // Per-slot material overrides. Key = slot id (see deriveSlotId), value = a
@@ -17,8 +17,9 @@ export declare const LevelNode: z.ZodObject<{
17
17
  metadata: z.ZodDefault<z.ZodOptional<z.ZodJSONSchema>>;
18
18
  id: z.ZodDefault<z.ZodTemplateLiteral<`level_${string}`>>;
19
19
  type: z.ZodDefault<z.ZodLiteral<"level">>;
20
- children: z.ZodDefault<z.ZodArray<z.ZodUnion<readonly [z.ZodDefault<z.ZodTemplateLiteral<`wall_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`fence_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`column_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`item_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`zone_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`slab_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`ceiling_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`roof_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`stair_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`scan_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`guide_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`measurement_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`spawn_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`shelf_${string}`>>]>>>;
20
+ children: z.ZodDefault<z.ZodArray<z.ZodPipe<z.ZodString, z.ZodTransform<`item_${string}` | `ceiling_${string}` | `column_${string}` | `wall_${string}` | `fence_${string}` | `construction-dimension_${string}` | `structural-grid_${string}` | `zone_${string}` | `slab_${string}` | `roof_${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}`, string>>>>;
21
21
  level: z.ZodDefault<z.ZodNumber>;
22
+ height: z.ZodOptional<z.ZodNumber>;
22
23
  }, z.core.$strip>;
23
24
  export type LevelNode = z.infer<typeof LevelNode>;
24
25
  //# sourceMappingURL=level.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"level.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/level.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAiBvB,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;iBA+BrB,CAAA;AAED,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAA"}
1
+ {"version":3,"file":"level.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/level.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAyDvB,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;iBAqBrB,CAAA;AAED,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAA"}