@pascal-app/core 1.1.0 → 1.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (133) hide show
  1. package/dist/agent-operations/__fixtures__/cases.d.ts +3 -2
  2. package/dist/agent-operations/__fixtures__/cases.d.ts.map +1 -1
  3. package/dist/agent-operations/__fixtures__/place-items-cases.d.ts.map +1 -1
  4. package/dist/agent-operations/__fixtures__/place-items-cases.js +28 -0
  5. package/dist/agent-operations/__fixtures__/roof-bearing-cases.d.ts +2618 -2618
  6. package/dist/agent-operations/asset-catalog.d.ts +21 -11
  7. package/dist/agent-operations/asset-catalog.d.ts.map +1 -1
  8. package/dist/agent-operations/asset-catalog.js +28 -10
  9. package/dist/agent-operations/asset-views.d.ts +8 -3
  10. package/dist/agent-operations/asset-views.d.ts.map +1 -1
  11. package/dist/agent-operations/asset-views.js +19 -3
  12. package/dist/agent-operations/batch.d.ts +4 -2
  13. package/dist/agent-operations/batch.d.ts.map +1 -1
  14. package/dist/agent-operations/batch.js +9 -6
  15. package/dist/agent-operations/catalog-asset.d.ts +15 -0
  16. package/dist/agent-operations/catalog-asset.d.ts.map +1 -0
  17. package/dist/agent-operations/catalog-asset.js +4 -0
  18. package/dist/agent-operations/circulation-spaces.d.ts +585 -585
  19. package/dist/agent-operations/design-brief.d.ts.map +1 -1
  20. package/dist/agent-operations/design-brief.js +2 -0
  21. package/dist/agent-operations/furnish-room.d.ts.map +1 -1
  22. package/dist/agent-operations/furnish-room.js +2 -1
  23. package/dist/agent-operations/index.d.ts +5716 -7
  24. package/dist/agent-operations/index.d.ts.map +1 -1
  25. package/dist/agent-operations/index.js +17 -3
  26. package/dist/agent-operations/level-reads.d.ts.map +1 -1
  27. package/dist/agent-operations/level-reads.js +4 -1
  28. package/dist/agent-operations/place-in-room.d.ts.map +1 -1
  29. package/dist/agent-operations/place-in-room.js +2 -1
  30. package/dist/agent-operations/place-items.d.ts.map +1 -1
  31. package/dist/agent-operations/place-items.js +2 -1
  32. package/dist/agent-operations/scene-queries.d.ts +3818 -3818
  33. package/dist/agent-operations/scene-view.d.ts.map +1 -1
  34. package/dist/agent-operations/scene-view.js +38 -13
  35. package/dist/agent-operations/search-assets.d.ts.map +1 -1
  36. package/dist/agent-operations/search-assets.js +6 -0
  37. package/dist/agent-operations/types.d.ts +10 -2
  38. package/dist/agent-operations/types.d.ts.map +1 -1
  39. package/dist/agent-operations/usage-checks.js +18 -3
  40. package/dist/agent-operations/verify-scene.d.ts +7 -3
  41. package/dist/agent-operations/verify-scene.d.ts.map +1 -1
  42. package/dist/agent-operations/verify-scene.js +15 -7
  43. package/dist/agent-tools/assets.js +1 -1
  44. package/dist/building/__fixtures__/wall-opening-cases.d.ts +30 -30
  45. package/dist/building/level-duplication.d.ts +3409 -3409
  46. package/dist/building/level-duplication.d.ts.map +1 -1
  47. package/dist/building/level-duplication.js +3 -1
  48. package/dist/building/wall-openings.d.ts +75 -75
  49. package/dist/commands/structure/shared.d.ts +3407 -3407
  50. package/dist/commands/structure/zone-wall-merge.d.ts +652 -652
  51. package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts +3818 -3818
  52. package/dist/index.d.ts +2 -0
  53. package/dist/index.d.ts.map +1 -1
  54. package/dist/index.js +2 -0
  55. package/dist/lib/__fixtures__/mezzanine.d.ts +2003 -2003
  56. package/dist/lib/absorb-wall-separators.d.ts +1032 -1032
  57. package/dist/lib/asset-storage.d.ts.map +1 -1
  58. package/dist/lib/asset-storage.js +3 -0
  59. package/dist/lib/floor-foundation-datum.d.ts.map +1 -1
  60. package/dist/lib/floor-foundation-datum.js +5 -1
  61. package/dist/lib/floorplan/context.d.ts +95 -0
  62. package/dist/lib/floorplan/context.d.ts.map +1 -0
  63. package/dist/lib/floorplan/context.js +155 -0
  64. package/dist/lib/floorplan/index.d.ts +6 -0
  65. package/dist/lib/floorplan/index.d.ts.map +1 -0
  66. package/dist/lib/floorplan/index.js +5 -0
  67. package/dist/lib/floorplan/marks.d.ts +71 -0
  68. package/dist/lib/floorplan/marks.d.ts.map +1 -0
  69. package/dist/lib/floorplan/marks.js +157 -0
  70. package/dist/lib/floorplan/plan-math.d.ts +18 -0
  71. package/dist/lib/floorplan/plan-math.d.ts.map +1 -0
  72. package/dist/lib/floorplan/plan-math.js +82 -0
  73. package/dist/lib/floorplan/svg-paths.d.ts +17 -0
  74. package/dist/lib/floorplan/svg-paths.d.ts.map +1 -0
  75. package/dist/lib/floorplan/svg-paths.js +92 -0
  76. package/dist/lib/floorplan/wall-affordances.d.ts +31 -0
  77. package/dist/lib/floorplan/wall-affordances.d.ts.map +1 -0
  78. package/dist/lib/floorplan/wall-affordances.js +24 -0
  79. package/dist/lib/steps.d.ts +8 -0
  80. package/dist/lib/steps.d.ts.map +1 -0
  81. package/dist/lib/steps.js +7 -0
  82. package/dist/registry/__fixtures__/roof-planes.d.ts +69 -0
  83. package/dist/registry/__fixtures__/roof-planes.d.ts.map +1 -0
  84. package/dist/registry/__fixtures__/roof-planes.js +59 -0
  85. package/dist/registry/index.d.ts +2 -1
  86. package/dist/registry/index.d.ts.map +1 -1
  87. package/dist/registry/index.js +1 -0
  88. package/dist/registry/roofs.d.ts +34 -0
  89. package/dist/registry/roofs.d.ts.map +1 -0
  90. package/dist/registry/roofs.js +61 -0
  91. package/dist/registry/types.d.ts +30 -0
  92. package/dist/registry/types.d.ts.map +1 -1
  93. package/dist/registry/validate-relations.d.ts +5 -1
  94. package/dist/registry/validate-relations.d.ts.map +1 -1
  95. package/dist/registry/validate-relations.js +6 -2
  96. package/dist/schema/asset-url.d.ts +8 -0
  97. package/dist/schema/asset-url.d.ts.map +1 -1
  98. package/dist/schema/asset-url.js +17 -0
  99. package/dist/schema/nodes/roof.d.ts +1 -1
  100. package/dist/schema/nodes/roof.d.ts.map +1 -1
  101. package/dist/schema/nodes/roof.js +13 -8
  102. package/dist/schema/types.d.ts +1 -1
  103. package/dist/services/roof-level.d.ts.map +1 -1
  104. package/dist/services/roof-level.js +12 -2
  105. package/dist/services/roof-move.d.ts +4 -2
  106. package/dist/services/roof-move.d.ts.map +1 -1
  107. package/dist/services/roof-move.js +21 -9
  108. package/dist/spatial/usage-field/findings.d.ts +10 -1
  109. package/dist/spatial/usage-field/findings.d.ts.map +1 -1
  110. package/dist/spatial/usage-field/findings.js +56 -12
  111. package/dist/spatial/usage-field/measure.d.ts +3 -1
  112. package/dist/spatial/usage-field/measure.d.ts.map +1 -1
  113. package/dist/spatial/usage-field/measure.js +7 -2
  114. package/dist/spatial/usage-field/path.d.ts.map +1 -1
  115. package/dist/spatial/usage-field/path.js +28 -18
  116. package/dist/store/actions/node-actions.d.ts +2380 -2380
  117. package/dist/store/scene-annotations.d.ts +1279 -1279
  118. package/dist/systems/document-reconcile.d.ts.map +1 -1
  119. package/dist/systems/document-reconcile.js +1 -2
  120. package/dist/systems/roof/roof-elevation.d.ts +11 -6
  121. package/dist/systems/roof/roof-elevation.d.ts.map +1 -1
  122. package/dist/systems/roof/roof-elevation.js +24 -11
  123. package/dist/systems/slab/__fixtures__/floor-step.d.ts +2381 -2381
  124. package/dist/systems/slab/__fixtures__/raised-room.d.ts +3818 -3818
  125. package/dist/systems/stair/stair-opening-preview.d.ts +900 -900
  126. package/dist/utils/ensure-scene-openings.d.ts +4815 -4815
  127. package/dist/utils/floor-plate-migration.d.ts +1032 -1032
  128. package/dist/utils/owned-floor-opening-migration.d.ts +1032 -1032
  129. package/dist/utils/reconcile-structure-on-load.d.ts +2380 -2380
  130. package/dist/utils/scene-bounds.d.ts +32 -0
  131. package/dist/utils/scene-bounds.d.ts.map +1 -0
  132. package/dist/utils/scene-bounds.js +201 -0
  133. package/package.json +1 -1
