@pascal-app/core 1.1.0 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) 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 +12209 -12209
  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 +7 -1
  13. package/dist/agent-operations/batch.d.ts.map +1 -1
  14. package/dist/agent-operations/batch.js +17 -2
  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 +2963 -2963
  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 +3 -0
  24. package/dist/agent-operations/index.d.ts.map +1 -1
  25. package/dist/agent-operations/index.js +4 -1
  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 +585 -585
  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 +3 -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-tools/assets.js +1 -1
  41. package/dist/building/__fixtures__/wall-opening-cases.d.ts +234 -234
  42. package/dist/building/level-duplication.d.ts +3516 -3516
  43. package/dist/building/level-duplication.d.ts.map +1 -1
  44. package/dist/building/level-duplication.js +3 -1
  45. package/dist/building/wall-openings.d.ts +75 -75
  46. package/dist/commands/structure/shared.d.ts +3407 -3407
  47. package/dist/commands/structure/zone-wall-merge.d.ts +566 -566
  48. package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts +585 -585
  49. package/dist/index.d.ts +2 -0
  50. package/dist/index.d.ts.map +1 -1
  51. package/dist/index.js +2 -0
  52. package/dist/lib/__fixtures__/mezzanine.d.ts +9262 -9262
  53. package/dist/lib/absorb-wall-separators.d.ts +1344 -1344
  54. package/dist/lib/asset-storage.d.ts.map +1 -1
  55. package/dist/lib/asset-storage.js +3 -0
  56. package/dist/lib/floor-foundation-datum.d.ts.map +1 -1
  57. package/dist/lib/floor-foundation-datum.js +5 -1
  58. package/dist/lib/floorplan/context.d.ts +95 -0
  59. package/dist/lib/floorplan/context.d.ts.map +1 -0
  60. package/dist/lib/floorplan/context.js +155 -0
  61. package/dist/lib/floorplan/index.d.ts +6 -0
  62. package/dist/lib/floorplan/index.d.ts.map +1 -0
  63. package/dist/lib/floorplan/index.js +5 -0
  64. package/dist/lib/floorplan/marks.d.ts +71 -0
  65. package/dist/lib/floorplan/marks.d.ts.map +1 -0
  66. package/dist/lib/floorplan/marks.js +157 -0
  67. package/dist/lib/floorplan/plan-math.d.ts +18 -0
  68. package/dist/lib/floorplan/plan-math.d.ts.map +1 -0
  69. package/dist/lib/floorplan/plan-math.js +82 -0
  70. package/dist/lib/floorplan/svg-paths.d.ts +17 -0
  71. package/dist/lib/floorplan/svg-paths.d.ts.map +1 -0
  72. package/dist/lib/floorplan/svg-paths.js +92 -0
  73. package/dist/lib/floorplan/wall-affordances.d.ts +31 -0
  74. package/dist/lib/floorplan/wall-affordances.d.ts.map +1 -0
  75. package/dist/lib/floorplan/wall-affordances.js +24 -0
  76. package/dist/registry/__fixtures__/roof-planes.d.ts +69 -0
  77. package/dist/registry/__fixtures__/roof-planes.d.ts.map +1 -0
  78. package/dist/registry/__fixtures__/roof-planes.js +59 -0
  79. package/dist/registry/index.d.ts +2 -1
  80. package/dist/registry/index.d.ts.map +1 -1
  81. package/dist/registry/index.js +1 -0
  82. package/dist/registry/roofs.d.ts +34 -0
  83. package/dist/registry/roofs.d.ts.map +1 -0
  84. package/dist/registry/roofs.js +61 -0
  85. package/dist/registry/types.d.ts +30 -0
  86. package/dist/registry/types.d.ts.map +1 -1
  87. package/dist/registry/validate-relations.d.ts +5 -1
  88. package/dist/registry/validate-relations.d.ts.map +1 -1
  89. package/dist/registry/validate-relations.js +6 -2
  90. package/dist/schema/asset-url.d.ts +8 -0
  91. package/dist/schema/asset-url.d.ts.map +1 -1
  92. package/dist/schema/asset-url.js +17 -0
  93. package/dist/schema/nodes/roof.d.ts +1 -1
  94. package/dist/schema/nodes/roof.d.ts.map +1 -1
  95. package/dist/schema/nodes/roof.js +13 -8
  96. package/dist/schema/types.d.ts +1 -1
  97. package/dist/services/roof-level.d.ts.map +1 -1
  98. package/dist/services/roof-level.js +12 -2
  99. package/dist/services/roof-move.d.ts +4 -2
  100. package/dist/services/roof-move.d.ts.map +1 -1
  101. package/dist/services/roof-move.js +21 -9
  102. package/dist/spatial/usage-field/findings.d.ts +7 -1
  103. package/dist/spatial/usage-field/findings.d.ts.map +1 -1
  104. package/dist/spatial/usage-field/findings.js +42 -10
  105. package/dist/spatial/usage-field/path.d.ts.map +1 -1
  106. package/dist/spatial/usage-field/path.js +28 -18
  107. package/dist/store/actions/node-actions.d.ts +1641 -1641
  108. package/dist/store/scene-annotations.d.ts +1778 -1778
  109. package/dist/systems/document-reconcile.d.ts.map +1 -1
  110. package/dist/systems/document-reconcile.js +1 -2
  111. package/dist/systems/roof/roof-elevation.d.ts +11 -6
  112. package/dist/systems/roof/roof-elevation.d.ts.map +1 -1
  113. package/dist/systems/roof/roof-elevation.js +24 -11
  114. package/dist/systems/slab/__fixtures__/floor-step.d.ts +1622 -1622
  115. package/dist/systems/slab/__fixtures__/raised-room.d.ts +585 -585
  116. package/dist/systems/stair/stair-opening-preview.d.ts +1919 -1919
  117. package/dist/utils/ensure-scene-openings.d.ts +3409 -3409
  118. package/dist/utils/floor-plate-migration.d.ts +1344 -1344
  119. package/dist/utils/owned-floor-opening-migration.d.ts +1344 -1344
  120. package/dist/utils/reconcile-structure-on-load.d.ts +1641 -1641
  121. package/dist/utils/scene-bounds.d.ts +32 -0
  122. package/dist/utils/scene-bounds.d.ts.map +1 -0
  123. package/dist/utils/scene-bounds.js +201 -0
  124. package/package.json +1 -1
@@ -35,179 +35,47 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
35
35
  fromIds: string[];
36
36
  } | undefined;
37
37
  } | undefined;
