@pascal-app/core 1.1.0 → 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 (133) hide show
  1. package/dist/agent-operations/__fixtures__/cases.d.ts +3 -2
  2. package/dist/agent-operations/__fixtures__/cases.d.ts.map +1 -1
  3. package/dist/agent-operations/__fixtures__/place-items-cases.d.ts.map +1 -1
  4. package/dist/agent-operations/__fixtures__/place-items-cases.js +28 -0
  5. package/dist/agent-operations/__fixtures__/roof-bearing-cases.d.ts +2618 -2618
  6. package/dist/agent-operations/asset-catalog.d.ts +21 -11
  7. package/dist/agent-operations/asset-catalog.d.ts.map +1 -1
  8. package/dist/agent-operations/asset-catalog.js +28 -10
  9. package/dist/agent-operations/asset-views.d.ts +8 -3
  10. package/dist/agent-operations/asset-views.d.ts.map +1 -1
  11. package/dist/agent-operations/asset-views.js +19 -3
  12. package/dist/agent-operations/batch.d.ts +4 -2
  13. package/dist/agent-operations/batch.d.ts.map +1 -1
  14. package/dist/agent-operations/batch.js +9 -6
  15. package/dist/agent-operations/catalog-asset.d.ts +15 -0
  16. package/dist/agent-operations/catalog-asset.d.ts.map +1 -0
  17. package/dist/agent-operations/catalog-asset.js +4 -0
  18. package/dist/agent-operations/circulation-spaces.d.ts +585 -585
  19. package/dist/agent-operations/design-brief.d.ts.map +1 -1
  20. package/dist/agent-operations/design-brief.js +2 -0
  21. package/dist/agent-operations/furnish-room.d.ts.map +1 -1
  22. package/dist/agent-operations/furnish-room.js +2 -1
  23. package/dist/agent-operations/index.d.ts +5716 -7
  24. package/dist/agent-operations/index.d.ts.map +1 -1
  25. package/dist/agent-operations/index.js +17 -3
  26. package/dist/agent-operations/level-reads.d.ts.map +1 -1
  27. package/dist/agent-operations/level-reads.js +4 -1
  28. package/dist/agent-operations/place-in-room.d.ts.map +1 -1
  29. package/dist/agent-operations/place-in-room.js +2 -1
  30. package/dist/agent-operations/place-items.d.ts.map +1 -1
  31. package/dist/agent-operations/place-items.js +2 -1
  32. package/dist/agent-operations/scene-queries.d.ts +3818 -3818
  33. package/dist/agent-operations/scene-view.d.ts.map +1 -1
  34. package/dist/agent-operations/scene-view.js +38 -13
  35. package/dist/agent-operations/search-assets.d.ts.map +1 -1
  36. package/dist/agent-operations/search-assets.js +6 -0
  37. package/dist/agent-operations/types.d.ts +10 -2
  38. package/dist/agent-operations/types.d.ts.map +1 -1
  39. package/dist/agent-operations/usage-checks.js +18 -3
  40. package/dist/agent-operations/verify-scene.d.ts +7 -3
  41. package/dist/agent-operations/verify-scene.d.ts.map +1 -1
  42. package/dist/agent-operations/verify-scene.js +15 -7
  43. package/dist/agent-tools/assets.js +1 -1
  44. package/dist/building/__fixtures__/wall-opening-cases.d.ts +30 -30
  45. package/dist/building/level-duplication.d.ts +3409 -3409
  46. package/dist/building/level-duplication.d.ts.map +1 -1
  47. package/dist/building/level-duplication.js +3 -1
  48. package/dist/building/wall-openings.d.ts +75 -75
  49. package/dist/commands/structure/shared.d.ts +3407 -3407
  50. package/dist/commands/structure/zone-wall-merge.d.ts +652 -652
  51. package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts +3818 -3818
  52. package/dist/index.d.ts +2 -0
  53. package/dist/index.d.ts.map +1 -1
  54. package/dist/index.js +2 -0
  55. package/dist/lib/__fixtures__/mezzanine.d.ts +2003 -2003
  56. package/dist/lib/absorb-wall-separators.d.ts +1032 -1032
  57. package/dist/lib/asset-storage.d.ts.map +1 -1
  58. package/dist/lib/asset-storage.js +3 -0
  59. package/dist/lib/floor-foundation-datum.d.ts.map +1 -1
  60. package/dist/lib/floor-foundation-datum.js +5 -1
  61. package/dist/lib/floorplan/context.d.ts +95 -0
  62. package/dist/lib/floorplan/context.d.ts.map +1 -0
  63. package/dist/lib/floorplan/context.js +155 -0
  64. package/dist/lib/floorplan/index.d.ts +6 -0
  65. package/dist/lib/floorplan/index.d.ts.map +1 -0
  66. package/dist/lib/floorplan/index.js +5 -0
  67. package/dist/lib/floorplan/marks.d.ts +71 -0
  68. package/dist/lib/floorplan/marks.d.ts.map +1 -0
  69. package/dist/lib/floorplan/marks.js +157 -0
  70. package/dist/lib/floorplan/plan-math.d.ts +18 -0
  71. package/dist/lib/floorplan/plan-math.d.ts.map +1 -0
  72. package/dist/lib/floorplan/plan-math.js +82 -0
  73. package/dist/lib/floorplan/svg-paths.d.ts +17 -0
  74. package/dist/lib/floorplan/svg-paths.d.ts.map +1 -0
  75. package/dist/lib/floorplan/svg-paths.js +92 -0
  76. package/dist/lib/floorplan/wall-affordances.d.ts +31 -0
  77. package/dist/lib/floorplan/wall-affordances.d.ts.map +1 -0
  78. package/dist/lib/floorplan/wall-affordances.js +24 -0
  79. package/dist/lib/steps.d.ts +8 -0
  80. package/dist/lib/steps.d.ts.map +1 -0
  81. package/dist/lib/steps.js +7 -0
  82. package/dist/registry/__fixtures__/roof-planes.d.ts +69 -0
  83. package/dist/registry/__fixtures__/roof-planes.d.ts.map +1 -0
  84. package/dist/registry/__fixtures__/roof-planes.js +59 -0
  85. package/dist/registry/index.d.ts +2 -1
  86. package/dist/registry/index.d.ts.map +1 -1
  87. package/dist/registry/index.js +1 -0
  88. package/dist/registry/roofs.d.ts +34 -0
  89. package/dist/registry/roofs.d.ts.map +1 -0
  90. package/dist/registry/roofs.js +61 -0
  91. package/dist/registry/types.d.ts +30 -0
  92. package/dist/registry/types.d.ts.map +1 -1
  93. package/dist/registry/validate-relations.d.ts +5 -1
  94. package/dist/registry/validate-relations.d.ts.map +1 -1
  95. package/dist/registry/validate-relations.js +6 -2
  96. package/dist/schema/asset-url.d.ts +8 -0
  97. package/dist/schema/asset-url.d.ts.map +1 -1
  98. package/dist/schema/asset-url.js +17 -0
  99. package/dist/schema/nodes/roof.d.ts +1 -1
  100. package/dist/schema/nodes/roof.d.ts.map +1 -1
  101. package/dist/schema/nodes/roof.js +13 -8
  102. package/dist/schema/types.d.ts +1 -1
  103. package/dist/services/roof-level.d.ts.map +1 -1
  104. package/dist/services/roof-level.js +12 -2
  105. package/dist/services/roof-move.d.ts +4 -2
  106. package/dist/services/roof-move.d.ts.map +1 -1
  107. package/dist/services/roof-move.js +21 -9
  108. package/dist/spatial/usage-field/findings.d.ts +10 -1
  109. package/dist/spatial/usage-field/findings.d.ts.map +1 -1
  110. package/dist/spatial/usage-field/findings.js +56 -12
  111. package/dist/spatial/usage-field/measure.d.ts +3 -1
  112. package/dist/spatial/usage-field/measure.d.ts.map +1 -1
  113. package/dist/spatial/usage-field/measure.js +7 -2
  114. package/dist/spatial/usage-field/path.d.ts.map +1 -1
  115. package/dist/spatial/usage-field/path.js +28 -18
  116. package/dist/store/actions/node-actions.d.ts +2380 -2380
  117. package/dist/store/scene-annotations.d.ts +1279 -1279
  118. package/dist/systems/document-reconcile.d.ts.map +1 -1
  119. package/dist/systems/document-reconcile.js +1 -2
  120. package/dist/systems/roof/roof-elevation.d.ts +11 -6
  121. package/dist/systems/roof/roof-elevation.d.ts.map +1 -1
  122. package/dist/systems/roof/roof-elevation.js +24 -11
  123. package/dist/systems/slab/__fixtures__/floor-step.d.ts +2381 -2381
  124. package/dist/systems/slab/__fixtures__/raised-room.d.ts +3818 -3818
  125. package/dist/systems/stair/stair-opening-preview.d.ts +900 -900
  126. package/dist/utils/ensure-scene-openings.d.ts +4815 -4815
  127. package/dist/utils/floor-plate-migration.d.ts +1032 -1032
  128. package/dist/utils/owned-floor-opening-migration.d.ts +1032 -1032
  129. package/dist/utils/reconcile-structure-on-load.d.ts +2380 -2380
  130. package/dist/utils/scene-bounds.d.ts +32 -0
  131. package/dist/utils/scene-bounds.d.ts.map +1 -0
  132. package/dist/utils/scene-bounds.js +201 -0
  133. package/package.json +1 -1
