@pascal-app/core 1.0.7 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (266) hide show
  1. package/dist/agent-operations/__fixtures__/cases.d.ts +3 -2
  2. package/dist/agent-operations/__fixtures__/cases.d.ts.map +1 -1
  3. package/dist/agent-operations/__fixtures__/native-materials.d.ts +4 -0
  4. package/dist/agent-operations/__fixtures__/native-materials.d.ts.map +1 -1
  5. package/dist/agent-operations/__fixtures__/place-items-cases.d.ts.map +1 -1
  6. package/dist/agent-operations/__fixtures__/place-items-cases.js +28 -0
  7. package/dist/agent-operations/__fixtures__/roof-bearing-cases.d.ts +9567 -9563
  8. package/dist/agent-operations/__fixtures__/roof-bearing-cases.d.ts.map +1 -1
  9. package/dist/agent-operations/__fixtures__/verify-scene-cases.d.ts +77 -77
  10. package/dist/agent-operations/asset-catalog.d.ts +21 -11
  11. package/dist/agent-operations/asset-catalog.d.ts.map +1 -1
  12. package/dist/agent-operations/asset-catalog.js +28 -10
  13. package/dist/agent-operations/asset-views.d.ts +8 -3
  14. package/dist/agent-operations/asset-views.d.ts.map +1 -1
  15. package/dist/agent-operations/asset-views.js +19 -3
  16. package/dist/agent-operations/author-scene.d.ts.map +1 -1
  17. package/dist/agent-operations/author-scene.js +2 -3
  18. package/dist/agent-operations/batch.d.ts +7 -1
  19. package/dist/agent-operations/batch.d.ts.map +1 -1
  20. package/dist/agent-operations/batch.js +17 -2
  21. package/dist/agent-operations/catalog-asset.d.ts +15 -0
  22. package/dist/agent-operations/catalog-asset.d.ts.map +1 -0
  23. package/dist/agent-operations/catalog-asset.js +4 -0
  24. package/dist/agent-operations/circulation-spaces.d.ts +1724 -1723
  25. package/dist/agent-operations/circulation-spaces.d.ts.map +1 -1
  26. package/dist/agent-operations/design-brief.d.ts.map +1 -1
  27. package/dist/agent-operations/design-brief.js +2 -0
  28. package/dist/agent-operations/furnish-room.d.ts.map +1 -1
  29. package/dist/agent-operations/furnish-room.js +2 -1
  30. package/dist/agent-operations/index.d.ts +3 -0
  31. package/dist/agent-operations/index.d.ts.map +1 -1
  32. package/dist/agent-operations/index.js +4 -1
  33. package/dist/agent-operations/level-reads.d.ts.map +1 -1
  34. package/dist/agent-operations/level-reads.js +5 -2
  35. package/dist/agent-operations/move-plan.d.ts.map +1 -1
  36. package/dist/agent-operations/move-plan.js +11 -9
  37. package/dist/agent-operations/place-in-room.d.ts.map +1 -1
  38. package/dist/agent-operations/place-in-room.js +2 -1
  39. package/dist/agent-operations/place-items.d.ts.map +1 -1
  40. package/dist/agent-operations/place-items.js +2 -1
  41. package/dist/agent-operations/scene-queries.d.ts +2944 -2943
  42. package/dist/agent-operations/scene-queries.d.ts.map +1 -1
  43. package/dist/agent-operations/scene-view.d.ts.map +1 -1
  44. package/dist/agent-operations/scene-view.js +38 -13
  45. package/dist/agent-operations/search-assets.d.ts.map +1 -1
  46. package/dist/agent-operations/search-assets.js +6 -0
  47. package/dist/agent-operations/types.d.ts +3 -2
  48. package/dist/agent-operations/types.d.ts.map +1 -1
  49. package/dist/agent-operations/usage-checks.js +18 -3
  50. package/dist/agent-operations/verify-scene.d.ts.map +1 -1
  51. package/dist/agent-operations/verify-scene.js +4 -2
  52. package/dist/agent-operations/wall-object-observations.d.ts.map +1 -1
  53. package/dist/agent-operations/wall-object-observations.js +1 -1
  54. package/dist/agent-tools/assets.js +1 -1
  55. package/dist/agent-tools/wall-openings.js +2 -2
  56. package/dist/building/__fixtures__/wall-opening-cases.d.ts +13 -12
  57. package/dist/building/__fixtures__/wall-opening-cases.d.ts.map +1 -1
  58. package/dist/building/level-duplication.d.ts +1281 -1279
  59. package/dist/building/level-duplication.d.ts.map +1 -1
  60. package/dist/building/level-duplication.js +3 -1
  61. package/dist/building/merge-windows.d.ts.map +1 -1
  62. package/dist/building/merge-windows.js +4 -3
  63. package/dist/building/wall-openings.d.ts +95 -81
  64. package/dist/building/wall-openings.d.ts.map +1 -1
  65. package/dist/building/wall-openings.js +74 -25
  66. package/dist/commands/structure/shared.d.ts +3203 -3202
  67. package/dist/commands/structure/shared.d.ts.map +1 -1
  68. package/dist/commands/structure/zone-wall-merge.d.ts +2028 -2025
  69. package/dist/commands/structure/zone-wall-merge.d.ts.map +1 -1
  70. package/dist/contracts/reference-inventory.d.ts.map +1 -1
  71. package/dist/contracts/reference-inventory.js +0 -1
  72. package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts +6 -1
  73. package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts.map +1 -1
  74. package/dist/hooks/spatial-grid/spatial-grid-manager.js +30 -9
  75. package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts +2101 -2100
  76. package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts.map +1 -1
  77. package/dist/hooks/spatial-grid/spatial-grid-sync.js +8 -4
  78. package/dist/index.d.ts +13 -4
  79. package/dist/index.d.ts.map +1 -1
  80. package/dist/index.js +13 -4
  81. package/dist/lib/__fixtures__/mezzanine.d.ts +6428 -6424
  82. package/dist/lib/__fixtures__/mezzanine.d.ts.map +1 -1
  83. package/dist/lib/absorb-wall-separators.d.ts +2267 -2266
  84. package/dist/lib/absorb-wall-separators.d.ts.map +1 -1
  85. package/dist/lib/asset-storage.d.ts.map +1 -1
  86. package/dist/lib/asset-storage.js +3 -0
  87. package/dist/lib/build-mode.d.ts +11 -0
  88. package/dist/lib/build-mode.d.ts.map +1 -0
  89. package/dist/lib/build-mode.js +24 -0
  90. package/dist/lib/corner-pair.d.ts +2 -0
  91. package/dist/lib/corner-pair.d.ts.map +1 -1
  92. package/dist/lib/door-interaction.d.ts +14 -0
  93. package/dist/lib/door-interaction.d.ts.map +1 -0
  94. package/dist/lib/door-interaction.js +62 -0
  95. package/dist/lib/elevator-support.d.ts +15 -0
  96. package/dist/lib/elevator-support.d.ts.map +1 -0
  97. package/dist/lib/elevator-support.js +40 -0
  98. package/dist/lib/floor-foundation-datum.d.ts.map +1 -1
  99. package/dist/lib/floor-foundation-datum.js +5 -1
  100. package/dist/lib/floor-intent-changes.d.ts.map +1 -1
  101. package/dist/lib/floor-intent-changes.js +6 -4
  102. package/dist/lib/floorplan/context.d.ts +95 -0
  103. package/dist/lib/floorplan/context.d.ts.map +1 -0
  104. package/dist/lib/floorplan/context.js +155 -0
  105. package/dist/lib/floorplan/index.d.ts +6 -0
  106. package/dist/lib/floorplan/index.d.ts.map +1 -0
  107. package/dist/lib/floorplan/index.js +5 -0
  108. package/dist/lib/floorplan/marks.d.ts +71 -0
  109. package/dist/lib/floorplan/marks.d.ts.map +1 -0
  110. package/dist/lib/floorplan/marks.js +157 -0
  111. package/dist/lib/floorplan/plan-math.d.ts +18 -0
  112. package/dist/lib/floorplan/plan-math.d.ts.map +1 -0
  113. package/dist/lib/floorplan/plan-math.js +82 -0
  114. package/dist/lib/floorplan/svg-paths.d.ts +17 -0
  115. package/dist/lib/floorplan/svg-paths.d.ts.map +1 -0
  116. package/dist/lib/floorplan/svg-paths.js +92 -0
  117. package/dist/lib/floorplan/wall-affordances.d.ts +31 -0
  118. package/dist/lib/floorplan/wall-affordances.d.ts.map +1 -0
  119. package/dist/lib/floorplan/wall-affordances.js +24 -0
  120. package/dist/lib/hierarchy.d.ts +19 -0
  121. package/dist/lib/hierarchy.d.ts.map +1 -0
  122. package/dist/lib/hierarchy.js +53 -0
  123. package/dist/lib/opening-floor-datum.d.ts +1 -1
  124. package/dist/lib/opening-floor-datum.d.ts.map +1 -1
  125. package/dist/lib/opening-floor-datum.js +2 -2
  126. package/dist/lib/own-floor-intent.d.ts.map +1 -1
  127. package/dist/lib/own-floor-intent.js +2 -2
  128. package/dist/lib/polygon-boolean.d.ts.map +1 -1
  129. package/dist/lib/polygon-boolean.js +2 -1
  130. package/dist/lib/room-floor-elevation.d.ts +12 -0
  131. package/dist/lib/room-floor-elevation.d.ts.map +1 -0
  132. package/dist/lib/room-floor-elevation.js +41 -0
  133. package/dist/lib/room-floor-feasibility.d.ts.map +1 -1
  134. package/dist/lib/room-floor-feasibility.js +1 -1
  135. package/dist/lib/space-detection.d.ts.map +1 -1
  136. package/dist/lib/space-detection.js +1 -0
  137. package/dist/lib/wall-face-script.d.ts.map +1 -1
  138. package/dist/lib/wall-face-script.js +3 -3
  139. package/dist/lib/window-interaction.d.ts +16 -0
  140. package/dist/lib/window-interaction.d.ts.map +1 -0
  141. package/dist/lib/window-interaction.js +82 -0
  142. package/dist/lib/zone-quantities.js +1 -1
  143. package/dist/node-slots/column.d.ts +5 -0
  144. package/dist/node-slots/column.d.ts.map +1 -1
  145. package/dist/node-slots/column.js +10 -0
  146. package/dist/registry/__fixtures__/roof-planes.d.ts +69 -0
  147. package/dist/registry/__fixtures__/roof-planes.d.ts.map +1 -0
  148. package/dist/registry/__fixtures__/roof-planes.js +59 -0
  149. package/dist/registry/index.d.ts +3 -2
  150. package/dist/registry/index.d.ts.map +1 -1
  151. package/dist/registry/index.js +2 -1
  152. package/dist/registry/registry.d.ts +5 -0
  153. package/dist/registry/registry.d.ts.map +1 -1
  154. package/dist/registry/registry.js +10 -0
  155. package/dist/registry/roofs.d.ts +34 -0
  156. package/dist/registry/roofs.d.ts.map +1 -0
  157. package/dist/registry/roofs.js +61 -0
  158. package/dist/registry/types.d.ts +54 -0
  159. package/dist/registry/types.d.ts.map +1 -1
  160. package/dist/registry/validate-relations.d.ts +5 -1
  161. package/dist/registry/validate-relations.d.ts.map +1 -1
  162. package/dist/registry/validate-relations.js +6 -2
  163. package/dist/schema/asset-url.d.ts +8 -0
  164. package/dist/schema/asset-url.d.ts.map +1 -1
  165. package/dist/schema/asset-url.js +17 -0
  166. package/dist/schema/index.d.ts +1 -1
  167. package/dist/schema/index.d.ts.map +1 -1
  168. package/dist/schema/index.js +1 -1
  169. package/dist/schema/nodes/roof-segment-resize.d.ts.map +1 -1
  170. package/dist/schema/nodes/roof-segment-resize.js +2 -2
  171. package/dist/schema/nodes/roof-segment.d.ts +2 -0
  172. package/dist/schema/nodes/roof-segment.d.ts.map +1 -1
  173. package/dist/schema/nodes/roof-segment.js +40 -2
  174. package/dist/schema/nodes/roof.d.ts +1 -1
  175. package/dist/schema/nodes/roof.d.ts.map +1 -1
  176. package/dist/schema/nodes/roof.js +13 -8
  177. package/dist/schema/nodes/wall.d.ts +1 -0
  178. package/dist/schema/nodes/wall.d.ts.map +1 -1
  179. package/dist/schema/nodes/wall.js +6 -0
  180. package/dist/schema/types.d.ts +2 -1
  181. package/dist/schema/types.d.ts.map +1 -1
  182. package/dist/services/index.d.ts +1 -1
  183. package/dist/services/index.d.ts.map +1 -1
  184. package/dist/services/index.js +1 -1
  185. package/dist/services/movement.d.ts +7 -0
  186. package/dist/services/movement.d.ts.map +1 -1
  187. package/dist/services/movement.js +13 -0
  188. package/dist/services/port-connectivity.d.ts +15 -6
  189. package/dist/services/port-connectivity.d.ts.map +1 -1
  190. package/dist/services/port-connectivity.js +83 -17
  191. package/dist/services/roof-bearing.js +2 -1
  192. package/dist/services/roof-level.d.ts.map +1 -1
  193. package/dist/services/roof-level.js +12 -2
  194. package/dist/services/roof-move.d.ts +4 -2
  195. package/dist/services/roof-move.d.ts.map +1 -1
  196. package/dist/services/roof-move.js +21 -9
  197. package/dist/services/storey.d.ts +6 -1
  198. package/dist/services/storey.d.ts.map +1 -1
  199. package/dist/services/storey.js +11 -2
  200. package/dist/spatial/usage-field/findings.d.ts +7 -1
  201. package/dist/spatial/usage-field/findings.d.ts.map +1 -1
  202. package/dist/spatial/usage-field/findings.js +42 -10
  203. package/dist/spatial/usage-field/path.d.ts.map +1 -1
  204. package/dist/spatial/usage-field/path.js +28 -18
  205. package/dist/spatial/usage-field/swings.d.ts +1 -0
  206. package/dist/spatial/usage-field/swings.d.ts.map +1 -1
  207. package/dist/spatial/usage-field/walls.d.ts +2 -0
  208. package/dist/spatial/usage-field/walls.d.ts.map +1 -1
  209. package/dist/spatial/usage-field/walls.js +18 -4
  210. package/dist/store/actions/node-actions.d.ts +2 -1
  211. package/dist/store/actions/node-actions.d.ts.map +1 -1
  212. package/dist/store/actions/node-actions.js +23 -5
  213. package/dist/store/derived-node-guard.d.ts.map +1 -1
  214. package/dist/store/derived-node-guard.js +2 -1
  215. package/dist/store/scene-annotations.d.ts +4634 -4632
  216. package/dist/store/scene-annotations.d.ts.map +1 -1
  217. package/dist/systems/document-reconcile.d.ts.map +1 -1
  218. package/dist/systems/document-reconcile.js +1 -2
  219. package/dist/systems/elevator/elevator-geometry.d.ts +25 -0
  220. package/dist/systems/elevator/elevator-geometry.d.ts.map +1 -1
  221. package/dist/systems/elevator/elevator-geometry.js +40 -8
  222. package/dist/systems/elevator/elevator-opening-sync.d.ts.map +1 -1
  223. package/dist/systems/elevator/elevator-opening-sync.js +4 -35
  224. package/dist/systems/elevator/elevator-runtime.d.ts.map +1 -1
  225. package/dist/systems/elevator/elevator-runtime.js +95 -18
  226. package/dist/systems/elevator/elevator-service.d.ts.map +1 -1
  227. package/dist/systems/elevator/elevator-service.js +24 -4
  228. package/dist/systems/roof/roof-elevation.d.ts +11 -6
  229. package/dist/systems/roof/roof-elevation.d.ts.map +1 -1
  230. package/dist/systems/roof/roof-elevation.js +26 -12
  231. package/dist/systems/slab/__fixtures__/floor-step.d.ts +5 -1
  232. package/dist/systems/slab/__fixtures__/floor-step.d.ts.map +1 -1
  233. package/dist/systems/slab/__fixtures__/raised-room.d.ts +2218 -2214
  234. package/dist/systems/slab/__fixtures__/raised-room.d.ts.map +1 -1
  235. package/dist/systems/stair/stair-opening-preview.d.ts +3203 -3202
  236. package/dist/systems/stair/stair-opening-preview.d.ts.map +1 -1
  237. package/dist/systems/wall/wall-curve.d.ts +10 -0
  238. package/dist/systems/wall/wall-curve.d.ts.map +1 -1
  239. package/dist/systems/wall/wall-curve.js +38 -0
  240. package/dist/systems/wall/wall-frame.d.ts.map +1 -1
  241. package/dist/systems/wall/wall-frame.js +8 -0
  242. package/dist/systems/wall/wall-merge.d.ts +9 -1
  243. package/dist/systems/wall/wall-merge.d.ts.map +1 -1
  244. package/dist/systems/wall/wall-merge.js +38 -6
  245. package/dist/systems/wall/wall-top.d.ts +10 -3
  246. package/dist/systems/wall/wall-top.d.ts.map +1 -1
  247. package/dist/systems/wall/wall-top.js +24 -8
  248. package/dist/systems/wall/wall-topology.d.ts.map +1 -1
  249. package/dist/systems/wall/wall-topology.js +19 -1
  250. package/dist/utils/ensure-scene-openings.d.ts +5595 -5593
  251. package/dist/utils/ensure-scene-openings.d.ts.map +1 -1
  252. package/dist/utils/floor-plate-migration.d.ts +2267 -2266
  253. package/dist/utils/floor-plate-migration.d.ts.map +1 -1
  254. package/dist/utils/measurement-format.d.ts +27 -0
  255. package/dist/utils/measurement-format.d.ts.map +1 -0
  256. package/dist/utils/measurement-format.js +143 -0
  257. package/dist/utils/owned-floor-opening-migration.d.ts +653 -652
  258. package/dist/utils/owned-floor-opening-migration.d.ts.map +1 -1
  259. package/dist/utils/reconcile-structure-on-load.d.ts +1724 -1723
  260. package/dist/utils/reconcile-structure-on-load.d.ts.map +1 -1
  261. package/dist/utils/scene-bounds.d.ts +32 -0
  262. package/dist/utils/scene-bounds.d.ts.map +1 -0
  263. package/dist/utils/scene-bounds.js +201 -0
  264. package/dist/validation/validate-build-json.d.ts.map +1 -1
  265. package/dist/validation/validate-build-json.js +3 -1
  266. package/package.json +1 -1