38
- id: `beam_${string}`;
39
- start: [number, number];
40
- end: [number, number];
41
- width: number;
42
- depth: number;
43
- size?: string | undefined;
44
- plies: number;
45
- material: "glulam" | "lvl" | "pressure-treated" | "sawn" | "steel";
46
- placement: "dropped" | "flush";
47
- topElevation?: number | undefined;
48
- supportSlabId?: string | undefined;
49
- type: "beam";
50
- } | {
51
- object: "node";
52
- name?: string | undefined;
53
- parentId: string | null;
54
- visible: boolean;
55
- camera?: {
56
- position: [number, number, number];
57
- target: [number, number, number];
58
- mode: "orthographic" | "perspective";
59
- fov?: number | undefined;
60
- zoom?: number | undefined;
61
- } | undefined;
62
- metadata: Record<string, unknown>;
63
- provenance?: {
64
- refs: {
65
- ns?: string | undefined;
66
- id: string;
67
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
68
- }[];
69
- lineage?: {
70
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
71
- fromIds: string[];
38
+ id: `bvent_${string}`;
39
+ material?: {
40
+ id?: string | undefined;
41
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
42
+ properties?: {
43
+ color: string;
44
+ roughness: number;
45
+ metalness: number;
46
+ opacity: number;
47
+ transparent: boolean;
48
+ side: "back" | "double" | "front";
72
49
  } | undefined;
73
- } | undefined;
74
- id: `measurement_${string}`;
75
- measurement: {
76
- kind: "volume";
77
- base: ({
78
- kind: "feature";
79
- reference: {
80
- nodeId: string;
81
- featureId: string;
82
- parameters?: Record<string, string | number | boolean> | undefined;
83
- };
84
- fallback: [number, number, number];
85
- } | [number, number, number])[];
86
- extrusion: [number, number, number];
87
- } | {
88
- kind: "distance";
89
- points: [{
90
- kind: "feature";
91
- reference: {
92
- nodeId: string;
93
- featureId: string;
94
- parameters?: Record<string, string | number | boolean> | undefined;
95
- };
96
- fallback: [number, number, number];
97
- } | [number, number, number], {
98
- kind: "feature";
99
- reference: {
100
- nodeId: string;
101
- featureId: string;
102
- parameters?: Record<string, string | number | boolean> | undefined;
103
- };
104
- fallback: [number, number, number];
105
- } | [number, number, number]];
106
- } | {
107
- kind: "angle";
108
- points: [{
109
- kind: "feature";
110
- reference: {
111
- nodeId: string;
112
- featureId: string;
113
- parameters?: Record<string, string | number | boolean> | undefined;
114
- };
115
- fallback: [number, number, number];
116
- } | [number, number, number], {
117
- kind: "feature";
118
- reference: {
119
- nodeId: string;
120
- featureId: string;
121
- parameters?: Record<string, string | number | boolean> | undefined;
122
- };
123
- fallback: [number, number, number];
124
- } | [number, number, number], {
125
- kind: "feature";
126
- reference: {
127
- nodeId: string;
128
- featureId: string;
129
- parameters?: Record<string, string | number | boolean> | undefined;
130
- };
131
- fallback: [number, number, number];
132
- } | [number, number, number]];
133
- } | {
134
- kind: "area";
135
- base: ({
136
- kind: "feature";
137
- reference: {
138
- nodeId: string;
139
- featureId: string;
140
- parameters?: Record<string, string | number | boolean> | undefined;
141
- };
142
- fallback: [number, number, number];
143
- } | [number, number, number])[];
144
- } | {
145
- kind: "perimeter";
146
- base: ({
147
- kind: "feature";
148
- reference: {
149
- nodeId: string;
150
- featureId: string;
151
- parameters?: Record<string, string | number | boolean> | undefined;
152
- };
153
- fallback: [number, number, number];
154
- } | [number, number, number])[];
155
- };
156
- type: "measurement";
157
- } | {
158
- object: "node";
159
- name?: string | undefined;
160
- parentId: string | null;
161
- visible: boolean;
162
- camera?: {
163
- position: [number, number, number];
164
- target: [number, number, number];
165
- mode: "orthographic" | "perspective";
166
- fov?: number | undefined;
167
- zoom?: number | undefined;
168
- } | undefined;
169
- metadata: Record<string, unknown>;
170
- provenance?: {
171
- refs: {
172
- ns?: string | undefined;
173
- id: string;
174
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
175
- }[];
176
- lineage?: {
177
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
178
- fromIds: string[];
50
+ texture?: {
51
+ url: string;
52
+ repeat?: [number, number] | undefined;
53
+ scale?: number | undefined;
54
+ offset?: [number, number] | undefined;
55
+ normalMap?: string | undefined;
56
+ normalScale?: number | undefined;
57
+ bumpMap?: string | undefined;
58
+ bumpScale?: number | undefined;
179
59
  } | undefined;
180
60
  } | undefined;
181
- id: `duct-segment_${string}`;
182
- path: [number, number, number][];
183
- autoHangers?: boolean | undefined;
184
- hangerOverrides?: Record<string, {
185
- fraction?: number | undefined;
186
- skipped?: boolean | undefined;
187
- hostId?: string | undefined;
188
- }> | undefined;
189
- hangerStyle?: "double" | "single" | undefined;
190
- hangerSpacing?: number | undefined;
191
- hangerMaxReach?: number | undefined;
192
- wallAttachment?: {
193
- wallId: `wall_${string}`;
194
- side: "back" | "front";
195
- startUV: [number, number];
196
- endUV: [number, number];
197
- offset: number;
198
- } | undefined;
199
- shape: "oval" | "rect" | "round";
200
- diameter: number;
61
+ slots?: Record<string, string> | undefined;
62
+ materialPreset: string;
63
+ roofSegmentId?: string | undefined;
64
+ position: [number, number, number];
65
+ rotation: number;
201
66
  width: number;
67
+ depth: number;
202
68
  height: number;
203
- roll: number;
204
- ductMaterial: "duct-board" | "flex" | "sheet-metal" | "spiral";
205
- seamDetail: boolean;
206
- insulated: boolean;
207
- insulationR: number;
208
- system: "return" | "supply";
209
- slots?: Record<string, string> | undefined;
210
- type: "duct-segment";
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";
211
79
  } | {
212
80
  object: "node";
213
81
  name?: string | undefined;
@@ -232,223 +100,18 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
232
100
  fromIds: string[];
233
101
  } | undefined;
234
102
  } | undefined;
235
- id: `floor-opening_${string}`;
236
- polygon: [number, number][];
237
- hostZoneId?: string | undefined;
238
- legacyPlateCuts?: Record<string, [number, number][][]> | undefined;
239
- legacyCeilingCuts?: Record<string, [number, number][][]> | undefined;
240
- source: string;
241
- ownerId?: string | undefined;
242
- surfaceId?: string | undefined;
243
- drawnOn: "ceiling" | "floor";
244
- cutsPrimary: boolean;
245
- cutsAdjacent: boolean;
246
- type: "floor-opening";
247
- } | {
248
- object: "node";
249
- name?: string | undefined;
250
- parentId: string | null;
251
- visible: boolean;
252
- camera?: {
253
- position: [number, number, number];
254
- target: [number, number, number];
255
- mode: "orthographic" | "perspective";
256
- fov?: number | undefined;
257
- zoom?: number | undefined;
258
- } | undefined;
259
- metadata: Record<string, unknown>;
260
- provenance?: {
261
- refs: {
262
- ns?: string | undefined;
263
- id: string;
264
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
265
- }[];
266
- lineage?: {
267
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
268
- fromIds: string[];
269
- } | undefined;
270
- } | undefined;
271
- id: `lineset_${string}`;
272
- path: [number, number, number][];
273
- suctionDiameter: number;
274
- liquidDiameter: number;
275
- insulated: boolean;
276
- type: "lineset";
277
- } | {
278
- object: "node";
279
- name?: string | undefined;
280
- parentId: string | null;
281
- visible: boolean;
282
- camera?: {
283
- position: [number, number, number];
284
- target: [number, number, number];
285
- mode: "orthographic" | "perspective";
286
- fov?: number | undefined;
287
- zoom?: number | undefined;
288
- } | undefined;
289
- metadata: Record<string, unknown>;
290
- provenance?: {
291
- refs: {
292
- ns?: string | undefined;
293
- id: string;
294
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
295
- }[];
296
- lineage?: {
297
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
298
- fromIds: string[];
299
- } | undefined;
300
- } | undefined;
301
- id: `pipe-trap_${string}`;
302
- position: [number, number, number];
303
- rotation: number;
304
- diameter: number;
305
- pipeMaterial: "abs" | "cast-iron" | "pvc";
306
- armLengthM: number;
307
- type: "pipe-trap";
308
- } | {
309
- object: "node";
310
- name?: string | undefined;
311
- parentId: string | null;
312
- visible: boolean;
313
- camera?: {
314
- position: [number, number, number];
315
- target: [number, number, number];
316
- mode: "orthographic" | "perspective";
317
- fov?: number | undefined;
318
- zoom?: number | undefined;
319
- } | undefined;
320
- metadata: Record<string, unknown>;
321
- provenance?: {
322
- refs: {
323
- ns?: string | undefined;
324
- id: string;
325
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
326
- }[];
327
- lineage?: {
328
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
329
- fromIds: string[];
330
- } | undefined;
331
- } | undefined;
332
- id: `scan_${string}`;
333
- url: string | null;
334
- captureSession: {
335
- sessionId: string;
336
- schemaVersion?: number | undefined;
337
- revisionId?: string | undefined;
338
- manifestUrl?: string | undefined;
339
- } | null;
340
- layers: Record<string, boolean>;
341
- position: [number, number, number];
342
- rotation: [number, number, number];
343
- scale: number;
344
- opacity: number;
345
- type: "scan";
346
- } | {
347
- object: "node";
348
- name?: string | undefined;
349
- parentId: string | null;
350
- visible: boolean;
351
- camera?: {
352
- position: [number, number, number];
353
- target: [number, number, number];
354
- mode: "orthographic" | "perspective";
355
- fov?: number | undefined;
356
- zoom?: number | undefined;
357
- } | undefined;
358
- metadata: Record<string, unknown>;
359
- provenance?: {
360
- refs: {
361
- ns?: string | undefined;
362
- id: string;
363
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
364
- }[];
365
- lineage?: {
366
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
367
- fromIds: string[];
368
- } | undefined;
369
- } | undefined;
370
- id: `slab_${string}`;
371
- material?: {
372
- id?: string | undefined;
373
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
374
- properties?: {
375
- color: string;
376
- roughness: number;
377
- metalness: number;
378
- opacity: number;
379
- transparent: boolean;
380
- side: "back" | "double" | "front";
381
- } | undefined;
382
- texture?: {
383
- url: string;
384
- repeat?: [number, number] | undefined;
385
- scale?: number | undefined;
386
- offset?: [number, number] | undefined;
387
- normalMap?: string | undefined;
388
- normalScale?: number | undefined;
389
- bumpMap?: string | undefined;
390
- bumpScale?: number | undefined;
391
- } | undefined;
392
- } | undefined;
393
- materialPreset?: string | undefined;
394
- slots?: Record<string, string> | undefined;
395
- polygon: [number, number][];
396
- holes: [number, number][][];
397
- holeMetadata: {
398
- source: "elevator" | "floor-opening" | "manual" | "room" | "stair";
399
- openingId?: string | undefined;
400
- stairId?: string | undefined;
401
- elevatorId?: string | undefined;
402
- }[];
403
- elevation: number;
404
- floorHeight?: number | undefined;
405
- referenceFloorElevation?: number | undefined;
406
- foundation?: {
407
- type: "none" | "solid";
408
- material?: string | {
409
- id?: string | undefined;
410
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
411
- properties?: {
412
- color: string;
413
- roughness: number;
414
- metalness: number;
415
- opacity: number;
416
- transparent: boolean;
417
- side: "back" | "double" | "front";
418
- } | undefined;
419
- texture?: {
420
- url: string;
421
- repeat?: [number, number] | undefined;
422
- scale?: number | undefined;
423
- offset?: [number, number] | undefined;
424
- normalMap?: string | undefined;
425
- normalScale?: number | undefined;
426
- bumpMap?: string | undefined;
427
- bumpScale?: number | undefined;
428
- } | undefined;
429
- } | undefined;
430
- } | undefined;
431
- thickness: number;
432
- recessed: boolean;
433
- recessedRimElevation?: number | undefined;
434
- fillToTerrain?: boolean | undefined;
435
- boundary?: "auto" | undefined;
436
- support?: "open" | undefined;
437
- plateRole?: "base" | "platform" | "sunken" | undefined;
438
- railing?: {
439
- start: [number, number];
440
- end: [number, number];
441
- }[] | undefined;
442
- zoneIds?: string[] | undefined;
443
- associatedZoneIds?: string[] | undefined;
444
- autoFromWalls: boolean;
445
- surfaceScript?: {
446
- kind: "script";
447
- meta?: {
448
- description?: string | undefined;
449
- category?: string | undefined;
450
- tags?: string[] | undefined;
451
- parent?: string | undefined;
103
+ id: `column_${string}`;
104
+ children: string[];
105
+ position: [number, number, number];
106
+ rotation: number;
107
+ supportSlabId?: string | undefined;
108
+ source?: {
109
+ kind: "script";
110
+ meta?: {
111
+ description?: string | undefined;
112
+ category?: string | undefined;
113
+ tags?: string[] | undefined;
114
+ parent?: string | undefined;
452
115
  } | undefined;
453
116
  language: "bpy" | "three";
454
117
  script: string;
@@ -555,94 +218,80 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
555
218
  thumbnail: string;
556
219
  floorPlan: string;
557
220
  } | undefined;
558
- inputs: string;
559
- } | undefined;
560
- type: "slab";
561
- } | {
562
- object: "node";
563
- name?: string | undefined;
564
- parentId: string | null;
565
- visible: boolean;
566
- camera?: {
567
- position: [number, number, number];
568
- target: [number, number, number];
569
- mode: "orthographic" | "perspective";
570
- fov?: number | undefined;
571
- zoom?: number | undefined;
572
- } | undefined;
573
- metadata: Record<string, unknown>;
574
- provenance?: {
575
- refs: {
576
- ns?: string | undefined;
577
- id: string;
578
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
579
- }[];
580
- lineage?: {
581
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
582
- fromIds: string[];
583
- } | undefined;
584
- } | undefined;
585
- id: `structural-grid_${string}`;
586
- start: [number, number];
587
- end: [number, number];
588
- label: string;
589
- showStartBubble: boolean;
590
- showEndBubble: boolean;
591
- type: "structural-grid";
592
- } | {
593
- object: "node";
594
- parentId: string | null;
595
- visible: boolean;
596
- camera?: {
597
- position: [number, number, number];
598
- target: [number, number, number];
599
- mode: "orthographic" | "perspective";
600
- fov?: number | undefined;
601
- zoom?: number | undefined;
602
- } | undefined;
603
- provenance?: {
604
- refs: {
605
- ns?: string | undefined;
606
- id: string;
607
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
608
- }[];
609
- lineage?: {
610
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
611
- fromIds: string[];
612
- } | undefined;
613
- } | undefined;
614
- id: `unit_${string}`;
615
- name: string;
616
- kind: "apartment" | "commercial" | "common" | "hotel-room";
617
- members: `zone_${string}`[];
618
- color: string;
619
- metadata: Record<string, unknown>;
620
- type: "unit";
621
- } | {
622
- object: "node";
623
- name?: string | undefined;
624
- parentId: string | null;
625
- visible: boolean;
626
- camera?: {
627
- position: [number, number, number];
628
- target: [number, number, number];
629
- mode: "orthographic" | "perspective";
630
- fov?: number | undefined;
631
- zoom?: number | undefined;
632
221
  } | undefined;
633
- metadata: Record<string, unknown>;
634
- provenance?: {
635
- refs: {
636
- ns?: string | undefined;
637
- id: string;
638
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
639
- }[];
640
- lineage?: {
641
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
642
- fromIds: string[];
643
- } | undefined;
644
- } | undefined;
645
- id: `cupola_${string}`;
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;
646
295
  material?: {
647
296
  id?: string | undefined;
648
297
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
@@ -665,17 +314,9 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
665
314
  bumpScale?: number | undefined;
666
315
  } | undefined;
667
316
  } | undefined;
317
+ materialPreset?: string | undefined;
668
318
  slots?: Record<string, string> | undefined;
669
- materialPreset: string;
670
- roofSegmentId?: string | undefined;
671
- position: [number, number, number];
672
- rotation: number;
673
- width: number;
674
- depth: number;
675
- height: number;
676
- roofStyle: "dome" | "pyramid";
677
- finial: boolean;
678
- type: "cupola";
319
+ type: "column";
679
320
  } | {
680
321
  object: "node";
681
322
  name?: string | undefined;
@@ -700,27 +341,29 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
700
341
  fromIds: string[];
701
342
  } | undefined;
702
343
  } | undefined;
703
- matchFenceStyle?: boolean | undefined;
704
- matchFenceHeight?: boolean | undefined;
705
- leafType?: "double" | "single" | undefined;
706
- style?: "guard" | "horizontal" | "match" | "picket" | "privacy" | "rail" | "slat" | undefined;
707
- height?: number | undefined;
708
- clearance?: number | undefined;
709
- thickness?: number | undefined;
710
- frameWidth?: number | undefined;
711
- spacing?: number | undefined;
712
- boardWidth?: number | undefined;
713
- hinge?: "left" | "right" | undefined;
714
- swing?: "inward" | "outward" | undefined;
715
- openAngle?: number | undefined;
716
- leafSplit?: number | undefined;
717
- brace?: "cross" | "diagonal" | "none" | undefined;
718
- showHardware?: boolean | undefined;
719
- showPosts?: boolean | undefined;
720
- id: `fence-gate_${string}`;
721
- center: number;
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;
722
351
  width: number;
723
- type: "fence-gate";
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";
724
367
  } | {
725
368
  object: "node";
726
369
  name?: string | undefined;
@@ -745,14 +388,23 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
745
388
  fromIds: string[];
746
389
  } | undefined;
747
390
  } | undefined;
748
- center: number;
391
+ id: `hvac-equipment_${string}`;
392
+ position: [number, number, number];
393
+ rotation: number;
394
+ supportSlabId?: string | undefined;
395
+ equipmentType: "air-handler" | "condenser" | "furnace";
749
396
  width: number;
750
- matchFenceStyle?: boolean | undefined;
751
- matchFenceHeight?: boolean | undefined;
752
- height?: number | undefined;
753
- showPosts: boolean;
754
- id: `fence-opening_${string}`;
755
- type: "fence-opening";
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";
756
408
  } | {
757
409
  object: "node";
758
410
  name?: string | undefined;
@@ -777,77 +429,17 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
777
429
  fromIds: string[];
778
430
  } | undefined;
779
431
  } | undefined;