@@ -26,7 +26,7 @@ export declare function wallAttachments(nodes: StructureNodes, wall: WallNode):
26
26
  fromIds: string[];
27
27
  } | undefined;
28
28
  } | undefined;
29
- id: `elevator_${string}`;
29
+ id: `bvent_${string}`;
30
30
  material?: {
31
31
  id?: string | undefined;
32
32
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
@@ -49,31 +49,24 @@ export declare function wallAttachments(nodes: StructureNodes, wall: WallNode):
49
49
  bumpScale?: number | undefined;
50
50
  } | undefined;
51
51
  } | undefined;
52
- materialPreset?: string | undefined;
53
52
  slots?: Record<string, string> | undefined;
53
+ materialPreset: string;
54
+ roofSegmentId?: string | undefined;
54
55
  position: [number, number, number];
55
56
  rotation: number;
56
57
  width: number;
57
58
  depth: number;
58
- shaftWidth?: number | undefined;
59
- shaftDepth?: number | undefined;
60
- shaftWallThickness: number;
61
- shaftStyle: "glass" | "solid";
62
- cabHeight: number;
63
- doorWidth: number;
64
- doorHeight: number;
65
- doorStyle: "center-opening" | "single-left" | "single-right";
66
- doorPanelStyle: "glass-frame" | "segmented-panel" | "solid-panel";
67
- fromLevelId: string | null;
68
- toLevelId: string | null;
69
- servedLevelIds?: string[] | undefined;
70
- disabledLevelIds: string[];
71
- serviceOnlyLevelIds: string[];
72
- defaultLevelId: string | null;
73
- speed: number;
74
- doorDurationMs: number;
75
- dwellMs: number;
76
- type: "elevator";
59
+ height: number;
60
+ hoodOverhang: number;
61
+ topTaper: number;
62
+ capHeight: number;
63
+ capGap: number;
64
+ domeCurvature: number;
65
+ baseInset: number;
66
+ baseHeight: number;
67
+ cornerBevel: number;
68
+ style: "box" | "cap" | "dome";
69
+ type: "box-vent";
77
70
  } | {
78
71
  object: "node";
79
72
  name?: string | undefined;
@@ -98,21 +91,11 @@ export declare function wallAttachments(nodes: StructureNodes, wall: WallNode):
98
91
  fromIds: string[];
99
92
  } | undefined;
100
93
  } | undefined;
101
- type: "item";
102
- id: `item_${string}`;
103
- position: [number, number, number];
104
- rotation: [number, number, number];
105
- scale: [number, number, number];
106
- side?: "back" | "front" | undefined;
94
+ id: `column_${string}`;
107
95
  children: string[];
108
- wallId?: string | undefined;
109
- wallT?: number | undefined;
110
- roofSegmentId?: string | undefined;
111
- roofFace?: "back" | "front" | "left" | "right" | undefined;
112
- blockFaceId?: string | undefined;
96
+ position: [number, number, number];
97
+ rotation: number;
113
98
  supportSlabId?: string | undefined;
114
- collectionIds?: `collection_${string}`[] | undefined;
115
- slots?: Record<string, string> | undefined;
116
99
  source?: {
117
100
  kind: "script";
118
101
  meta?: {
@@ -227,76 +210,104 @@ export declare function wallAttachments(nodes: StructureNodes, wall: WallNode):
227
210
  floorPlan: string;
228
211
  } | undefined;
229
212
  } | undefined;
230
- asset: {
231
- id: string;
232
- category: string;
233
- name: string;
234
- thumbnail: string;
235
- floorPlanUrl?: string | undefined;
236
- source: "community" | "library" | "mine";
237
- isDraft?: boolean | undefined;
238
- src: string;
239
- dimensions: [number, number, number];
240
- attachTo?: "ceiling" | "wall" | "wall-side" | undefined;
241
- recessed?: boolean | undefined;
242
- tags?: string[] | undefined;
243
- functionTags?: string[] | undefined;
244
- offset: [number, number, number];
245
- rotation: [number, number, number];
246
- scale: [number, number, number];
247
- surface?: {
248
- height: number;
213
+ style: "cluster" | "dravidian-carved" | "faceted" | "fluted" | "lathe-turned" | "plain";
214
+ crossSection: "octagonal" | "rectangular" | "round" | "sixteen-sided" | "square";
215
+ height: number;
216
+ radius: number;
217
+ width: number;
218
+ depth: number;
219
+ edgeSoftness: number;
220
+ baseHeight: number;
221
+ capitalHeight: number;
222
+ shaftProfile: "baluster" | "bulged" | "hourglass" | "straight" | "tapered";
223
+ shaftTaper: number;
224
+ shaftBulge: number;
225
+ shaftStartScale: number;
226
+ shaftEndScale: number;
227
+ shaftSegmentCount: number;
228
+ shaftTwistStep: number;
229
+ shaftCornerRadius: number;
230
+ shaftDetail: "fluted" | "lathe-turned" | "none" | "panelled" | "spiral";
231
+ baseStyle: "lotus" | "none" | "panelled-pedestal" | "ribbed-lotus" | "round-rings" | "simple-square" | "square-plinth" | "stepped-square";
232
+ baseWidthScale: number;
233
+ baseDepthScale: number;
234
+ baseTierCount: number;
235
+ baseStepSpread: number;
236
+ basePlinthHeightRatio: number;
237
+ baseRoundBandScale: number;
238
+ baseNeckScale: number;
239
+ baseRoundBandCount: number;
240
+ baseRibCount: number;
241
+ baseCarvingLevel: number;
242
+ basePanelInset: number;
243
+ capitalStyle: "corinthian-leaf" | "doric" | "ionic-volute" | "leaf-carved" | "none" | "rounded" | "simple" | "simple-slab" | "south-indian-bracket" | "stepped" | "volute" | "wood-bracket";
244
+ capitalWidthScale: number;
245
+ capitalDepthScale: number;
246
+ capitalTierCount: number;
247
+ capitalStepSpread: number;
248
+ capitalBandCount: number;
249
+ voluteSize: number;
250
+ voluteCount: number;
251
+ leafCount: number;
252
+ leafRows: number;
253
+ bracketDepth: number;
254
+ bracketTierCount: number;
255
+ pendantCount: number;
256
+ capitalCarvingLevel: number;
257
+ ringCount: number;
258
+ ringPlacement: "bottom" | "ends" | "even" | "top";
259
+ ringThickness: number;
260
+ ringSpread: number;
261
+ fluteCount: number;
262
+ fluteDepth: number;
263
+ fluteWidth: number;
264
+ spiralTwist: number;
265
+ spiralRibCount: number;
266
+ panelCount: number;
267
+ panelInsetDepth: number;
268
+ panelShape: "arched" | "diamond" | "rectangle";
269
+ latheRingCount: number;
270
+ latheRingSpacing: "bottom" | "ends" | "even" | "top";
271
+ carvingLevel: number;
272
+ carvingPlacement: "all" | "base" | "capital" | "shaft";
273
+ lowerBandEnabled: boolean;
274
+ lowerBandHeight: number;
275
+ lowerBandCarvingLevel: number;
276
+ dentilCount: number;
277
+ beadCount: number;
278
+ supportStyle: "a-frame" | "box-frame" | "k-brace" | "portal-frame" | "single-strut" | "trestle" | "tripod" | "v-frame" | "vertical" | "x-brace" | "y-frame";
279
+ braceWidth: number;
280
+ braceDepth: number;
281
+ braceBottomSpread: number;
282
+ braceTopSpread: number;
283
+ bracePlateEnabled: boolean;
284
+ role?: "ornament" | "post" | undefined;
285
+ postBase?: "none" | "pier" | "post-base" | undefined;
286
+ material?: {
287
+ id?: string | undefined;
288
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
289
+ properties?: {
290
+ color: string;
291
+ roughness: number;
292
+ metalness: number;
293
+ opacity: number;
294
+ transparent: boolean;
295
+ side: "back" | "double" | "front";
249
296
  } | undefined;
250
- interactive?: {
251
- controls: ({
252
- kind: "toggle";
253
- label?: string | undefined;
254
- default?: boolean | undefined;
255
- } | {
256
- kind: "slider";
257
- label: string;
258
- min: number;
259
- max: number;
260
- step: number;
261
- unit?: string | undefined;
262
- displayMode: "dial" | "slider" | "stepper";
263
- default?: number | undefined;
264
- } | {
265
- kind: "temperature";
266
- label: string;
267
- min: number;
268
- max: number;
269
- unit: "C" | "F";
270
- default?: number | undefined;
271
- })[];
272
- effects: ({
273
- kind: "animation";
274
- mode?: "ambient" | "open-close" | undefined;
275
- control?: number | undefined;
276
- clips: {
277
- on?: string | undefined;
278
- off?: string | undefined;
279
- loop?: string | undefined;
280
- };
281
- } | {
282
- kind: "light";
283
- color: string;
284
- intensityRange: [number, number];
285
- distance?: number | undefined;
286
- offset: [number, number, number];
287
- spot?: {
288
- direction: [number, number, number];
289
- angle: number;
290
- softness: number;
291
- } | undefined;
292
- shadows?: boolean | undefined;
293
- glow?: {
294
- size: number;
295
- strength: number;
296
- } | undefined;
297
- })[];
297
+ texture?: {
298
+ url: string;
299
+ repeat?: [number, number] | undefined;
300
+ scale?: number | undefined;
301
+ offset?: [number, number] | undefined;
302
+ normalMap?: string | undefined;
303
+ normalScale?: number | undefined;
304
+ bumpMap?: string | undefined;
305
+ bumpScale?: number | undefined;
298
306
  } | undefined;
299
- };
307
+ } | undefined;
308
+ materialPreset?: string | undefined;
309
+ slots?: Record<string, string> | undefined;
310
+ type: "column";
300
311
  } | {
301
312
  object: "node";
302
313
  name?: string | undefined;
@@ -321,74 +332,70 @@ export declare function wallAttachments(nodes: StructureNodes, wall: WallNode):
321
332
  fromIds: string[];
322
333
  } | undefined;
323
334
  } | undefined;
