@pascal-app/core 1.0.7 → 1.1.0

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 (176) hide show
  1. package/dist/agent-operations/__fixtures__/native-materials.d.ts +4 -0
  2. package/dist/agent-operations/__fixtures__/native-materials.d.ts.map +1 -1
  3. package/dist/agent-operations/__fixtures__/roof-bearing-cases.d.ts +11283 -11279
  4. package/dist/agent-operations/__fixtures__/roof-bearing-cases.d.ts.map +1 -1
  5. package/dist/agent-operations/__fixtures__/verify-scene-cases.d.ts +77 -77
  6. package/dist/agent-operations/author-scene.d.ts.map +1 -1
  7. package/dist/agent-operations/author-scene.js +2 -3
  8. package/dist/agent-operations/circulation-spaces.d.ts +3181 -3180
  9. package/dist/agent-operations/circulation-spaces.d.ts.map +1 -1
  10. package/dist/agent-operations/level-reads.js +1 -1
  11. package/dist/agent-operations/move-plan.d.ts.map +1 -1
  12. package/dist/agent-operations/move-plan.js +11 -9
  13. package/dist/agent-operations/scene-queries.d.ts +2328 -2327
  14. package/dist/agent-operations/scene-queries.d.ts.map +1 -1
  15. package/dist/agent-operations/verify-scene.d.ts.map +1 -1
  16. package/dist/agent-operations/verify-scene.js +4 -2
  17. package/dist/agent-operations/wall-object-observations.d.ts.map +1 -1
  18. package/dist/agent-operations/wall-object-observations.js +1 -1
  19. package/dist/agent-tools/wall-openings.js +2 -2
  20. package/dist/building/__fixtures__/wall-opening-cases.d.ts +229 -228
  21. package/dist/building/__fixtures__/wall-opening-cases.d.ts.map +1 -1
  22. package/dist/building/level-duplication.d.ts +3681 -3679
  23. package/dist/building/level-duplication.d.ts.map +1 -1
  24. package/dist/building/merge-windows.d.ts.map +1 -1
  25. package/dist/building/merge-windows.js +4 -3
  26. package/dist/building/wall-openings.d.ts +20 -6
  27. package/dist/building/wall-openings.d.ts.map +1 -1
  28. package/dist/building/wall-openings.js +74 -25
  29. package/dist/commands/structure/shared.d.ts +1 -0
  30. package/dist/commands/structure/shared.d.ts.map +1 -1
  31. package/dist/commands/structure/zone-wall-merge.d.ts +2351 -2348
  32. package/dist/commands/structure/zone-wall-merge.d.ts.map +1 -1
  33. package/dist/contracts/reference-inventory.d.ts.map +1 -1
  34. package/dist/contracts/reference-inventory.js +0 -1
  35. package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts +6 -1
  36. package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts.map +1 -1
  37. package/dist/hooks/spatial-grid/spatial-grid-manager.js +30 -9
  38. package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts +3181 -3180
  39. package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts.map +1 -1
  40. package/dist/hooks/spatial-grid/spatial-grid-sync.js +8 -4
  41. package/dist/index.d.ts +11 -4
  42. package/dist/index.d.ts.map +1 -1
  43. package/dist/index.js +11 -4
  44. package/dist/lib/__fixtures__/mezzanine.d.ts +8595 -8591
  45. package/dist/lib/__fixtures__/mezzanine.d.ts.map +1 -1
  46. package/dist/lib/absorb-wall-separators.d.ts +1664 -1663
  47. package/dist/lib/absorb-wall-separators.d.ts.map +1 -1
  48. package/dist/lib/build-mode.d.ts +11 -0
  49. package/dist/lib/build-mode.d.ts.map +1 -0
  50. package/dist/lib/build-mode.js +24 -0
  51. package/dist/lib/corner-pair.d.ts +2 -0
  52. package/dist/lib/corner-pair.d.ts.map +1 -1
  53. package/dist/lib/door-interaction.d.ts +14 -0
  54. package/dist/lib/door-interaction.d.ts.map +1 -0
  55. package/dist/lib/door-interaction.js +62 -0
  56. package/dist/lib/elevator-support.d.ts +15 -0
  57. package/dist/lib/elevator-support.d.ts.map +1 -0
  58. package/dist/lib/elevator-support.js +40 -0
  59. package/dist/lib/floor-intent-changes.d.ts.map +1 -1
  60. package/dist/lib/floor-intent-changes.js +6 -4
  61. package/dist/lib/hierarchy.d.ts +19 -0
  62. package/dist/lib/hierarchy.d.ts.map +1 -0
  63. package/dist/lib/hierarchy.js +53 -0
  64. package/dist/lib/opening-floor-datum.d.ts +1 -1
  65. package/dist/lib/opening-floor-datum.d.ts.map +1 -1
  66. package/dist/lib/opening-floor-datum.js +2 -2
  67. package/dist/lib/own-floor-intent.d.ts.map +1 -1
  68. package/dist/lib/own-floor-intent.js +2 -2
  69. package/dist/lib/polygon-boolean.d.ts.map +1 -1
  70. package/dist/lib/polygon-boolean.js +2 -1
  71. package/dist/lib/room-floor-elevation.d.ts +12 -0
  72. package/dist/lib/room-floor-elevation.d.ts.map +1 -0
  73. package/dist/lib/room-floor-elevation.js +41 -0
  74. package/dist/lib/room-floor-feasibility.d.ts.map +1 -1
  75. package/dist/lib/room-floor-feasibility.js +1 -1
  76. package/dist/lib/space-detection.d.ts.map +1 -1
  77. package/dist/lib/space-detection.js +1 -0
  78. package/dist/lib/wall-face-script.d.ts.map +1 -1
  79. package/dist/lib/wall-face-script.js +3 -3
  80. package/dist/lib/window-interaction.d.ts +16 -0
  81. package/dist/lib/window-interaction.d.ts.map +1 -0
  82. package/dist/lib/window-interaction.js +82 -0
  83. package/dist/lib/zone-quantities.js +1 -1
  84. package/dist/node-slots/column.d.ts +5 -0
  85. package/dist/node-slots/column.d.ts.map +1 -1
  86. package/dist/node-slots/column.js +10 -0
  87. package/dist/registry/index.d.ts +1 -1
  88. package/dist/registry/index.d.ts.map +1 -1
  89. package/dist/registry/index.js +1 -1
  90. package/dist/registry/registry.d.ts +5 -0
  91. package/dist/registry/registry.d.ts.map +1 -1
  92. package/dist/registry/registry.js +10 -0
  93. package/dist/registry/types.d.ts +24 -0
  94. package/dist/registry/types.d.ts.map +1 -1
  95. package/dist/schema/index.d.ts +1 -1
  96. package/dist/schema/index.d.ts.map +1 -1
  97. package/dist/schema/index.js +1 -1
  98. package/dist/schema/nodes/roof-segment-resize.d.ts.map +1 -1
  99. package/dist/schema/nodes/roof-segment-resize.js +2 -2
  100. package/dist/schema/nodes/roof-segment.d.ts +2 -0
  101. package/dist/schema/nodes/roof-segment.d.ts.map +1 -1
  102. package/dist/schema/nodes/roof-segment.js +40 -2
  103. package/dist/schema/nodes/wall.d.ts +1 -0
  104. package/dist/schema/nodes/wall.d.ts.map +1 -1
  105. package/dist/schema/nodes/wall.js +6 -0
  106. package/dist/schema/types.d.ts +1 -0
  107. package/dist/schema/types.d.ts.map +1 -1
  108. package/dist/services/index.d.ts +1 -1
  109. package/dist/services/index.d.ts.map +1 -1
  110. package/dist/services/index.js +1 -1
  111. package/dist/services/movement.d.ts +7 -0
  112. package/dist/services/movement.d.ts.map +1 -1
  113. package/dist/services/movement.js +13 -0
  114. package/dist/services/port-connectivity.d.ts +15 -6
  115. package/dist/services/port-connectivity.d.ts.map +1 -1
  116. package/dist/services/port-connectivity.js +83 -17
  117. package/dist/services/roof-bearing.js +2 -1
  118. package/dist/services/storey.d.ts +6 -1
  119. package/dist/services/storey.d.ts.map +1 -1
  120. package/dist/services/storey.js +11 -2
  121. package/dist/spatial/usage-field/swings.d.ts +1 -0
  122. package/dist/spatial/usage-field/swings.d.ts.map +1 -1
  123. package/dist/spatial/usage-field/walls.d.ts +2 -0
  124. package/dist/spatial/usage-field/walls.d.ts.map +1 -1
  125. package/dist/spatial/usage-field/walls.js +18 -4
  126. package/dist/store/actions/node-actions.d.ts +1614 -1613
  127. package/dist/store/actions/node-actions.d.ts.map +1 -1
  128. package/dist/store/actions/node-actions.js +23 -5
  129. package/dist/store/derived-node-guard.d.ts.map +1 -1
  130. package/dist/store/derived-node-guard.js +2 -1
  131. package/dist/store/scene-annotations.d.ts +5033 -5031
  132. package/dist/store/scene-annotations.d.ts.map +1 -1
  133. package/dist/systems/elevator/elevator-geometry.d.ts +25 -0
  134. package/dist/systems/elevator/elevator-geometry.d.ts.map +1 -1
  135. package/dist/systems/elevator/elevator-geometry.js +40 -8
  136. package/dist/systems/elevator/elevator-opening-sync.d.ts.map +1 -1
  137. package/dist/systems/elevator/elevator-opening-sync.js +4 -35
  138. package/dist/systems/elevator/elevator-runtime.d.ts.map +1 -1
  139. package/dist/systems/elevator/elevator-runtime.js +95 -18
  140. package/dist/systems/elevator/elevator-service.d.ts.map +1 -1
  141. package/dist/systems/elevator/elevator-service.js +24 -4
  142. package/dist/systems/roof/roof-elevation.d.ts.map +1 -1
  143. package/dist/systems/roof/roof-elevation.js +2 -1
  144. package/dist/systems/slab/__fixtures__/floor-step.d.ts +1614 -1610
  145. package/dist/systems/slab/__fixtures__/floor-step.d.ts.map +1 -1
  146. package/dist/systems/slab/__fixtures__/raised-room.d.ts +2924 -2920
  147. package/dist/systems/slab/__fixtures__/raised-room.d.ts.map +1 -1
  148. package/dist/systems/stair/stair-opening-preview.d.ts +1147 -1146
  149. package/dist/systems/stair/stair-opening-preview.d.ts.map +1 -1
  150. package/dist/systems/wall/wall-curve.d.ts +10 -0
  151. package/dist/systems/wall/wall-curve.d.ts.map +1 -1
  152. package/dist/systems/wall/wall-curve.js +38 -0
  153. package/dist/systems/wall/wall-frame.d.ts.map +1 -1
  154. package/dist/systems/wall/wall-frame.js +8 -0
  155. package/dist/systems/wall/wall-merge.d.ts +9 -1
  156. package/dist/systems/wall/wall-merge.d.ts.map +1 -1
  157. package/dist/systems/wall/wall-merge.js +38 -6
  158. package/dist/systems/wall/wall-top.d.ts +10 -3
  159. package/dist/systems/wall/wall-top.d.ts.map +1 -1
  160. package/dist/systems/wall/wall-top.js +24 -8
  161. package/dist/systems/wall/wall-topology.d.ts.map +1 -1
  162. package/dist/systems/wall/wall-topology.js +19 -1
  163. package/dist/utils/ensure-scene-openings.d.ts +4354 -4352
  164. package/dist/utils/ensure-scene-openings.d.ts.map +1 -1
  165. package/dist/utils/floor-plate-migration.d.ts +1664 -1663
  166. package/dist/utils/floor-plate-migration.d.ts.map +1 -1
  167. package/dist/utils/measurement-format.d.ts +27 -0
  168. package/dist/utils/measurement-format.d.ts.map +1 -0
  169. package/dist/utils/measurement-format.js +143 -0
  170. package/dist/utils/owned-floor-opening-migration.d.ts +1147 -1146
  171. package/dist/utils/owned-floor-opening-migration.d.ts.map +1 -1
  172. package/dist/utils/reconcile-structure-on-load.d.ts +439 -438
  173. package/dist/utils/reconcile-structure-on-load.d.ts.map +1 -1
  174. package/dist/validation/validate-build-json.d.ts.map +1 -1
  175. package/dist/validation/validate-build-json.js +3 -1
  176. package/package.json +1 -1