780
- id: `skylight_${string}`;
781
- material?: {
782
- id?: string | undefined;
783
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
784
- properties?: {
785
- color: string;
786
- roughness: number;
787
- metalness: number;
788
- opacity: number;
789
- transparent: boolean;
790
- side: "back" | "double" | "front";
791
- } | undefined;
792
- texture?: {
793
- url: string;
794
- repeat?: [number, number] | undefined;
795
- scale?: number | undefined;
796
- offset?: [number, number] | undefined;
797
- normalMap?: string | undefined;
798
- normalScale?: number | undefined;
799
- bumpMap?: string | undefined;
800
- bumpScale?: number | undefined;
801
- } | undefined;
802
- } | undefined;
803
- materialPreset?: string | undefined;
804
- glassMaterial?: {
805
- id?: string | undefined;
806
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
807
- properties?: {
808
- color: string;
809
- roughness: number;
810
- metalness: number;
811
- opacity: number;
812
- transparent: boolean;
813
- side: "back" | "double" | "front";
814
- } | undefined;
815
- texture?: {
816
- url: string;
817
- repeat?: [number, number] | undefined;
818
- scale?: number | undefined;
819
- offset?: [number, number] | undefined;
820
- normalMap?: string | undefined;
821
- normalScale?: number | undefined;
822
- bumpMap?: string | undefined;
823
- bumpScale?: number | undefined;
824
- } | undefined;
825
- } | undefined;
826
- glassMaterialPreset?: string | undefined;
827
- roofSegmentId?: string | undefined;
432
+ id: `pipe-fitting_${string}`;
828
433
  position: [number, number, number];
829
- rotation: number;
830
- width: number;
831
- height: number;
832
- frameThickness: number;
833
- frameDepth: number;
834
- skylightType: "flat" | "lantern" | "opening" | "sliding" | "walk-on";
835
- glassThickness: number;
836
- lanternHeight: number;
837
- lanternTopScale: number;
838
- openingAngle: number;
839
- openingSide: "bottom" | "left" | "right" | "top";
840
- operationState: number;
841
- motorHousing: boolean;
842
- slideFraction: number;
843
- slideDirection: "x" | "z";
844
- trackWidth: number;
845
- motorHousingSize: number;
846
- curb: boolean;
847
- curbHeight: number;
848
- cutoutOffset: number;
849
- surfaceNormal?: [number, number, number] | undefined;
850
- type: "skylight";
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";
851
443
  } | {
852
444
  object: "node";
853
445
  name?: string | undefined;
@@ -1040,481 +632,30 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
1040
632
  inset?: number | undefined;
1041
633
  bottom?: number | undefined;
1042
634
  lift?: number | undefined;
1043
- src?: string | undefined;
1044
- }[];
1045
- backing?: {
1046
- id: string;
1047
- role: "air" | "covering" | "deck" | "fill" | "finish" | "furring" | "glazing" | "insulation" | "lining" | "membrane" | "sheathing" | "shell" | "structure" | "substrate" | "underlay";
1048
- thickness: number;
1049
- core?: true | undefined;
1050
- spacing?: number | undefined;
1051
- material?: string | undefined;
1052
- slot?: string | undefined;
1053
- returns?: boolean | undefined;
1054
- display?: "construction" | "finished" | undefined;
1055
- inset?: number | undefined;
1056
- bottom?: number | undefined;
1057
- lift?: number | undefined;
1058
- src?: string | undefined;
1059
- }[] | undefined;
1060
- face?: "exterior" | "front" | undefined;
1061
- presetId?: string | undefined;
1062
- cavityInsulation?: string | undefined;
1063
- };
1064
- }[] | undefined;
1065
- children: string[];
1066
- type: "site";
1067
- } | {
1068
- object: "node";
1069
- name?: string | undefined;
1070
- parentId: string | null;
1071
- visible: boolean;
1072
- camera?: {
1073
- position: [number, number, number];
1074
- target: [number, number, number];
1075
- mode: "orthographic" | "perspective";
1076
- fov?: number | undefined;
1077
- zoom?: number | undefined;
1078
- } | undefined;
1079
- metadata: Record<string, unknown>;
1080
- provenance?: {
1081
- refs: {
1082
- ns?: string | undefined;
1083
- id: string;
1084
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
1085
- }[];
1086
- lineage?: {
1087
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
1088
- fromIds: string[];
1089
- } | undefined;
1090
- } | undefined;
1091
- type: "item";
1092
- id: `item_${string}`;
1093
- position: [number, number, number];
1094
- rotation: [number, number, number];
1095
- scale: [number, number, number];
1096
- side?: "back" | "front" | undefined;
1097
- children: string[];
1098
- wallId?: string | undefined;
1099
- wallT?: number | undefined;
1100
- roofSegmentId?: string | undefined;
1101
- roofFace?: "back" | "front" | "left" | "right" | undefined;
1102
- blockFaceId?: string | undefined;
1103
- supportSlabId?: string | undefined;
1104
- collectionIds?: `collection_${string}`[] | undefined;
1105
- slots?: Record<string, string> | undefined;
1106
- source?: {
1107
- kind: "script";
1108
- meta?: {
1109
- description?: string | undefined;
1110
- category?: string | undefined;
1111
- tags?: string[] | undefined;
1112
- parent?: string | undefined;
1113
- } | undefined;
1114
- language: "bpy" | "three";
1115
- script: string;
1116
- params: Record<string, string | number | boolean>;
1117
- artifact: string;
1118
- manifest: {
1119
- bounds: {
1120
- min: [number, number, number];
1121
- max: [number, number, number];
1122
- };
1123
- params: {
1124
- id: string;
1125
- label?: string | undefined;
1126
- kind: "boolean" | "number" | "string";
1127
- default: string | number | boolean;
1128
- min?: number | undefined;
1129
- max?: number | undefined;
1130
- step?: number | undefined;
1131
- unit?: string | undefined;
1132
- options?: string[] | undefined;
1133
- }[];
1134
- parts: {
1135
- id: string;
1136
- label?: string | undefined;
1137
- type?: string | undefined;
1138
- bounds?: {
1139
- min: [number, number, number];
1140
- max: [number, number, number];
1141
- } | undefined;
1142
- }[];
1143
- surfaces: {
1144
- part?: string | undefined;
1145
- y: number;
1146
- polygon: [number, number][];
1147
- }[];
1148
- slots: {
1149
- id: string;
1150
- label?: string | undefined;
1151
- color?: string | undefined;
1152
- roughness?: number | undefined;
1153
- metalness?: number | undefined;
1154
- transparent?: boolean | undefined;
1155
- emissive?: boolean | undefined;
1156
- }[];
1157
- anchors: {
1158
- id: string;
1159
- position: [number, number, number];
1160
- normal?: [number, number, number] | undefined;
1161
- }[];
1162
- lights: {
1163
- id: string;
1164
- position: [number, number, number];
1165
- color: string;
1166
- intensity: number;
1167
- distance?: number | undefined;
1168
- spot?: {
1169
- direction: [number, number, number];
1170
- angle: number;
1171
- softness: number;
1172
- } | undefined;
1173
- shadows?: boolean | undefined;
1174
- glow?: {
1175
- size: number;
1176
- strength: number;
1177
- } | undefined;
1178
- }[];
1179
- undersides: {
1180
- part?: string | undefined;
1181
- polygon: [number, number][];
1182
- plane: [number, number, number, number];
1183
- }[];
1184
- animations: {
1185
- name: string;
1186
- duration: number;
1187
- }[];
1188
- cutters?: {
1189
- host: "ceiling" | "mounted" | "slab" | "wall";
1190
- polygon: number[][];
1191
- minY: number;
1192
- maxY: number;
1193
- }[] | undefined;
1194
- cutout: boolean;
1195
- collider: boolean;
1196
- shape?: {
1197
- tolerance: number;
1198
- bands: {
1199
- y0: number;
1200
- y1: number;
1201
- polygons: {
1202
- outer: [number, number][];
1203
- holes?: [number, number][][] | undefined;
1204
- }[];
1205
- }[];
1206
- } | undefined;
1207
- triangles: number;
1208
- coverage?: number | undefined;
1209
- uncovered?: {
1210
- min: [number, number];
1211
- max: [number, number];
1212
- }[] | undefined;
1213
- };
1214
- images?: {
1215
- artifact: string;
1216
- thumbnail: string;
1217
- floorPlan: string;
1218
- } | undefined;
1219
- } | undefined;
1220
- asset: {
1221
- id: string;
1222
- category: string;
1223
- name: string;
1224
- thumbnail: string;
1225
- floorPlanUrl?: string | undefined;
1226
- source: "community" | "library" | "mine";
1227
- isDraft?: boolean | undefined;
1228
- src: string;
1229
- dimensions: [number, number, number];
1230
- attachTo?: "ceiling" | "wall" | "wall-side" | undefined;
1231
- recessed?: boolean | undefined;
1232
- tags?: string[] | undefined;
1233
- functionTags?: string[] | undefined;
1234
- offset: [number, number, number];
1235
- rotation: [number, number, number];
1236
- scale: [number, number, number];
1237
- surface?: {
1238
- height: number;
1239
- } | undefined;
1240
- interactive?: {
1241
- controls: ({
1242
- kind: "toggle";
1243
- label?: string | undefined;
1244
- default?: boolean | undefined;
1245
- } | {
1246
- kind: "slider";
1247
- label: string;
1248
- min: number;
1249
- max: number;
1250
- step: number;
1251
- unit?: string | undefined;
1252
- displayMode: "dial" | "slider" | "stepper";
1253
- default?: number | undefined;
1254
- } | {
1255
- kind: "temperature";
1256
- label: string;
1257
- min: number;
1258
- max: number;
1259
- unit: "C" | "F";
1260
- default?: number | undefined;
1261
- })[];
1262
- effects: ({
1263
- kind: "animation";
1264
- mode?: "ambient" | "open-close" | undefined;
1265
- control?: number | undefined;
1266
- clips: {
1267
- on?: string | undefined;
1268
- off?: string | undefined;
1269
- loop?: string | undefined;
1270
- };
1271
- } | {
1272
- kind: "light";
1273
- color: string;
1274
- intensityRange: [number, number];
1275
- distance?: number | undefined;
1276
- offset: [number, number, number];
1277
- spot?: {
1278
- direction: [number, number, number];
1279
- angle: number;
1280
- softness: number;
1281
- } | undefined;
1282
- shadows?: boolean | undefined;
1283
- glow?: {
1284
- size: number;
1285
- strength: number;
1286
- } | undefined;
1287
- })[];
1288
- } | undefined;
1289
- };
1290
- } | {
1291
- object: "node";
1292
- name?: string | undefined;
1293
- parentId: string | null;
1294
- visible: boolean;
1295
- camera?: {
1296
- position: [number, number, number];
1297
- target: [number, number, number];
1298
- mode: "orthographic" | "perspective";
1299
- fov?: number | undefined;
1300
- zoom?: number | undefined;
1301
- } | undefined;
1302
- metadata: Record<string, unknown>;
1303
- provenance?: {
1304
- refs: {
1305
- ns?: string | undefined;
1306
- id: string;
1307
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
1308
- }[];
1309
- lineage?: {
1310
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
1311
- fromIds: string[];
1312
- } | undefined;
1313
- } | undefined;
1314
- id: `door_${string}`;
1315
- material?: {
1316
- id?: string | undefined;
1317
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1318
- properties?: {
1319
- color: string;
1320
- roughness: number;
1321
- metalness: number;
1322
- opacity: number;
1323
- transparent: boolean;
1324
- side: "back" | "double" | "front";
1325
- } | undefined;
1326
- texture?: {
1327
- url: string;
1328
- repeat?: [number, number] | undefined;
1329
- scale?: number | undefined;
1330
- offset?: [number, number] | undefined;
1331
- normalMap?: string | undefined;
1332
- normalScale?: number | undefined;
1333
- bumpMap?: string | undefined;
1334
- bumpScale?: number | undefined;
1335
- } | undefined;
1336
- } | undefined;
1337
- slots?: Record<string, string> | undefined;
1338
- source?: {
1339
- kind: "script";
1340
- meta?: {
1341
- description?: string | undefined;
1342
- category?: string | undefined;
1343
- tags?: string[] | undefined;
1344
- parent?: string | undefined;
1345
- } | undefined;
1346
- language: "bpy" | "three";
1347
- script: string;
1348
- params: Record<string, string | number | boolean>;
1349
- artifact: string;
1350
- manifest: {
1351
- bounds: {
1352
- min: [number, number, number];
1353
- max: [number, number, number];
1354
- };
1355
- params: {
1356
- id: string;
1357
- label?: string | undefined;
1358
- kind: "boolean" | "number" | "string";
1359
- default: string | number | boolean;
1360
- min?: number | undefined;
1361
- max?: number | undefined;
1362
- step?: number | undefined;
1363
- unit?: string | undefined;
1364
- options?: string[] | undefined;
1365
- }[];
1366
- parts: {
1367
- id: string;
1368
- label?: string | undefined;
1369
- type?: string | undefined;
1370
- bounds?: {
1371
- min: [number, number, number];
1372
- max: [number, number, number];
1373
- } | undefined;
1374
- }[];
1375
- surfaces: {
1376
- part?: string | undefined;
1377
- y: number;
1378
- polygon: [number, number][];
1379
- }[];
1380
- slots: {
1381
- id: string;
1382
- label?: string | undefined;
1383
- color?: string | undefined;
1384
- roughness?: number | undefined;
1385
- metalness?: number | undefined;
1386
- transparent?: boolean | undefined;
1387
- emissive?: boolean | undefined;
1388
- }[];
1389
- anchors: {
1390
- id: string;
1391
- position: [number, number, number];
1392
- normal?: [number, number, number] | undefined;
1393
- }[];
1394
- lights: {
1395
- id: string;
1396
- position: [number, number, number];
1397
- color: string;
1398
- intensity: number;
1399
- distance?: number | undefined;
1400
- spot?: {
1401
- direction: [number, number, number];
1402
- angle: number;
1403
- softness: number;
1404
- } | undefined;
1405
- shadows?: boolean | undefined;
1406
- glow?: {
1407
- size: number;
1408
- strength: number;
1409
- } | undefined;
1410
- }[];
1411
- undersides: {
1412
- part?: string | undefined;
1413
- polygon: [number, number][];
1414
- plane: [number, number, number, number];
1415
- }[];
1416
- animations: {
1417
- name: string;
1418
- duration: number;
1419
- }[];
1420
- cutters?: {
1421
- host: "ceiling" | "mounted" | "slab" | "wall";
1422
- polygon: number[][];
1423
- minY: number;
1424
- maxY: number;
1425
- }[] | undefined;
1426
- cutout: boolean;
1427
- collider: boolean;
1428
- shape?: {
1429
- tolerance: number;
1430
- bands: {
1431
- y0: number;
1432
- y1: number;
1433
- polygons: {
1434
- outer: [number, number][];
1435
- holes?: [number, number][][] | undefined;
1436
- }[];
1437
- }[];
1438
- } | undefined;
1439
- triangles: number;
1440
- coverage?: number | undefined;
1441
- uncovered?: {
1442
- min: [number, number];
1443
- max: [number, number];
635
+ src?: string | undefined;
636
+ }[];
637
+ backing?: {
638
+ id: string;
639
+ role: "air" | "covering" | "deck" | "fill" | "finish" | "furring" | "glazing" | "insulation" | "lining" | "membrane" | "sheathing" | "shell" | "structure" | "substrate" | "underlay";
640
+ thickness: number;
641
+ core?: true | undefined;
642
+ spacing?: number | undefined;
643
+ material?: string | undefined;
644
+ slot?: string | undefined;
645
+ returns?: boolean | undefined;
646
+ display?: "construction" | "finished" | undefined;
647
+ inset?: number | undefined;
648
+ bottom?: number | undefined;
649
+ lift?: number | undefined;
650
+ src?: string | undefined;
1444
651
  }[] | undefined;
652
+ face?: "exterior" | "front" | undefined;
653
+ presetId?: string | undefined;
654
+ cavityInsulation?: string | undefined;
1445
655
  };
1446
- images?: {
1447
- artifact: string;
1448
- thumbnail: string;
1449
- floorPlan: string;
1450
- } | undefined;
1451
- } | undefined;
1452
- position: [number, number, number];
1453
- rotation: [number, number, number];
1454
- side?: "back" | "front" | undefined;
1455
- verticalAnchor?: "floor" | "wall" | undefined;
1456
- floorThresholdVersion: 0 | 1;
1457
- wallId?: string | undefined;
1458
- roofSegmentId?: string | undefined;
1459
- roofFace?: "back" | "front" | "left" | "right" | undefined;
1460
- width: number;
1461
- height: number;
1462
- sidelightLeft?: number | undefined;
1463
- sidelightRight?: number | undefined;
1464
- transomHeight?: number | undefined;
1465
- slidingStyle?: "bypass" | "patio" | undefined;
1466
- mark?: string | undefined;
1467
- constructionType: "framed" | "masonry";
1468
- dimensionReference: "finish-opening" | "masonry-opening" | "nominal" | "rough-opening";
1469
- roughOpeningWidth?: number | undefined;
1470
- roughOpeningHeight?: number | undefined;
1471
- masonryOpeningWidth?: number | undefined;
1472
- masonryOpeningHeight?: number | undefined;
1473
- finishOpeningWidth?: number | undefined;
1474
- finishOpeningHeight?: number | undefined;
1475
- doorCategory: "garage" | "interior";
1476
- doorType: "barn" | "double" | "folding" | "french" | "garage-rollup" | "garage-sectional" | "garage-tiltup" | "hinged" | "pocket" | "sliding";
1477
- leafCount: 1 | 2 | 3 | 4 | 6 | 8;
1478
- operationState: number;
1479
- slideDirection: "left" | "right";
1480
- trackStyle: "none" | "overhead" | "pocket" | "visible";
1481
- garagePanelCount: number;
1482
- openingKind: "door" | "opening";
1483
- openingShape: "arch" | "rectangle" | "rounded";
1484
- openingRadiusMode: "all" | "individual";
1485
- openingTopRadii: [number, number];
1486
- cornerRadius: number;
1487
- archHeight: number;
1488
- openingRevealRadius: number;
1489
- frameThickness: number;
1490
- frameDepth?: number | undefined;
1491
- threshold: boolean;
1492
- thresholdHeight: number;
1493
- casingFaceA?: boolean | undefined;
1494
- casingFaceB?: boolean | undefined;
1495
- casingWidth?: number | undefined;
1496
- hingesSide: "left" | "right";
1497
- swingDirection: "inward" | "outward";
1498
- swingAngle: number;
1499
- segments: {
1500
- type: "empty" | "glass" | "panel";
1501
- heightRatio: number;
1502
- columnRatios: number[];
1503
- dividerThickness: number;
1504
- panelDepth: number;
1505
- panelInset: number;
1506
- }[];
1507
- handle: boolean;
1508
- handleStyle?: "bar" | "knob" | "lever" | "lever-curved" | "plate" | undefined;
1509
- handleHeight: number;
1510
- handleSide: "left" | "right";
1511
- contentPadding: [number, number];
1512
- doorCloser: boolean;
1513
- panicBar: boolean;
1514
- panicBarStyle: "crossbar" | "touchbar";
1515
- panicBarRods: boolean;
1516
- panicBarHeight: number;
1517
- type: "door";
656
+ }[] | undefined;
657
+ children: string[];
658
+ type: "site";
1518
659
  } | {
1519
660
  object: "node";
1520
661
  name?: string | undefined;
@@ -1539,29 +680,20 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
1539
680
  fromIds: string[];
1540
681
  } | undefined;