@@ -35,7 +35,7 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
35
35
  fromIds: string[];
36
36
  } | undefined;
37
37
  } | undefined;
38
- id: `elevator_${string}`;
38
+ id: `bvent_${string}`;
39
39
  material?: {
40
40
  id?: string | undefined;
41
41
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
@@ -58,31 +58,24 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
58
58
  bumpScale?: number | undefined;
59
59
  } | undefined;
60
60
  } | undefined;
61
- materialPreset?: string | undefined;
62
61
  slots?: Record<string, string> | undefined;
62
+ materialPreset: string;
63
+ roofSegmentId?: string | undefined;
63
64
  position: [number, number, number];
64
65
  rotation: number;
65
66
  width: number;
66
67
  depth: number;
67
- shaftWidth?: number | undefined;
68
- shaftDepth?: number | undefined;
69
- shaftWallThickness: number;
70
- shaftStyle: "glass" | "solid";
71
- cabHeight: number;
72
- doorWidth: number;
73
- doorHeight: number;
74
- doorStyle: "center-opening" | "single-left" | "single-right";
75
- doorPanelStyle: "glass-frame" | "segmented-panel" | "solid-panel";
76
- fromLevelId: string | null;
77
- toLevelId: string | null;
78
- servedLevelIds?: string[] | undefined;
79
- disabledLevelIds: string[];
80
- serviceOnlyLevelIds: string[];
81
- defaultLevelId: string | null;
82
- speed: number;
83
- doorDurationMs: number;
84
- dwellMs: number;
85
- type: "elevator";
68
+ height: number;
69
+ hoodOverhang: number;
70
+ topTaper: number;
71
+ capHeight: number;
72
+ capGap: number;
73
+ domeCurvature: number;
74
+ baseInset: number;
75
+ baseHeight: number;
76
+ cornerBevel: number;
77
+ style: "box" | "cap" | "dome";
78
+ type: "box-vent";
86
79
  } | {
87
80
  object: "node";
88
81
  name?: string | undefined;
@@ -107,21 +100,11 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
107
100
  fromIds: string[];
108
101
  } | undefined;
109
102
  } | undefined;
110
- type: "item";
111
- id: `item_${string}`;
112
- position: [number, number, number];
113
- rotation: [number, number, number];
114
- scale: [number, number, number];
115
- side?: "back" | "front" | undefined;
103
+ id: `column_${string}`;
116
104
  children: string[];
117
- wallId?: string | undefined;
118
- wallT?: number | undefined;
119
- roofSegmentId?: string | undefined;
120
- roofFace?: "back" | "front" | "left" | "right" | undefined;
121
- blockFaceId?: string | undefined;
105
+ position: [number, number, number];
106
+ rotation: number;
122
107
  supportSlabId?: string | undefined;
123
- collectionIds?: `collection_${string}`[] | undefined;
124
- slots?: Record<string, string> | undefined;
125
108
  source?: {
126
109
  kind: "script";
127
110
  meta?: {
@@ -236,76 +219,104 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
236
219
  floorPlan: string;
237
220
  } | undefined;
238
221
  } | undefined;
239
- asset: {
240
- id: string;
241
- category: string;
242
- name: string;
243
- thumbnail: string;
244
- floorPlanUrl?: string | undefined;
245
- source: "community" | "library" | "mine";
246
- isDraft?: boolean | undefined;
247
- src: string;
248
- dimensions: [number, number, number];
249
- attachTo?: "ceiling" | "wall" | "wall-side" | undefined;
250
- recessed?: boolean | undefined;
251
- tags?: string[] | undefined;
252
- functionTags?: string[] | undefined;
253
- offset: [number, number, number];
254
- rotation: [number, number, number];
255
- scale: [number, number, number];
256
- surface?: {
257
- height: number;
222
+ style: "cluster" | "dravidian-carved" | "faceted" | "fluted" | "lathe-turned" | "plain";
223
+ crossSection: "octagonal" | "rectangular" | "round" | "sixteen-sided" | "square";
224
+ height: number;
225
+ radius: number;
226
+ width: number;
227
+ depth: number;
228
+ edgeSoftness: number;
229
+ baseHeight: number;
230
+ capitalHeight: number;
231
+ shaftProfile: "baluster" | "bulged" | "hourglass" | "straight" | "tapered";
232
+ shaftTaper: number;
233
+ shaftBulge: number;
234
+ shaftStartScale: number;
235
+ shaftEndScale: number;
236
+ shaftSegmentCount: number;
237
+ shaftTwistStep: number;
238
+ shaftCornerRadius: number;
239
+ shaftDetail: "fluted" | "lathe-turned" | "none" | "panelled" | "spiral";
240
+ baseStyle: "lotus" | "none" | "panelled-pedestal" | "ribbed-lotus" | "round-rings" | "simple-square" | "square-plinth" | "stepped-square";
241
+ baseWidthScale: number;
242
+ baseDepthScale: number;
243
+ baseTierCount: number;
244
+ baseStepSpread: number;
245
+ basePlinthHeightRatio: number;
246
+ baseRoundBandScale: number;
247
+ baseNeckScale: number;
248
+ baseRoundBandCount: number;
249
+ baseRibCount: number;
250
+ baseCarvingLevel: number;
251
+ basePanelInset: number;
252
+ capitalStyle: "corinthian-leaf" | "doric" | "ionic-volute" | "leaf-carved" | "none" | "rounded" | "simple" | "simple-slab" | "south-indian-bracket" | "stepped" | "volute" | "wood-bracket";
253
+ capitalWidthScale: number;
254
+ capitalDepthScale: number;
255
+ capitalTierCount: number;
256
+ capitalStepSpread: number;
257
+ capitalBandCount: number;
258
+ voluteSize: number;
259
+ voluteCount: number;
260
+ leafCount: number;
261
+ leafRows: number;
262
+ bracketDepth: number;
263
+ bracketTierCount: number;
264
+ pendantCount: number;
265
+ capitalCarvingLevel: number;
266
+ ringCount: number;
267
+ ringPlacement: "bottom" | "ends" | "even" | "top";
268
+ ringThickness: number;
269
+ ringSpread: number;
270
+ fluteCount: number;
271
+ fluteDepth: number;
272
+ fluteWidth: number;
273
+ spiralTwist: number;
274
+ spiralRibCount: number;
275
+ panelCount: number;
276
+ panelInsetDepth: number;
277
+ panelShape: "arched" | "diamond" | "rectangle";
278
+ latheRingCount: number;
279
+ latheRingSpacing: "bottom" | "ends" | "even" | "top";
280
+ carvingLevel: number;
281
+ carvingPlacement: "all" | "base" | "capital" | "shaft";
282
+ lowerBandEnabled: boolean;
283
+ lowerBandHeight: number;
284
+ lowerBandCarvingLevel: number;
285
+ dentilCount: number;
286
+ beadCount: number;
287
+ supportStyle: "a-frame" | "box-frame" | "k-brace" | "portal-frame" | "single-strut" | "trestle" | "tripod" | "v-frame" | "vertical" | "x-brace" | "y-frame";
288
+ braceWidth: number;
289
+ braceDepth: number;
290
+ braceBottomSpread: number;
291
+ braceTopSpread: number;
292
+ bracePlateEnabled: boolean;
293
+ role?: "ornament" | "post" | undefined;
294
+ postBase?: "none" | "pier" | "post-base" | undefined;
295
+ material?: {
296
+ id?: string | undefined;
297
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
298
+ properties?: {
299
+ color: string;
300
+ roughness: number;
301
+ metalness: number;
302
+ opacity: number;
303
+ transparent: boolean;
304
+ side: "back" | "double" | "front";
258
305
  } | undefined;
259
- interactive?: {
260
- controls: ({
261
- kind: "toggle";
262
- label?: string | undefined;
263
- default?: boolean | undefined;
264
- } | {
265
- kind: "slider";
266
- label: string;
267
- min: number;
268
- max: number;
269
- step: number;
270
- unit?: string | undefined;
271
- displayMode: "dial" | "slider" | "stepper";
272
- default?: number | undefined;
273
- } | {
274
- kind: "temperature";
275
- label: string;
276
- min: number;
277
- max: number;
278
- unit: "C" | "F";
279
- default?: number | undefined;
280
- })[];
281
- effects: ({
282
- kind: "animation";
283
- mode?: "ambient" | "open-close" | undefined;
284
- control?: number | undefined;
285
- clips: {
286
- on?: string | undefined;
287
- off?: string | undefined;
288
- loop?: string | undefined;
289
- };
290
- } | {
291
- kind: "light";
292
- color: string;
293
- intensityRange: [number, number];
294
- distance?: number | undefined;
295
- offset: [number, number, number];
296
- spot?: {
297
- direction: [number, number, number];
298
- angle: number;
299
- softness: number;
300
- } | undefined;
301
- shadows?: boolean | undefined;
302
- glow?: {
303
- size: number;
304
- strength: number;
305
- } | undefined;
306
- })[];
306
+ texture?: {
307
+ url: string;
308
+ repeat?: [number, number] | undefined;
309
+ scale?: number | undefined;
310
+ offset?: [number, number] | undefined;
311
+ normalMap?: string | undefined;
312
+ normalScale?: number | undefined;
313
+ bumpMap?: string | undefined;
314
+ bumpScale?: number | undefined;
307
315
  } | undefined;
308
- };
316
+ } | undefined;
317
+ materialPreset?: string | undefined;
318
+ slots?: Record<string, string> | undefined;
319
+ type: "column";
309
320
  } | {
310
321
  object: "node";
311
322
  name?: string | undefined;
@@ -330,74 +341,70 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
330
341
  fromIds: string[];
331
342
  } | undefined;
332
343
  } | undefined;
333
- id: `ceiling_${string}`;
334
- children: (`item_${string}` | `procedural-item_${string}`)[];
335
- material?: {
336
- id?: string | undefined;
337
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
338
- properties?: {
339
- color: string;
340
- roughness: number;
341
- metalness: number;
342
- opacity: number;
343
- transparent: boolean;
344
- side: "back" | "double" | "front";
345
- } | undefined;
346
- texture?: {
347
- url: string;
348
- repeat?: [number, number] | undefined;
349
- scale?: number | undefined;
350
- offset?: [number, number] | undefined;
351
- normalMap?: string | undefined;
352
- normalScale?: number | undefined;
353
- bumpMap?: string | undefined;
354
- bumpScale?: number | undefined;
355
- } | undefined;
356
- } | undefined;
357
- materialPreset?: string | undefined;
358
- slots?: Record<string, string> | undefined;
359
- polygon: [number, number][];
360
- holes: [number, number][][];
361
- holeMetadata: {
362
- source: "elevator" | "floor-opening" | "manual" | "room" | "stair";
363
- openingId?: string | undefined;
364
- stairId?: string | undefined;
365
- elevatorId?: string | undefined;
366
- }[];
367
- openingIds?: string[] | undefined;
368
- height?: number | undefined;
369
- buildUp?: {
370
- presetId?: string | undefined;
371
- finish?: {
372
- kind: "drywall" | "plaster" | "wood-plank";
373
- thickness: number;
374
- name?: string | undefined;
375
- } | undefined;
376
- framing?: {
377
- system: "joists" | "truss-chords";
378
- size: "2x10" | "2x12" | "2x4" | "2x6" | "2x8";
379
- spacing: number;
380
- } | undefined;
381
- decking?: {
382
- kind: "osb" | "plywood";
383
- thickness: number;
384
- name?: string | undefined;
385
- } | undefined;
386
- insulation?: {
387
- kind: "batt" | "blown" | "rigid";
388
- thickness: number;
389
- name?: string | undefined;
344
+ id: `duct-fitting_${string}`;
345
+ position: [number, number, number];
346
+ rotation: [number, number, number];
347
+ fittingType: "access-panel" | "coupling" | "cross" | "damper" | "elbow" | "end-cap" | "reducer" | "tee" | "transition";
348
+ shape: "oval" | "rect" | "round";
349
+ inletShape?: "oval" | "rect" | "round" | undefined;
350
+ outletShape?: "oval" | "rect" | "round" | undefined;
351
+ width: number;
352
+ height: number;
353
+ shape2: "oval" | "rect" | "round";
354
+ width2: number;
355
+ height2: number;
356
+ angle: number;
357
+ branchAngle: number;
358
+ diameter: number;
359
+ diameter2: number;
360
+ ductMaterial: "duct-board" | "flex" | "sheet-metal";
361
+ system: "return" | "supply";
362
+ damperAngle: number;
363
+ panelWidth: number;
364
+ panelHeight: number;
365
+ slots?: Record<string, string> | undefined;
366
+ type: "duct-fitting";
367
+ } | {
368
+ object: "node";
369
+ name?: string | undefined;
370
+ parentId: string | null;
371
+ visible: boolean;
372
+ camera?: {
373
+ position: [number, number, number];
374
+ target: [number, number, number];
375
+ mode: "orthographic" | "perspective";
376
+ fov?: number | undefined;
377
+ zoom?: number | undefined;
378
+ } | undefined;
379
+ metadata: Record<string, unknown>;
380
+ provenance?: {
381
+ refs: {
382
+ ns?: string | undefined;
383
+ id: string;
384
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
385
+ }[];
386
+ lineage?: {
387
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
388
+ fromIds: string[];
390
389
  } | undefined;
391
390
  } | undefined;
392
- regions?: {
393
- id: string;
394
- polygon: [number, number][];
395
- finish: string | Record<string, unknown>;
396
- }[] | undefined;
397
- boundary?: "auto" | undefined;
398
- zoneId?: string | undefined;
399
- autoFromWalls: boolean;
400
- type: "ceiling";
391
+ id: `hvac-equipment_${string}`;
392
+ position: [number, number, number];
393
+ rotation: number;
394
+ supportSlabId?: string | undefined;
395
+ equipmentType: "air-handler" | "condenser" | "furnace";
396
+ width: number;
397
+ depth: number;
398
+ height: number;
399
+ supplyShape: "oval" | "rect" | "round";
400
+ returnShape: "oval" | "rect" | "round";
401
+ supplyDiameter: number;
402
+ returnDiameter: number;
403
+ supplyWidth: number;
404
+ supplyHeight: number;
405
+ returnWidth: number;
406
+ returnHeight: number;
407
+ type: "hvac-equipment";
401
408
  } | {
402
409
  object: "node";
403
410
  name?: string | undefined;
@@ -422,42 +429,17 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
422
429
  fromIds: string[];
423
430
  } | undefined;
424
431
  } | undefined;
425
- id: `construction-dimension_${string}`;
426
- anchors: ({
427
- kind: "feature";
428
- reference: {
429
- nodeId: string;
430
- featureId: string;
431
- parameters?: Record<string, string | number | boolean> | undefined;
432
- };
433
- fallback: [number, number, number];
434
- } | [number, number, number])[];
435
- baseline: {
436
- origin: [number, number];
437
- direction: [number, number];
438
- };
439
- chainMode: "continuous" | "point-to-point";
440
- mode: "angular" | "arc-length" | "center-mark" | "chord" | "coordinate" | "diameter" | "linear" | "radius";
441
- featureCount: number;
442
- showCenterMark: boolean;
443
- prefix: string;
444
- suffix: string;
445
- textOverride: string | null;
446
- datumPolicy: "centerline" | "finish-face" | "structural-face" | "wall-face";
447
- terminator: "architectural-tick" | "dot" | "filled-arrow" | "open-arrow";
448
- textPosition: "above" | "centered";
449
- imperialPrecision: "1" | "1/16" | "1/2" | "1/4" | "1/8";
450
- metricNotation: "meters" | "millimeters";
451
- extensionStartGap: number;
452
- extensionOvershoot: number;
453
- drawingType: "floor-plan" | "foundation-plan" | "reflected-ceiling-plan" | "roof-plan" | "site-plan";
454
- drawingOverrides: {
455
- drawingType: "floor-plan" | "foundation-plan" | "reflected-ceiling-plan" | "roof-plan" | "site-plan";
456
- presentation: "controlled" | "omit" | "shown";
457
- suppressedSegmentIndexes: number[];
458
- }[];
459
- controllingDimensionId: `construction-dimension_${string}` | null;
460
- type: "construction-dimension";
432
+ id: `pipe-fitting_${string}`;
433
+ position: [number, number, number];
434
+ rotation: [number, number, number];
435
+ fittingType: "cleanout" | "coupling" | "cross" | "elbow" | "end-cap" | "reducer" | "sanitary-tee" | "wye";
436
+ angle: number;
437
+ diameter: number;
438
+ diameter2: number;
439
+ cleanoutStyle: "end" | "inline";
440
+ pipeMaterial: "abs" | "cast-iron" | "pvc";
441
+ system: "vent" | "waste";
442
+ type: "pipe-fitting";
461
443
  } | {
462
444
  object: "node";
463
445
  name?: string | undefined;
@@ -698,29 +680,20 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
698
680
  fromIds: string[];
699
681
  } | undefined;