@@ -24,125 +24,29 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
24
24
  fromIds: string[];
25
25
  } | undefined;
26
26
  } | undefined;
27
- id: `beam_${string}`;
28
- start: [number, number];
29
- end: [number, number];
30
- width: number;
31
- depth: number;
32
- size?: string | undefined;
33
- plies: number;
34
- material: "glulam" | "lvl" | "pressure-treated" | "sawn" | "steel";
35
- placement: "dropped" | "flush";
36
- topElevation?: number | undefined;
27
+ id: `block_${string}`;
28
+ children: string[];
29
+ position: [number, number, number];
30
+ rotation: number;
37
31
  supportSlabId?: string | undefined;
38
- type: "beam";
39
- } | {
40
- object: "node";
41
- name?: string | undefined;
42
- parentId: string | null;
43
- visible: boolean;
44
- camera?: {
45
- position: [number, number, number];
46
- target: [number, number, number];
47
- mode: "orthographic" | "perspective";
48
- fov?: number | undefined;
49
- zoom?: number | undefined;
50
- } | undefined;
51
- metadata: Record<string, unknown>;
52
- provenance?: {
53
- refs: {
54
- ns?: string | undefined;
32
+ topology: {
33
+ vertices: {
55
34
  id: string;
56
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
35
+ position: [number, number, number];
36
+ }[];
37
+ edges: {
38
+ id: string;
39
+ vertexIds: [string, string];
40
+ }[];
41
+ faces: {
42
+ id: string;
43
+ vertexIds: string[];
44
+ materialSlot: string;
57
45
  }[];
58
- lineage?: {
59
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
60
- fromIds: string[];
61
- } | undefined;
62
- } | undefined;
63
- id: `measurement_${string}`;
64
- measurement: {
65
- kind: "volume";
66
- base: ({
67
- kind: "feature";
68
- reference: {
69
- nodeId: string;
70
- featureId: string;
71
- parameters?: Record<string, string | number | boolean> | undefined;
72
- };
73
- fallback: [number, number, number];
74
- } | [number, number, number])[];
75
- extrusion: [number, number, number];
76
- } | {
77
- kind: "distance";
78
- points: [{
79
- kind: "feature";
80
- reference: {
81
- nodeId: string;
82
- featureId: string;
83
- parameters?: Record<string, string | number | boolean> | undefined;
84
- };
85
- fallback: [number, number, number];
86
- } | [number, number, number], {
87
- kind: "feature";
88
- reference: {
89
- nodeId: string;
90
- featureId: string;
91
- parameters?: Record<string, string | number | boolean> | undefined;
92
- };
93
- fallback: [number, number, number];
94
- } | [number, number, number]];
95
- } | {
96
- kind: "angle";
97
- points: [{
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
- kind: "feature";
107
- reference: {
108
- nodeId: string;
109
- featureId: string;
110
- parameters?: Record<string, string | number | boolean> | undefined;
111
- };
112
- fallback: [number, number, number];
113
- } | [number, number, number], {
114
- kind: "feature";
115
- reference: {
116
- nodeId: string;
117
- featureId: string;
118
- parameters?: Record<string, string | number | boolean> | undefined;
119
- };
120
- fallback: [number, number, number];
121
- } | [number, number, number]];
122
- } | {
123
- kind: "area";
124
- base: ({
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: "perimeter";
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
46
  };
145
- type: "measurement";
47
+ slots: Record<string, string>;
48
+ slotNames: Record<string, string>;
49
+ type: "block";
146
50
  } | {
147
51
  object: "node";
148
52
  name?: string | undefined;
@@ -167,36 +71,42 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
167
71
  fromIds: string[];
168
72
  } | undefined;
169
73
  } | undefined;
170
- id: `duct-segment_${string}`;
171
- path: [number, number, number][];
172
- autoHangers?: boolean | undefined;
173
- hangerOverrides?: Record<string, {
174
- fraction?: number | undefined;
175
- skipped?: boolean | undefined;
176
- hostId?: string | undefined;
177
- }> | undefined;
178
- hangerStyle?: "double" | "single" | undefined;
179
- hangerSpacing?: number | undefined;
180
- hangerMaxReach?: number | undefined;
181
- wallAttachment?: {
182
- wallId: `wall_${string}`;
183
- side: "back" | "front";
184
- startUV: [number, number];
185
- endUV: [number, number];
186
- offset: number;
187
- } | undefined;
188
- shape: "oval" | "rect" | "round";
189
- diameter: number;
190
- width: number;
191
- height: number;
192
- roll: number;
193
- ductMaterial: "duct-board" | "flex" | "sheet-metal" | "spiral";
194
- seamDetail: boolean;
195
- insulated: boolean;
196
- insulationR: number;
197
- system: "return" | "supply";
198
- slots?: Record<string, string> | undefined;
199
- type: "duct-segment";
74
+ id: `construction-dimension_${string}`;
75
+ anchors: ({
76
+ kind: "feature";
77
+ reference: {
78
+ nodeId: string;
79
+ featureId: string;
80
+ parameters?: Record<string, string | number | boolean> | undefined;
81
+ };
82
+ fallback: [number, number, number];
83
+ } | [number, number, number])[];
84
+ baseline: {
85
+ origin: [number, number];
86
+ direction: [number, number];
87
+ };
88
+ chainMode: "continuous" | "point-to-point";
89
+ mode: "angular" | "arc-length" | "center-mark" | "chord" | "coordinate" | "diameter" | "linear" | "radius";
90
+ featureCount: number;
91
+ showCenterMark: boolean;
92
+ prefix: string;
93
+ suffix: string;
94
+ textOverride: string | null;
95
+ datumPolicy: "centerline" | "finish-face" | "structural-face" | "wall-face";
96
+ terminator: "architectural-tick" | "dot" | "filled-arrow" | "open-arrow";
97
+ textPosition: "above" | "centered";
98
+ imperialPrecision: "1" | "1/16" | "1/2" | "1/4" | "1/8";
99
+ metricNotation: "meters" | "millimeters";
100
+ extensionStartGap: number;
101
+ extensionOvershoot: number;
102
+ drawingType: "floor-plan" | "foundation-plan" | "reflected-ceiling-plan" | "roof-plan" | "site-plan";
103
+ drawingOverrides: {
104
+ drawingType: "floor-plan" | "foundation-plan" | "reflected-ceiling-plan" | "roof-plan" | "site-plan";
105
+ presentation: "controlled" | "omit" | "shown";
106
+ suppressedSegmentIndexes: number[];
107
+ }[];
108
+ controllingDimensionId: `construction-dimension_${string}` | null;
109
+ type: "construction-dimension";
200
110
  } | {
201
111
  object: "node";
202
112
  name?: string | undefined;
@@ -221,18 +131,19 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
221
131
  fromIds: string[];
222
132
  } | undefined;
223
133
  } | undefined;
224
- id: `floor-opening_${string}`;
225
- polygon: [number, number][];
226
- hostZoneId?: string | undefined;
227
- legacyPlateCuts?: Record<string, [number, number][][]> | undefined;
228
- legacyCeilingCuts?: Record<string, [number, number][][]> | undefined;
229
- source: string;
230
- ownerId?: string | undefined;
231
- surfaceId?: string | undefined;
232
- drawnOn: "ceiling" | "floor";
233
- cutsPrimary: boolean;
234
- cutsAdjacent: boolean;
235
- type: "floor-opening";
134
+ id: `duct-terminal_${string}`;
135
+ position: [number, number, number];
136
+ rotation: number;
137
+ supportSlabId?: string | undefined;
138
+ terminalType: "diffuser" | "return-grille" | "supply-register";
139
+ mount: "ceiling" | "floor" | "wall";
140
+ width: number;
141
+ depth: number;
142
+ collarShape: "oval" | "rect" | "round";
143
+ collarDiameter: number;
144
+ collarWidth: number;
145
+ collarHeight: number;
146
+ type: "duct-terminal";
236
147
  } | {
237
148
  object: "node";
238
149
  name?: string | undefined;
@@ -257,12 +168,23 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
257
168
  fromIds: string[];
258
169
  } | undefined;
