@pascal-app/core 1.0.7 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (266) 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__/native-materials.d.ts +4 -0
  4. package/dist/agent-operations/__fixtures__/native-materials.d.ts.map +1 -1
  5. package/dist/agent-operations/__fixtures__/place-items-cases.d.ts.map +1 -1
  6. package/dist/agent-operations/__fixtures__/place-items-cases.js +28 -0
  7. package/dist/agent-operations/__fixtures__/roof-bearing-cases.d.ts +9567 -9563
  8. package/dist/agent-operations/__fixtures__/roof-bearing-cases.d.ts.map +1 -1
  9. package/dist/agent-operations/__fixtures__/verify-scene-cases.d.ts +77 -77
  10. package/dist/agent-operations/asset-catalog.d.ts +21 -11
  11. package/dist/agent-operations/asset-catalog.d.ts.map +1 -1
  12. package/dist/agent-operations/asset-catalog.js +28 -10
  13. package/dist/agent-operations/asset-views.d.ts +8 -3
  14. package/dist/agent-operations/asset-views.d.ts.map +1 -1
  15. package/dist/agent-operations/asset-views.js +19 -3
  16. package/dist/agent-operations/author-scene.d.ts.map +1 -1
  17. package/dist/agent-operations/author-scene.js +2 -3
  18. package/dist/agent-operations/batch.d.ts +7 -1
  19. package/dist/agent-operations/batch.d.ts.map +1 -1
  20. package/dist/agent-operations/batch.js +17 -2
  21. package/dist/agent-operations/catalog-asset.d.ts +15 -0
  22. package/dist/agent-operations/catalog-asset.d.ts.map +1 -0
  23. package/dist/agent-operations/catalog-asset.js +4 -0
  24. package/dist/agent-operations/circulation-spaces.d.ts +1724 -1723
  25. package/dist/agent-operations/circulation-spaces.d.ts.map +1 -1
  26. package/dist/agent-operations/design-brief.d.ts.map +1 -1
  27. package/dist/agent-operations/design-brief.js +2 -0
  28. package/dist/agent-operations/furnish-room.d.ts.map +1 -1
  29. package/dist/agent-operations/furnish-room.js +2 -1
  30. package/dist/agent-operations/index.d.ts +3 -0
  31. package/dist/agent-operations/index.d.ts.map +1 -1
  32. package/dist/agent-operations/index.js +4 -1
  33. package/dist/agent-operations/level-reads.d.ts.map +1 -1
  34. package/dist/agent-operations/level-reads.js +5 -2
  35. package/dist/agent-operations/move-plan.d.ts.map +1 -1
  36. package/dist/agent-operations/move-plan.js +11 -9
  37. package/dist/agent-operations/place-in-room.d.ts.map +1 -1
  38. package/dist/agent-operations/place-in-room.js +2 -1
  39. package/dist/agent-operations/place-items.d.ts.map +1 -1
  40. package/dist/agent-operations/place-items.js +2 -1
  41. package/dist/agent-operations/scene-queries.d.ts +2944 -2943
  42. package/dist/agent-operations/scene-queries.d.ts.map +1 -1
  43. package/dist/agent-operations/scene-view.d.ts.map +1 -1
  44. package/dist/agent-operations/scene-view.js +38 -13
  45. package/dist/agent-operations/search-assets.d.ts.map +1 -1
  46. package/dist/agent-operations/search-assets.js +6 -0
  47. package/dist/agent-operations/types.d.ts +3 -2
  48. package/dist/agent-operations/types.d.ts.map +1 -1
  49. package/dist/agent-operations/usage-checks.js +18 -3
  50. package/dist/agent-operations/verify-scene.d.ts.map +1 -1
  51. package/dist/agent-operations/verify-scene.js +4 -2
  52. package/dist/agent-operations/wall-object-observations.d.ts.map +1 -1
  53. package/dist/agent-operations/wall-object-observations.js +1 -1
  54. package/dist/agent-tools/assets.js +1 -1
  55. package/dist/agent-tools/wall-openings.js +2 -2
  56. package/dist/building/__fixtures__/wall-opening-cases.d.ts +13 -12
  57. package/dist/building/__fixtures__/wall-opening-cases.d.ts.map +1 -1
  58. package/dist/building/level-duplication.d.ts +1281 -1279
  59. package/dist/building/level-duplication.d.ts.map +1 -1
  60. package/dist/building/level-duplication.js +3 -1
  61. package/dist/building/merge-windows.d.ts.map +1 -1
  62. package/dist/building/merge-windows.js +4 -3
  63. package/dist/building/wall-openings.d.ts +95 -81
  64. package/dist/building/wall-openings.d.ts.map +1 -1
  65. package/dist/building/wall-openings.js +74 -25
  66. package/dist/commands/structure/shared.d.ts +3203 -3202
  67. package/dist/commands/structure/shared.d.ts.map +1 -1
  68. package/dist/commands/structure/zone-wall-merge.d.ts +2028 -2025
  69. package/dist/commands/structure/zone-wall-merge.d.ts.map +1 -1
  70. package/dist/contracts/reference-inventory.d.ts.map +1 -1
  71. package/dist/contracts/reference-inventory.js +0 -1
  72. package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts +6 -1
  73. package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts.map +1 -1
  74. package/dist/hooks/spatial-grid/spatial-grid-manager.js +30 -9
  75. package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts +2101 -2100
  76. package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts.map +1 -1
  77. package/dist/hooks/spatial-grid/spatial-grid-sync.js +8 -4
  78. package/dist/index.d.ts +13 -4
  79. package/dist/index.d.ts.map +1 -1
  80. package/dist/index.js +13 -4
  81. package/dist/lib/__fixtures__/mezzanine.d.ts +6428 -6424
  82. package/dist/lib/__fixtures__/mezzanine.d.ts.map +1 -1
  83. package/dist/lib/absorb-wall-separators.d.ts +2267 -2266
  84. package/dist/lib/absorb-wall-separators.d.ts.map +1 -1
  85. package/dist/lib/asset-storage.d.ts.map +1 -1
  86. package/dist/lib/asset-storage.js +3 -0
  87. package/dist/lib/build-mode.d.ts +11 -0
  88. package/dist/lib/build-mode.d.ts.map +1 -0
  89. package/dist/lib/build-mode.js +24 -0
  90. package/dist/lib/corner-pair.d.ts +2 -0
  91. package/dist/lib/corner-pair.d.ts.map +1 -1
  92. package/dist/lib/door-interaction.d.ts +14 -0
  93. package/dist/lib/door-interaction.d.ts.map +1 -0
  94. package/dist/lib/door-interaction.js +62 -0
  95. package/dist/lib/elevator-support.d.ts +15 -0
  96. package/dist/lib/elevator-support.d.ts.map +1 -0
  97. package/dist/lib/elevator-support.js +40 -0
  98. package/dist/lib/floor-foundation-datum.d.ts.map +1 -1
  99. package/dist/lib/floor-foundation-datum.js +5 -1
  100. package/dist/lib/floor-intent-changes.d.ts.map +1 -1
  101. package/dist/lib/floor-intent-changes.js +6 -4
  102. package/dist/lib/floorplan/context.d.ts +95 -0
  103. package/dist/lib/floorplan/context.d.ts.map +1 -0
  104. package/dist/lib/floorplan/context.js +155 -0
  105. package/dist/lib/floorplan/index.d.ts +6 -0
  106. package/dist/lib/floorplan/index.d.ts.map +1 -0
  107. package/dist/lib/floorplan/index.js +5 -0
  108. package/dist/lib/floorplan/marks.d.ts +71 -0
  109. package/dist/lib/floorplan/marks.d.ts.map +1 -0
  110. package/dist/lib/floorplan/marks.js +157 -0
  111. package/dist/lib/floorplan/plan-math.d.ts +18 -0
  112. package/dist/lib/floorplan/plan-math.d.ts.map +1 -0
  113. package/dist/lib/floorplan/plan-math.js +82 -0
  114. package/dist/lib/floorplan/svg-paths.d.ts +17 -0
  115. package/dist/lib/floorplan/svg-paths.d.ts.map +1 -0
  116. package/dist/lib/floorplan/svg-paths.js +92 -0
  117. package/dist/lib/floorplan/wall-affordances.d.ts +31 -0
  118. package/dist/lib/floorplan/wall-affordances.d.ts.map +1 -0
  119. package/dist/lib/floorplan/wall-affordances.js +24 -0
  120. package/dist/lib/hierarchy.d.ts +19 -0
  121. package/dist/lib/hierarchy.d.ts.map +1 -0
  122. package/dist/lib/hierarchy.js +53 -0
  123. package/dist/lib/opening-floor-datum.d.ts +1 -1
  124. package/dist/lib/opening-floor-datum.d.ts.map +1 -1
  125. package/dist/lib/opening-floor-datum.js +2 -2
  126. package/dist/lib/own-floor-intent.d.ts.map +1 -1
  127. package/dist/lib/own-floor-intent.js +2 -2
  128. package/dist/lib/polygon-boolean.d.ts.map +1 -1
  129. package/dist/lib/polygon-boolean.js +2 -1
  130. package/dist/lib/room-floor-elevation.d.ts +12 -0
  131. package/dist/lib/room-floor-elevation.d.ts.map +1 -0
  132. package/dist/lib/room-floor-elevation.js +41 -0
  133. package/dist/lib/room-floor-feasibility.d.ts.map +1 -1
  134. package/dist/lib/room-floor-feasibility.js +1 -1
  135. package/dist/lib/space-detection.d.ts.map +1 -1
  136. package/dist/lib/space-detection.js +1 -0
  137. package/dist/lib/wall-face-script.d.ts.map +1 -1
  138. package/dist/lib/wall-face-script.js +3 -3
  139. package/dist/lib/window-interaction.d.ts +16 -0
  140. package/dist/lib/window-interaction.d.ts.map +1 -0
  141. package/dist/lib/window-interaction.js +82 -0
  142. package/dist/lib/zone-quantities.js +1 -1
  143. package/dist/node-slots/column.d.ts +5 -0
  144. package/dist/node-slots/column.d.ts.map +1 -1
  145. package/dist/node-slots/column.js +10 -0
  146. package/dist/registry/__fixtures__/roof-planes.d.ts +69 -0
  147. package/dist/registry/__fixtures__/roof-planes.d.ts.map +1 -0
  148. package/dist/registry/__fixtures__/roof-planes.js +59 -0
  149. package/dist/registry/index.d.ts +3 -2
  150. package/dist/registry/index.d.ts.map +1 -1
  151. package/dist/registry/index.js +2 -1
  152. package/dist/registry/registry.d.ts +5 -0
  153. package/dist/registry/registry.d.ts.map +1 -1
  154. package/dist/registry/registry.js +10 -0
  155. package/dist/registry/roofs.d.ts +34 -0
  156. package/dist/registry/roofs.d.ts.map +1 -0
  157. package/dist/registry/roofs.js +61 -0
  158. package/dist/registry/types.d.ts +54 -0
  159. package/dist/registry/types.d.ts.map +1 -1
  160. package/dist/registry/validate-relations.d.ts +5 -1
  161. package/dist/registry/validate-relations.d.ts.map +1 -1
  162. package/dist/registry/validate-relations.js +6 -2
  163. package/dist/schema/asset-url.d.ts +8 -0
  164. package/dist/schema/asset-url.d.ts.map +1 -1
  165. package/dist/schema/asset-url.js +17 -0
  166. package/dist/schema/index.d.ts +1 -1
  167. package/dist/schema/index.d.ts.map +1 -1
  168. package/dist/schema/index.js +1 -1
  169. package/dist/schema/nodes/roof-segment-resize.d.ts.map +1 -1
  170. package/dist/schema/nodes/roof-segment-resize.js +2 -2
  171. package/dist/schema/nodes/roof-segment.d.ts +2 -0
  172. package/dist/schema/nodes/roof-segment.d.ts.map +1 -1
  173. package/dist/schema/nodes/roof-segment.js +40 -2
  174. package/dist/schema/nodes/roof.d.ts +1 -1
  175. package/dist/schema/nodes/roof.d.ts.map +1 -1
  176. package/dist/schema/nodes/roof.js +13 -8
  177. package/dist/schema/nodes/wall.d.ts +1 -0
  178. package/dist/schema/nodes/wall.d.ts.map +1 -1
  179. package/dist/schema/nodes/wall.js +6 -0
  180. package/dist/schema/types.d.ts +2 -1
  181. package/dist/schema/types.d.ts.map +1 -1
  182. package/dist/services/index.d.ts +1 -1
  183. package/dist/services/index.d.ts.map +1 -1
  184. package/dist/services/index.js +1 -1
  185. package/dist/services/movement.d.ts +7 -0
  186. package/dist/services/movement.d.ts.map +1 -1
  187. package/dist/services/movement.js +13 -0
  188. package/dist/services/port-connectivity.d.ts +15 -6
  189. package/dist/services/port-connectivity.d.ts.map +1 -1
  190. package/dist/services/port-connectivity.js +83 -17
  191. package/dist/services/roof-bearing.js +2 -1
  192. package/dist/services/roof-level.d.ts.map +1 -1
  193. package/dist/services/roof-level.js +12 -2
  194. package/dist/services/roof-move.d.ts +4 -2
  195. package/dist/services/roof-move.d.ts.map +1 -1
  196. package/dist/services/roof-move.js +21 -9
  197. package/dist/services/storey.d.ts +6 -1
  198. package/dist/services/storey.d.ts.map +1 -1
  199. package/dist/services/storey.js +11 -2
  200. package/dist/spatial/usage-field/findings.d.ts +7 -1
  201. package/dist/spatial/usage-field/findings.d.ts.map +1 -1
  202. package/dist/spatial/usage-field/findings.js +42 -10
  203. package/dist/spatial/usage-field/path.d.ts.map +1 -1
  204. package/dist/spatial/usage-field/path.js +28 -18
  205. package/dist/spatial/usage-field/swings.d.ts +1 -0
  206. package/dist/spatial/usage-field/swings.d.ts.map +1 -1
  207. package/dist/spatial/usage-field/walls.d.ts +2 -0
  208. package/dist/spatial/usage-field/walls.d.ts.map +1 -1
  209. package/dist/spatial/usage-field/walls.js +18 -4
  210. package/dist/store/actions/node-actions.d.ts +2 -1
  211. package/dist/store/actions/node-actions.d.ts.map +1 -1
  212. package/dist/store/actions/node-actions.js +23 -5
  213. package/dist/store/derived-node-guard.d.ts.map +1 -1
  214. package/dist/store/derived-node-guard.js +2 -1
  215. package/dist/store/scene-annotations.d.ts +4634 -4632
  216. package/dist/store/scene-annotations.d.ts.map +1 -1
  217. package/dist/systems/document-reconcile.d.ts.map +1 -1
  218. package/dist/systems/document-reconcile.js +1 -2
  219. package/dist/systems/elevator/elevator-geometry.d.ts +25 -0
  220. package/dist/systems/elevator/elevator-geometry.d.ts.map +1 -1
  221. package/dist/systems/elevator/elevator-geometry.js +40 -8
  222. package/dist/systems/elevator/elevator-opening-sync.d.ts.map +1 -1
  223. package/dist/systems/elevator/elevator-opening-sync.js +4 -35
  224. package/dist/systems/elevator/elevator-runtime.d.ts.map +1 -1
  225. package/dist/systems/elevator/elevator-runtime.js +95 -18
  226. package/dist/systems/elevator/elevator-service.d.ts.map +1 -1
  227. package/dist/systems/elevator/elevator-service.js +24 -4
  228. package/dist/systems/roof/roof-elevation.d.ts +11 -6
  229. package/dist/systems/roof/roof-elevation.d.ts.map +1 -1
  230. package/dist/systems/roof/roof-elevation.js +26 -12
  231. package/dist/systems/slab/__fixtures__/floor-step.d.ts +5 -1
  232. package/dist/systems/slab/__fixtures__/floor-step.d.ts.map +1 -1
  233. package/dist/systems/slab/__fixtures__/raised-room.d.ts +2218 -2214
  234. package/dist/systems/slab/__fixtures__/raised-room.d.ts.map +1 -1
  235. package/dist/systems/stair/stair-opening-preview.d.ts +3203 -3202
  236. package/dist/systems/stair/stair-opening-preview.d.ts.map +1 -1
  237. package/dist/systems/wall/wall-curve.d.ts +10 -0
  238. package/dist/systems/wall/wall-curve.d.ts.map +1 -1
  239. package/dist/systems/wall/wall-curve.js +38 -0
  240. package/dist/systems/wall/wall-frame.d.ts.map +1 -1
  241. package/dist/systems/wall/wall-frame.js +8 -0
  242. package/dist/systems/wall/wall-merge.d.ts +9 -1
  243. package/dist/systems/wall/wall-merge.d.ts.map +1 -1
  244. package/dist/systems/wall/wall-merge.js +38 -6
  245. package/dist/systems/wall/wall-top.d.ts +10 -3
  246. package/dist/systems/wall/wall-top.d.ts.map +1 -1
  247. package/dist/systems/wall/wall-top.js +24 -8
  248. package/dist/systems/wall/wall-topology.d.ts.map +1 -1
  249. package/dist/systems/wall/wall-topology.js +19 -1
  250. package/dist/utils/ensure-scene-openings.d.ts +5595 -5593
  251. package/dist/utils/ensure-scene-openings.d.ts.map +1 -1
  252. package/dist/utils/floor-plate-migration.d.ts +2267 -2266
  253. package/dist/utils/floor-plate-migration.d.ts.map +1 -1
  254. package/dist/utils/measurement-format.d.ts +27 -0
  255. package/dist/utils/measurement-format.d.ts.map +1 -0
  256. package/dist/utils/measurement-format.js +143 -0
  257. package/dist/utils/owned-floor-opening-migration.d.ts +653 -652
  258. package/dist/utils/owned-floor-opening-migration.d.ts.map +1 -1
  259. package/dist/utils/reconcile-structure-on-load.d.ts +1724 -1723
  260. package/dist/utils/reconcile-structure-on-load.d.ts.map +1 -1
  261. package/dist/utils/scene-bounds.d.ts +32 -0
  262. package/dist/utils/scene-bounds.d.ts.map +1 -0
  263. package/dist/utils/scene-bounds.js +201 -0
  264. package/dist/validation/validate-build-json.d.ts.map +1 -1
  265. package/dist/validation/validate-build-json.js +3 -1
  266. package/package.json +1 -1
@@ -35,179 +35,47 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
35
35
  fromIds: string[];
36
36
  } | undefined;
37
37
  } | undefined;