1541
682
  } | undefined;
1542
- id: `window_${string}`;
1543
- material?: {
1544
- id?: string | undefined;
1545
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1546
- properties?: {
1547
- color: string;
1548
- roughness: number;
1549
- metalness: number;
1550
- opacity: number;
1551
- transparent: boolean;
1552
- side: "back" | "double" | "front";
1553
- } | undefined;
1554
- texture?: {
1555
- url: string;
1556
- repeat?: [number, number] | undefined;
1557
- scale?: number | undefined;
1558
- offset?: [number, number] | undefined;
1559
- normalMap?: string | undefined;
1560
- normalScale?: number | undefined;
1561
- bumpMap?: string | undefined;
1562
- bumpScale?: number | undefined;
1563
- } | undefined;
1564
- } | 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;
1565
697
  slots?: Record<string, string> | undefined;
1566
698
  source?: {
1567
699
  kind: "script";
@@ -1677,73 +809,76 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
1677
809
  floorPlan: string;
1678
810
  } | undefined;
1679
811
  } | undefined;
1680
- position: [number, number, number];
1681
- rotation: [number, number, number];
1682
- side?: "back" | "front" | undefined;
1683
- verticalAnchor?: "floor" | "wall" | undefined;
1684
- floorThresholdVersion: 0 | 1;
1685
- wallId?: string | undefined;
1686
- dormerId?: string | undefined;
1687
- dormerFace?: "back" | "front" | "left" | "right" | undefined;
1688
- roofSegmentId?: string | undefined;
1689
- roofFace?: "back" | "front" | "left" | "right" | undefined;
1690
- width: number;
1691
- height: number;
1692
- mark?: string | undefined;
1693
- constructionType: "framed" | "masonry";
1694
- dimensionReference: "finish-opening" | "masonry-opening" | "nominal" | "rough-opening";
1695
- roughOpeningWidth?: number | undefined;
1696
- roughOpeningHeight?: number | undefined;
1697
- masonryOpeningWidth?: number | undefined;
1698
- masonryOpeningHeight?: number | undefined;
1699
- finishOpeningWidth?: number | undefined;
1700
- finishOpeningHeight?: number | undefined;
1701
- openingKind: "opening" | "window";
1702
- windowType: "awning" | "bay" | "bow" | "casement" | "double-hung" | "fixed" | "hopper" | "louvered" | "single-hung" | "sliding" | "tilt-turn";
1703
- operationState: number;
1704
- openingDirection?: "inward" | "outward" | undefined;
1705
- tiltTurnMode?: "tilt" | "turn" | undefined;
1706
- awningDirection: "down" | "up";
1707
- casementStyle: "french" | "single";
1708
- hingesSide: "left" | "right";
1709
- openingShape: "arch" | "rectangle" | "rounded";
1710
- openingRadiusMode: "all" | "individual";
1711
- openingCornerRadii: [number, number, number, number];
1712
- cornerRadius: number;
1713
- archHeight: number;
1714
- openingRevealRadius: number;
1715
- frameThickness: number;
1716
- frameDepth?: number | undefined;
1717
- windowHandle?: boolean | undefined;
1718
- sashGrid?: boolean | undefined;
1719
- columnRatios: number[];
1720
- rowRatios: number[];
1721
- columnDividerThickness: number;
1722
- rowDividerThickness: number;
1723
- corner?: {
1724
- end: "end" | "start";
1725
- partnerId: string;
1726
- post: "none" | "post";
1727
- } | undefined;
1728
- sill: boolean;
1729
- sillDepth: number;
1730
- sillThickness: number;
1731
- sillOverhang?: number | undefined;
1732
- sillInterior?: boolean | undefined;
1733
- sillInteriorDepth?: number | undefined;
1734
- sillInteriorThickness?: number | undefined;
1735
- sillInteriorOverhang?: number | undefined;
1736
- shutters?: "board-batten" | "louvered" | "none" | "panel" | undefined;
1737
- shutterWidth?: number | undefined;
1738
- shutterOpen?: number | undefined;
1739
- shutterSides?: "both" | "left" | "right" | undefined;
1740
- rollerShutter?: "box" | "concealed" | "none" | undefined;
1741
- rollerShutterBoxHeight?: number | undefined;
1742
- rollerShutterOpen?: number | undefined;
1743
- casingFaceA?: boolean | undefined;
1744
- casingFaceB?: boolean | undefined;
1745
- casingWidth?: number | undefined;
1746
- type: "window";
812
+ asset: {
813
+ id: string;
814
+ category: string;
815
+ name: string;
816
+ thumbnail: string;
817
+ floorPlanUrl?: string | undefined;
818
+ source: "community" | "library" | "mine";
819
+ isDraft?: boolean | undefined;
820
+ src: string;
821
+ dimensions: [number, number, number];
822
+ attachTo?: "ceiling" | "wall" | "wall-side" | undefined;
823
+ recessed?: boolean | undefined;
824
+ tags?: string[] | undefined;
825
+ functionTags?: string[] | undefined;
826
+ offset: [number, number, number];
827
+ rotation: [number, number, number];
828
+ scale: [number, number, number];
829
+ surface?: {
830
+ height: number;
831
+ } | undefined;
832
+ interactive?: {
833
+ controls: ({
834
+ kind: "toggle";
835
+ label?: string | undefined;
836
+ default?: boolean | undefined;
837
+ } | {
838
+ kind: "slider";
839
+ label: string;
840
+ min: number;
841
+ max: number;
842
+ step: number;
843
+ unit?: string | undefined;
844
+ displayMode: "dial" | "slider" | "stepper";
845
+ default?: number | undefined;
846
+ } | {
847
+ kind: "temperature";
848
+ label: string;
849
+ min: number;
850
+ max: number;
851
+ unit: "C" | "F";
852
+ default?: number | undefined;
853
+ })[];
854
+ effects: ({
855
+ kind: "animation";
856
+ mode?: "ambient" | "open-close" | undefined;
857
+ control?: number | undefined;
858
+ clips: {
859
+ on?: string | undefined;
860
+ off?: string | undefined;
861
+ loop?: string | undefined;
862
+ };
863
+ } | {
864
+ kind: "light";
865
+ color: string;
866
+ intensityRange: [number, number];
867
+ distance?: number | undefined;
868
+ offset: [number, number, number];
869
+ spot?: {
870
+ direction: [number, number, number];
871
+ angle: number;
872
+ softness: number;
873
+ } | undefined;
874
+ shadows?: boolean | undefined;
875
+ glow?: {
876
+ size: number;
877
+ strength: number;
878
+ } | undefined;
879
+ })[];
880
+ } | undefined;
881
+ };
1747
882
  } | {
1748
883
  object: "node";
1749
884
  name?: string | undefined;
@@ -1768,11 +903,30 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
1768
903
  fromIds: string[];
1769
904
  } | undefined;