700
682
  } | undefined;
701
- id: `door_${string}`;
702
- material?: {
703
- id?: string | undefined;
704
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
705
- properties?: {
706
- color: string;
707
- roughness: number;
708
- metalness: number;
709
- opacity: number;
710
- transparent: boolean;
711
- side: "back" | "double" | "front";
712
- } | undefined;
713
- texture?: {
714
- url: string;
715
- repeat?: [number, number] | undefined;
716
- scale?: number | undefined;
717
- offset?: [number, number] | undefined;
718
- normalMap?: string | undefined;
719
- normalScale?: number | undefined;
720
- bumpMap?: string | undefined;
721
- bumpScale?: number | undefined;
722
- } | undefined;
723
- } | undefined;
683
+ type: "item";
684
+ id: `item_${string}`;
685
+ position: [number, number, number];
686
+ rotation: [number, number, number];
687
+ scale: [number, number, number];
688
+ side?: "back" | "front" | undefined;
689
+ children: string[];
690
+ wallId?: string | undefined;
691
+ wallT?: number | undefined;
692
+ roofSegmentId?: string | undefined;
693
+ roofFace?: "back" | "front" | "left" | "right" | undefined;
694
+ blockFaceId?: string | undefined;
695
+ supportSlabId?: string | undefined;
696
+ collectionIds?: `collection_${string}`[] | undefined;
724
697
  slots?: Record<string, string> | undefined;
725
698
  source?: {
726
699
  kind: "script";
@@ -836,97 +809,101 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
836
809
  floorPlan: string;
837
810
  } | undefined;
838
811
  } | undefined;
839
- position: [number, number, number];
840
- rotation: [number, number, number];
841
- side?: "back" | "front" | undefined;
842
- verticalAnchor?: "floor" | "wall" | undefined;
843
- floorThresholdVersion: 0 | 1;
844
- wallId?: string | undefined;
845
- roofSegmentId?: string | undefined;
846
- roofFace?: "back" | "front" | "left" | "right" | undefined;
847
- width: number;
848
- height: number;
849
- sidelightLeft?: number | undefined;
850
- sidelightRight?: number | undefined;
851
- transomHeight?: number | undefined;
852
- slidingStyle?: "bypass" | "patio" | undefined;
853
- mark?: string | undefined;
854
- constructionType: "framed" | "masonry";
855
- dimensionReference: "finish-opening" | "masonry-opening" | "nominal" | "rough-opening";
856
- roughOpeningWidth?: number | undefined;
857
- roughOpeningHeight?: number | undefined;
858
- masonryOpeningWidth?: number | undefined;
859
- masonryOpeningHeight?: number | undefined;
860
- finishOpeningWidth?: number | undefined;
861
- finishOpeningHeight?: number | undefined;
862
- doorCategory: "garage" | "interior";
863
- doorType: "barn" | "double" | "folding" | "french" | "garage-rollup" | "garage-sectional" | "garage-tiltup" | "hinged" | "pocket" | "sliding";
864
- leafCount: 1 | 2 | 3 | 4 | 6 | 8;
865
- operationState: number;
866
- slideDirection: "left" | "right";
867
- trackStyle: "none" | "overhead" | "pocket" | "visible";
868
- garagePanelCount: number;
869
- openingKind: "door" | "opening";
870
- openingShape: "arch" | "rectangle" | "rounded";
871
- openingRadiusMode: "all" | "individual";
872
- openingTopRadii: [number, number];
873
- cornerRadius: number;
874
- archHeight: number;
875
- openingRevealRadius: number;
876
- frameThickness: number;
877
- frameDepth?: number | undefined;
878
- threshold: boolean;
879
- thresholdHeight: number;
880
- casingFaceA?: boolean | undefined;
881
- casingFaceB?: boolean | undefined;
882
- casingWidth?: number | undefined;
883
- hingesSide: "left" | "right";
884
- swingDirection: "inward" | "outward";
885
- swingAngle: number;
886
- segments: {
887
- type: "empty" | "glass" | "panel";
888
- heightRatio: number;
889
- columnRatios: number[];
890
- dividerThickness: number;
891
- panelDepth: number;
892
- panelInset: number;
893
- }[];
894
- handle: boolean;
895
- handleStyle?: "bar" | "knob" | "lever" | "lever-curved" | "plate" | undefined;
896
- handleHeight: number;
897
- handleSide: "left" | "right";
898
- contentPadding: [number, number];
899
- doorCloser: boolean;
900
- panicBar: boolean;
901
- panicBarStyle: "crossbar" | "touchbar";
902
- panicBarRods: boolean;
903
- panicBarHeight: number;
904
- type: "door";
905
- } | {
906
- object: "node";
907
- name?: string | undefined;
908
- parentId: string | null;
909
- visible: boolean;
910
- camera?: {
911
- position: [number, number, number];
912
- target: [number, number, number];
913
- mode: "orthographic" | "perspective";
914
- fov?: number | undefined;
915
- zoom?: number | undefined;
916
- } | undefined;
917
- metadata: Record<string, unknown>;
918
- provenance?: {
919
- refs: {
920
- ns?: string | undefined;
921
- id: string;
922
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
923
- }[];
812
+ asset: {
813
+ id: string;
814
+ category: string;
815
+ name: string;
816
+ thumbnail: string;
817
+ floorPlanUrl?: string | undefined;
818
+ source: "community" | "library" | "mine";
819
+ isDraft?: boolean | undefined;
820
+ src: string;
821
+ dimensions: [number, number, number];
822
+ attachTo?: "ceiling" | "wall" | "wall-side" | undefined;
823
+ recessed?: boolean | undefined;
824
+ tags?: string[] | undefined;
825
+ functionTags?: string[] | undefined;
826
+ offset: [number, number, number];
827
+ rotation: [number, number, number];
828
+ scale: [number, number, number];
829
+ surface?: {
830
+ height: number;
831
+ } | undefined;
832
+ interactive?: {
833
+ controls: ({
834
+ kind: "toggle";
835
+ label?: string | undefined;
836
+ default?: boolean | undefined;
837
+ } | {
838
+ kind: "slider";
839
+ label: string;
840
+ min: number;
841
+ max: number;
842
+ step: number;
843
+ unit?: string | undefined;
844
+ displayMode: "dial" | "slider" | "stepper";
845
+ default?: number | undefined;
846
+ } | {
847
+ kind: "temperature";
848
+ label: string;
849
+ min: number;
850
+ max: number;
851
+ unit: "C" | "F";
852
+ default?: number | undefined;
853
+ })[];
854
+ effects: ({
855
+ kind: "animation";
856
+ mode?: "ambient" | "open-close" | undefined;
857
+ control?: number | undefined;
858
+ clips: {
859
+ on?: string | undefined;
860
+ off?: string | undefined;
861
+ loop?: string | undefined;
862
+ };
863
+ } | {
864
+ kind: "light";
865
+ color: string;
866
+ intensityRange: [number, number];
867
+ distance?: number | undefined;
868
+ offset: [number, number, number];
869
+ spot?: {
870
+ direction: [number, number, number];
871
+ angle: number;
872
+ softness: number;
873
+ } | undefined;
874
+ shadows?: boolean | undefined;
875
+ glow?: {
876
+ size: number;
877
+ strength: number;
878
+ } | undefined;
879
+ })[];
880
+ } | undefined;
881
+ };
882
+ } | {
883
+ object: "node";
884
+ name?: string | undefined;
885
+ parentId: string | null;
886
+ visible: boolean;
887
+ camera?: {
888
+ position: [number, number, number];
889
+ target: [number, number, number];
890
+ mode: "orthographic" | "perspective";
891
+ fov?: number | undefined;
892
+ zoom?: number | undefined;
893
+ } | undefined;
894
+ metadata: Record<string, unknown>;
895
+ provenance?: {
896
+ refs: {
897
+ ns?: string | undefined;
898
+ id: string;
899
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
900
+ }[];
924
901
  lineage?: {
925
902
  op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
926
903
  fromIds: string[];
927
904
  } | undefined;
928
905
  } | undefined;
929
- id: `window_${string}`;
906
+ id: `door_${string}`;
930
907
  material?: {
931
908
  id?: string | undefined;
932
909
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
@@ -1070,12 +1047,14 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
1070
1047
  verticalAnchor?: "floor" | "wall" | undefined;
1071
1048
  floorThresholdVersion: 0 | 1;
1072
1049
  wallId?: string | undefined;
1073
- dormerId?: string | undefined;
1074
- dormerFace?: "back" | "front" | "left" | "right" | undefined;
1075
1050
  roofSegmentId?: string | undefined;
1076
1051
  roofFace?: "back" | "front" | "left" | "right" | undefined;
1077
1052
  width: number;
1078
1053
  height: number;
1054
+ sidelightLeft?: number | undefined;
1055
+ sidelightRight?: number | undefined;
1056
+ transomHeight?: number | undefined;
1057
+ slidingStyle?: "bypass" | "patio" | undefined;
1079
1058
  mark?: string | undefined;
1080
1059
  constructionType: "framed" | "masonry";
1081
1060
  dimensionReference: "finish-opening" | "masonry-opening" | "nominal" | "rough-opening";
@@ -1085,52 +1064,49 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
1085
1064
  masonryOpeningHeight?: number | undefined;
1086
1065
  finishOpeningWidth?: number | undefined;
1087
1066
  finishOpeningHeight?: number | undefined;
1088
- openingKind: "opening" | "window";
1089
- windowType: "awning" | "bay" | "bow" | "casement" | "double-hung" | "fixed" | "hopper" | "louvered" | "single-hung" | "sliding" | "tilt-turn";
1067
+ doorCategory: "garage" | "interior";
1068
+ doorType: "barn" | "double" | "folding" | "french" | "garage-rollup" | "garage-sectional" | "garage-tiltup" | "hinged" | "pocket" | "sliding";
1069
+ leafCount: 1 | 2 | 3 | 4 | 6 | 8;
1090
1070
  operationState: number;
1091
- openingDirection?: "inward" | "outward" | undefined;
1092
- tiltTurnMode?: "tilt" | "turn" | undefined;
1093
- awningDirection: "down" | "up";
1094
- casementStyle: "french" | "single";
1095
- hingesSide: "left" | "right";
1071
+ slideDirection: "left" | "right";
1072
+ trackStyle: "none" | "overhead" | "pocket" | "visible";
1073
+ garagePanelCount: number;
1074
+ openingKind: "door" | "opening";
1096
1075
  openingShape: "arch" | "rectangle" | "rounded";
1097
1076
  openingRadiusMode: "all" | "individual";
1098
- openingCornerRadii: [number, number, number, number];
1077
+ openingTopRadii: [number, number];
1099
1078
  cornerRadius: number;
1100
1079
  archHeight: number;
1101
1080
  openingRevealRadius: number;
1102
1081
  frameThickness: number;
1103
1082
  frameDepth?: number | undefined;
1104
- windowHandle?: boolean | undefined;
1105
- sashGrid?: boolean | undefined;
1106
- columnRatios: number[];
1107
- rowRatios: number[];
1108
- columnDividerThickness: number;
1109
- rowDividerThickness: number;
1110
- corner?: {
1111
- end: "end" | "start";
1112
- partnerId: string;
1113
- post: "none" | "post";
1114
- } | undefined;
1115
- sill: boolean;
1116
- sillDepth: number;
1117
- sillThickness: number;
1118
- sillOverhang?: number | undefined;
1119
- sillInterior?: boolean | undefined;
1120
- sillInteriorDepth?: number | undefined;
1121
- sillInteriorThickness?: number | undefined;
1122
- sillInteriorOverhang?: number | undefined;
1123
- shutters?: "board-batten" | "louvered" | "none" | "panel" | undefined;
1124
- shutterWidth?: number | undefined;
1125
- shutterOpen?: number | undefined;
1126
- shutterSides?: "both" | "left" | "right" | undefined;
1127
- rollerShutter?: "box" | "concealed" | "none" | undefined;
1128
- rollerShutterBoxHeight?: number | undefined;
1129
- rollerShutterOpen?: number | undefined;
1083
+ threshold: boolean;
1084
+ thresholdHeight: number;
1130
1085
  casingFaceA?: boolean | undefined;
1131
1086
  casingFaceB?: boolean | undefined;
1132
1087
  casingWidth?: number | undefined;
1133
- type: "window";
1088
+ hingesSide: "left" | "right";
1089
+ swingDirection: "inward" | "outward";
1090
+ swingAngle: number;
1091
+ segments: {
1092
+ type: "empty" | "glass" | "panel";
1093
+ heightRatio: number;
1094
+ columnRatios: number[];
1095
+ dividerThickness: number;
1096
+ panelDepth: number;
1097
+ panelInset: number;
1098
+ }[];
1099
+ handle: boolean;
1100
+ handleStyle?: "bar" | "knob" | "lever" | "lever-curved" | "plate" | undefined;
1101
+ handleHeight: number;
1102
+ handleSide: "left" | "right";
1103
+ contentPadding: [number, number];
1104
+ doorCloser: boolean;
1105
+ panicBar: boolean;
1106
+ panicBarStyle: "crossbar" | "touchbar";
1107
+ panicBarRods: boolean;
1108
+ panicBarHeight: number;
1109
+ type: "door";
1134
1110
  } | {
1135
1111
  object: "node";
1136
1112
  name?: string | undefined;
@@ -1155,11 +1131,30 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
1155
1131
  fromIds: string[];
1156
1132
  } | undefined;
1157
1133
  } | undefined;
1158
- id: `column_${string}`;
1159
- children: string[];
1160
- position: [number, number, number];
1161
- rotation: number;
1162
- supportSlabId?: string | undefined;
1134
+ id: `window_${string}`;
1135
+ material?: {
1136
+ id?: string | undefined;
1137
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1138
+ properties?: {
1139
+ color: string;
1140
+ roughness: number;
1141
+ metalness: number;
1142
+ opacity: number;
1143
+ transparent: boolean;
1144
+ side: "back" | "double" | "front";
1145
+ } | undefined;
1146
+ texture?: {
1147
+ url: string;
1148
+ repeat?: [number, number] | undefined;
1149
+ scale?: number | undefined;
1150
+ offset?: [number, number] | undefined;
1151
+ normalMap?: string | undefined;
1152
+ normalScale?: number | undefined;
1153
+ bumpMap?: string | undefined;
1154
+ bumpScale?: number | undefined;
1155
+ } | undefined;
1156
+ } | undefined;
1157
+ slots?: Record<string, string> | undefined;
1163
1158
  source?: {
1164
1159
  kind: "script";
1165
1160
  meta?: {
@@ -1274,104 +1269,73 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
1274
1269
  floorPlan: string;
1275
1270
  } | undefined;
1276
1271
  } | undefined;
1277
- style: "cluster" | "dravidian-carved" | "faceted" | "fluted" | "lathe-turned" | "plain";
1278
- crossSection: "octagonal" | "rectangular" | "round" | "sixteen-sided" | "square";
1279
- height: number;
1280
- radius: number;
1272
+ position: [number, number, number];
1273
+ rotation: [number, number, number];
1274
+ side?: "back" | "front" | undefined;
1275
+ verticalAnchor?: "floor" | "wall" | undefined;
1276
+ floorThresholdVersion: 0 | 1;
1277
+ wallId?: string | undefined;
1278
+ dormerId?: string | undefined;
1279
+ dormerFace?: "back" | "front" | "left" | "right" | undefined;
1280
+ roofSegmentId?: string | undefined;
1281
+ roofFace?: "back" | "front" | "left" | "right" | undefined;
1281
1282
  width: number;
1282
- depth: number;
1283
- edgeSoftness: number;
1284
- baseHeight: number;
1285
- capitalHeight: number;
1286
- shaftProfile: "baluster" | "bulged" | "hourglass" | "straight" | "tapered";
1287
- shaftTaper: number;
1288
- shaftBulge: number;
1289
- shaftStartScale: number;
1290
- shaftEndScale: number;
1291
- shaftSegmentCount: number;
1292
- shaftTwistStep: number;
1293
- shaftCornerRadius: number;
1294
- shaftDetail: "fluted" | "lathe-turned" | "none" | "panelled" | "spiral";
1295
- baseStyle: "lotus" | "none" | "panelled-pedestal" | "ribbed-lotus" | "round-rings" | "simple-square" | "square-plinth" | "stepped-square";
1296
- baseWidthScale: number;
1297
- baseDepthScale: number;
1298
- baseTierCount: number;
1299
- baseStepSpread: number;
1300
- basePlinthHeightRatio: number;
1301
- baseRoundBandScale: number;
1302
- baseNeckScale: number;
1303
- baseRoundBandCount: number;
1304
- baseRibCount: number;
1305
- baseCarvingLevel: number;
1306
- basePanelInset: number;
1307
- capitalStyle: "corinthian-leaf" | "doric" | "ionic-volute" | "leaf-carved" | "none" | "rounded" | "simple" | "simple-slab" | "south-indian-bracket" | "stepped" | "volute" | "wood-bracket";
1308
- capitalWidthScale: number;
1309
- capitalDepthScale: number;
1310
- capitalTierCount: number;
1311
- capitalStepSpread: number;
1312
- capitalBandCount: number;
1313
- voluteSize: number;
1314
- voluteCount: number;
1315
- leafCount: number;
1316
- leafRows: number;
1317
- bracketDepth: number;
1318
- bracketTierCount: number;
1319
- pendantCount: number;
1320
- capitalCarvingLevel: number;
1321
- ringCount: number;
1322
- ringPlacement: "bottom" | "ends" | "even" | "top";
1323
- ringThickness: number;
1324
- ringSpread: number;
1325
- fluteCount: number;
1326
- fluteDepth: number;
1327
- fluteWidth: number;
1328
- spiralTwist: number;
1329
- spiralRibCount: number;
1330
- panelCount: number;
1331
- panelInsetDepth: number;
1332
- panelShape: "arched" | "diamond" | "rectangle";
1333
- latheRingCount: number;
1334
- latheRingSpacing: "bottom" | "ends" | "even" | "top";
1335
- carvingLevel: number;
1336
- carvingPlacement: "all" | "base" | "capital" | "shaft";
1337
- lowerBandEnabled: boolean;
1338
- lowerBandHeight: number;
1339
- lowerBandCarvingLevel: number;
1340
- dentilCount: number;
1341
- beadCount: number;
1342
- supportStyle: "a-frame" | "box-frame" | "k-brace" | "portal-frame" | "single-strut" | "trestle" | "tripod" | "v-frame" | "vertical" | "x-brace" | "y-frame";
1343
- braceWidth: number;
1344
- braceDepth: number;
1345
- braceBottomSpread: number;
1346
- braceTopSpread: number;
1347
- bracePlateEnabled: boolean;
1348
- role?: "ornament" | "post" | undefined;
1349
- postBase?: "none" | "pier" | "post-base" | undefined;
1350
- material?: {
1351
- id?: string | undefined;
1352
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1353
- properties?: {
1354
- color: string;
1355
- roughness: number;
1356
- metalness: number;
1357
- opacity: number;
1358
- transparent: boolean;
1359
- side: "back" | "double" | "front";
1360
- } | undefined;
1361
- texture?: {
1362
- url: string;
1363
- repeat?: [number, number] | undefined;
1364
- scale?: number | undefined;
1365
- offset?: [number, number] | undefined;
1366
- normalMap?: string | undefined;
1367
- normalScale?: number | undefined;
1368
- bumpMap?: string | undefined;
1369
- bumpScale?: number | undefined;
1370
- } | undefined;
1283
+ height: number;
1284
+ mark?: string | undefined;
1285
+ constructionType: "framed" | "masonry";
1286
+ dimensionReference: "finish-opening" | "masonry-opening" | "nominal" | "rough-opening";
1287
+ roughOpeningWidth?: number | undefined;
1288
+ roughOpeningHeight?: number | undefined;
1289
+ masonryOpeningWidth?: number | undefined;
1290
+ masonryOpeningHeight?: number | undefined;
1291
+ finishOpeningWidth?: number | undefined;
1292
+ finishOpeningHeight?: number | undefined;
1293
+ openingKind: "opening" | "window";
1294
+ windowType: "awning" | "bay" | "bow" | "casement" | "double-hung" | "fixed" | "hopper" | "louvered" | "single-hung" | "sliding" | "tilt-turn";
1295
+ operationState: number;
1296
+ openingDirection?: "inward" | "outward" | undefined;
1297
+ tiltTurnMode?: "tilt" | "turn" | undefined;
1298
+ awningDirection: "down" | "up";
1299
+ casementStyle: "french" | "single";
1300
+ hingesSide: "left" | "right";
1301
+ openingShape: "arch" | "rectangle" | "rounded";
1302
+ openingRadiusMode: "all" | "individual";
1303
+ openingCornerRadii: [number, number, number, number];
1304
+ cornerRadius: number;
1305
+ archHeight: number;
1306
+ openingRevealRadius: number;
1307
+ frameThickness: number;
1308
+ frameDepth?: number | undefined;
1309
+ windowHandle?: boolean | undefined;
1310
+ sashGrid?: boolean | undefined;
1311
+ columnRatios: number[];
1312
+ rowRatios: number[];
1313
+ columnDividerThickness: number;
1314
+ rowDividerThickness: number;
1315
+ corner?: {
1316
+ end: "end" | "start";
1317
+ partnerId: string;
1318
+ post: "none" | "post";
1371
1319
  } | undefined;
1372
- materialPreset?: string | undefined;
1373
- slots?: Record<string, string> | undefined;
1374
- type: "column";
1320
+ sill: boolean;
1321
+ sillDepth: number;
1322
+ sillThickness: number;
1323
+ sillOverhang?: number | undefined;
1324
+ sillInterior?: boolean | undefined;
1325
+ sillInteriorDepth?: number | undefined;
1326
+ sillInteriorThickness?: number | undefined;
1327
+ sillInteriorOverhang?: number | undefined;
1328
+ shutters?: "board-batten" | "louvered" | "none" | "panel" | undefined;
1329
+ shutterWidth?: number | undefined;
1330
+ shutterOpen?: number | undefined;
1331
+ shutterSides?: "both" | "left" | "right" | undefined;
1332
+ rollerShutter?: "box" | "concealed" | "none" | undefined;
1333
+ rollerShutterBoxHeight?: number | undefined;
1334
+ rollerShutterOpen?: number | undefined;
1335
+ casingFaceA?: boolean | undefined;
1336
+ casingFaceB?: boolean | undefined;
1337
+ casingWidth?: number | undefined;
1338
+ type: "window";
1375
1339
  } | {
1376
1340
  object: "node";
1377
1341
  name?: string | undefined;
@@ -1904,7 +1868,7 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
1904
1868
  cavityInsulation?: string | undefined;
1905
1869
  } | undefined;
1906
1870
  slots?: Record<string, string> | undefined;
1907
- children: `rseg_${string}`[];
1871
+ children: string[];
1908
1872
  type: "roof";
1909
1873
  } | {
1910
1874
  object: "node";
@@ -2459,6 +2423,7 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
2459
2423
  } | undefined;