259
170
  } | undefined;
260
- id: `lineset_${string}`;
261
- path: [number, number, number][];
262
- suctionDiameter: number;
263
- liquidDiameter: number;
264
- insulated: boolean;
265
- type: "lineset";
171
+ id: `guide_${string}`;
172
+ url: string;
173
+ position: [number, number, number];
174
+ rotation: [number, number, number];
175
+ scale: number;
176
+ opacity: number;
177
+ scaleReference: {
178
+ start: [number, number];
179
+ end: [number, number];
180
+ realLengthMeters: number;
181
+ measuredLengthUnits: number;
182
+ metersPerUnit: number;
183
+ displayLength?: number | undefined;
184
+ displayUnit?: "centimeters" | "feet" | "inches" | "meters" | undefined;
185
+ label: string;
186
+ } | null;
187
+ type: "guide";
266
188
  } | {
267
189
  object: "node";
268
190
  name?: string | undefined;
@@ -287,13 +209,10 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
287
209
  fromIds: string[];
288
210
  } | undefined;
289
211
  } | undefined;
290
- id: `pipe-trap_${string}`;
291
- position: [number, number, number];
292
- rotation: number;
212
+ id: `liquid-line_${string}`;
213
+ path: [number, number, number][];
293
214
  diameter: number;