38
- id: `beam_${string}`;
39
- start: [number, number];
40
- end: [number, number];
41
- width: number;
42
- depth: number;
43
- size?: string | undefined;
44
- plies: number;
45
- material: "glulam" | "lvl" | "pressure-treated" | "sawn" | "steel";
46
- placement: "dropped" | "flush";
47
- topElevation?: number | undefined;
48
- supportSlabId?: string | undefined;
49
- type: "beam";
50
- } | {
51
- object: "node";
52
- name?: string | undefined;
53
- parentId: string | null;
54
- visible: boolean;
55
- camera?: {
56
- position: [number, number, number];
57
- target: [number, number, number];
58
- mode: "orthographic" | "perspective";
59
- fov?: number | undefined;
60
- zoom?: number | undefined;
61
- } | undefined;
62
- metadata: Record<string, unknown>;
63
- provenance?: {
64
- refs: {
65
- ns?: string | undefined;
66
- id: string;
67
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
68
- }[];
69
- lineage?: {
70
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
71
- fromIds: string[];
38
+ id: `bvent_${string}`;
39
+ material?: {
40
+ id?: string | undefined;
41
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
42
+ properties?: {
43
+ color: string;
44
+ roughness: number;
45
+ metalness: number;
46
+ opacity: number;
47
+ transparent: boolean;
48
+ side: "back" | "double" | "front";
72
49
  } | undefined;
73
- } | undefined;
74
- id: `measurement_${string}`;
75
- measurement: {
76
- kind: "volume";
77
- base: ({
78
- kind: "feature";
79
- reference: {
80
- nodeId: string;
81
- featureId: string;
82
- parameters?: Record<string, string | number | boolean> | undefined;
83
- };
84
- fallback: [number, number, number];
85
- } | [number, number, number])[];
86
- extrusion: [number, number, number];
87
- } | {
88
- kind: "distance";
89
- points: [{
90
- kind: "feature";
91
- reference: {
92
- nodeId: string;
93
- featureId: string;
94
- parameters?: Record<string, string | number | boolean> | undefined;
95
- };
96
- fallback: [number, number, number];
97
- } | [number, number, number], {
98
- kind: "feature";
99
- reference: {
100
- nodeId: string;
101
- featureId: string;
102
- parameters?: Record<string, string | number | boolean> | undefined;
103
- };
104
- fallback: [number, number, number];
105
- } | [number, number, number]];
106
- } | {
107
- kind: "angle";
108
- points: [{
109
- kind: "feature";
110
- reference: {
111
- nodeId: string;
112
- featureId: string;
113
- parameters?: Record<string, string | number | boolean> | undefined;
114
- };
115
- fallback: [number, number, number];
116
- } | [number, number, number], {
117
- kind: "feature";
118
- reference: {
119
- nodeId: string;
120
- featureId: string;
121
- parameters?: Record<string, string | number | boolean> | undefined;
122
- };
123
- fallback: [number, number, number];
124
- } | [number, number, number], {
125
- kind: "feature";
126
- reference: {
127
- nodeId: string;
128
- featureId: string;
129
- parameters?: Record<string, string | number | boolean> | undefined;
130
- };
131
- fallback: [number, number, number];
132
- } | [number, number, number]];
133
- } | {
134
- kind: "area";
135
- base: ({
136
- kind: "feature";
137
- reference: {
138
- nodeId: string;
139
- featureId: string;
140
- parameters?: Record<string, string | number | boolean> | undefined;
141
- };
142
- fallback: [number, number, number];
143
- } | [number, number, number])[];
144
- } | {
145
- kind: "perimeter";
146
- base: ({
147
- kind: "feature";
148
- reference: {
149
- nodeId: string;
150
- featureId: string;
151
- parameters?: Record<string, string | number | boolean> | undefined;
152
- };
153
- fallback: [number, number, number];
154
- } | [number, number, number])[];
155
- };
156
- type: "measurement";
157
- } | {
158
- object: "node";
159
- name?: string | undefined;
160
- parentId: string | null;
161
- visible: boolean;
162
- camera?: {
163
- position: [number, number, number];
164
- target: [number, number, number];
165
- mode: "orthographic" | "perspective";
166
- fov?: number | undefined;
167
- zoom?: number | undefined;
168
- } | undefined;
169
- metadata: Record<string, unknown>;
170
- provenance?: {
171
- refs: {
172
- ns?: string | undefined;
173
- id: string;
174
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
175
- }[];
176
- lineage?: {
177
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
178
- fromIds: string[];
50
+ texture?: {
51
+ url: string;
52
+ repeat?: [number, number] | undefined;
53
+ scale?: number | undefined;
54
+ offset?: [number, number] | undefined;
55
+ normalMap?: string | undefined;
56
+ normalScale?: number | undefined;
57
+ bumpMap?: string | undefined;
58
+ bumpScale?: number | undefined;
179
59
  } | undefined;
180
60
  } | undefined;
181
- id: `duct-segment_${string}`;
182
- path: [number, number, number][];
183
- autoHangers?: boolean | undefined;
184
- hangerOverrides?: Record<string, {
185
- fraction?: number | undefined;
186
- skipped?: boolean | undefined;
187
- hostId?: string | undefined;
188
- }> | undefined;
189
- hangerStyle?: "double" | "single" | undefined;
190
- hangerSpacing?: number | undefined;
191
- hangerMaxReach?: number | undefined;
192
- wallAttachment?: {
193
- wallId: `wall_${string}`;
194
- side: "back" | "front";
195
- startUV: [number, number];
196
- endUV: [number, number];
197
- offset: number;
198
- } | undefined;
199
- shape: "oval" | "rect" | "round";
200
- diameter: number;
61
+ slots?: Record<string, string> | undefined;
62
+ materialPreset: string;
63
+ roofSegmentId?: string | undefined;
64
+ position: [number, number, number];
65
+ rotation: number;
201
66
  width: number;
67
+ depth: number;
202
68
  height: number;
203
- roll: number;
204
- ductMaterial: "duct-board" | "flex" | "sheet-metal" | "spiral";
205
- seamDetail: boolean;
206
- insulated: boolean;
207
- insulationR: number;
208
- system: "return" | "supply";
209
- slots?: Record<string, string> | undefined;
210
- type: "duct-segment";
69
+ hoodOverhang: number;
70
+ topTaper: number;
71
+ capHeight: number;
72
+ capGap: number;
73
+ domeCurvature: number;
74
+ baseInset: number;
75
+ baseHeight: number;
76
+ cornerBevel: number;
77
+ style: "box" | "cap" | "dome";
78
+ type: "box-vent";
211
79
  } | {
212
80
  object: "node";
213
81
  name?: string | undefined;
@@ -232,48 +100,223 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
232
100
  fromIds: string[];
233
101
  } | undefined;
234
102
  } | undefined;
235
- id: `floor-opening_${string}`;
236
- polygon: [number, number][];
237
- hostZoneId?: string | undefined;
238
- legacyPlateCuts?: Record<string, [number, number][][]> | undefined;
239
- legacyCeilingCuts?: Record<string, [number, number][][]> | undefined;
240
- source: string;
241
- ownerId?: string | undefined;
242
- surfaceId?: string | undefined;
243
- drawnOn: "ceiling" | "floor";
244
- cutsPrimary: boolean;
245
- cutsAdjacent: boolean;
246
- type: "floor-opening";
247
- } | {
248
- object: "node";
249
- name?: string | undefined;
250
- parentId: string | null;
251
- visible: boolean;
252
- camera?: {
253
- position: [number, number, number];
254
- target: [number, number, number];
255
- mode: "orthographic" | "perspective";
256
- fov?: number | undefined;
257
- zoom?: number | undefined;
258
- } | undefined;
259
- metadata: Record<string, unknown>;
260
- provenance?: {
261
- refs: {
262
- ns?: string | undefined;
263
- id: string;
264
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
265
- }[];
266
- lineage?: {
267
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
268
- fromIds: string[];
103
+ id: `column_${string}`;
104
+ children: string[];
105
+ position: [number, number, number];
106
+ rotation: number;
107
+ supportSlabId?: string | undefined;
108
+ source?: {
109
+ kind: "script";
110
+ meta?: {
111
+ description?: string | undefined;
112
+ category?: string | undefined;
113
+ tags?: string[] | undefined;
114
+ parent?: string | undefined;
269
115
  } | undefined;
270
- } | undefined;
271
- id: `lineset_${string}`;
272
- path: [number, number, number][];
273
- suctionDiameter: number;
274
- liquidDiameter: number;
275
- insulated: boolean;
276
- type: "lineset";
116
+ language: "bpy" | "three";
117
+ script: string;
118
+ params: Record<string, string | number | boolean>;
119
+ artifact: string;
120
+ manifest: {
121
+ bounds: {
122
+ min: [number, number, number];
123
+ max: [number, number, number];
124
+ };
125
+ params: {
126
+ id: string;
127
+ label?: string | undefined;
128
+ kind: "boolean" | "number" | "string";
129
+ default: string | number | boolean;
130
+ min?: number | undefined;
131
+ max?: number | undefined;
132
+ step?: number | undefined;
133
+ unit?: string | undefined;
134
+ options?: string[] | undefined;
135
+ }[];
136
+ parts: {
137
+ id: string;
138
+ label?: string | undefined;
139
+ type?: string | undefined;
140
+ bounds?: {
141
+ min: [number, number, number];
142
+ max: [number, number, number];
143
+ } | undefined;
144
+ }[];
145
+ surfaces: {
146
+ part?: string | undefined;
147
+ y: number;
148
+ polygon: [number, number][];
149
+ }[];
150
+ slots: {
151
+ id: string;
152
+ label?: string | undefined;
153
+ color?: string | undefined;
154
+ roughness?: number | undefined;
155
+ metalness?: number | undefined;
156
+ transparent?: boolean | undefined;
157
+ emissive?: boolean | undefined;
158
+ }[];
159
+ anchors: {
160
+ id: string;
161
+ position: [number, number, number];
162
+ normal?: [number, number, number] | undefined;
163
+ }[];
164
+ lights: {
165
+ id: string;
166
+ position: [number, number, number];
167
+ color: string;
168
+ intensity: number;
169
+ distance?: number | undefined;
170
+ spot?: {
171
+ direction: [number, number, number];
172
+ angle: number;
173
+ softness: number;
174
+ } | undefined;
175
+ shadows?: boolean | undefined;
176
+ glow?: {
177
+ size: number;
178
+ strength: number;
179
+ } | undefined;
180
+ }[];
181
+ undersides: {
182
+ part?: string | undefined;
183
+ polygon: [number, number][];
184
+ plane: [number, number, number, number];
185
+ }[];
186
+ animations: {
187
+ name: string;
188
+ duration: number;
189
+ }[];
190
+ cutters?: {
191
+ host: "ceiling" | "mounted" | "slab" | "wall";
192
+ polygon: number[][];
193
+ minY: number;
194
+ maxY: number;
195
+ }[] | undefined;
196
+ cutout: boolean;
197
+ collider: boolean;
198
+ shape?: {
199
+ tolerance: number;
200
+ bands: {
201
+ y0: number;
202
+ y1: number;
203
+ polygons: {
204
+ outer: [number, number][];
205
+ holes?: [number, number][][] | undefined;
206
+ }[];
207
+ }[];
208
+ } | undefined;
209
+ triangles: number;
210
+ coverage?: number | undefined;
211
+ uncovered?: {
212
+ min: [number, number];
213
+ max: [number, number];
214
+ }[] | undefined;
215
+ };
216
+ images?: {
217
+ artifact: string;
218
+ thumbnail: string;
219
+ floorPlan: string;
220
+ } | undefined;
221
+ } | undefined;
222
+ style: "cluster" | "dravidian-carved" | "faceted" | "fluted" | "lathe-turned" | "plain";
223
+ crossSection: "octagonal" | "rectangular" | "round" | "sixteen-sided" | "square";
224
+ height: number;
225
+ radius: number;
226
+ width: number;
227
+ depth: number;
228
+ edgeSoftness: number;
229
+ baseHeight: number;
230
+ capitalHeight: number;
231
+ shaftProfile: "baluster" | "bulged" | "hourglass" | "straight" | "tapered";
232
+ shaftTaper: number;
233
+ shaftBulge: number;
234
+ shaftStartScale: number;
235
+ shaftEndScale: number;
236
+ shaftSegmentCount: number;
237
+ shaftTwistStep: number;
238
+ shaftCornerRadius: number;
239
+ shaftDetail: "fluted" | "lathe-turned" | "none" | "panelled" | "spiral";
240
+ baseStyle: "lotus" | "none" | "panelled-pedestal" | "ribbed-lotus" | "round-rings" | "simple-square" | "square-plinth" | "stepped-square";
241
+ baseWidthScale: number;
242
+ baseDepthScale: number;
243
+ baseTierCount: number;
244
+ baseStepSpread: number;
245
+ basePlinthHeightRatio: number;
246
+ baseRoundBandScale: number;
247
+ baseNeckScale: number;
248
+ baseRoundBandCount: number;
249
+ baseRibCount: number;
250
+ baseCarvingLevel: number;
251
+ basePanelInset: number;
252
+ capitalStyle: "corinthian-leaf" | "doric" | "ionic-volute" | "leaf-carved" | "none" | "rounded" | "simple" | "simple-slab" | "south-indian-bracket" | "stepped" | "volute" | "wood-bracket";
253
+ capitalWidthScale: number;
254
+ capitalDepthScale: number;
255
+ capitalTierCount: number;
256
+ capitalStepSpread: number;
257
+ capitalBandCount: number;
258
+ voluteSize: number;
259
+ voluteCount: number;
260
+ leafCount: number;
261
+ leafRows: number;
262
+ bracketDepth: number;
263
+ bracketTierCount: number;
264
+ pendantCount: number;
265
+ capitalCarvingLevel: number;
266
+ ringCount: number;
267
+ ringPlacement: "bottom" | "ends" | "even" | "top";
268
+ ringThickness: number;
269
+ ringSpread: number;
270
+ fluteCount: number;
271
+ fluteDepth: number;
272
+ fluteWidth: number;
273
+ spiralTwist: number;
274
+ spiralRibCount: number;
275
+ panelCount: number;
276
+ panelInsetDepth: number;
277
+ panelShape: "arched" | "diamond" | "rectangle";
278
+ latheRingCount: number;
279
+ latheRingSpacing: "bottom" | "ends" | "even" | "top";
280
+ carvingLevel: number;
281
+ carvingPlacement: "all" | "base" | "capital" | "shaft";
282
+ lowerBandEnabled: boolean;
283
+ lowerBandHeight: number;
284
+ lowerBandCarvingLevel: number;
285
+ dentilCount: number;
286
+ beadCount: number;
287
+ supportStyle: "a-frame" | "box-frame" | "k-brace" | "portal-frame" | "single-strut" | "trestle" | "tripod" | "v-frame" | "vertical" | "x-brace" | "y-frame";
288
+ braceWidth: number;
289
+ braceDepth: number;
290
+ braceBottomSpread: number;
291
+ braceTopSpread: number;
292
+ bracePlateEnabled: boolean;
293
+ role?: "ornament" | "post" | undefined;
294
+ postBase?: "none" | "pier" | "post-base" | undefined;
295
+ material?: {
296
+ id?: string | undefined;
297
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
298
+ properties?: {
299
+ color: string;
300
+ roughness: number;
301
+ metalness: number;
302
+ opacity: number;
303
+ transparent: boolean;
304
+ side: "back" | "double" | "front";
305
+ } | undefined;
306
+ texture?: {
307
+ url: string;
308
+ repeat?: [number, number] | undefined;
309
+ scale?: number | undefined;
310
+ offset?: [number, number] | undefined;
311
+ normalMap?: string | undefined;
312
+ normalScale?: number | undefined;
313
+ bumpMap?: string | undefined;
314
+ bumpScale?: number | undefined;
315
+ } | undefined;
316
+ } | undefined;
317
+ materialPreset?: string | undefined;
318
+ slots?: Record<string, string> | undefined;
319
+ type: "column";
277
320
  } | {
278
321
  object: "node";
279
322
  name?: string | undefined;
@@ -298,13 +341,29 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
298
341
  fromIds: string[];
299
342
  } | undefined;
300
343
  } | undefined;
301
- id: `pipe-trap_${string}`;
344
+ id: `duct-fitting_${string}`;
302
345
  position: [number, number, number];
303
- rotation: number;
346
+ rotation: [number, number, number];
347
+ fittingType: "access-panel" | "coupling" | "cross" | "damper" | "elbow" | "end-cap" | "reducer" | "tee" | "transition";
348
+ shape: "oval" | "rect" | "round";
349
+ inletShape?: "oval" | "rect" | "round" | undefined;
350
+ outletShape?: "oval" | "rect" | "round" | undefined;
351
+ width: number;
352
+ height: number;
353
+ shape2: "oval" | "rect" | "round";
354
+ width2: number;
355
+ height2: number;
356
+ angle: number;
357
+ branchAngle: number;
304
358
  diameter: number;
305
- pipeMaterial: "abs" | "cast-iron" | "pvc";
306
- armLengthM: number;
307
- type: "pipe-trap";
359
+ diameter2: number;
360
+ ductMaterial: "duct-board" | "flex" | "sheet-metal";
361
+ system: "return" | "supply";
362
+ damperAngle: number;
363
+ panelWidth: number;
364
+ panelHeight: number;
365
+ slots?: Record<string, string> | undefined;
366
+ type: "duct-fitting";
308
367
  } | {
309
368
  object: "node";
310
369
  name?: string | undefined;
@@ -329,354 +388,58 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
329
388
  fromIds: string[];
330
389
  } | undefined;
331
390
  } | undefined;
332
- id: `rseg_${string}`;
333
- material?: {
334
- id?: string | undefined;
335
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
336
- properties?: {
337
- color: string;
338
- roughness: number;
339
- metalness: number;
340
- opacity: number;
341
- transparent: boolean;
342
- side: "back" | "double" | "front";
343
- } | undefined;
344
- texture?: {
345
- url: string;
346
- repeat?: [number, number] | undefined;
347
- scale?: number | undefined;
348
- offset?: [number, number] | undefined;
349
- normalMap?: string | undefined;
350
- normalScale?: number | undefined;
351
- bumpMap?: string | undefined;
352
- bumpScale?: number | undefined;
353
- } | undefined;
354
- } | undefined;
355
- materialPreset?: string | undefined;
356
- topMaterial?: {
357
- id?: string | undefined;
358
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
359
- properties?: {
360
- color: string;
361
- roughness: number;
362
- metalness: number;
363
- opacity: number;
364
- transparent: boolean;
365
- side: "back" | "double" | "front";
366
- } | undefined;
367
- texture?: {
368
- url: string;
369
- repeat?: [number, number] | undefined;
370
- scale?: number | undefined;
371
- offset?: [number, number] | undefined;
372
- normalMap?: string | undefined;
373
- normalScale?: number | undefined;
374
- bumpMap?: string | undefined;
375
- bumpScale?: number | undefined;
376
- } | undefined;
377
- } | undefined;
378
- topMaterialPreset?: string | undefined;
379
- edgeMaterial?: {
380
- id?: string | undefined;
381
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
382
- properties?: {
383
- color: string;
384
- roughness: number;
385
- metalness: number;
386
- opacity: number;
387
- transparent: boolean;
388
- side: "back" | "double" | "front";
389
- } | undefined;
390
- texture?: {
391
- url: string;
392
- repeat?: [number, number] | undefined;
393
- scale?: number | undefined;
394
- offset?: [number, number] | undefined;
395
- normalMap?: string | undefined;
396
- normalScale?: number | undefined;
397
- bumpMap?: string | undefined;
398
- bumpScale?: number | undefined;
399
- } | undefined;
400
- } | undefined;
401
- edgeMaterialPreset?: string | undefined;
402
- wallMaterial?: {
403
- id?: string | undefined;
404
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
405
- properties?: {
406
- color: string;
407
- roughness: number;
408
- metalness: number;
409
- opacity: number;
410
- transparent: boolean;
411
- side: "back" | "double" | "front";
412
- } | undefined;
413
- texture?: {
414
- url: string;
415
- repeat?: [number, number] | undefined;
416
- scale?: number | undefined;
417
- offset?: [number, number] | undefined;
418
- normalMap?: string | undefined;
419
- normalScale?: number | undefined;
420
- bumpMap?: string | undefined;
421
- bumpScale?: number | undefined;
422
- } | undefined;
423
- } | undefined;
424
- wallMaterialPreset?: string | undefined;
391
+ id: `hvac-equipment_${string}`;
425
392
  position: [number, number, number];
426
393
  rotation: number;
427
- roofType: "barrel" | "conical" | "dutch" | "flat" | "gable" | "gambrel" | "hip" | "mansard" | "shed";
428
- barrelRise?: number | undefined;
429
- barrelSegments?: number | undefined;
430
- roofSystem?: "glazed" | "standard" | undefined;
431
- glazing?: {
432
- across: {
433
- layout: "count" | "fixed-spacing" | "maximum-spacing";
434
- count: number;
435
- spacing: number;
436
- alignment: "center" | "end" | "start";
437
- };
438
- along: {
439
- layout: "count" | "fixed-spacing" | "maximum-spacing";
440
- count: number;
441
- spacing: number;
442
- alignment: "center" | "end" | "start";
443
- };
444
- frameWidth: number;
445
- frameDepth: number;
446
- glassThickness: number;
447
- frameColor: string;
448
- glassColor: string;
449
- glassOpacity: number;
450
- glassRoughness: number;
451
- glazedEnds: boolean;
452
- panelType: "empty" | "glass" | "solid";
453
- panels: {
454
- face: string;
455
- column: number;
456
- row: number;
457
- type: "empty" | "glass" | "solid";
458
- }[];
459
- } | undefined;
460
- slots?: Record<string, string> | undefined;
394
+ supportSlabId?: string | undefined;
395
+ equipmentType: "air-handler" | "condenser" | "furnace";
461
396
  width: number;
462
397
  depth: number;