@@ -35,276 +35,54 @@ 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[];
72
- } | 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[];
179
- } | undefined;
180
- } | 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;
201
- width: number;
202
- 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";
211
- } | {
212
- object: "node";
213
- name?: string | undefined;
214
- parentId: string | null;
215
- visible: boolean;
216
- camera?: {
217
- position: [number, number, number];
218
- target: [number, number, number];
219
- mode: "orthographic" | "perspective";
220
- fov?: number | undefined;
221
- zoom?: number | undefined;
222
- } | undefined;
223
- metadata: Record<string, unknown>;
224
- provenance?: {
225
- refs: {
226
- ns?: string | undefined;
227
- id: string;
228
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
229
- }[];
230
- lineage?: {
231
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
232
- fromIds: string[];
233
- } | undefined;
234
- } | 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[];
38
+ id: `elevator_${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";
269
49
  } | 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[];
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;
299
59
  } | undefined;
300
60
  } | undefined;
301
- id: `pipe-trap_${string}`;
61
+ materialPreset?: string | undefined;
62
+ slots?: Record<string, string> | undefined;
302
63
  position: [number, number, number];
303
64
  rotation: number;
304
- diameter: number;
305
- pipeMaterial: "abs" | "cast-iron" | "pvc";
306
- armLengthM: number;
307
- type: "pipe-trap";
65
+ width: number;
66
+ depth: number;
67
+ shaftWidth?: number | undefined;
68
+ shaftDepth?: number | undefined;
69
+ shaftWallThickness: number;
70
+ shaftStyle: "glass" | "solid";
71
+ cabHeight: number;
72
+ doorWidth: number;
73
+ doorHeight: number;
74
+ doorStyle: "center-opening" | "single-left" | "single-right";
75
+ doorPanelStyle: "glass-frame" | "segmented-panel" | "solid-panel";
76
+ fromLevelId: string | null;
77
+ toLevelId: string | null;
78
+ servedLevelIds?: string[] | undefined;
79
+ disabledLevelIds: string[];
80
+ serviceOnlyLevelIds: string[];
81
+ defaultLevelId: string | null;
82
+ speed: number;
83
+ doorDurationMs: number;
84
+ dwellMs: number;
85
+ type: "elevator";
308
86
  } | {
309
87
  object: "node";
310
88
  name?: string | undefined;
@@ -329,120 +107,22 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
329
107
  fromIds: string[];
330
108
  } | undefined;
331
109
  } | 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>;
110
+ type: "item";
111
+ id: `item_${string}`;
341
112
  position: [number, number, number];
342
113
  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;
114
+ scale: [number, number, number];
115
+ side?: "back" | "front" | undefined;
116
+ children: string[];
117
+ wallId?: string | undefined;
118
+ wallT?: number | undefined;
119
+ roofSegmentId?: string | undefined;
120
+ roofFace?: "back" | "front" | "left" | "right" | undefined;
121
+ blockFaceId?: string | undefined;
122
+ supportSlabId?: string | undefined;
123
+ collectionIds?: `collection_${string}`[] | undefined;
394
124
  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?: {
125
+ source?: {
446
126
  kind: "script";
447
127
  meta?: {
448
128
  description?: string | undefined;
@@ -555,69 +235,77 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
555
235
  thumbnail: string;
556
236
  floorPlan: string;
557
237
  } | 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
238
  } | 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[];
239
+ asset: {
240
+ id: string;
241
+ category: string;
242
+ name: string;
243
+ thumbnail: string;
244
+ floorPlanUrl?: string | undefined;
245
+ source: "community" | "library" | "mine";
246
+ isDraft?: boolean | undefined;
247
+ src: string;
248
+ dimensions: [number, number, number];
249
+ attachTo?: "ceiling" | "wall" | "wall-side" | undefined;
250
+ recessed?: boolean | undefined;
251
+ tags?: string[] | undefined;
252
+ functionTags?: string[] | undefined;
253
+ offset: [number, number, number];
254
+ rotation: [number, number, number];
255
+ scale: [number, number, number];
256
+ surface?: {
257
+ height: number;
583
258
  } | 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[];
259
+ interactive?: {
260
+ controls: ({
261
+ kind: "toggle";
262
+ label?: string | undefined;
263
+ default?: boolean | undefined;
264
+ } | {
265
+ kind: "slider";
266
+ label: string;
267
+ min: number;
268
+ max: number;
269
+ step: number;
270
+ unit?: string | undefined;
271
+ displayMode: "dial" | "slider" | "stepper";
272
+ default?: number | undefined;
273
+ } | {
274
+ kind: "temperature";
275
+ label: string;
276
+ min: number;
277
+ max: number;
278
+ unit: "C" | "F";
279
+ default?: number | undefined;
280
+ })[];
281
+ effects: ({
282
+ kind: "animation";
283
+ mode?: "ambient" | "open-close" | undefined;
284
+ control?: number | undefined;
285
+ clips: {
286
+ on?: string | undefined;
287
+ off?: string | undefined;
288
+ loop?: string | undefined;
289
+ };
290
+ } | {
291
+ kind: "light";
292
+ color: string;
293
+ intensityRange: [number, number];
294
+ distance?: number | undefined;
295
+ offset: [number, number, number];
296
+ spot?: {
297
+ direction: [number, number, number];
298
+ angle: number;
299
+ softness: number;
300
+ } | undefined;
301
+ shadows?: boolean | undefined;
302
+ glow?: {
303
+ size: number;
304
+ strength: number;
305
+ } | undefined;
306
+ })[];
612
307
  } | 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";
308
+ };
621
309
  } | {
622
310
  object: "node";
623
311
  name?: string | undefined;
@@ -642,7 +330,8 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
642
330
  fromIds: string[];
643
331
  } | undefined;
644
332
  } | undefined;
645
- id: `cupola_${string}`;
333
+ id: `ceiling_${string}`;
334
+ children: (`item_${string}` | `procedural-item_${string}`)[];
646
335
  material?: {
647
336
  id?: string | undefined;
648
337
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
@@ -665,94 +354,50 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
665
354
  bumpScale?: number | undefined;
666
355
  } | undefined;
667
356
  } | undefined;
357
+ materialPreset?: string | undefined;
668
358
  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";
679
- } | {
680
- object: "node";
681
- name?: string | undefined;
682
- parentId: string | null;
683
- visible: boolean;
684
- camera?: {
685
- position: [number, number, number];
686
- target: [number, number, number];
687
- mode: "orthographic" | "perspective";
688
- fov?: number | undefined;
689
- zoom?: number | undefined;
690
- } | undefined;
691
- metadata: Record<string, unknown>;
692
- provenance?: {
693
- refs: {
694
- ns?: string | undefined;
695
- id: string;
696
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
697
- }[];
698
- lineage?: {
699
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
700
- fromIds: string[];
701
- } | undefined;
702
- } | undefined;
703
- matchFenceStyle?: boolean | undefined;
704
- matchFenceHeight?: boolean | undefined;
705
- leafType?: "double" | "single" | undefined;
706
- style?: "guard" | "horizontal" | "match" | "picket" | "privacy" | "rail" | "slat" | undefined;
359
+ polygon: [number, number][];
360
+ holes: [number, number][][];
361
+ holeMetadata: {
362
+ source: "elevator" | "floor-opening" | "manual" | "room" | "stair";
363
+ openingId?: string | undefined;
364
+ stairId?: string | undefined;
365
+ elevatorId?: string | undefined;
366
+ }[];
367
+ openingIds?: string[] | undefined;
707
368
  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;
722
- width: number;
723
- type: "fence-gate";
724
- } | {
725
- object: "node";
726
- name?: string | undefined;
727
- parentId: string | null;
728
- visible: boolean;
729
- camera?: {
730
- position: [number, number, number];
731
- target: [number, number, number];
732
- mode: "orthographic" | "perspective";
733
- fov?: number | undefined;
734
- zoom?: number | undefined;
735
- } | undefined;
736
- metadata: Record<string, unknown>;
737
- provenance?: {
738
- refs: {
739
- ns?: string | undefined;
740
- id: string;
741
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
742
- }[];
743
- lineage?: {
744
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
745
- fromIds: string[];
369
+ buildUp?: {
370
+ presetId?: string | undefined;
371
+ finish?: {
372
+ kind: "drywall" | "plaster" | "wood-plank";
373
+ thickness: number;
374
+ name?: string | undefined;
375
+ } | undefined;
376
+ framing?: {
377
+ system: "joists" | "truss-chords";
378
+ size: "2x10" | "2x12" | "2x4" | "2x6" | "2x8";
379
+ spacing: number;
380
+ } | undefined;
381
+ decking?: {
382
+ kind: "osb" | "plywood";
383
+ thickness: number;
384
+ name?: string | undefined;
385
+ } | undefined;
386
+ insulation?: {
387
+ kind: "batt" | "blown" | "rigid";
388
+ thickness: number;
389
+ name?: string | undefined;
746
390
  } | undefined;
747
391
  } | undefined;
748
- center: number;
749
- 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";
392
+ regions?: {
393
+ id: string;
394
+ polygon: [number, number][];
395
+ finish: string | Record<string, unknown>;
396
+ }[] | undefined;
397
+ boundary?: "auto" | undefined;
398
+ zoneId?: string | undefined;
399
+ autoFromWalls: boolean;
400
+ type: "ceiling";
756
401
  } | {
757
402
  object: "node";
758
403
  name?: string | undefined;
@@ -777,77 +422,42 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
777
422
  fromIds: string[];
778
423
  } | undefined;
779
424
  } | 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;
828
- 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";
425
+ id: `construction-dimension_${string}`;
426
+ anchors: ({
427
+ kind: "feature";
428
+ reference: {
429
+ nodeId: string;
430
+ featureId: string;
431
+ parameters?: Record<string, string | number | boolean> | undefined;
432
+ };
433
+ fallback: [number, number, number];
434
+ } | [number, number, number])[];
435
+ baseline: {
436
+ origin: [number, number];
437
+ direction: [number, number];
438
+ };
439
+ chainMode: "continuous" | "point-to-point";
440
+ mode: "angular" | "arc-length" | "center-mark" | "chord" | "coordinate" | "diameter" | "linear" | "radius";
441
+ featureCount: number;
442
+ showCenterMark: boolean;
443
+ prefix: string;
444
+ suffix: string;
445
+ textOverride: string | null;
446
+ datumPolicy: "centerline" | "finish-face" | "structural-face" | "wall-face";
447
+ terminator: "architectural-tick" | "dot" | "filled-arrow" | "open-arrow";
448
+ textPosition: "above" | "centered";
449
+ imperialPrecision: "1" | "1/16" | "1/2" | "1/4" | "1/8";
450
+ metricNotation: "meters" | "millimeters";
451
+ extensionStartGap: number;
452
+ extensionOvershoot: number;
453
+ drawingType: "floor-plan" | "foundation-plan" | "reflected-ceiling-plan" | "roof-plan" | "site-plan";
454
+ drawingOverrides: {
455
+ drawingType: "floor-plan" | "foundation-plan" | "reflected-ceiling-plan" | "roof-plan" | "site-plan";
456
+ presentation: "controlled" | "omit" | "shown";
457
+ suppressedSegmentIndexes: number[];
458
+ }[];
459
+ controllingDimensionId: `construction-dimension_${string}` | null;
460
+ type: "construction-dimension";
851
461
  } | {
852
462
  object: "node";
853
463
  name?: string | undefined;
@@ -1042,251 +652,28 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
1042
652
  lift?: number | undefined;
1043
653
  src?: string | undefined;
1044
654
  }[];
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
- };
655
+ backing?: {
656
+ id: string;
657
+ role: "air" | "covering" | "deck" | "fill" | "finish" | "furring" | "glazing" | "insulation" | "lining" | "membrane" | "sheathing" | "shell" | "structure" | "substrate" | "underlay";
658
+ thickness: number;
659
+ core?: true | undefined;
660
+ spacing?: number | undefined;
661
+ material?: string | undefined;
662
+ slot?: string | undefined;
663
+ returns?: boolean | undefined;
664
+ display?: "construction" | "finished" | undefined;
665
+ inset?: number | undefined;
666
+ bottom?: number | undefined;
667
+ lift?: number | undefined;
668
+ src?: string | undefined;
669
+ }[] | undefined;
670
+ face?: "exterior" | "front" | undefined;
671
+ presetId?: string | undefined;
672
+ cavityInsulation?: string | undefined;
673
+ };
674
+ }[] | undefined;
675
+ children: string[];
676
+ type: "site";
1290
677
  } | {
1291
678
  object: "node";
1292
679
  name?: string | undefined;
@@ -2517,8 +1904,223 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
2517
1904
  cavityInsulation?: string | undefined;
2518
1905
  } | undefined;
2519
1906
  slots?: Record<string, string> | undefined;
2520
- children: `rseg_${string}`[];
1907
+ children: string[];
2521
1908
  type: "roof";
1909
+ } | {
1910
+ object: "node";
1911
+ name?: string | undefined;
1912
+ parentId: string | null;
1913
+ visible: boolean;
1914
+ camera?: {
1915
+ position: [number, number, number];
1916
+ target: [number, number, number];
1917
+ mode: "orthographic" | "perspective";
1918
+ fov?: number | undefined;
1919
+ zoom?: number | undefined;
1920
+ } | undefined;
1921
+ metadata: Record<string, unknown>;
1922
+ provenance?: {
1923
+ refs: {
1924
+ ns?: string | undefined;
1925
+ id: string;
1926
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
1927
+ }[];
1928
+ lineage?: {
1929
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
1930
+ fromIds: string[];
1931
+ } | undefined;
1932
+ } | undefined;
1933
+ id: `slab_${string}`;
1934
+ material?: {
1935
+ id?: string | undefined;
1936
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1937
+ properties?: {
1938
+ color: string;
1939
+ roughness: number;
1940
+ metalness: number;
1941
+ opacity: number;
1942
+ transparent: boolean;
1943
+ side: "back" | "double" | "front";
1944
+ } | undefined;
1945
+ texture?: {
1946
+ url: string;
1947
+ repeat?: [number, number] | undefined;
1948
+ scale?: number | undefined;
1949
+ offset?: [number, number] | undefined;
1950
+ normalMap?: string | undefined;
1951
+ normalScale?: number | undefined;
1952
+ bumpMap?: string | undefined;
1953
+ bumpScale?: number | undefined;
1954
+ } | undefined;
1955
+ } | undefined;
1956
+ materialPreset?: string | undefined;
1957
+ slots?: Record<string, string> | undefined;
1958
+ polygon: [number, number][];
1959
+ holes: [number, number][][];
1960
+ holeMetadata: {
1961
+ source: "elevator" | "floor-opening" | "manual" | "room" | "stair";
1962
+ openingId?: string | undefined;
1963
+ stairId?: string | undefined;
1964
+ elevatorId?: string | undefined;
1965
+ }[];
1966
+ elevation: number;
1967
+ floorHeight?: number | undefined;
1968
+ referenceFloorElevation?: number | undefined;
1969
+ foundation?: {
1970
+ type: "none" | "solid";
1971
+ material?: string | {
1972
+ id?: string | undefined;
1973
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1974
+ properties?: {
1975
+ color: string;
1976
+ roughness: number;
1977
+ metalness: number;
1978
+ opacity: number;
1979
+ transparent: boolean;
1980
+ side: "back" | "double" | "front";
1981
+ } | undefined;
1982
+ texture?: {
1983
+ url: string;
1984
+ repeat?: [number, number] | undefined;
1985
+ scale?: number | undefined;
1986
+ offset?: [number, number] | undefined;
1987
+ normalMap?: string | undefined;
1988
+ normalScale?: number | undefined;
1989
+ bumpMap?: string | undefined;
1990
+ bumpScale?: number | undefined;
1991
+ } | undefined;
1992
+ } | undefined;
1993
+ } | undefined;
1994
+ thickness: number;
1995
+ recessed: boolean;
1996
+ recessedRimElevation?: number | undefined;
1997
+ fillToTerrain?: boolean | undefined;
1998
+ boundary?: "auto" | undefined;
1999
+ support?: "open" | undefined;
2000
+ plateRole?: "base" | "platform" | "sunken" | undefined;
2001
+ railing?: {
2002
+ start: [number, number];
2003
+ end: [number, number];
2004
+ }[] | undefined;
2005
+ zoneIds?: string[] | undefined;
2006
+ associatedZoneIds?: string[] | undefined;
2007
+ autoFromWalls: boolean;
2008
+ surfaceScript?: {
2009
+ kind: "script";
2010
+ meta?: {
2011
+ description?: string | undefined;
2012
+ category?: string | undefined;
2013
+ tags?: string[] | undefined;
2014
+ parent?: string | undefined;
2015
+ } | undefined;
2016
+ language: "bpy" | "three";
2017
+ script: string;
2018
+ params: Record<string, string | number | boolean>;
2019
+ artifact: string;
2020
+ manifest: {
2021
+ bounds: {
2022
+ min: [number, number, number];
2023
+ max: [number, number, number];
2024
+ };
2025
+ params: {
2026
+ id: string;
2027
+ label?: string | undefined;
2028
+ kind: "boolean" | "number" | "string";
2029
+ default: string | number | boolean;
2030
+ min?: number | undefined;
2031
+ max?: number | undefined;
2032
+ step?: number | undefined;
2033
+ unit?: string | undefined;
2034
+ options?: string[] | undefined;
2035
+ }[];
2036
+ parts: {
2037
+ id: string;
2038
+ label?: string | undefined;
2039
+ type?: string | undefined;
2040
+ bounds?: {
2041
+ min: [number, number, number];
2042
+ max: [number, number, number];
2043
+ } | undefined;
2044
+ }[];
2045
+ surfaces: {
2046
+ part?: string | undefined;
2047
+ y: number;
2048
+ polygon: [number, number][];
2049
+ }[];
2050
+ slots: {
2051
+ id: string;
2052
+ label?: string | undefined;
2053
+ color?: string | undefined;
2054
+ roughness?: number | undefined;
2055
+ metalness?: number | undefined;
2056
+ transparent?: boolean | undefined;
2057
+ emissive?: boolean | undefined;
2058
+ }[];
2059
+ anchors: {
2060
+ id: string;
2061
+ position: [number, number, number];
2062
+ normal?: [number, number, number] | undefined;
2063
+ }[];
2064
+ lights: {
2065
+ id: string;
2066
+ position: [number, number, number];
2067
+ color: string;
2068
+ intensity: number;
2069
+ distance?: number | undefined;
2070
+ spot?: {
2071
+ direction: [number, number, number];
2072
+ angle: number;
2073
+ softness: number;
2074
+ } | undefined;
2075
+ shadows?: boolean | undefined;
2076
+ glow?: {
2077
+ size: number;
2078
+ strength: number;
2079
+ } | undefined;
2080
+ }[];
2081
+ undersides: {
2082
+ part?: string | undefined;
2083
+ polygon: [number, number][];
2084
+ plane: [number, number, number, number];
2085
+ }[];
2086
+ animations: {
2087
+ name: string;
2088
+ duration: number;
2089
+ }[];
2090
+ cutters?: {
2091
+ host: "ceiling" | "mounted" | "slab" | "wall";
2092
+ polygon: number[][];
2093
+ minY: number;
2094
+ maxY: number;
2095
+ }[] | undefined;
2096
+ cutout: boolean;
2097
+ collider: boolean;
2098
+ shape?: {
2099
+ tolerance: number;
2100
+ bands: {
2101
+ y0: number;
2102
+ y1: number;
2103
+ polygons: {
2104
+ outer: [number, number][];
2105
+ holes?: [number, number][][] | undefined;
2106
+ }[];
2107
+ }[];
2108
+ } | undefined;
2109
+ triangles: number;
2110
+ coverage?: number | undefined;
2111
+ uncovered?: {
2112
+ min: [number, number];
2113
+ max: [number, number];
2114
+ }[] | undefined;
2115
+ };
2116
+ images?: {
2117
+ artifact: string;
2118
+ thumbnail: string;
2119
+ floorPlan: string;
2120
+ } | undefined;
2121
+ inputs: string;
2122
+ } | undefined;
2123
+ type: "slab";
2522
2124
  } | {
2523
2125
  object: "node";
2524
2126
  name?: string | undefined;
@@ -3133,9 +2735,37 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
3133
2735
  } | undefined;
3134
2736
  start: [number, number];
3135
2737
  end: [number, number];
3136
- frontSide: "exterior" | "interior" | "unknown";
3137
- backSide: "exterior" | "interior" | "unknown";
3138
- type: "wall";
2738
+ frontSide: "exterior" | "interior" | "unknown";
2739
+ backSide: "exterior" | "interior" | "unknown";
2740
+ type: "wall";
2741
+ } | {
2742
+ object: "node";
2743
+ name?: string | undefined;
2744
+ parentId: string | null;
2745
+ visible: boolean;
2746
+ camera?: {
2747
+ position: [number, number, number];
2748
+ target: [number, number, number];
2749
+ mode: "orthographic" | "perspective";
2750
+ fov?: number | undefined;
2751
+ zoom?: number | undefined;
2752
+ } | undefined;
2753
+ metadata: Record<string, unknown>;
2754
+ provenance?: {
2755
+ refs: {
2756
+ ns?: string | undefined;
2757
+ id: string;
2758
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
2759
+ }[];
2760
+ lineage?: {
2761
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
2762
+ fromIds: string[];
2763
+ } | undefined;
2764
+ } | undefined;
2765
+ id: `separator_${string}`;
2766
+ start: [number, number];
2767
+ end: [number, number];
2768
+ type: "separator";
3139
2769
  } | {
3140
2770
  object: "node";
3141
2771
  name?: string | undefined;
@@ -3160,10 +2790,18 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
3160
2790
  fromIds: string[];
3161
2791
  } | undefined;
3162
2792
  } | undefined;
3163
- id: `separator_${string}`;
3164
- start: [number, number];
3165
- end: [number, number];
3166
- type: "separator";
2793
+ id: `floor-opening_${string}`;
2794
+ polygon: [number, number][];
2795
+ hostZoneId?: string | undefined;
2796
+ legacyPlateCuts?: Record<string, [number, number][][]> | undefined;
2797
+ legacyCeilingCuts?: Record<string, [number, number][][]> | undefined;
2798
+ source: string;
2799
+ ownerId?: string | undefined;
2800
+ surfaceId?: string | undefined;
2801
+ drawnOn: "ceiling" | "floor";
2802
+ cutsPrimary: boolean;
2803
+ cutsAdjacent: boolean;
2804
+ type: "floor-opening";
3167
2805
  } | {
3168
2806
  object: "node";
3169
2807
  name?: string | undefined;
@@ -3282,42 +2920,18 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
3282
2920
  fromIds: string[];
3283
2921
  } | undefined;
3284
2922
  } | undefined;
3285
- id: `construction-dimension_${string}`;
3286
- anchors: ({
3287
- kind: "feature";
3288
- reference: {
3289
- nodeId: string;
3290
- featureId: string;
3291
- parameters?: Record<string, string | number | boolean> | undefined;
3292
- };
3293
- fallback: [number, number, number];
3294
- } | [number, number, number])[];
3295
- baseline: {
3296
- origin: [number, number];
3297
- direction: [number, number];
3298
- };
3299
- chainMode: "continuous" | "point-to-point";
3300
- mode: "angular" | "arc-length" | "center-mark" | "chord" | "coordinate" | "diameter" | "linear" | "radius";
3301
- featureCount: number;
3302
- showCenterMark: boolean;
3303
- prefix: string;
3304
- suffix: string;
3305
- textOverride: string | null;
3306
- datumPolicy: "centerline" | "finish-face" | "structural-face" | "wall-face";
3307
- terminator: "architectural-tick" | "dot" | "filled-arrow" | "open-arrow";
3308
- textPosition: "above" | "centered";
3309
- imperialPrecision: "1" | "1/16" | "1/2" | "1/4" | "1/8";
3310
- metricNotation: "meters" | "millimeters";
3311
- extensionStartGap: number;
3312
- extensionOvershoot: number;
3313
- drawingType: "floor-plan" | "foundation-plan" | "reflected-ceiling-plan" | "roof-plan" | "site-plan";
3314
- drawingOverrides: {
3315
- drawingType: "floor-plan" | "foundation-plan" | "reflected-ceiling-plan" | "roof-plan" | "site-plan";
3316
- presentation: "controlled" | "omit" | "shown";
3317
- suppressedSegmentIndexes: number[];
3318
- }[];
3319
- controllingDimensionId: `construction-dimension_${string}` | null;
3320
- type: "construction-dimension";
2923
+ id: `beam_${string}`;
2924
+ start: [number, number];
2925
+ end: [number, number];
2926
+ width: number;
2927
+ depth: number;
2928
+ size?: string | undefined;
2929
+ plies: number;
2930
+ material: "glulam" | "lvl" | "pressure-treated" | "sawn" | "steel";
2931
+ placement: "dropped" | "flush";
2932
+ topElevation?: number | undefined;
2933
+ supportSlabId?: string | undefined;
2934
+ type: "beam";
3321
2935
  } | {
3322
2936
  object: "node";
3323
2937
  name?: string | undefined;
@@ -3365,6 +2979,37 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
3365
2979
  slots: Record<string, string>;
3366
2980
  slotNames: Record<string, string>;
3367
2981
  type: "block";
2982
+ } | {
2983
+ object: "node";
2984
+ name?: string | undefined;
2985
+ parentId: string | null;
2986
+ visible: boolean;
2987
+ camera?: {
2988
+ position: [number, number, number];
2989
+ target: [number, number, number];
2990
+ mode: "orthographic" | "perspective";
2991
+ fov?: number | undefined;
2992
+ zoom?: number | undefined;
2993
+ } | undefined;
2994
+ metadata: Record<string, unknown>;
2995
+ provenance?: {
2996
+ refs: {
2997
+ ns?: string | undefined;
2998
+ id: string;
2999
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
3000
+ }[];
3001
+ lineage?: {
3002
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
3003
+ fromIds: string[];
3004
+ } | undefined;
3005
+ } | undefined;
3006
+ id: `structural-grid_${string}`;
3007
+ start: [number, number];
3008
+ end: [number, number];
3009
+ label: string;
3010
+ showStartBubble: boolean;
3011
+ showEndBubble: boolean;
3012
+ type: "structural-grid";
3368
3013
  } | {
3369
3014
  object: "node";
3370
3015
  name?: string | undefined;
@@ -3811,98 +3456,6 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
3811
3456
  color: string;
3812
3457
  metadata: Record<string, unknown>;
3813
3458
  type: "zone";
3814
- } | {
3815
- object: "node";
3816
- name?: string | undefined;
3817
- parentId: string | null;
3818
- visible: boolean;
3819
- camera?: {
3820
- position: [number, number, number];
3821
- target: [number, number, number];
3822
- mode: "orthographic" | "perspective";
3823
- fov?: number | undefined;
3824
- zoom?: number | undefined;
3825
- } | undefined;
3826
- metadata: Record<string, unknown>;
3827
- provenance?: {
3828
- refs: {
3829
- ns?: string | undefined;
3830
- id: string;
3831
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
3832
- }[];
3833
- lineage?: {
3834
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
3835
- fromIds: string[];
3836
- } | undefined;
3837
- } | undefined;
3838
- id: `ceiling_${string}`;
3839
- children: (`item_${string}` | `procedural-item_${string}`)[];
3840
- material?: {
3841
- id?: string | undefined;
3842
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
3843
- properties?: {
3844
- color: string;
3845
- roughness: number;
3846
- metalness: number;
3847
- opacity: number;
3848
- transparent: boolean;
3849
- side: "back" | "double" | "front";
3850
- } | undefined;
3851
- texture?: {
3852
- url: string;
3853
- repeat?: [number, number] | undefined;
3854
- scale?: number | undefined;
3855
- offset?: [number, number] | undefined;
3856
- normalMap?: string | undefined;
3857
- normalScale?: number | undefined;
3858
- bumpMap?: string | undefined;
3859
- bumpScale?: number | undefined;
3860
- } | undefined;
3861
- } | undefined;
3862
- materialPreset?: string | undefined;
3863
- slots?: Record<string, string> | undefined;
3864
- polygon: [number, number][];
3865
- holes: [number, number][][];
3866
- holeMetadata: {
3867
- source: "elevator" | "floor-opening" | "manual" | "room" | "stair";
3868
- openingId?: string | undefined;
3869
- stairId?: string | undefined;
3870
- elevatorId?: string | undefined;
3871
- }[];
3872
- openingIds?: string[] | undefined;
3873
- height?: number | undefined;
3874
- buildUp?: {
3875
- presetId?: string | undefined;
3876
- finish?: {
3877
- kind: "drywall" | "plaster" | "wood-plank";
3878
- thickness: number;
3879
- name?: string | undefined;
3880
- } | undefined;
3881
- framing?: {
3882
- system: "joists" | "truss-chords";
3883
- size: "2x10" | "2x12" | "2x4" | "2x6" | "2x8";
3884
- spacing: number;
3885
- } | undefined;
3886
- decking?: {
3887
- kind: "osb" | "plywood";
3888
- thickness: number;
3889
- name?: string | undefined;
3890
- } | undefined;
3891
- insulation?: {
3892
- kind: "batt" | "blown" | "rigid";
3893
- thickness: number;
3894
- name?: string | undefined;
3895
- } | undefined;
3896
- } | undefined;
3897
- regions?: {
3898
- id: string;
3899
- polygon: [number, number][];
3900
- finish: string | Record<string, unknown>;
3901
- }[] | undefined;
3902
- boundary?: "auto" | undefined;
3903
- zoneId?: string | undefined;
3904
- autoFromWalls: boolean;
3905
- type: "ceiling";
3906
3459
  } | {
3907
3460
  object: "node";
3908
3461
  name?: string | undefined;
@@ -4174,6 +3727,44 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
4174
3727
  railingPostThrough?: boolean | undefined;
4175
3728
  children: `sseg_${string}`[];
4176
3729
  type: "stair";
3730
+ } | {
3731
+ object: "node";
3732
+ name?: string | undefined;
3733
+ parentId: string | null;
3734
+ visible: boolean;
3735
+ camera?: {
3736
+ position: [number, number, number];
3737
+ target: [number, number, number];
3738
+ mode: "orthographic" | "perspective";
3739
+ fov?: number | undefined;
3740
+ zoom?: number | undefined;
3741
+ } | undefined;
3742
+ metadata: Record<string, unknown>;
3743
+ provenance?: {
3744
+ refs: {
3745
+ ns?: string | undefined;
3746
+ id: string;
3747
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
3748
+ }[];
3749
+ lineage?: {
3750
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
3751
+ fromIds: string[];
3752
+ } | undefined;
3753
+ } | undefined;
3754
+ id: `scan_${string}`;
3755
+ url: string | null;
3756
+ captureSession: {
3757
+ sessionId: string;
3758
+ schemaVersion?: number | undefined;
3759
+ revisionId?: string | undefined;
3760
+ manifestUrl?: string | undefined;
3761
+ } | null;
3762
+ layers: Record<string, boolean>;
3763
+ position: [number, number, number];
3764
+ rotation: [number, number, number];
3765
+ scale: number;
3766
+ opacity: number;
3767
+ type: "scan";
4177
3768
  } | {
4178
3769
  object: "node";
4179
3770
  name?: string | undefined;
@@ -4215,6 +3806,113 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
4215
3806
  label: string;
4216
3807
  } | null;
4217
3808
  type: "guide";
3809
+ } | {
3810
+ object: "node";
3811
+ name?: string | undefined;
3812
+ parentId: string | null;
3813
+ visible: boolean;
3814
+ camera?: {
3815
+ position: [number, number, number];
3816
+ target: [number, number, number];
3817
+ mode: "orthographic" | "perspective";
3818
+ fov?: number | undefined;
3819
+ zoom?: number | undefined;
3820
+ } | undefined;
3821
+ metadata: Record<string, unknown>;
3822
+ provenance?: {
3823
+ refs: {
3824
+ ns?: string | undefined;
3825
+ id: string;
3826
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
3827
+ }[];
3828
+ lineage?: {
3829
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
3830
+ fromIds: string[];
3831
+ } | undefined;
3832
+ } | undefined;
3833
+ id: `measurement_${string}`;
3834
+ measurement: {
3835
+ kind: "distance";
3836
+ points: [{
3837
+ kind: "feature";
3838
+ reference: {
3839
+ nodeId: string;
3840
+ featureId: string;
3841
+ parameters?: Record<string, string | number | boolean> | undefined;
3842
+ };
3843
+ fallback: [number, number, number];
3844
+ } | [number, number, number], {
3845
+ kind: "feature";
3846
+ reference: {
3847
+ nodeId: string;
3848
+ featureId: string;
3849
+ parameters?: Record<string, string | number | boolean> | undefined;
3850
+ };
3851
+ fallback: [number, number, number];
3852
+ } | [number, number, number]];
3853
+ } | {
3854
+ kind: "angle";
3855
+ points: [{
3856
+ kind: "feature";
3857
+ reference: {
3858
+ nodeId: string;
3859
+ featureId: string;
3860
+ parameters?: Record<string, string | number | boolean> | undefined;
3861
+ };
3862
+ fallback: [number, number, number];
3863
+ } | [number, number, number], {
3864
+ kind: "feature";
3865
+ reference: {
3866
+ nodeId: string;
3867
+ featureId: string;
3868
+ parameters?: Record<string, string | number | boolean> | undefined;
3869
+ };
3870
+ fallback: [number, number, number];
3871
+ } | [number, number, number], {
3872
+ kind: "feature";
3873
+ reference: {
3874
+ nodeId: string;
3875
+ featureId: string;
3876
+ parameters?: Record<string, string | number | boolean> | undefined;
3877
+ };
3878
+ fallback: [number, number, number];
3879
+ } | [number, number, number]];
3880
+ } | {
3881
+ kind: "area";
3882
+ base: ({
3883
+ kind: "feature";
3884
+ reference: {
3885
+ nodeId: string;
3886
+ featureId: string;
3887
+ parameters?: Record<string, string | number | boolean> | undefined;
3888
+ };
3889
+ fallback: [number, number, number];
3890
+ } | [number, number, number])[];
3891
+ } | {
3892
+ kind: "perimeter";
3893
+ base: ({
3894
+ kind: "feature";
3895
+ reference: {
3896
+ nodeId: string;
3897
+ featureId: string;
3898
+ parameters?: Record<string, string | number | boolean> | undefined;
3899
+ };
3900
+ fallback: [number, number, number];
3901
+ } | [number, number, number])[];
3902
+ } | {
3903
+ kind: "volume";
3904
+ base: ({
3905
+ kind: "feature";
3906
+ reference: {
3907
+ nodeId: string;
3908
+ featureId: string;
3909
+ parameters?: Record<string, string | number | boolean> | undefined;
3910
+ };
3911
+ fallback: [number, number, number];
3912
+ } | [number, number, number])[];
3913
+ extrusion: [number, number, number];
3914
+ };
3915
+ type: "measurement";
4218
3916
  } | {
4219
3917
  object: "node";
4220
3918
  name?: string | undefined;
@@ -4309,6 +4007,60 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
4309
4007
  materialPreset?: string | undefined;
4310
4008
  slots?: Record<string, string> | undefined;
4311
4009
  type: "shelf";
4010
+ } | {
4011
+ object: "node";
4012
+ name?: string | undefined;
4013
+ parentId: string | null;
4014
+ visible: boolean;
4015
+ camera?: {
4016
+ position: [number, number, number];
4017
+ target: [number, number, number];
4018
+ mode: "orthographic" | "perspective";
4019
+ fov?: number | undefined;
4020
+ zoom?: number | undefined;
4021
+ } | undefined;
4022
+ metadata: Record<string, unknown>;
4023
+ provenance?: {
4024
+ refs: {
4025
+ ns?: string | undefined;
4026
+ id: string;
4027
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
4028
+ }[];
4029
+ lineage?: {
4030
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
4031
+ fromIds: string[];
4032
+ } | undefined;
4033
+ } | undefined;
4034
+ id: `duct-segment_${string}`;
4035
+ path: [number, number, number][];
4036
+ autoHangers?: boolean | undefined;
4037
+ hangerOverrides?: Record<string, {
4038
+ fraction?: number | undefined;
4039
+ skipped?: boolean | undefined;
4040
+ hostId?: string | undefined;
4041
+ }> | undefined;
4042
+ hangerStyle?: "double" | "single" | undefined;
4043
+ hangerSpacing?: number | undefined;
4044
+ hangerMaxReach?: number | undefined;
4045
+ wallAttachment?: {
4046
+ wallId: `wall_${string}`;
4047
+ side: "back" | "front";
4048
+ startUV: [number, number];
4049
+ endUV: [number, number];
4050
+ offset: number;
4051
+ } | undefined;
4052
+ shape: "oval" | "rect" | "round";
4053
+ diameter: number;
4054
+ width: number;
4055
+ height: number;
4056
+ roll: number;
4057
+ ductMaterial: "duct-board" | "flex" | "sheet-metal" | "spiral";
4058
+ seamDetail: boolean;
4059
+ insulated: boolean;
4060
+ insulationR: number;
4061
+ system: "return" | "supply";
4062
+ slots?: Record<string, string> | undefined;
4063
+ type: "duct-segment";
4312
4064
  } | {
4313
4065
  object: "node";
4314
4066
  name?: string | undefined;
@@ -4434,6 +4186,36 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
4434
4186
  returnWidth: number;
4435
4187
  returnHeight: number;
4436
4188
  type: "hvac-equipment";
4189
+ } | {
4190
+ object: "node";
4191
+ name?: string | undefined;
4192
+ parentId: string | null;
4193
+ visible: boolean;
4194
+ camera?: {
4195
+ position: [number, number, number];
4196
+ target: [number, number, number];
4197
+ mode: "orthographic" | "perspective";
4198
+ fov?: number | undefined;
4199
+ zoom?: number | undefined;
4200
+ } | undefined;
4201
+ metadata: Record<string, unknown>;
4202
+ provenance?: {
4203
+ refs: {
4204
+ ns?: string | undefined;
4205
+ id: string;
4206
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
4207
+ }[];
4208
+ lineage?: {
4209
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
4210
+ fromIds: string[];
4211
+ } | undefined;
4212
+ } | undefined;
4213
+ id: `lineset_${string}`;
4214
+ path: [number, number, number][];
4215
+ suctionDiameter: number;
4216
+ liquidDiameter: number;
4217
+ insulated: boolean;
4218
+ type: "lineset";
4437
4219
  } | {
4438
4220
  object: "node";
4439
4221
  name?: string | undefined;
@@ -4567,12 +4349,102 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
4567
4349
  fromIds: string[];
4568
4350
  } | undefined;
4569
4351
  } | undefined;
4570
- id: `level_${string}`;
4571
- children: (`beam_${string}` | `block_${string}` | `ceiling_${string}` | `column_${string}` | `construction-dimension_${string}` | `duct-fitting_${string}` | `duct-segment_${string}` | `duct-terminal_${string}` | `fence_${string}` | `floor-opening_${string}` | `guide_${string}` | `hvac-equipment_${string}` | `imesh_${string}` | `item_${string}` | `lineset_${string}` | `liquid-line_${string}` | `measurement_${string}` | `pipe-fitting_${string}` | `pipe-segment_${string}` | `pipe-trap_${string}` | `procedural-item_${string}` | `roof_${string}` | `scan_${string}` | `separator_${string}` | `shelf_${string}` | `slab_${string}` | `spawn_${string}` | `stair_${string}` | `structural-grid_${string}` | `wall_${string}` | `zone_${string}`)[];
4572
- level: number;
4573
- baseElevation: number;
4574
- height?: number | undefined;
4575
- type: "level";
4352
+ id: `pipe-trap_${string}`;
4353
+ position: [number, number, number];
4354
+ rotation: number;
4355
+ diameter: number;
4356
+ pipeMaterial: "abs" | "cast-iron" | "pvc";
4357
+ armLengthM: number;
4358
+ type: "pipe-trap";
4359
+ } | {
4360
+ object: "node";
4361
+ name?: string | undefined;
4362
+ parentId: string | null;
4363
+ visible: boolean;
4364
+ camera?: {
4365
+ position: [number, number, number];
4366
+ target: [number, number, number];
4367
+ mode: "orthographic" | "perspective";
4368
+ fov?: number | undefined;
4369
+ zoom?: number | undefined;
4370
+ } | undefined;
4371
+ metadata: Record<string, unknown>;
4372
+ provenance?: {
4373
+ refs: {
4374
+ ns?: string | undefined;
4375
+ id: string;
4376
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
4377
+ }[];
4378
+ lineage?: {
4379
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
4380
+ fromIds: string[];
4381
+ } | undefined;
4382
+ } | undefined;
4383
+ id: `level_${string}`;
4384
+ children: (`beam_${string}` | `block_${string}` | `ceiling_${string}` | `column_${string}` | `construction-dimension_${string}` | `duct-fitting_${string}` | `duct-segment_${string}` | `duct-terminal_${string}` | `fence_${string}` | `floor-opening_${string}` | `guide_${string}` | `hvac-equipment_${string}` | `imesh_${string}` | `item_${string}` | `lineset_${string}` | `liquid-line_${string}` | `measurement_${string}` | `pipe-fitting_${string}` | `pipe-segment_${string}` | `pipe-trap_${string}` | `procedural-item_${string}` | `roof_${string}` | `scan_${string}` | `separator_${string}` | `shelf_${string}` | `slab_${string}` | `spawn_${string}` | `stair_${string}` | `structural-grid_${string}` | `wall_${string}` | `zone_${string}`)[];
4385
+ level: number;
4386
+ baseElevation: number;
4387
+ height?: number | undefined;
4388
+ type: "level";
4389
+ } | {
4390
+ object: "node";
4391
+ parentId: string | null;
4392
+ visible: boolean;
4393
+ camera?: {
4394
+ position: [number, number, number];
4395
+ target: [number, number, number];
4396
+ mode: "orthographic" | "perspective";
4397
+ fov?: number | undefined;
4398
+ zoom?: number | undefined;
4399
+ } | undefined;
4400
+ provenance?: {
4401
+ refs: {
4402
+ ns?: string | undefined;
4403
+ id: string;
4404
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
4405
+ }[];
4406
+ lineage?: {
4407
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
4408
+ fromIds: string[];
4409
+ } | undefined;
4410
+ } | undefined;
4411
+ id: `unit_${string}`;
4412
+ name: string;
4413
+ kind: "apartment" | "commercial" | "common" | "hotel-room";
4414
+ members: `zone_${string}`[];
4415
+ color: string;
4416
+ metadata: Record<string, unknown>;
4417
+ type: "unit";
4418
+ } | {
4419
+ object: "node";
4420
+ name?: string | undefined;
4421
+ parentId: string | null;
4422
+ visible: boolean;
4423
+ camera?: {
4424
+ position: [number, number, number];
4425
+ target: [number, number, number];
4426
+ mode: "orthographic" | "perspective";
4427
+ fov?: number | undefined;
4428
+ zoom?: number | undefined;
4429
+ } | undefined;
4430
+ metadata: Record<string, unknown>;
4431
+ provenance?: {
4432
+ refs: {
4433
+ ns?: string | undefined;
4434
+ id: string;
4435
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
4436
+ }[];
4437
+ lineage?: {
4438
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
4439
+ fromIds: string[];
4440
+ } | undefined;
4441
+ } | undefined;
4442
+ id: `building_${string}`;
4443
+ children: (`elevator_${string}` | `level_${string}` | `unit_${string}`)[];
4444
+ position: [number, number, number];
4445
+ rotation: [number, number, number];
4446
+ groundLevelId?: `level_${string}` | undefined;
4447
+ type: "building";
4576
4448
  } | {
4577
4449
  object: "node";
4578
4450
  name?: string | undefined;
@@ -4597,54 +4469,27 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
4597
4469
  fromIds: string[];
4598
4470
  } | undefined;
4599
4471
  } | undefined;
4600
- id: `elevator_${string}`;
4601
- material?: {
4602
- id?: string | undefined;
4603
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
4604
- properties?: {
4605
- color: string;
4606
- roughness: number;
4607
- metalness: number;
4608
- opacity: number;
4609
- transparent: boolean;
4610
- side: "back" | "double" | "front";
4611
- } | undefined;
4612
- texture?: {
4613
- url: string;
4614
- repeat?: [number, number] | undefined;
4615
- scale?: number | undefined;
4616
- offset?: [number, number] | undefined;
4617
- normalMap?: string | undefined;
4618
- normalScale?: number | undefined;
4619
- bumpMap?: string | undefined;
4620
- bumpScale?: number | undefined;
4621
- } | undefined;
4622
- } | undefined;
4623
- materialPreset?: string | undefined;
4624
- slots?: Record<string, string> | undefined;
4625
- position: [number, number, number];
4626
- rotation: number;
4472
+ matchFenceStyle?: boolean | undefined;
4473
+ matchFenceHeight?: boolean | undefined;
4474
+ leafType?: "double" | "single" | undefined;
4475
+ style?: "guard" | "horizontal" | "match" | "picket" | "privacy" | "rail" | "slat" | undefined;
4476
+ height?: number | undefined;
4477
+ clearance?: number | undefined;
4478
+ thickness?: number | undefined;
4479
+ frameWidth?: number | undefined;
4480
+ spacing?: number | undefined;
4481
+ boardWidth?: number | undefined;
4482
+ hinge?: "left" | "right" | undefined;
4483
+ swing?: "inward" | "outward" | undefined;
4484
+ openAngle?: number | undefined;
4485
+ leafSplit?: number | undefined;
4486
+ brace?: "cross" | "diagonal" | "none" | undefined;
4487
+ showHardware?: boolean | undefined;
4488
+ showPosts?: boolean | undefined;
4489
+ id: `fence-gate_${string}`;
4490
+ center: number;
4627
4491
  width: number;
4628
- depth: number;
4629
- shaftWidth?: number | undefined;
4630
- shaftDepth?: number | undefined;
4631
- shaftWallThickness: number;
4632
- shaftStyle: "glass" | "solid";
4633
- cabHeight: number;
4634
- doorWidth: number;
4635
- doorHeight: number;
4636
- doorStyle: "center-opening" | "single-left" | "single-right";
4637
- doorPanelStyle: "glass-frame" | "segmented-panel" | "solid-panel";
4638
- fromLevelId: string | null;
4639
- toLevelId: string | null;
4640
- servedLevelIds?: string[] | undefined;
4641
- disabledLevelIds: string[];
4642
- serviceOnlyLevelIds: string[];
4643
- defaultLevelId: string | null;
4644
- speed: number;
4645
- doorDurationMs: number;
4646
- dwellMs: number;
4647
- type: "elevator";
4492
+ type: "fence-gate";
4648
4493
  } | {
4649
4494
  object: "node";
4650
4495
  name?: string | undefined;
@@ -4669,12 +4514,14 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
4669
4514
  fromIds: string[];
4670
4515
  } | undefined;
4671
4516
  } | undefined;
4672
- id: `building_${string}`;
4673
- children: (`elevator_${string}` | `level_${string}` | `unit_${string}`)[];
4674
- position: [number, number, number];
4675
- rotation: [number, number, number];
4676
- groundLevelId?: `level_${string}` | undefined;
4677
- type: "building";
4517
+ center: number;
4518
+ width: number;
4519
+ matchFenceStyle?: boolean | undefined;
4520
+ matchFenceHeight?: boolean | undefined;
4521
+ height?: number | undefined;
4522
+ showPosts: boolean;
4523
+ id: `fence-opening_${string}`;
4524
+ type: "fence-opening";
4678
4525
  } | {
4679
4526
  object: "node";
4680
4527
  name?: string | undefined;
@@ -5186,6 +5033,64 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
5186
5033
  spinSpeed: number;
5187
5034
  style: "cylinder" | "globe";
5188
5035
  type: "turbine-vent";
5036
+ } | {
5037
+ object: "node";
5038
+ name?: string | undefined;
5039
+ parentId: string | null;
5040
+ visible: boolean;
5041
+ camera?: {
5042
+ position: [number, number, number];
5043
+ target: [number, number, number];
5044
+ mode: "orthographic" | "perspective";
5045
+ fov?: number | undefined;
5046
+ zoom?: number | undefined;
5047
+ } | undefined;
5048
+ metadata: Record<string, unknown>;
5049
+ provenance?: {
5050
+ refs: {
5051
+ ns?: string | undefined;
5052
+ id: string;
5053
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
5054
+ }[];
5055
+ lineage?: {
5056
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
5057
+ fromIds: string[];
5058
+ } | undefined;
5059
+ } | undefined;
5060
+ id: `cupola_${string}`;
5061
+ material?: {
5062
+ id?: string | undefined;
5063
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
5064
+ properties?: {
5065
+ color: string;
5066
+ roughness: number;
5067
+ metalness: number;
5068
+ opacity: number;
5069
+ transparent: boolean;
5070
+ side: "back" | "double" | "front";
5071
+ } | undefined;
5072
+ texture?: {
5073
+ url: string;
5074
+ repeat?: [number, number] | undefined;
5075
+ scale?: number | undefined;
5076
+ offset?: [number, number] | undefined;
5077
+ normalMap?: string | undefined;
5078
+ normalScale?: number | undefined;
5079
+ bumpMap?: string | undefined;
5080
+ bumpScale?: number | undefined;
5081
+ } | undefined;
5082
+ } | undefined;
5083
+ slots?: Record<string, string> | undefined;
5084
+ materialPreset: string;
5085
+ roofSegmentId?: string | undefined;
5086
+ position: [number, number, number];
5087
+ rotation: number;
5088
+ width: number;
5089
+ depth: number;
5090
+ height: number;
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;