324
- id: `ceiling_${string}`;
325
- children: (`item_${string}` | `procedural-item_${string}`)[];
326
- material?: {
327
- id?: string | undefined;
328
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
329
- properties?: {
330
- color: string;
331
- roughness: number;
332
- metalness: number;
333
- opacity: number;
334
- transparent: boolean;
335
- side: "back" | "double" | "front";
336
- } | undefined;
337
- texture?: {
338
- url: string;
339
- repeat?: [number, number] | undefined;
340
- scale?: number | undefined;
341
- offset?: [number, number] | undefined;
342
- normalMap?: string | undefined;
343
- normalScale?: number | undefined;
344
- bumpMap?: string | undefined;
345
- bumpScale?: number | undefined;
346
- } | undefined;
347
- } | undefined;
348
- materialPreset?: string | undefined;
349
- slots?: Record<string, string> | undefined;
350
- polygon: [number, number][];
351
- holes: [number, number][][];
352
- holeMetadata: {
353
- source: "elevator" | "floor-opening" | "manual" | "room" | "stair";
354
- openingId?: string | undefined;
355
- stairId?: string | undefined;
356
- elevatorId?: string | undefined;
357
- }[];
358
- openingIds?: string[] | undefined;
359
- height?: number | undefined;
360
- buildUp?: {
361
- presetId?: string | undefined;
362
- finish?: {
363
- kind: "drywall" | "plaster" | "wood-plank";
364
- thickness: number;
365
- name?: string | undefined;
366
- } | undefined;
367
- framing?: {
368
- system: "joists" | "truss-chords";
369
- size: "2x10" | "2x12" | "2x4" | "2x6" | "2x8";
370
- spacing: number;
371
- } | undefined;
372
- decking?: {
373
- kind: "osb" | "plywood";
374
- thickness: number;
375
- name?: string | undefined;
376
- } | undefined;
377
- insulation?: {
378
- kind: "batt" | "blown" | "rigid";
379
- thickness: number;
380
- name?: string | undefined;
335
+ id: `duct-fitting_${string}`;
336
+ position: [number, number, number];
337
+ rotation: [number, number, number];
338
+ fittingType: "access-panel" | "coupling" | "cross" | "damper" | "elbow" | "end-cap" | "reducer" | "tee" | "transition";
339
+ shape: "oval" | "rect" | "round";
340
+ inletShape?: "oval" | "rect" | "round" | undefined;
341
+ outletShape?: "oval" | "rect" | "round" | undefined;
342
+ width: number;
343
+ height: number;
344
+ shape2: "oval" | "rect" | "round";
345
+ width2: number;
346
+ height2: number;
347
+ angle: number;
348
+ branchAngle: number;
349
+ diameter: number;
350
+ diameter2: number;
351
+ ductMaterial: "duct-board" | "flex" | "sheet-metal";
352
+ system: "return" | "supply";
353
+ damperAngle: number;
354
+ panelWidth: number;
355
+ panelHeight: number;
356
+ slots?: Record<string, string> | undefined;
357
+ type: "duct-fitting";
358
+ } | {
359
+ object: "node";
360
+ name?: string | undefined;
361
+ parentId: string | null;
362
+ visible: boolean;
363
+ camera?: {
364
+ position: [number, number, number];
365
+ target: [number, number, number];
366
+ mode: "orthographic" | "perspective";
367
+ fov?: number | undefined;
368
+ zoom?: number | undefined;
369
+ } | undefined;
370
+ metadata: Record<string, unknown>;
371
+ provenance?: {
372
+ refs: {
373
+ ns?: string | undefined;
374
+ id: string;
375
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
376
+ }[];
377
+ lineage?: {
378
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
379
+ fromIds: string[];
381
380
  } | undefined;
382
381
  } | undefined;
383
- regions?: {
384
- id: string;
385
- polygon: [number, number][];
386
- finish: string | Record<string, unknown>;
387
- }[] | undefined;
388
- boundary?: "auto" | undefined;
389
- zoneId?: string | undefined;
390
- autoFromWalls: boolean;
391
- type: "ceiling";
382
+ id: `hvac-equipment_${string}`;
383
+ position: [number, number, number];
384
+ rotation: number;
385
+ supportSlabId?: string | undefined;
386
+ equipmentType: "air-handler" | "condenser" | "furnace";
387
+ width: number;
388
+ depth: number;
389
+ height: number;
390
+ supplyShape: "oval" | "rect" | "round";
391
+ returnShape: "oval" | "rect" | "round";
392
+ supplyDiameter: number;
393
+ returnDiameter: number;
394
+ supplyWidth: number;
395
+ supplyHeight: number;
396
+ returnWidth: number;
397
+ returnHeight: number;
398
+ type: "hvac-equipment";
392
399
  } | {
393
400
  object: "node";
394
401
  name?: string | undefined;
@@ -413,42 +420,17 @@ export declare function wallAttachments(nodes: StructureNodes, wall: WallNode):
413
420
  fromIds: string[];
414
421
  } | undefined;
415
422
  } | undefined;
416
- id: `construction-dimension_${string}`;
417
- anchors: ({
418
- kind: "feature";
419
- reference: {
420
- nodeId: string;
421
- featureId: string;
422
- parameters?: Record<string, string | number | boolean> | undefined;
423
- };
424
- fallback: [number, number, number];
425
- } | [number, number, number])[];
426
- baseline: {
427
- origin: [number, number];
428
- direction: [number, number];
429
- };
430
- chainMode: "continuous" | "point-to-point";
431
- mode: "angular" | "arc-length" | "center-mark" | "chord" | "coordinate" | "diameter" | "linear" | "radius";
432
- featureCount: number;
433
- showCenterMark: boolean;
434
- prefix: string;
435
- suffix: string;
436
- textOverride: string | null;
437
- datumPolicy: "centerline" | "finish-face" | "structural-face" | "wall-face";
438
- terminator: "architectural-tick" | "dot" | "filled-arrow" | "open-arrow";
439
- textPosition: "above" | "centered";
440
- imperialPrecision: "1" | "1/16" | "1/2" | "1/4" | "1/8";
441
- metricNotation: "meters" | "millimeters";
442
- extensionStartGap: number;
443
- extensionOvershoot: number;
444
- drawingType: "floor-plan" | "foundation-plan" | "reflected-ceiling-plan" | "roof-plan" | "site-plan";
445
- drawingOverrides: {
446
- drawingType: "floor-plan" | "foundation-plan" | "reflected-ceiling-plan" | "roof-plan" | "site-plan";
447
- presentation: "controlled" | "omit" | "shown";
448
- suppressedSegmentIndexes: number[];
449
- }[];
450
- controllingDimensionId: `construction-dimension_${string}` | null;
451
- type: "construction-dimension";
423
+ id: `pipe-fitting_${string}`;
424
+ position: [number, number, number];
425
+ rotation: [number, number, number];
426
+ fittingType: "cleanout" | "coupling" | "cross" | "elbow" | "end-cap" | "reducer" | "sanitary-tee" | "wye";
427
+ angle: number;
428
+ diameter: number;
429
+ diameter2: number;
430
+ cleanoutStyle: "end" | "inline";
431
+ pipeMaterial: "abs" | "cast-iron" | "pvc";
432
+ system: "vent" | "waste";
433
+ type: "pipe-fitting";
452
434
  } | {
453
435
  object: "node";
454
436
  name?: string | undefined;
@@ -689,29 +671,20 @@ export declare function wallAttachments(nodes: StructureNodes, wall: WallNode):
689
671
  fromIds: string[];
690
672
  } | undefined;