463
- conicalStartAngle?: number | undefined;
464
- conicalSweepAngle?: number | undefined;
465
- conicalFullCircle?: boolean | undefined;
466
- trim: {
467
- left: number;
468
- right: number;
469
- front: number;
470
- back: number;
471
- frontLeft: number;
472
- frontRight: number;
473
- backLeft: number;
474
- backRight: number;
475
- frontLeftX: number;
476
- frontLeftZ: number;
477
- frontRightX: number;
478
- frontRightZ: number;
479
- backLeftX: number;
480
- backLeftZ: number;
481
- backRightX: number;
482
- backRightZ: number;
483
- };
484
- wallHeight: number;
485
- pitch: number;
486
- wallThickness: number;
487
- deckThickness: number;
488
- overhang: number;
489
- gableOverhang?: number | undefined;
490
- shingleThickness: number;
491
- buildUp?: {
492
- presetId?: string | undefined;
493
- roofing: {
494
- kind: "architectural-shingle" | "asphalt-3-tab" | "clay-tile" | "concrete-tile" | "slate" | "standing-seam-metal" | "wood-shake";
495
- thickness: number;
496
- name?: string | undefined;
497
- };
498
- underlayment?: {
499
- kind: "felt-15" | "felt-30" | "ice-and-water" | "synthetic";
500
- thickness: number;
501
- name?: string | undefined;
502
- } | undefined;
503
- sheathing: {
504
- kind: "osb" | "plywood";
505
- thickness: number;
506
- name?: string | undefined;
507
- };
508
- structure: {
509
- system: "rafters" | "trusses";
510
- size: "2x10" | "2x12" | "2x4" | "2x6" | "2x8";
511
- spacing: number;
512
- };
513
- insulation?: {
514
- kind: "batt" | "blown" | "rigid";
515
- thickness: number;
516
- name?: string | undefined;
517
- } | undefined;
518
- finish?: {
519
- kind: "drywall" | "plaster" | "wood-plank";
520
- thickness: number;
521
- name?: string | undefined;
522
- } | undefined;
523
- } | undefined;
524
- arc?: {
525
- centerX: number;
526
- centerZ: number;
527
- radius: number;
528
- } | undefined;
529
- shedSideInfillSpan?: number | undefined;
530
- shedSideInfillMinX?: number | undefined;
531
- shedSideInfillMaxX?: number | undefined;
532
- shedFootprintPieces?: [number, number][][] | undefined;
533
- shedOpenEndSides?: ("left" | "right")[] | undefined;
534
- shedJointFrame?: {
398
+ height: number;
399
+ supplyShape: "oval" | "rect" | "round";
400
+ returnShape: "oval" | "rect" | "round";
401
+ supplyDiameter: number;
402
+ returnDiameter: number;
403
+ supplyWidth: number;
404
+ supplyHeight: number;
405
+ returnWidth: number;
406
+ returnHeight: number;
407
+ type: "hvac-equipment";
408
+ } | {
409
+ object: "node";
410
+ name?: string | undefined;
411
+ parentId: string | null;
412
+ visible: boolean;
413
+ camera?: {
535
414
  position: [number, number, number];
536
- rotation: number;
415
+ target: [number, number, number];
416
+ mode: "orthographic" | "perspective";
417
+ fov?: number | undefined;
418
+ zoom?: number | undefined;
537
419
  } | undefined;
538
- shedJointOwnerId?: string | undefined;
539
- shedJointNeighborIds?: string[] | undefined;
540
- shedJointScopeId?: string | undefined;
541
- managedByParent: boolean;
542
- wallShell: "auto" | "include" | "omit";
543
- shedInsetEndPanels: boolean;
544
- fascia?: boolean | undefined;
545
- eaveCut?: "plumb" | "plumb-level" | "square" | undefined;
546
- fasciaHighEdge?: boolean | undefined;
547
- fasciaHeight?: number | undefined;
548
- fasciaDepth?: number | undefined;
549
- fasciaMaterial?: {
550
- id?: string | undefined;
551
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
552
- properties?: {
553
- color: string;
554
- roughness: number;
555
- metalness: number;
556
- opacity: number;
557
- transparent: boolean;
558
- side: "back" | "double" | "front";
559
- } | undefined;
560
- texture?: {
561
- url: string;
562
- repeat?: [number, number] | undefined;
563
- scale?: number | undefined;
564
- offset?: [number, number] | undefined;
565
- normalMap?: string | undefined;
566
- normalScale?: number | undefined;
567
- bumpMap?: string | undefined;
568
- bumpScale?: number | undefined;
420
+ metadata: Record<string, unknown>;
421
+ provenance?: {
422
+ refs: {
423
+ ns?: string | undefined;
424
+ id: string;
425
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
426
+ }[];
427
+ lineage?: {
428
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
429
+ fromIds: string[];
569
430
  } | undefined;
570
431
  } | undefined;
571
- fasciaMaterialPreset?: string | undefined;
572
- heelMaterial?: {
573
- id?: string | undefined;
574
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
575
- properties?: {
576
- color: string;
577
- roughness: number;
578
- metalness: number;
579
- opacity: number;
580
- transparent: boolean;
581
- side: "back" | "double" | "front";
582
- } | undefined;
583
- texture?: {
584
- url: string;
585
- repeat?: [number, number] | undefined;
586
- scale?: number | undefined;
587
- offset?: [number, number] | undefined;
588
- normalMap?: string | undefined;
589
- normalScale?: number | undefined;
590
- bumpMap?: string | undefined;
591
- bumpScale?: number | undefined;
592
- } | undefined;
593
- } | undefined;
594
- heelMaterialPreset?: string | undefined;
595
- gableLeftMaterial?: {
596
- id?: string | undefined;
597
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
598
- properties?: {
599
- color: string;
600
- roughness: number;
601
- metalness: number;
602
- opacity: number;
603
- transparent: boolean;
604
- side: "back" | "double" | "front";
605
- } | undefined;
606
- texture?: {
607
- url: string;
608
- repeat?: [number, number] | undefined;
609
- scale?: number | undefined;
610
- offset?: [number, number] | undefined;
611
- normalMap?: string | undefined;
612
- normalScale?: number | undefined;
613
- bumpMap?: string | undefined;
614
- bumpScale?: number | undefined;
615
- } | undefined;
616
- } | undefined;
617
- gableLeftMaterialPreset?: string | undefined;
618
- gableRightMaterial?: {
619
- id?: string | undefined;
620
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
621
- properties?: {
622
- color: string;
623
- roughness: number;
624
- metalness: number;
625
- opacity: number;
626
- transparent: boolean;
627
- side: "back" | "double" | "front";
628
- } | undefined;
629
- texture?: {
630
- url: string;
631
- repeat?: [number, number] | undefined;
632
- scale?: number | undefined;
633
- offset?: [number, number] | undefined;
634
- normalMap?: string | undefined;
635
- normalScale?: number | undefined;
636
- bumpMap?: string | undefined;
637
- bumpScale?: number | undefined;
638
- } | undefined;
639
- } | undefined;
640
- gableRightMaterialPreset?: string | undefined;
641
- gambrelLowerWidthRatio: number;
642
- gambrelLowerHeightRatio: number;
643
- mansardSteepWidthRatio: number;
644
- mansardSteepHeightRatio: number;
645
- dutchHipWidthRatio: number;
646
- dutchHipHeightRatio: number;
647
- dutchWaistLengthRatio: number;
648
- dutchGabletRake: number;
649
- dutchTopRakeThickness: number;
650
- children: string[];
651
- type: "roof-segment";
652
- } | {
653
- object: "node";
654
- name?: string | undefined;
655
- parentId: string | null;
656
- visible: boolean;
657
- camera?: {
658
- position: [number, number, number];
659
- target: [number, number, number];
660
- mode: "orthographic" | "perspective";
661
- fov?: number | undefined;
662
- zoom?: number | undefined;
663
- } | undefined;
664
- metadata: Record<string, unknown>;
665
- provenance?: {
666
- refs: {
667
- ns?: string | undefined;
668
- id: string;
669
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
670
- }[];
671
- lineage?: {
672
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
673
- fromIds: string[];
674
- } | undefined;
675
- } | undefined;
676
- id: `separator_${string}`;
677
- start: [number, number];
678
- end: [number, number];
679
- type: "separator";
432
+ id: `pipe-fitting_${string}`;
433
+ position: [number, number, number];
434
+ rotation: [number, number, number];
435
+ fittingType: "cleanout" | "coupling" | "cross" | "elbow" | "end-cap" | "reducer" | "sanitary-tee" | "wye";
436
+ angle: number;
437
+ diameter: number;
438
+ diameter2: number;
439
+ cleanoutStyle: "end" | "inline";
440
+ pipeMaterial: "abs" | "cast-iron" | "pvc";
441
+ system: "vent" | "waste";
442
+ type: "pipe-fitting";
680
443
  } | {
681
444
  object: "node";
682
445
  name?: string | undefined;
@@ -701,92 +464,202 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
701
464
  fromIds: string[];
702
465
  } | undefined;
703
466
  } | undefined;
704
- id: `spawn_${string}`;
705
- position: [number, number, number];
706
- rotation: number;
707
- supportSlabId?: string | undefined;
708
- type: "spawn";
709
- } | {
710
- object: "node";
711
- name?: string | undefined;
712
- parentId: string | null;
713
- visible: boolean;
714
- camera?: {
715
- position: [number, number, number];
716
- target: [number, number, number];
717
- mode: "orthographic" | "perspective";
718
- fov?: number | undefined;
719
- zoom?: number | undefined;
467
+ id: `site_${string}`;
468
+ polygon: {
469
+ type: "polygon";
470
+ points: [number, number][];
471
+ };
472
+ terrain?: {
473
+ type: "heightfield";
474
+ origin: [number, number];
475
+ spacing: number;
476
+ cols: number;
477
+ rows: number;
478
+ step: number;
479
+ heights: string;
720
480
  } | undefined;
721
- metadata: Record<string, unknown>;
722
- provenance?: {
723
- refs: {
724
- ns?: string | undefined;
725
- id: string;
726
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
727
- }[];
728
- lineage?: {
729
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
730
- fromIds: string[];
481
+ showGround?: boolean | undefined;
482
+ presentation?: {
483
+ theme?: string | undefined;
484
+ exposure?: number | undefined;
485
+ shading?: "rendered" | "solid" | undefined;
486
+ edges?: "off" | "soft" | "strong" | undefined;
487
+ shadows?: boolean | undefined;
488
+ lighting?: {
489
+ background?: string | undefined;
490
+ backgroundSky?: string | null | undefined;
491
+ ground?: string | undefined;
492
+ ambient?: {
493
+ color: string;
494
+ intensity: number;
495
+ } | undefined;
496
+ hemi?: {
497
+ sky: string;
498
+ ground: string;
499
+ intensity: number;
500
+ } | undefined;
501
+ lights?: {
502
+ color: string;
503
+ intensity: number;
504
+ position: [number, number, number];
505
+ target?: [number, number, number] | undefined;
506
+ castShadow?: boolean | undefined;
507
+ shadow?: {
508
+ intensity?: number | undefined;
509
+ bias?: number | undefined;
510
+ normalBias?: number | undefined;
511
+ radius?: number | undefined;
512
+ mapSize?: 512 | 1024 | 2048 | 4096 | undefined;
513
+ camera?: {
514
+ left: number;
515
+ right: number;
516
+ top: number;
517
+ bottom: number;
518
+ near: number;
519
+ far: number;
520
+ } | undefined;
521
+ } | undefined;
522
+ }[] | undefined;
523
+ environment?: {
524
+ source: "gradient" | "none" | "room";
525
+ intensity: number;
526
+ } | undefined;
731
527
  } | undefined;
732
- } | undefined;
733
- id: `sseg_${string}`;
734
- material?: {
735
- id?: string | undefined;
736
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
737
- properties?: {
738
- color: string;
739
- roughness: number;
740
- metalness: number;
741
- opacity: number;
742
- transparent: boolean;
743
- side: "back" | "double" | "front";
528
+ postprocessing?: {
529
+ ambientOcclusion?: boolean | undefined;
530
+ colorGrading?: boolean | undefined;
744
531
  } | undefined;
745
- texture?: {
746
- url: string;
747
- repeat?: [number, number] | undefined;
748
- scale?: number | undefined;
749
- offset?: [number, number] | undefined;
750
- normalMap?: string | undefined;
751
- normalScale?: number | undefined;
752
- bumpMap?: string | undefined;
753
- bumpScale?: number | undefined;
532
+ display?: {
533
+ mode?: "construction" | "finished" | "systems" | undefined;
534
+ families?: Partial<Record<"device" | "exposed-structure" | "fill" | "finish" | "foundation" | "framing" | "inspection" | "insulation" | "masonry" | "membrane" | "run" | "service-space" | "sheathing", boolean>> | undefined;
535
+ disciplines?: Partial<Record<"electrical" | "fire" | "low-voltage" | "mechanical" | "plumbing", boolean>> | undefined;
536
+ xray?: boolean | undefined;
537
+ colorBy?: "material" | "service" | undefined;
754
538
  } | undefined;
755
539
  } | undefined;
756
- materialPreset?: string | undefined;
757
- slots?: Record<string, string> | undefined;
758
- position: [number, number, number];
759
- rotation: number;
760
- segmentType: "landing" | "stair";
761
- width: number;
762
- length: number;
763
- height: number;
764
- stepCount: number;
765
- attachmentSide: "front" | "left" | "right";
766
- fillToFloor: boolean;
767
- construction?: {
768
- mode: "center-stringer" | "open" | "side-stringers" | "solid" | "waist";
769
- waistThickness: number;
770
- treadThickness: number;
771
- riserThickness: number;
772
- nosing: number;
773
- finishThickness: number;
774
- closedRisers: boolean;
775
- stringerWidth: number;
776
- stringerDepth: number;
777
- } | undefined;
778
- winder?: {
779
- turn: "left" | "right";
780
- innerGap: number;
781
- walkingLineOffset: number;
782
- division: "equal-angle" | "equal-going";
540
+ address?: {
541
+ street?: string | undefined;
542
+ city?: string | undefined;
543
+ state?: string | undefined;
544
+ zip?: string | undefined;
783
545
  } | undefined;
784
- thickness: number;
785
- type: "stair-segment";
786
- } | {
787
- object: "node";
788
- name?: string | undefined;
789
- parentId: string | null;
546
+ parcel?: {
547
+ apn?: string | undefined;
548
+ source?: string | undefined;
549
+ county?: string | undefined;
550
+ state?: string | undefined;
551
+ lotAreaSqFt?: number | undefined;
552
+ originLngLat?: [number, number] | undefined;
553
+ resolvedAt?: string | undefined;
554
+ layer?: string | undefined;
555
+ notes?: string[] | undefined;
556
+ } | undefined;
557
+ setbacks?: {
558
+ front: number;
559
+ side: number;
560
+ rear: number;
561
+ left?: number | undefined;
562
+ right?: number | undefined;
563
+ streetSide?: number | undefined;
564
+ } | undefined;
565
+ setbacksSource?: string | undefined;
566
+ zone?: string | undefined;
567
+ frontEdge?: number | undefined;
568
+ streetEdges?: number[] | undefined;
569
+ sightTriangleFt?: number | undefined;
570
+ northRotation?: number | undefined;
571
+ dossier?: {
572
+ [x: string]: unknown;
573
+ provider: string;
574
+ asOf: string;
575
+ point?: {
576
+ lat?: number | undefined;
577
+ lng?: number | undefined;
578
+ source?: string | undefined;
579
+ } | undefined;
580
+ address?: {
581
+ formatted?: string | undefined;
582
+ precision?: string | undefined;
583
+ } | undefined;
584
+ sections: Record<string, {
585
+ [x: string]: unknown;
586
+ status: string;
587
+ summary?: string | undefined;
588
+ reason?: string | undefined;
589
+ source?: {
590
+ name?: string | undefined;
591
+ kind?: string | undefined;
592
+ vintage?: string | undefined;
593
+ attribution?: string | undefined;
594
+ } | undefined;
595
+ }>;
596
+ parcel?: Record<string, unknown> | undefined;
597
+ flood?: Record<string, unknown> | undefined;
598
+ codeBasis?: Record<string, unknown> | undefined;
599
+ zoning?: Record<string, unknown> | undefined;
600
+ utilities?: Record<string, unknown> | undefined;
601
+ soils?: Record<string, unknown> | undefined;
602
+ wetlands?: Record<string, unknown> | undefined;
603
+ structures?: Record<string, unknown> | undefined;
604
+ elevation?: Record<string, unknown> | undefined;
605
+ boundaries?: Record<string, unknown> | undefined;
606
+ } | undefined;
607
+ contourIntervalIn?: number | undefined;
608
+ contours3d?: boolean | undefined;
609
+ terrainContours?: {
610
+ datum: string;
611
+ intervalFt: number;
612
+ source?: string | undefined;
613
+ lines: {
614
+ elevationFt: number;
615
+ points: [number, number][];
616
+ }[];
617
+ } | undefined;
618
+ wallTypes?: {
619
+ id: string;
620
+ label: string;
621
+ assembly: {
622
+ layers: {
623
+ id: string;
624
+ role: "air" | "covering" | "deck" | "fill" | "finish" | "furring" | "glazing" | "insulation" | "lining" | "membrane" | "sheathing" | "shell" | "structure" | "substrate" | "underlay";
625
+ thickness: number;
626
+ core?: true | undefined;
627
+ spacing?: number | undefined;
628
+ material?: string | undefined;
629
+ slot?: string | undefined;
630
+ returns?: boolean | undefined;
631
+ display?: "construction" | "finished" | undefined;
632
+ inset?: number | undefined;
633
+ bottom?: number | undefined;
634
+ lift?: number | undefined;
635
+ src?: string | undefined;
636
+ }[];
637
+ backing?: {
638
+ id: string;
639
+ role: "air" | "covering" | "deck" | "fill" | "finish" | "furring" | "glazing" | "insulation" | "lining" | "membrane" | "sheathing" | "shell" | "structure" | "substrate" | "underlay";
640
+ thickness: number;
641
+ core?: true | undefined;
642
+ spacing?: number | undefined;
643
+ material?: string | undefined;
644
+ slot?: string | undefined;
645
+ returns?: boolean | undefined;
646
+ display?: "construction" | "finished" | undefined;
647
+ inset?: number | undefined;
648
+ bottom?: number | undefined;
649
+ lift?: number | undefined;
650
+ src?: string | undefined;
651
+ }[] | undefined;
652
+ face?: "exterior" | "front" | undefined;
653
+ presetId?: string | undefined;
654
+ cavityInsulation?: string | undefined;
655
+ };
656
+ }[] | undefined;
657
+ children: string[];
658
+ type: "site";
659
+ } | {
660
+ object: "node";
661
+ name?: string | undefined;
662
+ parentId: string | null;
790
663
  visible: boolean;
791
664
  camera?: {
792
665
  position: [number, number, number];
@@ -807,249 +680,20 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
807
680
  fromIds: string[];
808
681
  } | undefined;
809
682
  } | undefined;
810
- id: `window_${string}`;
811
- material?: {
812
- id?: string | undefined;
813
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
814
- properties?: {
815
- color: string;
816
- roughness: number;
817
- metalness: number;
818
- opacity: number;
819
- transparent: boolean;
820
- side: "back" | "double" | "front";
821
- } | undefined;
822
- texture?: {
823
- url: string;
824
- repeat?: [number, number] | undefined;
825
- scale?: number | undefined;
826
- offset?: [number, number] | undefined;
827
- normalMap?: string | undefined;
828
- normalScale?: number | undefined;
829
- bumpMap?: string | undefined;
830
- bumpScale?: number | undefined;
831
- } | undefined;
832
- } | undefined;
833
- slots?: Record<string, string> | undefined;
834
- source?: {
835
- kind: "script";
836
- meta?: {
837
- description?: string | undefined;
838
- category?: string | undefined;
839
- tags?: string[] | undefined;
840
- parent?: string | undefined;
841
- } | undefined;
842
- language: "bpy" | "three";
843
- script: string;
844
- params: Record<string, string | number | boolean>;
845
- artifact: string;
846
- manifest: {
847
- bounds: {
848
- min: [number, number, number];
849
- max: [number, number, number];
850
- };
851
- params: {
852
- id: string;
853
- label?: string | undefined;
854
- kind: "boolean" | "number" | "string";
855
- default: string | number | boolean;
856
- min?: number | undefined;
857
- max?: number | undefined;
858
- step?: number | undefined;
859
- unit?: string | undefined;
860
- options?: string[] | undefined;
861
- }[];
862
- parts: {
863
- id: string;
864
- label?: string | undefined;
865
- type?: string | undefined;
866
- bounds?: {
867
- min: [number, number, number];
868
- max: [number, number, number];
869
- } | undefined;
870
- }[];
871
- surfaces: {
872
- part?: string | undefined;
873
- y: number;
874
- polygon: [number, number][];
875
- }[];
876
- slots: {
877
- id: string;
878
- label?: string | undefined;
879
- color?: string | undefined;
880
- roughness?: number | undefined;
881
- metalness?: number | undefined;
882
- transparent?: boolean | undefined;
883
- emissive?: boolean | undefined;
884
- }[];
885
- anchors: {
886
- id: string;
887
- position: [number, number, number];
888
- normal?: [number, number, number] | undefined;
889
- }[];
890
- lights: {
891
- id: string;
892
- position: [number, number, number];
893
- color: string;
894
- intensity: number;
895
- distance?: number | undefined;
896
- spot?: {
897
- direction: [number, number, number];
898
- angle: number;
899
- softness: number;
900
- } | undefined;
901
- shadows?: boolean | undefined;
902
- glow?: {
903
- size: number;
904
- strength: number;
905
- } | undefined;
906
- }[];
907
- undersides: {
908
- part?: string | undefined;
909
- polygon: [number, number][];
910
- plane: [number, number, number, number];
911
- }[];
912
- animations: {
913
- name: string;
914
- duration: number;
915
- }[];
916
- cutters?: {
917
- host: "ceiling" | "mounted" | "slab" | "wall";
918
- polygon: number[][];
919
- minY: number;
920
- maxY: number;
921
- }[] | undefined;
922
- cutout: boolean;
923
- collider: boolean;
924
- shape?: {
925
- tolerance: number;
926
- bands: {
927
- y0: number;
928
- y1: number;
929
- polygons: {
930
- outer: [number, number][];
931
- holes?: [number, number][][] | undefined;
932
- }[];
933
- }[];
934
- } | undefined;
935
- triangles: number;
936
- coverage?: number | undefined;
937
- uncovered?: {
938
- min: [number, number];
939
- max: [number, number];
940
- }[] | undefined;
941
- };
942
- images?: {
943
- artifact: string;
944
- thumbnail: string;
945
- floorPlan: string;
946
- } | undefined;
947
- } | undefined;
948
- position: [number, number, number];
949
- rotation: [number, number, number];
950
- side?: "back" | "front" | undefined;
951
- verticalAnchor?: "floor" | "wall" | undefined;
952
- floorThresholdVersion: 0 | 1;
953
- wallId?: string | undefined;
954
- dormerId?: string | undefined;
955
- dormerFace?: "back" | "front" | "left" | "right" | undefined;
956
- roofSegmentId?: string | undefined;
957
- roofFace?: "back" | "front" | "left" | "right" | undefined;
958
- width: number;
959
- height: number;
960
- mark?: string | undefined;
961
- constructionType: "framed" | "masonry";
962
- dimensionReference: "finish-opening" | "masonry-opening" | "nominal" | "rough-opening";
963
- roughOpeningWidth?: number | undefined;
964
- roughOpeningHeight?: number | undefined;
965
- masonryOpeningWidth?: number | undefined;
966
- masonryOpeningHeight?: number | undefined;
967
- finishOpeningWidth?: number | undefined;
968
- finishOpeningHeight?: number | undefined;
969
- openingKind: "opening" | "window";
970
- windowType: "awning" | "bay" | "bow" | "casement" | "double-hung" | "fixed" | "hopper" | "louvered" | "single-hung" | "sliding" | "tilt-turn";
971
- operationState: number;
972
- openingDirection?: "inward" | "outward" | undefined;
973
- tiltTurnMode?: "tilt" | "turn" | undefined;
974
- awningDirection: "down" | "up";
975
- casementStyle: "french" | "single";
976
- hingesSide: "left" | "right";
977
- openingShape: "arch" | "rectangle" | "rounded";
978
- openingRadiusMode: "all" | "individual";
979
- openingCornerRadii: [number, number, number, number];
980
- cornerRadius: number;
981
- archHeight: number;
982
- openingRevealRadius: number;
983
- frameThickness: number;
984
- frameDepth?: number | undefined;
985
- windowHandle?: boolean | undefined;
986
- sashGrid?: boolean | undefined;
987
- columnRatios: number[];
988
- rowRatios: number[];
989
- columnDividerThickness: number;
990
- rowDividerThickness: number;
991
- corner?: {
992
- end: "end" | "start";
993
- partnerId: string;
994
- post: "none" | "post";
995
- } | undefined;
996
- sill: boolean;
997
- sillDepth: number;
998
- sillThickness: number;
999
- sillOverhang?: number | undefined;
1000
- sillInterior?: boolean | undefined;
1001
- sillInteriorDepth?: number | undefined;
1002
- sillInteriorThickness?: number | undefined;
1003
- sillInteriorOverhang?: number | undefined;
1004
- shutters?: "board-batten" | "louvered" | "none" | "panel" | undefined;
1005
- shutterWidth?: number | undefined;
1006
- shutterOpen?: number | undefined;
1007
- shutterSides?: "both" | "left" | "right" | undefined;
1008
- rollerShutter?: "box" | "concealed" | "none" | undefined;
1009
- rollerShutterBoxHeight?: number | undefined;
1010
- rollerShutterOpen?: number | undefined;
1011
- casingFaceA?: boolean | undefined;
1012
- casingFaceB?: boolean | undefined;
1013
- casingWidth?: number | undefined;
1014
- type: "window";
1015
- } | {
1016
- object: "node";
1017
- name?: string | undefined;
1018
- parentId: string | null;
1019
- visible: boolean;
1020
- camera?: {
1021
- position: [number, number, number];
1022
- target: [number, number, number];
1023
- mode: "orthographic" | "perspective";
1024
- fov?: number | undefined;
1025
- zoom?: number | undefined;
1026
- } | undefined;
1027
- metadata: Record<string, unknown>;
1028
- provenance?: {
1029
- refs: {
1030
- ns?: string | undefined;
1031
- id: string;
1032
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
1033
- }[];
1034
- lineage?: {
1035
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
1036
- fromIds: string[];
1037
- } | undefined;
1038
- } | undefined;
1039
- type: "item";
1040
- id: `item_${string}`;
1041
- position: [number, number, number];
1042
- rotation: [number, number, number];
1043
- scale: [number, number, number];
1044
- side?: "back" | "front" | undefined;
1045
- children: string[];
1046
- wallId?: string | undefined;
1047
- wallT?: number | undefined;
1048
- roofSegmentId?: string | undefined;
1049
- roofFace?: "back" | "front" | "left" | "right" | undefined;
1050
- blockFaceId?: string | undefined;
1051
- supportSlabId?: string | undefined;
1052
- collectionIds?: `collection_${string}`[] | undefined;
683
+ type: "item";
684
+ id: `item_${string}`;
685
+ position: [number, number, number];
686
+ rotation: [number, number, number];
687
+ scale: [number, number, number];
688
+ side?: "back" | "front" | undefined;
689
+ children: string[];
690
+ wallId?: string | undefined;
691
+ wallT?: number | undefined;
692
+ roofSegmentId?: string | undefined;
693
+ roofFace?: "back" | "front" | "left" | "right" | undefined;
694
+ blockFaceId?: string | undefined;
695
+ supportSlabId?: string | undefined;
696
+ collectionIds?: `collection_${string}`[] | undefined;
1053
697
  slots?: Record<string, string> | undefined;
1054
698
  source?: {
1055
699
  kind: "script";
@@ -1487,11 +1131,30 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
1487
1131
  fromIds: string[];
1488
1132
  } | undefined;
1489
1133
  } | undefined;
1490
- id: `column_${string}`;
1491
- children: string[];
1492
- position: [number, number, number];
1493
- rotation: number;
1494
- supportSlabId?: string | undefined;
1134
+ id: `window_${string}`;
1135
+ material?: {
1136
+ id?: string | undefined;
1137
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1138
+ properties?: {
1139
+ color: string;
1140
+ roughness: number;
1141
+ metalness: number;
1142
+ opacity: number;
1143
+ transparent: boolean;
1144
+ side: "back" | "double" | "front";
1145
+ } | undefined;
1146
+ texture?: {
1147
+ url: string;
1148
+ repeat?: [number, number] | undefined;
1149
+ scale?: number | undefined;
1150
+ offset?: [number, number] | undefined;
1151
+ normalMap?: string | undefined;
1152
+ normalScale?: number | undefined;
1153
+ bumpMap?: string | undefined;
1154
+ bumpScale?: number | undefined;
1155
+ } | undefined;
1156
+ } | undefined;
1157
+ slots?: Record<string, string> | undefined;
1495
1158
  source?: {
1496
1159
  kind: "script";
1497
1160
  meta?: {
@@ -1606,106 +1269,75 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
1606
1269
  floorPlan: string;
1607
1270
  } | undefined;
1608
1271
  } | undefined;
1609
- style: "cluster" | "dravidian-carved" | "faceted" | "fluted" | "lathe-turned" | "plain";
1610
- crossSection: "octagonal" | "rectangular" | "round" | "sixteen-sided" | "square";
1611
- height: number;
1612
- radius: number;
1272
+ position: [number, number, number];
1273
+ rotation: [number, number, number];
1274
+ side?: "back" | "front" | undefined;
1275
+ verticalAnchor?: "floor" | "wall" | undefined;
1276
+ floorThresholdVersion: 0 | 1;
1277
+ wallId?: string | undefined;
1278
+ dormerId?: string | undefined;
1279
+ dormerFace?: "back" | "front" | "left" | "right" | undefined;
1280
+ roofSegmentId?: string | undefined;
1281
+ roofFace?: "back" | "front" | "left" | "right" | undefined;
1613
1282
  width: number;
1614
- depth: number;
1615
- edgeSoftness: number;
1616
- baseHeight: number;
1617
- capitalHeight: number;
1618
- shaftProfile: "baluster" | "bulged" | "hourglass" | "straight" | "tapered";
1619
- shaftTaper: number;
1620
- shaftBulge: number;
1621
- shaftStartScale: number;
1622
- shaftEndScale: number;
1623
- shaftSegmentCount: number;
1624
- shaftTwistStep: number;
1625
- shaftCornerRadius: number;
1626
- shaftDetail: "fluted" | "lathe-turned" | "none" | "panelled" | "spiral";
1627
- baseStyle: "lotus" | "none" | "panelled-pedestal" | "ribbed-lotus" | "round-rings" | "simple-square" | "square-plinth" | "stepped-square";
1628
- baseWidthScale: number;
1629
- baseDepthScale: number;
1630
- baseTierCount: number;
1631
- baseStepSpread: number;
1632
- basePlinthHeightRatio: number;
1633
- baseRoundBandScale: number;
1634
- baseNeckScale: number;
1635
- baseRoundBandCount: number;
1636
- baseRibCount: number;
1637
- baseCarvingLevel: number;
1638
- basePanelInset: number;
1639
- capitalStyle: "corinthian-leaf" | "doric" | "ionic-volute" | "leaf-carved" | "none" | "rounded" | "simple" | "simple-slab" | "south-indian-bracket" | "stepped" | "volute" | "wood-bracket";
1640
- capitalWidthScale: number;
1641
- capitalDepthScale: number;
1642
- capitalTierCount: number;
1643
- capitalStepSpread: number;
1644
- capitalBandCount: number;
1645
- voluteSize: number;
1646
- voluteCount: number;
1647
- leafCount: number;
1648
- leafRows: number;
1649
- bracketDepth: number;
1650
- bracketTierCount: number;
1651
- pendantCount: number;
1652
- capitalCarvingLevel: number;
1653
- ringCount: number;
1654
- ringPlacement: "bottom" | "ends" | "even" | "top";
1655
- ringThickness: number;
1656
- ringSpread: number;
1657
- fluteCount: number;
1658
- fluteDepth: number;
1659
- fluteWidth: number;
1660
- spiralTwist: number;
1661
- spiralRibCount: number;
1662
- panelCount: number;
1663
- panelInsetDepth: number;
1664
- panelShape: "arched" | "diamond" | "rectangle";
1665
- latheRingCount: number;
1666
- latheRingSpacing: "bottom" | "ends" | "even" | "top";
1667
- carvingLevel: number;
1668
- carvingPlacement: "all" | "base" | "capital" | "shaft";
1669
- lowerBandEnabled: boolean;
1670
- lowerBandHeight: number;
1671
- lowerBandCarvingLevel: number;
1672
- dentilCount: number;
1673
- beadCount: number;
1674
- supportStyle: "a-frame" | "box-frame" | "k-brace" | "portal-frame" | "single-strut" | "trestle" | "tripod" | "v-frame" | "vertical" | "x-brace" | "y-frame";
1675
- braceWidth: number;
1676
- braceDepth: number;
1677
- braceBottomSpread: number;
1678
- braceTopSpread: number;
1679
- bracePlateEnabled: boolean;
1680
- role?: "ornament" | "post" | undefined;
1681
- postBase?: "none" | "pier" | "post-base" | undefined;
1682
- material?: {
1683
- id?: string | undefined;
1684
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1685
- properties?: {
1686
- color: string;
1687
- roughness: number;
1688
- metalness: number;
1689
- opacity: number;
1690
- transparent: boolean;
1691
- side: "back" | "double" | "front";
1692
- } | undefined;
1693
- texture?: {
1694
- url: string;
1695
- repeat?: [number, number] | undefined;
1696
- scale?: number | undefined;
1697
- offset?: [number, number] | undefined;
1698
- normalMap?: string | undefined;
1699
- normalScale?: number | undefined;
1700
- bumpMap?: string | undefined;
1701
- bumpScale?: number | undefined;
1702
- } | undefined;
1703
- } | undefined;
1704
- materialPreset?: string | undefined;
1705
- slots?: Record<string, string> | undefined;
1706
- type: "column";
1707
- } | {
1708
- object: "node";
1283
+ height: number;
1284
+ mark?: string | undefined;
1285
+ constructionType: "framed" | "masonry";
1286
+ dimensionReference: "finish-opening" | "masonry-opening" | "nominal" | "rough-opening";
1287
+ roughOpeningWidth?: number | undefined;
1288
+ roughOpeningHeight?: number | undefined;
1289
+ masonryOpeningWidth?: number | undefined;
1290
+ masonryOpeningHeight?: number | undefined;
1291
+ finishOpeningWidth?: number | undefined;
1292
+ finishOpeningHeight?: number | undefined;
1293
+ openingKind: "opening" | "window";
1294
+ windowType: "awning" | "bay" | "bow" | "casement" | "double-hung" | "fixed" | "hopper" | "louvered" | "single-hung" | "sliding" | "tilt-turn";
1295
+ operationState: number;
1296
+ openingDirection?: "inward" | "outward" | undefined;
1297
+ tiltTurnMode?: "tilt" | "turn" | undefined;
1298
+ awningDirection: "down" | "up";
1299
+ casementStyle: "french" | "single";
1300
+ hingesSide: "left" | "right";
1301
+ openingShape: "arch" | "rectangle" | "rounded";
1302
+ openingRadiusMode: "all" | "individual";
1303
+ openingCornerRadii: [number, number, number, number];
1304
+ cornerRadius: number;
1305
+ archHeight: number;
1306
+ openingRevealRadius: number;
1307
+ frameThickness: number;
1308
+ frameDepth?: number | undefined;
1309
+ windowHandle?: boolean | undefined;
1310
+ sashGrid?: boolean | undefined;
1311
+ columnRatios: number[];
1312
+ rowRatios: number[];
1313
+ columnDividerThickness: number;
1314
+ rowDividerThickness: number;
1315
+ corner?: {
1316
+ end: "end" | "start";
1317
+ partnerId: string;
1318
+ post: "none" | "post";
1319
+ } | undefined;
1320
+ sill: boolean;
1321
+ sillDepth: number;
1322
+ sillThickness: number;
1323
+ sillOverhang?: number | undefined;
1324
+ sillInterior?: boolean | undefined;
1325
+ sillInteriorDepth?: number | undefined;
1326
+ sillInteriorThickness?: number | undefined;
1327
+ sillInteriorOverhang?: number | undefined;
1328
+ shutters?: "board-batten" | "louvered" | "none" | "panel" | undefined;
1329
+ shutterWidth?: number | undefined;
1330
+ shutterOpen?: number | undefined;
1331
+ shutterSides?: "both" | "left" | "right" | undefined;
1332
+ rollerShutter?: "box" | "concealed" | "none" | undefined;
1333
+ rollerShutterBoxHeight?: number | undefined;
1334
+ rollerShutterOpen?: number | undefined;
1335
+ casingFaceA?: boolean | undefined;
1336
+ casingFaceB?: boolean | undefined;
1337
+ casingWidth?: number | undefined;
1338
+ type: "window";
1339
+ } | {
1340
+ object: "node";
1709
1341
  name?: string | undefined;
1710
1342
  parentId: string | null;
1711
1343
  visible: boolean;
@@ -1728,7 +1360,7 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
1728
1360
  fromIds: string[];
1729
1361
  } | undefined;
1730
1362
  } | undefined;
1731
- id: `roof_${string}`;
1363
+ id: `rseg_${string}`;
1732
1364
  material?: {
1733
1365
  id?: string | undefined;
1734
1366
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
@@ -1821,6 +1453,153 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
1821
1453
  } | undefined;
1822
1454
  } | undefined;
1823
1455
  wallMaterialPreset?: string | undefined;
1456
+ position: [number, number, number];
1457
+ rotation: number;
1458
+ roofType: "barrel" | "conical" | "dutch" | "flat" | "gable" | "gambrel" | "hip" | "mansard" | "shed";
1459
+ barrelRise?: number | undefined;
1460
+ barrelSegments?: number | undefined;
1461
+ roofSystem?: "glazed" | "standard" | undefined;
1462
+ glazing?: {
1463
+ across: {
1464
+ layout: "count" | "fixed-spacing" | "maximum-spacing";
1465
+ count: number;
1466
+ spacing: number;
1467
+ alignment: "center" | "end" | "start";
1468
+ };
1469
+ along: {
1470
+ layout: "count" | "fixed-spacing" | "maximum-spacing";
1471
+ count: number;
1472
+ spacing: number;
1473
+ alignment: "center" | "end" | "start";
1474
+ };
1475
+ frameWidth: number;
1476
+ frameDepth: number;
1477
+ glassThickness: number;
1478
+ frameColor: string;
1479
+ glassColor: string;
1480
+ glassOpacity: number;
1481
+ glassRoughness: number;
1482
+ glazedEnds: boolean;
1483
+ panelType: "empty" | "glass" | "solid";
1484
+ panels: {
1485
+ face: string;
1486
+ column: number;
1487
+ row: number;
1488
+ type: "empty" | "glass" | "solid";
1489
+ }[];
1490
+ } | undefined;
1491
+ slots?: Record<string, string> | undefined;
1492
+ width: number;
1493
+ depth: number;
1494
+ conicalStartAngle?: number | undefined;
1495
+ conicalSweepAngle?: number | undefined;
1496
+ conicalFullCircle?: boolean | undefined;
1497
+ trim: {
1498
+ left: number;
1499
+ right: number;
1500
+ front: number;
1501
+ back: number;
1502
+ frontLeft: number;
1503
+ frontRight: number;
1504
+ backLeft: number;
1505
+ backRight: number;
1506
+ frontLeftX: number;
1507
+ frontLeftZ: number;
1508
+ frontRightX: number;
1509
+ frontRightZ: number;
1510
+ backLeftX: number;
1511
+ backLeftZ: number;
1512
+ backRightX: number;
1513
+ backRightZ: number;
1514
+ };
1515
+ wallHeight: number;
1516
+ pitch: number;
1517
+ wallThickness: number;
1518
+ deckThickness: number;
1519
+ overhang: number;
1520
+ gableOverhang?: number | undefined;
1521
+ shingleThickness: number;
1522
+ buildUp?: {
1523
+ presetId?: string | undefined;
1524
+ roofing: {
1525
+ kind: "architectural-shingle" | "asphalt-3-tab" | "clay-tile" | "concrete-tile" | "slate" | "standing-seam-metal" | "wood-shake";
1526
+ thickness: number;
1527
+ name?: string | undefined;
1528
+ };
1529
+ underlayment?: {
1530
+ kind: "felt-15" | "felt-30" | "ice-and-water" | "synthetic";
1531
+ thickness: number;
1532
+ name?: string | undefined;
1533
+ } | undefined;
1534
+ sheathing: {
1535
+ kind: "osb" | "plywood";
1536
+ thickness: number;
1537
+ name?: string | undefined;
1538
+ };
1539
+ structure: {
1540
+ system: "rafters" | "trusses";
1541
+ size: "2x10" | "2x12" | "2x4" | "2x6" | "2x8";
1542
+ spacing: number;
1543
+ };
1544
+ insulation?: {
1545
+ kind: "batt" | "blown" | "rigid";
1546
+ thickness: number;
1547
+ name?: string | undefined;
1548
+ } | undefined;
1549
+ finish?: {
1550
+ kind: "drywall" | "plaster" | "wood-plank";
1551
+ thickness: number;
1552
+ name?: string | undefined;
1553
+ } | undefined;
1554
+ } | undefined;
1555
+ arc?: {
1556
+ centerX: number;
1557
+ centerZ: number;
1558
+ radius: number;
1559
+ } | undefined;
1560
+ shedSideInfillSpan?: number | undefined;
1561
+ shedSideInfillMinX?: number | undefined;
1562
+ shedSideInfillMaxX?: number | undefined;
1563
+ shedFootprintPieces?: [number, number][][] | undefined;
1564
+ shedOpenEndSides?: ("left" | "right")[] | undefined;
1565
+ shedJointFrame?: {
1566
+ position: [number, number, number];
1567
+ rotation: number;
1568
+ } | undefined;
1569
+ shedJointOwnerId?: string | undefined;
1570
+ shedJointNeighborIds?: string[] | undefined;
1571
+ shedJointScopeId?: string | undefined;
1572
+ managedByParent: boolean;
1573
+ wallShell: "auto" | "include" | "omit";
1574
+ shedInsetEndPanels: boolean;
1575
+ fascia?: boolean | undefined;
1576
+ eaveCut?: "plumb" | "plumb-level" | "square" | undefined;
1577
+ fasciaHighEdge?: boolean | undefined;
1578
+ fasciaHeight?: number | undefined;
1579
+ fasciaDepth?: number | undefined;
1580
+ fasciaMaterial?: {
1581
+ id?: string | undefined;
1582
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1583
+ properties?: {
1584
+ color: string;
1585
+ roughness: number;
1586
+ metalness: number;
1587
+ opacity: number;
1588
+ transparent: boolean;
1589
+ side: "back" | "double" | "front";
1590
+ } | undefined;
1591
+ texture?: {
1592
+ url: string;
1593
+ repeat?: [number, number] | undefined;
1594
+ scale?: number | undefined;
1595
+ offset?: [number, number] | undefined;
1596
+ normalMap?: string | undefined;
1597
+ normalScale?: number | undefined;
1598
+ bumpMap?: string | undefined;
1599
+ bumpScale?: number | undefined;
1600
+ } | undefined;
1601
+ } | undefined;
1602
+ fasciaMaterialPreset?: string | undefined;
1824
1603
  heelMaterial?: {
1825
1604
  id?: string | undefined;
1826
1605
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
@@ -1844,56 +1623,253 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
1844
1623
  } | undefined;
1845
1624
  } | undefined;
1846
1625
  heelMaterialPreset?: string | undefined;
1847
- position: [number, number, number];
1848
- rotation: number;
1849
- support: {
1850
- kind: "level";
1851
- } | {
1852
- kind: "walls";
1853
- } | {
1854
- kind: "roof";
1855
- roofSegmentId: `rseg_${string}`;
1856
- localPosition: [number, number];
1857
- curbHeight: number;
1858
- };
1859
- assembly?: {
1860
- layers: {
1861
- id: string;
1862
- role: "air" | "covering" | "deck" | "fill" | "finish" | "furring" | "glazing" | "insulation" | "lining" | "membrane" | "sheathing" | "shell" | "structure" | "substrate" | "underlay";
1863
- thickness: number;
1864
- core?: true | undefined;
1865
- spacing?: number | undefined;
1866
- material?: string | undefined;
1867
- slot?: string | undefined;
1868
- returns?: boolean | undefined;
1869
- display?: "construction" | "finished" | undefined;
1870
- inset?: number | undefined;
1871
- bottom?: number | undefined;
1872
- lift?: number | undefined;
1873
- src?: string | undefined;
1874
- }[];
1875
- backing?: {
1876
- id: string;
1877
- role: "air" | "covering" | "deck" | "fill" | "finish" | "furring" | "glazing" | "insulation" | "lining" | "membrane" | "sheathing" | "shell" | "structure" | "substrate" | "underlay";
1878
- thickness: number;
1879
- core?: true | undefined;
1880
- spacing?: number | undefined;
1881
- material?: string | undefined;
1882
- slot?: string | undefined;
1883
- returns?: boolean | undefined;
1884
- display?: "construction" | "finished" | undefined;
1885
- inset?: number | undefined;
1886
- bottom?: number | undefined;
1887
- lift?: number | undefined;
1888
- src?: string | undefined;
1889
- }[] | undefined;
1890
- face?: "exterior" | "front" | undefined;
1891
- presetId?: string | undefined;
1892
- cavityInsulation?: string | undefined;
1893
- } | undefined;
1894
- slots?: Record<string, string> | undefined;
1895
- children: `rseg_${string}`[];
1896
- type: "roof";
1626
+ gableLeftMaterial?: {
1627
+ id?: string | undefined;
1628
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1629
+ properties?: {
1630
+ color: string;
1631
+ roughness: number;
1632
+ metalness: number;
1633
+ opacity: number;
1634
+ transparent: boolean;
1635
+ side: "back" | "double" | "front";
1636
+ } | undefined;
1637
+ texture?: {
1638
+ url: string;
1639
+ repeat?: [number, number] | undefined;
1640
+ scale?: number | undefined;
1641
+ offset?: [number, number] | undefined;
1642
+ normalMap?: string | undefined;
1643
+ normalScale?: number | undefined;
1644
+ bumpMap?: string | undefined;
1645
+ bumpScale?: number | undefined;
1646
+ } | undefined;
1647
+ } | undefined;
1648
+ gableLeftMaterialPreset?: string | undefined;
1649
+ gableRightMaterial?: {
1650
+ id?: string | undefined;
1651
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1652
+ properties?: {
1653
+ color: string;
1654
+ roughness: number;
1655
+ metalness: number;
1656
+ opacity: number;
1657
+ transparent: boolean;
1658
+ side: "back" | "double" | "front";
1659
+ } | undefined;
1660
+ texture?: {
1661
+ url: string;
1662
+ repeat?: [number, number] | undefined;
1663
+ scale?: number | undefined;
1664
+ offset?: [number, number] | undefined;
1665
+ normalMap?: string | undefined;
1666
+ normalScale?: number | undefined;
1667
+ bumpMap?: string | undefined;
1668
+ bumpScale?: number | undefined;
1669
+ } | undefined;
1670
+ } | undefined;
1671
+ gableRightMaterialPreset?: string | undefined;
1672
+ gambrelLowerWidthRatio: number;
1673
+ gambrelLowerHeightRatio: number;
1674
+ mansardSteepWidthRatio: number;
1675
+ mansardSteepHeightRatio: number;
1676
+ dutchHipWidthRatio: number;
1677
+ dutchHipHeightRatio: number;
1678
+ dutchWaistLengthRatio: number;
1679
+ dutchGabletRake: number;
1680
+ dutchTopRakeThickness: number;
1681
+ children: string[];
1682
+ type: "roof-segment";
1683
+ } | {
1684
+ object: "node";
1685
+ name?: string | undefined;
1686
+ parentId: string | null;
1687
+ visible: boolean;
1688
+ camera?: {
1689
+ position: [number, number, number];
1690
+ target: [number, number, number];
1691
+ mode: "orthographic" | "perspective";
1692
+ fov?: number | undefined;
1693
+ zoom?: number | undefined;
1694
+ } | undefined;
1695
+ metadata: Record<string, unknown>;
1696
+ provenance?: {
1697
+ refs: {
1698
+ ns?: string | undefined;
1699
+ id: string;
1700
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
1701
+ }[];
1702
+ lineage?: {
1703
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
1704
+ fromIds: string[];
1705
+ } | undefined;
1706
+ } | undefined;
1707
+ id: `roof_${string}`;
1708
+ material?: {
1709
+ id?: string | undefined;
1710
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1711
+ properties?: {
1712
+ color: string;
1713
+ roughness: number;
1714
+ metalness: number;
1715
+ opacity: number;
1716
+ transparent: boolean;
1717
+ side: "back" | "double" | "front";
1718
+ } | undefined;
1719
+ texture?: {
1720
+ url: string;
1721
+ repeat?: [number, number] | undefined;
1722
+ scale?: number | undefined;
1723
+ offset?: [number, number] | undefined;
1724
+ normalMap?: string | undefined;
1725
+ normalScale?: number | undefined;
1726
+ bumpMap?: string | undefined;
1727
+ bumpScale?: number | undefined;
1728
+ } | undefined;
1729
+ } | undefined;
1730
+ materialPreset?: string | undefined;
1731
+ topMaterial?: {
1732
+ id?: string | undefined;
1733
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1734
+ properties?: {
1735
+ color: string;
1736
+ roughness: number;
1737
+ metalness: number;
1738
+ opacity: number;
1739
+ transparent: boolean;
1740
+ side: "back" | "double" | "front";
1741
+ } | undefined;
1742
+ texture?: {
1743
+ url: string;
1744
+ repeat?: [number, number] | undefined;
1745
+ scale?: number | undefined;
1746
+ offset?: [number, number] | undefined;
1747
+ normalMap?: string | undefined;
1748
+ normalScale?: number | undefined;
1749
+ bumpMap?: string | undefined;
1750
+ bumpScale?: number | undefined;
1751
+ } | undefined;
1752
+ } | undefined;
1753
+ topMaterialPreset?: string | undefined;
1754
+ edgeMaterial?: {
1755
+ id?: string | undefined;
1756
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1757
+ properties?: {
1758
+ color: string;
1759
+ roughness: number;
1760
+ metalness: number;
1761
+ opacity: number;
1762
+ transparent: boolean;
1763
+ side: "back" | "double" | "front";
1764
+ } | undefined;
1765
+ texture?: {
1766
+ url: string;
1767
+ repeat?: [number, number] | undefined;
1768
+ scale?: number | undefined;
1769
+ offset?: [number, number] | undefined;
1770
+ normalMap?: string | undefined;
1771
+ normalScale?: number | undefined;
1772
+ bumpMap?: string | undefined;
1773
+ bumpScale?: number | undefined;
1774
+ } | undefined;
1775
+ } | undefined;
1776
+ edgeMaterialPreset?: string | undefined;
1777
+ wallMaterial?: {
1778
+ id?: string | undefined;
1779
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1780
+ properties?: {
1781
+ color: string;
1782
+ roughness: number;
1783
+ metalness: number;
1784
+ opacity: number;
1785
+ transparent: boolean;
1786
+ side: "back" | "double" | "front";
1787
+ } | undefined;
1788
+ texture?: {
1789
+ url: string;
1790
+ repeat?: [number, number] | undefined;
1791
+ scale?: number | undefined;
1792
+ offset?: [number, number] | undefined;
1793
+ normalMap?: string | undefined;
1794
+ normalScale?: number | undefined;
1795
+ bumpMap?: string | undefined;
1796
+ bumpScale?: number | undefined;
1797
+ } | undefined;
1798
+ } | undefined;
1799
+ wallMaterialPreset?: string | undefined;
1800
+ heelMaterial?: {
1801
+ id?: string | undefined;
1802
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1803
+ properties?: {
1804
+ color: string;
1805
+ roughness: number;
1806
+ metalness: number;
1807
+ opacity: number;
1808
+ transparent: boolean;
1809
+ side: "back" | "double" | "front";
1810
+ } | undefined;
1811
+ texture?: {
1812
+ url: string;
1813
+ repeat?: [number, number] | undefined;
1814
+ scale?: number | undefined;
1815
+ offset?: [number, number] | undefined;
1816
+ normalMap?: string | undefined;
1817
+ normalScale?: number | undefined;
1818
+ bumpMap?: string | undefined;
1819
+ bumpScale?: number | undefined;
1820
+ } | undefined;
1821
+ } | undefined;
1822
+ heelMaterialPreset?: string | undefined;
1823
+ position: [number, number, number];
1824
+ rotation: number;
1825
+ support: {
1826
+ kind: "level";
1827
+ } | {
1828
+ kind: "walls";
1829
+ } | {
1830
+ kind: "roof";
1831
+ roofSegmentId: `rseg_${string}`;
1832
+ localPosition: [number, number];
1833
+ curbHeight: number;
1834
+ };
1835
+ assembly?: {
1836
+ layers: {
1837
+ id: string;
1838
+ role: "air" | "covering" | "deck" | "fill" | "finish" | "furring" | "glazing" | "insulation" | "lining" | "membrane" | "sheathing" | "shell" | "structure" | "substrate" | "underlay";
1839
+ thickness: number;
1840
+ core?: true | undefined;
1841
+ spacing?: number | undefined;
1842
+ material?: string | undefined;
1843
+ slot?: string | undefined;
1844
+ returns?: boolean | undefined;
1845
+ display?: "construction" | "finished" | undefined;
1846
+ inset?: number | undefined;
1847
+ bottom?: number | undefined;
1848
+ lift?: number | undefined;
1849
+ src?: string | undefined;
1850
+ }[];
1851
+ backing?: {
1852
+ id: string;
1853
+ role: "air" | "covering" | "deck" | "fill" | "finish" | "furring" | "glazing" | "insulation" | "lining" | "membrane" | "sheathing" | "shell" | "structure" | "substrate" | "underlay";
1854
+ thickness: number;
1855
+ core?: true | undefined;
1856
+ spacing?: number | undefined;
1857
+ material?: string | undefined;
1858
+ slot?: string | undefined;
1859
+ returns?: boolean | undefined;
1860
+ display?: "construction" | "finished" | undefined;
1861
+ inset?: number | undefined;
1862
+ bottom?: number | undefined;
1863
+ lift?: number | undefined;
1864
+ src?: string | undefined;
1865
+ }[] | undefined;
1866
+ face?: "exterior" | "front" | undefined;
1867
+ presetId?: string | undefined;
1868
+ cavityInsulation?: string | undefined;
1869
+ } | undefined;
1870
+ slots?: Record<string, string> | undefined;
1871
+ children: string[];
1872
+ type: "roof";
1897
1873
  } | {
1898
1874
  object: "node";
1899
1875
  name?: string | undefined;
@@ -2447,6 +2423,7 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
2447
2423
  } | undefined;