294
- pipeMaterial: "abs" | "cast-iron" | "pvc";
295
- armLengthM: number;
296
- type: "pipe-trap";
215
+ type: "liquid-line";
297
216
  } | {
298
217
  object: "node";
299
218
  name?: string | undefined;
@@ -2436,6 +2355,7 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
2436
2355
  } | undefined;
2437
2356
  justification?: "a" | "b" | undefined;
2438
2357
  height?: number | undefined;
2358
+ endHeightOffset?: number | undefined;
2439
2359
  curveOffset?: number | undefined;
2440
2360
  supportSlabId?: string | undefined;
2441
2361
  supportOffset?: number | undefined;
@@ -2714,6 +2634,42 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
2714
2634
  frontSide: "exterior" | "interior" | "unknown";
2715
2635
  backSide: "exterior" | "interior" | "unknown";
2716
2636
  type: "wall";
2637
+ } | {
2638
+ object: "node";
2639
+ name?: string | undefined;
2640
+ parentId: string | null;
2641
+ visible: boolean;
2642
+ camera?: {
2643
+ position: [number, number, number];
2644
+ target: [number, number, number];
2645
+ mode: "orthographic" | "perspective";
2646
+ fov?: number | undefined;
2647
+ zoom?: number | undefined;
2648
+ } | undefined;
2649
+ metadata: Record<string, unknown>;
2650
+ provenance?: {
2651
+ refs: {
2652
+ ns?: string | undefined;
2653
+ id: string;
2654
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
2655
+ }[];
2656
+ lineage?: {
2657
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
2658
+ fromIds: string[];
2659
+ } | undefined;
2660
+ } | undefined;
2661
+ id: `floor-opening_${string}`;
2662
+ polygon: [number, number][];
2663
+ hostZoneId?: string | undefined;
2664
+ legacyPlateCuts?: Record<string, [number, number][][]> | undefined;
2665
+ legacyCeilingCuts?: Record<string, [number, number][][]> | undefined;
2666
+ source: string;
2667
+ ownerId?: string | undefined;
2668
+ surfaceId?: string | undefined;
2669
+ drawnOn: "ceiling" | "floor";
2670
+ cutsPrimary: boolean;
2671
+ cutsAdjacent: boolean;
2672
+ type: "floor-opening";
2717
2673
  } | {
2718
2674
  object: "node";
2719
2675
  name?: string | undefined;
@@ -2797,77 +2753,17 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
2797
2753
  groundClearance: number;
2798
2754
  edgeInset: number;
2799
2755
  slatGap: number;
2800
- postCap: "flat" | "none" | "pyramid";
2801
- baseStyle: "floating" | "grounded" | "raised";
2802
- showInfill: boolean;
2803
- guardInfill?: "balusters" | "boards" | "cable" | undefined;
2804
- startPost?: boolean | undefined;
2805
- endPost?: boolean | undefined;
2806
- postThrough?: boolean | undefined;
2807
- infillPlacement: "back" | "center" | "front";
2808
- color: string;
2809
- style: "guard" | "horizontal" | "picket" | "privacy" | "rail" | "slat";
2810
- type: "fence";
2811
- } | {
2812
- object: "node";
2813
- name?: string | undefined;
2814
- parentId: string | null;
2815
- visible: boolean;
2816
- camera?: {
2817
- position: [number, number, number];
2818
- target: [number, number, number];
2819
- mode: "orthographic" | "perspective";
2820
- fov?: number | undefined;
2821
- zoom?: number | undefined;
2822
- } | undefined;
2823
- metadata: Record<string, unknown>;
2824
- provenance?: {
2825
- refs: {
2826
- ns?: string | undefined;
2827
- id: string;
2828
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
2829
- }[];
2830
- lineage?: {
2831
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
2832
- fromIds: string[];
2833
- } | undefined;
2834
- } | undefined;
2835
- id: `construction-dimension_${string}`;
2836
- anchors: ({
2837
- kind: "feature";
2838
- reference: {
2839
- nodeId: string;
2840
- featureId: string;
2841
- parameters?: Record<string, string | number | boolean> | undefined;
2842
- };
2843
- fallback: [number, number, number];
2844
- } | [number, number, number])[];
2845
- baseline: {
2846
- origin: [number, number];
2847
- direction: [number, number];
2848
- };
2849
- chainMode: "continuous" | "point-to-point";
2850
- mode: "angular" | "arc-length" | "center-mark" | "chord" | "coordinate" | "diameter" | "linear" | "radius";
2851
- featureCount: number;
2852
- showCenterMark: boolean;
2853
- prefix: string;
2854
- suffix: string;
2855
- textOverride: string | null;
2856
- datumPolicy: "centerline" | "finish-face" | "structural-face" | "wall-face";
2857
- terminator: "architectural-tick" | "dot" | "filled-arrow" | "open-arrow";
2858
- textPosition: "above" | "centered";
2859
- imperialPrecision: "1" | "1/16" | "1/2" | "1/4" | "1/8";
2860
- metricNotation: "meters" | "millimeters";
2861
- extensionStartGap: number;
2862
- extensionOvershoot: number;
2863
- drawingType: "floor-plan" | "foundation-plan" | "reflected-ceiling-plan" | "roof-plan" | "site-plan";
2864
- drawingOverrides: {
2865
- drawingType: "floor-plan" | "foundation-plan" | "reflected-ceiling-plan" | "roof-plan" | "site-plan";
2866
- presentation: "controlled" | "omit" | "shown";
2867
- suppressedSegmentIndexes: number[];
2868
- }[];
2869
- controllingDimensionId: `construction-dimension_${string}` | null;
2870
- type: "construction-dimension";
2756
+ postCap: "flat" | "none" | "pyramid";
2757
+ baseStyle: "floating" | "grounded" | "raised";
2758
+ showInfill: boolean;
2759
+ guardInfill?: "balusters" | "boards" | "cable" | undefined;
2760
+ startPost?: boolean | undefined;
2761
+ endPost?: boolean | undefined;
2762
+ postThrough?: boolean | undefined;
2763
+ infillPlacement: "back" | "center" | "front";
2764
+ color: string;
2765
+ style: "guard" | "horizontal" | "picket" | "privacy" | "rail" | "slat";
2766
+ type: "fence";
2871
2767
  } | {
2872
2768
  object: "node";
2873
2769
  name?: string | undefined;
@@ -2892,29 +2788,18 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
2892
2788
  fromIds: string[];
2893
2789
  } | undefined;