2460
2424
  justification?: "a" | "b" | undefined;
2461
2425
  height?: number | undefined;
2426
+ endHeightOffset?: number | undefined;
2462
2427
  curveOffset?: number | undefined;
2463
2428
  supportSlabId?: string | undefined;
2464
2429
  supportOffset?: number | undefined;
@@ -2931,6 +2896,66 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
2931
2896
  topElevation?: number | undefined;
2932
2897
  supportSlabId?: string | undefined;
2933
2898
  type: "beam";
2899
+ } | {
2900
+ object: "node";
2901
+ name?: string | undefined;
2902
+ parentId: string | null;
2903
+ visible: boolean;
2904
+ camera?: {
2905
+ position: [number, number, number];
2906
+ target: [number, number, number];
2907
+ mode: "orthographic" | "perspective";
2908
+ fov?: number | undefined;
2909
+ zoom?: number | undefined;
2910
+ } | undefined;
2911
+ metadata: Record<string, unknown>;
2912
+ provenance?: {
2913
+ refs: {
2914
+ ns?: string | undefined;
2915
+ id: string;
2916
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
2917
+ }[];
2918
+ lineage?: {
2919
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
2920
+ fromIds: string[];
2921
+ } | undefined;
2922
+ } | undefined;
2923
+ id: `construction-dimension_${string}`;
2924
+ anchors: ({
2925
+ kind: "feature";
2926
+ reference: {
2927
+ nodeId: string;
2928
+ featureId: string;
2929
+ parameters?: Record<string, string | number | boolean> | undefined;
2930
+ };
2931
+ fallback: [number, number, number];
2932
+ } | [number, number, number])[];
2933
+ baseline: {
2934
+ origin: [number, number];
2935
+ direction: [number, number];
2936
+ };
2937
+ chainMode: "continuous" | "point-to-point";
2938
+ mode: "angular" | "arc-length" | "center-mark" | "chord" | "coordinate" | "diameter" | "linear" | "radius";
2939
+ featureCount: number;
2940
+ showCenterMark: boolean;
2941
+ prefix: string;
2942
+ suffix: string;
2943
+ textOverride: string | null;
2944
+ datumPolicy: "centerline" | "finish-face" | "structural-face" | "wall-face";
2945
+ terminator: "architectural-tick" | "dot" | "filled-arrow" | "open-arrow";
2946
+ textPosition: "above" | "centered";
2947
+ imperialPrecision: "1" | "1/16" | "1/2" | "1/4" | "1/8";
2948
+ metricNotation: "meters" | "millimeters";
2949
+ extensionStartGap: number;
2950
+ extensionOvershoot: number;
2951
+ drawingType: "floor-plan" | "foundation-plan" | "reflected-ceiling-plan" | "roof-plan" | "site-plan";
2952
+ drawingOverrides: {
2953
+ drawingType: "floor-plan" | "foundation-plan" | "reflected-ceiling-plan" | "roof-plan" | "site-plan";
2954
+ presentation: "controlled" | "omit" | "shown";
2955
+ suppressedSegmentIndexes: number[];
2956
+ }[];
2957
+ controllingDimensionId: `construction-dimension_${string}` | null;
2958
+ type: "construction-dimension";
2934
2959
  } | {
2935
2960
  object: "node";
2936
2961
  name?: string | undefined;
@@ -3455,6 +3480,98 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
3455
3480
  color: string;
3456
3481
  metadata: Record<string, unknown>;
3457
3482
  type: "zone";
3483
+ } | {
3484
+ object: "node";
3485
+ name?: string | undefined;
3486
+ parentId: string | null;
3487
+ visible: boolean;
3488
+ camera?: {
3489
+ position: [number, number, number];
3490
+ target: [number, number, number];
3491
+ mode: "orthographic" | "perspective";
3492
+ fov?: number | undefined;
3493
+ zoom?: number | undefined;
3494
+ } | undefined;
3495
+ metadata: Record<string, unknown>;
3496
+ provenance?: {
3497
+ refs: {
3498
+ ns?: string | undefined;
3499
+ id: string;
3500
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
3501
+ }[];
3502
+ lineage?: {
3503
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
3504
+ fromIds: string[];
3505
+ } | undefined;
3506
+ } | undefined;
3507
+ id: `ceiling_${string}`;
3508
+ children: (`item_${string}` | `procedural-item_${string}`)[];
3509
+ material?: {
3510
+ id?: string | undefined;
3511
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
3512
+ properties?: {
3513
+ color: string;
3514
+ roughness: number;
3515
+ metalness: number;
3516
+ opacity: number;
3517
+ transparent: boolean;
3518
+ side: "back" | "double" | "front";
3519
+ } | undefined;
3520
+ texture?: {
3521
+ url: string;
3522
+ repeat?: [number, number] | undefined;
3523
+ scale?: number | undefined;
3524
+ offset?: [number, number] | undefined;
3525
+ normalMap?: string | undefined;
3526
+ normalScale?: number | undefined;
3527
+ bumpMap?: string | undefined;
3528
+ bumpScale?: number | undefined;
3529
+ } | undefined;
3530
+ } | undefined;
3531
+ materialPreset?: string | undefined;
3532
+ slots?: Record<string, string> | undefined;
3533
+ polygon: [number, number][];
3534
+ holes: [number, number][][];
3535
+ holeMetadata: {
3536
+ source: "elevator" | "floor-opening" | "manual" | "room" | "stair";
3537
+ openingId?: string | undefined;
3538
+ stairId?: string | undefined;
3539
+ elevatorId?: string | undefined;
3540
+ }[];
3541
+ openingIds?: string[] | undefined;
3542
+ height?: number | undefined;
3543
+ buildUp?: {
3544
+ presetId?: string | undefined;
3545
+ finish?: {
3546
+ kind: "drywall" | "plaster" | "wood-plank";
3547
+ thickness: number;
3548
+ name?: string | undefined;
3549
+ } | undefined;
3550
+ framing?: {
3551
+ system: "joists" | "truss-chords";
3552
+ size: "2x10" | "2x12" | "2x4" | "2x6" | "2x8";
3553
+ spacing: number;
3554
+ } | undefined;
3555
+ decking?: {
3556
+ kind: "osb" | "plywood";
3557
+ thickness: number;
3558
+ name?: string | undefined;
3559
+ } | undefined;
3560
+ insulation?: {
3561
+ kind: "batt" | "blown" | "rigid";
3562
+ thickness: number;
3563
+ name?: string | undefined;
3564
+ } | undefined;
3565
+ } | undefined;
3566
+ regions?: {
3567
+ id: string;
3568
+ polygon: [number, number][];
3569
+ finish: string | Record<string, unknown>;
3570
+ }[] | undefined;
3571
+ boundary?: "auto" | undefined;
3572
+ zoneId?: string | undefined;
3573
+ autoFromWalls: boolean;
3574
+ type: "ceiling";
3458
3575
  } | {
3459
3576
  object: "node";
3460
3577
  name?: string | undefined;
@@ -4084,54 +4201,7 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
4084
4201
  fromIds: string[];
4085
4202
  } | undefined;
4086
4203
  } | undefined;
4087
- id: `duct-fitting_${string}`;
4088
- position: [number, number, number];
4089
- rotation: [number, number, number];
4090
- fittingType: "access-panel" | "coupling" | "cross" | "damper" | "elbow" | "end-cap" | "reducer" | "tee" | "transition";
4091
- shape: "oval" | "rect" | "round";
4092
- inletShape?: "oval" | "rect" | "round" | undefined;
4093
- outletShape?: "oval" | "rect" | "round" | undefined;
4094
- width: number;
4095
- height: number;
4096
- shape2: "oval" | "rect" | "round";
4097
- width2: number;
4098
- height2: number;
4099
- angle: number;
4100
- branchAngle: number;
4101
- diameter: number;
4102
- diameter2: number;
4103
- ductMaterial: "duct-board" | "flex" | "sheet-metal";
4104
- system: "return" | "supply";
4105
- damperAngle: number;
4106
- panelWidth: number;
4107
- panelHeight: number;
4108
- slots?: Record<string, string> | undefined;
4109
- type: "duct-fitting";
4110
- } | {
4111
- object: "node";
4112
- name?: string | undefined;
4113
- parentId: string | null;
4114
- visible: boolean;
4115
- camera?: {
4116
- position: [number, number, number];
4117
- target: [number, number, number];
4118
- mode: "orthographic" | "perspective";
4119
- fov?: number | undefined;
4120
- zoom?: number | undefined;
4121
- } | undefined;
4122
- metadata: Record<string, unknown>;
4123
- provenance?: {
4124
- refs: {
4125
- ns?: string | undefined;
4126
- id: string;
4127
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
4128
- }[];
4129
- lineage?: {
4130
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
4131
- fromIds: string[];
4132
- } | undefined;
4133
- } | undefined;
4134
- id: `duct-terminal_${string}`;
4204
+ id: `duct-terminal_${string}`;
4135
4205
  position: [number, number, number];
4136
4206
  rotation: number;
4137
4207
  supportSlabId?: string | undefined;
@@ -4144,47 +4214,6 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
4144
4214
  collarWidth: number;
4145
4215
  collarHeight: number;
4146
4216
  type: "duct-terminal";
4147
- } | {
4148
- object: "node";
4149
- name?: string | undefined;
4150
- parentId: string | null;
4151
- visible: boolean;
4152
- camera?: {
4153
- position: [number, number, number];
4154
- target: [number, number, number];
4155
- mode: "orthographic" | "perspective";
4156
- fov?: number | undefined;
4157
- zoom?: number | undefined;
4158
- } | undefined;
4159
- metadata: Record<string, unknown>;
4160
- provenance?: {
4161
- refs: {
4162
- ns?: string | undefined;
4163
- id: string;
4164
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
4165
- }[];
4166
- lineage?: {
4167
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
4168
- fromIds: string[];
4169
- } | undefined;
4170
- } | undefined;
4171
- id: `hvac-equipment_${string}`;
4172
- position: [number, number, number];
4173
- rotation: number;
4174
- supportSlabId?: string | undefined;
4175
- equipmentType: "air-handler" | "condenser" | "furnace";
4176
- width: number;
4177
- depth: number;
4178
- height: number;
4179
- supplyShape: "oval" | "rect" | "round";
4180
- returnShape: "oval" | "rect" | "round";
4181
- supplyDiameter: number;
4182
- returnDiameter: number;
4183
- supplyWidth: number;
4184
- supplyHeight: number;
4185
- returnWidth: number;
4186
- returnHeight: number;
4187
- type: "hvac-equipment";
4188
4217
  } | {
4189
4218
  object: "node";
4190
4219
  name?: string | undefined;
@@ -4313,17 +4342,13 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
4313
4342
  fromIds: string[];
4314
4343
  } | undefined;
4315
4344
  } | undefined;
4316
- id: `pipe-fitting_${string}`;
4345
+ id: `pipe-trap_${string}`;
4317
4346
  position: [number, number, number];
4318
- rotation: [number, number, number];
4319
- fittingType: "cleanout" | "coupling" | "cross" | "elbow" | "end-cap" | "reducer" | "sanitary-tee" | "wye";
4320
- angle: number;
4347
+ rotation: number;
4321
4348
  diameter: number;