2448
2424
  justification?: "a" | "b" | undefined;
2449
2425
  height?: number | undefined;
2426
+ endHeightOffset?: number | undefined;
2450
2427
  curveOffset?: number | undefined;
2451
2428
  supportSlabId?: string | undefined;
2452
2429
  supportOffset?: number | undefined;
@@ -2749,15 +2726,79 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
2749
2726
  fromIds: string[];
2750
2727
  } | undefined;
2751
2728
  } | undefined;
2752
- id: `fence_${string}`;
2753
- children: string[];
2754
- material?: {
2755
- id?: string | undefined;
2756
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
2757
- properties?: {
2758
- color: string;
2759
- roughness: number;
2760
- metalness: number;
2729
+ id: `separator_${string}`;
2730
+ start: [number, number];
2731
+ end: [number, number];
2732
+ type: "separator";
2733
+ } | {
2734
+ object: "node";
2735
+ name?: string | undefined;
2736
+ parentId: string | null;
2737
+ visible: boolean;
2738
+ camera?: {
2739
+ position: [number, number, number];
2740
+ target: [number, number, number];
2741
+ mode: "orthographic" | "perspective";
2742
+ fov?: number | undefined;
2743
+ zoom?: number | undefined;
2744
+ } | undefined;
2745
+ metadata: Record<string, unknown>;
2746
+ provenance?: {
2747
+ refs: {
2748
+ ns?: string | undefined;
2749
+ id: string;
2750
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
2751
+ }[];
2752
+ lineage?: {
2753
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
2754
+ fromIds: string[];
2755
+ } | undefined;
2756
+ } | undefined;
2757
+ id: `floor-opening_${string}`;
2758
+ polygon: [number, number][];
2759
+ hostZoneId?: string | undefined;
2760
+ legacyPlateCuts?: Record<string, [number, number][][]> | undefined;
2761
+ legacyCeilingCuts?: Record<string, [number, number][][]> | undefined;
2762
+ source: string;
2763
+ ownerId?: string | undefined;
2764
+ surfaceId?: string | undefined;
2765
+ drawnOn: "ceiling" | "floor";
2766
+ cutsPrimary: boolean;
2767
+ cutsAdjacent: boolean;
2768
+ type: "floor-opening";
2769
+ } | {
2770
+ object: "node";
2771
+ name?: string | undefined;
2772
+ parentId: string | null;
2773
+ visible: boolean;
2774
+ camera?: {
2775
+ position: [number, number, number];
2776
+ target: [number, number, number];
2777
+ mode: "orthographic" | "perspective";
2778
+ fov?: number | undefined;
2779
+ zoom?: number | undefined;
2780
+ } | undefined;
2781
+ metadata: Record<string, unknown>;
2782
+ provenance?: {
2783
+ refs: {
2784
+ ns?: string | undefined;
2785
+ id: string;
2786
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
2787
+ }[];
2788
+ lineage?: {
2789
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
2790
+ fromIds: string[];
2791
+ } | undefined;
2792
+ } | undefined;
2793
+ id: `fence_${string}`;
2794
+ children: string[];
2795
+ material?: {
2796
+ id?: string | undefined;
2797
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
2798
+ properties?: {
2799
+ color: string;
2800
+ roughness: number;
2801
+ metalness: number;
2761
2802
  opacity: number;
2762
2803
  transparent: boolean;
2763
2804
  side: "back" | "double" | "front";
@@ -2819,6 +2860,42 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
2819
2860
  color: string;
2820
2861
  style: "guard" | "horizontal" | "picket" | "privacy" | "rail" | "slat";
2821
2862
  type: "fence";
2863
+ } | {
2864
+ object: "node";
2865
+ name?: string | undefined;
2866
+ parentId: string | null;
2867
+ visible: boolean;
2868
+ camera?: {
2869
+ position: [number, number, number];
2870
+ target: [number, number, number];
2871
+ mode: "orthographic" | "perspective";
2872
+ fov?: number | undefined;
2873
+ zoom?: number | undefined;
2874
+ } | undefined;
2875
+ metadata: Record<string, unknown>;
2876
+ provenance?: {
2877
+ refs: {
2878
+ ns?: string | undefined;
2879
+ id: string;
2880
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
2881
+ }[];
2882
+ lineage?: {
2883
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
2884
+ fromIds: string[];
2885
+ } | undefined;
2886
+ } | undefined;
2887
+ id: `beam_${string}`;
2888
+ start: [number, number];
2889
+ end: [number, number];
2890
+ width: number;
2891
+ depth: number;
2892
+ size?: string | undefined;
2893
+ plies: number;
2894
+ material: "glulam" | "lvl" | "pressure-treated" | "sawn" | "steel";
2895
+ placement: "dropped" | "flush";
2896
+ topElevation?: number | undefined;
2897
+ supportSlabId?: string | undefined;
2898
+ type: "beam";
2822
2899
  } | {
2823
2900
  object: "node";
2824
2901
  name?: string | undefined;
@@ -3107,588 +3184,61 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
3107
3184
  } | {
3108
3185
  kind: "section";
3109
3186
  family: "C" | "I" | "L" | "T" | "Z" | "rect-tube";
3110
- width: import("../procedural-items/index.js").Expr;
3111
- depth: import("../procedural-items/index.js").Expr;
3112
- web: import("../procedural-items/index.js").Expr;
3113
- flange: import("../procedural-items/index.js").Expr;
3114
- } | {
3115
- kind: "polygon";
3116
- outer: [import("../procedural-items/index.js").Expr, import("../procedural-items/index.js").Expr][];
3117
- holes?: [import("../procedural-items/index.js").Expr, import("../procedural-items/index.js").Expr][][] | undefined;
3118
- };
3119
- length: import("../procedural-items/index.js").Expr;
3120
- bevel?: import("../procedural-items/index.js").Expr | undefined;
3121
- position: [import("../procedural-items/index.js").Expr, import("../procedural-items/index.js").Expr, import("../procedural-items/index.js").Expr];
3122
- rotation?: [import("../procedural-items/index.js").Expr, import("../procedural-items/index.js").Expr, import("../procedural-items/index.js").Expr] | undefined;
3123
- } | {
3124
- support?: boolean | undefined;
3125
- when?: import("../procedural-items/index.js").Expr | undefined;
3126
- id: string;
3127
- primitive: "revolve";
3128
- slot: string;
3129
- profile: [import("../procedural-items/index.js").Expr, import("../procedural-items/index.js").Expr][];
3130
- segments?: number | undefined;
3131
- arc?: import("../procedural-items/index.js").Expr | undefined;
3132
- position: [import("../procedural-items/index.js").Expr, import("../procedural-items/index.js").Expr, import("../procedural-items/index.js").Expr];
3133
- rotation?: [import("../procedural-items/index.js").Expr, import("../procedural-items/index.js").Expr, import("../procedural-items/index.js").Expr] | undefined;
3134
- })[];
3135
- }[];
3136
- joints?: {
3137
- delay?: import("../procedural-items/index.js").Expr | undefined;
3138
- duration?: import("../procedural-items/index.js").Expr | undefined;
3139
- easing?: "linear" | "smooth" | "soft" | undefined;
3140
- child: string;
3141
- kind: "continuous" | "fixed" | "prismatic" | "revolute";
3142
- origin: [import("../procedural-items/index.js").Expr, import("../procedural-items/index.js").Expr, import("../procedural-items/index.js").Expr];
3143
- axis: [import("../procedural-items/index.js").Expr, import("../procedural-items/index.js").Expr, import("../procedural-items/index.js").Expr];
3144
- open?: import("../procedural-items/index.js").Expr | undefined;
3145
- rest?: import("../procedural-items/index.js").Expr | undefined;
3146
- range?: [import("../procedural-items/index.js").Expr, import("../procedural-items/index.js").Expr] | undefined;
3147
- speed?: import("../procedural-items/index.js").Expr | undefined;
3148
- }[] | undefined;
3149
- constraints: {
3150
- left: import("../procedural-items/index.js").Expr;
3151
- relation: "gte" | "lte";
3152
- right: import("../procedural-items/index.js").Expr;
3153
- message: string;
3154
- }[];
3155
- };
3156
- parameters: Record<string, number>;
3157
- slots: Record<string, string>;
3158
- position: [number, number, number];
3159
- rotation: [number, number, number];
3160
- wallId?: string | undefined;
3161
- side?: "back" | "front" | undefined;
3162
- supportSlabId?: string | undefined;
3163
- children: string[];
3164
- attachments: Record<string, string>;
3165
- } | {
3166
- object: "node";
3167
- name?: string | undefined;
3168
- parentId: string | null;
3169
- visible: boolean;
3170
- camera?: {
3171
- position: [number, number, number];
3172
- target: [number, number, number];
3173
- mode: "orthographic" | "perspective";
3174
- fov?: number | undefined;
3175
- zoom?: number | undefined;
3176
- } | undefined;
3177
- metadata: Record<string, unknown>;
3178
- provenance?: {
3179
- refs: {
3180
- ns?: string | undefined;
3181
- id: string;
3182
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
3183
- }[];
3184
- lineage?: {
3185
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
3186
- fromIds: string[];
3187
- } | undefined;
3188
- } | undefined;
3189
- id: `imesh_${string}`;
3190
- position: [number, number, number];
3191
- rotation: [number, number, number];
3192
- primitives: {
3193
- positions: number[];
3194
- normals?: number[] | undefined;
3195
- indices: number[];
3196
- color: string;
3197
- opacity: number;
3198
- }[];
3199
- type: "imported-mesh";
3200
- } | {
3201
- object: "node";
3202
- parentId: string | null;
3203
- visible: boolean;
3204
- camera?: {
3205
- position: [number, number, number];
3206
- target: [number, number, number];
3207
- mode: "orthographic" | "perspective";
3208
- fov?: number | undefined;
3209
- zoom?: number | undefined;
3210
- } | undefined;
3211
- provenance?: {
3212
- refs: {
3213
- ns?: string | undefined;
3214
- id: string;
3215
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
3216
- }[];
3217
- lineage?: {
3218
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
3219
- fromIds: string[];
3220
- } | undefined;
3221
- } | undefined;
3222
- id: `zone_${string}`;
3223
- name: string;
3224
- polygon: [number, number][];
3225
- holes: [number, number][][];
3226
- autoFromWalls: boolean;
3227
- boundaryWallIds: `wall_${string}`[];
3228
- boundarySeparatorIds: string[];
3229
- hostZoneId?: string | undefined;
3230
- seed?: [number, number] | undefined;
3231
- floor?: {
3232
- elevation?: number | undefined;
3233
- support?: "open" | undefined;
3234
- footprint?: string | undefined;
3235
- thickness?: number | undefined;
3236
- sourceSlabId?: `slab_${string}` | undefined;
3237
- finish?: string | Record<string, unknown> | undefined;
3238
- regions?: {
3239
- id: string;
3240
- polygon: [number, number][];
3241
- finish: string | Record<string, unknown>;
3242
- }[] | undefined;
3243
- script?: {
3244
- kind: "script";
3245
- meta?: {
3246
- description?: string | undefined;
3247
- category?: string | undefined;
3248
- tags?: string[] | undefined;
3249
- parent?: string | undefined;
3250
- } | undefined;
3251
- language: "bpy" | "three";
3252
- script: string;
3253
- params: Record<string, string | number | boolean>;
3254
- artifact: string;
3255
- manifest: {
3256
- bounds: {
3257
- min: [number, number, number];
3258
- max: [number, number, number];
3259
- };
3260
- params: {
3261
- id: string;
3262
- label?: string | undefined;
3263
- kind: "boolean" | "number" | "string";
3264
- default: string | number | boolean;
3265
- min?: number | undefined;
3266
- max?: number | undefined;
3267
- step?: number | undefined;
3268
- unit?: string | undefined;
3269
- options?: string[] | undefined;
3270
- }[];
3271
- parts: {
3272
- id: string;
3273
- label?: string | undefined;
3274
- type?: string | undefined;
3275
- bounds?: {
3276
- min: [number, number, number];
3277
- max: [number, number, number];
3278
- } | undefined;
3279
- }[];
3280
- surfaces: {
3281
- part?: string | undefined;
3282
- y: number;
3283
- polygon: [number, number][];
3284
- }[];
3285
- slots: {
3286
- id: string;
3287
- label?: string | undefined;
3288
- color?: string | undefined;
3289
- roughness?: number | undefined;
3290
- metalness?: number | undefined;
3291
- transparent?: boolean | undefined;
3292
- emissive?: boolean | undefined;
3293
- }[];
3294
- anchors: {
3295
- id: string;
3296
- position: [number, number, number];
3297
- normal?: [number, number, number] | undefined;
3298
- }[];
3299
- lights: {
3300
- id: string;
3301
- position: [number, number, number];
3302
- color: string;
3303
- intensity: number;
3304
- distance?: number | undefined;
3305
- spot?: {
3306
- direction: [number, number, number];
3307
- angle: number;
3308
- softness: number;
3309
- } | undefined;
3310
- shadows?: boolean | undefined;
3311
- glow?: {
3312
- size: number;
3313
- strength: number;
3314
- } | undefined;
3315
- }[];
3316
- undersides: {
3317
- part?: string | undefined;
3318
- polygon: [number, number][];
3319
- plane: [number, number, number, number];
3320
- }[];
3321
- animations: {
3322
- name: string;
3323
- duration: number;
3324
- }[];
3325
- cutters?: {
3326
- host: "ceiling" | "mounted" | "slab" | "wall";
3327
- polygon: number[][];
3328
- minY: number;
3329
- maxY: number;
3330
- }[] | undefined;
3331
- cutout: boolean;
3332
- collider: boolean;
3333
- shape?: {
3334
- tolerance: number;
3335
- bands: {
3336
- y0: number;
3337
- y1: number;
3338
- polygons: {
3339
- outer: [number, number][];
3340
- holes?: [number, number][][] | undefined;
3341
- }[];
3342
- }[];
3343
- } | undefined;
3344
- triangles: number;
3345
- coverage?: number | undefined;
3346
- uncovered?: {
3347
- min: [number, number];
3348
- max: [number, number];
3349
- }[] | undefined;
3350
- };
3351
- images?: {
3352
- artifact: string;
3353
- thumbnail: string;
3354
- floorPlan: string;
3355
- } | undefined;
3356
- inputs: string;
3357
- } | undefined;
3358
- drop?: number | undefined;
3359
- } | undefined;
3360
- roomType?: "deck" | "patio" | "porch" | undefined;
3361
- porchFraming?: {
3362
- auto?: boolean | undefined;
3363
- postSize?: string | undefined;
3364
- postSpacing?: number | undefined;
3365
- beamSize?: string | undefined;
3366
- } | undefined;
3367
- decking?: {
3368
- boardSize?: "2x4" | "2x6" | "5/4x6" | "composite" | undefined;
3369
- gap?: number | undefined;
3370
- direction?: "diagonal" | "parallel" | "perpendicular" | undefined;
3371
- } | undefined;
3372
- ceiling?: {
3373
- regions?: {
3374
- id: string;
3375
- polygon: [number, number][];
3376
- finish: string | Record<string, unknown>;
3377
- }[] | undefined;
3378
- } | undefined;
3379
- floorStepFinish?: string | undefined;
3380
- floorStepOverrides?: {
3381
- key: string;
3382
- step?: number | undefined;
3383
- finish: string;
3384
- }[] | undefined;
3385
- floorEdgeFinish?: string | undefined;
3386
- wallMaterial?: string | undefined;
3387
- wallOverrides?: {
3388
- wallId: string;
3389
- face: "a" | "b";
3390
- finish: string;
3391
- }[] | undefined;
3392
- hasFloor?: false | undefined;
3393
- hasCeiling?: false | undefined;
3394
- spaceRole: "generic" | "room";
3395
- roomNumber: string;
3396
- enclosureStatus: "auto" | "enclosed" | "open";
3397
- floorFinish: string;
3398
- wallFinish: string;
3399
- ceilingFinish: string;
3400
- ceilingHeight: number;
3401
- occupancy: string;
3402
- clearDimensionPolicy: "finish-faces" | "inside-faces" | "none";
3403
- color: string;
3404
- metadata: Record<string, unknown>;
3405
- type: "zone";
3406
- } | {
3407
- object: "node";
3408
- name?: string | undefined;
3409
- parentId: string | null;
3410
- visible: boolean;
3411
- camera?: {
3412
- position: [number, number, number];
3413
- target: [number, number, number];
3414
- mode: "orthographic" | "perspective";
3415
- fov?: number | undefined;
3416
- zoom?: number | undefined;
3417
- } | undefined;
3418
- metadata: Record<string, unknown>;
3419
- provenance?: {
3420
- refs: {
3421
- ns?: string | undefined;
3422
- id: string;
3423
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
3424
- }[];
3425
- lineage?: {
3426
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
3427
- fromIds: string[];
3428
- } | undefined;
3429
- } | undefined;
3430
- id: `ceiling_${string}`;
3431
- children: (`item_${string}` | `procedural-item_${string}`)[];
3432
- material?: {
3433
- id?: string | undefined;
3434
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
3435
- properties?: {
3436
- color: string;
3437
- roughness: number;
3438
- metalness: number;
3439
- opacity: number;
3440
- transparent: boolean;
3441
- side: "back" | "double" | "front";
3442
- } | undefined;
3443
- texture?: {
3444
- url: string;
3445
- repeat?: [number, number] | undefined;
3446
- scale?: number | undefined;
3447
- offset?: [number, number] | undefined;
3448
- normalMap?: string | undefined;
3449
- normalScale?: number | undefined;
3450
- bumpMap?: string | undefined;
3451
- bumpScale?: number | undefined;
3452
- } | undefined;
3453
- } | undefined;
3454
- materialPreset?: string | undefined;
3455
- slots?: Record<string, string> | undefined;
3456
- polygon: [number, number][];
3457
- holes: [number, number][][];
3458
- holeMetadata: {
3459
- source: "elevator" | "floor-opening" | "manual" | "room" | "stair";
3460
- openingId?: string | undefined;
3461
- stairId?: string | undefined;
3462
- elevatorId?: string | undefined;
3463
- }[];
3464
- openingIds?: string[] | undefined;
3465
- height?: number | undefined;
3466
- buildUp?: {
3467
- presetId?: string | undefined;
3468
- finish?: {
3469
- kind: "drywall" | "plaster" | "wood-plank";
3470
- thickness: number;
3471
- name?: string | undefined;
3472
- } | undefined;
3473
- framing?: {
3474
- system: "joists" | "truss-chords";
3475
- size: "2x10" | "2x12" | "2x4" | "2x6" | "2x8";
3476
- spacing: number;
3477
- } | undefined;
3478
- decking?: {
3479
- kind: "osb" | "plywood";
3480
- thickness: number;
3481
- name?: string | undefined;
3482
- } | undefined;
3483
- insulation?: {
3484
- kind: "batt" | "blown" | "rigid";
3485
- thickness: number;
3486
- name?: string | undefined;
3487
- } | undefined;
3488
- } | undefined;
3489
- regions?: {
3490
- id: string;
3491
- polygon: [number, number][];
3492
- finish: string | Record<string, unknown>;
3493
- }[] | undefined;
3494
- boundary?: "auto" | undefined;
3495
- zoneId?: string | undefined;
3496
- autoFromWalls: boolean;
3497
- type: "ceiling";
3498
- } | {
3499
- object: "node";
3500
- name?: string | undefined;
3501
- parentId: string | null;
3502
- visible: boolean;
3503
- camera?: {
3504
- position: [number, number, number];
3505
- target: [number, number, number];
3506
- mode: "orthographic" | "perspective";
3507
- fov?: number | undefined;
3508
- zoom?: number | undefined;
3509
- } | undefined;
3510
- metadata: Record<string, unknown>;
3511
- provenance?: {
3512
- refs: {
3513
- ns?: string | undefined;
3514
- id: string;
3515
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
3516
- }[];
3517
- lineage?: {
3518
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
3519
- fromIds: string[];
3520
- } | undefined;
3521
- } | undefined;
3522
- id: `stair_${string}`;
3523
- material?: {
3524
- id?: string | undefined;
3525
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
3526
- properties?: {
3527
- color: string;
3528
- roughness: number;
3529
- metalness: number;
3530
- opacity: number;
3531
- transparent: boolean;
3532
- side: "back" | "double" | "front";
3533
- } | undefined;
3534
- texture?: {
3535
- url: string;
3536
- repeat?: [number, number] | undefined;
3537
- scale?: number | undefined;
3538
- offset?: [number, number] | undefined;
3539
- normalMap?: string | undefined;
3540
- normalScale?: number | undefined;
3541
- bumpMap?: string | undefined;
3542
- bumpScale?: number | undefined;
3543
- } | undefined;
3544
- } | undefined;
3545
- materialPreset?: string | undefined;
3546
- railingMaterial?: {
3547
- id?: string | undefined;
3548
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
3549
- properties?: {
3550
- color: string;
3551
- roughness: number;
3552
- metalness: number;
3553
- opacity: number;
3554
- transparent: boolean;
3555
- side: "back" | "double" | "front";
3556
- } | undefined;
3557
- texture?: {
3558
- url: string;
3559
- repeat?: [number, number] | undefined;
3560
- scale?: number | undefined;
3561
- offset?: [number, number] | undefined;
3562
- normalMap?: string | undefined;
3563
- normalScale?: number | undefined;
3564
- bumpMap?: string | undefined;
3565
- bumpScale?: number | undefined;
3566
- } | undefined;
3567
- } | undefined;
3568
- railingMaterialPreset?: string | undefined;
3569
- treadMaterial?: {
3570
- id?: string | undefined;
3571
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
3572
- properties?: {
3573
- color: string;
3574
- roughness: number;
3575
- metalness: number;
3576
- opacity: number;
3577
- transparent: boolean;
3578
- side: "back" | "double" | "front";
3579
- } | undefined;
3580
- texture?: {
3581
- url: string;
3582
- repeat?: [number, number] | undefined;
3583
- scale?: number | undefined;
3584
- offset?: [number, number] | undefined;
3585
- normalMap?: string | undefined;
3586
- normalScale?: number | undefined;
3587
- bumpMap?: string | undefined;
3588
- bumpScale?: number | undefined;
3589
- } | undefined;
3590
- } | undefined;
3591
- treadMaterialPreset?: string | undefined;
3592
- sideMaterial?: {
3593
- id?: string | undefined;
3594
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
3595
- properties?: {
3596
- color: string;
3597
- roughness: number;
3598
- metalness: number;
3599
- opacity: number;
3600
- transparent: boolean;
3601
- side: "back" | "double" | "front";
3602
- } | undefined;
3603
- texture?: {
3604
- url: string;
3605
- repeat?: [number, number] | undefined;
3606
- scale?: number | undefined;
3607
- offset?: [number, number] | undefined;
3608
- normalMap?: string | undefined;
3609
- normalScale?: number | undefined;
3610
- bumpMap?: string | undefined;
3611
- bumpScale?: number | undefined;
3612
- } | undefined;
3613
- } | undefined;
3614
- sideMaterialPreset?: string | undefined;
3615
- slots?: Record<string, string> | undefined;
3616
- position: [number, number, number];
3617
- rotation: number;
3618
- supportSlabId?: string | undefined;
3619
- stairType: "curved" | "spiral" | "straight";
3620
- fromLevelId: string | null;
3621
- toLevelId: string | null;
3622
- deckSlabId?: string | undefined;
3623
- slabOpeningMode: "destination" | "none";
3624
- openingOffset: number;
3625
- width: number;
3626
- totalRise?: number | undefined;
3627
- designTargets?: {
3628
- maxRiserHeight: number;
3629
- minimumGoing: number;
3630
- targetGoing: number;
3631
- minimumHeadroom: number;
3632
- } | undefined;
3633
- uniformRisers?: boolean | undefined;
3634
- stepCount: number;
3635
- autoSurfaceSnap?: boolean | undefined;
3636
- destinationSurfaceId?: string | undefined;
3637
- thickness: number;
3638
- fillToFloor: boolean;
3639
- construction?: {
3640
- mode: "center-stringer" | "open" | "side-stringers" | "solid" | "waist";
3641
- waistThickness: number;
3642
- treadThickness: number;
3643
- riserThickness: number;
3644
- nosing: number;
3645
- finishThickness: number;
3646
- closedRisers: boolean;
3647
- stringerWidth: number;
3648
- stringerDepth: number;
3649
- } | undefined;
3650
- structure?: {
3651
- type: "concrete" | "steel-stringers" | "wood-stringers";
3652
- stringerStock: "2x10" | "2x12";
3653
- stringerType: "cut" | "housed";
3654
- stringerSpacing: number;
3655
- stringerCount?: number | undefined;
3656
- treadStock?: "2x12" | "2x6-pair" | "5/4x6-pair" | "plywood-finish" | undefined;
3657
- closedRisers?: boolean | undefined;
3658
- treated?: boolean | undefined;
3659
- nosing?: number | undefined;
3660
- } | undefined;
3661
- innerRadius: number;
3662
- sweepAngle: number;
3663
- topLandingMode: "integrated" | "none";
3664
- topLandingDepth: number;
3665
- showCenterColumn: boolean;
3666
- showStepSupports: boolean;
3667
- railingMode: "both" | "left" | "none" | "right";
3668
- railingHeight: number;
3669
- railingStyle?: "balusters" | "boards" | "cable" | "glass" | "metal" | "post-and-rail" | undefined;
3670
- railingPath?: "continuous" | "original" | undefined;
3671
- handrail?: {
3672
- mode: "both" | "left" | "none" | "right";
3673
- height: number;
3674
- diameter: number;
3675
- offset: number;
3676
- bottom?: {
3677
- extension: number;
3678
- return: "floor" | "none" | "post" | "wall";
3679
- returnLength: number;
3680
- } | undefined;
3681
- top?: {
3682
- extension: number;
3683
- return: "floor" | "none" | "post" | "wall";
3684
- returnLength: number;
3685
- } | undefined;
3686
- } | undefined;
3687
- railingTopPost?: boolean | undefined;
3688
- railingTopReach?: number | undefined;
3689
- railingPostThrough?: boolean | undefined;
3690
- children: `sseg_${string}`[];
3691
- type: "stair";
3187
+ width: import("../procedural-items/index.js").Expr;
3188
+ depth: import("../procedural-items/index.js").Expr;
3189
+ web: import("../procedural-items/index.js").Expr;
3190
+ flange: import("../procedural-items/index.js").Expr;
3191
+ } | {
3192
+ kind: "polygon";
3193
+ outer: [import("../procedural-items/index.js").Expr, import("../procedural-items/index.js").Expr][];
3194
+ holes?: [import("../procedural-items/index.js").Expr, import("../procedural-items/index.js").Expr][][] | undefined;
3195
+ };
3196
+ length: import("../procedural-items/index.js").Expr;
3197
+ bevel?: import("../procedural-items/index.js").Expr | undefined;
3198
+ position: [import("../procedural-items/index.js").Expr, import("../procedural-items/index.js").Expr, import("../procedural-items/index.js").Expr];
3199
+ rotation?: [import("../procedural-items/index.js").Expr, import("../procedural-items/index.js").Expr, import("../procedural-items/index.js").Expr] | undefined;
3200
+ } | {
3201
+ support?: boolean | undefined;
3202
+ when?: import("../procedural-items/index.js").Expr | undefined;
3203
+ id: string;
3204
+ primitive: "revolve";
3205
+ slot: string;
3206
+ profile: [import("../procedural-items/index.js").Expr, import("../procedural-items/index.js").Expr][];
3207
+ segments?: number | undefined;
3208
+ arc?: import("../procedural-items/index.js").Expr | undefined;
3209
+ position: [import("../procedural-items/index.js").Expr, import("../procedural-items/index.js").Expr, import("../procedural-items/index.js").Expr];
3210
+ rotation?: [import("../procedural-items/index.js").Expr, import("../procedural-items/index.js").Expr, import("../procedural-items/index.js").Expr] | undefined;
3211
+ })[];
3212
+ }[];
3213
+ joints?: {
3214
+ delay?: import("../procedural-items/index.js").Expr | undefined;
3215
+ duration?: import("../procedural-items/index.js").Expr | undefined;
3216
+ easing?: "linear" | "smooth" | "soft" | undefined;
3217
+ child: string;
3218
+ kind: "continuous" | "fixed" | "prismatic" | "revolute";
3219
+ origin: [import("../procedural-items/index.js").Expr, import("../procedural-items/index.js").Expr, import("../procedural-items/index.js").Expr];
3220
+ axis: [import("../procedural-items/index.js").Expr, import("../procedural-items/index.js").Expr, import("../procedural-items/index.js").Expr];
3221
+ open?: import("../procedural-items/index.js").Expr | undefined;
3222
+ rest?: import("../procedural-items/index.js").Expr | undefined;
3223
+ range?: [import("../procedural-items/index.js").Expr, import("../procedural-items/index.js").Expr] | undefined;
3224
+ speed?: import("../procedural-items/index.js").Expr | undefined;
3225
+ }[] | undefined;
3226
+ constraints: {
3227
+ left: import("../procedural-items/index.js").Expr;
3228
+ relation: "gte" | "lte";
3229
+ right: import("../procedural-items/index.js").Expr;
3230
+ message: string;
3231
+ }[];
3232
+ };
3233
+ parameters: Record<string, number>;
3234
+ slots: Record<string, string>;
3235
+ position: [number, number, number];
3236
+ rotation: [number, number, number];
3237
+ wallId?: string | undefined;
3238
+ side?: "back" | "front" | undefined;
3239
+ supportSlabId?: string | undefined;
3240
+ children: string[];
3241
+ attachments: Record<string, string>;
3692
3242
  } | {
3693
3243
  object: "node";
3694
3244
  name?: string | undefined;
@@ -3713,23 +3263,19 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
3713
3263
  fromIds: string[];
3714
3264
  } | undefined;