691
673
  } | undefined;
692
- id: `door_${string}`;
693
- material?: {
694
- id?: string | undefined;
695
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
696
- properties?: {
697
- color: string;
698
- roughness: number;
699
- metalness: number;
700
- opacity: number;
701
- transparent: boolean;
702
- side: "back" | "double" | "front";
703
- } | undefined;
704
- texture?: {
705
- url: string;
706
- repeat?: [number, number] | undefined;
707
- scale?: number | undefined;
708
- offset?: [number, number] | undefined;
709
- normalMap?: string | undefined;
710
- normalScale?: number | undefined;
711
- bumpMap?: string | undefined;
712
- bumpScale?: number | undefined;
713
- } | undefined;
714
- } | undefined;
674
+ type: "item";
675
+ id: `item_${string}`;
676
+ position: [number, number, number];
677
+ rotation: [number, number, number];
678
+ scale: [number, number, number];
679
+ side?: "back" | "front" | undefined;
680
+ children: string[];
681
+ wallId?: string | undefined;
682
+ wallT?: number | undefined;
683
+ roofSegmentId?: string | undefined;
684
+ roofFace?: "back" | "front" | "left" | "right" | undefined;
685
+ blockFaceId?: string | undefined;
686
+ supportSlabId?: string | undefined;
687
+ collectionIds?: `collection_${string}`[] | undefined;
715
688
  slots?: Record<string, string> | undefined;
716
689
  source?: {
717
690
  kind: "script";
@@ -827,72 +800,76 @@ export declare function wallAttachments(nodes: StructureNodes, wall: WallNode):
827
800
  floorPlan: string;
828
801
  } | undefined;
829
802
  } | undefined;
830
- position: [number, number, number];
831
- rotation: [number, number, number];
832
- side?: "back" | "front" | undefined;
833
- verticalAnchor?: "floor" | "wall" | undefined;
834
- floorThresholdVersion: 0 | 1;
835
- wallId?: string | undefined;
836
- roofSegmentId?: string | undefined;
837
- roofFace?: "back" | "front" | "left" | "right" | undefined;
838
- width: number;
839
- height: number;
840
- sidelightLeft?: number | undefined;
841
- sidelightRight?: number | undefined;
842
- transomHeight?: number | undefined;
843
- slidingStyle?: "bypass" | "patio" | undefined;
844
- mark?: string | undefined;
845
- constructionType: "framed" | "masonry";
846
- dimensionReference: "finish-opening" | "masonry-opening" | "nominal" | "rough-opening";
847
- roughOpeningWidth?: number | undefined;
848
- roughOpeningHeight?: number | undefined;
849
- masonryOpeningWidth?: number | undefined;
850
- masonryOpeningHeight?: number | undefined;
851
- finishOpeningWidth?: number | undefined;
852
- finishOpeningHeight?: number | undefined;
853
- doorCategory: "garage" | "interior";
854
- doorType: "barn" | "double" | "folding" | "french" | "garage-rollup" | "garage-sectional" | "garage-tiltup" | "hinged" | "pocket" | "sliding";
855
- leafCount: 1 | 2 | 3 | 4 | 6 | 8;
856
- operationState: number;
857
- slideDirection: "left" | "right";
858
- trackStyle: "none" | "overhead" | "pocket" | "visible";
859
- garagePanelCount: number;
860
- openingKind: "door" | "opening";
861
- openingShape: "arch" | "rectangle" | "rounded";
862
- openingRadiusMode: "all" | "individual";
863
- openingTopRadii: [number, number];
864
- cornerRadius: number;
865
- archHeight: number;
866
- openingRevealRadius: number;
867
- frameThickness: number;
868
- frameDepth?: number | undefined;
869
- threshold: boolean;
870
- thresholdHeight: number;
871
- casingFaceA?: boolean | undefined;
872
- casingFaceB?: boolean | undefined;
873
- casingWidth?: number | undefined;
874
- hingesSide: "left" | "right";
875
- swingDirection: "inward" | "outward";
876
- swingAngle: number;
877
- segments: {
878
- type: "empty" | "glass" | "panel";
879
- heightRatio: number;
880
- columnRatios: number[];
881
- dividerThickness: number;
882
- panelDepth: number;
883
- panelInset: number;
884
- }[];
885
- handle: boolean;
886
- handleStyle?: "bar" | "knob" | "lever" | "lever-curved" | "plate" | undefined;
887
- handleHeight: number;
888
- handleSide: "left" | "right";
889
- contentPadding: [number, number];
890
- doorCloser: boolean;
891
- panicBar: boolean;
892
- panicBarStyle: "crossbar" | "touchbar";
893
- panicBarRods: boolean;
894
- panicBarHeight: number;
895
- type: "door";
803
+ asset: {
804
+ id: string;
805
+ category: string;
806
+ name: string;
807
+ thumbnail: string;
808
+ floorPlanUrl?: string | undefined;
809
+ source: "community" | "library" | "mine";
810
+ isDraft?: boolean | undefined;
811
+ src: string;
812
+ dimensions: [number, number, number];
813
+ attachTo?: "ceiling" | "wall" | "wall-side" | undefined;
814
+ recessed?: boolean | undefined;
815
+ tags?: string[] | undefined;
816
+ functionTags?: string[] | undefined;
817
+ offset: [number, number, number];
818
+ rotation: [number, number, number];
819
+ scale: [number, number, number];
820
+ surface?: {
821
+ height: number;
822
+ } | undefined;
823
+ interactive?: {
824
+ controls: ({
825
+ kind: "toggle";
826
+ label?: string | undefined;
827
+ default?: boolean | undefined;
828
+ } | {
829
+ kind: "slider";
830
+ label: string;
831
+ min: number;
832
+ max: number;
833
+ step: number;
834
+ unit?: string | undefined;
835
+ displayMode: "dial" | "slider" | "stepper";
836
+ default?: number | undefined;
837
+ } | {
838
+ kind: "temperature";
839
+ label: string;
840
+ min: number;
841
+ max: number;
842
+ unit: "C" | "F";
843
+ default?: number | undefined;
844
+ })[];
845
+ effects: ({
846
+ kind: "animation";
847
+ mode?: "ambient" | "open-close" | undefined;
848
+ control?: number | undefined;
849
+ clips: {
850
+ on?: string | undefined;
851
+ off?: string | undefined;
852
+ loop?: string | undefined;
853
+ };
854
+ } | {
855
+ kind: "light";
856
+ color: string;
857
+ intensityRange: [number, number];
858
+ distance?: number | undefined;
859
+ offset: [number, number, number];
860
+ spot?: {
861
+ direction: [number, number, number];
862
+ angle: number;
863
+ softness: number;
864
+ } | undefined;
865
+ shadows?: boolean | undefined;
866
+ glow?: {
867
+ size: number;
868
+ strength: number;
869
+ } | undefined;
870
+ })[];
871
+ } | undefined;
872
+ };
896
873
  } | {
897
874
  object: "node";
898
875
  name?: string | undefined;
@@ -917,7 +894,7 @@ export declare function wallAttachments(nodes: StructureNodes, wall: WallNode):
917
894
  fromIds: string[];
918
895
  } | undefined;
919
896
  } | undefined;
