@pascal-app/core 1.1.1 → 1.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/dist/agent-operations/__fixtures__/roof-bearing-cases.d.ts +13453 -13453
  2. package/dist/agent-operations/batch.d.ts +4 -8
  3. package/dist/agent-operations/batch.d.ts.map +1 -1
  4. package/dist/agent-operations/batch.js +7 -19
  5. package/dist/agent-operations/circulation-spaces.d.ts +3431 -3431
  6. package/dist/agent-operations/index.d.ts +5715 -9
  7. package/dist/agent-operations/index.d.ts.map +1 -1
  8. package/dist/agent-operations/index.js +16 -5
  9. package/dist/agent-operations/scene-queries.d.ts +2610 -2610
  10. package/dist/agent-operations/types.d.ts +7 -0
  11. package/dist/agent-operations/types.d.ts.map +1 -1
  12. package/dist/agent-operations/usage-checks.js +2 -2
  13. package/dist/agent-operations/verify-scene.d.ts +7 -3
  14. package/dist/agent-operations/verify-scene.d.ts.map +1 -1
  15. package/dist/agent-operations/verify-scene.js +15 -7
  16. package/dist/building/__fixtures__/wall-opening-cases.d.ts +238 -238
  17. package/dist/building/level-duplication.d.ts +1274 -1274
  18. package/dist/commands/structure/zone-wall-merge.d.ts +568 -568
  19. package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts +2610 -2610
  20. package/dist/lib/__fixtures__/mezzanine.d.ts +10874 -10874
  21. package/dist/lib/absorb-wall-separators.d.ts +635 -635
  22. package/dist/lib/steps.d.ts +8 -0
  23. package/dist/lib/steps.d.ts.map +1 -0
  24. package/dist/lib/steps.js +7 -0
  25. package/dist/spatial/usage-field/findings.d.ts +3 -0
  26. package/dist/spatial/usage-field/findings.d.ts.map +1 -1
  27. package/dist/spatial/usage-field/findings.js +17 -5
  28. package/dist/spatial/usage-field/measure.d.ts +3 -1
  29. package/dist/spatial/usage-field/measure.d.ts.map +1 -1
  30. package/dist/spatial/usage-field/measure.js +7 -2
  31. package/dist/store/actions/node-actions.d.ts +3431 -3431
  32. package/dist/store/scene-annotations.d.ts +1193 -1193
  33. package/dist/systems/slab/__fixtures__/floor-step.d.ts +3431 -3431
  34. package/dist/systems/slab/__fixtures__/raised-room.d.ts +2610 -2610
  35. package/dist/systems/stair/stair-opening-preview.d.ts +2610 -2610
  36. package/dist/utils/ensure-scene-openings.d.ts +6215 -6215
  37. package/dist/utils/floor-plate-migration.d.ts +635 -635
  38. package/dist/utils/owned-floor-opening-migration.d.ts +635 -635
  39. package/dist/utils/reconcile-structure-on-load.d.ts +3431 -3431
  40. 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: `bvent_${string}`;
38
+ id: `elevator_${string}`;
39
39
  material?: {
40
40
  id?: string | undefined;
41
41
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
@@ -58,24 +58,31 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
58
58
  bumpScale?: number | undefined;
59
59
  } | undefined;
60
60
  } | undefined;
61
+ materialPreset?: string | undefined;
61
62
  slots?: Record<string, string> | undefined;
62
- materialPreset: string;
63
- roofSegmentId?: string | undefined;
64
63
  position: [number, number, number];
65
64
  rotation: number;
66
65
  width: number;
67
66
  depth: number;
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";
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";
79
86
  } | {
80
87
  object: "node";
81
88
  name?: string | undefined;
@@ -100,11 +107,21 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
100
107
  fromIds: string[];
101
108
  } | undefined;
102
109
  } | undefined;
103
- id: `column_${string}`;
104
- children: string[];
110
+ type: "item";
111
+ id: `item_${string}`;
105
112
  position: [number, number, number];
106
- rotation: number;
113
+ rotation: [number, number, number];
114
+ scale: [number, number, number];
115
+ side?: "back" | "front" | undefined;
116
+ 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;
107
122
  supportSlabId?: string | undefined;
123
+ collectionIds?: `collection_${string}`[] | undefined;
124
+ slots?: Record<string, string> | undefined;
108
125
  source?: {
109
126
  kind: "script";
110
127
  meta?: {
@@ -219,104 +236,76 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
219
236
  floorPlan: string;
220
237
  } | undefined;
221
238
  } | undefined;
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";
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;
305
258
  } | undefined;
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;
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
+ })[];
315
307
  } | undefined;
316
- } | undefined;
317
- materialPreset?: string | undefined;
318
- slots?: Record<string, string> | undefined;
319
- type: "column";
308
+ };
320
309
  } | {
321
310
  object: "node";
322
311
  name?: string | undefined;
@@ -341,70 +330,74 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
341
330
  fromIds: string[];
342
331
  } | undefined;
343
332
  } | 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;
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;
378
356
  } | 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[];
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;
389
390
  } | undefined;
390
391
  } | undefined;
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";
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";
408
401
  } | {
409
402
  object: "node";
410
403
  name?: string | undefined;
@@ -429,17 +422,42 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
429
422
  fromIds: string[];
430
423
  } | undefined;
431
424
  } | undefined;
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";
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";
443
461
  } | {
444
462
  object: "node";
445
463
  name?: string | undefined;
@@ -680,20 +698,29 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
680
698
  fromIds: string[];
681
699
  } | undefined;
682
700
  } | 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;
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;
697
724
  slots?: Record<string, string> | undefined;
698
725
  source?: {
699
726
  kind: "script";
@@ -802,83 +829,79 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
802
829
  min: [number, number];
803
830
  max: [number, number];
804
831
  }[] | undefined;
805
- };
806
- images?: {
807
- artifact: string;
808
- thumbnail: string;
809
- floorPlan: string;
810
- } | undefined;
811
- } | undefined;
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
- })[];
832
+ };
833
+ images?: {
834
+ artifact: string;
835
+ thumbnail: string;
836
+ floorPlan: string;
880
837
  } | undefined;
881
- };
838
+ } | 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";
882
905
  } | {
883
906
  object: "node";
884
907
  name?: string | undefined;
@@ -903,7 +926,7 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
903
926
  fromIds: string[];
904
927
  } | undefined;
905
928
  } | undefined;