2894
2790
  } | undefined;
2895
- id: `block_${string}`;
2896
- children: string[];
2897
- position: [number, number, number];
2898
- rotation: number;
2791
+ id: `beam_${string}`;
2792
+ start: [number, number];
2793
+ end: [number, number];
2794
+ width: number;
2795
+ depth: number;
2796
+ size?: string | undefined;
2797
+ plies: number;
2798
+ material: "glulam" | "lvl" | "pressure-treated" | "sawn" | "steel";
2799
+ placement: "dropped" | "flush";
2800
+ topElevation?: number | undefined;
2899
2801
  supportSlabId?: string | undefined;
2900
- topology: {
2901
- vertices: {
2902
- id: string;
2903
- position: [number, number, number];
2904
- }[];
2905
- edges: {
2906
- id: string;
2907
- vertexIds: [string, string];
2908
- }[];
2909
- faces: {
2910
- id: string;
2911
- vertexIds: string[];
2912
- materialSlot: string;
2913
- }[];
2914
- };
2915
- slots: Record<string, string>;
2916
- slotNames: Record<string, string>;
2917
- type: "block";
2802
+ type: "beam";
2918
2803
  } | {
2919
2804
  object: "node";
2920
2805
  name?: string | undefined;
@@ -3740,23 +3625,89 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
3740
3625
  fromIds: string[];
3741
3626
  } | undefined;
3742
3627
  } | undefined;