920
- id: `window_${string}`;
897
+ id: `door_${string}`;
921
898
  material?: {
922
899
  id?: string | undefined;
923
900
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
@@ -1061,12 +1038,14 @@ export declare function wallAttachments(nodes: StructureNodes, wall: WallNode):
1061
1038
  verticalAnchor?: "floor" | "wall" | undefined;
1062
1039
  floorThresholdVersion: 0 | 1;
1063
1040
  wallId?: string | undefined;
1064
- dormerId?: string | undefined;
1065
- dormerFace?: "back" | "front" | "left" | "right" | undefined;
1066
1041
  roofSegmentId?: string | undefined;
1067
1042
  roofFace?: "back" | "front" | "left" | "right" | undefined;
1068
1043
  width: number;
1069
1044
  height: number;
1045
+ sidelightLeft?: number | undefined;
1046
+ sidelightRight?: number | undefined;
1047
+ transomHeight?: number | undefined;
1048
+ slidingStyle?: "bypass" | "patio" | undefined;
1070
1049
  mark?: string | undefined;
1071
1050
  constructionType: "framed" | "masonry";
1072
1051
  dimensionReference: "finish-opening" | "masonry-opening" | "nominal" | "rough-opening";
@@ -1076,52 +1055,49 @@ export declare function wallAttachments(nodes: StructureNodes, wall: WallNode):
1076
1055
  masonryOpeningHeight?: number | undefined;
1077
1056
  finishOpeningWidth?: number | undefined;
1078
1057
  finishOpeningHeight?: number | undefined;
1079
- openingKind: "opening" | "window";
1080
- windowType: "awning" | "bay" | "bow" | "casement" | "double-hung" | "fixed" | "hopper" | "louvered" | "single-hung" | "sliding" | "tilt-turn";
1058
+ doorCategory: "garage" | "interior";
1059
+ doorType: "barn" | "double" | "folding" | "french" | "garage-rollup" | "garage-sectional" | "garage-tiltup" | "hinged" | "pocket" | "sliding";
1060
+ leafCount: 1 | 2 | 3 | 4 | 6 | 8;
1081
1061
  operationState: number;
1082
- openingDirection?: "inward" | "outward" | undefined;
1083
- tiltTurnMode?: "tilt" | "turn" | undefined;
1084
- awningDirection: "down" | "up";
1085
- casementStyle: "french" | "single";
1086
- hingesSide: "left" | "right";
1062
+ slideDirection: "left" | "right";
1063
+ trackStyle: "none" | "overhead" | "pocket" | "visible";
1064
+ garagePanelCount: number;
1065
+ openingKind: "door" | "opening";
1087
1066
  openingShape: "arch" | "rectangle" | "rounded";
1088
1067
  openingRadiusMode: "all" | "individual";
1089
- openingCornerRadii: [number, number, number, number];
1068
+ openingTopRadii: [number, number];
1090
1069
  cornerRadius: number;
1091
1070
  archHeight: number;
1092
1071
  openingRevealRadius: number;
1093
1072
  frameThickness: number;
1094
1073
  frameDepth?: number | undefined;
1095
- windowHandle?: boolean | undefined;
1096
- sashGrid?: boolean | undefined;
1097
- columnRatios: number[];
1098
- rowRatios: number[];
1099
- columnDividerThickness: number;
1100
- rowDividerThickness: number;
1101
- corner?: {
1102
- end: "end" | "start";
1103
- partnerId: string;
1104
- post: "none" | "post";
1105
- } | undefined;
1106
- sill: boolean;
1107
- sillDepth: number;
1108
- sillThickness: number;
1109
- sillOverhang?: number | undefined;
1110
- sillInterior?: boolean | undefined;
1111
- sillInteriorDepth?: number | undefined;
1112
- sillInteriorThickness?: number | undefined;
1113
- sillInteriorOverhang?: number | undefined;
1114
- shutters?: "board-batten" | "louvered" | "none" | "panel" | undefined;
1115
- shutterWidth?: number | undefined;
1116
- shutterOpen?: number | undefined;
1117
- shutterSides?: "both" | "left" | "right" | undefined;
1118
- rollerShutter?: "box" | "concealed" | "none" | undefined;
1119
- rollerShutterBoxHeight?: number | undefined;
1120
- rollerShutterOpen?: number | undefined;
1074
+ threshold: boolean;
1075
+ thresholdHeight: number;
1121
1076
  casingFaceA?: boolean | undefined;
1122
1077
  casingFaceB?: boolean | undefined;
1123
1078
  casingWidth?: number | undefined;
1124
- type: "window";
1079
+ hingesSide: "left" | "right";
1080
+ swingDirection: "inward" | "outward";
1081
+ swingAngle: number;
1082
+ segments: {
1083
+ type: "empty" | "glass" | "panel";
1084
+ heightRatio: number;
1085
+ columnRatios: number[];
1086
+ dividerThickness: number;
1087
+ panelDepth: number;
1088
+ panelInset: number;
1089
+ }[];
1090
+ handle: boolean;
1091
+ handleStyle?: "bar" | "knob" | "lever" | "lever-curved" | "plate" | undefined;
1092
+ handleHeight: number;
1093
+ handleSide: "left" | "right";
1094
+ contentPadding: [number, number];
1095
+ doorCloser: boolean;
1096
+ panicBar: boolean;
1097
+ panicBarStyle: "crossbar" | "touchbar";
1098
+ panicBarRods: boolean;
1099
+ panicBarHeight: number;
1100
+ type: "door";
1125
1101
  } | {
1126
1102
  object: "node";
1127
1103
  name?: string | undefined;
@@ -1146,11 +1122,30 @@ export declare function wallAttachments(nodes: StructureNodes, wall: WallNode):
1146
1122
  fromIds: string[];
1147
1123
  } | undefined;
1148
1124
  } | undefined;
1149
- id: `column_${string}`;
1150
- children: string[];
1151
- position: [number, number, number];
1152
- rotation: number;
1153
- supportSlabId?: string | undefined;
1125
+ id: `window_${string}`;
1126
+ material?: {
1127
+ id?: string | undefined;
1128
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1129
+ properties?: {
1130
+ color: string;
1131
+ roughness: number;
1132
+ metalness: number;
1133
+ opacity: number;
1134
+ transparent: boolean;
1135
+ side: "back" | "double" | "front";
1136
+ } | undefined;
1137
+ texture?: {
1138
+ url: string;
1139
+ repeat?: [number, number] | undefined;
1140
+ scale?: number | undefined;
1141
+ offset?: [number, number] | undefined;
1142
+ normalMap?: string | undefined;
1143
+ normalScale?: number | undefined;
1144
+ bumpMap?: string | undefined;
1145
+ bumpScale?: number | undefined;
1146
+ } | undefined;
1147
+ } | undefined;
1148
+ slots?: Record<string, string> | undefined;
1154
1149
  source?: {
1155
1150
  kind: "script";
1156
1151
  meta?: {
@@ -1234,135 +1229,104 @@ export declare function wallAttachments(nodes: StructureNodes, wall: WallNode):
1234
1229
  duration: number;
1235
1230
  }[];
1236
1231
  cutters?: {
1237
- host: "ceiling" | "mounted" | "slab" | "wall";
1238
- polygon: number[][];
1239
- minY: number;
1240
- maxY: number;
1241
- }[] | undefined;
1242
- cutout: boolean;
1243
- collider: boolean;
1244
- shape?: {
1245
- tolerance: number;
1246
- bands: {
1247
- y0: number;
1248
- y1: number;
1249
- polygons: {
1250
- outer: [number, number][];
1251
- holes?: [number, number][][] | undefined;
1252
- }[];
1253
- }[];
1254
- } | undefined;
1255
- triangles: number;
1256
- coverage?: number | undefined;
1257
- uncovered?: {
1258
- min: [number, number];
1259
- max: [number, number];
1260
- }[] | undefined;
1261
- };
1262
- images?: {
1263
- artifact: string;
1264
- thumbnail: string;
1265
- floorPlan: string;
1266
- } | undefined;
1267
- } | undefined;
1268
- style: "cluster" | "dravidian-carved" | "faceted" | "fluted" | "lathe-turned" | "plain";
1269
- crossSection: "octagonal" | "rectangular" | "round" | "sixteen-sided" | "square";
1270
- height: number;
1271
- radius: number;
1272
- width: number;
1273
- depth: number;
1274
- edgeSoftness: number;
1275
- baseHeight: number;
1276
- capitalHeight: number;
1277
- shaftProfile: "baluster" | "bulged" | "hourglass" | "straight" | "tapered";
1278
- shaftTaper: number;
1279
- shaftBulge: number;
1280
- shaftStartScale: number;
1281
- shaftEndScale: number;
1282
- shaftSegmentCount: number;
1283
- shaftTwistStep: number;
1284
- shaftCornerRadius: number;
1285
- shaftDetail: "fluted" | "lathe-turned" | "none" | "panelled" | "spiral";
1286
- baseStyle: "lotus" | "none" | "panelled-pedestal" | "ribbed-lotus" | "round-rings" | "simple-square" | "square-plinth" | "stepped-square";
1287
- baseWidthScale: number;
1288
- baseDepthScale: number;
1289
- baseTierCount: number;
1290
- baseStepSpread: number;
1291
- basePlinthHeightRatio: number;
1292
- baseRoundBandScale: number;
1293
- baseNeckScale: number;
1294
- baseRoundBandCount: number;
1295
- baseRibCount: number;
1296
- baseCarvingLevel: number;
1297
- basePanelInset: number;
1298
- capitalStyle: "corinthian-leaf" | "doric" | "ionic-volute" | "leaf-carved" | "none" | "rounded" | "simple" | "simple-slab" | "south-indian-bracket" | "stepped" | "volute" | "wood-bracket";
1299
- capitalWidthScale: number;
1300
- capitalDepthScale: number;
1301
- capitalTierCount: number;
1302
- capitalStepSpread: number;
1303
- capitalBandCount: number;
1304
- voluteSize: number;
1305
- voluteCount: number;
1306
- leafCount: number;
1307
- leafRows: number;
1308
- bracketDepth: number;
1309
- bracketTierCount: number;
1310
- pendantCount: number;
1311
- capitalCarvingLevel: number;
1312
- ringCount: number;
1313
- ringPlacement: "bottom" | "ends" | "even" | "top";
1314
- ringThickness: number;
1315
- ringSpread: number;
1316
- fluteCount: number;
1317
- fluteDepth: number;
1318
- fluteWidth: number;
1319
- spiralTwist: number;
1320
- spiralRibCount: number;
1321
- panelCount: number;
1322
- panelInsetDepth: number;
1323
- panelShape: "arched" | "diamond" | "rectangle";
1324
- latheRingCount: number;
1325
- latheRingSpacing: "bottom" | "ends" | "even" | "top";
1326
- carvingLevel: number;
1327
- carvingPlacement: "all" | "base" | "capital" | "shaft";
1328
- lowerBandEnabled: boolean;
1329
- lowerBandHeight: number;
1330
- lowerBandCarvingLevel: number;
1331
- dentilCount: number;
1332
- beadCount: number;
1333
- supportStyle: "a-frame" | "box-frame" | "k-brace" | "portal-frame" | "single-strut" | "trestle" | "tripod" | "v-frame" | "vertical" | "x-brace" | "y-frame";
1334
- braceWidth: number;
1335
- braceDepth: number;
1336
- braceBottomSpread: number;
1337
- braceTopSpread: number;
1338
- bracePlateEnabled: boolean;
1339
- role?: "ornament" | "post" | undefined;
1340
- postBase?: "none" | "pier" | "post-base" | undefined;
1341
- material?: {
1342
- id?: string | undefined;
1343
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1344
- properties?: {
1345
- color: string;
1346
- roughness: number;
1347
- metalness: number;
1348
- opacity: number;
1349
- transparent: boolean;
1350
- side: "back" | "double" | "front";
1351
- } | undefined;
1352
- texture?: {
1353
- url: string;
1354
- repeat?: [number, number] | undefined;
1355
- scale?: number | undefined;
1356
- offset?: [number, number] | undefined;
1357
- normalMap?: string | undefined;
1358
- normalScale?: number | undefined;
1359
- bumpMap?: string | undefined;
1360
- bumpScale?: number | undefined;
1232
+ host: "ceiling" | "mounted" | "slab" | "wall";
1233
+ polygon: number[][];
1234
+ minY: number;
1235
+ maxY: number;
1236
+ }[] | undefined;
1237
+ cutout: boolean;
1238
+ collider: boolean;
1239
+ shape?: {
1240
+ tolerance: number;
1241
+ bands: {
1242
+ y0: number;
1243
+ y1: number;
1244
+ polygons: {
1245
+ outer: [number, number][];
1246
+ holes?: [number, number][][] | undefined;
1247
+ }[];
1248
+ }[];
1249
+ } | undefined;
1250
+ triangles: number;
1251
+ coverage?: number | undefined;
1252
+ uncovered?: {
1253
+ min: [number, number];
1254
+ max: [number, number];
1255
+ }[] | undefined;
1256
+ };
1257
+ images?: {
1258
+ artifact: string;
1259
+ thumbnail: string;
1260
+ floorPlan: string;
1361
1261
  } | undefined;