4322
- diameter2: number;
4323
- cleanoutStyle: "end" | "inline";
4324
4349
  pipeMaterial: "abs" | "cast-iron" | "pvc";
4325
- system: "vent" | "waste";
4326
- type: "pipe-fitting";
4350
+ armLengthM: number;
4351
+ type: "pipe-trap";
4327
4352
  } | {
4328
4353
  object: "node";
4329
4354
  name?: string | undefined;
@@ -4348,13 +4373,12 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
4348
4373
  fromIds: string[];
4349
4374
  } | undefined;
4350
4375
  } | undefined;
4351
- id: `pipe-trap_${string}`;
4352
- position: [number, number, number];
4353
- rotation: number;
4354
- diameter: number;
4355
- pipeMaterial: "abs" | "cast-iron" | "pvc";
4356
- armLengthM: number;
4357
- type: "pipe-trap";
4376
+ id: `level_${string}`;
4377
+ children: (`beam_${string}` | `block_${string}` | `ceiling_${string}` | `column_${string}` | `construction-dimension_${string}` | `duct-fitting_${string}` | `duct-segment_${string}` | `duct-terminal_${string}` | `fence_${string}` | `floor-opening_${string}` | `guide_${string}` | `hvac-equipment_${string}` | `imesh_${string}` | `item_${string}` | `lineset_${string}` | `liquid-line_${string}` | `measurement_${string}` | `pipe-fitting_${string}` | `pipe-segment_${string}` | `pipe-trap_${string}` | `procedural-item_${string}` | `roof_${string}` | `scan_${string}` | `separator_${string}` | `shelf_${string}` | `slab_${string}` | `spawn_${string}` | `stair_${string}` | `structural-grid_${string}` | `wall_${string}` | `zone_${string}`)[];
4378
+ level: number;
4379
+ baseElevation: number;
4380
+ height?: number | undefined;
4381
+ type: "level";
4358
4382
  } | {
4359
4383
  object: "node";
4360
4384
  name?: string | undefined;
@@ -4379,12 +4403,54 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
4379
4403
  fromIds: string[];
4380
4404
  } | undefined;
4381
4405
  } | undefined;
4382
- id: `level_${string}`;
4383
- children: (`beam_${string}` | `block_${string}` | `ceiling_${string}` | `column_${string}` | `construction-dimension_${string}` | `duct-fitting_${string}` | `duct-segment_${string}` | `duct-terminal_${string}` | `fence_${string}` | `floor-opening_${string}` | `guide_${string}` | `hvac-equipment_${string}` | `imesh_${string}` | `item_${string}` | `lineset_${string}` | `liquid-line_${string}` | `measurement_${string}` | `pipe-fitting_${string}` | `pipe-segment_${string}` | `pipe-trap_${string}` | `procedural-item_${string}` | `roof_${string}` | `scan_${string}` | `separator_${string}` | `shelf_${string}` | `slab_${string}` | `spawn_${string}` | `stair_${string}` | `structural-grid_${string}` | `wall_${string}` | `zone_${string}`)[];
4384
- level: number;
4385
- baseElevation: number;
4386
- height?: number | undefined;
4387
- type: "level";
4406
+ id: `elevator_${string}`;
4407
+ material?: {
4408
+ id?: string | undefined;
4409
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
4410
+ properties?: {
4411
+ color: string;
4412
+ roughness: number;
4413
+ metalness: number;
4414
+ opacity: number;
4415
+ transparent: boolean;
4416
+ side: "back" | "double" | "front";
4417
+ } | undefined;
4418
+ texture?: {
4419
+ url: string;
4420
+ repeat?: [number, number] | undefined;
4421
+ scale?: number | undefined;
4422
+ offset?: [number, number] | undefined;
4423
+ normalMap?: string | undefined;
4424
+ normalScale?: number | undefined;
4425
+ bumpMap?: string | undefined;
4426
+ bumpScale?: number | undefined;
4427
+ } | undefined;
4428
+ } | undefined;
4429
+ materialPreset?: string | undefined;
4430
+ slots?: Record<string, string> | undefined;
4431
+ position: [number, number, number];
4432
+ rotation: number;
4433
+ width: number;
4434
+ depth: number;
4435
+ shaftWidth?: number | undefined;
4436
+ shaftDepth?: number | undefined;
4437
+ shaftWallThickness: number;
4438
+ shaftStyle: "glass" | "solid";
4439
+ cabHeight: number;
4440
+ doorWidth: number;
4441
+ doorHeight: number;
4442
+ doorStyle: "center-opening" | "single-left" | "single-right";
4443
+ doorPanelStyle: "glass-frame" | "segmented-panel" | "solid-panel";
4444
+ fromLevelId: string | null;
4445
+ toLevelId: string | null;
4446
+ servedLevelIds?: string[] | undefined;
4447
+ disabledLevelIds: string[];
4448
+ serviceOnlyLevelIds: string[];
4449
+ defaultLevelId: string | null;
4450
+ speed: number;
4451
+ doorDurationMs: number;
4452
+ dwellMs: number;
4453
+ type: "elevator";
4388
4454
  } | {
4389
4455
  object: "node";
4390
4456
  parentId: string | null;
@@ -4850,71 +4916,6 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
4850
4916
  topFinishHeight: number;
4851
4917
  topFinishDepth: number;
4852
4918
  type: "cabinet-module";
4853
- } | {
4854
- object: "node";
4855
- name?: string | undefined;
4856
- parentId: string | null;
4857
- visible: boolean;
4858
- camera?: {
4859
- position: [number, number, number];
4860
- target: [number, number, number];
4861
- mode: "orthographic" | "perspective";
4862
- fov?: number | undefined;
4863
- zoom?: number | undefined;
4864
- } | undefined;
4865
- metadata: Record<string, unknown>;
4866
- provenance?: {
4867
- refs: {
4868
- ns?: string | undefined;
4869
- id: string;
4870
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
4871
- }[];
4872
- lineage?: {
4873
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
4874
- fromIds: string[];
4875
- } | undefined;
4876
- } | undefined;
4877
- id: `bvent_${string}`;
4878
- material?: {
4879
- id?: string | undefined;
4880
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
4881
- properties?: {
4882
- color: string;
4883
- roughness: number;
4884
- metalness: number;
4885
- opacity: number;
4886
- transparent: boolean;
4887
- side: "back" | "double" | "front";
4888
- } | undefined;
4889
- texture?: {
4890
- url: string;
4891
- repeat?: [number, number] | undefined;
4892
- scale?: number | undefined;
4893
- offset?: [number, number] | undefined;
4894
- normalMap?: string | undefined;
4895
- normalScale?: number | undefined;
4896
- bumpMap?: string | undefined;
4897
- bumpScale?: number | undefined;
4898
- } | undefined;
4899
- } | undefined;
4900
- slots?: Record<string, string> | undefined;
4901
- materialPreset: string;
4902
- roofSegmentId?: string | undefined;
4903
- position: [number, number, number];
4904
- rotation: number;
4905
- width: number;
4906
- depth: number;
4907
- height: number;
4908
- hoodOverhang: number;
4909
- topTaper: number;
4910
- capHeight: number;
4911
- capGap: number;
4912
- domeCurvature: number;
4913
- baseInset: number;
4914
- baseHeight: number;
4915
- cornerBevel: number;
4916
- style: "box" | "cap" | "dome";
4917
- type: "box-vent";
4918
4919
  } | {
4919
4920
  object: "node";
4920
4921
  name?: string | undefined;
@@ -5754,7 +5755,7 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
5754
5755
  fromIds: string[];
5755
5756
  } | undefined;
5756
5757
  } | undefined;
5757
- id: `elevator_${string}`;
5758
+ id: `bvent_${string}`;
5758
5759
  material?: {
5759
5760
  id?: string | undefined;
5760
5761
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
@@ -5777,31 +5778,24 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
5777
5778
  bumpScale?: number | undefined;
5778
5779
  } | undefined;
5779
5780
  } | undefined;
5780
- materialPreset?: string | undefined;
5781
5781
  slots?: Record<string, string> | undefined;
5782
+ materialPreset: string;
5783
+ roofSegmentId?: string | undefined;
5782
5784
  position: [number, number, number];
5783
5785
  rotation: number;
5784
5786
  width: number;
5785
5787
  depth: number;
5786
- shaftWidth?: number | undefined;
5787
- shaftDepth?: number | undefined;
5788
- shaftWallThickness: number;
5789
- shaftStyle: "glass" | "solid";
5790
- cabHeight: number;
5791
- doorWidth: number;
5792
- doorHeight: number;
5793
- doorStyle: "center-opening" | "single-left" | "single-right";
5794
- doorPanelStyle: "glass-frame" | "segmented-panel" | "solid-panel";
5795
- fromLevelId: string | null;
5796
- toLevelId: string | null;
5797
- servedLevelIds?: string[] | undefined;
5798
- disabledLevelIds: string[];
5799
- serviceOnlyLevelIds: string[];
5800
- defaultLevelId: string | null;
5801
- speed: number;
5802
- doorDurationMs: number;
5803
- dwellMs: number;
5804
- type: "elevator";
5788
+ height: number;
5789
+ hoodOverhang: number;
5790
+ topTaper: number;
5791
+ capHeight: number;
5792
+ capGap: number;
5793
+ domeCurvature: number;
5794
+ baseInset: number;
5795
+ baseHeight: number;
5796
+ cornerBevel: number;
5797
+ style: "box" | "cap" | "dome";
5798
+ type: "box-vent";
5805
5799
  } | {
5806
5800
  object: "node";
5807
5801
  name?: string | undefined;
@@ -5826,21 +5820,11 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
5826
5820
  fromIds: string[];
5827
5821
  } | undefined;
5828
5822
  } | undefined;
5829
- type: "item";
5830
- id: `item_${string}`;
5831
- position: [number, number, number];
5832
- rotation: [number, number, number];
5833
- scale: [number, number, number];
5834
- side?: "back" | "front" | undefined;
5823
+ id: `column_${string}`;
5835
5824
  children: string[];
5836
- wallId?: string | undefined;
5837
- wallT?: number | undefined;
5838
- roofSegmentId?: string | undefined;
5839
- roofFace?: "back" | "front" | "left" | "right" | undefined;
5840
- blockFaceId?: string | undefined;
5825
+ position: [number, number, number];
5826
+ rotation: number;
5841
5827
  supportSlabId?: string | undefined;
5842
- collectionIds?: `collection_${string}`[] | undefined;
5843
- slots?: Record<string, string> | undefined;
5844
5828
  source?: {
5845
5829
  kind: "script";
5846
5830
  meta?: {
@@ -5955,76 +5939,104 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
5955
5939
  floorPlan: string;
5956
5940
  } | undefined;
5957
5941
  } | undefined;
5958
- asset: {
5959
- id: string;
5960
- category: string;
5961
- name: string;
5962
- thumbnail: string;
5963
- floorPlanUrl?: string | undefined;
5964
- source: "community" | "library" | "mine";
5965
- isDraft?: boolean | undefined;
5966
- src: string;
5967
- dimensions: [number, number, number];
5968
- attachTo?: "ceiling" | "wall" | "wall-side" | undefined;
5969
- recessed?: boolean | undefined;
5970
- tags?: string[] | undefined;
5971
- functionTags?: string[] | undefined;
5972
- offset: [number, number, number];
5973
- rotation: [number, number, number];
5974
- scale: [number, number, number];
5975
- surface?: {
5976
- height: number;
5942
+ style: "cluster" | "dravidian-carved" | "faceted" | "fluted" | "lathe-turned" | "plain";
5943
+ crossSection: "octagonal" | "rectangular" | "round" | "sixteen-sided" | "square";
5944
+ height: number;
5945
+ radius: number;
5946
+ width: number;
5947
+ depth: number;
5948
+ edgeSoftness: number;
5949
+ baseHeight: number;
5950
+ capitalHeight: number;
5951
+ shaftProfile: "baluster" | "bulged" | "hourglass" | "straight" | "tapered";
5952
+ shaftTaper: number;
5953
+ shaftBulge: number;
5954
+ shaftStartScale: number;
5955
+ shaftEndScale: number;
5956
+ shaftSegmentCount: number;
5957
+ shaftTwistStep: number;
5958
+ shaftCornerRadius: number;
5959
+ shaftDetail: "fluted" | "lathe-turned" | "none" | "panelled" | "spiral";
5960
+ baseStyle: "lotus" | "none" | "panelled-pedestal" | "ribbed-lotus" | "round-rings" | "simple-square" | "square-plinth" | "stepped-square";
5961
+ baseWidthScale: number;
5962
+ baseDepthScale: number;
5963
+ baseTierCount: number;
5964
+ baseStepSpread: number;
5965
+ basePlinthHeightRatio: number;
5966
+ baseRoundBandScale: number;
5967
+ baseNeckScale: number;
5968
+ baseRoundBandCount: number;
5969
+ baseRibCount: number;
5970
+ baseCarvingLevel: number;
5971
+ basePanelInset: number;
5972
+ capitalStyle: "corinthian-leaf" | "doric" | "ionic-volute" | "leaf-carved" | "none" | "rounded" | "simple" | "simple-slab" | "south-indian-bracket" | "stepped" | "volute" | "wood-bracket";
5973
+ capitalWidthScale: number;
5974
+ capitalDepthScale: number;
5975
+ capitalTierCount: number;
5976
+ capitalStepSpread: number;
5977
+ capitalBandCount: number;
5978
+ voluteSize: number;
5979
+ voluteCount: number;
5980
+ leafCount: number;
5981
+ leafRows: number;
5982
+ bracketDepth: number;
5983
+ bracketTierCount: number;
5984
+ pendantCount: number;
5985
+ capitalCarvingLevel: number;
5986
+ ringCount: number;
5987
+ ringPlacement: "bottom" | "ends" | "even" | "top";
5988
+ ringThickness: number;
5989
+ ringSpread: number;
5990
+ fluteCount: number;
5991
+ fluteDepth: number;
5992
+ fluteWidth: number;
5993
+ spiralTwist: number;
5994
+ spiralRibCount: number;
5995
+ panelCount: number;
5996
+ panelInsetDepth: number;
5997
+ panelShape: "arched" | "diamond" | "rectangle";
5998
+ latheRingCount: number;
5999
+ latheRingSpacing: "bottom" | "ends" | "even" | "top";
6000
+ carvingLevel: number;
6001
+ carvingPlacement: "all" | "base" | "capital" | "shaft";
6002
+ lowerBandEnabled: boolean;
6003
+ lowerBandHeight: number;
6004
+ lowerBandCarvingLevel: number;
6005
+ dentilCount: number;
6006
+ beadCount: number;
6007
+ supportStyle: "a-frame" | "box-frame" | "k-brace" | "portal-frame" | "single-strut" | "trestle" | "tripod" | "v-frame" | "vertical" | "x-brace" | "y-frame";
6008
+ braceWidth: number;
6009
+ braceDepth: number;
6010
+ braceBottomSpread: number;
6011
+ braceTopSpread: number;
6012
+ bracePlateEnabled: boolean;
6013
+ role?: "ornament" | "post" | undefined;
6014
+ postBase?: "none" | "pier" | "post-base" | undefined;
6015
+ material?: {
6016
+ id?: string | undefined;
6017
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
6018
+ properties?: {
6019
+ color: string;
6020
+ roughness: number;
6021
+ metalness: number;
6022
+ opacity: number;
6023
+ transparent: boolean;
6024
+ side: "back" | "double" | "front";
5977
6025
  } | undefined;
5978
- interactive?: {
5979
- controls: ({
5980
- kind: "toggle";
5981
- label?: string | undefined;
5982
- default?: boolean | undefined;
5983
- } | {
5984
- kind: "slider";
5985
- label: string;
5986
- min: number;
5987
- max: number;
5988
- step: number;
5989
- unit?: string | undefined;
5990
- displayMode: "dial" | "slider" | "stepper";
5991
- default?: number | undefined;
5992
- } | {
5993
- kind: "temperature";
5994
- label: string;
5995
- min: number;
5996
- max: number;
5997
- unit: "C" | "F";
5998
- default?: number | undefined;
5999
- })[];
6000
- effects: ({
6001
- kind: "animation";
6002
- mode?: "ambient" | "open-close" | undefined;
6003
- control?: number | undefined;
6004
- clips: {
6005
- on?: string | undefined;
6006
- off?: string | undefined;
6007
- loop?: string | undefined;
6008
- };
6009
- } | {
6010
- kind: "light";
6011
- color: string;
6012
- intensityRange: [number, number];
6013
- distance?: number | undefined;
6014
- offset: [number, number, number];
6015
- spot?: {
6016
- direction: [number, number, number];
6017
- angle: number;
6018
- softness: number;
6019
- } | undefined;
6020
- shadows?: boolean | undefined;
6021
- glow?: {
6022
- size: number;
6023
- strength: number;
6024
- } | undefined;
6025
- })[];
6026
+ texture?: {
6027
+ url: string;
6028
+ repeat?: [number, number] | undefined;
6029
+ scale?: number | undefined;
6030
+ offset?: [number, number] | undefined;
6031
+ normalMap?: string | undefined;
6032
+ normalScale?: number | undefined;
6033
+ bumpMap?: string | undefined;
6034
+ bumpScale?: number | undefined;
6026
6035
  } | undefined;
6027
- };
6036
+ } | undefined;
6037
+ materialPreset?: string | undefined;
6038
+ slots?: Record<string, string> | undefined;
6039
+ type: "column";
6028
6040
  } | {
6029
6041
  object: "node";
6030
6042
  name?: string | undefined;
@@ -6049,74 +6061,70 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
6049
6061
  fromIds: string[];
6050
6062
  } | undefined;
6051
6063
  } | undefined;