3743
- id: `guide_${string}`;
3744
- url: string;
3745
- position: [number, number, number];
3746
- rotation: [number, number, number];
3747
- scale: number;
3748
- opacity: number;
3749
- scaleReference: {
3750
- start: [number, number];
3751
- end: [number, number];
3752
- realLengthMeters: number;
3753
- measuredLengthUnits: number;
3754
- metersPerUnit: number;
3755
- displayLength?: number | undefined;
3756
- displayUnit?: "centimeters" | "feet" | "inches" | "meters" | undefined;
3757
- label: string;
3758
- } | null;
3759
- type: "guide";
3628
+ id: `measurement_${string}`;
3629
+ measurement: {
3630
+ kind: "distance";
3631
+ points: [{
3632
+ kind: "feature";
3633
+ reference: {
3634
+ nodeId: string;
3635
+ featureId: string;
3636
+ parameters?: Record<string, string | number | boolean> | undefined;
3637
+ };
3638
+ fallback: [number, number, number];
3639
+ } | [number, number, number], {
3640
+ kind: "feature";
3641
+ reference: {
3642
+ nodeId: string;
3643
+ featureId: string;
3644
+ parameters?: Record<string, string | number | boolean> | undefined;
3645
+ };
3646
+ fallback: [number, number, number];
3647
+ } | [number, number, number]];
3648
+ } | {
3649
+ kind: "angle";
3650
+ points: [{
3651
+ kind: "feature";
3652
+ reference: {
3653
+ nodeId: string;
3654
+ featureId: string;
3655
+ parameters?: Record<string, string | number | boolean> | undefined;
3656
+ };
3657
+ fallback: [number, number, number];
3658
+ } | [number, number, number], {
3659
+ kind: "feature";
3660
+ reference: {
3661
+ nodeId: string;
3662
+ featureId: string;
3663
+ parameters?: Record<string, string | number | boolean> | undefined;
3664
+ };
3665
+ fallback: [number, number, number];
3666
+ } | [number, number, number], {
3667
+ kind: "feature";
3668
+ reference: {
3669
+ nodeId: string;
3670
+ featureId: string;
3671
+ parameters?: Record<string, string | number | boolean> | undefined;
3672
+ };
3673
+ fallback: [number, number, number];
3674
+ } | [number, number, number]];
3675
+ } | {
3676
+ kind: "area";
3677
+ base: ({
3678
+ kind: "feature";
3679
+ reference: {
3680
+ nodeId: string;
3681
+ featureId: string;
3682
+ parameters?: Record<string, string | number | boolean> | undefined;
3683
+ };
3684
+ fallback: [number, number, number];
3685
+ } | [number, number, number])[];
3686
+ } | {
3687
+ kind: "perimeter";
3688
+ base: ({
3689
+ kind: "feature";
3690
+ reference: {
3691
+ nodeId: string;
3692
+ featureId: string;
3693
+ parameters?: Record<string, string | number | boolean> | undefined;
3694
+ };
3695
+ fallback: [number, number, number];
3696
+ } | [number, number, number])[];
3697
+ } | {
3698
+ kind: "volume";
3699
+ base: ({
3700
+ kind: "feature";
3701
+ reference: {
3702
+ nodeId: string;
3703
+ featureId: string;
3704
+ parameters?: Record<string, string | number | boolean> | undefined;
3705
+ };
3706
+ fallback: [number, number, number];
3707
+ } | [number, number, number])[];
3708
+ extrusion: [number, number, number];
3709
+ };
3710
+ type: "measurement";
3760
3711
  } | {
3761
3712
  object: "node";
3762
3713
  name?: string | undefined;
@@ -3846,29 +3797,36 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
3846
3797
  fromIds: string[];
3847
3798
  } | undefined;
3848
3799
  } | undefined;
3849
- id: `duct-fitting_${string}`;
3850
- position: [number, number, number];
3851
- rotation: [number, number, number];
3852
- fittingType: "access-panel" | "coupling" | "cross" | "damper" | "elbow" | "end-cap" | "reducer" | "tee" | "transition";
3800
+ id: `duct-segment_${string}`;
3801
+ path: [number, number, number][];
3802
+ autoHangers?: boolean | undefined;
3803
+ hangerOverrides?: Record<string, {
3804
+ fraction?: number | undefined;
3805
+ skipped?: boolean | undefined;
3806
+ hostId?: string | undefined;
3807
+ }> | undefined;
3808
+ hangerStyle?: "double" | "single" | undefined;
3809
+ hangerSpacing?: number | undefined;
3810
+ hangerMaxReach?: number | undefined;
3811
+ wallAttachment?: {
3812
+ wallId: `wall_${string}`;
3813
+ side: "back" | "front";
3814
+ startUV: [number, number];
3815
+ endUV: [number, number];
3816
+ offset: number;
3817
+ } | undefined;
3853
3818
  shape: "oval" | "rect" | "round";
3854
- inletShape?: "oval" | "rect" | "round" | undefined;
3855
- outletShape?: "oval" | "rect" | "round" | undefined;
3819
+ diameter: number;
3856
3820
  width: number;
3857
3821
  height: number;
3858
- shape2: "oval" | "rect" | "round";
3859
- width2: number;
3860
- height2: number;
3861
- angle: number;
3862
- branchAngle: number;
3863
- diameter: number;
3864
- diameter2: number;
3865
- ductMaterial: "duct-board" | "flex" | "sheet-metal";
3822
+ roll: number;
3823
+ ductMaterial: "duct-board" | "flex" | "sheet-metal" | "spiral";
3824
+ seamDetail: boolean;
3825
+ insulated: boolean;
3826
+ insulationR: number;
3866
3827
  system: "return" | "supply";
3867
- damperAngle: number;
3868
- panelWidth: number;
3869
- panelHeight: number;
3870
3828
  slots?: Record<string, string> | undefined;
3871
- type: "duct-fitting";
3829
+ type: "duct-segment";
3872
3830
  } | {
3873
3831
  object: "node";
3874
3832
  name?: string | undefined;
@@ -3893,19 +3851,29 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
3893
3851
  fromIds: string[];
3894
3852
  } | undefined;
3895
3853
  } | undefined;
3896
- id: `duct-terminal_${string}`;
3854
+ id: `duct-fitting_${string}`;
3897
3855
  position: [number, number, number];
3898
- rotation: number;
3899
- supportSlabId?: string | undefined;
3900
- terminalType: "diffuser" | "return-grille" | "supply-register";
3901
- mount: "ceiling" | "floor" | "wall";
3856
+ rotation: [number, number, number];
3857
+ fittingType: "access-panel" | "coupling" | "cross" | "damper" | "elbow" | "end-cap" | "reducer" | "tee" | "transition";
3858
+ shape: "oval" | "rect" | "round";
3859
+ inletShape?: "oval" | "rect" | "round" | undefined;
3860
+ outletShape?: "oval" | "rect" | "round" | undefined;
3902
3861
  width: number;
3903
- depth: number;
3904
- collarShape: "oval" | "rect" | "round";
3905
- collarDiameter: number;
3906
- collarWidth: number;
3907
- collarHeight: number;
3908
- type: "duct-terminal";
3862
+ height: number;
3863
+ shape2: "oval" | "rect" | "round";
3864
+ width2: number;
3865
+ height2: number;
3866
+ angle: number;
3867
+ branchAngle: number;
3868
+ diameter: number;
3869
+ diameter2: number;
3870
+ ductMaterial: "duct-board" | "flex" | "sheet-metal";
3871
+ system: "return" | "supply";
3872
+ damperAngle: number;
3873
+ panelWidth: number;
3874
+ panelHeight: number;
3875
+ slots?: Record<string, string> | undefined;
3876
+ type: "duct-fitting";
3909
3877
  } | {
3910
3878
  object: "node";
3911
3879
  name?: string | undefined;
@@ -3971,10 +3939,12 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
3971
3939
  fromIds: string[];
3972
3940
  } | undefined;
3973
3941
  } | undefined;