3715
3265
  } | undefined;
3716
- id: `scan_${string}`;
3717
- url: string | null;
3718
- captureSession: {
3719
- sessionId: string;
3720
- schemaVersion?: number | undefined;
3721
- revisionId?: string | undefined;
3722
- manifestUrl?: string | undefined;
3723
- } | null;
3724
- layers: Record<string, boolean>;
3266
+ id: `imesh_${string}`;
3725
3267
  position: [number, number, number];
3726
3268
  rotation: [number, number, number];
3727
- scale: number;
3728
- opacity: number;
3729
- type: "scan";
3269
+ primitives: {
3270
+ positions: number[];
3271
+ normals?: number[] | undefined;
3272
+ indices: number[];
3273
+ color: string;
3274
+ opacity: number;
3275
+ }[];
3276
+ type: "imported-mesh";
3730
3277
  } | {
3731
3278
  object: "node";
3732
- name?: string | undefined;
3733
3279
  parentId: string | null;
3734
3280
  visible: boolean;
3735
3281
  camera?: {
@@ -3739,7 +3285,6 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
3739
3285
  fov?: number | undefined;
3740
3286
  zoom?: number | undefined;
3741
3287
  } | undefined;
3742
- metadata: Record<string, unknown>;
3743
3288
  provenance?: {
3744
3289
  refs: {
3745
3290
  ns?: string | undefined;
@@ -3751,23 +3296,190 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
3751
3296
  fromIds: string[];
3752
3297
  } | undefined;
3753
3298
  } | undefined;
3754
- id: `guide_${string}`;
3755
- url: string;
3756
- position: [number, number, number];
3757
- rotation: [number, number, number];
3758
- scale: number;
3759
- opacity: number;
3760
- scaleReference: {
3761
- start: [number, number];
3762
- end: [number, number];
3763
- realLengthMeters: number;
3764
- measuredLengthUnits: number;
3765
- metersPerUnit: number;
3766
- displayLength?: number | undefined;
3767
- displayUnit?: "centimeters" | "feet" | "inches" | "meters" | undefined;
3768
- label: string;
3769
- } | null;
3770
- type: "guide";
3299
+ id: `zone_${string}`;
3300
+ name: string;
3301
+ polygon: [number, number][];
3302
+ holes: [number, number][][];
3303
+ autoFromWalls: boolean;
3304
+ boundaryWallIds: `wall_${string}`[];
3305
+ boundarySeparatorIds: string[];
3306
+ hostZoneId?: string | undefined;
3307
+ seed?: [number, number] | undefined;
3308
+ floor?: {
3309
+ elevation?: number | undefined;
3310
+ support?: "open" | undefined;
3311
+ footprint?: string | undefined;
3312
+ thickness?: number | undefined;
3313
+ sourceSlabId?: `slab_${string}` | undefined;
3314
+ finish?: string | Record<string, unknown> | undefined;
3315
+ regions?: {
3316
+ id: string;
3317
+ polygon: [number, number][];
3318
+ finish: string | Record<string, unknown>;
3319
+ }[] | undefined;
3320
+ script?: {
3321
+ kind: "script";
3322
+ meta?: {
3323
+ description?: string | undefined;
3324
+ category?: string | undefined;
3325
+ tags?: string[] | undefined;
3326
+ parent?: string | undefined;
3327
+ } | undefined;
3328
+ language: "bpy" | "three";
3329
+ script: string;
3330
+ params: Record<string, string | number | boolean>;
3331
+ artifact: string;
3332
+ manifest: {
3333
+ bounds: {
3334
+ min: [number, number, number];
3335
+ max: [number, number, number];
3336
+ };
3337
+ params: {
3338
+ id: string;
3339
+ label?: string | undefined;
3340
+ kind: "boolean" | "number" | "string";
3341
+ default: string | number | boolean;
3342
+ min?: number | undefined;
3343
+ max?: number | undefined;
3344
+ step?: number | undefined;
3345
+ unit?: string | undefined;
3346
+ options?: string[] | undefined;
3347
+ }[];
3348
+ parts: {
3349
+ id: string;
3350
+ label?: string | undefined;
3351
+ type?: string | undefined;
3352
+ bounds?: {
3353
+ min: [number, number, number];
3354
+ max: [number, number, number];
3355
+ } | undefined;
3356
+ }[];
3357
+ surfaces: {
3358
+ part?: string | undefined;
3359
+ y: number;
3360
+ polygon: [number, number][];
3361
+ }[];
3362
+ slots: {
3363
+ id: string;
3364
+ label?: string | undefined;
3365
+ color?: string | undefined;
3366
+ roughness?: number | undefined;
3367
+ metalness?: number | undefined;
3368
+ transparent?: boolean | undefined;
3369
+ emissive?: boolean | undefined;
3370
+ }[];
3371
+ anchors: {
3372
+ id: string;
3373
+ position: [number, number, number];
3374
+ normal?: [number, number, number] | undefined;
3375
+ }[];
3376
+ lights: {
3377
+ id: string;
3378
+ position: [number, number, number];
3379
+ color: string;
3380
+ intensity: number;
3381
+ distance?: number | undefined;
3382
+ spot?: {
3383
+ direction: [number, number, number];
3384
+ angle: number;
3385
+ softness: number;
3386
+ } | undefined;
3387
+ shadows?: boolean | undefined;
3388
+ glow?: {
3389
+ size: number;
3390
+ strength: number;
3391
+ } | undefined;
3392
+ }[];
3393
+ undersides: {
3394
+ part?: string | undefined;
3395
+ polygon: [number, number][];
3396
+ plane: [number, number, number, number];
3397
+ }[];
3398
+ animations: {
3399
+ name: string;
3400
+ duration: number;
3401
+ }[];
3402
+ cutters?: {
3403
+ host: "ceiling" | "mounted" | "slab" | "wall";
3404
+ polygon: number[][];
3405
+ minY: number;
3406
+ maxY: number;
3407
+ }[] | undefined;
3408
+ cutout: boolean;
3409
+ collider: boolean;
3410
+ shape?: {
3411
+ tolerance: number;
3412
+ bands: {
3413
+ y0: number;
3414
+ y1: number;
3415
+ polygons: {
3416
+ outer: [number, number][];
3417
+ holes?: [number, number][][] | undefined;
3418
+ }[];
3419
+ }[];
3420
+ } | undefined;
3421
+ triangles: number;
3422
+ coverage?: number | undefined;
3423
+ uncovered?: {
3424
+ min: [number, number];
3425
+ max: [number, number];
3426
+ }[] | undefined;
3427
+ };
3428
+ images?: {
3429
+ artifact: string;
3430
+ thumbnail: string;
3431
+ floorPlan: string;
3432
+ } | undefined;
3433
+ inputs: string;
3434
+ } | undefined;
3435
+ drop?: number | undefined;
3436
+ } | undefined;
3437
+ roomType?: "deck" | "patio" | "porch" | undefined;
3438
+ porchFraming?: {
3439
+ auto?: boolean | undefined;
3440
+ postSize?: string | undefined;
3441
+ postSpacing?: number | undefined;
3442
+ beamSize?: string | undefined;
3443
+ } | undefined;
3444
+ decking?: {
3445
+ boardSize?: "2x4" | "2x6" | "5/4x6" | "composite" | undefined;
3446
+ gap?: number | undefined;
3447
+ direction?: "diagonal" | "parallel" | "perpendicular" | undefined;
3448
+ } | undefined;
3449
+ ceiling?: {
3450
+ regions?: {
3451
+ id: string;
3452
+ polygon: [number, number][];
3453
+ finish: string | Record<string, unknown>;
3454
+ }[] | undefined;
3455
+ } | undefined;
3456
+ floorStepFinish?: string | undefined;
3457
+ floorStepOverrides?: {
3458
+ key: string;
3459
+ step?: number | undefined;
3460
+ finish: string;
3461
+ }[] | undefined;
3462
+ floorEdgeFinish?: string | undefined;
3463
+ wallMaterial?: string | undefined;
3464
+ wallOverrides?: {
3465
+ wallId: string;
3466
+ face: "a" | "b";
3467
+ finish: string;
3468
+ }[] | undefined;
3469
+ hasFloor?: false | undefined;
3470
+ hasCeiling?: false | undefined;
3471
+ spaceRole: "generic" | "room";
3472
+ roomNumber: string;
3473
+ enclosureStatus: "auto" | "enclosed" | "open";
3474
+ floorFinish: string;
3475
+ wallFinish: string;
3476
+ ceilingFinish: string;
3477
+ ceilingHeight: number;
3478
+ occupancy: string;
3479
+ clearDimensionPolicy: "finish-faces" | "inside-faces" | "none";
3480
+ color: string;
3481
+ metadata: Record<string, unknown>;
3482
+ type: "zone";
3771
3483
  } | {
3772
3484
  object: "node";
3773
3485
  name?: string | undefined;
@@ -3792,22 +3504,8 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
3792
3504
  fromIds: string[];
3793
3505
  } | undefined;