1770
905
  } | undefined;
1771
- id: `column_${string}`;
1772
- children: string[];
1773
- position: [number, number, number];
1774
- rotation: number;
1775
- supportSlabId?: string | undefined;
906
+ id: `door_${string}`;
907
+ material?: {
908
+ id?: string | undefined;
909
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
910
+ properties?: {
911
+ color: string;
912
+ roughness: number;
913
+ metalness: number;
914
+ opacity: number;
915
+ transparent: boolean;
916
+ side: "back" | "double" | "front";
917
+ } | undefined;
918
+ texture?: {
919
+ url: string;
920
+ repeat?: [number, number] | undefined;
921
+ scale?: number | undefined;
922
+ offset?: [number, number] | undefined;
923
+ normalMap?: string | undefined;
924
+ normalScale?: number | undefined;
925
+ bumpMap?: string | undefined;
926
+ bumpScale?: number | undefined;
927
+ } | undefined;
928
+ } | undefined;
929
+ slots?: Record<string, string> | undefined;
1776
930
  source?: {
1777
931
  kind: "script";
1778
932
  meta?: {
@@ -1887,79 +1041,97 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
1887
1041
  floorPlan: string;
1888
1042
  } | undefined;
1889
1043
  } | undefined;
1890
- style: "cluster" | "dravidian-carved" | "faceted" | "fluted" | "lathe-turned" | "plain";
1891
- crossSection: "octagonal" | "rectangular" | "round" | "sixteen-sided" | "square";
1892
- height: number;
1893
- radius: number;
1044
+ position: [number, number, number];
1045
+ rotation: [number, number, number];
1046
+ side?: "back" | "front" | undefined;
1047
+ verticalAnchor?: "floor" | "wall" | undefined;
1048
+ floorThresholdVersion: 0 | 1;
1049
+ wallId?: string | undefined;
1050
+ roofSegmentId?: string | undefined;
1051
+ roofFace?: "back" | "front" | "left" | "right" | undefined;
1894
1052
  width: number;
1895
- depth: number;
1896
- edgeSoftness: number;
1897
- baseHeight: number;
1898
- capitalHeight: number;
1899
- shaftProfile: "baluster" | "bulged" | "hourglass" | "straight" | "tapered";
1900
- shaftTaper: number;
1901
- shaftBulge: number;
1902
- shaftStartScale: number;
1903
- shaftEndScale: number;
1904
- shaftSegmentCount: number;
1905
- shaftTwistStep: number;
1906
- shaftCornerRadius: number;
1907
- shaftDetail: "fluted" | "lathe-turned" | "none" | "panelled" | "spiral";
1908
- baseStyle: "lotus" | "none" | "panelled-pedestal" | "ribbed-lotus" | "round-rings" | "simple-square" | "square-plinth" | "stepped-square";
1909
- baseWidthScale: number;
1910
- baseDepthScale: number;
1911
- baseTierCount: number;
1912
- baseStepSpread: number;
1913
- basePlinthHeightRatio: number;
1914
- baseRoundBandScale: number;
1915
- baseNeckScale: number;
1916
- baseRoundBandCount: number;
1917
- baseRibCount: number;
1918
- baseCarvingLevel: number;
1919
- basePanelInset: number;
1920
- capitalStyle: "corinthian-leaf" | "doric" | "ionic-volute" | "leaf-carved" | "none" | "rounded" | "simple" | "simple-slab" | "south-indian-bracket" | "stepped" | "volute" | "wood-bracket";
1921
- capitalWidthScale: number;
1922
- capitalDepthScale: number;
1923
- capitalTierCount: number;
1924
- capitalStepSpread: number;
1925
- capitalBandCount: number;
1926
- voluteSize: number;
1927
- voluteCount: number;
1928
- leafCount: number;
1929
- leafRows: number;
1930
- bracketDepth: number;
1931
- bracketTierCount: number;
1932
- pendantCount: number;
1933
- capitalCarvingLevel: number;
1934
- ringCount: number;
1935
- ringPlacement: "bottom" | "ends" | "even" | "top";
1936
- ringThickness: number;
1937
- ringSpread: number;
1938
- fluteCount: number;
1939
- fluteDepth: number;
1940
- fluteWidth: number;
1941
- spiralTwist: number;
1942
- spiralRibCount: number;
1943
- panelCount: number;
1944
- panelInsetDepth: number;
1945
- panelShape: "arched" | "diamond" | "rectangle";
1946
- latheRingCount: number;
1947
- latheRingSpacing: "bottom" | "ends" | "even" | "top";
1948
- carvingLevel: number;
1949
- carvingPlacement: "all" | "base" | "capital" | "shaft";
1950
- lowerBandEnabled: boolean;
1951
- lowerBandHeight: number;
1952
- lowerBandCarvingLevel: number;
1953
- dentilCount: number;
1954
- beadCount: number;
1955
- supportStyle: "a-frame" | "box-frame" | "k-brace" | "portal-frame" | "single-strut" | "trestle" | "tripod" | "v-frame" | "vertical" | "x-brace" | "y-frame";
1956
- braceWidth: number;
1957
- braceDepth: number;
1958
- braceBottomSpread: number;
1959
- braceTopSpread: number;
1960
- bracePlateEnabled: boolean;
1961
- role?: "ornament" | "post" | undefined;
1962
- postBase?: "none" | "pier" | "post-base" | undefined;
1053
+ height: number;
1054
+ sidelightLeft?: number | undefined;
1055
+ sidelightRight?: number | undefined;
1056
+ transomHeight?: number | undefined;
1057
+ slidingStyle?: "bypass" | "patio" | undefined;
1058
+ mark?: string | undefined;
1059
+ constructionType: "framed" | "masonry";
1060
+ dimensionReference: "finish-opening" | "masonry-opening" | "nominal" | "rough-opening";
1061
+ roughOpeningWidth?: number | undefined;
1062
+ roughOpeningHeight?: number | undefined;
1063
+ masonryOpeningWidth?: number | undefined;
1064
+ masonryOpeningHeight?: number | undefined;
1065
+ finishOpeningWidth?: number | undefined;
1066
+ 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;
1070
+ operationState: number;
1071
+ slideDirection: "left" | "right";
1072
+ trackStyle: "none" | "overhead" | "pocket" | "visible";
1073
+ garagePanelCount: number;
1074
+ openingKind: "door" | "opening";
1075
+ openingShape: "arch" | "rectangle" | "rounded";
1076
+ openingRadiusMode: "all" | "individual";
1077
+ openingTopRadii: [number, number];
1078
+ cornerRadius: number;
1079
+ archHeight: number;
1080
+ openingRevealRadius: number;
1081
+ frameThickness: number;
1082
+ frameDepth?: number | undefined;
1083
+ threshold: boolean;
1084
+ thresholdHeight: number;
1085
+ casingFaceA?: boolean | undefined;
1086
+ casingFaceB?: boolean | undefined;
1087
+ 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";
1110
+ } | {
1111
+ object: "node";
1112
+ name?: string | undefined;
1113
+ parentId: string | null;
1114
+ visible: boolean;
1115
+ camera?: {
1116
+ position: [number, number, number];
1117
+ target: [number, number, number];
1118
+ mode: "orthographic" | "perspective";
1119
+ fov?: number | undefined;
1120
+ zoom?: number | undefined;
1121
+ } | undefined;
1122
+ metadata: Record<string, unknown>;
1123
+ provenance?: {
1124
+ refs: {
1125
+ ns?: string | undefined;
1126
+ id: string;
1127
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
1128
+ }[];
1129
+ lineage?: {
1130
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
1131
+ fromIds: string[];
1132
+ } | undefined;
1133
+ } | undefined;
1134
+ id: `window_${string}`;
1963
1135
  material?: {
1964
1136
  id?: string | undefined;
1965
1137
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
@@ -1982,9 +1154,188 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
1982
1154
  bumpScale?: number | undefined;
1983
1155
  } | undefined;
1984
1156
  } | undefined;
1985
- materialPreset?: string | undefined;
1986
- slots?: Record<string, string> | undefined;
1987
- type: "column";
1157
+ slots?: Record<string, string> | undefined;
1158
+ source?: {
1159
+ kind: "script";
1160
+ meta?: {
1161
+ description?: string | undefined;
1162
+ category?: string | undefined;
1163
+ tags?: string[] | undefined;
1164
+ parent?: string | undefined;
1165
+ } | undefined;
1166
+ language: "bpy" | "three";
1167
+ script: string;
1168
+ params: Record<string, string | number | boolean>;
1169
+ artifact: string;
1170
+ manifest: {
1171
+ bounds: {
1172
+ min: [number, number, number];
1173
+ max: [number, number, number];
1174
+ };
1175
+ params: {
1176
+ id: string;
1177
+ label?: string | undefined;
1178
+ kind: "boolean" | "number" | "string";
1179
+ default: string | number | boolean;
1180
+ min?: number | undefined;
1181
+ max?: number | undefined;
1182
+ step?: number | undefined;
1183
+ unit?: string | undefined;
1184
+ options?: string[] | undefined;
1185
+ }[];
1186
+ parts: {
1187
+ id: string;
1188
+ label?: string | undefined;
1189
+ type?: string | undefined;
1190
+ bounds?: {
1191
+ min: [number, number, number];
1192
+ max: [number, number, number];
1193
+ } | undefined;
1194
+ }[];
1195
+ surfaces: {
1196
+ part?: string | undefined;
1197
+ y: number;
1198
+ polygon: [number, number][];
1199
+ }[];
1200
+ slots: {
1201
+ id: string;
1202
+ label?: string | undefined;
1203
+ color?: string | undefined;
1204
+ roughness?: number | undefined;
1205
+ metalness?: number | undefined;
1206
+ transparent?: boolean | undefined;
1207
+ emissive?: boolean | undefined;
1208
+ }[];
1209
+ anchors: {
1210
+ id: string;
1211
+ position: [number, number, number];
1212
+ normal?: [number, number, number] | undefined;
1213
+ }[];
1214
+ lights: {
1215
+ id: string;
1216
+ position: [number, number, number];
1217
+ color: string;
1218
+ intensity: number;
1219
+ distance?: number | undefined;
1220
+ spot?: {
1221
+ direction: [number, number, number];
1222
+ angle: number;
1223
+ softness: number;
1224
+ } | undefined;
1225
+ shadows?: boolean | undefined;
1226
+ glow?: {
1227
+ size: number;
1228
+ strength: number;
1229
+ } | undefined;
1230
+ }[];
1231
+ undersides: {
1232
+ part?: string | undefined;
1233
+ polygon: [number, number][];
1234
+ plane: [number, number, number, number];
1235
+ }[];
1236
+ animations: {
1237
+ name: string;
1238
+ duration: number;
1239
+ }[];
1240
+ cutters?: {
1241
+ host: "ceiling" | "mounted" | "slab" | "wall";
1242
+ polygon: number[][];
1243
+ minY: number;
1244
+ maxY: number;
1245
+ }[] | undefined;
1246
+ cutout: boolean;
1247
+ collider: boolean;
1248
+ shape?: {
1249
+ tolerance: number;
1250
+ bands: {
1251
+ y0: number;
1252
+ y1: number;
1253
+ polygons: {
1254
+ outer: [number, number][];
1255
+ holes?: [number, number][][] | undefined;
1256
+ }[];
1257
+ }[];
1258
+ } | undefined;
1259
+ triangles: number;
1260
+ coverage?: number | undefined;
1261
+ uncovered?: {
1262
+ min: [number, number];
1263
+ max: [number, number];
1264
+ }[] | undefined;
1265
+ };
1266
+ images?: {
1267
+ artifact: string;
1268
+ thumbnail: string;
1269
+ floorPlan: string;
1270
+ } | undefined;
1271
+ } | 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";
1988
1339
  } | {
1989
1340
  object: "node";
1990
1341
  name?: string | undefined;
@@ -2468,57 +1819,272 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
2468
1819
  bumpScale?: number | undefined;
2469
1820
  } | undefined;