906
- id: `door_${string}`;
929
+ id: `window_${string}`;
907
930
  material?: {
908
931
  id?: string | undefined;
909
932
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
@@ -1047,14 +1070,12 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
1047
1070
  verticalAnchor?: "floor" | "wall" | undefined;
1048
1071
  floorThresholdVersion: 0 | 1;
1049
1072
  wallId?: string | undefined;
1073
+ dormerId?: string | undefined;
1074
+ dormerFace?: "back" | "front" | "left" | "right" | undefined;
1050
1075
  roofSegmentId?: string | undefined;
1051
1076
  roofFace?: "back" | "front" | "left" | "right" | undefined;
1052
1077
  width: number;
1053
1078
  height: number;
1054
- sidelightLeft?: number | undefined;
1055
- sidelightRight?: number | undefined;
1056
- transomHeight?: number | undefined;
1057
- slidingStyle?: "bypass" | "patio" | undefined;
1058
1079
  mark?: string | undefined;
1059
1080
  constructionType: "framed" | "masonry";
1060
1081
  dimensionReference: "finish-opening" | "masonry-opening" | "nominal" | "rough-opening";
@@ -1064,49 +1085,52 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
1064
1085
  masonryOpeningHeight?: number | undefined;
1065
1086
  finishOpeningWidth?: number | undefined;
1066
1087
  finishOpeningHeight?: number | undefined;
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;
1088
+ openingKind: "opening" | "window";
1089
+ windowType: "awning" | "bay" | "bow" | "casement" | "double-hung" | "fixed" | "hopper" | "louvered" | "single-hung" | "sliding" | "tilt-turn";
1070
1090
  operationState: number;
1071
- slideDirection: "left" | "right";
1072
- trackStyle: "none" | "overhead" | "pocket" | "visible";
1073
- garagePanelCount: number;
1074
- openingKind: "door" | "opening";
1091
+ openingDirection?: "inward" | "outward" | undefined;
1092
+ tiltTurnMode?: "tilt" | "turn" | undefined;
1093
+ awningDirection: "down" | "up";
1094
+ casementStyle: "french" | "single";
1095
+ hingesSide: "left" | "right";
1075
1096
  openingShape: "arch" | "rectangle" | "rounded";
1076
1097
  openingRadiusMode: "all" | "individual";
1077
- openingTopRadii: [number, number];
1098
+ openingCornerRadii: [number, number, number, number];
1078
1099
  cornerRadius: number;
1079
1100
  archHeight: number;
1080
1101
  openingRevealRadius: number;
1081
1102
  frameThickness: number;
1082
1103
  frameDepth?: number | undefined;
1083
- threshold: boolean;
1084
- thresholdHeight: number;
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;
1085
1130
  casingFaceA?: boolean | undefined;
1086
1131
  casingFaceB?: boolean | undefined;
1087
1132
  casingWidth?: number | undefined;
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";
1133
+ type: "window";
1110
1134
  } | {
1111
1135
  object: "node";
1112
1136
  name?: string | undefined;
@@ -1131,30 +1155,11 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
1131
1155
  fromIds: string[];
1132
1156
  } | undefined;
1133
1157
  } | 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;
1158
+ id: `column_${string}`;
1159
+ children: string[];
1160
+ position: [number, number, number];
1161
+ rotation: number;
1162
+ supportSlabId?: string | undefined;
1158
1163
  source?: {
1159
1164
  kind: "script";
1160
1165
  meta?: {
@@ -1269,73 +1274,104 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
1269
1274
  floorPlan: string;
1270
1275
  } | undefined;
1271
1276
  } | undefined;
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;
1282
- width: number;
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";
1319
- } | undefined;
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";
1277
+ style: "cluster" | "dravidian-carved" | "faceted" | "fluted" | "lathe-turned" | "plain";
1278
+ crossSection: "octagonal" | "rectangular" | "round" | "sixteen-sided" | "square";
1279
+ height: number;
1280
+ radius: number;
1281
+ 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;
1371
+ } | undefined;
1372
+ materialPreset?: string | undefined;
1373
+ slots?: Record<string, string> | undefined;
1374
+ type: "column";
1339
1375
  } | {
1340
1376
  object: "node";
1341
1377
  name?: string | undefined;
@@ -2896,66 +2932,6 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
2896
2932
  topElevation?: number | undefined;
2897
2933
  supportSlabId?: string | undefined;
2898
2934
  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";
2959
2935
  } | {
2960
2936
  object: "node";
2961
2937
  name?: string | undefined;
@@ -3457,121 +3433,29 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
3457
3433
  floorStepOverrides?: {
3458
3434
  key: string;
3459
3435
  step?: number | undefined;
3460
- finish: string;
3461
- }[] | undefined;
3462
- floorEdgeFinish?: string | undefined;
3463
- wallMaterial?: string | undefined;
3464
- wallOverrides?: {
3465
- wallId: string;
3466
- face: "a" | "b";
3467
- finish: string;
3468
- }[] | undefined;
3469
- hasFloor?: false | undefined;
3470
- hasCeiling?: false | undefined;
3471
- spaceRole: "generic" | "room";
3472
- roomNumber: string;
3473
- enclosureStatus: "auto" | "enclosed" | "open";
3474
- floorFinish: string;
3475
- wallFinish: string;
3476
- ceilingFinish: string;
3477
- ceilingHeight: number;
3478
- occupancy: string;
3479
- clearDimensionPolicy: "finish-faces" | "inside-faces" | "none";
3480
- color: string;
3481
- metadata: Record<string, unknown>;
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>;
3436
+ finish: string;
3570
3437
  }[] | undefined;
3571
- boundary?: "auto" | undefined;
3572
- zoneId?: string | undefined;
3573
- autoFromWalls: boolean;
3574
- type: "ceiling";
3438
+ floorEdgeFinish?: string | undefined;
3439
+ wallMaterial?: string | undefined;
3440
+ wallOverrides?: {
3441
+ wallId: string;
3442
+ face: "a" | "b";
3443
+ finish: string;
3444
+ }[] | undefined;
3445
+ hasFloor?: false | undefined;
3446
+ hasCeiling?: false | undefined;
3447
+ spaceRole: "generic" | "room";
3448
+ roomNumber: string;
3449
+ enclosureStatus: "auto" | "enclosed" | "open";
3450
+ floorFinish: string;
3451
+ wallFinish: string;
3452
+ ceilingFinish: string;
3453
+ ceilingHeight: number;
3454
+ occupancy: string;
3455
+ clearDimensionPolicy: "finish-faces" | "inside-faces" | "none";
3456
+ color: string;
3457
+ metadata: Record<string, unknown>;
3458
+ type: "zone";
3575
3459
  } | {
3576
3460
  object: "node";
3577
3461
  name?: string | undefined;
@@ -4177,6 +4061,53 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
4177
4061
  system: "return" | "supply";
4178
4062
  slots?: Record<string, string> | undefined;
4179
4063
  type: "duct-segment";
4064
+ } | {
4065
+ object: "node";
4066
+ name?: string | undefined;
4067
+ parentId: string | null;
4068
+ visible: boolean;
4069
+ camera?: {
4070
+ position: [number, number, number];
4071
+ target: [number, number, number];
4072
+ mode: "orthographic" | "perspective";
4073
+ fov?: number | undefined;
4074
+ zoom?: number | undefined;
4075
+ } | undefined;
4076
+ metadata: Record<string, unknown>;
4077
+ provenance?: {
4078
+ refs: {
4079
+ ns?: string | undefined;
4080
+ id: string;
4081
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
4082
+ }[];
4083
+ lineage?: {
4084
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
4085
+ fromIds: string[];
4086
+ } | undefined;
4087
+ } | undefined;
4088
+ id: `duct-fitting_${string}`;
4089
+ position: [number, number, number];
4090
+ rotation: [number, number, number];
4091
+ fittingType: "access-panel" | "coupling" | "cross" | "damper" | "elbow" | "end-cap" | "reducer" | "tee" | "transition";
4092
+ shape: "oval" | "rect" | "round";
4093
+ inletShape?: "oval" | "rect" | "round" | undefined;
4094
+ outletShape?: "oval" | "rect" | "round" | undefined;
4095
+ width: number;
4096
+ height: number;
4097
+ shape2: "oval" | "rect" | "round";
4098
+ width2: number;
4099
+ height2: number;
4100
+ angle: number;
4101
+ branchAngle: number;
4102
+ diameter: number;
4103
+ diameter2: number;
4104
+ ductMaterial: "duct-board" | "flex" | "sheet-metal";
4105
+ system: "return" | "supply";
4106
+ damperAngle: number;
4107
+ panelWidth: number;
4108
+ panelHeight: number;
4109
+ slots?: Record<string, string> | undefined;
4110
+ type: "duct-fitting";
4180
4111
  } | {
4181
4112
  object: "node";
4182
4113
  name?: string | undefined;
@@ -4214,6 +4145,47 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
4214
4145
  collarWidth: number;
4215
4146
  collarHeight: number;
4216
4147
  type: "duct-terminal";
4148
+ } | {
4149
+ object: "node";
4150
+ name?: string | undefined;
4151
+ parentId: string | null;
4152
+ visible: boolean;
4153
+ camera?: {
4154
+ position: [number, number, number];
4155
+ target: [number, number, number];
4156
+ mode: "orthographic" | "perspective";
4157
+ fov?: number | undefined;
4158
+ zoom?: number | undefined;
4159
+ } | undefined;
4160
+ metadata: Record<string, unknown>;
4161
+ provenance?: {
4162
+ refs: {
4163
+ ns?: string | undefined;
4164
+ id: string;
4165
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
4166
+ }[];
4167
+ lineage?: {
4168
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
4169
+ fromIds: string[];
4170
+ } | undefined;
4171
+ } | undefined;
4172
+ id: `hvac-equipment_${string}`;
4173
+ position: [number, number, number];
4174
+ rotation: number;
4175
+ supportSlabId?: string | undefined;
4176
+ equipmentType: "air-handler" | "condenser" | "furnace";
4177
+ width: number;
4178
+ depth: number;
4179
+ height: number;
4180
+ supplyShape: "oval" | "rect" | "round";
4181
+ returnShape: "oval" | "rect" | "round";
4182
+ supplyDiameter: number;
4183
+ returnDiameter: number;
4184
+ supplyWidth: number;
4185
+ supplyHeight: number;
4186
+ returnWidth: number;
4187
+ returnHeight: number;
4188
+ type: "hvac-equipment";
4217
4189
  } | {
4218
4190
  object: "node";
4219
4191
  name?: string | undefined;
@@ -4342,13 +4314,17 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
4342
4314
  fromIds: string[];
4343
4315
  } | undefined;