1362
1262
  } | undefined;
1363
- materialPreset?: string | undefined;
1364
- slots?: Record<string, string> | undefined;
1365
- type: "column";
1263
+ position: [number, number, number];
1264
+ rotation: [number, number, number];
1265
+ side?: "back" | "front" | undefined;
1266
+ verticalAnchor?: "floor" | "wall" | undefined;
1267
+ floorThresholdVersion: 0 | 1;
1268
+ wallId?: string | undefined;
1269
+ dormerId?: string | undefined;
1270
+ dormerFace?: "back" | "front" | "left" | "right" | undefined;
1271
+ roofSegmentId?: string | undefined;
1272
+ roofFace?: "back" | "front" | "left" | "right" | undefined;
1273
+ width: number;
1274
+ height: number;
1275
+ mark?: string | undefined;
1276
+ constructionType: "framed" | "masonry";
1277
+ dimensionReference: "finish-opening" | "masonry-opening" | "nominal" | "rough-opening";
1278
+ roughOpeningWidth?: number | undefined;
1279
+ roughOpeningHeight?: number | undefined;
1280
+ masonryOpeningWidth?: number | undefined;
1281
+ masonryOpeningHeight?: number | undefined;
1282
+ finishOpeningWidth?: number | undefined;
1283
+ finishOpeningHeight?: number | undefined;
1284
+ openingKind: "opening" | "window";
1285
+ windowType: "awning" | "bay" | "bow" | "casement" | "double-hung" | "fixed" | "hopper" | "louvered" | "single-hung" | "sliding" | "tilt-turn";
1286
+ operationState: number;
1287
+ openingDirection?: "inward" | "outward" | undefined;
1288
+ tiltTurnMode?: "tilt" | "turn" | undefined;
1289
+ awningDirection: "down" | "up";
1290
+ casementStyle: "french" | "single";
1291
+ hingesSide: "left" | "right";
1292
+ openingShape: "arch" | "rectangle" | "rounded";
1293
+ openingRadiusMode: "all" | "individual";
1294
+ openingCornerRadii: [number, number, number, number];
1295
+ cornerRadius: number;
1296
+ archHeight: number;
1297
+ openingRevealRadius: number;
1298
+ frameThickness: number;
1299
+ frameDepth?: number | undefined;
1300
+ windowHandle?: boolean | undefined;
1301
+ sashGrid?: boolean | undefined;
1302
+ columnRatios: number[];
1303
+ rowRatios: number[];
1304
+ columnDividerThickness: number;
1305
+ rowDividerThickness: number;
1306
+ corner?: {
1307
+ end: "end" | "start";
1308
+ partnerId: string;
1309
+ post: "none" | "post";
1310
+ } | undefined;
1311
+ sill: boolean;
1312
+ sillDepth: number;
1313
+ sillThickness: number;
1314
+ sillOverhang?: number | undefined;
1315
+ sillInterior?: boolean | undefined;
1316
+ sillInteriorDepth?: number | undefined;
1317
+ sillInteriorThickness?: number | undefined;
1318
+ sillInteriorOverhang?: number | undefined;
1319
+ shutters?: "board-batten" | "louvered" | "none" | "panel" | undefined;
1320
+ shutterWidth?: number | undefined;
1321
+ shutterOpen?: number | undefined;
1322
+ shutterSides?: "both" | "left" | "right" | undefined;
1323
+ rollerShutter?: "box" | "concealed" | "none" | undefined;
1324
+ rollerShutterBoxHeight?: number | undefined;
1325
+ rollerShutterOpen?: number | undefined;
1326
+ casingFaceA?: boolean | undefined;
1327
+ casingFaceB?: boolean | undefined;
1328
+ casingWidth?: number | undefined;
1329
+ type: "window";
1366
1330
  } | {
1367
1331
  object: "node";
1368
1332
  name?: string | undefined;
@@ -1895,7 +1859,7 @@ export declare function wallAttachments(nodes: StructureNodes, wall: WallNode):
1895
1859
  cavityInsulation?: string | undefined;
1896
1860
  } | undefined;
1897
1861
  slots?: Record<string, string> | undefined;
1898
- children: `rseg_${string}`[];
1862
+ children: string[];
1899
1863
  type: "roof";