2470
1821
  } | undefined;
2471
- heelMaterialPreset?: string | undefined;
2472
- position: [number, number, number];
2473
- rotation: number;
2474
- support: {
2475
- kind: "level";
2476
- } | {
2477
- kind: "walls";
2478
- } | {
2479
- kind: "roof";
2480
- roofSegmentId: `rseg_${string}`;
2481
- localPosition: [number, number];
2482
- curbHeight: number;
2483
- };
2484
- assembly?: {
2485
- layers: {
2486
- id: string;
2487
- role: "air" | "covering" | "deck" | "fill" | "finish" | "furring" | "glazing" | "insulation" | "lining" | "membrane" | "sheathing" | "shell" | "structure" | "substrate" | "underlay";
2488
- thickness: number;
2489
- core?: true | undefined;
2490
- spacing?: number | undefined;
2491
- material?: string | undefined;
2492
- slot?: string | undefined;
2493
- returns?: boolean | undefined;
2494
- display?: "construction" | "finished" | undefined;
2495
- inset?: number | undefined;
2496
- bottom?: number | undefined;
2497
- lift?: number | undefined;
2498
- src?: string | undefined;
2499
- }[];
2500
- backing?: {
2501
- id: string;
2502
- role: "air" | "covering" | "deck" | "fill" | "finish" | "furring" | "glazing" | "insulation" | "lining" | "membrane" | "sheathing" | "shell" | "structure" | "substrate" | "underlay";
2503
- thickness: number;
2504
- core?: true | undefined;
2505
- spacing?: number | undefined;
2506
- material?: string | undefined;
2507
- slot?: string | undefined;
2508
- returns?: boolean | undefined;
2509
- display?: "construction" | "finished" | undefined;
2510
- inset?: number | undefined;
2511
- bottom?: number | undefined;
2512
- lift?: number | undefined;
2513
- src?: string | undefined;
2514
- }[] | undefined;
2515
- face?: "exterior" | "front" | undefined;
2516
- presetId?: string | undefined;
2517
- cavityInsulation?: string | undefined;
1822
+ heelMaterialPreset?: string | undefined;
1823
+ position: [number, number, number];
1824
+ rotation: number;
1825
+ support: {
1826
+ kind: "level";
1827
+ } | {
1828
+ kind: "walls";
1829
+ } | {
1830
+ kind: "roof";
1831
+ roofSegmentId: `rseg_${string}`;
1832
+ localPosition: [number, number];
1833
+ curbHeight: number;
1834
+ };
1835
+ assembly?: {
1836
+ layers: {
1837
+ id: string;
1838
+ role: "air" | "covering" | "deck" | "fill" | "finish" | "furring" | "glazing" | "insulation" | "lining" | "membrane" | "sheathing" | "shell" | "structure" | "substrate" | "underlay";
1839
+ thickness: number;
1840
+ core?: true | undefined;
1841
+ spacing?: number | undefined;
1842
+ material?: string | undefined;
1843
+ slot?: string | undefined;
1844
+ returns?: boolean | undefined;
1845
+ display?: "construction" | "finished" | undefined;
1846
+ inset?: number | undefined;
1847
+ bottom?: number | undefined;
1848
+ lift?: number | undefined;
1849
+ src?: string | undefined;
1850
+ }[];
1851
+ backing?: {
1852
+ id: string;
1853
+ role: "air" | "covering" | "deck" | "fill" | "finish" | "furring" | "glazing" | "insulation" | "lining" | "membrane" | "sheathing" | "shell" | "structure" | "substrate" | "underlay";
1854
+ thickness: number;
1855
+ core?: true | undefined;
1856
+ spacing?: number | undefined;
1857
+ material?: string | undefined;
1858
+ slot?: string | undefined;
1859
+ returns?: boolean | undefined;
1860
+ display?: "construction" | "finished" | undefined;
1861
+ inset?: number | undefined;
1862
+ bottom?: number | undefined;
1863
+ lift?: number | undefined;
1864
+ src?: string | undefined;
1865
+ }[] | undefined;
1866
+ face?: "exterior" | "front" | undefined;
1867
+ presetId?: string | undefined;
1868
+ cavityInsulation?: string | undefined;
1869
+ } | undefined;
1870
+ slots?: Record<string, string> | undefined;
1871
+ children: string[];
1872
+ type: "roof";
1873
+ } | {
1874
+ object: "node";
1875
+ name?: string | undefined;
1876
+ parentId: string | null;
1877
+ visible: boolean;
1878
+ camera?: {
1879
+ position: [number, number, number];
1880
+ target: [number, number, number];
1881
+ mode: "orthographic" | "perspective";
1882
+ fov?: number | undefined;
1883
+ zoom?: number | undefined;
1884
+ } | undefined;
1885
+ metadata: Record<string, unknown>;
1886
+ provenance?: {
1887
+ refs: {
1888
+ ns?: string | undefined;
1889
+ id: string;
1890
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
1891
+ }[];
1892
+ lineage?: {
1893
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
1894
+ fromIds: string[];
1895
+ } | undefined;
1896
+ } | undefined;
1897
+ id: `slab_${string}`;
1898
+ material?: {
1899
+ id?: string | undefined;
1900
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1901
+ properties?: {
1902
+ color: string;
1903
+ roughness: number;
1904
+ metalness: number;
1905
+ opacity: number;
1906
+ transparent: boolean;
1907
+ side: "back" | "double" | "front";
1908
+ } | undefined;
1909
+ texture?: {
1910
+ url: string;
1911
+ repeat?: [number, number] | undefined;
1912
+ scale?: number | undefined;
1913
+ offset?: [number, number] | undefined;
1914
+ normalMap?: string | undefined;
1915
+ normalScale?: number | undefined;
1916
+ bumpMap?: string | undefined;
1917
+ bumpScale?: number | undefined;
1918
+ } | undefined;
1919
+ } | undefined;
1920
+ materialPreset?: string | undefined;
1921
+ slots?: Record<string, string> | undefined;
1922
+ polygon: [number, number][];
1923
+ holes: [number, number][][];
1924
+ holeMetadata: {
1925
+ source: "elevator" | "floor-opening" | "manual" | "room" | "stair";
1926
+ openingId?: string | undefined;
1927
+ stairId?: string | undefined;
1928
+ elevatorId?: string | undefined;
1929
+ }[];
1930
+ elevation: number;
1931
+ floorHeight?: number | undefined;
1932
+ referenceFloorElevation?: number | undefined;
1933
+ foundation?: {
1934
+ type: "none" | "solid";
1935
+ material?: string | {
1936
+ id?: string | undefined;
1937
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1938
+ properties?: {
1939
+ color: string;
1940
+ roughness: number;
1941
+ metalness: number;
1942
+ opacity: number;
1943
+ transparent: boolean;
1944
+ side: "back" | "double" | "front";
1945
+ } | undefined;
1946
+ texture?: {
1947
+ url: string;
1948
+ repeat?: [number, number] | undefined;
1949
+ scale?: number | undefined;
1950
+ offset?: [number, number] | undefined;
1951
+ normalMap?: string | undefined;
1952
+ normalScale?: number | undefined;
1953
+ bumpMap?: string | undefined;
1954
+ bumpScale?: number | undefined;
1955
+ } | undefined;
1956
+ } | undefined;
1957
+ } | undefined;
1958
+ thickness: number;
1959
+ recessed: boolean;
1960
+ recessedRimElevation?: number | undefined;
1961
+ fillToTerrain?: boolean | undefined;
1962
+ boundary?: "auto" | undefined;
1963
+ support?: "open" | undefined;
1964
+ plateRole?: "base" | "platform" | "sunken" | undefined;
1965
+ railing?: {
1966
+ start: [number, number];
1967
+ end: [number, number];
1968
+ }[] | undefined;
1969
+ zoneIds?: string[] | undefined;
1970
+ associatedZoneIds?: string[] | undefined;
1971
+ autoFromWalls: boolean;
1972
+ surfaceScript?: {
1973
+ kind: "script";
1974
+ meta?: {
1975
+ description?: string | undefined;
1976
+ category?: string | undefined;
1977
+ tags?: string[] | undefined;
1978
+ parent?: string | undefined;
1979
+ } | undefined;
1980
+ language: "bpy" | "three";
1981
+ script: string;
1982
+ params: Record<string, string | number | boolean>;
1983
+ artifact: string;
1984
+ manifest: {
1985
+ bounds: {
1986
+ min: [number, number, number];
1987
+ max: [number, number, number];
1988
+ };
1989
+ params: {
1990
+ id: string;
1991
+ label?: string | undefined;
1992
+ kind: "boolean" | "number" | "string";
1993
+ default: string | number | boolean;
1994
+ min?: number | undefined;
1995
+ max?: number | undefined;
1996
+ step?: number | undefined;
1997
+ unit?: string | undefined;
1998
+ options?: string[] | undefined;
1999
+ }[];
2000
+ parts: {
2001
+ id: string;
2002
+ label?: string | undefined;
2003
+ type?: string | undefined;
2004
+ bounds?: {
2005
+ min: [number, number, number];
2006
+ max: [number, number, number];
2007
+ } | undefined;
2008
+ }[];
2009
+ surfaces: {
2010
+ part?: string | undefined;
2011
+ y: number;
2012
+ polygon: [number, number][];
2013
+ }[];
2014
+ slots: {
2015
+ id: string;
2016
+ label?: string | undefined;
2017
+ color?: string | undefined;
2018
+ roughness?: number | undefined;
2019
+ metalness?: number | undefined;
2020
+ transparent?: boolean | undefined;
2021
+ emissive?: boolean | undefined;
2022
+ }[];
2023
+ anchors: {
2024
+ id: string;
2025
+ position: [number, number, number];
2026
+ normal?: [number, number, number] | undefined;
2027
+ }[];
2028
+ lights: {
2029
+ id: string;
2030
+ position: [number, number, number];
2031
+ color: string;
2032
+ intensity: number;
2033
+ distance?: number | undefined;
2034
+ spot?: {
2035
+ direction: [number, number, number];
2036
+ angle: number;
2037
+ softness: number;
2038
+ } | undefined;
2039
+ shadows?: boolean | undefined;
2040
+ glow?: {
2041
+ size: number;
2042
+ strength: number;
2043
+ } | undefined;
2044
+ }[];
2045
+ undersides: {
2046
+ part?: string | undefined;
2047
+ polygon: [number, number][];
2048
+ plane: [number, number, number, number];
2049
+ }[];
2050
+ animations: {
2051
+ name: string;
2052
+ duration: number;
2053
+ }[];
2054
+ cutters?: {
2055
+ host: "ceiling" | "mounted" | "slab" | "wall";
2056
+ polygon: number[][];
2057
+ minY: number;
2058
+ maxY: number;
2059
+ }[] | undefined;
2060
+ cutout: boolean;
2061
+ collider: boolean;
2062
+ shape?: {
2063
+ tolerance: number;
2064
+ bands: {
2065
+ y0: number;
2066
+ y1: number;
2067
+ polygons: {
2068
+ outer: [number, number][];
2069
+ holes?: [number, number][][] | undefined;
2070
+ }[];
2071
+ }[];
2072
+ } | undefined;
2073
+ triangles: number;
2074
+ coverage?: number | undefined;
2075
+ uncovered?: {
2076
+ min: [number, number];
2077
+ max: [number, number];
2078
+ }[] | undefined;
2079
+ };
2080
+ images?: {
2081
+ artifact: string;
2082
+ thumbnail: string;
2083
+ floorPlan: string;
2084
+ } | undefined;
2085
+ inputs: string;
2518
2086
  } | undefined;
2519
- slots?: Record<string, string> | undefined;
2520
- children: `rseg_${string}`[];
2521
- type: "roof";
2087
+ type: "slab";
2522
2088
  } | {
2523
2089
  object: "node";
2524
2090
  name?: string | undefined;
@@ -3164,6 +2730,42 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
3164
2730
  start: [number, number];
3165
2731
  end: [number, number];
3166
2732
  type: "separator";
2733
+ } | {
2734
+ object: "node";
2735
+ name?: string | undefined;
2736
+ parentId: string | null;
2737
+ visible: boolean;
2738
+ camera?: {
2739
+ position: [number, number, number];
2740
+ target: [number, number, number];
2741
+ mode: "orthographic" | "perspective";
2742
+ fov?: number | undefined;
2743
+ zoom?: number | undefined;
2744
+ } | undefined;
2745
+ metadata: Record<string, unknown>;
2746
+ provenance?: {
2747
+ refs: {
2748
+ ns?: string | undefined;
2749
+ id: string;
2750
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
2751
+ }[];
2752
+ lineage?: {
2753
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
2754
+ fromIds: string[];
2755
+ } | undefined;
2756
+ } | undefined;
2757
+ id: `floor-opening_${string}`;
2758
+ polygon: [number, number][];
2759
+ hostZoneId?: string | undefined;
2760
+ legacyPlateCuts?: Record<string, [number, number][][]> | undefined;
2761
+ legacyCeilingCuts?: Record<string, [number, number][][]> | undefined;
2762
+ source: string;
2763
+ ownerId?: string | undefined;
2764
+ surfaceId?: string | undefined;
2765
+ drawnOn: "ceiling" | "floor";
2766
+ cutsPrimary: boolean;
2767
+ cutsAdjacent: boolean;
2768
+ type: "floor-opening";
3167
2769
  } | {
3168
2770
  object: "node";
3169
2771
  name?: string | undefined;
@@ -3258,6 +2860,42 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
3258
2860
  color: string;
3259
2861
  style: "guard" | "horizontal" | "picket" | "privacy" | "rail" | "slat";
3260
2862
  type: "fence";
2863
+ } | {
2864
+ object: "node";
2865
+ name?: string | undefined;
2866
+ parentId: string | null;
2867
+ visible: boolean;
2868
+ camera?: {
2869
+ position: [number, number, number];
2870
+ target: [number, number, number];
2871
+ mode: "orthographic" | "perspective";
2872
+ fov?: number | undefined;
2873
+ zoom?: number | undefined;
2874
+ } | undefined;
2875
+ metadata: Record<string, unknown>;
2876
+ provenance?: {
2877
+ refs: {
2878
+ ns?: string | undefined;
2879
+ id: string;
2880
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
2881
+ }[];
2882
+ lineage?: {
2883
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
2884
+ fromIds: string[];
2885
+ } | undefined;
2886
+ } | undefined;
2887
+ id: `beam_${string}`;
2888
+ start: [number, number];
2889
+ end: [number, number];
2890
+ width: number;
2891
+ depth: number;
2892
+ size?: string | undefined;
2893
+ plies: number;
2894
+ material: "glulam" | "lvl" | "pressure-treated" | "sawn" | "steel";
2895
+ placement: "dropped" | "flush";
2896
+ topElevation?: number | undefined;
2897
+ supportSlabId?: string | undefined;
2898
+ type: "beam";
3261
2899
  } | {
3262
2900
  object: "node";
3263
2901
  name?: string | undefined;
@@ -3365,6 +3003,37 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
3365
3003
  slots: Record<string, string>;
3366
3004
  slotNames: Record<string, string>;
3367
3005
  type: "block";
3006
+ } | {
3007
+ object: "node";
3008
+ name?: string | undefined;
3009
+ parentId: string | null;
3010
+ visible: boolean;
3011
+ camera?: {
3012
+ position: [number, number, number];
3013
+ target: [number, number, number];
3014
+ mode: "orthographic" | "perspective";
3015
+ fov?: number | undefined;
3016
+ zoom?: number | undefined;
3017
+ } | undefined;
3018
+ metadata: Record<string, unknown>;
3019
+ provenance?: {
3020
+ refs: {
3021
+ ns?: string | undefined;
3022
+ id: string;
3023
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
3024
+ }[];
3025
+ lineage?: {
3026
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
3027
+ fromIds: string[];
3028
+ } | undefined;
3029
+ } | undefined;
3030
+ id: `structural-grid_${string}`;
3031
+ start: [number, number];
3032
+ end: [number, number];
3033
+ label: string;
3034
+ showStartBubble: boolean;
3035
+ showEndBubble: boolean;
3036
+ type: "structural-grid";
3368
3037
  } | {
3369
3038
  object: "node";
3370
3039
  name?: string | undefined;
@@ -4174,6 +3843,44 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
4174
3843
  railingPostThrough?: boolean | undefined;
4175
3844
  children: `sseg_${string}`[];
4176
3845
  type: "stair";
3846
+ } | {
3847
+ object: "node";
3848
+ name?: string | undefined;
3849
+ parentId: string | null;
3850
+ visible: boolean;
3851
+ camera?: {
3852
+ position: [number, number, number];
3853
+ target: [number, number, number];
3854
+ mode: "orthographic" | "perspective";
3855
+ fov?: number | undefined;
3856
+ zoom?: number | undefined;
3857
+ } | undefined;
3858
+ metadata: Record<string, unknown>;
3859
+ provenance?: {
3860
+ refs: {
3861
+ ns?: string | undefined;
3862
+ id: string;
3863
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
3864
+ }[];
3865
+ lineage?: {
3866
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
3867
+ fromIds: string[];
3868
+ } | undefined;
3869
+ } | undefined;
3870
+ id: `scan_${string}`;
3871
+ url: string | null;
3872
+ captureSession: {
3873
+ sessionId: string;
3874
+ schemaVersion?: number | undefined;
3875
+ revisionId?: string | undefined;
3876
+ manifestUrl?: string | undefined;
3877
+ } | null;
3878
+ layers: Record<string, boolean>;
3879
+ position: [number, number, number];
3880
+ rotation: [number, number, number];
3881
+ scale: number;
3882
+ opacity: number;
3883
+ type: "scan";
4177
3884
  } | {
4178
3885
  object: "node";
4179
3886
  name?: string | undefined;
@@ -4215,6 +3922,113 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
4215
3922
  label: string;
4216
3923
  } | null;