4344
4316
  } | undefined;
4345
- id: `pipe-trap_${string}`;
4317
+ id: `pipe-fitting_${string}`;
4346
4318
  position: [number, number, number];
4347
- rotation: number;
4319
+ rotation: [number, number, number];
4320
+ fittingType: "cleanout" | "coupling" | "cross" | "elbow" | "end-cap" | "reducer" | "sanitary-tee" | "wye";
4321
+ angle: number;
4348
4322
  diameter: number;
4323
+ diameter2: number;
4324
+ cleanoutStyle: "end" | "inline";
4349
4325
  pipeMaterial: "abs" | "cast-iron" | "pvc";
4350
- armLengthM: number;
4351
- type: "pipe-trap";
4326
+ system: "vent" | "waste";
4327
+ type: "pipe-fitting";
4352
4328
  } | {
4353
4329
  object: "node";
4354
4330
  name?: string | undefined;
@@ -4373,12 +4349,13 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
4373
4349
  fromIds: string[];
4374
4350
  } | undefined;
4375
4351
  } | undefined;
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";
4352
+ id: `pipe-trap_${string}`;
4353
+ position: [number, number, number];
4354
+ rotation: number;
4355
+ diameter: number;
4356
+ pipeMaterial: "abs" | "cast-iron" | "pvc";
4357
+ armLengthM: number;
4358
+ type: "pipe-trap";
4382
4359
  } | {
4383
4360
  object: "node";
4384
4361
  name?: string | undefined;
@@ -4403,54 +4380,12 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
4403
4380
  fromIds: string[];
4404
4381
  } | undefined;