3974
- id: `liquid-line_${string}`;
3942
+ id: `lineset_${string}`;
3975
3943
  path: [number, number, number][];
3976
- diameter: number;
3977
- type: "liquid-line";
3944
+ suctionDiameter: number;
3945
+ liquidDiameter: number;
3946
+ insulated: boolean;
3947
+ type: "lineset";
3978
3948
  } | {
3979
3949
  object: "node";
3980
3950
  name?: string | undefined;
@@ -4020,7 +3990,42 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
4020
3990
  diameter: number;
4021
3991
  pipeMaterial: "abs" | "cast-iron" | "pvc";
4022
3992
  system: "vent" | "waste";
4023
- type: "pipe-segment";
3993
+ type: "pipe-segment";
3994
+ } | {
3995
+ object: "node";
3996
+ name?: string | undefined;
3997
+ parentId: string | null;
3998
+ visible: boolean;
3999
+ camera?: {
4000
+ position: [number, number, number];
4001
+ target: [number, number, number];
4002
+ mode: "orthographic" | "perspective";
4003
+ fov?: number | undefined;
4004
+ zoom?: number | undefined;
4005
+ } | undefined;
4006
+ metadata: Record<string, unknown>;
4007
+ provenance?: {
4008
+ refs: {
4009
+ ns?: string | undefined;
4010
+ id: string;
4011
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
4012
+ }[];
4013
+ lineage?: {
4014
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
4015
+ fromIds: string[];
4016
+ } | undefined;
4017
+ } | undefined;
4018
+ id: `pipe-fitting_${string}`;
4019
+ position: [number, number, number];
4020
+ rotation: [number, number, number];
4021
+ fittingType: "cleanout" | "coupling" | "cross" | "elbow" | "end-cap" | "reducer" | "sanitary-tee" | "wye";
4022
+ angle: number;
4023
+ diameter: number;
4024
+ diameter2: number;
4025
+ cleanoutStyle: "end" | "inline";
4026
+ pipeMaterial: "abs" | "cast-iron" | "pvc";
4027
+ system: "vent" | "waste";
4028
+ type: "pipe-fitting";
4024
4029
  } | {
4025
4030
  object: "node";
4026
4031
  name?: string | undefined;
@@ -4045,17 +4050,13 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
4045
4050
  fromIds: string[];
4046
4051
  } | undefined;
4047
4052
  } | undefined;
4048
- id: `pipe-fitting_${string}`;
4053
+ id: `pipe-trap_${string}`;
4049
4054
  position: [number, number, number];
4050
- rotation: [number, number, number];
4051
- fittingType: "cleanout" | "coupling" | "cross" | "elbow" | "end-cap" | "reducer" | "sanitary-tee" | "wye";
4052
- angle: number;
4055
+ rotation: number;
4053
4056
  diameter: number;
4054
- diameter2: number;
4055
- cleanoutStyle: "end" | "inline";
4056
4057
  pipeMaterial: "abs" | "cast-iron" | "pvc";
4057
- system: "vent" | "waste";
4058
- type: "pipe-fitting";
4058
+ armLengthM: number;
4059
+ type: "pipe-trap";
4059
4060
  } | {
4060
4061
  object: "node";
4061
4062
  name?: string | undefined;
@@ -4385,7 +4386,7 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
4385
4386
  fromIds: string[];
4386
4387
  } | undefined;
4387
4388
  } | undefined;
4388
- id: `skylight_${string}`;
4389
+ id: `gutter_${string}`;
4389
4390
  material?: {
4390
4391
  id?: string | undefined;
4391
4392
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
@@ -4408,54 +4409,31 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
4408
4409
  bumpScale?: number | undefined;
4409
4410
  } | undefined;
4410
4411
  } | undefined;
4411
- materialPreset?: string | undefined;
4412
- glassMaterial?: {
4413
- id?: string | undefined;
4414
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
4415
- properties?: {
4416
- color: string;
4417
- roughness: number;
4418
- metalness: number;
4419
- opacity: number;
4420
- transparent: boolean;
4421
- side: "back" | "double" | "front";
4422
- } | undefined;
4423
- texture?: {
4424
- url: string;
4425
- repeat?: [number, number] | undefined;
4426
- scale?: number | undefined;
4427
- offset?: [number, number] | undefined;
4428
- normalMap?: string | undefined;
4429
- normalScale?: number | undefined;
4430
- bumpMap?: string | undefined;
4431
- bumpScale?: number | undefined;
4432
- } | undefined;
4433
- } | undefined;
4434
- glassMaterialPreset?: string | undefined;
4412
+ slots?: Record<string, string> | undefined;
4413
+ materialPreset: string;
4435
4414
  roofSegmentId?: string | undefined;
4436
4415
  position: [number, number, number];
4437
4416
  rotation: number;