4217
3924
  type: "guide";
3925
+ } | {
3926
+ object: "node";
3927
+ name?: string | undefined;
3928
+ parentId: string | null;
3929
+ visible: boolean;
3930
+ camera?: {
3931
+ position: [number, number, number];
3932
+ target: [number, number, number];
3933
+ mode: "orthographic" | "perspective";
3934
+ fov?: number | undefined;
3935
+ zoom?: number | undefined;
3936
+ } | undefined;
3937
+ metadata: Record<string, unknown>;
3938
+ provenance?: {
3939
+ refs: {
3940
+ ns?: string | undefined;
3941
+ id: string;
3942
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
3943
+ }[];
3944
+ lineage?: {
3945
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
3946
+ fromIds: string[];
3947
+ } | undefined;
3948
+ } | undefined;
3949
+ id: `measurement_${string}`;
3950
+ measurement: {
3951
+ kind: "distance";
3952
+ points: [{
3953
+ kind: "feature";
3954
+ reference: {
3955
+ nodeId: string;
3956
+ featureId: string;
3957
+ parameters?: Record<string, string | number | boolean> | undefined;
3958
+ };
3959
+ fallback: [number, number, number];
3960
+ } | [number, number, number], {
3961
+ kind: "feature";
3962
+ reference: {
3963
+ nodeId: string;
3964
+ featureId: string;
3965
+ parameters?: Record<string, string | number | boolean> | undefined;
3966
+ };
3967
+ fallback: [number, number, number];
3968
+ } | [number, number, number]];
3969
+ } | {
3970
+ kind: "angle";
3971
+ points: [{
3972
+ kind: "feature";
3973
+ reference: {
3974
+ nodeId: string;
3975
+ featureId: string;
3976
+ parameters?: Record<string, string | number | boolean> | undefined;
3977
+ };
3978
+ fallback: [number, number, number];
3979
+ } | [number, number, number], {
3980
+ kind: "feature";
3981
+ reference: {
3982
+ nodeId: string;
3983
+ featureId: string;
3984
+ parameters?: Record<string, string | number | boolean> | undefined;
3985
+ };
3986
+ fallback: [number, number, number];
3987
+ } | [number, number, number], {
3988
+ kind: "feature";
3989
+ reference: {
3990
+ nodeId: string;
3991
+ featureId: string;
3992
+ parameters?: Record<string, string | number | boolean> | undefined;
3993
+ };
3994
+ fallback: [number, number, number];
3995
+ } | [number, number, number]];
3996
+ } | {
3997
+ kind: "area";
3998
+ base: ({
3999
+ kind: "feature";
4000
+ reference: {
4001
+ nodeId: string;
4002
+ featureId: string;
4003
+ parameters?: Record<string, string | number | boolean> | undefined;
4004
+ };
4005
+ fallback: [number, number, number];
4006
+ } | [number, number, number])[];
4007
+ } | {
4008
+ kind: "perimeter";
4009
+ base: ({
4010
+ kind: "feature";
4011
+ reference: {
4012
+ nodeId: string;
4013
+ featureId: string;
4014
+ parameters?: Record<string, string | number | boolean> | undefined;
4015
+ };
4016
+ fallback: [number, number, number];
4017
+ } | [number, number, number])[];
4018
+ } | {
4019
+ kind: "volume";
4020
+ base: ({
4021
+ kind: "feature";
4022
+ reference: {
4023
+ nodeId: string;
4024
+ featureId: string;
4025
+ parameters?: Record<string, string | number | boolean> | undefined;
4026
+ };
4027
+ fallback: [number, number, number];
4028
+ } | [number, number, number])[];
4029
+ extrusion: [number, number, number];
4030
+ };
4031
+ type: "measurement";
4218
4032
  } | {
4219
4033
  object: "node";
4220
4034
  name?: string | undefined;
@@ -4333,29 +4147,36 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
4333
4147
  fromIds: string[];
4334
4148
  } | undefined;
4335
4149
  } | undefined;
4336
- id: `duct-fitting_${string}`;
4337
- position: [number, number, number];
4338
- rotation: [number, number, number];
4339
- fittingType: "access-panel" | "coupling" | "cross" | "damper" | "elbow" | "end-cap" | "reducer" | "tee" | "transition";
4150
+ id: `duct-segment_${string}`;
4151
+ path: [number, number, number][];
4152
+ autoHangers?: boolean | undefined;
4153
+ hangerOverrides?: Record<string, {
4154
+ fraction?: number | undefined;
4155
+ skipped?: boolean | undefined;
4156
+ hostId?: string | undefined;
4157
+ }> | undefined;
4158
+ hangerStyle?: "double" | "single" | undefined;
4159
+ hangerSpacing?: number | undefined;
4160
+ hangerMaxReach?: number | undefined;
4161
+ wallAttachment?: {
4162
+ wallId: `wall_${string}`;
4163
+ side: "back" | "front";
4164
+ startUV: [number, number];
4165
+ endUV: [number, number];
4166
+ offset: number;
4167
+ } | undefined;
4340
4168
  shape: "oval" | "rect" | "round";
4341
- inletShape?: "oval" | "rect" | "round" | undefined;
4342
- outletShape?: "oval" | "rect" | "round" | undefined;
4169
+ diameter: number;
4343
4170
  width: number;
4344
4171
  height: number;
4345
- shape2: "oval" | "rect" | "round";
4346
- width2: number;
4347
- height2: number;
4348
- angle: number;
4349
- branchAngle: number;
4350
- diameter: number;
4351
- diameter2: number;
4352
- ductMaterial: "duct-board" | "flex" | "sheet-metal";
4172
+ roll: number;
4173
+ ductMaterial: "duct-board" | "flex" | "sheet-metal" | "spiral";
4174
+ seamDetail: boolean;
4175
+ insulated: boolean;
4176
+ insulationR: number;
4353
4177
  system: "return" | "supply";
4354
- damperAngle: number;
4355
- panelWidth: number;
4356
- panelHeight: number;
4357
4178
  slots?: Record<string, string> | undefined;
4358
- type: "duct-fitting";
4179
+ type: "duct-segment";
4359
4180
  } | {
4360
4181
  object: "node";
4361
4182
  name?: string | undefined;
@@ -4417,23 +4238,12 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
4417
4238
  fromIds: string[];
4418
4239
  } | undefined;
4419
4240
  } | undefined;
4420
- id: `hvac-equipment_${string}`;
4421
- position: [number, number, number];
4422
- rotation: number;
4423
- supportSlabId?: string | undefined;
4424
- equipmentType: "air-handler" | "condenser" | "furnace";
4425
- width: number;
4426
- depth: number;
4427
- height: number;
4428
- supplyShape: "oval" | "rect" | "round";
4429
- returnShape: "oval" | "rect" | "round";
4430
- supplyDiameter: number;
4431
- returnDiameter: number;
4432
- supplyWidth: number;
4433
- supplyHeight: number;
4434
- returnWidth: number;
4435
- returnHeight: number;
4436
- type: "hvac-equipment";
4241
+ id: `lineset_${string}`;
4242
+ path: [number, number, number][];
4243
+ suctionDiameter: number;
4244
+ liquidDiameter: number;
4245
+ insulated: boolean;
4246
+ type: "lineset";
4437
4247
  } | {
4438
4248
  object: "node";
4439
4249
  name?: string | undefined;
@@ -4532,17 +4342,13 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
4532
4342
  fromIds: string[];
4533
4343
  } | undefined;
4534
4344
  } | undefined;