4405
4382
  } | undefined;
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";
4383
+ id: `level_${string}`;
4384
+ 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}`)[];
4385
+ level: number;
4386
+ baseElevation: number;
4387
+ height?: number | undefined;
4388
+ type: "level";
4454
4389
  } | {
4455
4390
  object: "node";
4456
4391
  parentId: string | null;
@@ -4916,6 +4851,71 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
4916
4851
  topFinishHeight: number;
4917
4852
  topFinishDepth: number;
4918
4853
  type: "cabinet-module";
4854
+ } | {
4855
+ object: "node";
4856
+ name?: string | undefined;
4857
+ parentId: string | null;
4858
+ visible: boolean;
4859
+ camera?: {
4860
+ position: [number, number, number];
4861
+ target: [number, number, number];
4862
+ mode: "orthographic" | "perspective";
4863
+ fov?: number | undefined;
4864
+ zoom?: number | undefined;
4865
+ } | undefined;
4866
+ metadata: Record<string, unknown>;
4867
+ provenance?: {
4868
+ refs: {
4869
+ ns?: string | undefined;
4870
+ id: string;
4871
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
4872
+ }[];
4873
+ lineage?: {
4874
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
4875
+ fromIds: string[];
4876
+ } | undefined;
4877
+ } | undefined;
4878
+ id: `bvent_${string}`;
4879
+ material?: {
4880
+ id?: string | undefined;
4881
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
4882
+ properties?: {
4883
+ color: string;
4884
+ roughness: number;
4885
+ metalness: number;
4886
+ opacity: number;
4887
+ transparent: boolean;
4888
+ side: "back" | "double" | "front";
4889
+ } | undefined;
4890
+ texture?: {
4891
+ url: string;
4892
+ repeat?: [number, number] | undefined;
4893
+ scale?: number | undefined;
4894
+ offset?: [number, number] | undefined;
4895
+ normalMap?: string | undefined;
4896
+ normalScale?: number | undefined;
4897
+ bumpMap?: string | undefined;
4898
+ bumpScale?: number | undefined;
4899
+ } | undefined;
4900
+ } | undefined;
4901
+ slots?: Record<string, string> | undefined;
4902
+ materialPreset: string;
4903
+ roofSegmentId?: string | undefined;
4904
+ position: [number, number, number];
4905
+ rotation: number;
4906
+ width: number;
4907
+ depth: number;
4908
+ height: number;
4909
+ hoodOverhang: number;
4910
+ topTaper: number;
4911
+ capHeight: number;
4912
+ capGap: number;
4913
+ domeCurvature: number;
4914
+ baseInset: number;
4915
+ baseHeight: number;
4916
+ cornerBevel: number;
4917
+ style: "box" | "cap" | "dome";
4918
+ type: "box-vent";
4919
4919
  } | {
4920
4920
  object: "node";
4921
4921
  name?: string | undefined;
@@ -5755,7 +5755,7 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
5755
5755
  fromIds: string[];
5756
5756
  } | undefined;
5757
5757
  } | undefined;
5758
- id: `bvent_${string}`;
5758
+ id: `elevator_${string}`;
5759
5759
  material?: {
5760
5760
  id?: string | undefined;
5761
5761
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
@@ -5778,24 +5778,31 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
5778
5778
  bumpScale?: number | undefined;
5779
5779
  } | undefined;
5780
5780
  } | undefined;
5781
+ materialPreset?: string | undefined;
5781
5782
  slots?: Record<string, string> | undefined;
5782
- materialPreset: string;
5783
- roofSegmentId?: string | undefined;
5784
5783
  position: [number, number, number];
5785
5784
  rotation: number;
5786
5785
  width: number;
5787
5786
  depth: number;
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";
5787
+ shaftWidth?: number | undefined;
5788
+ shaftDepth?: number | undefined;
5789
+ shaftWallThickness: number;
5790
+ shaftStyle: "glass" | "solid";
5791
+ cabHeight: number;
5792
+ doorWidth: number;
5793
+ doorHeight: number;
5794
+ doorStyle: "center-opening" | "single-left" | "single-right";
5795
+ doorPanelStyle: "glass-frame" | "segmented-panel" | "solid-panel";
5796
+ fromLevelId: string | null;
5797
+ toLevelId: string | null;
5798
+ servedLevelIds?: string[] | undefined;
5799
+ disabledLevelIds: string[];
5800
+ serviceOnlyLevelIds: string[];
5801
+ defaultLevelId: string | null;
5802
+ speed: number;
5803
+ doorDurationMs: number;
5804
+ dwellMs: number;
5805
+ type: "elevator";
5799
5806
  } | {
5800
5807
  object: "node";
5801
5808
  name?: string | undefined;
@@ -5820,11 +5827,21 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
5820
5827
  fromIds: string[];
5821
5828
  } | undefined;
5822
5829
  } | undefined;
5823
- id: `column_${string}`;
5824
- children: string[];
5830
+ type: "item";
5831
+ id: `item_${string}`;
5825
5832
  position: [number, number, number];
5826
- rotation: number;
5833
+ rotation: [number, number, number];
5834
+ scale: [number, number, number];
5835
+ side?: "back" | "front" | undefined;
5836
+ children: string[];
5837
+ wallId?: string | undefined;
5838
+ wallT?: number | undefined;
5839
+ roofSegmentId?: string | undefined;
5840
+ roofFace?: "back" | "front" | "left" | "right" | undefined;
5841
+ blockFaceId?: string | undefined;
5827
5842
  supportSlabId?: string | undefined;
5843
+ collectionIds?: `collection_${string}`[] | undefined;
5844
+ slots?: Record<string, string> | undefined;
5828
5845
  source?: {
5829
5846
  kind: "script";
5830
5847
  meta?: {
@@ -5939,151 +5956,76 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
5939
5956
  floorPlan: string;
5940
5957
  } | undefined;
5941
5958
  } | undefined;
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";
6025
- } | undefined;
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;
6035
- } | undefined;
6036
- } | undefined;
6037
- materialPreset?: string | undefined;
6038
- slots?: Record<string, string> | undefined;
6039
- type: "column";
6040
- } | {
6041
- object: "node";
6042
- name?: string | undefined;
6043
- parentId: string | null;
6044
- visible: boolean;
6045
- camera?: {
6046
- position: [number, number, number];
6047
- target: [number, number, number];
6048
- mode: "orthographic" | "perspective";
6049
- fov?: number | undefined;
6050
- zoom?: number | undefined;
6051
- } | undefined;
6052
- metadata: Record<string, unknown>;
6053
- provenance?: {
6054
- refs: {
6055
- ns?: string | undefined;
6056
- id: string;
6057
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
6058
- }[];
6059
- lineage?: {
6060
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
6061
- fromIds: string[];
5959
+ asset: {
5960
+ id: string;
5961
+ category: string;
5962
+ name: string;
5963
+ thumbnail: string;
5964
+ floorPlanUrl?: string | undefined;
5965
+ source: "community" | "library" | "mine";
5966
+ isDraft?: boolean | undefined;
5967
+ src: string;
5968
+ dimensions: [number, number, number];
5969
+ attachTo?: "ceiling" | "wall" | "wall-side" | undefined;
5970
+ recessed?: boolean | undefined;
5971
+ tags?: string[] | undefined;
5972
+ functionTags?: string[] | undefined;
5973
+ offset: [number, number, number];
5974
+ rotation: [number, number, number];
5975
+ scale: [number, number, number];
5976
+ surface?: {
5977
+ height: number;
6062
5978
  } | undefined;
6063
- } | 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";
5979
+ interactive?: {
5980
+ controls: ({
5981
+ kind: "toggle";
5982
+ label?: string | undefined;
5983
+ default?: boolean | undefined;
5984
+ } | {
5985
+ kind: "slider";
5986
+ label: string;
5987
+ min: number;
5988
+ max: number;
5989
+ step: number;
5990
+ unit?: string | undefined;
5991
+ displayMode: "dial" | "slider" | "stepper";
5992
+ default?: number | undefined;
5993
+ } | {
5994
+ kind: "temperature";
5995
+ label: string;
5996
+ min: number;
5997
+ max: number;
5998
+ unit: "C" | "F";
5999
+ default?: number | undefined;
6000
+ })[];
6001
+ effects: ({
6002
+ kind: "animation";
6003
+ mode?: "ambient" | "open-close" | undefined;
6004
+ control?: number | undefined;
6005
+ clips: {
6006
+ on?: string | undefined;
6007
+ off?: string | undefined;
6008
+ loop?: string | undefined;
6009
+ };
6010
+ } | {
6011
+ kind: "light";
6012
+ color: string;
6013
+ intensityRange: [number, number];
6014
+ distance?: number | undefined;
6015
+ offset: [number, number, number];
6016
+ spot?: {
6017
+ direction: [number, number, number];
6018
+ angle: number;
6019
+ softness: number;
6020
+ } | undefined;
6021
+ shadows?: boolean | undefined;
6022
+ glow?: {
6023
+ size: number;
6024
+ strength: number;
6025
+ } | undefined;
6026
+ })[];
6027
+ } | undefined;
6028
+ };
6087
6029
  } | {
6088
6030
  object: "node";
6089
6031
  name?: string | undefined;
@@ -6108,23 +6050,74 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
6108
6050
  fromIds: string[];
6109
6051
  } | undefined;
6110
6052
  } | undefined;
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";
6053
+ id: `ceiling_${string}`;
6054
+ children: (`item_${string}` | `procedural-item_${string}`)[];
6055
+ material?: {
6056
+ id?: string | undefined;
6057
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
6058
+ properties?: {
6059
+ color: string;
6060
+ roughness: number;
6061
+ metalness: number;
6062
+ opacity: number;
6063
+ transparent: boolean;
6064
+ side: "back" | "double" | "front";
6065
+ } | undefined;
6066
+ texture?: {
6067
+ url: string;
6068
+ repeat?: [number, number] | undefined;
6069
+ scale?: number | undefined;
6070
+ offset?: [number, number] | undefined;
6071
+ normalMap?: string | undefined;
6072
+ normalScale?: number | undefined;
6073
+ bumpMap?: string | undefined;
6074
+ bumpScale?: number | undefined;
6075
+ } | undefined;
6076
+ } | undefined;
6077
+ materialPreset?: string | undefined;
6078
+ slots?: Record<string, string> | undefined;
6079
+ polygon: [number, number][];
6080
+ holes: [number, number][][];
6081
+ holeMetadata: {
6082
+ source: "elevator" | "floor-opening" | "manual" | "room" | "stair";
6083
+ openingId?: string | undefined;
6084
+ stairId?: string | undefined;
6085
+ elevatorId?: string | undefined;
6086
+ }[];
6087
+ openingIds?: string[] | undefined;
6088
+ height?: number | undefined;
6089
+ buildUp?: {
6090
+ presetId?: string | undefined;
6091
+ finish?: {
6092
+ kind: "drywall" | "plaster" | "wood-plank";
6093
+ thickness: number;
6094
+ name?: string | undefined;
6095
+ } | undefined;
6096
+ framing?: {
6097
+ system: "joists" | "truss-chords";
6098
+ size: "2x10" | "2x12" | "2x4" | "2x6" | "2x8";
6099
+ spacing: number;
6100
+ } | undefined;
6101
+ decking?: {
6102
+ kind: "osb" | "plywood";
6103
+ thickness: number;
6104
+ name?: string | undefined;
6105
+ } | undefined;
6106
+ insulation?: {
6107
+ kind: "batt" | "blown" | "rigid";
6108
+ thickness: number;
6109
+ name?: string | undefined;
6110
+ } | undefined;
6111
+ } | undefined;
6112
+ regions?: {
6113
+ id: string;
6114
+ polygon: [number, number][];
6115
+ finish: string | Record<string, unknown>;
6116
+ }[] | undefined;
6117
+ boundary?: "auto" | undefined;
6118
+ zoneId?: string | undefined;
6119
+ autoFromWalls: boolean;
6120
+ type: "ceiling";
6128
6121
  } | {
6129
6122
  object: "node";
6130
6123
  name?: string | undefined;
@@ -6149,17 +6142,42 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
6149
6142
  fromIds: string[];
6150
6143
  } | undefined;
6151
6144
  } | undefined;
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";
6145
+ id: `construction-dimension_${string}`;
6146
+ anchors: ({
6147
+ kind: "feature";
6148
+ reference: {
6149
+ nodeId: string;
6150
+ featureId: string;
6151
+ parameters?: Record<string, string | number | boolean> | undefined;
6152
+ };
6153
+ fallback: [number, number, number];
6154
+ } | [number, number, number])[];
6155
+ baseline: {
6156
+ origin: [number, number];
6157
+ direction: [number, number];
6158
+ };
6159
+ chainMode: "continuous" | "point-to-point";
6160
+ mode: "angular" | "arc-length" | "center-mark" | "chord" | "coordinate" | "diameter" | "linear" | "radius";
6161
+ featureCount: number;
6162
+ showCenterMark: boolean;
6163
+ prefix: string;
6164
+ suffix: string;
6165
+ textOverride: string | null;
6166
+ datumPolicy: "centerline" | "finish-face" | "structural-face" | "wall-face";
6167
+ terminator: "architectural-tick" | "dot" | "filled-arrow" | "open-arrow";
6168
+ textPosition: "above" | "centered";
6169
+ imperialPrecision: "1" | "1/16" | "1/2" | "1/4" | "1/8";
6170
+ metricNotation: "meters" | "millimeters";
6171
+ extensionStartGap: number;
6172
+ extensionOvershoot: number;
6173
+ drawingType: "floor-plan" | "foundation-plan" | "reflected-ceiling-plan" | "roof-plan" | "site-plan";
6174
+ drawingOverrides: {
6175
+ drawingType: "floor-plan" | "foundation-plan" | "reflected-ceiling-plan" | "roof-plan" | "site-plan";
6176
+ presentation: "controlled" | "omit" | "shown";
6177
+ suppressedSegmentIndexes: number[];
6178
+ }[];
6179
+ controllingDimensionId: `construction-dimension_${string}` | null;
6180
+ type: "construction-dimension";
6163
6181
  } | {
6164
6182
  object: "node";
6165
6183
  name?: string | undefined;
@@ -6400,20 +6418,29 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
6400
6418
  fromIds: string[];
6401
6419
  } | undefined;
6402
6420
  } | 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;
6421
+ id: `door_${string}`;
6422
+ material?: {
6423
+ id?: string | undefined;
6424
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
6425
+ properties?: {
6426
+ color: string;
6427
+ roughness: number;
6428
+ metalness: number;
6429
+ opacity: number;
6430
+ transparent: boolean;
6431
+ side: "back" | "double" | "front";
6432
+ } | undefined;
6433
+ texture?: {
6434
+ url: string;
6435
+ repeat?: [number, number] | undefined;
6436
+ scale?: number | undefined;
6437
+ offset?: [number, number] | undefined;
6438
+ normalMap?: string | undefined;
6439
+ normalScale?: number | undefined;
6440
+ bumpMap?: string | undefined;
6441
+ bumpScale?: number | undefined;
6442
+ } | undefined;
6443
+ } | undefined;
6417
6444
  slots?: Record<string, string> | undefined;
6418
6445
  source?: {
6419
6446
  kind: "script";
@@ -6520,85 +6547,81 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
6520
6547
  coverage?: number | undefined;
6521
6548
  uncovered?: {
6522
6549
  min: [number, number];
6523
- max: [number, number];
6524
- }[] | undefined;
6525
- };
6526
- images?: {
6527
- artifact: string;
6528
- thumbnail: string;
6529
- floorPlan: string;
6530
- } | undefined;
6531
- } | undefined;
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
- })[];
6550
+ max: [number, number];
6551
+ }[] | undefined;
6552
+ };
6553
+ images?: {
6554
+ artifact: string;
6555
+ thumbnail: string;
6556
+ floorPlan: string;
6600
6557
  } | undefined;
6601
- };
6558
+ } | undefined;
6559
+ position: [number, number, number];
6560
+ rotation: [number, number, number];
6561
+ side?: "back" | "front" | undefined;
6562
+ verticalAnchor?: "floor" | "wall" | undefined;
6563
+ floorThresholdVersion: 0 | 1;
6564
+ wallId?: string | undefined;
6565
+ roofSegmentId?: string | undefined;
6566
+ roofFace?: "back" | "front" | "left" | "right" | undefined;
6567
+ width: number;
6568
+ height: number;
6569
+ sidelightLeft?: number | undefined;
6570
+ sidelightRight?: number | undefined;
6571
+ transomHeight?: number | undefined;
6572
+ slidingStyle?: "bypass" | "patio" | undefined;
6573
+ mark?: string | undefined;
6574
+ constructionType: "framed" | "masonry";
6575
+ dimensionReference: "finish-opening" | "masonry-opening" | "nominal" | "rough-opening";
6576
+ roughOpeningWidth?: number | undefined;
6577
+ roughOpeningHeight?: number | undefined;
6578
+ masonryOpeningWidth?: number | undefined;
6579
+ masonryOpeningHeight?: number | undefined;
6580
+ finishOpeningWidth?: number | undefined;
6581
+ finishOpeningHeight?: number | undefined;
6582
+ doorCategory: "garage" | "interior";
6583
+ doorType: "barn" | "double" | "folding" | "french" | "garage-rollup" | "garage-sectional" | "garage-tiltup" | "hinged" | "pocket" | "sliding";
6584
+ leafCount: 1 | 2 | 3 | 4 | 6 | 8;
6585
+ operationState: number;
6586
+ slideDirection: "left" | "right";
6587
+ trackStyle: "none" | "overhead" | "pocket" | "visible";
6588
+ garagePanelCount: number;
6589
+ openingKind: "door" | "opening";
6590
+ openingShape: "arch" | "rectangle" | "rounded";
6591
+ openingRadiusMode: "all" | "individual";
6592
+ openingTopRadii: [number, number];
6593
+ cornerRadius: number;
6594
+ archHeight: number;
6595
+ openingRevealRadius: number;
6596
+ frameThickness: number;
6597
+ frameDepth?: number | undefined;
6598
+ threshold: boolean;
6599
+ thresholdHeight: number;
6600
+ casingFaceA?: boolean | undefined;
6601
+ casingFaceB?: boolean | undefined;
6602
+ casingWidth?: number | undefined;
6603
+ hingesSide: "left" | "right";
6604
+ swingDirection: "inward" | "outward";
6605
+ swingAngle: number;
6606
+ segments: {
6607
+ type: "empty" | "glass" | "panel";
6608
+ heightRatio: number;
6609
+ columnRatios: number[];
6610
+ dividerThickness: number;
6611
+ panelDepth: number;
6612
+ panelInset: number;
6613
+ }[];
6614
+ handle: boolean;
6615
+ handleStyle?: "bar" | "knob" | "lever" | "lever-curved" | "plate" | undefined;
6616
+ handleHeight: number;
6617
+ handleSide: "left" | "right";
6618
+ contentPadding: [number, number];
6619
+ doorCloser: boolean;
6620
+ panicBar: boolean;
6621
+ panicBarStyle: "crossbar" | "touchbar";
6622
+ panicBarRods: boolean;
6623
+ panicBarHeight: number;
6624
+ type: "door";
6602
6625
  } | {
6603
6626
  object: "node";
6604
6627
  name?: string | undefined;
@@ -6623,7 +6646,7 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
6623
6646
  fromIds: string[];
6624
6647
  } | undefined;
6625
6648
  } | undefined;
6626
- id: `door_${string}`;
6649
+ id: `window_${string}`;
6627
6650
  material?: {
6628
6651
  id?: string | undefined;
6629
6652
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
@@ -6767,14 +6790,12 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
6767
6790
  verticalAnchor?: "floor" | "wall" | undefined;
6768
6791
  floorThresholdVersion: 0 | 1;
6769
6792
  wallId?: string | undefined;
6793
+ dormerId?: string | undefined;
6794
+ dormerFace?: "back" | "front" | "left" | "right" | undefined;
6770
6795
  roofSegmentId?: string | undefined;
6771
6796
  roofFace?: "back" | "front" | "left" | "right" | undefined;
6772
6797
  width: number;
6773
6798
  height: number;
6774
- sidelightLeft?: number | undefined;
6775
- sidelightRight?: number | undefined;
6776
- transomHeight?: number | undefined;
6777
- slidingStyle?: "bypass" | "patio" | undefined;
6778
6799
  mark?: string | undefined;
6779
6800
  constructionType: "framed" | "masonry";
6780
6801
  dimensionReference: "finish-opening" | "masonry-opening" | "nominal" | "rough-opening";
@@ -6784,49 +6805,52 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
6784
6805
  masonryOpeningHeight?: number | undefined;
6785
6806
  finishOpeningWidth?: number | undefined;
6786
6807
  finishOpeningHeight?: number | undefined;
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;
6808
+ openingKind: "opening" | "window";
6809
+ windowType: "awning" | "bay" | "bow" | "casement" | "double-hung" | "fixed" | "hopper" | "louvered" | "single-hung" | "sliding" | "tilt-turn";
6790
6810
  operationState: number;
6791
- slideDirection: "left" | "right";
6792
- trackStyle: "none" | "overhead" | "pocket" | "visible";
6793
- garagePanelCount: number;
6794
- openingKind: "door" | "opening";
6811
+ openingDirection?: "inward" | "outward" | undefined;
6812
+ tiltTurnMode?: "tilt" | "turn" | undefined;
6813
+ awningDirection: "down" | "up";
6814
+ casementStyle: "french" | "single";
6815
+ hingesSide: "left" | "right";
6795
6816
  openingShape: "arch" | "rectangle" | "rounded";
6796
6817
  openingRadiusMode: "all" | "individual";
6797
- openingTopRadii: [number, number];
6818
+ openingCornerRadii: [number, number, number, number];
6798
6819
  cornerRadius: number;
6799
6820
  archHeight: number;
6800
6821
  openingRevealRadius: number;
6801
6822
  frameThickness: number;
6802
6823
  frameDepth?: number | undefined;
6803
- threshold: boolean;
6804
- thresholdHeight: number;
6824
+ windowHandle?: boolean | undefined;
6825
+ sashGrid?: boolean | undefined;
6826
+ columnRatios: number[];
6827
+ rowRatios: number[];
6828
+ columnDividerThickness: number;
6829
+ rowDividerThickness: number;
6830
+ corner?: {
6831
+ end: "end" | "start";
6832
+ partnerId: string;
6833
+ post: "none" | "post";
6834
+ } | undefined;
6835
+ sill: boolean;
6836
+ sillDepth: number;
6837
+ sillThickness: number;
6838
+ sillOverhang?: number | undefined;
6839
+ sillInterior?: boolean | undefined;
6840
+ sillInteriorDepth?: number | undefined;
6841
+ sillInteriorThickness?: number | undefined;
6842
+ sillInteriorOverhang?: number | undefined;
6843
+ shutters?: "board-batten" | "louvered" | "none" | "panel" | undefined;
6844
+ shutterWidth?: number | undefined;
6845
+ shutterOpen?: number | undefined;
6846
+ shutterSides?: "both" | "left" | "right" | undefined;
6847
+ rollerShutter?: "box" | "concealed" | "none" | undefined;
6848
+ rollerShutterBoxHeight?: number | undefined;
6849
+ rollerShutterOpen?: number | undefined;
6805
6850
  casingFaceA?: boolean | undefined;
6806
6851
  casingFaceB?: boolean | undefined;
6807
6852
  casingWidth?: number | undefined;
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
+ type: "window";
6830
6854
  } | {
6831
6855
  object: "node";
6832
6856
  name?: string | undefined;
@@ -6851,30 +6875,11 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
6851
6875
  fromIds: string[];
6852
6876
  } | undefined;
6853
6877
  } | 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;
6878
+ id: `column_${string}`;
6879
+ children: string[];
6880
+ position: [number, number, number];
6881
+ rotation: number;
6882
+ supportSlabId?: string | undefined;
6878
6883
  source?: {
6879
6884
  kind: "script";
6880
6885
  meta?: {
@@ -6989,73 +6994,104 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
6989
6994
  floorPlan: string;
6990
6995
  } | undefined;
6991
6996
  } | undefined;
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";
6997
+ style: "cluster" | "dravidian-carved" | "faceted" | "fluted" | "lathe-turned" | "plain";
6998
+ crossSection: "octagonal" | "rectangular" | "round" | "sixteen-sided" | "square";
6999
+ height: number;
7000
+ radius: number;
7001
+ width: number;
7002
+ depth: number;
7003
+ edgeSoftness: number;
7004
+ baseHeight: number;
7005
+ capitalHeight: number;
7006
+ shaftProfile: "baluster" | "bulged" | "hourglass" | "straight" | "tapered";
7007
+ shaftTaper: number;
7008
+ shaftBulge: number;
7009
+ shaftStartScale: number;
7010
+ shaftEndScale: number;
7011
+ shaftSegmentCount: number;
7012
+ shaftTwistStep: number;
7013
+ shaftCornerRadius: number;
7014
+ shaftDetail: "fluted" | "lathe-turned" | "none" | "panelled" | "spiral";
7015
+ baseStyle: "lotus" | "none" | "panelled-pedestal" | "ribbed-lotus" | "round-rings" | "simple-square" | "square-plinth" | "stepped-square";
7016
+ baseWidthScale: number;
7017
+ baseDepthScale: number;
7018
+ baseTierCount: number;
7019
+ baseStepSpread: number;
7020
+ basePlinthHeightRatio: number;
7021
+ baseRoundBandScale: number;
7022
+ baseNeckScale: number;
7023
+ baseRoundBandCount: number;
7024
+ baseRibCount: number;
7025
+ baseCarvingLevel: number;
7026
+ basePanelInset: number;
7027
+ capitalStyle: "corinthian-leaf" | "doric" | "ionic-volute" | "leaf-carved" | "none" | "rounded" | "simple" | "simple-slab" | "south-indian-bracket" | "stepped" | "volute" | "wood-bracket";
7028
+ capitalWidthScale: number;
7029
+ capitalDepthScale: number;
7030
+ capitalTierCount: number;
7031
+ capitalStepSpread: number;
7032
+ capitalBandCount: number;
7033
+ voluteSize: number;
7034
+ voluteCount: number;
7035
+ leafCount: number;
7036
+ leafRows: number;
7037
+ bracketDepth: number;
7038
+ bracketTierCount: number;
7039
+ pendantCount: number;
7040
+ capitalCarvingLevel: number;
7041
+ ringCount: number;
7042
+ ringPlacement: "bottom" | "ends" | "even" | "top";
7043
+ ringThickness: number;
7044
+ ringSpread: number;
7045
+ fluteCount: number;
7046
+ fluteDepth: number;
7047
+ fluteWidth: number;
7048
+ spiralTwist: number;
7049
+ spiralRibCount: number;
7050
+ panelCount: number;
7051
+ panelInsetDepth: number;
7052
+ panelShape: "arched" | "diamond" | "rectangle";
7053
+ latheRingCount: number;
7054
+ latheRingSpacing: "bottom" | "ends" | "even" | "top";
7055
+ carvingLevel: number;
7056
+ carvingPlacement: "all" | "base" | "capital" | "shaft";
7057
+ lowerBandEnabled: boolean;
7058
+ lowerBandHeight: number;
7059
+ lowerBandCarvingLevel: number;
7060
+ dentilCount: number;
7061
+ beadCount: number;
7062
+ supportStyle: "a-frame" | "box-frame" | "k-brace" | "portal-frame" | "single-strut" | "trestle" | "tripod" | "v-frame" | "vertical" | "x-brace" | "y-frame";
7063
+ braceWidth: number;
7064
+ braceDepth: number;
7065
+ braceBottomSpread: number;
7066
+ braceTopSpread: number;
7067
+ bracePlateEnabled: boolean;
7068
+ role?: "ornament" | "post" | undefined;
7069
+ postBase?: "none" | "pier" | "post-base" | undefined;
7070
+ material?: {
7071
+ id?: string | undefined;
7072
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
7073
+ properties?: {
7074
+ color: string;
7075
+ roughness: number;
7076
+ metalness: number;
7077
+ opacity: number;
7078
+ transparent: boolean;
7079
+ side: "back" | "double" | "front";
7080
+ } | undefined;
7081
+ texture?: {
7082
+ url: string;
7083
+ repeat?: [number, number] | undefined;
7084
+ scale?: number | undefined;
7085
+ offset?: [number, number] | undefined;
7086
+ normalMap?: string | undefined;
7087
+ normalScale?: number | undefined;
7088
+ bumpMap?: string | undefined;
7089
+ bumpScale?: number | undefined;
7090
+ } | undefined;
7091
+ } | undefined;
7092
+ materialPreset?: string | undefined;
7093
+ slots?: Record<string, string> | undefined;
7094
+ type: "column";
7059
7095
  } | {
7060
7096
  object: "node";
7061
7097
  name?: string | undefined;
@@ -8616,66 +8652,6 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
8616
8652
  topElevation?: number | undefined;
8617
8653
  supportSlabId?: string | undefined;
8618
8654
  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";
8679
8655
  } | {
8680
8656
  object: "node";
8681
8657
  name?: string | undefined;
@@ -9179,119 +9155,27 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
9179
9155
  step?: number | undefined;
9180
9156
  finish: string;
9181
9157
  }[] | undefined;
9182
- floorEdgeFinish?: string | undefined;
9183
- wallMaterial?: string | undefined;
9184
- wallOverrides?: {
9185
- wallId: string;
9186
- face: "a" | "b";
9187
- finish: string;
9188
- }[] | undefined;
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>;
9158
+ floorEdgeFinish?: string | undefined;
9159
+ wallMaterial?: string | undefined;
9160
+ wallOverrides?: {
9161
+ wallId: string;
9162
+ face: "a" | "b";
9163
+ finish: string;
9290
9164
  }[] | undefined;
9291
- boundary?: "auto" | undefined;
9292
- zoneId?: string | undefined;
9293
- autoFromWalls: boolean;
9294
- type: "ceiling";
9165
+ hasFloor?: false | undefined;
9166
+ hasCeiling?: false | undefined;
9167
+ spaceRole: "generic" | "room";
9168
+ roomNumber: string;
9169
+ enclosureStatus: "auto" | "enclosed" | "open";
9170
+ floorFinish: string;
9171
+ wallFinish: string;
9172
+ ceilingFinish: string;
9173
+ ceilingHeight: number;
9174
+ occupancy: string;
9175
+ clearDimensionPolicy: "finish-faces" | "inside-faces" | "none";
9176
+ color: string;
9177
+ metadata: Record<string, unknown>;
9178
+ type: "zone";
9295
9179
  } | {
9296
9180
  object: "node";
9297
9181
  name?: string | undefined;
@@ -9897,6 +9781,53 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
9897
9781
  system: "return" | "supply";
9898
9782
  slots?: Record<string, string> | undefined;
9899
9783
  type: "duct-segment";
9784
+ } | {
9785
+ object: "node";
9786
+ name?: string | undefined;
9787
+ parentId: string | null;
9788
+ visible: boolean;
9789
+ camera?: {
9790
+ position: [number, number, number];
9791
+ target: [number, number, number];
9792
+ mode: "orthographic" | "perspective";
9793
+ fov?: number | undefined;
9794
+ zoom?: number | undefined;
9795
+ } | undefined;
9796
+ metadata: Record<string, unknown>;
9797
+ provenance?: {
9798
+ refs: {
9799
+ ns?: string | undefined;
9800
+ id: string;
9801
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
9802
+ }[];
9803
+ lineage?: {
9804
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
9805
+ fromIds: string[];
9806
+ } | undefined;
9807
+ } | undefined;
9808
+ id: `duct-fitting_${string}`;
9809
+ position: [number, number, number];
9810
+ rotation: [number, number, number];
9811
+ fittingType: "access-panel" | "coupling" | "cross" | "damper" | "elbow" | "end-cap" | "reducer" | "tee" | "transition";
9812
+ shape: "oval" | "rect" | "round";
9813
+ inletShape?: "oval" | "rect" | "round" | undefined;
9814
+ outletShape?: "oval" | "rect" | "round" | undefined;
9815
+ width: number;
9816
+ height: number;
9817
+ shape2: "oval" | "rect" | "round";
9818
+ width2: number;
9819
+ height2: number;
9820
+ angle: number;
9821
+ branchAngle: number;
9822
+ diameter: number;
9823
+ diameter2: number;
9824
+ ductMaterial: "duct-board" | "flex" | "sheet-metal";
9825
+ system: "return" | "supply";
9826
+ damperAngle: number;
9827
+ panelWidth: number;
9828
+ panelHeight: number;
9829
+ slots?: Record<string, string> | undefined;
9830
+ type: "duct-fitting";
9900
9831
  } | {
9901
9832
  object: "node";
9902
9833
  name?: string | undefined;
@@ -9934,6 +9865,47 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
9934
9865
  collarWidth: number;
9935
9866
  collarHeight: number;
9936
9867
  type: "duct-terminal";
9868
+ } | {
9869
+ object: "node";
9870
+ name?: string | undefined;
9871
+ parentId: string | null;
9872
+ visible: boolean;
9873
+ camera?: {
9874
+ position: [number, number, number];
9875
+ target: [number, number, number];
9876
+ mode: "orthographic" | "perspective";
9877
+ fov?: number | undefined;
9878
+ zoom?: number | undefined;
9879
+ } | undefined;
9880
+ metadata: Record<string, unknown>;
9881
+ provenance?: {
9882
+ refs: {
9883
+ ns?: string | undefined;
9884
+ id: string;
9885
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
9886
+ }[];
9887
+ lineage?: {
9888
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
9889
+ fromIds: string[];
9890
+ } | undefined;
9891
+ } | undefined;
9892
+ id: `hvac-equipment_${string}`;
9893
+ position: [number, number, number];
9894
+ rotation: number;
9895
+ supportSlabId?: string | undefined;
9896
+ equipmentType: "air-handler" | "condenser" | "furnace";
9897
+ width: number;
9898
+ depth: number;
9899
+ height: number;
9900
+ supplyShape: "oval" | "rect" | "round";
9901
+ returnShape: "oval" | "rect" | "round";
9902
+ supplyDiameter: number;
9903
+ returnDiameter: number;
9904
+ supplyWidth: number;
9905
+ supplyHeight: number;
9906
+ returnWidth: number;
9907
+ returnHeight: number;
9908
+ type: "hvac-equipment";
9937
9909
  } | {
9938
9910
  object: "node";
9939
9911
  name?: string | undefined;
@@ -10062,13 +10034,17 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
10062
10034
  fromIds: string[];
10063
10035
  } | undefined;
10064
10036
  } | undefined;
10065
- id: `pipe-trap_${string}`;
10037
+ id: `pipe-fitting_${string}`;
10066
10038
  position: [number, number, number];
10067
- rotation: number;
10039
+ rotation: [number, number, number];
10040
+ fittingType: "cleanout" | "coupling" | "cross" | "elbow" | "end-cap" | "reducer" | "sanitary-tee" | "wye";
10041
+ angle: number;
10068
10042
  diameter: number;
10043
+ diameter2: number;
10044
+ cleanoutStyle: "end" | "inline";
10069
10045
  pipeMaterial: "abs" | "cast-iron" | "pvc";
10070
- armLengthM: number;
10071
- type: "pipe-trap";
10046
+ system: "vent" | "waste";
10047
+ type: "pipe-fitting";
10072
10048
  } | {
10073
10049
  object: "node";
10074
10050
  name?: string | undefined;
@@ -10093,12 +10069,13 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
10093
10069
  fromIds: string[];
10094
10070
  } | undefined;
10095
10071
  } | undefined;
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";
10072
+ id: `pipe-trap_${string}`;
10073
+ position: [number, number, number];
10074
+ rotation: number;
10075
+ diameter: number;
10076
+ pipeMaterial: "abs" | "cast-iron" | "pvc";
10077
+ armLengthM: number;
10078
+ type: "pipe-trap";
10102
10079
  } | {
10103
10080
  object: "node";
10104
10081
  name?: string | undefined;
@@ -10123,54 +10100,12 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
10123
10100
  fromIds: string[];
10124
10101
  } | undefined;
10125
10102
  } | undefined;
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";
10103
+ id: `level_${string}`;
10104
+ 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}`)[];
10105
+ level: number;
10106
+ baseElevation: number;
10107
+ height?: number | undefined;
10108
+ type: "level";
10174
10109
  } | {
10175
10110
  object: "node";
10176
10111
  parentId: string | null;
@@ -10636,6 +10571,71 @@ export declare function buildLevelDuplicateCreateOps({ nodes, level, levels, pre
10636
10571
  topFinishHeight: number;
10637
10572
  topFinishDepth: number;
10638
10573
  type: "cabinet-module";
10574
+ } | {
10575
+ object: "node";
10576
+ name?: string | undefined;
10577
+ parentId: string | null;
10578
+ visible: boolean;
10579
+ camera?: {
10580
+ position: [number, number, number];
10581
+ target: [number, number, number];
10582
+ mode: "orthographic" | "perspective";
10583
+ fov?: number | undefined;
10584
+ zoom?: number | undefined;
10585
+ } | undefined;
10586
+ metadata: Record<string, unknown>;
10587
+ provenance?: {
10588
+ refs: {
10589
+ ns?: string | undefined;
10590
+ id: string;
10591
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
10592
+ }[];
10593
+ lineage?: {
10594
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
10595
+ fromIds: string[];
10596
+ } | undefined;
10597
+ } | undefined;
10598
+ id: `bvent_${string}`;
10599
+ material?: {
10600
+ id?: string | undefined;
10601
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
10602
+ properties?: {
10603
+ color: string;
10604
+ roughness: number;
10605
+ metalness: number;
10606
+ opacity: number;
10607
+ transparent: boolean;
10608
+ side: "back" | "double" | "front";
10609
+ } | undefined;
10610
+ texture?: {
10611
+ url: string;
10612
+ repeat?: [number, number] | undefined;
10613
+ scale?: number | undefined;
10614
+ offset?: [number, number] | undefined;
10615
+ normalMap?: string | undefined;
10616
+ normalScale?: number | undefined;
10617
+ bumpMap?: string | undefined;
10618
+ bumpScale?: number | undefined;
10619
+ } | undefined;
10620
+ } | undefined;
10621
+ slots?: Record<string, string> | undefined;
10622
+ materialPreset: string;
10623
+ roofSegmentId?: string | undefined;
10624
+ position: [number, number, number];
10625
+ rotation: number;
10626
+ width: number;
10627
+ depth: number;
10628
+ height: number;
10629
+ hoodOverhang: number;
10630
+ topTaper: number;
10631
+ capHeight: number;
10632
+ capGap: number;
10633
+ domeCurvature: number;
10634
+ baseInset: number;
10635
+ baseHeight: number;
10636
+ cornerBevel: number;
10637
+ style: "box" | "cap" | "dome";
10638
+ type: "box-vent";
10639
10639
  } | {
10640
10640
  object: "node";
10641
10641
  name?: string | undefined;