1900
1864
  } | {
1901
1865
  object: "node";
@@ -2923,6 +2887,66 @@ export declare function wallAttachments(nodes: StructureNodes, wall: WallNode):
2923
2887
  topElevation?: number | undefined;
2924
2888
  supportSlabId?: string | undefined;
2925
2889
  type: "beam";
2890
+ } | {
2891
+ object: "node";
2892
+ name?: string | undefined;
2893
+ parentId: string | null;
2894
+ visible: boolean;
2895
+ camera?: {
2896
+ position: [number, number, number];
2897
+ target: [number, number, number];
2898
+ mode: "orthographic" | "perspective";
2899
+ fov?: number | undefined;
2900
+ zoom?: number | undefined;
2901
+ } | undefined;
2902
+ metadata: Record<string, unknown>;
2903
+ provenance?: {
2904
+ refs: {
2905
+ ns?: string | undefined;
2906
+ id: string;
2907
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
2908
+ }[];
2909
+ lineage?: {
2910
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
2911
+ fromIds: string[];
2912
+ } | undefined;
2913
+ } | undefined;
2914
+ id: `construction-dimension_${string}`;
2915
+ anchors: ({
2916
+ kind: "feature";
2917
+ reference: {
2918
+ nodeId: string;
2919
+ featureId: string;
2920
+ parameters?: Record<string, string | number | boolean> | undefined;
2921
+ };
2922
+ fallback: [number, number, number];
2923
+ } | [number, number, number])[];
2924
+ baseline: {
2925
+ origin: [number, number];
2926
+ direction: [number, number];
2927
+ };
2928
+ chainMode: "continuous" | "point-to-point";
2929
+ mode: "angular" | "arc-length" | "center-mark" | "chord" | "coordinate" | "diameter" | "linear" | "radius";
2930
+ featureCount: number;
2931
+ showCenterMark: boolean;
2932
+ prefix: string;
2933
+ suffix: string;
2934
+ textOverride: string | null;
2935
+ datumPolicy: "centerline" | "finish-face" | "structural-face" | "wall-face";
2936
+ terminator: "architectural-tick" | "dot" | "filled-arrow" | "open-arrow";
2937
+ textPosition: "above" | "centered";
2938
+ imperialPrecision: "1" | "1/16" | "1/2" | "1/4" | "1/8";
2939
+ metricNotation: "meters" | "millimeters";
2940
+ extensionStartGap: number;
2941
+ extensionOvershoot: number;
2942
+ drawingType: "floor-plan" | "foundation-plan" | "reflected-ceiling-plan" | "roof-plan" | "site-plan";
2943
+ drawingOverrides: {
2944
+ drawingType: "floor-plan" | "foundation-plan" | "reflected-ceiling-plan" | "roof-plan" | "site-plan";
2945
+ presentation: "controlled" | "omit" | "shown";
2946
+ suppressedSegmentIndexes: number[];
2947
+ }[];
2948
+ controllingDimensionId: `construction-dimension_${string}` | null;
2949
+ type: "construction-dimension";
2926
2950
  } | {
2927
2951
  object: "node";
2928
2952
  name?: string | undefined;
@@ -3433,20 +3457,112 @@ export declare function wallAttachments(nodes: StructureNodes, wall: WallNode):
3433
3457
  face: "a" | "b";
3434
3458
  finish: string;
3435
3459
  }[] | undefined;
3436
- hasFloor?: false | undefined;
3437
- hasCeiling?: false | undefined;
3438
- spaceRole: "generic" | "room";
3439
- roomNumber: string;
3440
- enclosureStatus: "auto" | "enclosed" | "open";
3441
- floorFinish: string;
3442
- wallFinish: string;
3443
- ceilingFinish: string;
3444
- ceilingHeight: number;
3445
- occupancy: string;
3446
- clearDimensionPolicy: "finish-faces" | "inside-faces" | "none";
3447
- color: string;
3448
- metadata: Record<string, unknown>;
3449
- type: "zone";
3460
+ hasFloor?: false | undefined;
3461
+ hasCeiling?: false | undefined;
3462
+ spaceRole: "generic" | "room";
3463
+ roomNumber: string;
3464
+ enclosureStatus: "auto" | "enclosed" | "open";
3465
+ floorFinish: string;
3466
+ wallFinish: string;
3467
+ ceilingFinish: string;
3468
+ ceilingHeight: number;
3469
+ occupancy: string;
3470
+ clearDimensionPolicy: "finish-faces" | "inside-faces" | "none";
3471
+ color: string;
3472
+ metadata: Record<string, unknown>;
3473
+ type: "zone";
3474
+ } | {
3475
+ object: "node";
3476
+ name?: string | undefined;
3477
+ parentId: string | null;
3478
+ visible: boolean;
3479
+ camera?: {
3480
+ position: [number, number, number];
3481
+ target: [number, number, number];
3482
+ mode: "orthographic" | "perspective";
3483
+ fov?: number | undefined;
3484
+ zoom?: number | undefined;
3485
+ } | undefined;
3486
+ metadata: Record<string, unknown>;
3487
+ provenance?: {
3488
+ refs: {
3489
+ ns?: string | undefined;
3490
+ id: string;
3491
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
3492
+ }[];
3493
+ lineage?: {
3494
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
3495
+ fromIds: string[];
3496
+ } | undefined;
3497
+ } | undefined;
3498
+ id: `ceiling_${string}`;
3499
+ children: (`item_${string}` | `procedural-item_${string}`)[];
3500
+ material?: {
3501
+ id?: string | undefined;
3502
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
3503
+ properties?: {
3504
+ color: string;
3505
+ roughness: number;
3506
+ metalness: number;
3507
+ opacity: number;
3508
+ transparent: boolean;
3509
+ side: "back" | "double" | "front";
3510
+ } | undefined;
3511
+ texture?: {
3512
+ url: string;
3513
+ repeat?: [number, number] | undefined;
3514
+ scale?: number | undefined;
3515
+ offset?: [number, number] | undefined;
3516
+ normalMap?: string | undefined;
3517
+ normalScale?: number | undefined;
3518
+ bumpMap?: string | undefined;
3519
+ bumpScale?: number | undefined;
3520
+ } | undefined;
3521
+ } | undefined;
3522
+ materialPreset?: string | undefined;
3523
+ slots?: Record<string, string> | undefined;
3524
+ polygon: [number, number][];
3525
+ holes: [number, number][][];
3526
+ holeMetadata: {
3527
+ source: "elevator" | "floor-opening" | "manual" | "room" | "stair";
3528
+ openingId?: string | undefined;
3529
+ stairId?: string | undefined;
3530
+ elevatorId?: string | undefined;
3531
+ }[];
3532
+ openingIds?: string[] | undefined;
3533
+ height?: number | undefined;
3534
+ buildUp?: {
3535
+ presetId?: string | undefined;
3536
+ finish?: {
3537
+ kind: "drywall" | "plaster" | "wood-plank";
3538
+ thickness: number;
3539
+ name?: string | undefined;
3540
+ } | undefined;
3541
+ framing?: {
3542
+ system: "joists" | "truss-chords";
3543
+ size: "2x10" | "2x12" | "2x4" | "2x6" | "2x8";
3544
+ spacing: number;
3545
+ } | undefined;
3546
+ decking?: {
3547
+ kind: "osb" | "plywood";
3548
+ thickness: number;
3549
+ name?: string | undefined;
3550
+ } | undefined;
3551
+ insulation?: {
3552
+ kind: "batt" | "blown" | "rigid";
3553
+ thickness: number;
3554
+ name?: string | undefined;
3555
+ } | undefined;
3556
+ } | undefined;
3557
+ regions?: {
3558
+ id: string;
3559
+ polygon: [number, number][];
3560
+ finish: string | Record<string, unknown>;
3561
+ }[] | undefined;
3562
+ boundary?: "auto" | undefined;
3563
+ zoneId?: string | undefined;
3564
+ autoFromWalls: boolean;
3565
+ type: "ceiling";
3450
3566
  } | {
3451
3567
  object: "node";
3452
3568
  name?: string | undefined;
@@ -4052,53 +4168,6 @@ export declare function wallAttachments(nodes: StructureNodes, wall: WallNode):
4052
4168
  system: "return" | "supply";
4053
4169
  slots?: Record<string, string> | undefined;
4054
4170
  type: "duct-segment";
4055
- } | {
4056
- object: "node";
4057
- name?: string | undefined;
4058
- parentId: string | null;
4059
- visible: boolean;
4060
- camera?: {
4061
- position: [number, number, number];
4062
- target: [number, number, number];
4063
- mode: "orthographic" | "perspective";
4064
- fov?: number | undefined;
4065
- zoom?: number | undefined;
4066
- } | undefined;
4067
- metadata: Record<string, unknown>;
4068
- provenance?: {
4069
- refs: {
4070
- ns?: string | undefined;
4071
- id: string;
4072
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
4073
- }[];
4074
- lineage?: {
4075
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
4076
- fromIds: string[];
4077
- } | undefined;
4078
- } | undefined;
4079
- id: `duct-fitting_${string}`;
4080
- position: [number, number, number];
4081
- rotation: [number, number, number];
4082
- fittingType: "access-panel" | "coupling" | "cross" | "damper" | "elbow" | "end-cap" | "reducer" | "tee" | "transition";
4083
- shape: "oval" | "rect" | "round";
4084
- inletShape?: "oval" | "rect" | "round" | undefined;
4085
- outletShape?: "oval" | "rect" | "round" | undefined;
4086
- width: number;
4087
- height: number;
4088
- shape2: "oval" | "rect" | "round";
4089
- width2: number;
4090
- height2: number;
4091
- angle: number;
4092
- branchAngle: number;
4093
- diameter: number;
4094
- diameter2: number;
4095
- ductMaterial: "duct-board" | "flex" | "sheet-metal";
4096
- system: "return" | "supply";
4097
- damperAngle: number;
4098
- panelWidth: number;
4099
- panelHeight: number;
4100
- slots?: Record<string, string> | undefined;
4101
- type: "duct-fitting";
4102
4171
  } | {
4103
4172
  object: "node";
4104
4173
  name?: string | undefined;
@@ -4136,47 +4205,6 @@ export declare function wallAttachments(nodes: StructureNodes, wall: WallNode):
4136
4205
  collarWidth: number;
4137
4206
  collarHeight: number;
4138
4207
  type: "duct-terminal";
4139
- } | {
4140
- object: "node";
4141
- name?: string | undefined;
4142
- parentId: string | null;
4143
- visible: boolean;
4144
- camera?: {
4145
- position: [number, number, number];
4146
- target: [number, number, number];
4147
- mode: "orthographic" | "perspective";
4148
- fov?: number | undefined;
4149
- zoom?: number | undefined;
4150
- } | undefined;
4151
- metadata: Record<string, unknown>;
4152
- provenance?: {
4153
- refs: {
4154
- ns?: string | undefined;
4155
- id: string;
4156
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
4157
- }[];
4158
- lineage?: {
4159
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
4160
- fromIds: string[];
4161
- } | undefined;
4162
- } | undefined;
4163
- id: `hvac-equipment_${string}`;
4164
- position: [number, number, number];
4165
- rotation: number;
4166
- supportSlabId?: string | undefined;
4167
- equipmentType: "air-handler" | "condenser" | "furnace";
4168
- width: number;
4169
- depth: number;
4170
- height: number;
4171
- supplyShape: "oval" | "rect" | "round";
4172
- returnShape: "oval" | "rect" | "round";
4173
- supplyDiameter: number;
4174
- returnDiameter: number;
4175
- supplyWidth: number;
4176
- supplyHeight: number;
4177
- returnWidth: number;
4178
- returnHeight: number;
4179
- type: "hvac-equipment";
4180
4208
  } | {
4181
4209
  object: "node";
4182
4210
  name?: string | undefined;
@@ -4305,17 +4333,13 @@ export declare function wallAttachments(nodes: StructureNodes, wall: WallNode):
4305
4333
  fromIds: string[];
4306
4334
  } | undefined;