4535
- id: `pipe-fitting_${string}`;
4345
+ id: `pipe-trap_${string}`;
4536
4346
  position: [number, number, number];
4537
- rotation: [number, number, number];
4538
- fittingType: "cleanout" | "coupling" | "cross" | "elbow" | "end-cap" | "reducer" | "sanitary-tee" | "wye";
4539
- angle: number;
4347
+ rotation: number;
4540
4348
  diameter: number;
4541
- diameter2: number;
4542
- cleanoutStyle: "end" | "inline";
4543
4349
  pipeMaterial: "abs" | "cast-iron" | "pvc";
4544
- system: "vent" | "waste";
4545
- type: "pipe-fitting";
4350
+ armLengthM: number;
4351
+ type: "pipe-trap";
4546
4352
  } | {
4547
4353
  object: "node";
4548
4354
  name?: string | undefined;
@@ -4645,6 +4451,35 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
4645
4451
  doorDurationMs: number;
4646
4452
  dwellMs: number;
4647
4453
  type: "elevator";
4454
+ } | {
4455
+ object: "node";
4456
+ parentId: string | null;
4457
+ visible: boolean;
4458
+ camera?: {
4459
+ position: [number, number, number];
4460
+ target: [number, number, number];
4461
+ mode: "orthographic" | "perspective";
4462
+ fov?: number | undefined;
4463
+ zoom?: number | undefined;
4464
+ } | undefined;
4465
+ provenance?: {
4466
+ refs: {
4467
+ ns?: string | undefined;
4468
+ id: string;
4469
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
4470
+ }[];
4471
+ lineage?: {
4472
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
4473
+ fromIds: string[];
4474
+ } | undefined;
4475
+ } | undefined;
4476
+ id: `unit_${string}`;
4477
+ name: string;
4478
+ kind: "apartment" | "commercial" | "common" | "hotel-room";
4479
+ members: `zone_${string}`[];
4480
+ color: string;
4481
+ metadata: Record<string, unknown>;
4482
+ type: "unit";
4648
4483
  } | {
4649
4484
  object: "node";
4650
4485
  name?: string | undefined;
@@ -4675,6 +4510,83 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
4675
4510
  rotation: [number, number, number];
4676
4511
  groundLevelId?: `level_${string}` | undefined;
4677
4512
  type: "building";
4513
+ } | {
4514
+ object: "node";
4515
+ name?: string | undefined;
4516
+ parentId: string | null;
4517
+ visible: boolean;
4518
+ camera?: {
4519
+ position: [number, number, number];
4520
+ target: [number, number, number];
4521
+ mode: "orthographic" | "perspective";
4522
+ fov?: number | undefined;
4523
+ zoom?: number | undefined;
4524
+ } | undefined;
4525
+ metadata: Record<string, unknown>;
4526
+ provenance?: {
4527
+ refs: {
4528
+ ns?: string | undefined;
4529
+ id: string;
4530
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
4531
+ }[];
4532
+ lineage?: {
4533
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
4534
+ fromIds: string[];
4535
+ } | undefined;
4536
+ } | undefined;
4537
+ matchFenceStyle?: boolean | undefined;
4538
+ matchFenceHeight?: boolean | undefined;
4539
+ leafType?: "double" | "single" | undefined;
4540
+ style?: "guard" | "horizontal" | "match" | "picket" | "privacy" | "rail" | "slat" | undefined;
4541
+ height?: number | undefined;
4542
+ clearance?: number | undefined;
4543
+ thickness?: number | undefined;
4544
+ frameWidth?: number | undefined;
4545
+ spacing?: number | undefined;
4546
+ boardWidth?: number | undefined;
4547
+ hinge?: "left" | "right" | undefined;
4548
+ swing?: "inward" | "outward" | undefined;
4549
+ openAngle?: number | undefined;
4550
+ leafSplit?: number | undefined;
4551
+ brace?: "cross" | "diagonal" | "none" | undefined;
4552
+ showHardware?: boolean | undefined;
4553
+ showPosts?: boolean | undefined;
4554
+ id: `fence-gate_${string}`;
4555
+ center: number;
4556
+ width: number;
4557
+ type: "fence-gate";
4558
+ } | {
4559
+ object: "node";
4560
+ name?: string | undefined;
4561
+ parentId: string | null;
4562
+ visible: boolean;
4563
+ camera?: {
4564
+ position: [number, number, number];
4565
+ target: [number, number, number];
4566
+ mode: "orthographic" | "perspective";
4567
+ fov?: number | undefined;
4568
+ zoom?: number | undefined;
4569
+ } | undefined;
4570
+ metadata: Record<string, unknown>;
4571
+ provenance?: {
4572
+ refs: {
4573
+ ns?: string | undefined;
4574
+ id: string;
4575
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
4576
+ }[];
4577
+ lineage?: {
4578
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
4579
+ fromIds: string[];
4580
+ } | undefined;
4581
+ } | undefined;
4582
+ center: number;
4583
+ width: number;
4584
+ matchFenceStyle?: boolean | undefined;
4585
+ matchFenceHeight?: boolean | undefined;
4586
+ height?: number | undefined;
4587
+ showPosts: boolean;
4588
+ id: `fence-opening_${string}`;
4589
+ type: "fence-opening";
4678
4590
  } | {
4679
4591
  object: "node";
4680
4592
  name?: string | undefined;
@@ -5028,7 +4940,7 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
5028
4940
  fromIds: string[];
5029
4941
  } | undefined;
5030
4942
  } | undefined;
5031
- id: `bvent_${string}`;
4943
+ id: `rvent_${string}`;
5032
4944
  material?: {
5033
4945
  id?: string | undefined;
5034
4946
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
@@ -5051,24 +4963,16 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
5051
4963
  bumpScale?: number | undefined;
5052
4964
  } | undefined;
5053
4965
  } | undefined;
5054
- slots?: Record<string, string> | undefined;
5055
- materialPreset: string;
4966
+ materialPreset?: string | undefined;
5056
4967
  roofSegmentId?: string | undefined;
5057
4968
  position: [number, number, number];
5058
4969
  rotation: number;
4970
+ length: number;
5059
4971
  width: number;
5060
- depth: number;
5061
4972
  height: number;
5062
- hoodOverhang: number;
5063
- topTaper: number;
5064
- capHeight: number;
5065
- capGap: number;
5066
- domeCurvature: number;
5067
- baseInset: number;
5068
- baseHeight: number;
5069
- cornerBevel: number;
5070
- style: "box" | "cap" | "dome";
5071
- type: "box-vent";
4973
+ style: "metal" | "shingled" | "standard";
4974
+ endCaps: boolean;
4975
+ type: "ridge-vent";
5072
4976
  } | {
5073
4977
  object: "node";
5074
4978
  name?: string | undefined;
@@ -5093,7 +4997,7 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
5093
4997
  fromIds: string[];
5094
4998
  } | undefined;
5095
4999
  } | undefined;
5096
- id: `rvent_${string}`;
5000
+ id: `tvent_${string}`;
5097
5001
  material?: {
5098
5002
  id?: string | undefined;
5099
5003
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
@@ -5116,16 +5020,19 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
5116
5020
  bumpScale?: number | undefined;
5117
5021
  } | undefined;
5118
5022
  } | undefined;
5119
- materialPreset?: string | undefined;
5023
+ slots?: Record<string, string> | undefined;
5024
+ materialPreset: string;
5120
5025
  roofSegmentId?: string | undefined;
5121
5026
  position: [number, number, number];
5122
5027
  rotation: number;
5123
- length: number;
5124
- width: number;
5028
+ diameter: number;
5125
5029
  height: number;
5126
- style: "metal" | "shingled" | "standard";
5127
- endCaps: boolean;
5128
- type: "ridge-vent";
5030
+ neckHeight: number;
5031
+ baseOverhang: number;
5032
+ vaneCount: number;
5033
+ spinSpeed: number;
5034
+ style: "cylinder" | "globe";
5035
+ type: "turbine-vent";
5129
5036
  } | {
5130
5037
  object: "node";
5131
5038
  name?: string | undefined;
@@ -5150,7 +5057,7 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
5150
5057
  fromIds: string[];
5151
5058
  } | undefined;
5152
5059
  } | undefined;
5153
- id: `tvent_${string}`;
5060
+ id: `cupola_${string}`;
5154
5061
  material?: {
5155
5062
  id?: string | undefined;
5156
5063
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
@@ -5178,14 +5085,12 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
5178
5085
  roofSegmentId?: string | undefined;
5179
5086
  position: [number, number, number];
5180
5087
  rotation: number;
5181
- diameter: number;
5088
+ width: number;
5089
+ depth: number;
5182
5090
  height: number;
5183
- neckHeight: number;
5184
- baseOverhang: number;
5185
- vaneCount: number;
5186
- spinSpeed: number;
5187
- style: "cylinder" | "globe";
5188
- type: "turbine-vent";
5091
+ roofStyle: "dome" | "pyramid";
5092
+ finial: boolean;
5093
+ type: "cupola";
5189
5094
  } | {
5190
5095
  object: "node";
5191
5096
  name?: string | undefined;
@@ -5514,6 +5419,101 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
5514
5419
  frameDepth: number;
5515
5420
  surfaceNormal?: [number, number, number] | undefined;
5516
5421
  type: "solar-panel";
5422
+ } | {
5423
+ object: "node";
5424
+ name?: string | undefined;
5425
+ parentId: string | null;
5426
+ visible: boolean;
5427
+ camera?: {
5428
+ position: [number, number, number];
5429
+ target: [number, number, number];
5430
+ mode: "orthographic" | "perspective";
5431
+ fov?: number | undefined;
5432
+ zoom?: number | undefined;
5433
+ } | undefined;
5434
+ metadata: Record<string, unknown>;
5435
+ provenance?: {
5436
+ refs: {
5437
+ ns?: string | undefined;
5438
+ id: string;
5439
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
5440
+ }[];
5441
+ lineage?: {
5442
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
5443
+ fromIds: string[];
5444
+ } | undefined;
5445
+ } | undefined;
5446
+ id: `skylight_${string}`;
5447
+ material?: {
5448
+ id?: string | undefined;
5449
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
5450
+ properties?: {
5451
+ color: string;
5452
+ roughness: number;
5453
+ metalness: number;
5454
+ opacity: number;
5455
+ transparent: boolean;
5456
+ side: "back" | "double" | "front";
5457
+ } | undefined;
5458
+ texture?: {
5459
+ url: string;
5460
+ repeat?: [number, number] | undefined;
5461
+ scale?: number | undefined;
5462
+ offset?: [number, number] | undefined;
5463
+ normalMap?: string | undefined;
5464
+ normalScale?: number | undefined;
5465
+ bumpMap?: string | undefined;
5466
+ bumpScale?: number | undefined;
5467
+ } | undefined;
5468
+ } | undefined;
5469
+ materialPreset?: string | undefined;
5470
+ glassMaterial?: {
5471
+ id?: string | undefined;
5472
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
5473
+ properties?: {
5474
+ color: string;
5475
+ roughness: number;
5476
+ metalness: number;
5477
+ opacity: number;
5478
+ transparent: boolean;
5479
+ side: "back" | "double" | "front";
5480
+ } | undefined;
5481
+ texture?: {
5482
+ url: string;
5483
+ repeat?: [number, number] | undefined;
5484
+ scale?: number | undefined;
5485
+ offset?: [number, number] | undefined;
5486
+ normalMap?: string | undefined;
5487
+ normalScale?: number | undefined;
5488
+ bumpMap?: string | undefined;
5489
+ bumpScale?: number | undefined;
5490
+ } | undefined;
5491
+ } | undefined;
5492
+ glassMaterialPreset?: string | undefined;
5493
+ roofSegmentId?: string | undefined;
5494
+ position: [number, number, number];
5495
+ rotation: number;
5496
+ width: number;
5497
+ height: number;
5498
+ frameThickness: number;
5499
+ frameDepth: number;
5500
+ skylightType: "flat" | "lantern" | "opening" | "sliding" | "walk-on";
5501
+ glassThickness: number;
5502
+ lanternHeight: number;
5503
+ lanternTopScale: number;
5504
+ openingAngle: number;
5505
+ openingSide: "bottom" | "left" | "right" | "top";
5506
+ operationState: number;
5507
+ motorHousing: boolean;
5508
+ slideFraction: number;
5509
+ slideDirection: "x" | "z";
5510
+ trackWidth: number;
5511
+ motorHousingSize: number;
5512
+ curb: boolean;
5513
+ curbHeight: number;
5514
+ cutoutOffset: number;
5515
+ surfaceNormal?: [number, number, number] | undefined;
5516
+ type: "skylight";
5517
5517
  } | {
5518
5518
  object: "node";
5519
5519
  name?: string | undefined;