6052
- id: `ceiling_${string}`;
6053
- children: (`item_${string}` | `procedural-item_${string}`)[];
6054
- material?: {
6055
- id?: string | undefined;
6056
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
6057
- properties?: {
6058
- color: string;
6059
- roughness: number;
6060
- metalness: number;
6061
- opacity: number;
6062
- transparent: boolean;
6063
- side: "back" | "double" | "front";
6064
- } | undefined;
6065
- texture?: {
6066
- url: string;
6067
- repeat?: [number, number] | undefined;
6068
- scale?: number | undefined;
6069
- offset?: [number, number] | undefined;
6070
- normalMap?: string | undefined;
6071
- normalScale?: number | undefined;
6072
- bumpMap?: string | undefined;
6073
- bumpScale?: number | undefined;
6074
- } | undefined;
6075
- } | undefined;
6076
- materialPreset?: string | undefined;
6077
- slots?: Record<string, string> | undefined;
6078
- polygon: [number, number][];
6079
- holes: [number, number][][];
6080
- holeMetadata: {
6081
- source: "elevator" | "floor-opening" | "manual" | "room" | "stair";
6082
- openingId?: string | undefined;
6083
- stairId?: string | undefined;
6084
- elevatorId?: string | undefined;
6085
- }[];
6086
- openingIds?: string[] | undefined;
6087
- height?: number | undefined;
6088
- buildUp?: {
6089
- presetId?: string | undefined;
6090
- finish?: {
6091
- kind: "drywall" | "plaster" | "wood-plank";
6092
- thickness: number;
6093
- name?: string | undefined;
6094
- } | undefined;
6095
- framing?: {
6096
- system: "joists" | "truss-chords";
6097
- size: "2x10" | "2x12" | "2x4" | "2x6" | "2x8";
6098
- spacing: number;
6099
- } | undefined;
6100
- decking?: {
6101
- kind: "osb" | "plywood";
6102
- thickness: number;
6103
- name?: string | undefined;
6104
- } | undefined;
6105
- insulation?: {
6106
- kind: "batt" | "blown" | "rigid";
6107
- thickness: number;
6108
- name?: string | undefined;
6064
+ id: `duct-fitting_${string}`;
6065
+ position: [number, number, number];
6066
+ rotation: [number, number, number];
6067
+ fittingType: "access-panel" | "coupling" | "cross" | "damper" | "elbow" | "end-cap" | "reducer" | "tee" | "transition";
6068
+ shape: "oval" | "rect" | "round";
6069
+ inletShape?: "oval" | "rect" | "round" | undefined;
6070
+ outletShape?: "oval" | "rect" | "round" | undefined;
6071
+ width: number;
6072
+ height: number;
6073
+ shape2: "oval" | "rect" | "round";
6074
+ width2: number;
6075
+ height2: number;
6076
+ angle: number;
6077
+ branchAngle: number;
6078
+ diameter: number;
6079
+ diameter2: number;
6080
+ ductMaterial: "duct-board" | "flex" | "sheet-metal";
6081
+ system: "return" | "supply";
6082
+ damperAngle: number;
6083
+ panelWidth: number;
6084
+ panelHeight: number;
6085
+ slots?: Record<string, string> | undefined;
6086
+ type: "duct-fitting";
6087
+ } | {
6088
+ object: "node";
6089
+ name?: string | undefined;
6090
+ parentId: string | null;
6091
+ visible: boolean;
6092
+ camera?: {
6093
+ position: [number, number, number];
6094
+ target: [number, number, number];
6095
+ mode: "orthographic" | "perspective";
6096
+ fov?: number | undefined;
6097
+ zoom?: number | undefined;
6098
+ } | undefined;
6099
+ metadata: Record<string, unknown>;
6100
+ provenance?: {
6101
+ refs: {
6102
+ ns?: string | undefined;
6103
+ id: string;
6104
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
6105
+ }[];
6106
+ lineage?: {
6107
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
6108
+ fromIds: string[];
6109
6109
  } | undefined;
6110
6110
  } | undefined;
6111
- regions?: {
6112
- id: string;
6113
- polygon: [number, number][];
6114
- finish: string | Record<string, unknown>;
6115
- }[] | undefined;
6116
- boundary?: "auto" | undefined;
6117
- zoneId?: string | undefined;
6118
- autoFromWalls: boolean;
6119
- type: "ceiling";
6111
+ id: `hvac-equipment_${string}`;
6112
+ position: [number, number, number];
6113
+ rotation: number;
6114
+ supportSlabId?: string | undefined;
6115
+ equipmentType: "air-handler" | "condenser" | "furnace";
6116
+ width: number;
6117
+ depth: number;
6118
+ height: number;
6119
+ supplyShape: "oval" | "rect" | "round";
6120
+ returnShape: "oval" | "rect" | "round";
6121
+ supplyDiameter: number;
6122
+ returnDiameter: number;
6123
+ supplyWidth: number;
6124
+ supplyHeight: number;
6125
+ returnWidth: number;
6126
+ returnHeight: number;
6127
+ type: "hvac-equipment";
6120
6128
  } | {
6121
6129
  object: "node";
6122
6130
  name?: string | undefined;
@@ -6141,42 +6149,17 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
6141
6149
  fromIds: string[];
6142
6150
  } | undefined;
6143
6151
  } | undefined;
6144
- id: `construction-dimension_${string}`;
6145
- anchors: ({
6146
- kind: "feature";
6147
- reference: {
6148
- nodeId: string;
6149
- featureId: string;
6150
- parameters?: Record<string, string | number | boolean> | undefined;
6151
- };
6152
- fallback: [number, number, number];
6153
- } | [number, number, number])[];
6154
- baseline: {
6155
- origin: [number, number];
6156
- direction: [number, number];
6157
- };
6158
- chainMode: "continuous" | "point-to-point";
6159
- mode: "angular" | "arc-length" | "center-mark" | "chord" | "coordinate" | "diameter" | "linear" | "radius";
6160
- featureCount: number;
6161
- showCenterMark: boolean;
6162
- prefix: string;
6163
- suffix: string;
6164
- textOverride: string | null;
6165
- datumPolicy: "centerline" | "finish-face" | "structural-face" | "wall-face";
6166
- terminator: "architectural-tick" | "dot" | "filled-arrow" | "open-arrow";
6167
- textPosition: "above" | "centered";
6168
- imperialPrecision: "1" | "1/16" | "1/2" | "1/4" | "1/8";
6169
- metricNotation: "meters" | "millimeters";
6170
- extensionStartGap: number;
6171
- extensionOvershoot: number;
6172
- drawingType: "floor-plan" | "foundation-plan" | "reflected-ceiling-plan" | "roof-plan" | "site-plan";
6173
- drawingOverrides: {
6174
- drawingType: "floor-plan" | "foundation-plan" | "reflected-ceiling-plan" | "roof-plan" | "site-plan";
6175
- presentation: "controlled" | "omit" | "shown";
6176
- suppressedSegmentIndexes: number[];
6177
- }[];
6178
- controllingDimensionId: `construction-dimension_${string}` | null;
6179
- type: "construction-dimension";
6152
+ id: `pipe-fitting_${string}`;
6153
+ position: [number, number, number];
6154
+ rotation: [number, number, number];
6155
+ fittingType: "cleanout" | "coupling" | "cross" | "elbow" | "end-cap" | "reducer" | "sanitary-tee" | "wye";
6156
+ angle: number;
6157
+ diameter: number;
6158
+ diameter2: number;
6159
+ cleanoutStyle: "end" | "inline";
6160
+ pipeMaterial: "abs" | "cast-iron" | "pvc";
6161
+ system: "vent" | "waste";
6162
+ type: "pipe-fitting";
6180
6163
  } | {
6181
6164
  object: "node";
6182
6165
  name?: string | undefined;
@@ -6417,29 +6400,20 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
6417
6400
  fromIds: string[];
6418
6401
  } | undefined;
6419
6402
  } | undefined;
6420
- id: `door_${string}`;
6421
- material?: {
6422
- id?: string | undefined;
6423
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
6424
- properties?: {
6425
- color: string;
6426
- roughness: number;
6427
- metalness: number;
6428
- opacity: number;
6429
- transparent: boolean;
6430
- side: "back" | "double" | "front";
6431
- } | undefined;
6432
- texture?: {
6433
- url: string;
6434
- repeat?: [number, number] | undefined;
6435
- scale?: number | undefined;
6436
- offset?: [number, number] | undefined;
6437
- normalMap?: string | undefined;
6438
- normalScale?: number | undefined;
6439
- bumpMap?: string | undefined;
6440
- bumpScale?: number | undefined;
6441
- } | undefined;
6442
- } | undefined;
6403
+ type: "item";
6404
+ id: `item_${string}`;
6405
+ position: [number, number, number];
6406
+ rotation: [number, number, number];
6407
+ scale: [number, number, number];
6408
+ side?: "back" | "front" | undefined;
6409
+ children: string[];
6410
+ wallId?: string | undefined;
6411
+ wallT?: number | undefined;
6412
+ roofSegmentId?: string | undefined;
6413
+ roofFace?: "back" | "front" | "left" | "right" | undefined;
6414
+ blockFaceId?: string | undefined;
6415
+ supportSlabId?: string | undefined;
6416
+ collectionIds?: `collection_${string}`[] | undefined;
6443
6417
  slots?: Record<string, string> | undefined;
6444
6418
  source?: {
6445
6419
  kind: "script";
@@ -6555,72 +6529,76 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
6555
6529
  floorPlan: string;
6556
6530
  } | undefined;
6557
6531
  } | undefined;
6558
- position: [number, number, number];
6559
- rotation: [number, number, number];
6560
- side?: "back" | "front" | undefined;
6561
- verticalAnchor?: "floor" | "wall" | undefined;
6562
- floorThresholdVersion: 0 | 1;
6563
- wallId?: string | undefined;
6564
- roofSegmentId?: string | undefined;
6565
- roofFace?: "back" | "front" | "left" | "right" | undefined;
6566
- width: number;
6567
- height: number;
6568
- sidelightLeft?: number | undefined;
6569
- sidelightRight?: number | undefined;
6570
- transomHeight?: number | undefined;
6571
- slidingStyle?: "bypass" | "patio" | undefined;
6572
- mark?: string | undefined;
6573
- constructionType: "framed" | "masonry";
6574
- dimensionReference: "finish-opening" | "masonry-opening" | "nominal" | "rough-opening";
6575
- roughOpeningWidth?: number | undefined;
6576
- roughOpeningHeight?: number | undefined;
6577
- masonryOpeningWidth?: number | undefined;
6578
- masonryOpeningHeight?: number | undefined;
6579
- finishOpeningWidth?: number | undefined;
6580
- finishOpeningHeight?: number | undefined;
6581
- doorCategory: "garage" | "interior";
6582
- doorType: "barn" | "double" | "folding" | "french" | "garage-rollup" | "garage-sectional" | "garage-tiltup" | "hinged" | "pocket" | "sliding";
6583
- leafCount: 1 | 2 | 3 | 4 | 6 | 8;
6584
- operationState: number;
6585
- slideDirection: "left" | "right";
6586
- trackStyle: "none" | "overhead" | "pocket" | "visible";
6587
- garagePanelCount: number;
6588
- openingKind: "door" | "opening";
6589
- openingShape: "arch" | "rectangle" | "rounded";
6590
- openingRadiusMode: "all" | "individual";
6591
- openingTopRadii: [number, number];
6592
- cornerRadius: number;
6593
- archHeight: number;
6594
- openingRevealRadius: number;
6595
- frameThickness: number;
6596
- frameDepth?: number | undefined;
6597
- threshold: boolean;
6598
- thresholdHeight: number;
6599
- casingFaceA?: boolean | undefined;
6600
- casingFaceB?: boolean | undefined;
6601
- casingWidth?: number | undefined;
6602
- hingesSide: "left" | "right";
6603
- swingDirection: "inward" | "outward";
6604
- swingAngle: number;
6605
- segments: {
6606
- type: "empty" | "glass" | "panel";
6607
- heightRatio: number;
6608
- columnRatios: number[];
6609
- dividerThickness: number;
6610
- panelDepth: number;
6611
- panelInset: number;
6612
- }[];
6613
- handle: boolean;
6614
- handleStyle?: "bar" | "knob" | "lever" | "lever-curved" | "plate" | undefined;
6615
- handleHeight: number;
6616
- handleSide: "left" | "right";
6617
- contentPadding: [number, number];
6618
- doorCloser: boolean;
6619
- panicBar: boolean;
6620
- panicBarStyle: "crossbar" | "touchbar";
6621
- panicBarRods: boolean;
6622
- panicBarHeight: number;
6623
- type: "door";
6532
+ asset: {
6533
+ id: string;
6534
+ category: string;
6535
+ name: string;
6536
+ thumbnail: string;
6537
+ floorPlanUrl?: string | undefined;
6538
+ source: "community" | "library" | "mine";
6539
+ isDraft?: boolean | undefined;
6540
+ src: string;
6541
+ dimensions: [number, number, number];
6542
+ attachTo?: "ceiling" | "wall" | "wall-side" | undefined;
6543
+ recessed?: boolean | undefined;
6544
+ tags?: string[] | undefined;
6545
+ functionTags?: string[] | undefined;
6546
+ offset: [number, number, number];
6547
+ rotation: [number, number, number];
6548
+ scale: [number, number, number];
6549
+ surface?: {
6550
+ height: number;
6551
+ } | undefined;
6552
+ interactive?: {
6553
+ controls: ({
6554
+ kind: "toggle";
6555
+ label?: string | undefined;
6556
+ default?: boolean | undefined;
6557
+ } | {
6558
+ kind: "slider";
6559
+ label: string;
6560
+ min: number;
6561
+ max: number;
6562
+ step: number;
6563
+ unit?: string | undefined;
6564
+ displayMode: "dial" | "slider" | "stepper";
6565
+ default?: number | undefined;
6566
+ } | {
6567
+ kind: "temperature";
6568
+ label: string;
6569
+ min: number;
6570
+ max: number;
6571
+ unit: "C" | "F";
6572
+ default?: number | undefined;
6573
+ })[];
6574
+ effects: ({
6575
+ kind: "animation";
6576
+ mode?: "ambient" | "open-close" | undefined;
6577
+ control?: number | undefined;
6578
+ clips: {
6579
+ on?: string | undefined;
6580
+ off?: string | undefined;
6581
+ loop?: string | undefined;
6582
+ };
6583
+ } | {
6584
+ kind: "light";
6585
+ color: string;
6586
+ intensityRange: [number, number];
6587
+ distance?: number | undefined;
6588
+ offset: [number, number, number];
6589
+ spot?: {
6590
+ direction: [number, number, number];
6591
+ angle: number;
6592
+ softness: number;
6593
+ } | undefined;
6594
+ shadows?: boolean | undefined;
6595
+ glow?: {
6596
+ size: number;
6597
+ strength: number;
6598
+ } | undefined;
6599
+ })[];
6600
+ } | undefined;
6601
+ };
6624
6602
  } | {
6625
6603
  object: "node";
6626
6604
  name?: string | undefined;
@@ -6645,7 +6623,7 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
6645
6623
  fromIds: string[];
6646
6624
  } | undefined;
6647
6625
  } | undefined;