4307
4335
  } | undefined;
4308
- id: `pipe-fitting_${string}`;
4336
+ id: `pipe-trap_${string}`;
4309
4337
  position: [number, number, number];
4310
- rotation: [number, number, number];
4311
- fittingType: "cleanout" | "coupling" | "cross" | "elbow" | "end-cap" | "reducer" | "sanitary-tee" | "wye";
4312
- angle: number;
4338
+ rotation: number;
4313
4339
  diameter: number;
4314
- diameter2: number;
4315
- cleanoutStyle: "end" | "inline";
4316
4340
  pipeMaterial: "abs" | "cast-iron" | "pvc";
4317
- system: "vent" | "waste";
4318
- type: "pipe-fitting";
4341
+ armLengthM: number;
4342
+ type: "pipe-trap";
4319
4343
  } | {
4320
4344
  object: "node";
4321
4345
  name?: string | undefined;
@@ -4340,13 +4364,12 @@ export declare function wallAttachments(nodes: StructureNodes, wall: WallNode):
4340
4364
  fromIds: string[];
4341
4365
  } | undefined;
4342
4366
  } | undefined;
4343
- id: `pipe-trap_${string}`;
4344
- position: [number, number, number];
4345
- rotation: number;
4346
- diameter: number;
4347
- pipeMaterial: "abs" | "cast-iron" | "pvc";
4348
- armLengthM: number;
4349
- type: "pipe-trap";
4367
+ id: `level_${string}`;
4368
+ 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}`)[];
4369
+ level: number;
4370
+ baseElevation: number;
4371
+ height?: number | undefined;
4372
+ type: "level";
4350
4373
  } | {
4351
4374
  object: "node";
4352
4375
  name?: string | undefined;
@@ -4371,12 +4394,54 @@ export declare function wallAttachments(nodes: StructureNodes, wall: WallNode):
4371
4394
  fromIds: string[];
4372
4395
  } | undefined;
4373
4396
  } | undefined;
4374
- id: `level_${string}`;
4375
- 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}`)[];
4376
- level: number;
4377
- baseElevation: number;
4378
- height?: number | undefined;
4379
- type: "level";
4397
+ id: `elevator_${string}`;
4398
+ material?: {
4399
+ id?: string | undefined;
4400
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
4401
+ properties?: {
4402
+ color: string;
4403
+ roughness: number;
4404
+ metalness: number;
4405
+ opacity: number;
4406
+ transparent: boolean;
4407
+ side: "back" | "double" | "front";
4408
+ } | undefined;
4409
+ texture?: {
4410
+ url: string;
4411
+ repeat?: [number, number] | undefined;
4412
+ scale?: number | undefined;
4413
+ offset?: [number, number] | undefined;
4414
+ normalMap?: string | undefined;
4415
+ normalScale?: number | undefined;
4416
+ bumpMap?: string | undefined;
4417
+ bumpScale?: number | undefined;
4418
+ } | undefined;
4419
+ } | undefined;
4420
+ materialPreset?: string | undefined;
4421
+ slots?: Record<string, string> | undefined;
4422
+ position: [number, number, number];
4423
+ rotation: number;
4424
+ width: number;
4425
+ depth: number;
4426
+ shaftWidth?: number | undefined;
4427
+ shaftDepth?: number | undefined;
4428
+ shaftWallThickness: number;
4429
+ shaftStyle: "glass" | "solid";
4430
+ cabHeight: number;
4431
+ doorWidth: number;
4432
+ doorHeight: number;
4433
+ doorStyle: "center-opening" | "single-left" | "single-right";
4434
+ doorPanelStyle: "glass-frame" | "segmented-panel" | "solid-panel";
4435
+ fromLevelId: string | null;
4436
+ toLevelId: string | null;
4437
+ servedLevelIds?: string[] | undefined;
4438
+ disabledLevelIds: string[];
4439
+ serviceOnlyLevelIds: string[];
4440
+ defaultLevelId: string | null;
4441
+ speed: number;
4442
+ doorDurationMs: number;
4443
+ dwellMs: number;
4444
+ type: "elevator";
4380
4445
  } | {
4381
4446
  object: "node";
4382
4447
  parentId: string | null;
@@ -4842,71 +4907,6 @@ export declare function wallAttachments(nodes: StructureNodes, wall: WallNode):
4842
4907
  topFinishHeight: number;
4843
4908
  topFinishDepth: number;
4844
4909
  type: "cabinet-module";
4845
- } | {
4846
- object: "node";
4847
- name?: string | undefined;
4848
- parentId: string | null;
4849
- visible: boolean;
4850
- camera?: {
4851
- position: [number, number, number];
4852
- target: [number, number, number];
4853
- mode: "orthographic" | "perspective";
4854
- fov?: number | undefined;
4855
- zoom?: number | undefined;
4856
- } | undefined;
4857
- metadata: Record<string, unknown>;
4858
- provenance?: {
4859
- refs: {
4860
- ns?: string | undefined;
4861
- id: string;
4862
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
4863
- }[];
4864
- lineage?: {
4865
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
4866
- fromIds: string[];
4867
- } | undefined;
4868
- } | undefined;
4869
- id: `bvent_${string}`;
4870
- material?: {
4871
- id?: string | undefined;
4872
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
4873
- properties?: {
4874
- color: string;
4875
- roughness: number;
4876
- metalness: number;
4877
- opacity: number;
4878
- transparent: boolean;
4879
- side: "back" | "double" | "front";
4880
- } | undefined;
4881
- texture?: {
4882
- url: string;
4883
- repeat?: [number, number] | undefined;
4884
- scale?: number | undefined;
4885
- offset?: [number, number] | undefined;
4886
- normalMap?: string | undefined;
4887
- normalScale?: number | undefined;
4888
- bumpMap?: string | undefined;
4889
- bumpScale?: number | undefined;
4890
- } | undefined;
4891
- } | undefined;
4892
- slots?: Record<string, string> | undefined;
4893
- materialPreset: string;
4894
- roofSegmentId?: string | undefined;
4895
- position: [number, number, number];
4896
- rotation: number;
4897
- width: number;
4898
- depth: number;
4899
- height: number;
4900
- hoodOverhang: number;
4901
- topTaper: number;
4902
- capHeight: number;
4903
- capGap: number;
4904
- domeCurvature: number;
4905
- baseInset: number;
4906
- baseHeight: number;
4907
- cornerBevel: number;
4908
- style: "box" | "cap" | "dome";
4909
- type: "box-vent";
4910
4910
  } | {
4911
4911
  object: "node";
4912
4912
  name?: string | undefined;