3794
3506
  } | undefined;
3795
- id: `shelf_${string}`;
3796
- children: string[];
3797
- position: [number, number, number];
3798
- rotation: [number, number, number];
3799
- supportSlabId?: string | undefined;
3800
- width: number;
3801
- depth: number;
3802
- thickness: number;
3803
- height: number;
3804
- style: "bookshelf" | "cubby" | "open-rack" | "wall-shelf";
3805
- rows: number;
3806
- columns: number;
3807
- withBack: boolean;
3808
- withSides: boolean;
3809
- withBottom: boolean;
3810
- bracketStyle: "hidden" | "industrial" | "minimal";
3507
+ id: `ceiling_${string}`;
3508
+ children: (`item_${string}` | `procedural-item_${string}`)[];
3811
3509
  material?: {
3812
3510
  id?: string | undefined;
3813
3511
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
@@ -3832,7 +3530,48 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
3832
3530
  } | undefined;
3833
3531
  materialPreset?: string | undefined;
3834
3532
  slots?: Record<string, string> | undefined;
3835
- type: "shelf";
3533
+ polygon: [number, number][];
3534
+ holes: [number, number][][];
3535
+ holeMetadata: {
3536
+ source: "elevator" | "floor-opening" | "manual" | "room" | "stair";
3537
+ openingId?: string | undefined;
3538
+ stairId?: string | undefined;
3539
+ elevatorId?: string | undefined;
3540
+ }[];
3541
+ openingIds?: string[] | undefined;
3542
+ height?: number | undefined;
3543
+ buildUp?: {
3544
+ presetId?: string | undefined;
3545
+ finish?: {
3546
+ kind: "drywall" | "plaster" | "wood-plank";
3547
+ thickness: number;
3548
+ name?: string | undefined;
3549
+ } | undefined;
3550
+ framing?: {
3551
+ system: "joists" | "truss-chords";
3552
+ size: "2x10" | "2x12" | "2x4" | "2x6" | "2x8";
3553
+ spacing: number;
3554
+ } | undefined;
3555
+ decking?: {
3556
+ kind: "osb" | "plywood";
3557
+ thickness: number;
3558
+ name?: string | undefined;
3559
+ } | undefined;
3560
+ insulation?: {
3561
+ kind: "batt" | "blown" | "rigid";
3562
+ thickness: number;
3563
+ name?: string | undefined;
3564
+ } | undefined;
3565
+ } | undefined;
3566
+ regions?: {
3567
+ id: string;
3568
+ polygon: [number, number][];
3569
+ finish: string | Record<string, unknown>;
3570
+ }[] | undefined;
3571
+ boundary?: "auto" | undefined;
3572
+ zoneId?: string | undefined;
3573
+ autoFromWalls: boolean;
3574
+ type: "ceiling";
3836
3575
  } | {
3837
3576
  object: "node";
3838
3577
  name?: string | undefined;
@@ -3857,29 +3596,59 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
3857
3596
  fromIds: string[];
3858
3597
  } | undefined;
3859
3598
  } | undefined;
3860
- id: `duct-fitting_${string}`;
3599
+ id: `sseg_${string}`;
3600
+ material?: {
3601
+ id?: string | undefined;
3602
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
3603
+ properties?: {
3604
+ color: string;
3605
+ roughness: number;
3606
+ metalness: number;
3607
+ opacity: number;
3608
+ transparent: boolean;
3609
+ side: "back" | "double" | "front";
3610
+ } | undefined;
3611
+ texture?: {
3612
+ url: string;
3613
+ repeat?: [number, number] | undefined;
3614
+ scale?: number | undefined;
3615
+ offset?: [number, number] | undefined;
3616
+ normalMap?: string | undefined;
3617
+ normalScale?: number | undefined;
3618
+ bumpMap?: string | undefined;
3619
+ bumpScale?: number | undefined;
3620
+ } | undefined;
3621
+ } | undefined;
3622
+ materialPreset?: string | undefined;
3623
+ slots?: Record<string, string> | undefined;
3861
3624
  position: [number, number, number];
3862
- rotation: [number, number, number];
3863
- fittingType: "access-panel" | "coupling" | "cross" | "damper" | "elbow" | "end-cap" | "reducer" | "tee" | "transition";
3864
- shape: "oval" | "rect" | "round";
3865
- inletShape?: "oval" | "rect" | "round" | undefined;
3866
- outletShape?: "oval" | "rect" | "round" | undefined;
3625
+ rotation: number;
3626
+ segmentType: "landing" | "stair";
3867
3627
  width: number;
3628
+ length: number;
3868
3629
  height: number;
3869
- shape2: "oval" | "rect" | "round";
3870
- width2: number;
3871
- height2: number;
3872
- angle: number;
3873
- branchAngle: number;
3874
- diameter: number;
3875
- diameter2: number;
3876
- ductMaterial: "duct-board" | "flex" | "sheet-metal";
3877
- system: "return" | "supply";
3878
- damperAngle: number;
3879
- panelWidth: number;
3880
- panelHeight: number;
3881
- slots?: Record<string, string> | undefined;
3882
- type: "duct-fitting";
3630
+ stepCount: number;
3631
+ attachmentSide: "front" | "left" | "right";
3632
+ fillToFloor: boolean;
3633
+ construction?: {
3634
+ mode: "center-stringer" | "open" | "side-stringers" | "solid" | "waist";
3635
+ waistThickness: number;
3636
+ treadThickness: number;
3637
+ riserThickness: number;
3638
+ nosing: number;
3639
+ finishThickness: number;
3640
+ closedRisers: boolean;
3641
+ stringerWidth: number;
3642
+ stringerDepth: number;
3643
+ } | undefined;
3644
+ winder?: {
3645
+ turn: "left" | "right";
3646
+ innerGap: number;
3647
+ walkingLineOffset: number;
3648
+ division: "equal-angle" | "equal-going";
3649
+ } | undefined;
3650
+ thickness: number;
3651
+ type: "stair-segment";
3883
3652
  } | {
3884
3653
  object: "node";
3885
3654
  name?: string | undefined;
@@ -3904,60 +3673,176 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
3904
3673
  fromIds: string[];
3905
3674
  } | undefined;
3906
3675
  } | undefined;