6648
- id: `window_${string}`;
6626
+ id: `door_${string}`;
6649
6627
  material?: {
6650
6628
  id?: string | undefined;
6651
6629
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
@@ -6789,12 +6767,14 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
6789
6767
  verticalAnchor?: "floor" | "wall" | undefined;
6790
6768
  floorThresholdVersion: 0 | 1;
6791
6769
  wallId?: string | undefined;
6792
- dormerId?: string | undefined;
6793
- dormerFace?: "back" | "front" | "left" | "right" | undefined;
6794
6770
  roofSegmentId?: string | undefined;
6795
6771
  roofFace?: "back" | "front" | "left" | "right" | undefined;
6796
6772
  width: number;
6797
6773
  height: number;
6774
+ sidelightLeft?: number | undefined;
6775
+ sidelightRight?: number | undefined;
6776
+ transomHeight?: number | undefined;
6777
+ slidingStyle?: "bypass" | "patio" | undefined;
6798
6778
  mark?: string | undefined;
6799
6779
  constructionType: "framed" | "masonry";
6800
6780
  dimensionReference: "finish-opening" | "masonry-opening" | "nominal" | "rough-opening";
@@ -6804,52 +6784,49 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
6804
6784
  masonryOpeningHeight?: number | undefined;
6805
6785
  finishOpeningWidth?: number | undefined;
6806
6786
  finishOpeningHeight?: number | undefined;
6807
- openingKind: "opening" | "window";
6808
- windowType: "awning" | "bay" | "bow" | "casement" | "double-hung" | "fixed" | "hopper" | "louvered" | "single-hung" | "sliding" | "tilt-turn";
6787
+ doorCategory: "garage" | "interior";
6788
+ doorType: "barn" | "double" | "folding" | "french" | "garage-rollup" | "garage-sectional" | "garage-tiltup" | "hinged" | "pocket" | "sliding";
6789
+ leafCount: 1 | 2 | 3 | 4 | 6 | 8;
6809
6790
  operationState: number;
6810
- openingDirection?: "inward" | "outward" | undefined;
6811
- tiltTurnMode?: "tilt" | "turn" | undefined;
6812
- awningDirection: "down" | "up";
6813
- casementStyle: "french" | "single";
6814
- hingesSide: "left" | "right";
6791
+ slideDirection: "left" | "right";
6792
+ trackStyle: "none" | "overhead" | "pocket" | "visible";
6793
+ garagePanelCount: number;
6794
+ openingKind: "door" | "opening";
6815
6795
  openingShape: "arch" | "rectangle" | "rounded";
6816
6796
  openingRadiusMode: "all" | "individual";
6817
- openingCornerRadii: [number, number, number, number];
6797
+ openingTopRadii: [number, number];
6818
6798
  cornerRadius: number;
6819
6799
  archHeight: number;
6820
6800
  openingRevealRadius: number;
6821
6801
  frameThickness: number;
6822
6802
  frameDepth?: number | undefined;
6823
- windowHandle?: boolean | undefined;
6824
- sashGrid?: boolean | undefined;
6825
- columnRatios: number[];
6826
- rowRatios: number[];
6827
- columnDividerThickness: number;
6828
- rowDividerThickness: number;
6829
- corner?: {
6830
- end: "end" | "start";
6831
- partnerId: string;
6832
- post: "none" | "post";
6833
- } | undefined;
6834
- sill: boolean;
6835
- sillDepth: number;
6836
- sillThickness: number;
6837
- sillOverhang?: number | undefined;
6838
- sillInterior?: boolean | undefined;
6839
- sillInteriorDepth?: number | undefined;
6840
- sillInteriorThickness?: number | undefined;
6841
- sillInteriorOverhang?: number | undefined;
6842
- shutters?: "board-batten" | "louvered" | "none" | "panel" | undefined;
6843
- shutterWidth?: number | undefined;
6844
- shutterOpen?: number | undefined;
6845
- shutterSides?: "both" | "left" | "right" | undefined;
6846
- rollerShutter?: "box" | "concealed" | "none" | undefined;
6847
- rollerShutterBoxHeight?: number | undefined;
6848
- rollerShutterOpen?: number | undefined;
6803
+ threshold: boolean;
6804
+ thresholdHeight: number;
6849
6805
  casingFaceA?: boolean | undefined;
6850
6806
  casingFaceB?: boolean | undefined;
6851
6807
  casingWidth?: number | undefined;
6852
- type: "window";
6808
+ hingesSide: "left" | "right";
6809
+ swingDirection: "inward" | "outward";
6810
+ swingAngle: number;
6811
+ segments: {
6812
+ type: "empty" | "glass" | "panel";
6813
+ heightRatio: number;
6814
+ columnRatios: number[];
6815
+ dividerThickness: number;
6816
+ panelDepth: number;
6817
+ panelInset: number;
6818
+ }[];
6819
+ handle: boolean;
6820
+ handleStyle?: "bar" | "knob" | "lever" | "lever-curved" | "plate" | undefined;
6821
+ handleHeight: number;
6822
+ handleSide: "left" | "right";
6823
+ contentPadding: [number, number];
6824
+ doorCloser: boolean;
6825
+ panicBar: boolean;
6826
+ panicBarStyle: "crossbar" | "touchbar";
6827
+ panicBarRods: boolean;
6828
+ panicBarHeight: number;
6829
+ type: "door";
6853
6830
  } | {
6854
6831
  object: "node";
6855
6832
  name?: string | undefined;
@@ -6874,11 +6851,30 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
6874
6851
  fromIds: string[];
6875
6852
  } | undefined;
6876
6853
  } | undefined;
6877
- id: `column_${string}`;
6878
- children: string[];
6879
- position: [number, number, number];
6880
- rotation: number;
6881
- supportSlabId?: string | undefined;
6854
+ id: `window_${string}`;
6855
+ material?: {
6856
+ id?: string | undefined;
6857
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
6858
+ properties?: {
6859
+ color: string;
6860
+ roughness: number;
6861
+ metalness: number;
6862
+ opacity: number;
6863
+ transparent: boolean;
6864
+ side: "back" | "double" | "front";
6865
+ } | undefined;
6866
+ texture?: {
6867
+ url: string;
6868
+ repeat?: [number, number] | undefined;
6869
+ scale?: number | undefined;
6870
+ offset?: [number, number] | undefined;
6871
+ normalMap?: string | undefined;
6872
+ normalScale?: number | undefined;
6873
+ bumpMap?: string | undefined;
6874
+ bumpScale?: number | undefined;
6875
+ } | undefined;
6876
+ } | undefined;
6877
+ slots?: Record<string, string> | undefined;
6882
6878
  source?: {
6883
6879
  kind: "script";
6884
6880
  meta?: {
@@ -6962,135 +6958,104 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
6962
6958
  duration: number;
6963
6959
  }[];
6964
6960
  cutters?: {
6965
- host: "ceiling" | "mounted" | "slab" | "wall";
6966
- polygon: number[][];
6967
- minY: number;
6968
- maxY: number;
6969
- }[] | undefined;
6970
- cutout: boolean;
6971
- collider: boolean;
6972
- shape?: {
6973
- tolerance: number;
6974
- bands: {
6975
- y0: number;
6976
- y1: number;
6977
- polygons: {
6978
- outer: [number, number][];
6979
- holes?: [number, number][][] | undefined;
6980
- }[];
6981
- }[];
6982
- } | undefined;
6983
- triangles: number;
6984
- coverage?: number | undefined;
6985
- uncovered?: {
6986
- min: [number, number];
6987
- max: [number, number];
6988
- }[] | undefined;
6989
- };
6990
- images?: {
6991
- artifact: string;
6992
- thumbnail: string;
6993
- floorPlan: string;
6994
- } | undefined;
6995
- } | undefined;
6996
- style: "cluster" | "dravidian-carved" | "faceted" | "fluted" | "lathe-turned" | "plain";
6997
- crossSection: "octagonal" | "rectangular" | "round" | "sixteen-sided" | "square";
6998
- height: number;
6999
- radius: number;
7000
- width: number;
7001
- depth: number;
7002
- edgeSoftness: number;
7003
- baseHeight: number;
7004
- capitalHeight: number;
7005
- shaftProfile: "baluster" | "bulged" | "hourglass" | "straight" | "tapered";
7006
- shaftTaper: number;
7007
- shaftBulge: number;
7008
- shaftStartScale: number;
7009
- shaftEndScale: number;
7010
- shaftSegmentCount: number;
7011
- shaftTwistStep: number;
7012
- shaftCornerRadius: number;
7013
- shaftDetail: "fluted" | "lathe-turned" | "none" | "panelled" | "spiral";
7014
- baseStyle: "lotus" | "none" | "panelled-pedestal" | "ribbed-lotus" | "round-rings" | "simple-square" | "square-plinth" | "stepped-square";
7015
- baseWidthScale: number;
7016
- baseDepthScale: number;
7017
- baseTierCount: number;
7018
- baseStepSpread: number;
7019
- basePlinthHeightRatio: number;
7020
- baseRoundBandScale: number;
7021
- baseNeckScale: number;
7022
- baseRoundBandCount: number;
7023
- baseRibCount: number;
7024
- baseCarvingLevel: number;
7025
- basePanelInset: number;
7026
- capitalStyle: "corinthian-leaf" | "doric" | "ionic-volute" | "leaf-carved" | "none" | "rounded" | "simple" | "simple-slab" | "south-indian-bracket" | "stepped" | "volute" | "wood-bracket";
7027
- capitalWidthScale: number;
7028
- capitalDepthScale: number;
7029
- capitalTierCount: number;
7030
- capitalStepSpread: number;
7031
- capitalBandCount: number;
7032
- voluteSize: number;
7033
- voluteCount: number;
7034
- leafCount: number;
7035
- leafRows: number;
7036
- bracketDepth: number;
7037
- bracketTierCount: number;
7038
- pendantCount: number;
7039
- capitalCarvingLevel: number;
7040
- ringCount: number;
7041
- ringPlacement: "bottom" | "ends" | "even" | "top";
7042
- ringThickness: number;
7043
- ringSpread: number;
7044
- fluteCount: number;
7045
- fluteDepth: number;
7046
- fluteWidth: number;
7047
- spiralTwist: number;
7048
- spiralRibCount: number;
7049
- panelCount: number;
7050
- panelInsetDepth: number;
7051
- panelShape: "arched" | "diamond" | "rectangle";
7052
- latheRingCount: number;
7053
- latheRingSpacing: "bottom" | "ends" | "even" | "top";
7054
- carvingLevel: number;
7055
- carvingPlacement: "all" | "base" | "capital" | "shaft";
7056
- lowerBandEnabled: boolean;
7057
- lowerBandHeight: number;
7058
- lowerBandCarvingLevel: number;
7059
- dentilCount: number;
7060
- beadCount: number;
7061
- supportStyle: "a-frame" | "box-frame" | "k-brace" | "portal-frame" | "single-strut" | "trestle" | "tripod" | "v-frame" | "vertical" | "x-brace" | "y-frame";
7062
- braceWidth: number;
7063
- braceDepth: number;
7064
- braceBottomSpread: number;
7065
- braceTopSpread: number;
7066
- bracePlateEnabled: boolean;
7067
- role?: "ornament" | "post" | undefined;
7068
- postBase?: "none" | "pier" | "post-base" | undefined;
7069
- material?: {
7070
- id?: string | undefined;
7071
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
7072
- properties?: {
7073
- color: string;
7074
- roughness: number;
7075
- metalness: number;
7076
- opacity: number;
7077
- transparent: boolean;
7078
- side: "back" | "double" | "front";
7079
- } | undefined;
7080
- texture?: {
7081
- url: string;
7082
- repeat?: [number, number] | undefined;
7083
- scale?: number | undefined;
7084
- offset?: [number, number] | undefined;
7085
- normalMap?: string | undefined;
7086
- normalScale?: number | undefined;
7087
- bumpMap?: string | undefined;
7088
- bumpScale?: number | undefined;
6961
+ host: "ceiling" | "mounted" | "slab" | "wall";
6962
+ polygon: number[][];
6963
+ minY: number;
6964
+ maxY: number;
6965
+ }[] | undefined;
6966
+ cutout: boolean;
6967
+ collider: boolean;
6968
+ shape?: {
6969
+ tolerance: number;
6970
+ bands: {
6971
+ y0: number;
6972
+ y1: number;
6973
+ polygons: {
6974
+ outer: [number, number][];
6975
+ holes?: [number, number][][] | undefined;
6976
+ }[];
6977
+ }[];
6978
+ } | undefined;
6979
+ triangles: number;
6980
+ coverage?: number | undefined;
6981
+ uncovered?: {
6982
+ min: [number, number];
6983
+ max: [number, number];
6984
+ }[] | undefined;
6985
+ };
6986
+ images?: {
6987
+ artifact: string;
6988
+ thumbnail: string;
6989
+ floorPlan: string;
7089
6990
  } | undefined;
7090
6991
  } | undefined;
7091
- materialPreset?: string | undefined;
7092
- slots?: Record<string, string> | undefined;
7093
- type: "column";
6992
+ position: [number, number, number];
6993
+ rotation: [number, number, number];
6994
+ side?: "back" | "front" | undefined;
6995
+ verticalAnchor?: "floor" | "wall" | undefined;
6996
+ floorThresholdVersion: 0 | 1;
6997
+ wallId?: string | undefined;
6998
+ dormerId?: string | undefined;
6999
+ dormerFace?: "back" | "front" | "left" | "right" | undefined;
7000
+ roofSegmentId?: string | undefined;
7001
+ roofFace?: "back" | "front" | "left" | "right" | undefined;
7002
+ width: number;
7003
+ height: number;
7004
+ mark?: string | undefined;
7005
+ constructionType: "framed" | "masonry";
7006
+ dimensionReference: "finish-opening" | "masonry-opening" | "nominal" | "rough-opening";
7007
+ roughOpeningWidth?: number | undefined;
7008
+ roughOpeningHeight?: number | undefined;
7009
+ masonryOpeningWidth?: number | undefined;
7010
+ masonryOpeningHeight?: number | undefined;
7011
+ finishOpeningWidth?: number | undefined;
7012
+ finishOpeningHeight?: number | undefined;
7013
+ openingKind: "opening" | "window";
7014
+ windowType: "awning" | "bay" | "bow" | "casement" | "double-hung" | "fixed" | "hopper" | "louvered" | "single-hung" | "sliding" | "tilt-turn";
7015
+ operationState: number;
7016
+ openingDirection?: "inward" | "outward" | undefined;
7017
+ tiltTurnMode?: "tilt" | "turn" | undefined;
7018
+ awningDirection: "down" | "up";
7019
+ casementStyle: "french" | "single";
7020
+ hingesSide: "left" | "right";
7021
+ openingShape: "arch" | "rectangle" | "rounded";
7022
+ openingRadiusMode: "all" | "individual";
7023
+ openingCornerRadii: [number, number, number, number];
7024
+ cornerRadius: number;
7025
+ archHeight: number;
7026
+ openingRevealRadius: number;
7027
+ frameThickness: number;
7028
+ frameDepth?: number | undefined;
7029
+ windowHandle?: boolean | undefined;
7030
+ sashGrid?: boolean | undefined;
7031
+ columnRatios: number[];
7032
+ rowRatios: number[];
7033
+ columnDividerThickness: number;
7034
+ rowDividerThickness: number;
7035
+ corner?: {
7036
+ end: "end" | "start";
7037
+ partnerId: string;
7038
+ post: "none" | "post";
7039
+ } | undefined;
7040
+ sill: boolean;
7041
+ sillDepth: number;
7042
+ sillThickness: number;
7043
+ sillOverhang?: number | undefined;
7044
+ sillInterior?: boolean | undefined;
7045
+ sillInteriorDepth?: number | undefined;
7046
+ sillInteriorThickness?: number | undefined;
7047
+ sillInteriorOverhang?: number | undefined;
7048
+ shutters?: "board-batten" | "louvered" | "none" | "panel" | undefined;
7049
+ shutterWidth?: number | undefined;
7050
+ shutterOpen?: number | undefined;
7051
+ shutterSides?: "both" | "left" | "right" | undefined;
7052
+ rollerShutter?: "box" | "concealed" | "none" | undefined;
7053
+ rollerShutterBoxHeight?: number | undefined;
7054
+ rollerShutterOpen?: number | undefined;
7055
+ casingFaceA?: boolean | undefined;
7056
+ casingFaceB?: boolean | undefined;
7057
+ casingWidth?: number | undefined;
7058
+ type: "window";
7094
7059
  } | {
7095
7060
  object: "node";
7096
7061
  name?: string | undefined;
@@ -7623,7 +7588,7 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
7623
7588
  cavityInsulation?: string | undefined;
7624
7589
  } | undefined;
7625
7590
  slots?: Record<string, string> | undefined;
7626
- children: `rseg_${string}`[];
7591
+ children: string[];
7627
7592
  type: "roof";
7628
7593
  } | {
7629
7594
  object: "node";
@@ -8178,6 +8143,7 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
8178
8143
  } | undefined;
8179
8144
  justification?: "a" | "b" | undefined;
8180
8145
  height?: number | undefined;
8146
+ endHeightOffset?: number | undefined;
8181
8147
  curveOffset?: number | undefined;
8182
8148
  supportSlabId?: string | undefined;
8183
8149
  supportOffset?: number | undefined;
@@ -8650,6 +8616,66 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
8650
8616
  topElevation?: number | undefined;
8651
8617
  supportSlabId?: string | undefined;
8652
8618
  type: "beam";
8619
+ } | {
8620
+ object: "node";
8621
+ name?: string | undefined;
8622
+ parentId: string | null;
8623
+ visible: boolean;
8624
+ camera?: {
8625
+ position: [number, number, number];
8626
+ target: [number, number, number];
8627
+ mode: "orthographic" | "perspective";
8628
+ fov?: number | undefined;
8629
+ zoom?: number | undefined;
8630
+ } | undefined;
8631
+ metadata: Record<string, unknown>;
8632
+ provenance?: {
8633
+ refs: {
8634
+ ns?: string | undefined;
8635
+ id: string;
8636
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
8637
+ }[];
8638
+ lineage?: {
8639
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
8640
+ fromIds: string[];
8641
+ } | undefined;
8642
+ } | undefined;
8643
+ id: `construction-dimension_${string}`;
8644
+ anchors: ({
8645
+ kind: "feature";
8646
+ reference: {
8647
+ nodeId: string;
8648
+ featureId: string;
8649
+ parameters?: Record<string, string | number | boolean> | undefined;
8650
+ };
8651
+ fallback: [number, number, number];
8652
+ } | [number, number, number])[];
8653
+ baseline: {
8654
+ origin: [number, number];
8655
+ direction: [number, number];
8656
+ };
8657
+ chainMode: "continuous" | "point-to-point";
8658
+ mode: "angular" | "arc-length" | "center-mark" | "chord" | "coordinate" | "diameter" | "linear" | "radius";
8659
+ featureCount: number;
8660
+ showCenterMark: boolean;
8661
+ prefix: string;
8662
+ suffix: string;
8663
+ textOverride: string | null;
8664
+ datumPolicy: "centerline" | "finish-face" | "structural-face" | "wall-face";
8665
+ terminator: "architectural-tick" | "dot" | "filled-arrow" | "open-arrow";
8666
+ textPosition: "above" | "centered";
8667
+ imperialPrecision: "1" | "1/16" | "1/2" | "1/4" | "1/8";
8668
+ metricNotation: "meters" | "millimeters";
8669
+ extensionStartGap: number;
8670
+ extensionOvershoot: number;
8671
+ drawingType: "floor-plan" | "foundation-plan" | "reflected-ceiling-plan" | "roof-plan" | "site-plan";
8672
+ drawingOverrides: {
8673
+ drawingType: "floor-plan" | "foundation-plan" | "reflected-ceiling-plan" | "roof-plan" | "site-plan";
8674
+ presentation: "controlled" | "omit" | "shown";
8675
+ suppressedSegmentIndexes: number[];
8676
+ }[];
8677
+ controllingDimensionId: `construction-dimension_${string}` | null;
8678
+ type: "construction-dimension";
8653
8679
  } | {
8654
8680
  object: "node";
8655
8681
  name?: string | undefined;
@@ -9160,20 +9186,112 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
9160
9186
  face: "a" | "b";
9161
9187
  finish: string;
9162
9188
  }[] | undefined;