4438
- width: number;
4439
- height: number;
4440
- frameThickness: number;
4441
- frameDepth: number;
4442
- skylightType: "flat" | "lantern" | "opening" | "sliding" | "walk-on";
4443
- glassThickness: number;
4444
- lanternHeight: number;
4445
- lanternTopScale: number;
4446
- openingAngle: number;
4447
- openingSide: "bottom" | "left" | "right" | "top";
4448
- operationState: number;
4449
- motorHousing: boolean;
4450
- slideFraction: number;
4451
- slideDirection: "x" | "z";
4452
- trackWidth: number;
4453
- motorHousingSize: number;
4454
- curb: boolean;
4455
- curbHeight: number;
4456
- cutoutOffset: number;
4457
- surfaceNormal?: [number, number, number] | undefined;
4458
- type: "skylight";
4417
+ length: number;
4418
+ arc?: {
4419
+ centerX: number;
4420
+ centerZ: number;
4421
+ radius: number;
4422
+ } | undefined;
4423
+ size: number;
4424
+ thickness: number;
4425
+ profile: "box" | "half-round" | "k-style";
4426
+ endCapLeft: boolean;
4427
+ endCapRight: boolean;
4428
+ hangerStyle: "none" | "strap";
4429
+ hangerSpacing: number;
4430
+ outlets: {
4431
+ id: string;
4432
+ offset: number;
4433
+ diameter: number;
4434
+ generatedBy?: "default-downspout" | undefined;
4435
+ }[];
4436
+ type: "gutter";
4459
4437
  } | {
4460
4438
  object: "node";
4461
4439
  name?: string | undefined;
@@ -5377,78 +5355,6 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
5377
5355
  louverCount: number;
5378
5356
  backRatio: number;
5379
5357
  type: "eyebrow-vent";
5380
- } | {
5381
- object: "node";
5382
- name?: string | undefined;
5383
- parentId: string | null;
5384
- visible: boolean;
5385
- camera?: {
5386
- position: [number, number, number];
5387
- target: [number, number, number];
5388
- mode: "orthographic" | "perspective";
5389
- fov?: number | undefined;
5390
- zoom?: number | undefined;
5391
- } | undefined;
5392
- metadata: Record<string, unknown>;
5393
- provenance?: {
5394
- refs: {
5395
- ns?: string | undefined;
5396
- id: string;
5397
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
5398
- }[];
5399
- lineage?: {
5400
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
5401
- fromIds: string[];
5402
- } | undefined;
5403
- } | undefined;
5404
- id: `gutter_${string}`;
5405
- material?: {
5406
- id?: string | undefined;
5407
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
5408
- properties?: {
5409
- color: string;
5410
- roughness: number;
5411
- metalness: number;
5412
- opacity: number;
5413
- transparent: boolean;
5414
- side: "back" | "double" | "front";
5415
- } | undefined;
5416
- texture?: {
5417
- url: string;
5418
- repeat?: [number, number] | undefined;
5419
- scale?: number | undefined;
5420
- offset?: [number, number] | undefined;
5421
- normalMap?: string | undefined;
5422
- normalScale?: number | undefined;
5423
- bumpMap?: string | undefined;
5424
- bumpScale?: number | undefined;
5425
- } | undefined;
5426
- } | undefined;
5427
- slots?: Record<string, string> | undefined;
5428
- materialPreset: string;
5429
- roofSegmentId?: string | undefined;
5430
- position: [number, number, number];
5431
- rotation: number;
5432
- length: number;
5433
- arc?: {
5434
- centerX: number;
5435
- centerZ: number;
5436
- radius: number;
5437
- } | undefined;
5438
- size: number;
5439
- thickness: number;
5440
- profile: "box" | "half-round" | "k-style";
5441
- endCapLeft: boolean;
5442
- endCapRight: boolean;
5443
- hangerStyle: "none" | "strap";
5444
- hangerSpacing: number;
5445
- outlets: {
5446
- id: string;
5447
- offset: number;
5448
- diameter: number;
5449
- generatedBy?: "default-downspout" | undefined;
5450
- }[];
5451
- type: "gutter";
5452
5358
  } | {
5453
5359
  object: "node";
5454
5360
  name?: string | undefined;
@@ -5646,6 +5552,101 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
5646
5552
  frameDepth: number;
5647
5553
  surfaceNormal?: [number, number, number] | undefined;
5648
5554
  type: "solar-panel";
5555
+ } | {
5556
+ object: "node";
5557
+ name?: string | undefined;
5558
+ parentId: string | null;
5559
+ visible: boolean;
5560
+ camera?: {
5561
+ position: [number, number, number];
5562
+ target: [number, number, number];
5563
+ mode: "orthographic" | "perspective";
5564
+ fov?: number | undefined;
5565
+ zoom?: number | undefined;
5566
+ } | undefined;
5567
+ metadata: Record<string, unknown>;
5568
+ provenance?: {
5569
+ refs: {
5570
+ ns?: string | undefined;
5571
+ id: string;
5572
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
5573
+ }[];
5574
+ lineage?: {
5575
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
5576
+ fromIds: string[];
5577
+ } | undefined;
5578
+ } | undefined;
5579
+ id: `skylight_${string}`;
5580
+ material?: {
5581
+ id?: string | undefined;
5582
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
5583
+ properties?: {
5584
+ color: string;
5585
+ roughness: number;
5586
+ metalness: number;
5587
+ opacity: number;
5588
+ transparent: boolean;
5589
+ side: "back" | "double" | "front";
5590
+ } | undefined;
5591
+ texture?: {
5592
+ url: string;
5593
+ repeat?: [number, number] | undefined;
5594
+ scale?: number | undefined;
5595
+ offset?: [number, number] | undefined;
5596
+ normalMap?: string | undefined;
5597
+ normalScale?: number | undefined;
5598
+ bumpMap?: string | undefined;
5599
+ bumpScale?: number | undefined;
5600
+ } | undefined;
5601
+ } | undefined;
5602
+ materialPreset?: string | undefined;
5603
+ glassMaterial?: {
5604
+ id?: string | undefined;
5605
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
5606
+ properties?: {
5607
+ color: string;
5608
+ roughness: number;
5609
+ metalness: number;
5610
+ opacity: number;
5611
+ transparent: boolean;
5612
+ side: "back" | "double" | "front";
5613
+ } | undefined;
5614
+ texture?: {
5615
+ url: string;
5616
+ repeat?: [number, number] | undefined;
5617
+ scale?: number | undefined;
5618
+ offset?: [number, number] | undefined;
5619
+ normalMap?: string | undefined;
5620
+ normalScale?: number | undefined;
5621
+ bumpMap?: string | undefined;
5622
+ bumpScale?: number | undefined;
5623
+ } | undefined;
5624
+ } | undefined;
5625
+ glassMaterialPreset?: string | undefined;
5626
+ roofSegmentId?: string | undefined;
5627
+ position: [number, number, number];
5628
+ rotation: number;
5629
+ width: number;
5630
+ height: number;
5631
+ frameThickness: number;
5632
+ frameDepth: number;
5633
+ skylightType: "flat" | "lantern" | "opening" | "sliding" | "walk-on";
5634
+ glassThickness: number;
5635
+ lanternHeight: number;
5636
+ lanternTopScale: number;
5637
+ openingAngle: number;
5638
+ openingSide: "bottom" | "left" | "right" | "top";
5639
+ operationState: number;
5640
+ motorHousing: boolean;
5641
+ slideFraction: number;
5642
+ slideDirection: "x" | "z";
5643
+ trackWidth: number;
5644
+ motorHousingSize: number;
5645
+ curb: boolean;
5646
+ curbHeight: number;
5647
+ cutoutOffset: number;
5648
+ surfaceNormal?: [number, number, number] | undefined;
5649
+ type: "skylight";
5649
5650
  } | {
5650
5651
  object: "node";
5651
5652
  name?: string | undefined;