3907
- id: `duct-terminal_${string}`;
3908
- position: [number, number, number];
3909
- rotation: number;
3910
- supportSlabId?: string | undefined;
3911
- terminalType: "diffuser" | "return-grille" | "supply-register";
3912
- mount: "ceiling" | "floor" | "wall";
3913
- width: number;
3914
- depth: number;
3915
- collarShape: "oval" | "rect" | "round";
3916
- collarDiameter: number;
3917
- collarWidth: number;
3918
- collarHeight: number;
3919
- type: "duct-terminal";
3920
- } | {
3921
- object: "node";
3922
- name?: string | undefined;
3923
- parentId: string | null;
3924
- visible: boolean;
3925
- camera?: {
3926
- position: [number, number, number];
3927
- target: [number, number, number];
3928
- mode: "orthographic" | "perspective";
3929
- fov?: number | undefined;
3930
- zoom?: number | undefined;
3676
+ id: `stair_${string}`;
3677
+ material?: {
3678
+ id?: string | undefined;
3679
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
3680
+ properties?: {
3681
+ color: string;
3682
+ roughness: number;
3683
+ metalness: number;
3684
+ opacity: number;
3685
+ transparent: boolean;
3686
+ side: "back" | "double" | "front";
3687
+ } | undefined;
3688
+ texture?: {
3689
+ url: string;
3690
+ repeat?: [number, number] | undefined;
3691
+ scale?: number | undefined;
3692
+ offset?: [number, number] | undefined;
3693
+ normalMap?: string | undefined;
3694
+ normalScale?: number | undefined;
3695
+ bumpMap?: string | undefined;
3696
+ bumpScale?: number | undefined;
3697
+ } | undefined;
3931
3698
  } | undefined;
3932
- metadata: Record<string, unknown>;
3933
- provenance?: {
3934
- refs: {
3935
- ns?: string | undefined;
3936
- id: string;
3937
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
3938
- }[];
3939
- lineage?: {
3940
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
3941
- fromIds: string[];
3699
+ materialPreset?: string | undefined;
3700
+ railingMaterial?: {
3701
+ id?: string | undefined;
3702
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
3703
+ properties?: {
3704
+ color: string;
3705
+ roughness: number;
3706
+ metalness: number;
3707
+ opacity: number;
3708
+ transparent: boolean;
3709
+ side: "back" | "double" | "front";
3710
+ } | undefined;
3711
+ texture?: {
3712
+ url: string;
3713
+ repeat?: [number, number] | undefined;
3714
+ scale?: number | undefined;
3715
+ offset?: [number, number] | undefined;
3716
+ normalMap?: string | undefined;
3717
+ normalScale?: number | undefined;
3718
+ bumpMap?: string | undefined;
3719
+ bumpScale?: number | undefined;
3720
+ } | undefined;
3721
+ } | undefined;
3722
+ railingMaterialPreset?: string | undefined;
3723
+ treadMaterial?: {
3724
+ id?: string | undefined;
3725
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
3726
+ properties?: {
3727
+ color: string;
3728
+ roughness: number;
3729
+ metalness: number;
3730
+ opacity: number;
3731
+ transparent: boolean;
3732
+ side: "back" | "double" | "front";
3733
+ } | undefined;
3734
+ texture?: {
3735
+ url: string;
3736
+ repeat?: [number, number] | undefined;
3737
+ scale?: number | undefined;
3738
+ offset?: [number, number] | undefined;
3739
+ normalMap?: string | undefined;
3740
+ normalScale?: number | undefined;
3741
+ bumpMap?: string | undefined;
3742
+ bumpScale?: number | undefined;
3743
+ } | undefined;
3744
+ } | undefined;
3745
+ treadMaterialPreset?: string | undefined;
3746
+ sideMaterial?: {
3747
+ id?: string | undefined;
3748
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
3749
+ properties?: {
3750
+ color: string;
3751
+ roughness: number;
3752
+ metalness: number;
3753
+ opacity: number;
3754
+ transparent: boolean;
3755
+ side: "back" | "double" | "front";
3756
+ } | undefined;
3757
+ texture?: {
3758
+ url: string;
3759
+ repeat?: [number, number] | undefined;
3760
+ scale?: number | undefined;
3761
+ offset?: [number, number] | undefined;
3762
+ normalMap?: string | undefined;
3763
+ normalScale?: number | undefined;
3764
+ bumpMap?: string | undefined;
3765
+ bumpScale?: number | undefined;
3942
3766
  } | undefined;
3943
3767
  } | undefined;
3944
- id: `hvac-equipment_${string}`;
3768
+ sideMaterialPreset?: string | undefined;
3769
+ slots?: Record<string, string> | undefined;
3945
3770
  position: [number, number, number];
3946
3771
  rotation: number;
3947
3772
  supportSlabId?: string | undefined;
3948
- equipmentType: "air-handler" | "condenser" | "furnace";
3773
+ stairType: "curved" | "spiral" | "straight";
3774
+ fromLevelId: string | null;
3775
+ toLevelId: string | null;
3776
+ deckSlabId?: string | undefined;
3777
+ slabOpeningMode: "destination" | "none";
3778
+ openingOffset: number;
3949
3779
  width: number;
3950
- depth: number;
3951
- height: number;
3952
- supplyShape: "oval" | "rect" | "round";
3953
- returnShape: "oval" | "rect" | "round";
3954
- supplyDiameter: number;
3955
- returnDiameter: number;
3956
- supplyWidth: number;
3957
- supplyHeight: number;
3958
- returnWidth: number;
3959
- returnHeight: number;
3960
- type: "hvac-equipment";
3780
+ totalRise?: number | undefined;
3781
+ designTargets?: {
3782
+ maxRiserHeight: number;
3783
+ minimumGoing: number;
3784
+ targetGoing: number;
3785
+ minimumHeadroom: number;
3786
+ } | undefined;
3787
+ uniformRisers?: boolean | undefined;
3788
+ stepCount: number;
3789
+ autoSurfaceSnap?: boolean | undefined;
3790
+ destinationSurfaceId?: string | undefined;
3791
+ thickness: number;
3792
+ fillToFloor: boolean;
3793
+ construction?: {
3794
+ mode: "center-stringer" | "open" | "side-stringers" | "solid" | "waist";
3795
+ waistThickness: number;
3796
+ treadThickness: number;
3797
+ riserThickness: number;
3798
+ nosing: number;
3799
+ finishThickness: number;
3800
+ closedRisers: boolean;
3801
+ stringerWidth: number;
3802
+ stringerDepth: number;
3803
+ } | undefined;
3804
+ structure?: {
3805
+ type: "concrete" | "steel-stringers" | "wood-stringers";
3806
+ stringerStock: "2x10" | "2x12";
3807
+ stringerType: "cut" | "housed";
3808
+ stringerSpacing: number;
3809
+ stringerCount?: number | undefined;
3810
+ treadStock?: "2x12" | "2x6-pair" | "5/4x6-pair" | "plywood-finish" | undefined;
3811
+ closedRisers?: boolean | undefined;
3812
+ treated?: boolean | undefined;
3813
+ nosing?: number | undefined;
3814
+ } | undefined;
3815
+ innerRadius: number;
3816
+ sweepAngle: number;
3817
+ topLandingMode: "integrated" | "none";
3818
+ topLandingDepth: number;
3819
+ showCenterColumn: boolean;
3820
+ showStepSupports: boolean;
3821
+ railingMode: "both" | "left" | "none" | "right";
3822
+ railingHeight: number;
3823
+ railingStyle?: "balusters" | "boards" | "cable" | "glass" | "metal" | "post-and-rail" | undefined;
3824
+ railingPath?: "continuous" | "original" | undefined;
3825
+ handrail?: {
3826
+ mode: "both" | "left" | "none" | "right";
3827
+ height: number;
3828
+ diameter: number;
3829
+ offset: number;
3830
+ bottom?: {
3831
+ extension: number;
3832
+ return: "floor" | "none" | "post" | "wall";
3833
+ returnLength: number;
3834
+ } | undefined;
3835
+ top?: {
3836
+ extension: number;
3837
+ return: "floor" | "none" | "post" | "wall";
3838
+ returnLength: number;
3839
+ } | undefined;
3840
+ } | undefined;
3841
+ railingTopPost?: boolean | undefined;
3842
+ railingTopReach?: number | undefined;
3843
+ railingPostThrough?: boolean | undefined;
3844
+ children: `sseg_${string}`[];
3845
+ type: "stair";
3961
3846
  } | {
3962
3847
  object: "node";
3963
3848
  name?: string | undefined;
@@ -3982,10 +3867,20 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
3982
3867
  fromIds: string[];
3983
3868
  } | undefined;
3984
3869
  } | undefined;
3985
- id: `liquid-line_${string}`;
3986
- path: [number, number, number][];
3987
- diameter: number;
3988
- type: "liquid-line";
3870
+ id: `scan_${string}`;
3871
+ url: string | null;
3872
+ captureSession: {
3873
+ sessionId: string;
3874
+ schemaVersion?: number | undefined;
3875
+ revisionId?: string | undefined;
3876
+ manifestUrl?: string | undefined;
3877
+ } | null;
3878
+ layers: Record<string, boolean>;
3879
+ position: [number, number, number];
3880
+ rotation: [number, number, number];
3881
+ scale: number;
3882
+ opacity: number;
3883
+ type: "scan";
3989
3884
  } | {
3990
3885
  object: "node";
3991
3886
  name?: string | undefined;
@@ -4010,28 +3905,23 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
4010
3905
  fromIds: string[];
4011
3906
  } | undefined;
4012
3907
  } | undefined;
4013
- id: `pipe-segment_${string}`;
4014
- path: [number, number, number][];
4015
- autoHangers?: boolean | undefined;
4016
- hangerOverrides?: Record<string, {
4017
- fraction?: number | undefined;
4018
- skipped?: boolean | undefined;
4019
- hostId?: string | undefined;
4020
- }> | undefined;
4021
- hangerStyle?: "double" | "single" | undefined;
4022
- hangerSpacing?: number | undefined;
4023
- hangerMaxReach?: number | undefined;
4024
- wallAttachment?: {
4025
- wallId: `wall_${string}`;
4026
- side: "back" | "front";
4027
- startUV: [number, number];
4028
- endUV: [number, number];
4029
- offset: number;
4030
- } | undefined;
4031
- diameter: number;
4032
- pipeMaterial: "abs" | "cast-iron" | "pvc";
4033
- system: "vent" | "waste";
4034
- type: "pipe-segment";
3908
+ id: `guide_${string}`;
3909
+ url: string;
3910
+ position: [number, number, number];
3911
+ rotation: [number, number, number];
3912
+ scale: number;
3913
+ opacity: number;
3914
+ scaleReference: {
3915
+ start: [number, number];
3916
+ end: [number, number];
3917
+ realLengthMeters: number;
3918
+ measuredLengthUnits: number;
3919
+ metersPerUnit: number;
3920
+ displayLength?: number | undefined;
3921
+ displayUnit?: "centimeters" | "feet" | "inches" | "meters" | undefined;
3922
+ label: string;
3923
+ } | null;
3924
+ type: "guide";
4035
3925
  } | {
4036
3926
  object: "node";
4037
3927
  name?: string | undefined;
@@ -4056,17 +3946,89 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
4056
3946
  fromIds: string[];
4057
3947
  } | undefined;
4058
3948
  } | undefined;
4059
- id: `pipe-fitting_${string}`;
4060
- position: [number, number, number];
4061
- rotation: [number, number, number];
4062
- fittingType: "cleanout" | "coupling" | "cross" | "elbow" | "end-cap" | "reducer" | "sanitary-tee" | "wye";
4063
- angle: number;
4064
- diameter: number;
4065
- diameter2: number;
4066
- cleanoutStyle: "end" | "inline";
4067
- pipeMaterial: "abs" | "cast-iron" | "pvc";
4068
- system: "vent" | "waste";
4069
- type: "pipe-fitting";
3949
+ id: `measurement_${string}`;
3950
+ measurement: {
3951
+ kind: "distance";
3952
+ points: [{
3953
+ kind: "feature";
3954
+ reference: {
3955
+ nodeId: string;
3956
+ featureId: string;
3957
+ parameters?: Record<string, string | number | boolean> | undefined;
3958
+ };
3959
+ fallback: [number, number, number];
3960
+ } | [number, number, number], {
3961
+ kind: "feature";
3962
+ reference: {
3963
+ nodeId: string;
3964
+ featureId: string;
3965
+ parameters?: Record<string, string | number | boolean> | undefined;
3966
+ };
3967
+ fallback: [number, number, number];
3968
+ } | [number, number, number]];
3969
+ } | {
3970
+ kind: "angle";
3971
+ points: [{
3972
+ kind: "feature";
3973
+ reference: {
3974
+ nodeId: string;
3975
+ featureId: string;
3976
+ parameters?: Record<string, string | number | boolean> | undefined;
3977
+ };
3978
+ fallback: [number, number, number];
3979
+ } | [number, number, number], {
3980
+ kind: "feature";
3981
+ reference: {
3982
+ nodeId: string;
3983
+ featureId: string;
3984
+ parameters?: Record<string, string | number | boolean> | undefined;
3985
+ };
3986
+ fallback: [number, number, number];
3987
+ } | [number, number, number], {
3988
+ kind: "feature";
3989
+ reference: {
3990
+ nodeId: string;
3991
+ featureId: string;
3992
+ parameters?: Record<string, string | number | boolean> | undefined;
3993
+ };
3994
+ fallback: [number, number, number];
3995
+ } | [number, number, number]];
3996
+ } | {
3997
+ kind: "area";
3998
+ base: ({
3999
+ kind: "feature";
4000
+ reference: {
4001
+ nodeId: string;
4002
+ featureId: string;
4003
+ parameters?: Record<string, string | number | boolean> | undefined;
4004
+ };
4005
+ fallback: [number, number, number];
4006
+ } | [number, number, number])[];
4007
+ } | {
4008
+ kind: "perimeter";
4009
+ base: ({
4010
+ kind: "feature";
4011
+ reference: {
4012
+ nodeId: string;
4013
+ featureId: string;
4014
+ parameters?: Record<string, string | number | boolean> | undefined;
4015
+ };
4016
+ fallback: [number, number, number];
4017
+ } | [number, number, number])[];
4018
+ } | {
4019
+ kind: "volume";
4020
+ base: ({
4021
+ kind: "feature";
4022
+ reference: {
4023
+ nodeId: string;
4024
+ featureId: string;
4025
+ parameters?: Record<string, string | number | boolean> | undefined;
4026
+ };
4027
+ fallback: [number, number, number];
4028
+ } | [number, number, number])[];
4029
+ extrusion: [number, number, number];
4030
+ };
4031
+ type: "measurement";
4070
4032
  } | {
4071
4033
  object: "node";
4072
4034
  name?: string | undefined;
@@ -4091,12 +4053,11 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
4091
4053
  fromIds: string[];
4092
4054
  } | undefined;
4093
4055
  } | undefined;