9163
- hasFloor?: false | undefined;
9164
- hasCeiling?: false | undefined;
9165
- spaceRole: "generic" | "room";
9166
- roomNumber: string;
9167
- enclosureStatus: "auto" | "enclosed" | "open";
9168
- floorFinish: string;
9169
- wallFinish: string;
9170
- ceilingFinish: string;
9171
- ceilingHeight: number;
9172
- occupancy: string;
9173
- clearDimensionPolicy: "finish-faces" | "inside-faces" | "none";
9174
- color: string;
9175
- metadata: Record<string, unknown>;
9176
- type: "zone";
9189
+ hasFloor?: false | undefined;
9190
+ hasCeiling?: false | undefined;
9191
+ spaceRole: "generic" | "room";
9192
+ roomNumber: string;
9193
+ enclosureStatus: "auto" | "enclosed" | "open";
9194
+ floorFinish: string;
9195
+ wallFinish: string;
9196
+ ceilingFinish: string;
9197
+ ceilingHeight: number;
9198
+ occupancy: string;
9199
+ clearDimensionPolicy: "finish-faces" | "inside-faces" | "none";
9200
+ color: string;
9201
+ metadata: Record<string, unknown>;
9202
+ type: "zone";
9203
+ } | {
9204
+ object: "node";
9205
+ name?: string | undefined;
9206
+ parentId: string | null;
9207
+ visible: boolean;
9208
+ camera?: {
9209
+ position: [number, number, number];
9210
+ target: [number, number, number];
9211
+ mode: "orthographic" | "perspective";
9212
+ fov?: number | undefined;
9213
+ zoom?: number | undefined;
9214
+ } | undefined;
9215
+ metadata: Record<string, unknown>;
9216
+ provenance?: {
9217
+ refs: {
9218
+ ns?: string | undefined;
9219
+ id: string;
9220
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
9221
+ }[];
9222
+ lineage?: {
9223
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
9224
+ fromIds: string[];
9225
+ } | undefined;
9226
+ } | undefined;
9227
+ id: `ceiling_${string}`;
9228
+ children: (`item_${string}` | `procedural-item_${string}`)[];
9229
+ material?: {
9230
+ id?: string | undefined;
9231
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
9232
+ properties?: {
9233
+ color: string;
9234
+ roughness: number;
9235
+ metalness: number;
9236
+ opacity: number;
9237
+ transparent: boolean;
9238
+ side: "back" | "double" | "front";
9239
+ } | undefined;
9240
+ texture?: {
9241
+ url: string;
9242
+ repeat?: [number, number] | undefined;
9243
+ scale?: number | undefined;
9244
+ offset?: [number, number] | undefined;
9245
+ normalMap?: string | undefined;
9246
+ normalScale?: number | undefined;
9247
+ bumpMap?: string | undefined;
9248
+ bumpScale?: number | undefined;
9249
+ } | undefined;
9250
+ } | undefined;
9251
+ materialPreset?: string | undefined;
9252
+ slots?: Record<string, string> | undefined;
9253
+ polygon: [number, number][];
9254
+ holes: [number, number][][];
9255
+ holeMetadata: {
9256
+ source: "elevator" | "floor-opening" | "manual" | "room" | "stair";
9257
+ openingId?: string | undefined;
9258
+ stairId?: string | undefined;
9259
+ elevatorId?: string | undefined;
9260
+ }[];
9261
+ openingIds?: string[] | undefined;
9262
+ height?: number | undefined;
9263
+ buildUp?: {
9264
+ presetId?: string | undefined;
9265
+ finish?: {
9266
+ kind: "drywall" | "plaster" | "wood-plank";
9267
+ thickness: number;
9268
+ name?: string | undefined;
9269
+ } | undefined;
9270
+ framing?: {
9271
+ system: "joists" | "truss-chords";
9272
+ size: "2x10" | "2x12" | "2x4" | "2x6" | "2x8";
9273
+ spacing: number;
9274
+ } | undefined;
9275
+ decking?: {
9276
+ kind: "osb" | "plywood";
9277
+ thickness: number;
9278
+ name?: string | undefined;
9279
+ } | undefined;
9280
+ insulation?: {
9281
+ kind: "batt" | "blown" | "rigid";
9282
+ thickness: number;
9283
+ name?: string | undefined;
9284
+ } | undefined;
9285
+ } | undefined;
9286
+ regions?: {
9287
+ id: string;
9288
+ polygon: [number, number][];
9289
+ finish: string | Record<string, unknown>;
9290
+ }[] | undefined;
9291
+ boundary?: "auto" | undefined;
9292
+ zoneId?: string | undefined;
9293
+ autoFromWalls: boolean;
9294
+ type: "ceiling";
9177
9295
  } | {
9178
9296
  object: "node";
9179
9297
  name?: string | undefined;
@@ -9779,53 +9897,6 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
9779
9897
  system: "return" | "supply";
9780
9898
  slots?: Record<string, string> | undefined;
9781
9899
  type: "duct-segment";
9782
- } | {
9783
- object: "node";
9784
- name?: string | undefined;
9785
- parentId: string | null;
9786
- visible: boolean;
9787
- camera?: {
9788
- position: [number, number, number];
9789
- target: [number, number, number];
9790
- mode: "orthographic" | "perspective";
9791
- fov?: number | undefined;
9792
- zoom?: number | undefined;
9793
- } | undefined;
9794
- metadata: Record<string, unknown>;
9795
- provenance?: {
9796
- refs: {
9797
- ns?: string | undefined;
9798
- id: string;
9799
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
9800
- }[];
9801
- lineage?: {
9802
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
9803
- fromIds: string[];
9804
- } | undefined;
9805
- } | undefined;
9806
- id: `duct-fitting_${string}`;
9807
- position: [number, number, number];
9808
- rotation: [number, number, number];
9809
- fittingType: "access-panel" | "coupling" | "cross" | "damper" | "elbow" | "end-cap" | "reducer" | "tee" | "transition";
9810
- shape: "oval" | "rect" | "round";
9811
- inletShape?: "oval" | "rect" | "round" | undefined;
9812
- outletShape?: "oval" | "rect" | "round" | undefined;
9813
- width: number;
9814
- height: number;
9815
- shape2: "oval" | "rect" | "round";
9816
- width2: number;
9817
- height2: number;
9818
- angle: number;
9819
- branchAngle: number;
9820
- diameter: number;
9821
- diameter2: number;
9822
- ductMaterial: "duct-board" | "flex" | "sheet-metal";
9823
- system: "return" | "supply";
9824
- damperAngle: number;
9825
- panelWidth: number;
9826
- panelHeight: number;
9827
- slots?: Record<string, string> | undefined;
9828
- type: "duct-fitting";
9829
9900
  } | {
9830
9901
  object: "node";
9831
9902
  name?: string | undefined;
@@ -9863,47 +9934,6 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
9863
9934
  collarWidth: number;
9864
9935
  collarHeight: number;
9865
9936
  type: "duct-terminal";
9866
- } | {
9867
- object: "node";
9868
- name?: string | undefined;
9869
- parentId: string | null;
9870
- visible: boolean;
9871
- camera?: {
9872
- position: [number, number, number];
9873
- target: [number, number, number];
9874
- mode: "orthographic" | "perspective";
9875
- fov?: number | undefined;
9876
- zoom?: number | undefined;
9877
- } | undefined;
9878
- metadata: Record<string, unknown>;
9879
- provenance?: {
9880
- refs: {
9881
- ns?: string | undefined;
9882
- id: string;
9883
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
9884
- }[];
9885
- lineage?: {
9886
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
9887
- fromIds: string[];
9888
- } | undefined;
9889
- } | undefined;
9890
- id: `hvac-equipment_${string}`;
9891
- position: [number, number, number];
9892
- rotation: number;
9893
- supportSlabId?: string | undefined;
9894
- equipmentType: "air-handler" | "condenser" | "furnace";
9895
- width: number;
9896
- depth: number;
9897
- height: number;
9898
- supplyShape: "oval" | "rect" | "round";
9899
- returnShape: "oval" | "rect" | "round";
9900
- supplyDiameter: number;
9901
- returnDiameter: number;
9902
- supplyWidth: number;
9903
- supplyHeight: number;
9904
- returnWidth: number;
9905
- returnHeight: number;
9906
- type: "hvac-equipment";
9907
9937
  } | {
9908
9938
  object: "node";
9909
9939
  name?: string | undefined;
@@ -10032,17 +10062,13 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
10032
10062
  fromIds: string[];
10033
10063
  } | undefined;
10034
10064
  } | undefined;
10035
- id: `pipe-fitting_${string}`;
10065
+ id: `pipe-trap_${string}`;
10036
10066
  position: [number, number, number];
10037
- rotation: [number, number, number];
10038
- fittingType: "cleanout" | "coupling" | "cross" | "elbow" | "end-cap" | "reducer" | "sanitary-tee" | "wye";
10039
- angle: number;
10067
+ rotation: number;
10040
10068
  diameter: number;
10041
- diameter2: number;
10042
- cleanoutStyle: "end" | "inline";
10043
10069
  pipeMaterial: "abs" | "cast-iron" | "pvc";
10044
- system: "vent" | "waste";
10045
- type: "pipe-fitting";
10070
+ armLengthM: number;
10071
+ type: "pipe-trap";
10046
10072
  } | {
10047
10073
  object: "node";
10048
10074
  name?: string | undefined;
@@ -10067,13 +10093,12 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
10067
10093
  fromIds: string[];
10068
10094
  } | undefined;
10069
10095
  } | undefined;
10070
- id: `pipe-trap_${string}`;
10071
- position: [number, number, number];
10072
- rotation: number;
10073
- diameter: number;
10074
- pipeMaterial: "abs" | "cast-iron" | "pvc";
10075
- armLengthM: number;
10076
- type: "pipe-trap";
10096
+ id: `level_${string}`;
10097
+ children: (`beam_${string}` | `block_${string}` | `ceiling_${string}` | `column_${string}` | `construction-dimension_${string}` | `duct-fitting_${string}` | `duct-segment_${string}` | `duct-terminal_${string}` | `fence_${string}` | `floor-opening_${string}` | `guide_${string}` | `hvac-equipment_${string}` | `imesh_${string}` | `item_${string}` | `lineset_${string}` | `liquid-line_${string}` | `measurement_${string}` | `pipe-fitting_${string}` | `pipe-segment_${string}` | `pipe-trap_${string}` | `procedural-item_${string}` | `roof_${string}` | `scan_${string}` | `separator_${string}` | `shelf_${string}` | `slab_${string}` | `spawn_${string}` | `stair_${string}` | `structural-grid_${string}` | `wall_${string}` | `zone_${string}`)[];
10098
+ level: number;
10099
+ baseElevation: number;
10100
+ height?: number | undefined;
10101
+ type: "level";
10077
10102
  } | {
10078
10103
  object: "node";
10079
10104
  name?: string | undefined;
@@ -10098,12 +10123,54 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
10098
10123
  fromIds: string[];
10099
10124
  } | undefined;
10100
10125
  } | undefined;
10101
- id: `level_${string}`;
10102
- children: (`beam_${string}` | `block_${string}` | `ceiling_${string}` | `column_${string}` | `construction-dimension_${string}` | `duct-fitting_${string}` | `duct-segment_${string}` | `duct-terminal_${string}` | `fence_${string}` | `floor-opening_${string}` | `guide_${string}` | `hvac-equipment_${string}` | `imesh_${string}` | `item_${string}` | `lineset_${string}` | `liquid-line_${string}` | `measurement_${string}` | `pipe-fitting_${string}` | `pipe-segment_${string}` | `pipe-trap_${string}` | `procedural-item_${string}` | `roof_${string}` | `scan_${string}` | `separator_${string}` | `shelf_${string}` | `slab_${string}` | `spawn_${string}` | `stair_${string}` | `structural-grid_${string}` | `wall_${string}` | `zone_${string}`)[];
10103
- level: number;
10104
- baseElevation: number;
10105
- height?: number | undefined;
10106
- type: "level";
10126
+ id: `elevator_${string}`;
10127
+ material?: {
10128
+ id?: string | undefined;
10129
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
10130
+ properties?: {
10131
+ color: string;
10132
+ roughness: number;
10133
+ metalness: number;
10134
+ opacity: number;
10135
+ transparent: boolean;
10136
+ side: "back" | "double" | "front";
10137
+ } | undefined;
10138
+ texture?: {
10139
+ url: string;
10140
+ repeat?: [number, number] | undefined;
10141
+ scale?: number | undefined;
10142
+ offset?: [number, number] | undefined;
10143
+ normalMap?: string | undefined;
10144
+ normalScale?: number | undefined;
10145
+ bumpMap?: string | undefined;
10146
+ bumpScale?: number | undefined;
10147
+ } | undefined;
10148
+ } | undefined;
10149
+ materialPreset?: string | undefined;
10150
+ slots?: Record<string, string> | undefined;
10151
+ position: [number, number, number];
10152
+ rotation: number;
10153
+ width: number;
10154
+ depth: number;
10155
+ shaftWidth?: number | undefined;
10156
+ shaftDepth?: number | undefined;
10157
+ shaftWallThickness: number;
10158
+ shaftStyle: "glass" | "solid";
10159
+ cabHeight: number;
10160
+ doorWidth: number;
10161
+ doorHeight: number;
10162
+ doorStyle: "center-opening" | "single-left" | "single-right";
10163
+ doorPanelStyle: "glass-frame" | "segmented-panel" | "solid-panel";
10164
+ fromLevelId: string | null;
10165
+ toLevelId: string | null;
10166
+ servedLevelIds?: string[] | undefined;
10167
+ disabledLevelIds: string[];
10168
+ serviceOnlyLevelIds: string[];
10169
+ defaultLevelId: string | null;
10170
+ speed: number;
10171
+ doorDurationMs: number;
10172
+ dwellMs: number;
10173
+ type: "elevator";
10107
10174
  } | {
10108
10175
  object: "node";
10109
10176
  parentId: string | null;
@@ -10569,71 +10636,6 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
10569
10636
  topFinishHeight: number;
10570
10637
  topFinishDepth: number;
10571
10638
  type: "cabinet-module";
10572
- } | {
10573
- object: "node";
10574
- name?: string | undefined;
10575
- parentId: string | null;
10576
- visible: boolean;
10577
- camera?: {
10578
- position: [number, number, number];
10579
- target: [number, number, number];
10580
- mode: "orthographic" | "perspective";
10581
- fov?: number | undefined;
10582
- zoom?: number | undefined;
10583
- } | undefined;
10584
- metadata: Record<string, unknown>;
10585
- provenance?: {
10586
- refs: {
10587
- ns?: string | undefined;
10588
- id: string;
10589
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
10590
- }[];
10591
- lineage?: {
10592
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
10593
- fromIds: string[];
10594
- } | undefined;
10595
- } | undefined;
10596
- id: `bvent_${string}`;
10597
- material?: {
10598
- id?: string | undefined;
10599
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
10600
- properties?: {
10601
- color: string;
10602
- roughness: number;
10603
- metalness: number;
10604
- opacity: number;
10605
- transparent: boolean;
10606
- side: "back" | "double" | "front";
10607
- } | undefined;
10608
- texture?: {
10609
- url: string;
10610
- repeat?: [number, number] | undefined;
10611
- scale?: number | undefined;
10612
- offset?: [number, number] | undefined;
10613
- normalMap?: string | undefined;
10614
- normalScale?: number | undefined;
10615
- bumpMap?: string | undefined;
10616
- bumpScale?: number | undefined;
10617
- } | undefined;
10618
- } | undefined;
10619
- slots?: Record<string, string> | undefined;
10620
- materialPreset: string;
10621
- roofSegmentId?: string | undefined;
10622
- position: [number, number, number];
10623
- rotation: number;
10624
- width: number;
10625
- depth: number;
10626
- height: number;
10627
- hoodOverhang: number;
10628
- topTaper: number;
10629
- capHeight: number;
10630
- capGap: number;
10631
- domeCurvature: number;
10632
- baseInset: number;
10633
- baseHeight: number;
10634
- cornerBevel: number;
10635
- style: "box" | "cap" | "dome";
10636
- type: "box-vent";
10637
10639
  } | {
10638
10640
  object: "node";
10639
10641
  name?: string | undefined;