4094
- id: `level_${string}`;
4095
- 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}`)[];
4096
- level: number;
4097
- baseElevation: number;
4098
- height?: number | undefined;
4099
- type: "level";
4056
+ id: `spawn_${string}`;
4057
+ position: [number, number, number];
4058
+ rotation: number;
4059
+ supportSlabId?: string | undefined;
4060
+ type: "spawn";
4100
4061
  } | {
4101
4062
  object: "node";
4102
4063
  name?: string | undefined;
@@ -4121,7 +4082,22 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
4121
4082
  fromIds: string[];
4122
4083
  } | undefined;
4123
4084
  } | undefined;
4124
- id: `elevator_${string}`;
4085
+ id: `shelf_${string}`;
4086
+ children: string[];
4087
+ position: [number, number, number];
4088
+ rotation: [number, number, number];
4089
+ supportSlabId?: string | undefined;
4090
+ width: number;
4091
+ depth: number;
4092
+ thickness: number;
4093
+ height: number;
4094
+ style: "bookshelf" | "cubby" | "open-rack" | "wall-shelf";
4095
+ rows: number;
4096
+ columns: number;
4097
+ withBack: boolean;
4098
+ withSides: boolean;
4099
+ withBottom: boolean;
4100
+ bracketStyle: "hidden" | "industrial" | "minimal";
4125
4101
  material?: {
4126
4102
  id?: string | undefined;
4127
4103
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
@@ -4146,31 +4122,10 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
4146
4122
  } | undefined;
4147
4123
  materialPreset?: string | undefined;
4148
4124
  slots?: Record<string, string> | undefined;
4149
- position: [number, number, number];
4150
- rotation: number;
4151
- width: number;
4152
- depth: number;
4153
- shaftWidth?: number | undefined;
4154
- shaftDepth?: number | undefined;
4155
- shaftWallThickness: number;
4156
- shaftStyle: "glass" | "solid";
4157
- cabHeight: number;
4158
- doorWidth: number;
4159
- doorHeight: number;
4160
- doorStyle: "center-opening" | "single-left" | "single-right";
4161
- doorPanelStyle: "glass-frame" | "segmented-panel" | "solid-panel";
4162
- fromLevelId: string | null;
4163
- toLevelId: string | null;
4164
- servedLevelIds?: string[] | undefined;
4165
- disabledLevelIds: string[];
4166
- serviceOnlyLevelIds: string[];
4167
- defaultLevelId: string | null;
4168
- speed: number;
4169
- doorDurationMs: number;
4170
- dwellMs: number;
4171
- type: "elevator";
4125
+ type: "shelf";
4172
4126
  } | {
4173
4127
  object: "node";
4128
+ name?: string | undefined;
4174
4129
  parentId: string | null;
4175
4130
  visible: boolean;
4176
4131
  camera?: {
@@ -4180,6 +4135,7 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
4180
4135
  fov?: number | undefined;
4181
4136
  zoom?: number | undefined;
4182
4137
  } | undefined;
4138
+ metadata: Record<string, unknown>;
4183
4139
  provenance?: {
4184
4140
  refs: {
4185
4141
  ns?: string | undefined;
@@ -4191,13 +4147,36 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
4191
4147
  fromIds: string[];
4192
4148
  } | undefined;
4193
4149
  } | undefined;
4194
- id: `unit_${string}`;
4195
- name: string;
4196
- kind: "apartment" | "commercial" | "common" | "hotel-room";
4197
- members: `zone_${string}`[];
4198
- color: string;
4199
- metadata: Record<string, unknown>;
4200
- type: "unit";
4150
+ id: `duct-segment_${string}`;
4151
+ path: [number, number, number][];
4152
+ autoHangers?: boolean | undefined;
4153
+ hangerOverrides?: Record<string, {
4154
+ fraction?: number | undefined;
4155
+ skipped?: boolean | undefined;
4156
+ hostId?: string | undefined;
4157
+ }> | undefined;
4158
+ hangerStyle?: "double" | "single" | undefined;
4159
+ hangerSpacing?: number | undefined;
4160
+ hangerMaxReach?: number | undefined;
4161
+ wallAttachment?: {
4162
+ wallId: `wall_${string}`;
4163
+ side: "back" | "front";
4164
+ startUV: [number, number];
4165
+ endUV: [number, number];
4166
+ offset: number;
4167
+ } | undefined;
4168
+ shape: "oval" | "rect" | "round";
4169
+ diameter: number;
4170
+ width: number;
4171
+ height: number;
4172
+ roll: number;
4173
+ ductMaterial: "duct-board" | "flex" | "sheet-metal" | "spiral";
4174
+ seamDetail: boolean;
4175
+ insulated: boolean;
4176
+ insulationR: number;
4177
+ system: "return" | "supply";
4178
+ slots?: Record<string, string> | undefined;
4179
+ type: "duct-segment";
4201
4180
  } | {
4202
4181
  object: "node";
4203
4182
  name?: string | undefined;
@@ -4222,12 +4201,19 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
4222
4201
  fromIds: string[];
4223
4202
  } | undefined;
4224
4203
  } | undefined;
4225
- id: `building_${string}`;
4226
- children: (`elevator_${string}` | `level_${string}` | `unit_${string}`)[];
4204
+ id: `duct-terminal_${string}`;
4227
4205
  position: [number, number, number];
4228
- rotation: [number, number, number];
4229
- groundLevelId?: `level_${string}` | undefined;
4230
- type: "building";
4206
+ rotation: number;
4207
+ supportSlabId?: string | undefined;
4208
+ terminalType: "diffuser" | "return-grille" | "supply-register";
4209
+ mount: "ceiling" | "floor" | "wall";
4210
+ width: number;
4211
+ depth: number;
4212
+ collarShape: "oval" | "rect" | "round";
4213
+ collarDiameter: number;
4214
+ collarWidth: number;
4215
+ collarHeight: number;
4216
+ type: "duct-terminal";
4231
4217
  } | {
4232
4218
  object: "node";
4233
4219
  name?: string | undefined;
@@ -4252,126 +4238,40 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
4252
4238
  fromIds: string[];
4253
4239
  } | undefined;
4254
4240
  } | undefined;
4255
- id: `dormer_${string}`;
4256
- material?: {
4257
- id?: string | undefined;
4258
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
4259
- properties?: {
4260
- color: string;
4261
- roughness: number;
4262
- metalness: number;
4263
- opacity: number;
4264
- transparent: boolean;
4265
- side: "back" | "double" | "front";
4266
- } | undefined;
4267
- texture?: {
4268
- url: string;
4269
- repeat?: [number, number] | undefined;
4270
- scale?: number | undefined;
4271
- offset?: [number, number] | undefined;
4272
- normalMap?: string | undefined;
4273
- normalScale?: number | undefined;
4274
- bumpMap?: string | undefined;
4275
- bumpScale?: number | undefined;
4276
- } | undefined;
4277
- } | undefined;
4278
- materialPreset?: string | undefined;
4279
- topMaterial?: {
4280
- id?: string | undefined;
4281
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
4282
- properties?: {
4283
- color: string;
4284
- roughness: number;
4285
- metalness: number;
4286
- opacity: number;
4287
- transparent: boolean;
4288
- side: "back" | "double" | "front";
4289
- } | undefined;
4290
- texture?: {
4291
- url: string;
4292
- repeat?: [number, number] | undefined;
4293
- scale?: number | undefined;
4294
- offset?: [number, number] | undefined;
4295
- normalMap?: string | undefined;
4296
- normalScale?: number | undefined;
4297
- bumpMap?: string | undefined;
4298
- bumpScale?: number | undefined;
4299
- } | undefined;
4300
- } | undefined;
4301
- topMaterialPreset?: string | undefined;
4302
- sideMaterial?: {
4303
- id?: string | undefined;
4304
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
4305
- properties?: {
4306
- color: string;
4307
- roughness: number;
4308
- metalness: number;
4309
- opacity: number;
4310
- transparent: boolean;
4311
- side: "back" | "double" | "front";
4312
- } | undefined;
4313
- texture?: {
4314
- url: string;
4315
- repeat?: [number, number] | undefined;
4316
- scale?: number | undefined;
4317
- offset?: [number, number] | undefined;
4318
- normalMap?: string | undefined;
4319
- normalScale?: number | undefined;
4320
- bumpMap?: string | undefined;
4321
- bumpScale?: number | undefined;
4322
- } | undefined;
4241
+ id: `lineset_${string}`;
4242
+ path: [number, number, number][];
4243
+ suctionDiameter: number;
4244
+ liquidDiameter: number;
4245
+ insulated: boolean;
4246
+ type: "lineset";
4247
+ } | {
4248
+ object: "node";
4249
+ name?: string | undefined;
4250
+ parentId: string | null;
4251
+ visible: boolean;
4252
+ camera?: {
4253
+ position: [number, number, number];
4254
+ target: [number, number, number];
4255
+ mode: "orthographic" | "perspective";
4256
+ fov?: number | undefined;
4257
+ zoom?: number | undefined;
4323
4258
  } | undefined;
4324
- sideMaterialPreset?: string | undefined;
4325
- wallMaterial?: {
4326
- id?: string | undefined;
4327
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
4328
- properties?: {
4329
- color: string;
4330
- roughness: number;
4331
- metalness: number;
4332
- opacity: number;
4333
- transparent: boolean;
4334
- side: "back" | "double" | "front";
4335
- } | undefined;
4336
- texture?: {
4337
- url: string;
4338
- repeat?: [number, number] | undefined;
4339
- scale?: number | undefined;
4340
- offset?: [number, number] | undefined;
4341
- normalMap?: string | undefined;
4342
- normalScale?: number | undefined;
4343
- bumpMap?: string | undefined;
4344
- bumpScale?: number | undefined;
4259
+ metadata: Record<string, unknown>;
4260
+ provenance?: {
4261
+ refs: {
4262
+ ns?: string | undefined;
4263
+ id: string;
4264
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
4265
+ }[];
4266
+ lineage?: {
4267
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
4268
+ fromIds: string[];
4345
4269
  } | undefined;
4346
4270
  } | undefined;
4347
- wallMaterialPreset?: string | undefined;
4348
- roofSegmentId?: string | undefined;
4349
- position: [number, number, number];
4350
- rotation: number;
4351
- width: number;
4352
- depth: number;
4353
- height: number;
4354
- roofType: "barrel" | "conical" | "dutch" | "flat" | "gable" | "gambrel" | "hip" | "mansard" | "shed";
4355
- roofHeight: number;
4356
- shedHighSide: "back" | "front";
4357
- wallSkirtHeight: number;
4358
- windowWidth: number;
4359
- windowHeight: number;
4360
- windowOffsetX: number;
4361
- windowOffsetY: number;
4362
- windowFrameThickness: number;
4363
- windowFrameDepth: number;
4364
- windowColumns: number;
4365
- windowRows: number;
4366
- windowDividerThickness: number;
4367
- windowShape: "arch" | "rectangle" | "rounded";
4368
- windowArchHeight: number;
4369
- windowCornerRadii: [number, number, number, number];
4370
- windowSill: boolean;
4371
- windowSillDepth: number;
4372
- windowSillThickness: number;
4373
- children: `window_${string}`[];
4374
- type: "dormer";
4271
+ id: `liquid-line_${string}`;
4272
+ path: [number, number, number][];
4273
+ diameter: number;
4274
+ type: "liquid-line";
4375
4275
  } | {
4376
4276
  object: "node";
4377
4277
  name?: string | undefined;
@@ -4396,77 +4296,59 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
4396
4296
  fromIds: string[];
4397
4297
  } | undefined;
4398
4298
  } | undefined;
4399
- id: `skylight_${string}`;
4400
- material?: {
4401
- id?: string | undefined;
4402
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
4403
- properties?: {
4404
- color: string;
4405
- roughness: number;
4406
- metalness: number;
4407
- opacity: number;
4408
- transparent: boolean;
4409
- side: "back" | "double" | "front";
4410
- } | undefined;
4411
- texture?: {
4412
- url: string;
4413
- repeat?: [number, number] | undefined;
4414
- scale?: number | undefined;
4415
- offset?: [number, number] | undefined;
4416
- normalMap?: string | undefined;
4417
- normalScale?: number | undefined;
4418
- bumpMap?: string | undefined;
4419
- bumpScale?: number | undefined;
4420
- } | undefined;
4299
+ id: `pipe-segment_${string}`;
4300
+ path: [number, number, number][];
4301
+ autoHangers?: boolean | undefined;
4302
+ hangerOverrides?: Record<string, {
4303
+ fraction?: number | undefined;
4304
+ skipped?: boolean | undefined;
4305
+ hostId?: string | undefined;
4306
+ }> | undefined;
4307
+ hangerStyle?: "double" | "single" | undefined;
4308
+ hangerSpacing?: number | undefined;
4309
+ hangerMaxReach?: number | undefined;
4310
+ wallAttachment?: {
4311
+ wallId: `wall_${string}`;
4312
+ side: "back" | "front";
4313
+ startUV: [number, number];
4314
+ endUV: [number, number];
4315
+ offset: number;
4421
4316
  } | undefined;
4422
- materialPreset?: string | undefined;
4423
- glassMaterial?: {
4424
- id?: string | undefined;
4425
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
4426
- properties?: {
4427
- color: string;
4428
- roughness: number;
4429
- metalness: number;
4430
- opacity: number;
4431
- transparent: boolean;
4432
- side: "back" | "double" | "front";
4433
- } | undefined;
4434
- texture?: {
4435
- url: string;
4436
- repeat?: [number, number] | undefined;
4437
- scale?: number | undefined;
4438
- offset?: [number, number] | undefined;
4439
- normalMap?: string | undefined;
4440
- normalScale?: number | undefined;
4441
- bumpMap?: string | undefined;
4442
- bumpScale?: number | undefined;
4317
+ diameter: number;
4318
+ pipeMaterial: "abs" | "cast-iron" | "pvc";
4319
+ system: "vent" | "waste";
4320
+ type: "pipe-segment";
4321
+ } | {
4322
+ object: "node";
4323
+ name?: string | undefined;
4324
+ parentId: string | null;
4325
+ visible: boolean;
4326
+ camera?: {
4327
+ position: [number, number, number];
4328
+ target: [number, number, number];
4329
+ mode: "orthographic" | "perspective";
4330
+ fov?: number | undefined;
4331
+ zoom?: number | undefined;
4332
+ } | undefined;
4333
+ metadata: Record<string, unknown>;
4334
+ provenance?: {
4335
+ refs: {
4336
+ ns?: string | undefined;
4337
+ id: string;
4338
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
4339
+ }[];
4340
+ lineage?: {
4341
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
4342
+ fromIds: string[];
4443
4343
  } | undefined;
4444
4344
  } | undefined;
4445
- glassMaterialPreset?: string | undefined;
4446
- roofSegmentId?: string | undefined;
4345
+ id: `pipe-trap_${string}`;
4447
4346
  position: [number, number, number];
4448
4347
  rotation: number;
4449
- width: number;
4450
- height: number;
4451
- frameThickness: number;
4452
- frameDepth: number;
4453
- skylightType: "flat" | "lantern" | "opening" | "sliding" | "walk-on";
4454
- glassThickness: number;
4455
- lanternHeight: number;
4456
- lanternTopScale: number;
4457
- openingAngle: number;
4458
- openingSide: "bottom" | "left" | "right" | "top";
4459
- operationState: number;
4460
- motorHousing: boolean;
4461
- slideFraction: number;
4462
- slideDirection: "x" | "z";
4463
- trackWidth: number;
4464
- motorHousingSize: number;
4465
- curb: boolean;
4466
- curbHeight: number;
4467
- cutoutOffset: number;
4468
- surfaceNormal?: [number, number, number] | undefined;
4469
- type: "skylight";
4348
+ diameter: number;
4349
+ pipeMaterial: "abs" | "cast-iron" | "pvc";
4350
+ armLengthM: number;
4351
+ type: "pipe-trap";
4470
4352
  } | {
4471
4353
  object: "node";
4472
4354
  name?: string | undefined;
@@ -4491,198 +4373,143 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
4491
4373
  fromIds: string[];
4492
4374
  } | undefined;
4493
4375
  } | undefined;
4494
- id: `site_${string}`;
4495
- polygon: {
4496
- type: "polygon";
4497
- points: [number, number][];
4498
- };
4499
- terrain?: {
4500
- type: "heightfield";
4501
- origin: [number, number];
4502
- spacing: number;
4503
- cols: number;
4504
- rows: number;
4505
- step: number;
4506
- heights: string;
4376
+ id: `level_${string}`;
4377
+ children: (`beam_${string}` | `block_${string}` | `ceiling_${string}` | `column_${string}` | `construction-dimension_${string}` | `duct-fitting_${string}` | `duct-segment_${string}` | `duct-terminal_${string}` | `fence_${string}` | `floor-opening_${string}` | `guide_${string}` | `hvac-equipment_${string}` | `imesh_${string}` | `item_${string}` | `lineset_${string}` | `liquid-line_${string}` | `measurement_${string}` | `pipe-fitting_${string}` | `pipe-segment_${string}` | `pipe-trap_${string}` | `procedural-item_${string}` | `roof_${string}` | `scan_${string}` | `separator_${string}` | `shelf_${string}` | `slab_${string}` | `spawn_${string}` | `stair_${string}` | `structural-grid_${string}` | `wall_${string}` | `zone_${string}`)[];
4378
+ level: number;
4379
+ baseElevation: number;
4380
+ height?: number | undefined;
4381
+ type: "level";
4382
+ } | {
4383
+ object: "node";
4384
+ name?: string | undefined;
4385
+ parentId: string | null;
4386
+ visible: boolean;
4387
+ camera?: {
4388
+ position: [number, number, number];
4389
+ target: [number, number, number];
4390
+ mode: "orthographic" | "perspective";
4391
+ fov?: number | undefined;
4392
+ zoom?: number | undefined;
4507
4393
  } | undefined;
4508
- showGround?: boolean | undefined;
4509
- presentation?: {
4510
- theme?: string | undefined;
4511
- exposure?: number | undefined;
4512
- shading?: "rendered" | "solid" | undefined;
4513
- edges?: "off" | "soft" | "strong" | undefined;
4514
- shadows?: boolean | undefined;
4515
- lighting?: {
4516
- background?: string | undefined;
4517
- backgroundSky?: string | null | undefined;
4518
- ground?: string | undefined;
4519
- ambient?: {
4520
- color: string;
4521
- intensity: number;
4522
- } | undefined;
4523
- hemi?: {
4524
- sky: string;
4525
- ground: string;
4526
- intensity: number;
4527
- } | undefined;
4528
- lights?: {
4529
- color: string;
4530
- intensity: number;
4531
- position: [number, number, number];
4532
- target?: [number, number, number] | undefined;
4533
- castShadow?: boolean | undefined;
4534
- shadow?: {
4535
- intensity?: number | undefined;
4536
- bias?: number | undefined;
4537
- normalBias?: number | undefined;
4538
- radius?: number | undefined;
4539
- mapSize?: 512 | 1024 | 2048 | 4096 | undefined;
4540
- camera?: {
4541
- left: number;
4542
- right: number;
4543
- top: number;
4544
- bottom: number;
4545
- near: number;
4546
- far: number;
4547
- } | undefined;
4548
- } | undefined;
4549
- }[] | undefined;
4550
- environment?: {
4551
- source: "gradient" | "none" | "room";
4552
- intensity: number;
4553
- } | undefined;
4554
- } | undefined;
4555
- postprocessing?: {
4556
- ambientOcclusion?: boolean | undefined;
4557
- colorGrading?: boolean | undefined;
4558
- } | undefined;
4559
- display?: {
4560
- mode?: "construction" | "finished" | "systems" | undefined;
4561
- families?: Partial<Record<"device" | "exposed-structure" | "fill" | "finish" | "foundation" | "framing" | "inspection" | "insulation" | "masonry" | "membrane" | "run" | "service-space" | "sheathing", boolean>> | undefined;
4562
- disciplines?: Partial<Record<"electrical" | "fire" | "low-voltage" | "mechanical" | "plumbing", boolean>> | undefined;
4563
- xray?: boolean | undefined;
4564
- colorBy?: "material" | "service" | undefined;
4394
+ metadata: Record<string, unknown>;
4395
+ provenance?: {
4396
+ refs: {
4397
+ ns?: string | undefined;
4398
+ id: string;
4399
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
4400
+ }[];
4401
+ lineage?: {
4402
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
4403
+ fromIds: string[];
4565
4404
  } | undefined;
4566
4405
  } | undefined;
4567
- address?: {
4568
- street?: string | undefined;
4569
- city?: string | undefined;
4570
- state?: string | undefined;
4571
- zip?: string | undefined;
4572
- } | undefined;
4573
- parcel?: {
4574
- apn?: string | undefined;
4575
- source?: string | undefined;
4576
- county?: string | undefined;
4577
- state?: string | undefined;
4578
- lotAreaSqFt?: number | undefined;
4579
- originLngLat?: [number, number] | undefined;
4580
- resolvedAt?: string | undefined;
4581
- layer?: string | undefined;
4582
- notes?: string[] | undefined;
4583
- } | undefined;
4584
- setbacks?: {
4585
- front: number;
4586
- side: number;
4587
- rear: number;
4588
- left?: number | undefined;
4589
- right?: number | undefined;
4590
- streetSide?: number | undefined;
4591
- } | undefined;
4592
- setbacksSource?: string | undefined;
4593
- zone?: string | undefined;
4594
- frontEdge?: number | undefined;
4595
- streetEdges?: number[] | undefined;
4596
- sightTriangleFt?: number | undefined;
4597
- northRotation?: number | undefined;
4598
- dossier?: {
4599
- [x: string]: unknown;
4600
- provider: string;
4601
- asOf: string;
4602
- point?: {
4603
- lat?: number | undefined;
4604
- lng?: number | undefined;
4605
- source?: string | undefined;
4406
+ id: `elevator_${string}`;
4407
+ material?: {
4408
+ id?: string | undefined;
4409
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
4410
+ properties?: {
4411
+ color: string;
4412
+ roughness: number;
4413
+ metalness: number;
4414
+ opacity: number;
4415
+ transparent: boolean;
4416
+ side: "back" | "double" | "front";
4606
4417
  } | undefined;
4607
- address?: {
4608
- formatted?: string | undefined;
4609
- precision?: string | undefined;
4418
+ texture?: {
4419
+ url: string;
4420
+ repeat?: [number, number] | undefined;
4421
+ scale?: number | undefined;
4422
+ offset?: [number, number] | undefined;
4423
+ normalMap?: string | undefined;
4424
+ normalScale?: number | undefined;
4425
+ bumpMap?: string | undefined;
4426
+ bumpScale?: number | undefined;
4610
4427
  } | undefined;
4611
- sections: Record<string, {
4612
- [x: string]: unknown;
4613
- status: string;
4614
- summary?: string | undefined;
4615
- reason?: string | undefined;
4616
- source?: {
4617
- name?: string | undefined;
4618
- kind?: string | undefined;
4619
- vintage?: string | undefined;
4620
- attribution?: string | undefined;
4621
- } | undefined;
4622
- }>;
4623
- parcel?: Record<string, unknown> | undefined;
4624
- flood?: Record<string, unknown> | undefined;
4625
- codeBasis?: Record<string, unknown> | undefined;
4626
- zoning?: Record<string, unknown> | undefined;
4627
- utilities?: Record<string, unknown> | undefined;
4628
- soils?: Record<string, unknown> | undefined;
4629
- wetlands?: Record<string, unknown> | undefined;
4630
- structures?: Record<string, unknown> | undefined;
4631
- elevation?: Record<string, unknown> | undefined;
4632
- boundaries?: Record<string, unknown> | undefined;
4633
4428
  } | undefined;
4634
- contourIntervalIn?: number | undefined;
4635
- contours3d?: boolean | undefined;
4636
- terrainContours?: {
4637
- datum: string;
4638
- intervalFt: number;
4639
- source?: string | undefined;
4640
- lines: {
4641
- elevationFt: number;
4642
- points: [number, number][];
4429
+ materialPreset?: string | undefined;
4430
+ slots?: Record<string, string> | undefined;
4431
+ position: [number, number, number];
4432
+ rotation: number;
4433
+ width: number;
4434
+ depth: number;
4435
+ shaftWidth?: number | undefined;
4436
+ shaftDepth?: number | undefined;
4437
+ shaftWallThickness: number;
4438
+ shaftStyle: "glass" | "solid";
4439
+ cabHeight: number;
4440
+ doorWidth: number;
4441
+ doorHeight: number;
4442
+ doorStyle: "center-opening" | "single-left" | "single-right";
4443
+ doorPanelStyle: "glass-frame" | "segmented-panel" | "solid-panel";
4444
+ fromLevelId: string | null;
4445
+ toLevelId: string | null;
4446
+ servedLevelIds?: string[] | undefined;
4447
+ disabledLevelIds: string[];
4448
+ serviceOnlyLevelIds: string[];
4449
+ defaultLevelId: string | null;
4450
+ speed: number;
4451
+ doorDurationMs: number;
4452
+ dwellMs: number;
4453
+ type: "elevator";
4454
+ } | {
4455
+ object: "node";
4456
+ parentId: string | null;
4457
+ visible: boolean;
4458
+ camera?: {
4459
+ position: [number, number, number];
4460
+ target: [number, number, number];
4461
+ mode: "orthographic" | "perspective";
4462
+ fov?: number | undefined;
4463
+ zoom?: number | undefined;
4464
+ } | undefined;
4465
+ provenance?: {
4466
+ refs: {
4467
+ ns?: string | undefined;
4468
+ id: string;
4469
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
4643
4470
  }[];
4471
+ lineage?: {
4472
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
4473
+ fromIds: string[];
4474
+ } | undefined;
4644
4475
  } | undefined;
4645
- wallTypes?: {
4646
- id: string;
4647
- label: string;
4648
- assembly: {
4649
- layers: {
4650
- id: string;
4651
- role: "air" | "covering" | "deck" | "fill" | "finish" | "furring" | "glazing" | "insulation" | "lining" | "membrane" | "sheathing" | "shell" | "structure" | "substrate" | "underlay";
4652
- thickness: number;
4653
- core?: true | undefined;
4654
- spacing?: number | undefined;
4655
- material?: string | undefined;
4656
- slot?: string | undefined;
4657
- returns?: boolean | undefined;
4658
- display?: "construction" | "finished" | undefined;
4659
- inset?: number | undefined;
4660
- bottom?: number | undefined;
4661
- lift?: number | undefined;
4662
- src?: string | undefined;
4663
- }[];
4664
- backing?: {
4665
- id: string;
4666
- role: "air" | "covering" | "deck" | "fill" | "finish" | "furring" | "glazing" | "insulation" | "lining" | "membrane" | "sheathing" | "shell" | "structure" | "substrate" | "underlay";
4667
- thickness: number;
4668
- core?: true | undefined;
4669
- spacing?: number | undefined;
4670
- material?: string | undefined;
4671
- slot?: string | undefined;
4672
- returns?: boolean | undefined;
4673
- display?: "construction" | "finished" | undefined;
4674
- inset?: number | undefined;
4675
- bottom?: number | undefined;
4676
- lift?: number | undefined;
4677
- src?: string | undefined;
4678
- }[] | undefined;
4679
- face?: "exterior" | "front" | undefined;
4680
- presetId?: string | undefined;
4681
- cavityInsulation?: string | undefined;
4682
- };
4683
- }[] | undefined;
4684
- children: string[];
4685
- type: "site";
4476
+ id: `unit_${string}`;
4477
+ name: string;
4478
+ kind: "apartment" | "commercial" | "common" | "hotel-room";
4479
+ members: `zone_${string}`[];
4480
+ color: string;
4481
+ metadata: Record<string, unknown>;
4482
+ type: "unit";
4483
+ } | {
4484
+ object: "node";
4485
+ name?: string | undefined;
4486
+ parentId: string | null;
4487
+ visible: boolean;
4488
+ camera?: {
4489
+ position: [number, number, number];
4490
+ target: [number, number, number];
4491
+ mode: "orthographic" | "perspective";
4492
+ fov?: number | undefined;
4493
+ zoom?: number | undefined;
4494
+ } | undefined;
4495
+ metadata: Record<string, unknown>;
4496
+ provenance?: {
4497
+ refs: {
4498
+ ns?: string | undefined;
4499
+ id: string;
4500
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
4501
+ }[];
4502
+ lineage?: {
4503
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
4504
+ fromIds: string[];
4505
+ } | undefined;
4506
+ } | undefined;
4507
+ id: `building_${string}`;
4508
+ children: (`elevator_${string}` | `level_${string}` | `unit_${string}`)[];
4509
+ position: [number, number, number];
4510
+ rotation: [number, number, number];
4511
+ groundLevelId?: `level_${string}` | undefined;
4512
+ type: "building";
4686
4513
  } | {
4687
4514
  object: "node";
4688
4515
  name?: string | undefined;
@@ -5072,88 +4899,23 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
5072
4899
  type: "fridge-bottom-freezer";
5073
4900
  } | {
5074
4901
  id: string;
5075
- height?: number | undefined;
5076
- type: "hood-pyramid";
5077
- } | {
5078
- id: string;
5079
- height?: number | undefined;
5080
- type: "hood-curved-glass";
5081
- })[] | undefined;
5082
- id: `cabinet-module_${string}`;
5083
- children: string[];
5084
- cabinetType: "base" | "tall";
5085
- moduleKind: "corner-filler" | "standard" | "wall-filler";
5086
- openSide?: "left" | "right" | undefined;
5087
- cornerShelf?: boolean | undefined;
5088
- topFinish: "none" | "top-cabinet" | "trim";
5089
- topFinishHeight: number;
5090
- topFinishDepth: number;
5091
- type: "cabinet-module";
5092
- } | {
5093
- object: "node";
5094
- name?: string | undefined;
5095
- parentId: string | null;
5096
- visible: boolean;
5097
- camera?: {
5098
- position: [number, number, number];
5099
- target: [number, number, number];
5100
- mode: "orthographic" | "perspective";
5101
- fov?: number | undefined;
5102
- zoom?: number | undefined;
5103
- } | undefined;
5104
- metadata: Record<string, unknown>;
5105
- provenance?: {
5106
- refs: {
5107
- ns?: string | undefined;
5108
- id: string;
5109
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
5110
- }[];
5111
- lineage?: {
5112
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
5113
- fromIds: string[];
5114
- } | undefined;
5115
- } | undefined;
5116
- id: `bvent_${string}`;
5117
- material?: {
5118
- id?: string | undefined;
5119
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
5120
- properties?: {
5121
- color: string;
5122
- roughness: number;
5123
- metalness: number;
5124
- opacity: number;
5125
- transparent: boolean;
5126
- side: "back" | "double" | "front";
5127
- } | undefined;
5128
- texture?: {
5129
- url: string;
5130
- repeat?: [number, number] | undefined;
5131
- scale?: number | undefined;
5132
- offset?: [number, number] | undefined;
5133
- normalMap?: string | undefined;
5134
- normalScale?: number | undefined;
5135
- bumpMap?: string | undefined;
5136
- bumpScale?: number | undefined;
5137
- } | undefined;
5138
- } | undefined;
5139
- slots?: Record<string, string> | undefined;
5140
- materialPreset: string;
5141
- roofSegmentId?: string | undefined;
5142
- position: [number, number, number];
5143
- rotation: number;
5144
- width: number;
5145
- depth: number;
5146
- height: number;
5147
- hoodOverhang: number;
5148
- topTaper: number;
5149
- capHeight: number;
5150
- capGap: number;
5151
- domeCurvature: number;
5152
- baseInset: number;
5153
- baseHeight: number;
5154
- cornerBevel: number;
5155
- style: "box" | "cap" | "dome";
5156
- type: "box-vent";
4902
+ height?: number | undefined;
4903
+ type: "hood-pyramid";
4904
+ } | {
4905
+ id: string;
4906
+ height?: number | undefined;
4907
+ type: "hood-curved-glass";
4908
+ })[] | undefined;
4909
+ id: `cabinet-module_${string}`;
4910
+ children: string[];
4911
+ cabinetType: "base" | "tall";
4912
+ moduleKind: "corner-filler" | "standard" | "wall-filler";
4913
+ openSide?: "left" | "right" | undefined;
4914
+ cornerShelf?: boolean | undefined;
4915
+ topFinish: "none" | "top-cabinet" | "trim";
4916
+ topFinishHeight: number;
4917
+ topFinishDepth: number;
4918
+ type: "cabinet-module";
5157
4919
  } | {
5158
4920
  object: "node";
5159
4921
  name?: string | undefined;
@@ -5657,6 +5419,245 @@ export declare function associateLegacyManualFloors(source: Record<string, AnyNo
5657
5419
  frameDepth: number;
5658
5420
  surfaceNormal?: [number, number, number] | undefined;
5659
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
+ } | {
5518
+ object: "node";
5519
+ name?: string | undefined;
5520
+ parentId: string | null;
5521
+ visible: boolean;
5522
+ camera?: {
5523
+ position: [number, number, number];
5524
+ target: [number, number, number];
5525
+ mode: "orthographic" | "perspective";
5526
+ fov?: number | undefined;
5527
+ zoom?: number | undefined;
5528
+ } | undefined;
5529
+ metadata: Record<string, unknown>;
5530
+ provenance?: {
5531
+ refs: {
5532
+ ns?: string | undefined;
5533
+ id: string;
5534
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
5535
+ }[];
5536
+ lineage?: {
5537
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
5538
+ fromIds: string[];
5539
+ } | undefined;
5540
+ } | undefined;
5541
+ id: `dormer_${string}`;
5542
+ material?: {
5543
+ id?: string | undefined;
5544
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
5545
+ properties?: {
5546
+ color: string;
5547
+ roughness: number;
5548
+ metalness: number;
5549
+ opacity: number;
5550
+ transparent: boolean;
5551
+ side: "back" | "double" | "front";
5552
+ } | undefined;
5553
+ texture?: {
5554
+ url: string;
5555
+ repeat?: [number, number] | undefined;
5556
+ scale?: number | undefined;
5557
+ offset?: [number, number] | undefined;
5558
+ normalMap?: string | undefined;
5559
+ normalScale?: number | undefined;
5560
+ bumpMap?: string | undefined;
5561
+ bumpScale?: number | undefined;
5562
+ } | undefined;
5563
+ } | undefined;
5564
+ materialPreset?: string | undefined;
5565
+ topMaterial?: {
5566
+ id?: string | undefined;
5567
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
5568
+ properties?: {
5569
+ color: string;
5570
+ roughness: number;
5571
+ metalness: number;
5572
+ opacity: number;
5573
+ transparent: boolean;
5574
+ side: "back" | "double" | "front";
5575
+ } | undefined;
5576
+ texture?: {
5577
+ url: string;
5578
+ repeat?: [number, number] | undefined;
5579
+ scale?: number | undefined;
5580
+ offset?: [number, number] | undefined;
5581
+ normalMap?: string | undefined;
5582
+ normalScale?: number | undefined;
5583
+ bumpMap?: string | undefined;
5584
+ bumpScale?: number | undefined;
5585
+ } | undefined;
5586
+ } | undefined;
5587
+ topMaterialPreset?: string | undefined;
5588
+ sideMaterial?: {
5589
+ id?: string | undefined;
5590
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
5591
+ properties?: {
5592
+ color: string;
5593
+ roughness: number;
5594
+ metalness: number;
5595
+ opacity: number;
5596
+ transparent: boolean;
5597
+ side: "back" | "double" | "front";
5598
+ } | undefined;
5599
+ texture?: {
5600
+ url: string;
5601
+ repeat?: [number, number] | undefined;
5602
+ scale?: number | undefined;
5603
+ offset?: [number, number] | undefined;
5604
+ normalMap?: string | undefined;
5605
+ normalScale?: number | undefined;
5606
+ bumpMap?: string | undefined;
5607
+ bumpScale?: number | undefined;
5608
+ } | undefined;
5609
+ } | undefined;
5610
+ sideMaterialPreset?: string | undefined;
5611
+ wallMaterial?: {
5612
+ id?: string | undefined;
5613
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
5614
+ properties?: {
5615
+ color: string;
5616
+ roughness: number;
5617
+ metalness: number;
5618
+ opacity: number;
5619
+ transparent: boolean;
5620
+ side: "back" | "double" | "front";
5621
+ } | undefined;
5622
+ texture?: {
5623
+ url: string;
5624
+ repeat?: [number, number] | undefined;
5625
+ scale?: number | undefined;
5626
+ offset?: [number, number] | undefined;
5627
+ normalMap?: string | undefined;
5628
+ normalScale?: number | undefined;
5629
+ bumpMap?: string | undefined;
5630
+ bumpScale?: number | undefined;
5631
+ } | undefined;
5632
+ } | undefined;
5633
+ wallMaterialPreset?: string | undefined;
5634
+ roofSegmentId?: string | undefined;
5635
+ position: [number, number, number];
5636
+ rotation: number;
5637
+ width: number;
5638
+ depth: number;
5639
+ height: number;
5640
+ roofType: "barrel" | "conical" | "dutch" | "flat" | "gable" | "gambrel" | "hip" | "mansard" | "shed";
5641
+ roofHeight: number;
5642
+ shedHighSide: "back" | "front";
5643
+ wallSkirtHeight: number;
5644
+ windowWidth: number;
5645
+ windowHeight: number;
5646
+ windowOffsetX: number;
5647
+ windowOffsetY: number;
5648
+ windowFrameThickness: number;
5649
+ windowFrameDepth: number;
5650
+ windowColumns: number;
5651
+ windowRows: number;
5652
+ windowDividerThickness: number;
5653
+ windowShape: "arch" | "rectangle" | "rounded";
5654
+ windowArchHeight: number;
5655
+ windowCornerRadii: [number, number, number, number];
5656
+ windowSill: boolean;
5657
+ windowSillDepth: number;
5658
+ windowSillThickness: number;
5659
+ children: `window_${string}`[];
5660
+ type: "dormer";
5660
5661
  } | {
5661
5662
  object: "node";
5662
5663
  name?: string | undefined;