@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
@@ -103,215 +103,54 @@ export declare function floorsOf(nodes: SceneNodes): {
103
103
  fromIds: string[];
104
104
  } | undefined;
105
105
  } | undefined;
106
- id: `beam_${string}`;
107
- start: [number, number];
108
- end: [number, number];
109
- width: number;
110
- depth: number;
111
- size?: string | undefined;
112
- plies: number;
113
- material: "glulam" | "lvl" | "pressure-treated" | "sawn" | "steel";
114
- placement: "dropped" | "flush";
115
- topElevation?: number | undefined;
116
- supportSlabId?: string | undefined;
117
- type: "beam";
118
- } | {
119
- object: "node";
120
- name?: string | undefined;
121
- parentId: string | null;
122
- visible: boolean;
123
- camera?: {
124
- position: [number, number, number];
125
- target: [number, number, number];
126
- mode: "orthographic" | "perspective";
127
- fov?: number | undefined;
128
- zoom?: number | undefined;
129
- } | undefined;
130
- metadata: Record<string, unknown>;
131
- provenance?: {
132
- refs: {
133
- ns?: string | undefined;
134
- id: string;
135
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
136
- }[];
137
- lineage?: {
138
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
139
- fromIds: string[];
106
+ id: `elevator_${string}`;
107
+ material?: {
108
+ id?: string | undefined;
109
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
110
+ properties?: {
111
+ color: string;
112
+ roughness: number;
113
+ metalness: number;
114
+ opacity: number;
115
+ transparent: boolean;
116
+ side: "back" | "double" | "front";
140
117
  } | undefined;
141
- } | undefined;
142
- id: `measurement_${string}`;
143
- measurement: {
144
- kind: "volume";
145
- base: ({
146
- kind: "feature";
147
- reference: {
148
- nodeId: string;
149
- featureId: string;
150
- parameters?: Record<string, string | number | boolean> | undefined;
151
- };
152
- fallback: [number, number, number];
153
- } | [number, number, number])[];
154
- extrusion: [number, number, number];
155
- } | {
156
- kind: "distance";
157
- points: [{
158
- kind: "feature";
159
- reference: {
160
- nodeId: string;
161
- featureId: string;
162
- parameters?: Record<string, string | number | boolean> | undefined;
163
- };
164
- fallback: [number, number, number];
165
- } | [number, number, number], {
166
- kind: "feature";
167
- reference: {
168
- nodeId: string;
169
- featureId: string;
170
- parameters?: Record<string, string | number | boolean> | undefined;
171
- };
172
- fallback: [number, number, number];
173
- } | [number, number, number]];
174
- } | {
175
- kind: "angle";
176
- points: [{
177
- kind: "feature";
178
- reference: {
179
- nodeId: string;
180
- featureId: string;
181
- parameters?: Record<string, string | number | boolean> | undefined;
182
- };
183
- fallback: [number, number, number];
184
- } | [number, number, number], {
185
- kind: "feature";
186
- reference: {
187
- nodeId: string;
188
- featureId: string;
189
- parameters?: Record<string, string | number | boolean> | undefined;
190
- };
191
- fallback: [number, number, number];
192
- } | [number, number, number], {
193
- kind: "feature";
194
- reference: {
195
- nodeId: string;
196
- featureId: string;
197
- parameters?: Record<string, string | number | boolean> | undefined;
198
- };
199
- fallback: [number, number, number];
200
- } | [number, number, number]];
201
- } | {
202
- kind: "area";
203
- base: ({
204
- kind: "feature";
205
- reference: {
206
- nodeId: string;
207
- featureId: string;
208
- parameters?: Record<string, string | number | boolean> | undefined;
209
- };
210
- fallback: [number, number, number];
211
- } | [number, number, number])[];
212
- } | {
213
- kind: "perimeter";
214
- base: ({
215
- kind: "feature";
216
- reference: {
217
- nodeId: string;
218
- featureId: string;
219
- parameters?: Record<string, string | number | boolean> | undefined;
220
- };
221
- fallback: [number, number, number];
222
- } | [number, number, number])[];
223
- };
224
- type: "measurement";
225
- } | {
226
- object: "node";
227
- name?: string | undefined;
228
- parentId: string | null;
229
- visible: boolean;
230
- camera?: {
231
- position: [number, number, number];
232
- target: [number, number, number];
233
- mode: "orthographic" | "perspective";
234
- fov?: number | undefined;
235
- zoom?: number | undefined;
236
- } | undefined;
237
- metadata: Record<string, unknown>;
238
- provenance?: {
239
- refs: {
240
- ns?: string | undefined;
241
- id: string;
242
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
243
- }[];
244
- lineage?: {
245
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
246
- fromIds: string[];
118
+ texture?: {
119
+ url: string;
120
+ repeat?: [number, number] | undefined;
121
+ scale?: number | undefined;
122
+ offset?: [number, number] | undefined;
123
+ normalMap?: string | undefined;
124
+ normalScale?: number | undefined;
125
+ bumpMap?: string | undefined;
126
+ bumpScale?: number | undefined;
247
127
  } | undefined;
248
128
  } | undefined;
249
- id: `duct-segment_${string}`;
250
- path: [number, number, number][];
251
- autoHangers?: boolean | undefined;
252
- hangerOverrides?: Record<string, {
253
- fraction?: number | undefined;
254
- skipped?: boolean | undefined;
255
- hostId?: string | undefined;
256
- }> | undefined;
257
- hangerStyle?: "double" | "single" | undefined;
258
- hangerSpacing?: number | undefined;
259
- hangerMaxReach?: number | undefined;
260
- wallAttachment?: {
261
- wallId: `wall_${string}`;
262
- side: "back" | "front";
263
- startUV: [number, number];
264
- endUV: [number, number];
265
- offset: number;
266
- } | undefined;
267
- shape: "oval" | "rect" | "round";
268
- diameter: number;
269
- width: number;
270
- height: number;
271
- roll: number;
272
- ductMaterial: "duct-board" | "flex" | "sheet-metal" | "spiral";
273
- seamDetail: boolean;
274
- insulated: boolean;
275
- insulationR: number;
276
- system: "return" | "supply";
129
+ materialPreset?: string | undefined;
277
130
  slots?: Record<string, string> | undefined;
278
- type: "duct-segment";
279
- } | {
280
- object: "node";
281
- name?: string | undefined;
282
- parentId: string | null;
283
- visible: boolean;
284
- camera?: {
285
- position: [number, number, number];
286
- target: [number, number, number];
287
- mode: "orthographic" | "perspective";
288
- fov?: number | undefined;
289
- zoom?: number | undefined;
290
- } | undefined;
291
- metadata: Record<string, unknown>;
292
- provenance?: {
293
- refs: {
294
- ns?: string | undefined;
295
- id: string;
296
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
297
- }[];
298
- lineage?: {
299
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
300
- fromIds: string[];
301
- } | undefined;
302
- } | undefined;
303
- id: `floor-opening_${string}`;
304
- polygon: [number, number][];
305
- hostZoneId?: string | undefined;
306
- legacyPlateCuts?: Record<string, [number, number][][]> | undefined;
307
- legacyCeilingCuts?: Record<string, [number, number][][]> | undefined;
308
- source: string;
309
- ownerId?: string | undefined;
310
- surfaceId?: string | undefined;
311
- drawnOn: "ceiling" | "floor";
312
- cutsPrimary: boolean;
313
- cutsAdjacent: boolean;
314
- type: "floor-opening";
131
+ position: [number, number, number];
132
+ rotation: number;
133
+ width: number;
134
+ depth: number;
135
+ shaftWidth?: number | undefined;
136
+ shaftDepth?: number | undefined;
137
+ shaftWallThickness: number;
138
+ shaftStyle: "glass" | "solid";
139
+ cabHeight: number;
140
+ doorWidth: number;
141
+ doorHeight: number;
142
+ doorStyle: "center-opening" | "single-left" | "single-right";
143
+ doorPanelStyle: "glass-frame" | "segmented-panel" | "solid-panel";
144
+ fromLevelId: string | null;
145
+ toLevelId: string | null;
146
+ servedLevelIds?: string[] | undefined;
147
+ disabledLevelIds: string[];
148
+ serviceOnlyLevelIds: string[];
149
+ defaultLevelId: string | null;
150
+ speed: number;
151
+ doorDurationMs: number;
152
+ dwellMs: number;
153
+ type: "elevator";
315
154
  } | {
316
155
  object: "node";
317
156
  name?: string | undefined;
@@ -336,43 +175,205 @@ export declare function floorsOf(nodes: SceneNodes): {
336
175
  fromIds: string[];
337
176
  } | undefined;
338
177
  } | undefined;
339
- id: `lineset_${string}`;
340
- path: [number, number, number][];
341
- suctionDiameter: number;
342
- liquidDiameter: number;
343
- insulated: boolean;
344
- type: "lineset";
345
- } | {
346
- object: "node";
347
- name?: string | undefined;
348
- parentId: string | null;
349
- visible: boolean;
350
- camera?: {
351
- position: [number, number, number];
352
- target: [number, number, number];
353
- mode: "orthographic" | "perspective";
354
- fov?: number | undefined;
355
- zoom?: number | undefined;
356
- } | undefined;
357
- metadata: Record<string, unknown>;
358
- provenance?: {
359
- refs: {
360
- ns?: string | undefined;
361
- id: string;
362
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
363
- }[];
364
- lineage?: {
365
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
366
- fromIds: string[];
178
+ type: "item";
179
+ id: `item_${string}`;
180
+ position: [number, number, number];
181
+ rotation: [number, number, number];
182
+ scale: [number, number, number];
183
+ side?: "back" | "front" | undefined;
184
+ children: string[];
185
+ wallId?: string | undefined;
186
+ wallT?: number | undefined;
187
+ roofSegmentId?: string | undefined;
188
+ roofFace?: "back" | "front" | "left" | "right" | undefined;
189
+ blockFaceId?: string | undefined;
190
+ supportSlabId?: string | undefined;
191
+ collectionIds?: `collection_${string}`[] | undefined;
192
+ slots?: Record<string, string> | undefined;
193
+ source?: {
194
+ kind: "script";
195
+ meta?: {
196
+ description?: string | undefined;
197
+ category?: string | undefined;
198
+ tags?: string[] | undefined;
199
+ parent?: string | undefined;
200
+ } | undefined;
201
+ language: "bpy" | "three";
202
+ script: string;
203
+ params: Record<string, string | number | boolean>;
204
+ artifact: string;
205
+ manifest: {
206
+ bounds: {
207
+ min: [number, number, number];
208
+ max: [number, number, number];
209
+ };
210
+ params: {
211
+ id: string;
212
+ label?: string | undefined;
213
+ kind: "boolean" | "number" | "string";
214
+ default: string | number | boolean;
215
+ min?: number | undefined;
216
+ max?: number | undefined;
217
+ step?: number | undefined;
218
+ unit?: string | undefined;
219
+ options?: string[] | undefined;
220
+ }[];
221
+ parts: {
222
+ id: string;
223
+ label?: string | undefined;
224
+ type?: string | undefined;
225
+ bounds?: {
226
+ min: [number, number, number];
227
+ max: [number, number, number];
228
+ } | undefined;
229
+ }[];
230
+ surfaces: {
231
+ part?: string | undefined;
232
+ y: number;
233
+ polygon: [number, number][];
234
+ }[];
235
+ slots: {
236
+ id: string;
237
+ label?: string | undefined;
238
+ color?: string | undefined;
239
+ roughness?: number | undefined;
240
+ metalness?: number | undefined;
241
+ transparent?: boolean | undefined;
242
+ emissive?: boolean | undefined;
243
+ }[];
244
+ anchors: {
245
+ id: string;
246
+ position: [number, number, number];
247
+ normal?: [number, number, number] | undefined;
248
+ }[];
249
+ lights: {
250
+ id: string;
251
+ position: [number, number, number];
252
+ color: string;
253
+ intensity: number;
254
+ distance?: number | undefined;
255
+ spot?: {
256
+ direction: [number, number, number];
257
+ angle: number;
258
+ softness: number;
259
+ } | undefined;
260
+ shadows?: boolean | undefined;
261
+ glow?: {
262
+ size: number;
263
+ strength: number;
264
+ } | undefined;
265
+ }[];
266
+ undersides: {
267
+ part?: string | undefined;
268
+ polygon: [number, number][];
269
+ plane: [number, number, number, number];
270
+ }[];
271
+ animations: {
272
+ name: string;
273
+ duration: number;
274
+ }[];
275
+ cutters?: {
276
+ host: "ceiling" | "mounted" | "slab" | "wall";
277
+ polygon: number[][];
278
+ minY: number;
279
+ maxY: number;
280
+ }[] | undefined;
281
+ cutout: boolean;
282
+ collider: boolean;
283
+ shape?: {
284
+ tolerance: number;
285
+ bands: {
286
+ y0: number;
287
+ y1: number;
288
+ polygons: {
289
+ outer: [number, number][];
290
+ holes?: [number, number][][] | undefined;
291
+ }[];
292
+ }[];
293
+ } | undefined;
294
+ triangles: number;
295
+ coverage?: number | undefined;
296
+ uncovered?: {
297
+ min: [number, number];
298
+ max: [number, number];
299
+ }[] | undefined;
300
+ };
301
+ images?: {
302
+ artifact: string;
303
+ thumbnail: string;
304
+ floorPlan: string;
367
305
  } | undefined;
368
306
  } | undefined;
369
- id: `pipe-trap_${string}`;
370
- position: [number, number, number];
371
- rotation: number;
372
- diameter: number;
373
- pipeMaterial: "abs" | "cast-iron" | "pvc";
374
- armLengthM: number;
375
- type: "pipe-trap";
307
+ asset: {
308
+ id: string;
309
+ category: string;
310
+ name: string;
311
+ thumbnail: string;
312
+ floorPlanUrl?: string | undefined;
313
+ source: "community" | "library" | "mine";
314
+ isDraft?: boolean | undefined;
315
+ src: string;
316
+ dimensions: [number, number, number];
317
+ attachTo?: "ceiling" | "wall" | "wall-side" | undefined;
318
+ recessed?: boolean | undefined;
319
+ tags?: string[] | undefined;
320
+ functionTags?: string[] | undefined;
321
+ offset: [number, number, number];
322
+ rotation: [number, number, number];
323
+ scale: [number, number, number];
324
+ surface?: {
325
+ height: number;
326
+ } | undefined;
327
+ interactive?: {
328
+ controls: ({
329
+ kind: "toggle";
330
+ label?: string | undefined;
331
+ default?: boolean | undefined;
332
+ } | {
333
+ kind: "slider";
334
+ label: string;
335
+ min: number;
336
+ max: number;
337
+ step: number;
338
+ unit?: string | undefined;
339
+ displayMode: "dial" | "slider" | "stepper";
340
+ default?: number | undefined;
341
+ } | {
342
+ kind: "temperature";
343
+ label: string;
344
+ min: number;
345
+ max: number;
346
+ unit: "C" | "F";
347
+ default?: number | undefined;
348
+ })[];
349
+ effects: ({
350
+ kind: "animation";
351
+ mode?: "ambient" | "open-close" | undefined;
352
+ control?: number | undefined;
353
+ clips: {
354
+ on?: string | undefined;
355
+ off?: string | undefined;
356
+ loop?: string | undefined;
357
+ };
358
+ } | {
359
+ kind: "light";
360
+ color: string;
361
+ intensityRange: [number, number];
362
+ distance?: number | undefined;
363
+ offset: [number, number, number];
364
+ spot?: {
365
+ direction: [number, number, number];
366
+ angle: number;
367
+ softness: number;
368
+ } | undefined;
369
+ shadows?: boolean | undefined;
370
+ glow?: {
371
+ size: number;
372
+ strength: number;
373
+ } | undefined;
374
+ })[];
375
+ } | undefined;
376
+ };
376
377
  } | {
377
378
  object: "node";
378
379
  name?: string | undefined;
@@ -397,7 +398,8 @@ export declare function floorsOf(nodes: SceneNodes): {
397
398
  fromIds: string[];
398
399
  } | undefined;
399
400
  } | undefined;
400
- id: `rseg_${string}`;
401
+ id: `ceiling_${string}`;
402
+ children: (`item_${string}` | `procedural-item_${string}`)[];
401
403
  material?: {
402
404
  id?: string | undefined;
403
405
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
@@ -421,330 +423,109 @@ export declare function floorsOf(nodes: SceneNodes): {
421
423
  } | undefined;
422
424
  } | undefined;
423
425
  materialPreset?: string | undefined;
424
- topMaterial?: {
425
- id?: string | undefined;
426
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
427
- properties?: {
428
- color: string;
429
- roughness: number;
430
- metalness: number;
431
- opacity: number;
432
- transparent: boolean;
433
- side: "back" | "double" | "front";
426
+ slots?: Record<string, string> | undefined;
427
+ polygon: [number, number][];
428
+ holes: [number, number][][];
429
+ holeMetadata: {
430
+ source: "elevator" | "floor-opening" | "manual" | "room" | "stair";
431
+ openingId?: string | undefined;
432
+ stairId?: string | undefined;
433
+ elevatorId?: string | undefined;
434
+ }[];
435
+ openingIds?: string[] | undefined;
436
+ height?: number | undefined;
437
+ buildUp?: {
438
+ presetId?: string | undefined;
439
+ finish?: {
440
+ kind: "drywall" | "plaster" | "wood-plank";
441
+ thickness: number;
442
+ name?: string | undefined;
434
443
  } | undefined;
435
- texture?: {
436
- url: string;
437
- repeat?: [number, number] | undefined;
438
- scale?: number | undefined;
439
- offset?: [number, number] | undefined;
440
- normalMap?: string | undefined;
441
- normalScale?: number | undefined;
442
- bumpMap?: string | undefined;
443
- bumpScale?: number | undefined;
444
- } | undefined;
445
- } | undefined;
446
- topMaterialPreset?: string | undefined;
447
- edgeMaterial?: {
448
- id?: string | undefined;
449
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
450
- properties?: {
451
- color: string;
452
- roughness: number;
453
- metalness: number;
454
- opacity: number;
455
- transparent: boolean;
456
- side: "back" | "double" | "front";
457
- } | undefined;
458
- texture?: {
459
- url: string;
460
- repeat?: [number, number] | undefined;
461
- scale?: number | undefined;
462
- offset?: [number, number] | undefined;
463
- normalMap?: string | undefined;
464
- normalScale?: number | undefined;
465
- bumpMap?: string | undefined;
466
- bumpScale?: number | undefined;
467
- } | undefined;
468
- } | undefined;
469
- edgeMaterialPreset?: string | undefined;
470
- wallMaterial?: {
471
- id?: string | undefined;
472
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
473
- properties?: {
474
- color: string;
475
- roughness: number;
476
- metalness: number;
477
- opacity: number;
478
- transparent: boolean;
479
- side: "back" | "double" | "front";
480
- } | undefined;
481
- texture?: {
482
- url: string;
483
- repeat?: [number, number] | undefined;
484
- scale?: number | undefined;
485
- offset?: [number, number] | undefined;
486
- normalMap?: string | undefined;
487
- normalScale?: number | undefined;
488
- bumpMap?: string | undefined;
489
- bumpScale?: number | undefined;
490
- } | undefined;
491
- } | undefined;
492
- wallMaterialPreset?: string | undefined;
493
- position: [number, number, number];
494
- rotation: number;
495
- roofType: "barrel" | "conical" | "dutch" | "flat" | "gable" | "gambrel" | "hip" | "mansard" | "shed";
496
- barrelRise?: number | undefined;
497
- barrelSegments?: number | undefined;
498
- roofSystem?: "glazed" | "standard" | undefined;
499
- glazing?: {
500
- across: {
501
- layout: "count" | "fixed-spacing" | "maximum-spacing";
502
- count: number;
503
- spacing: number;
504
- alignment: "center" | "end" | "start";
505
- };
506
- along: {
507
- layout: "count" | "fixed-spacing" | "maximum-spacing";
508
- count: number;
444
+ framing?: {
445
+ system: "joists" | "truss-chords";
446
+ size: "2x10" | "2x12" | "2x4" | "2x6" | "2x8";
509
447
  spacing: number;
510
- alignment: "center" | "end" | "start";
511
- };
512
- frameWidth: number;
513
- frameDepth: number;
514
- glassThickness: number;
515
- frameColor: string;
516
- glassColor: string;
517
- glassOpacity: number;
518
- glassRoughness: number;
519
- glazedEnds: boolean;
520
- panelType: "empty" | "glass" | "solid";
521
- panels: {
522
- face: string;
523
- column: number;
524
- row: number;
525
- type: "empty" | "glass" | "solid";
526
- }[];
527
- } | undefined;
528
- slots?: Record<string, string> | undefined;
529
- width: number;
530
- depth: number;
531
- conicalStartAngle?: number | undefined;
532
- conicalSweepAngle?: number | undefined;
533
- conicalFullCircle?: boolean | undefined;
534
- trim: {
535
- left: number;
536
- right: number;
537
- front: number;
538
- back: number;
539
- frontLeft: number;
540
- frontRight: number;
541
- backLeft: number;
542
- backRight: number;
543
- frontLeftX: number;
544
- frontLeftZ: number;
545
- frontRightX: number;
546
- frontRightZ: number;
547
- backLeftX: number;
548
- backLeftZ: number;
549
- backRightX: number;
550
- backRightZ: number;
551
- };
552
- wallHeight: number;
553
- pitch: number;
554
- wallThickness: number;
555
- deckThickness: number;
556
- overhang: number;
557
- gableOverhang?: number | undefined;
558
- shingleThickness: number;
559
- buildUp?: {
560
- presetId?: string | undefined;
561
- roofing: {
562
- kind: "architectural-shingle" | "asphalt-3-tab" | "clay-tile" | "concrete-tile" | "slate" | "standing-seam-metal" | "wood-shake";
563
- thickness: number;
564
- name?: string | undefined;
565
- };
566
- underlayment?: {
567
- kind: "felt-15" | "felt-30" | "ice-and-water" | "synthetic";
568
- thickness: number;
569
- name?: string | undefined;
570
448
  } | undefined;
571
- sheathing: {
449
+ decking?: {
572
450
  kind: "osb" | "plywood";
573
451
  thickness: number;
574
452
  name?: string | undefined;
575
- };
576
- structure: {
577
- system: "rafters" | "trusses";
578
- size: "2x10" | "2x12" | "2x4" | "2x6" | "2x8";
579
- spacing: number;
580
- };
453
+ } | undefined;
581
454
  insulation?: {
582
455
  kind: "batt" | "blown" | "rigid";
583
456
  thickness: number;
584
457
  name?: string | undefined;
585
458
  } | undefined;
586
- finish?: {
587
- kind: "drywall" | "plaster" | "wood-plank";
588
- thickness: number;
589
- name?: string | undefined;
590
- } | undefined;
591
- } | undefined;
592
- arc?: {
593
- centerX: number;
594
- centerZ: number;
595
- radius: number;
596
459
  } | undefined;
597
- shedSideInfillSpan?: number | undefined;
598
- shedSideInfillMinX?: number | undefined;
599
- shedSideInfillMaxX?: number | undefined;
600
- shedFootprintPieces?: [number, number][][] | undefined;
601
- shedOpenEndSides?: ("left" | "right")[] | undefined;
602
- shedJointFrame?: {
460
+ regions?: {
461
+ id: string;
462
+ polygon: [number, number][];
463
+ finish: string | Record<string, unknown>;
464
+ }[] | undefined;
465
+ boundary?: "auto" | undefined;
466
+ zoneId?: string | undefined;
467
+ autoFromWalls: boolean;
468
+ type: "ceiling";
469
+ } | {
470
+ object: "node";
471
+ name?: string | undefined;
472
+ parentId: string | null;
473
+ visible: boolean;
474
+ camera?: {
603
475
  position: [number, number, number];
604
- rotation: number;
605
- } | undefined;
606
- shedJointOwnerId?: string | undefined;
607
- shedJointNeighborIds?: string[] | undefined;
608
- shedJointScopeId?: string | undefined;
609
- managedByParent: boolean;
610
- wallShell: "auto" | "include" | "omit";
611
- shedInsetEndPanels: boolean;
612
- fascia?: boolean | undefined;
613
- eaveCut?: "plumb" | "plumb-level" | "square" | undefined;
614
- fasciaHighEdge?: boolean | undefined;
615
- fasciaHeight?: number | undefined;
616
- fasciaDepth?: number | undefined;
617
- fasciaMaterial?: {
618
- id?: string | undefined;
619
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
620
- properties?: {
621
- color: string;
622
- roughness: number;
623
- metalness: number;
624
- opacity: number;
625
- transparent: boolean;
626
- side: "back" | "double" | "front";
627
- } | undefined;
628
- texture?: {
629
- url: string;
630
- repeat?: [number, number] | undefined;
631
- scale?: number | undefined;
632
- offset?: [number, number] | undefined;
633
- normalMap?: string | undefined;
634
- normalScale?: number | undefined;
635
- bumpMap?: string | undefined;
636
- bumpScale?: number | undefined;
637
- } | undefined;
476
+ target: [number, number, number];
477
+ mode: "orthographic" | "perspective";
478
+ fov?: number | undefined;
479
+ zoom?: number | undefined;
638
480
  } | undefined;
639
- fasciaMaterialPreset?: string | undefined;
640
- heelMaterial?: {
641
- id?: string | undefined;
642
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
643
- properties?: {
644
- color: string;
645
- roughness: number;
646
- metalness: number;
647
- opacity: number;
648
- transparent: boolean;
649
- side: "back" | "double" | "front";
650
- } | undefined;
651
- texture?: {
652
- url: string;
653
- repeat?: [number, number] | undefined;
654
- scale?: number | undefined;
655
- offset?: [number, number] | undefined;
656
- normalMap?: string | undefined;
657
- normalScale?: number | undefined;
658
- bumpMap?: string | undefined;
659
- bumpScale?: number | undefined;
481
+ metadata: Record<string, unknown>;
482
+ provenance?: {
483
+ refs: {
484
+ ns?: string | undefined;
485
+ id: string;
486
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
487
+ }[];
488
+ lineage?: {
489
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
490
+ fromIds: string[];
660
491
  } | undefined;
661
492
  } | undefined;
662
- heelMaterialPreset?: string | undefined;
663
- gableLeftMaterial?: {
664
- id?: string | undefined;
665
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
666
- properties?: {
667
- color: string;
668
- roughness: number;
669
- metalness: number;
670
- opacity: number;
671
- transparent: boolean;
672
- side: "back" | "double" | "front";
673
- } | undefined;
674
- texture?: {
675
- url: string;
676
- repeat?: [number, number] | undefined;
677
- scale?: number | undefined;
678
- offset?: [number, number] | undefined;
679
- normalMap?: string | undefined;
680
- normalScale?: number | undefined;
681
- bumpMap?: string | undefined;
682
- bumpScale?: number | undefined;
683
- } | undefined;
684
- } | undefined;
685
- gableLeftMaterialPreset?: string | undefined;
686
- gableRightMaterial?: {
687
- id?: string | undefined;
688
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
689
- properties?: {
690
- color: string;
691
- roughness: number;
692
- metalness: number;
693
- opacity: number;
694
- transparent: boolean;
695
- side: "back" | "double" | "front";
696
- } | undefined;
697
- texture?: {
698
- url: string;
699
- repeat?: [number, number] | undefined;
700
- scale?: number | undefined;
701
- offset?: [number, number] | undefined;
702
- normalMap?: string | undefined;
703
- normalScale?: number | undefined;
704
- bumpMap?: string | undefined;
705
- bumpScale?: number | undefined;
706
- } | undefined;
707
- } | undefined;
708
- gableRightMaterialPreset?: string | undefined;
709
- gambrelLowerWidthRatio: number;
710
- gambrelLowerHeightRatio: number;
711
- mansardSteepWidthRatio: number;
712
- mansardSteepHeightRatio: number;
713
- dutchHipWidthRatio: number;
714
- dutchHipHeightRatio: number;
715
- dutchWaistLengthRatio: number;
716
- dutchGabletRake: number;
717
- dutchTopRakeThickness: number;
718
- children: string[];
719
- type: "roof-segment";
720
- } | {
721
- object: "node";
722
- name?: string | undefined;
723
- parentId: string | null;
724
- visible: boolean;
725
- camera?: {
726
- position: [number, number, number];
727
- target: [number, number, number];
728
- mode: "orthographic" | "perspective";
729
- fov?: number | undefined;
730
- zoom?: number | undefined;
731
- } | undefined;
732
- metadata: Record<string, unknown>;
733
- provenance?: {
734
- refs: {
735
- ns?: string | undefined;
736
- id: string;
737
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
738
- }[];
739
- lineage?: {
740
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
741
- fromIds: string[];
742
- } | undefined;
743
- } | undefined;
744
- id: `separator_${string}`;
745
- start: [number, number];
746
- end: [number, number];
747
- type: "separator";
493
+ id: `construction-dimension_${string}`;
494
+ anchors: ({
495
+ kind: "feature";
496
+ reference: {
497
+ nodeId: string;
498
+ featureId: string;
499
+ parameters?: Record<string, string | number | boolean> | undefined;
500
+ };
501
+ fallback: [number, number, number];
502
+ } | [number, number, number])[];
503
+ baseline: {
504
+ origin: [number, number];
505
+ direction: [number, number];
506
+ };
507
+ chainMode: "continuous" | "point-to-point";
508
+ mode: "angular" | "arc-length" | "center-mark" | "chord" | "coordinate" | "diameter" | "linear" | "radius";
509
+ featureCount: number;
510
+ showCenterMark: boolean;
511
+ prefix: string;
512
+ suffix: string;
513
+ textOverride: string | null;
514
+ datumPolicy: "centerline" | "finish-face" | "structural-face" | "wall-face";
515
+ terminator: "architectural-tick" | "dot" | "filled-arrow" | "open-arrow";
516
+ textPosition: "above" | "centered";
517
+ imperialPrecision: "1" | "1/16" | "1/2" | "1/4" | "1/8";
518
+ metricNotation: "meters" | "millimeters";
519
+ extensionStartGap: number;
520
+ extensionOvershoot: number;
521
+ drawingType: "floor-plan" | "foundation-plan" | "reflected-ceiling-plan" | "roof-plan" | "site-plan";
522
+ drawingOverrides: {
523
+ drawingType: "floor-plan" | "foundation-plan" | "reflected-ceiling-plan" | "roof-plan" | "site-plan";
524
+ presentation: "controlled" | "omit" | "shown";
525
+ suppressedSegmentIndexes: number[];
526
+ }[];
527
+ controllingDimensionId: `construction-dimension_${string}` | null;
528
+ type: "construction-dimension";
748
529
  } | {
749
530
  object: "node";
750
531
  name?: string | undefined;
@@ -769,88 +550,198 @@ export declare function floorsOf(nodes: SceneNodes): {
769
550
  fromIds: string[];
770
551
  } | undefined;
771
552
  } | undefined;
772
- id: `spawn_${string}`;
773
- position: [number, number, number];
774
- rotation: number;
775
- supportSlabId?: string | undefined;
776
- type: "spawn";
777
- } | {
778
- object: "node";
779
- name?: string | undefined;
780
- parentId: string | null;
781
- visible: boolean;
782
- camera?: {
783
- position: [number, number, number];
784
- target: [number, number, number];
785
- mode: "orthographic" | "perspective";
786
- fov?: number | undefined;
787
- zoom?: number | undefined;
553
+ id: `site_${string}`;
554
+ polygon: {
555
+ type: "polygon";
556
+ points: [number, number][];
557
+ };
558
+ terrain?: {
559
+ type: "heightfield";
560
+ origin: [number, number];
561
+ spacing: number;
562
+ cols: number;
563
+ rows: number;
564
+ step: number;
565
+ heights: string;
788
566
  } | undefined;
789
- metadata: Record<string, unknown>;
790
- provenance?: {
791
- refs: {
792
- ns?: string | undefined;
793
- id: string;
794
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
795
- }[];
796
- lineage?: {
797
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
798
- fromIds: string[];
567
+ showGround?: boolean | undefined;
568
+ presentation?: {
569
+ theme?: string | undefined;
570
+ exposure?: number | undefined;
571
+ shading?: "rendered" | "solid" | undefined;
572
+ edges?: "off" | "soft" | "strong" | undefined;
573
+ shadows?: boolean | undefined;
574
+ lighting?: {
575
+ background?: string | undefined;
576
+ backgroundSky?: string | null | undefined;
577
+ ground?: string | undefined;
578
+ ambient?: {
579
+ color: string;
580
+ intensity: number;
581
+ } | undefined;
582
+ hemi?: {
583
+ sky: string;
584
+ ground: string;
585
+ intensity: number;
586
+ } | undefined;
587
+ lights?: {
588
+ color: string;
589
+ intensity: number;
590
+ position: [number, number, number];
591
+ target?: [number, number, number] | undefined;
592
+ castShadow?: boolean | undefined;
593
+ shadow?: {
594
+ intensity?: number | undefined;
595
+ bias?: number | undefined;
596
+ normalBias?: number | undefined;
597
+ radius?: number | undefined;
598
+ mapSize?: 512 | 1024 | 2048 | 4096 | undefined;
599
+ camera?: {
600
+ left: number;
601
+ right: number;
602
+ top: number;
603
+ bottom: number;
604
+ near: number;
605
+ far: number;
606
+ } | undefined;
607
+ } | undefined;
608
+ }[] | undefined;
609
+ environment?: {
610
+ source: "gradient" | "none" | "room";
611
+ intensity: number;
612
+ } | undefined;
799
613
  } | undefined;
800
- } | undefined;
801
- id: `sseg_${string}`;
802
- material?: {
803
- id?: string | undefined;
804
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
805
- properties?: {
806
- color: string;
807
- roughness: number;
808
- metalness: number;
809
- opacity: number;
810
- transparent: boolean;
811
- side: "back" | "double" | "front";
614
+ postprocessing?: {
615
+ ambientOcclusion?: boolean | undefined;
616
+ colorGrading?: boolean | undefined;
812
617
  } | undefined;
813
- texture?: {
814
- url: string;
815
- repeat?: [number, number] | undefined;
816
- scale?: number | undefined;
817
- offset?: [number, number] | undefined;
818
- normalMap?: string | undefined;
819
- normalScale?: number | undefined;
820
- bumpMap?: string | undefined;
821
- bumpScale?: number | undefined;
618
+ display?: {
619
+ mode?: "construction" | "finished" | "systems" | undefined;
620
+ families?: Partial<Record<"device" | "exposed-structure" | "fill" | "finish" | "foundation" | "framing" | "inspection" | "insulation" | "masonry" | "membrane" | "run" | "service-space" | "sheathing", boolean>> | undefined;
621
+ disciplines?: Partial<Record<"electrical" | "fire" | "low-voltage" | "mechanical" | "plumbing", boolean>> | undefined;
622
+ xray?: boolean | undefined;
623
+ colorBy?: "material" | "service" | undefined;
822
624
  } | undefined;
823
625
  } | undefined;
824
- materialPreset?: string | undefined;
825
- slots?: Record<string, string> | undefined;
826
- position: [number, number, number];
827
- rotation: number;
828
- segmentType: "landing" | "stair";
829
- width: number;
830
- length: number;
831
- height: number;
832
- stepCount: number;
833
- attachmentSide: "front" | "left" | "right";
834
- fillToFloor: boolean;
835
- construction?: {
836
- mode: "center-stringer" | "open" | "side-stringers" | "solid" | "waist";
837
- waistThickness: number;
838
- treadThickness: number;
839
- riserThickness: number;
840
- nosing: number;
841
- finishThickness: number;
842
- closedRisers: boolean;
843
- stringerWidth: number;
844
- stringerDepth: number;
626
+ address?: {
627
+ street?: string | undefined;
628
+ city?: string | undefined;
629
+ state?: string | undefined;
630
+ zip?: string | undefined;
845
631
  } | undefined;
846
- winder?: {
847
- turn: "left" | "right";
848
- innerGap: number;
849
- walkingLineOffset: number;
850
- division: "equal-angle" | "equal-going";
632
+ parcel?: {
633
+ apn?: string | undefined;
634
+ source?: string | undefined;
635
+ county?: string | undefined;
636
+ state?: string | undefined;
637
+ lotAreaSqFt?: number | undefined;
638
+ originLngLat?: [number, number] | undefined;
639
+ resolvedAt?: string | undefined;
640
+ layer?: string | undefined;
641
+ notes?: string[] | undefined;
851
642
  } | undefined;
852
- thickness: number;
853
- type: "stair-segment";
643
+ setbacks?: {
644
+ front: number;
645
+ side: number;
646
+ rear: number;
647
+ left?: number | undefined;
648
+ right?: number | undefined;
649
+ streetSide?: number | undefined;
650
+ } | undefined;
651
+ setbacksSource?: string | undefined;
652
+ zone?: string | undefined;
653
+ frontEdge?: number | undefined;
654
+ streetEdges?: number[] | undefined;
655
+ sightTriangleFt?: number | undefined;
656
+ northRotation?: number | undefined;
657
+ dossier?: {
658
+ [x: string]: unknown;
659
+ provider: string;
660
+ asOf: string;
661
+ point?: {
662
+ lat?: number | undefined;
663
+ lng?: number | undefined;
664
+ source?: string | undefined;
665
+ } | undefined;
666
+ address?: {
667
+ formatted?: string | undefined;
668
+ precision?: string | undefined;
669
+ } | undefined;
670
+ sections: Record<string, {
671
+ [x: string]: unknown;
672
+ status: string;
673
+ summary?: string | undefined;
674
+ reason?: string | undefined;
675
+ source?: {
676
+ name?: string | undefined;
677
+ kind?: string | undefined;
678
+ vintage?: string | undefined;
679
+ attribution?: string | undefined;
680
+ } | undefined;
681
+ }>;
682
+ parcel?: Record<string, unknown> | undefined;
683
+ flood?: Record<string, unknown> | undefined;
684
+ codeBasis?: Record<string, unknown> | undefined;
685
+ zoning?: Record<string, unknown> | undefined;
686
+ utilities?: Record<string, unknown> | undefined;
687
+ soils?: Record<string, unknown> | undefined;
688
+ wetlands?: Record<string, unknown> | undefined;
689
+ structures?: Record<string, unknown> | undefined;
690
+ elevation?: Record<string, unknown> | undefined;
691
+ boundaries?: Record<string, unknown> | undefined;
692
+ } | undefined;
693
+ contourIntervalIn?: number | undefined;
694
+ contours3d?: boolean | undefined;
695
+ terrainContours?: {
696
+ datum: string;
697
+ intervalFt: number;
698
+ source?: string | undefined;
699
+ lines: {
700
+ elevationFt: number;
701
+ points: [number, number][];
702
+ }[];
703
+ } | undefined;
704
+ wallTypes?: {
705
+ id: string;
706
+ label: string;
707
+ assembly: {
708
+ layers: {
709
+ id: string;
710
+ role: "air" | "covering" | "deck" | "fill" | "finish" | "furring" | "glazing" | "insulation" | "lining" | "membrane" | "sheathing" | "shell" | "structure" | "substrate" | "underlay";
711
+ thickness: number;
712
+ core?: true | undefined;
713
+ spacing?: number | undefined;
714
+ material?: string | undefined;
715
+ slot?: string | undefined;
716
+ returns?: boolean | undefined;
717
+ display?: "construction" | "finished" | undefined;
718
+ inset?: number | undefined;
719
+ bottom?: number | undefined;
720
+ lift?: number | undefined;
721
+ src?: string | undefined;
722
+ }[];
723
+ backing?: {
724
+ id: string;
725
+ role: "air" | "covering" | "deck" | "fill" | "finish" | "furring" | "glazing" | "insulation" | "lining" | "membrane" | "sheathing" | "shell" | "structure" | "substrate" | "underlay";
726
+ thickness: number;
727
+ core?: true | undefined;
728
+ spacing?: number | undefined;
729
+ material?: string | undefined;
730
+ slot?: string | undefined;
731
+ returns?: boolean | undefined;
732
+ display?: "construction" | "finished" | undefined;
733
+ inset?: number | undefined;
734
+ bottom?: number | undefined;
735
+ lift?: number | undefined;
736
+ src?: string | undefined;
737
+ }[] | undefined;
738
+ face?: "exterior" | "front" | undefined;
739
+ presetId?: string | undefined;
740
+ cavityInsulation?: string | undefined;
741
+ };
742
+ }[] | undefined;
743
+ children: string[];
744
+ type: "site";
854
745
  } | {
855
746
  object: "node";
856
747
  name?: string | undefined;
@@ -875,7 +766,7 @@ export declare function floorsOf(nodes: SceneNodes): {
875
766
  fromIds: string[];
876
767
  } | undefined;
877
768
  } | undefined;
878
- id: `window_${string}`;
769
+ id: `door_${string}`;
879
770
  material?: {
880
771
  id?: string | undefined;
881
772
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
@@ -1019,12 +910,14 @@ export declare function floorsOf(nodes: SceneNodes): {
1019
910
  verticalAnchor?: "floor" | "wall" | undefined;
1020
911
  floorThresholdVersion: 0 | 1;
1021
912
  wallId?: string | undefined;
1022
- dormerId?: string | undefined;
1023
- dormerFace?: "back" | "front" | "left" | "right" | undefined;
1024
913
  roofSegmentId?: string | undefined;
1025
914
  roofFace?: "back" | "front" | "left" | "right" | undefined;
1026
915
  width: number;
1027
916
  height: number;
917
+ sidelightLeft?: number | undefined;
918
+ sidelightRight?: number | undefined;
919
+ transomHeight?: number | undefined;
920
+ slidingStyle?: "bypass" | "patio" | undefined;
1028
921
  mark?: string | undefined;
1029
922
  constructionType: "framed" | "masonry";
1030
923
  dimensionReference: "finish-opening" | "masonry-opening" | "nominal" | "rough-opening";
@@ -1034,52 +927,49 @@ export declare function floorsOf(nodes: SceneNodes): {
1034
927
  masonryOpeningHeight?: number | undefined;
1035
928
  finishOpeningWidth?: number | undefined;
1036
929
  finishOpeningHeight?: number | undefined;
1037
- openingKind: "opening" | "window";
1038
- windowType: "awning" | "bay" | "bow" | "casement" | "double-hung" | "fixed" | "hopper" | "louvered" | "single-hung" | "sliding" | "tilt-turn";
930
+ doorCategory: "garage" | "interior";
931
+ doorType: "barn" | "double" | "folding" | "french" | "garage-rollup" | "garage-sectional" | "garage-tiltup" | "hinged" | "pocket" | "sliding";
932
+ leafCount: 1 | 2 | 3 | 4 | 6 | 8;
1039
933
  operationState: number;
1040
- openingDirection?: "inward" | "outward" | undefined;
1041
- tiltTurnMode?: "tilt" | "turn" | undefined;
1042
- awningDirection: "down" | "up";
1043
- casementStyle: "french" | "single";
1044
- hingesSide: "left" | "right";
934
+ slideDirection: "left" | "right";
935
+ trackStyle: "none" | "overhead" | "pocket" | "visible";
936
+ garagePanelCount: number;
937
+ openingKind: "door" | "opening";
1045
938
  openingShape: "arch" | "rectangle" | "rounded";
1046
939
  openingRadiusMode: "all" | "individual";
1047
- openingCornerRadii: [number, number, number, number];
940
+ openingTopRadii: [number, number];
1048
941
  cornerRadius: number;
1049
942
  archHeight: number;
1050
943
  openingRevealRadius: number;
1051
944
  frameThickness: number;
1052
945
  frameDepth?: number | undefined;
1053
- windowHandle?: boolean | undefined;
1054
- sashGrid?: boolean | undefined;
1055
- columnRatios: number[];
1056
- rowRatios: number[];
1057
- columnDividerThickness: number;
1058
- rowDividerThickness: number;
1059
- corner?: {
1060
- end: "end" | "start";
1061
- partnerId: string;
1062
- post: "none" | "post";
1063
- } | undefined;
1064
- sill: boolean;
1065
- sillDepth: number;
1066
- sillThickness: number;
1067
- sillOverhang?: number | undefined;
1068
- sillInterior?: boolean | undefined;
1069
- sillInteriorDepth?: number | undefined;
1070
- sillInteriorThickness?: number | undefined;
1071
- sillInteriorOverhang?: number | undefined;
1072
- shutters?: "board-batten" | "louvered" | "none" | "panel" | undefined;
1073
- shutterWidth?: number | undefined;
1074
- shutterOpen?: number | undefined;
1075
- shutterSides?: "both" | "left" | "right" | undefined;
1076
- rollerShutter?: "box" | "concealed" | "none" | undefined;
1077
- rollerShutterBoxHeight?: number | undefined;
1078
- rollerShutterOpen?: number | undefined;
946
+ threshold: boolean;
947
+ thresholdHeight: number;
1079
948
  casingFaceA?: boolean | undefined;
1080
949
  casingFaceB?: boolean | undefined;
1081
950
  casingWidth?: number | undefined;
1082
- type: "window";
951
+ hingesSide: "left" | "right";
952
+ swingDirection: "inward" | "outward";
953
+ swingAngle: number;
954
+ segments: {
955
+ type: "empty" | "glass" | "panel";
956
+ heightRatio: number;
957
+ columnRatios: number[];
958
+ dividerThickness: number;
959
+ panelDepth: number;
960
+ panelInset: number;
961
+ }[];
962
+ handle: boolean;
963
+ handleStyle?: "bar" | "knob" | "lever" | "lever-curved" | "plate" | undefined;
964
+ handleHeight: number;
965
+ handleSide: "left" | "right";
966
+ contentPadding: [number, number];
967
+ doorCloser: boolean;
968
+ panicBar: boolean;
969
+ panicBarStyle: "crossbar" | "touchbar";
970
+ panicBarRods: boolean;
971
+ panicBarHeight: number;
972
+ type: "door";
1083
973
  } | {
1084
974
  object: "node";
1085
975
  name?: string | undefined;
@@ -1104,20 +994,29 @@ export declare function floorsOf(nodes: SceneNodes): {
1104
994
  fromIds: string[];
1105
995
  } | undefined;
1106
996
  } | undefined;
1107
- type: "item";
1108
- id: `item_${string}`;
1109
- position: [number, number, number];
1110
- rotation: [number, number, number];
1111
- scale: [number, number, number];
1112
- side?: "back" | "front" | undefined;
1113
- children: string[];
1114
- wallId?: string | undefined;
1115
- wallT?: number | undefined;
1116
- roofSegmentId?: string | undefined;
1117
- roofFace?: "back" | "front" | "left" | "right" | undefined;
1118
- blockFaceId?: string | undefined;
1119
- supportSlabId?: string | undefined;
1120
- collectionIds?: `collection_${string}`[] | undefined;
997
+ id: `window_${string}`;
998
+ material?: {
999
+ id?: string | undefined;
1000
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1001
+ properties?: {
1002
+ color: string;
1003
+ roughness: number;
1004
+ metalness: number;
1005
+ opacity: number;
1006
+ transparent: boolean;
1007
+ side: "back" | "double" | "front";
1008
+ } | undefined;
1009
+ texture?: {
1010
+ url: string;
1011
+ repeat?: [number, number] | undefined;
1012
+ scale?: number | undefined;
1013
+ offset?: [number, number] | undefined;
1014
+ normalMap?: string | undefined;
1015
+ normalScale?: number | undefined;
1016
+ bumpMap?: string | undefined;
1017
+ bumpScale?: number | undefined;
1018
+ } | undefined;
1019
+ } | undefined;
1121
1020
  slots?: Record<string, string> | undefined;
1122
1021
  source?: {
1123
1022
  kind: "script";
@@ -1233,76 +1132,73 @@ export declare function floorsOf(nodes: SceneNodes): {
1233
1132
  floorPlan: string;
1234
1133
  } | undefined;
1235
1134
  } | undefined;
1236
- asset: {
1237
- id: string;
1238
- category: string;
1239
- name: string;
1240
- thumbnail: string;
1241
- floorPlanUrl?: string | undefined;
1242
- source: "community" | "library" | "mine";
1243
- isDraft?: boolean | undefined;
1244
- src: string;
1245
- dimensions: [number, number, number];
1246
- attachTo?: "ceiling" | "wall" | "wall-side" | undefined;
1247
- recessed?: boolean | undefined;
1248
- tags?: string[] | undefined;
1249
- functionTags?: string[] | undefined;
1250
- offset: [number, number, number];
1251
- rotation: [number, number, number];
1252
- scale: [number, number, number];
1253
- surface?: {
1254
- height: number;
1255
- } | undefined;
1256
- interactive?: {
1257
- controls: ({
1258
- kind: "toggle";
1259
- label?: string | undefined;
1260
- default?: boolean | undefined;
1261
- } | {
1262
- kind: "slider";
1263
- label: string;
1264
- min: number;
1265
- max: number;
1266
- step: number;
1267
- unit?: string | undefined;
1268
- displayMode: "dial" | "slider" | "stepper";
1269
- default?: number | undefined;
1270
- } | {
1271
- kind: "temperature";
1272
- label: string;
1273
- min: number;
1274
- max: number;
1275
- unit: "C" | "F";
1276
- default?: number | undefined;
1277
- })[];
1278
- effects: ({
1279
- kind: "animation";
1280
- mode?: "ambient" | "open-close" | undefined;
1281
- control?: number | undefined;
1282
- clips: {
1283
- on?: string | undefined;
1284
- off?: string | undefined;
1285
- loop?: string | undefined;
1286
- };
1287
- } | {
1288
- kind: "light";
1289
- color: string;
1290
- intensityRange: [number, number];
1291
- distance?: number | undefined;
1292
- offset: [number, number, number];
1293
- spot?: {
1294
- direction: [number, number, number];
1295
- angle: number;
1296
- softness: number;
1297
- } | undefined;
1298
- shadows?: boolean | undefined;
1299
- glow?: {
1300
- size: number;
1301
- strength: number;
1302
- } | undefined;
1303
- })[];
1304
- } | undefined;
1305
- };
1135
+ position: [number, number, number];
1136
+ rotation: [number, number, number];
1137
+ side?: "back" | "front" | undefined;
1138
+ verticalAnchor?: "floor" | "wall" | undefined;
1139
+ floorThresholdVersion: 0 | 1;
1140
+ wallId?: string | undefined;
1141
+ dormerId?: string | undefined;
1142
+ dormerFace?: "back" | "front" | "left" | "right" | undefined;
1143
+ roofSegmentId?: string | undefined;
1144
+ roofFace?: "back" | "front" | "left" | "right" | undefined;
1145
+ width: number;
1146
+ height: number;
1147
+ mark?: string | undefined;
1148
+ constructionType: "framed" | "masonry";
1149
+ dimensionReference: "finish-opening" | "masonry-opening" | "nominal" | "rough-opening";
1150
+ roughOpeningWidth?: number | undefined;
1151
+ roughOpeningHeight?: number | undefined;
1152
+ masonryOpeningWidth?: number | undefined;
1153
+ masonryOpeningHeight?: number | undefined;
1154
+ finishOpeningWidth?: number | undefined;
1155
+ finishOpeningHeight?: number | undefined;
1156
+ openingKind: "opening" | "window";
1157
+ windowType: "awning" | "bay" | "bow" | "casement" | "double-hung" | "fixed" | "hopper" | "louvered" | "single-hung" | "sliding" | "tilt-turn";
1158
+ operationState: number;
1159
+ openingDirection?: "inward" | "outward" | undefined;
1160
+ tiltTurnMode?: "tilt" | "turn" | undefined;
1161
+ awningDirection: "down" | "up";
1162
+ casementStyle: "french" | "single";
1163
+ hingesSide: "left" | "right";
1164
+ openingShape: "arch" | "rectangle" | "rounded";
1165
+ openingRadiusMode: "all" | "individual";
1166
+ openingCornerRadii: [number, number, number, number];
1167
+ cornerRadius: number;
1168
+ archHeight: number;
1169
+ openingRevealRadius: number;
1170
+ frameThickness: number;
1171
+ frameDepth?: number | undefined;
1172
+ windowHandle?: boolean | undefined;
1173
+ sashGrid?: boolean | undefined;
1174
+ columnRatios: number[];
1175
+ rowRatios: number[];
1176
+ columnDividerThickness: number;
1177
+ rowDividerThickness: number;
1178
+ corner?: {
1179
+ end: "end" | "start";
1180
+ partnerId: string;
1181
+ post: "none" | "post";
1182
+ } | undefined;
1183
+ sill: boolean;
1184
+ sillDepth: number;
1185
+ sillThickness: number;
1186
+ sillOverhang?: number | undefined;
1187
+ sillInterior?: boolean | undefined;
1188
+ sillInteriorDepth?: number | undefined;
1189
+ sillInteriorThickness?: number | undefined;
1190
+ sillInteriorOverhang?: number | undefined;
1191
+ shutters?: "board-batten" | "louvered" | "none" | "panel" | undefined;
1192
+ shutterWidth?: number | undefined;
1193
+ shutterOpen?: number | undefined;
1194
+ shutterSides?: "both" | "left" | "right" | undefined;
1195
+ rollerShutter?: "box" | "concealed" | "none" | undefined;
1196
+ rollerShutterBoxHeight?: number | undefined;
1197
+ rollerShutterOpen?: number | undefined;
1198
+ casingFaceA?: boolean | undefined;
1199
+ casingFaceB?: boolean | undefined;
1200
+ casingWidth?: number | undefined;
1201
+ type: "window";
1306
1202
  } | {
1307
1203
  object: "node";
1308
1204
  name?: string | undefined;
@@ -1327,30 +1223,11 @@ export declare function floorsOf(nodes: SceneNodes): {
1327
1223
  fromIds: string[];
1328
1224
  } | undefined;
1329
1225
  } | undefined;
1330
- id: `door_${string}`;
1331
- material?: {
1332
- id?: string | undefined;
1333
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1334
- properties?: {
1335
- color: string;
1336
- roughness: number;
1337
- metalness: number;
1338
- opacity: number;
1339
- transparent: boolean;
1340
- side: "back" | "double" | "front";
1341
- } | undefined;
1342
- texture?: {
1343
- url: string;
1344
- repeat?: [number, number] | undefined;
1345
- scale?: number | undefined;
1346
- offset?: [number, number] | undefined;
1347
- normalMap?: string | undefined;
1348
- normalScale?: number | undefined;
1349
- bumpMap?: string | undefined;
1350
- bumpScale?: number | undefined;
1351
- } | undefined;
1352
- } | undefined;
1353
- slots?: Record<string, string> | undefined;
1226
+ id: `column_${string}`;
1227
+ children: string[];
1228
+ position: [number, number, number];
1229
+ rotation: number;
1230
+ supportSlabId?: string | undefined;
1354
1231
  source?: {
1355
1232
  kind: "script";
1356
1233
  meta?: {
@@ -1465,289 +1342,346 @@ export declare function floorsOf(nodes: SceneNodes): {
1465
1342
  floorPlan: string;
1466
1343
  } | undefined;
1467
1344
  } | undefined;
1468
- position: [number, number, number];
1469
- rotation: [number, number, number];
1470
- side?: "back" | "front" | undefined;
1471
- verticalAnchor?: "floor" | "wall" | undefined;
1472
- floorThresholdVersion: 0 | 1;
1473
- wallId?: string | undefined;
1474
- roofSegmentId?: string | undefined;
1475
- roofFace?: "back" | "front" | "left" | "right" | undefined;
1476
- width: number;
1345
+ style: "cluster" | "dravidian-carved" | "faceted" | "fluted" | "lathe-turned" | "plain";
1346
+ crossSection: "octagonal" | "rectangular" | "round" | "sixteen-sided" | "square";
1477
1347
  height: number;
1478
- sidelightLeft?: number | undefined;
1479
- sidelightRight?: number | undefined;
1480
- transomHeight?: number | undefined;
1481
- slidingStyle?: "bypass" | "patio" | undefined;
1482
- mark?: string | undefined;
1483
- constructionType: "framed" | "masonry";
1484
- dimensionReference: "finish-opening" | "masonry-opening" | "nominal" | "rough-opening";
1485
- roughOpeningWidth?: number | undefined;
1486
- roughOpeningHeight?: number | undefined;
1487
- masonryOpeningWidth?: number | undefined;
1488
- masonryOpeningHeight?: number | undefined;
1489
- finishOpeningWidth?: number | undefined;
1490
- finishOpeningHeight?: number | undefined;
1491
- doorCategory: "garage" | "interior";
1492
- doorType: "barn" | "double" | "folding" | "french" | "garage-rollup" | "garage-sectional" | "garage-tiltup" | "hinged" | "pocket" | "sliding";
1493
- leafCount: 1 | 2 | 3 | 4 | 6 | 8;
1494
- operationState: number;
1495
- slideDirection: "left" | "right";
1496
- trackStyle: "none" | "overhead" | "pocket" | "visible";
1497
- garagePanelCount: number;
1498
- openingKind: "door" | "opening";
1499
- openingShape: "arch" | "rectangle" | "rounded";
1500
- openingRadiusMode: "all" | "individual";
1501
- openingTopRadii: [number, number];
1502
- cornerRadius: number;
1503
- archHeight: number;
1504
- openingRevealRadius: number;
1505
- frameThickness: number;
1506
- frameDepth?: number | undefined;
1507
- threshold: boolean;
1508
- thresholdHeight: number;
1509
- casingFaceA?: boolean | undefined;
1510
- casingFaceB?: boolean | undefined;
1511
- casingWidth?: number | undefined;
1512
- hingesSide: "left" | "right";
1513
- swingDirection: "inward" | "outward";
1514
- swingAngle: number;
1515
- segments: {
1516
- type: "empty" | "glass" | "panel";
1517
- heightRatio: number;
1518
- columnRatios: number[];
1519
- dividerThickness: number;
1520
- panelDepth: number;
1521
- panelInset: number;
1522
- }[];
1523
- handle: boolean;
1524
- handleStyle?: "bar" | "knob" | "lever" | "lever-curved" | "plate" | undefined;
1525
- handleHeight: number;
1526
- handleSide: "left" | "right";
1527
- contentPadding: [number, number];
1528
- doorCloser: boolean;
1529
- panicBar: boolean;
1530
- panicBarStyle: "crossbar" | "touchbar";
1531
- panicBarRods: boolean;
1532
- panicBarHeight: number;
1533
- type: "door";
1534
- } | {
1535
- object: "node";
1536
- name?: string | undefined;
1537
- parentId: string | null;
1538
- visible: boolean;
1539
- camera?: {
1540
- position: [number, number, number];
1541
- target: [number, number, number];
1542
- mode: "orthographic" | "perspective";
1543
- fov?: number | undefined;
1544
- zoom?: number | undefined;
1545
- } | undefined;
1546
- metadata: Record<string, unknown>;
1547
- provenance?: {
1548
- refs: {
1549
- ns?: string | undefined;
1550
- id: string;
1551
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
1552
- }[];
1553
- lineage?: {
1554
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
1555
- fromIds: string[];
1556
- } | undefined;
1557
- } | undefined;
1558
- id: `column_${string}`;
1559
- children: string[];
1560
- position: [number, number, number];
1561
- rotation: number;
1562
- supportSlabId?: string | undefined;
1563
- source?: {
1564
- kind: "script";
1565
- meta?: {
1566
- description?: string | undefined;
1567
- category?: string | undefined;
1568
- tags?: string[] | undefined;
1569
- parent?: string | undefined;
1570
- } | undefined;
1571
- language: "bpy" | "three";
1572
- script: string;
1573
- params: Record<string, string | number | boolean>;
1574
- artifact: string;
1575
- manifest: {
1576
- bounds: {
1577
- min: [number, number, number];
1578
- max: [number, number, number];
1579
- };
1580
- params: {
1581
- id: string;
1582
- label?: string | undefined;
1583
- kind: "boolean" | "number" | "string";
1584
- default: string | number | boolean;
1585
- min?: number | undefined;
1586
- max?: number | undefined;
1587
- step?: number | undefined;
1588
- unit?: string | undefined;
1589
- options?: string[] | undefined;
1590
- }[];
1591
- parts: {
1592
- id: string;
1593
- label?: string | undefined;
1594
- type?: string | undefined;
1595
- bounds?: {
1596
- min: [number, number, number];
1597
- max: [number, number, number];
1598
- } | undefined;
1599
- }[];
1600
- surfaces: {
1601
- part?: string | undefined;
1602
- y: number;
1603
- polygon: [number, number][];
1604
- }[];
1605
- slots: {
1606
- id: string;
1607
- label?: string | undefined;
1608
- color?: string | undefined;
1609
- roughness?: number | undefined;
1610
- metalness?: number | undefined;
1611
- transparent?: boolean | undefined;
1612
- emissive?: boolean | undefined;
1613
- }[];
1614
- anchors: {
1615
- id: string;
1616
- position: [number, number, number];
1617
- normal?: [number, number, number] | undefined;
1618
- }[];
1619
- lights: {
1620
- id: string;
1621
- position: [number, number, number];
1622
- color: string;
1623
- intensity: number;
1624
- distance?: number | undefined;
1625
- spot?: {
1626
- direction: [number, number, number];
1627
- angle: number;
1628
- softness: number;
1629
- } | undefined;
1630
- shadows?: boolean | undefined;
1631
- glow?: {
1632
- size: number;
1633
- strength: number;
1634
- } | undefined;
1635
- }[];
1636
- undersides: {
1637
- part?: string | undefined;
1638
- polygon: [number, number][];
1639
- plane: [number, number, number, number];
1640
- }[];
1641
- animations: {
1642
- name: string;
1643
- duration: number;
1644
- }[];
1645
- cutters?: {
1646
- host: "ceiling" | "mounted" | "slab" | "wall";
1647
- polygon: number[][];
1648
- minY: number;
1649
- maxY: number;
1650
- }[] | undefined;
1651
- cutout: boolean;
1652
- collider: boolean;
1653
- shape?: {
1654
- tolerance: number;
1655
- bands: {
1656
- y0: number;
1657
- y1: number;
1658
- polygons: {
1659
- outer: [number, number][];
1660
- holes?: [number, number][][] | undefined;
1661
- }[];
1662
- }[];
1663
- } | undefined;
1664
- triangles: number;
1665
- coverage?: number | undefined;
1666
- uncovered?: {
1667
- min: [number, number];
1668
- max: [number, number];
1669
- }[] | undefined;
1348
+ radius: number;
1349
+ width: number;
1350
+ depth: number;
1351
+ edgeSoftness: number;
1352
+ baseHeight: number;
1353
+ capitalHeight: number;
1354
+ shaftProfile: "baluster" | "bulged" | "hourglass" | "straight" | "tapered";
1355
+ shaftTaper: number;
1356
+ shaftBulge: number;
1357
+ shaftStartScale: number;
1358
+ shaftEndScale: number;
1359
+ shaftSegmentCount: number;
1360
+ shaftTwistStep: number;
1361
+ shaftCornerRadius: number;
1362
+ shaftDetail: "fluted" | "lathe-turned" | "none" | "panelled" | "spiral";
1363
+ baseStyle: "lotus" | "none" | "panelled-pedestal" | "ribbed-lotus" | "round-rings" | "simple-square" | "square-plinth" | "stepped-square";
1364
+ baseWidthScale: number;
1365
+ baseDepthScale: number;
1366
+ baseTierCount: number;
1367
+ baseStepSpread: number;
1368
+ basePlinthHeightRatio: number;
1369
+ baseRoundBandScale: number;
1370
+ baseNeckScale: number;
1371
+ baseRoundBandCount: number;
1372
+ baseRibCount: number;
1373
+ baseCarvingLevel: number;
1374
+ basePanelInset: number;
1375
+ capitalStyle: "corinthian-leaf" | "doric" | "ionic-volute" | "leaf-carved" | "none" | "rounded" | "simple" | "simple-slab" | "south-indian-bracket" | "stepped" | "volute" | "wood-bracket";
1376
+ capitalWidthScale: number;
1377
+ capitalDepthScale: number;
1378
+ capitalTierCount: number;
1379
+ capitalStepSpread: number;
1380
+ capitalBandCount: number;
1381
+ voluteSize: number;
1382
+ voluteCount: number;
1383
+ leafCount: number;
1384
+ leafRows: number;
1385
+ bracketDepth: number;
1386
+ bracketTierCount: number;
1387
+ pendantCount: number;
1388
+ capitalCarvingLevel: number;
1389
+ ringCount: number;
1390
+ ringPlacement: "bottom" | "ends" | "even" | "top";
1391
+ ringThickness: number;
1392
+ ringSpread: number;
1393
+ fluteCount: number;
1394
+ fluteDepth: number;
1395
+ fluteWidth: number;
1396
+ spiralTwist: number;
1397
+ spiralRibCount: number;
1398
+ panelCount: number;
1399
+ panelInsetDepth: number;
1400
+ panelShape: "arched" | "diamond" | "rectangle";
1401
+ latheRingCount: number;
1402
+ latheRingSpacing: "bottom" | "ends" | "even" | "top";
1403
+ carvingLevel: number;
1404
+ carvingPlacement: "all" | "base" | "capital" | "shaft";
1405
+ lowerBandEnabled: boolean;
1406
+ lowerBandHeight: number;
1407
+ lowerBandCarvingLevel: number;
1408
+ dentilCount: number;
1409
+ beadCount: number;
1410
+ supportStyle: "a-frame" | "box-frame" | "k-brace" | "portal-frame" | "single-strut" | "trestle" | "tripod" | "v-frame" | "vertical" | "x-brace" | "y-frame";
1411
+ braceWidth: number;
1412
+ braceDepth: number;
1413
+ braceBottomSpread: number;
1414
+ braceTopSpread: number;
1415
+ bracePlateEnabled: boolean;
1416
+ role?: "ornament" | "post" | undefined;
1417
+ postBase?: "none" | "pier" | "post-base" | undefined;
1418
+ material?: {
1419
+ id?: string | undefined;
1420
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1421
+ properties?: {
1422
+ color: string;
1423
+ roughness: number;
1424
+ metalness: number;
1425
+ opacity: number;
1426
+ transparent: boolean;
1427
+ side: "back" | "double" | "front";
1428
+ } | undefined;
1429
+ texture?: {
1430
+ url: string;
1431
+ repeat?: [number, number] | undefined;
1432
+ scale?: number | undefined;
1433
+ offset?: [number, number] | undefined;
1434
+ normalMap?: string | undefined;
1435
+ normalScale?: number | undefined;
1436
+ bumpMap?: string | undefined;
1437
+ bumpScale?: number | undefined;
1438
+ } | undefined;
1439
+ } | undefined;
1440
+ materialPreset?: string | undefined;
1441
+ slots?: Record<string, string> | undefined;
1442
+ type: "column";
1443
+ } | {
1444
+ object: "node";
1445
+ name?: string | undefined;
1446
+ parentId: string | null;
1447
+ visible: boolean;
1448
+ camera?: {
1449
+ position: [number, number, number];
1450
+ target: [number, number, number];
1451
+ mode: "orthographic" | "perspective";
1452
+ fov?: number | undefined;
1453
+ zoom?: number | undefined;
1454
+ } | undefined;
1455
+ metadata: Record<string, unknown>;
1456
+ provenance?: {
1457
+ refs: {
1458
+ ns?: string | undefined;
1459
+ id: string;
1460
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
1461
+ }[];
1462
+ lineage?: {
1463
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
1464
+ fromIds: string[];
1465
+ } | undefined;
1466
+ } | undefined;
1467
+ id: `rseg_${string}`;
1468
+ material?: {
1469
+ id?: string | undefined;
1470
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1471
+ properties?: {
1472
+ color: string;
1473
+ roughness: number;
1474
+ metalness: number;
1475
+ opacity: number;
1476
+ transparent: boolean;
1477
+ side: "back" | "double" | "front";
1478
+ } | undefined;
1479
+ texture?: {
1480
+ url: string;
1481
+ repeat?: [number, number] | undefined;
1482
+ scale?: number | undefined;
1483
+ offset?: [number, number] | undefined;
1484
+ normalMap?: string | undefined;
1485
+ normalScale?: number | undefined;
1486
+ bumpMap?: string | undefined;
1487
+ bumpScale?: number | undefined;
1488
+ } | undefined;
1489
+ } | undefined;
1490
+ materialPreset?: string | undefined;
1491
+ topMaterial?: {
1492
+ id?: string | undefined;
1493
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1494
+ properties?: {
1495
+ color: string;
1496
+ roughness: number;
1497
+ metalness: number;
1498
+ opacity: number;
1499
+ transparent: boolean;
1500
+ side: "back" | "double" | "front";
1501
+ } | undefined;
1502
+ texture?: {
1503
+ url: string;
1504
+ repeat?: [number, number] | undefined;
1505
+ scale?: number | undefined;
1506
+ offset?: [number, number] | undefined;
1507
+ normalMap?: string | undefined;
1508
+ normalScale?: number | undefined;
1509
+ bumpMap?: string | undefined;
1510
+ bumpScale?: number | undefined;
1511
+ } | undefined;
1512
+ } | undefined;
1513
+ topMaterialPreset?: string | undefined;
1514
+ edgeMaterial?: {
1515
+ id?: string | undefined;
1516
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1517
+ properties?: {
1518
+ color: string;
1519
+ roughness: number;
1520
+ metalness: number;
1521
+ opacity: number;
1522
+ transparent: boolean;
1523
+ side: "back" | "double" | "front";
1524
+ } | undefined;
1525
+ texture?: {
1526
+ url: string;
1527
+ repeat?: [number, number] | undefined;
1528
+ scale?: number | undefined;
1529
+ offset?: [number, number] | undefined;
1530
+ normalMap?: string | undefined;
1531
+ normalScale?: number | undefined;
1532
+ bumpMap?: string | undefined;
1533
+ bumpScale?: number | undefined;
1534
+ } | undefined;
1535
+ } | undefined;
1536
+ edgeMaterialPreset?: string | undefined;
1537
+ wallMaterial?: {
1538
+ id?: string | undefined;
1539
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1540
+ properties?: {
1541
+ color: string;
1542
+ roughness: number;
1543
+ metalness: number;
1544
+ opacity: number;
1545
+ transparent: boolean;
1546
+ side: "back" | "double" | "front";
1547
+ } | undefined;
1548
+ texture?: {
1549
+ url: string;
1550
+ repeat?: [number, number] | undefined;
1551
+ scale?: number | undefined;
1552
+ offset?: [number, number] | undefined;
1553
+ normalMap?: string | undefined;
1554
+ normalScale?: number | undefined;
1555
+ bumpMap?: string | undefined;
1556
+ bumpScale?: number | undefined;
1557
+ } | undefined;
1558
+ } | undefined;
1559
+ wallMaterialPreset?: string | undefined;
1560
+ position: [number, number, number];
1561
+ rotation: number;
1562
+ roofType: "barrel" | "conical" | "dutch" | "flat" | "gable" | "gambrel" | "hip" | "mansard" | "shed";
1563
+ barrelRise?: number | undefined;
1564
+ barrelSegments?: number | undefined;
1565
+ roofSystem?: "glazed" | "standard" | undefined;
1566
+ glazing?: {
1567
+ across: {
1568
+ layout: "count" | "fixed-spacing" | "maximum-spacing";
1569
+ count: number;
1570
+ spacing: number;
1571
+ alignment: "center" | "end" | "start";
1572
+ };
1573
+ along: {
1574
+ layout: "count" | "fixed-spacing" | "maximum-spacing";
1575
+ count: number;
1576
+ spacing: number;
1577
+ alignment: "center" | "end" | "start";
1578
+ };
1579
+ frameWidth: number;
1580
+ frameDepth: number;
1581
+ glassThickness: number;
1582
+ frameColor: string;
1583
+ glassColor: string;
1584
+ glassOpacity: number;
1585
+ glassRoughness: number;
1586
+ glazedEnds: boolean;
1587
+ panelType: "empty" | "glass" | "solid";
1588
+ panels: {
1589
+ face: string;
1590
+ column: number;
1591
+ row: number;
1592
+ type: "empty" | "glass" | "solid";
1593
+ }[];
1594
+ } | undefined;
1595
+ slots?: Record<string, string> | undefined;
1596
+ width: number;
1597
+ depth: number;
1598
+ conicalStartAngle?: number | undefined;
1599
+ conicalSweepAngle?: number | undefined;
1600
+ conicalFullCircle?: boolean | undefined;
1601
+ trim: {
1602
+ left: number;
1603
+ right: number;
1604
+ front: number;
1605
+ back: number;
1606
+ frontLeft: number;
1607
+ frontRight: number;
1608
+ backLeft: number;
1609
+ backRight: number;
1610
+ frontLeftX: number;
1611
+ frontLeftZ: number;
1612
+ frontRightX: number;
1613
+ frontRightZ: number;
1614
+ backLeftX: number;
1615
+ backLeftZ: number;
1616
+ backRightX: number;
1617
+ backRightZ: number;
1618
+ };
1619
+ wallHeight: number;
1620
+ pitch: number;
1621
+ wallThickness: number;
1622
+ deckThickness: number;
1623
+ overhang: number;
1624
+ gableOverhang?: number | undefined;
1625
+ shingleThickness: number;
1626
+ buildUp?: {
1627
+ presetId?: string | undefined;
1628
+ roofing: {
1629
+ kind: "architectural-shingle" | "asphalt-3-tab" | "clay-tile" | "concrete-tile" | "slate" | "standing-seam-metal" | "wood-shake";
1630
+ thickness: number;
1631
+ name?: string | undefined;
1632
+ };
1633
+ underlayment?: {
1634
+ kind: "felt-15" | "felt-30" | "ice-and-water" | "synthetic";
1635
+ thickness: number;
1636
+ name?: string | undefined;
1637
+ } | undefined;
1638
+ sheathing: {
1639
+ kind: "osb" | "plywood";
1640
+ thickness: number;
1641
+ name?: string | undefined;
1670
1642
  };
1671
- images?: {
1672
- artifact: string;
1673
- thumbnail: string;
1674
- floorPlan: string;
1643
+ structure: {
1644
+ system: "rafters" | "trusses";
1645
+ size: "2x10" | "2x12" | "2x4" | "2x6" | "2x8";
1646
+ spacing: number;
1647
+ };
1648
+ insulation?: {
1649
+ kind: "batt" | "blown" | "rigid";
1650
+ thickness: number;
1651
+ name?: string | undefined;
1652
+ } | undefined;
1653
+ finish?: {
1654
+ kind: "drywall" | "plaster" | "wood-plank";
1655
+ thickness: number;
1656
+ name?: string | undefined;
1675
1657
  } | undefined;
1676
1658
  } | undefined;
1677
- style: "cluster" | "dravidian-carved" | "faceted" | "fluted" | "lathe-turned" | "plain";
1678
- crossSection: "octagonal" | "rectangular" | "round" | "sixteen-sided" | "square";
1679
- height: number;
1680
- radius: number;
1681
- width: number;
1682
- depth: number;
1683
- edgeSoftness: number;
1684
- baseHeight: number;
1685
- capitalHeight: number;
1686
- shaftProfile: "baluster" | "bulged" | "hourglass" | "straight" | "tapered";
1687
- shaftTaper: number;
1688
- shaftBulge: number;
1689
- shaftStartScale: number;
1690
- shaftEndScale: number;
1691
- shaftSegmentCount: number;
1692
- shaftTwistStep: number;
1693
- shaftCornerRadius: number;
1694
- shaftDetail: "fluted" | "lathe-turned" | "none" | "panelled" | "spiral";
1695
- baseStyle: "lotus" | "none" | "panelled-pedestal" | "ribbed-lotus" | "round-rings" | "simple-square" | "square-plinth" | "stepped-square";
1696
- baseWidthScale: number;
1697
- baseDepthScale: number;
1698
- baseTierCount: number;
1699
- baseStepSpread: number;
1700
- basePlinthHeightRatio: number;
1701
- baseRoundBandScale: number;
1702
- baseNeckScale: number;
1703
- baseRoundBandCount: number;
1704
- baseRibCount: number;
1705
- baseCarvingLevel: number;
1706
- basePanelInset: number;
1707
- capitalStyle: "corinthian-leaf" | "doric" | "ionic-volute" | "leaf-carved" | "none" | "rounded" | "simple" | "simple-slab" | "south-indian-bracket" | "stepped" | "volute" | "wood-bracket";
1708
- capitalWidthScale: number;
1709
- capitalDepthScale: number;
1710
- capitalTierCount: number;
1711
- capitalStepSpread: number;
1712
- capitalBandCount: number;
1713
- voluteSize: number;
1714
- voluteCount: number;
1715
- leafCount: number;
1716
- leafRows: number;
1717
- bracketDepth: number;
1718
- bracketTierCount: number;
1719
- pendantCount: number;
1720
- capitalCarvingLevel: number;
1721
- ringCount: number;
1722
- ringPlacement: "bottom" | "ends" | "even" | "top";
1723
- ringThickness: number;
1724
- ringSpread: number;
1725
- fluteCount: number;
1726
- fluteDepth: number;
1727
- fluteWidth: number;
1728
- spiralTwist: number;
1729
- spiralRibCount: number;
1730
- panelCount: number;
1731
- panelInsetDepth: number;
1732
- panelShape: "arched" | "diamond" | "rectangle";
1733
- latheRingCount: number;
1734
- latheRingSpacing: "bottom" | "ends" | "even" | "top";
1735
- carvingLevel: number;
1736
- carvingPlacement: "all" | "base" | "capital" | "shaft";
1737
- lowerBandEnabled: boolean;
1738
- lowerBandHeight: number;
1739
- lowerBandCarvingLevel: number;
1740
- dentilCount: number;
1741
- beadCount: number;
1742
- supportStyle: "a-frame" | "box-frame" | "k-brace" | "portal-frame" | "single-strut" | "trestle" | "tripod" | "v-frame" | "vertical" | "x-brace" | "y-frame";
1743
- braceWidth: number;
1744
- braceDepth: number;
1745
- braceBottomSpread: number;
1746
- braceTopSpread: number;
1747
- bracePlateEnabled: boolean;
1748
- role?: "ornament" | "post" | undefined;
1749
- postBase?: "none" | "pier" | "post-base" | undefined;
1750
- material?: {
1659
+ arc?: {
1660
+ centerX: number;
1661
+ centerZ: number;
1662
+ radius: number;
1663
+ } | undefined;
1664
+ shedSideInfillSpan?: number | undefined;
1665
+ shedSideInfillMinX?: number | undefined;
1666
+ shedSideInfillMaxX?: number | undefined;
1667
+ shedFootprintPieces?: [number, number][][] | undefined;
1668
+ shedOpenEndSides?: ("left" | "right")[] | undefined;
1669
+ shedJointFrame?: {
1670
+ position: [number, number, number];
1671
+ rotation: number;
1672
+ } | undefined;
1673
+ shedJointOwnerId?: string | undefined;
1674
+ shedJointNeighborIds?: string[] | undefined;
1675
+ shedJointScopeId?: string | undefined;
1676
+ managedByParent: boolean;
1677
+ wallShell: "auto" | "include" | "omit";
1678
+ shedInsetEndPanels: boolean;
1679
+ fascia?: boolean | undefined;
1680
+ eaveCut?: "plumb" | "plumb-level" | "square" | undefined;
1681
+ fasciaHighEdge?: boolean | undefined;
1682
+ fasciaHeight?: number | undefined;
1683
+ fasciaDepth?: number | undefined;
1684
+ fasciaMaterial?: {
1751
1685
  id?: string | undefined;
1752
1686
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1753
1687
  properties?: {
@@ -1769,9 +1703,87 @@ export declare function floorsOf(nodes: SceneNodes): {
1769
1703
  bumpScale?: number | undefined;
1770
1704
  } | undefined;
1771
1705
  } | undefined;
1772
- materialPreset?: string | undefined;
1773
- slots?: Record<string, string> | undefined;
1774
- type: "column";
1706
+ fasciaMaterialPreset?: string | undefined;
1707
+ heelMaterial?: {
1708
+ id?: string | undefined;
1709
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1710
+ properties?: {
1711
+ color: string;
1712
+ roughness: number;
1713
+ metalness: number;
1714
+ opacity: number;
1715
+ transparent: boolean;
1716
+ side: "back" | "double" | "front";
1717
+ } | undefined;
1718
+ texture?: {
1719
+ url: string;
1720
+ repeat?: [number, number] | undefined;
1721
+ scale?: number | undefined;
1722
+ offset?: [number, number] | undefined;
1723
+ normalMap?: string | undefined;
1724
+ normalScale?: number | undefined;
1725
+ bumpMap?: string | undefined;
1726
+ bumpScale?: number | undefined;
1727
+ } | undefined;
1728
+ } | undefined;
1729
+ heelMaterialPreset?: string | undefined;
1730
+ gableLeftMaterial?: {
1731
+ id?: string | undefined;
1732
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1733
+ properties?: {
1734
+ color: string;
1735
+ roughness: number;
1736
+ metalness: number;
1737
+ opacity: number;
1738
+ transparent: boolean;
1739
+ side: "back" | "double" | "front";
1740
+ } | undefined;
1741
+ texture?: {
1742
+ url: string;
1743
+ repeat?: [number, number] | undefined;
1744
+ scale?: number | undefined;
1745
+ offset?: [number, number] | undefined;
1746
+ normalMap?: string | undefined;
1747
+ normalScale?: number | undefined;
1748
+ bumpMap?: string | undefined;
1749
+ bumpScale?: number | undefined;
1750
+ } | undefined;
1751
+ } | undefined;
1752
+ gableLeftMaterialPreset?: string | undefined;
1753
+ gableRightMaterial?: {
1754
+ id?: string | undefined;
1755
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1756
+ properties?: {
1757
+ color: string;
1758
+ roughness: number;
1759
+ metalness: number;
1760
+ opacity: number;
1761
+ transparent: boolean;
1762
+ side: "back" | "double" | "front";
1763
+ } | undefined;
1764
+ texture?: {
1765
+ url: string;
1766
+ repeat?: [number, number] | undefined;
1767
+ scale?: number | undefined;
1768
+ offset?: [number, number] | undefined;
1769
+ normalMap?: string | undefined;
1770
+ normalScale?: number | undefined;
1771
+ bumpMap?: string | undefined;
1772
+ bumpScale?: number | undefined;
1773
+ } | undefined;
1774
+ } | undefined;
1775
+ gableRightMaterialPreset?: string | undefined;
1776
+ gambrelLowerWidthRatio: number;
1777
+ gambrelLowerHeightRatio: number;
1778
+ mansardSteepWidthRatio: number;
1779
+ mansardSteepHeightRatio: number;
1780
+ dutchHipWidthRatio: number;
1781
+ dutchHipHeightRatio: number;
1782
+ dutchWaistLengthRatio: number;
1783
+ dutchGabletRake: number;
1784
+ dutchTopRakeThickness: number;
1785
+ children: string[];
1786
+ type: "roof-segment";
1775
1787
  } | {
1776
1788
  object: "node";
1777
1789
  name?: string | undefined;
@@ -1960,7 +1972,7 @@ export declare function floorsOf(nodes: SceneNodes): {
1960
1972
  cavityInsulation?: string | undefined;
1961
1973
  } | undefined;
1962
1974
  slots?: Record<string, string> | undefined;
1963
- children: `rseg_${string}`[];
1975
+ children: string[];
1964
1976
  type: "roof";
1965
1977
  } | {
1966
1978
  object: "node";
@@ -2515,6 +2527,7 @@ export declare function floorsOf(nodes: SceneNodes): {
2515
2527
  } | undefined;
2516
2528
  justification?: "a" | "b" | undefined;
2517
2529
  height?: number | undefined;
2530
+ endHeightOffset?: number | undefined;
2518
2531
  curveOffset?: number | undefined;
2519
2532
  supportSlabId?: string | undefined;
2520
2533
  supportOffset?: number | undefined;
@@ -2788,11 +2801,75 @@ export declare function floorsOf(nodes: SceneNodes): {
2788
2801
  toHeight?: number | undefined;
2789
2802
  } | undefined;
2790
2803
  } | undefined;
2791
- start: [number, number];
2792
- end: [number, number];
2793
- frontSide: "exterior" | "interior" | "unknown";
2794
- backSide: "exterior" | "interior" | "unknown";
2795
- type: "wall";
2804
+ start: [number, number];
2805
+ end: [number, number];
2806
+ frontSide: "exterior" | "interior" | "unknown";
2807
+ backSide: "exterior" | "interior" | "unknown";
2808
+ type: "wall";
2809
+ } | {
2810
+ object: "node";
2811
+ name?: string | undefined;
2812
+ parentId: string | null;
2813
+ visible: boolean;
2814
+ camera?: {
2815
+ position: [number, number, number];
2816
+ target: [number, number, number];
2817
+ mode: "orthographic" | "perspective";
2818
+ fov?: number | undefined;
2819
+ zoom?: number | undefined;
2820
+ } | undefined;
2821
+ metadata: Record<string, unknown>;
2822
+ provenance?: {
2823
+ refs: {
2824
+ ns?: string | undefined;
2825
+ id: string;
2826
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
2827
+ }[];
2828
+ lineage?: {
2829
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
2830
+ fromIds: string[];
2831
+ } | undefined;
2832
+ } | undefined;
2833
+ id: `separator_${string}`;
2834
+ start: [number, number];
2835
+ end: [number, number];
2836
+ type: "separator";
2837
+ } | {
2838
+ object: "node";
2839
+ name?: string | undefined;
2840
+ parentId: string | null;
2841
+ visible: boolean;
2842
+ camera?: {
2843
+ position: [number, number, number];
2844
+ target: [number, number, number];
2845
+ mode: "orthographic" | "perspective";
2846
+ fov?: number | undefined;
2847
+ zoom?: number | undefined;
2848
+ } | undefined;
2849
+ metadata: Record<string, unknown>;
2850
+ provenance?: {
2851
+ refs: {
2852
+ ns?: string | undefined;
2853
+ id: string;
2854
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
2855
+ }[];
2856
+ lineage?: {
2857
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
2858
+ fromIds: string[];
2859
+ } | undefined;
2860
+ } | undefined;
2861
+ id: `floor-opening_${string}`;
2862
+ polygon: [number, number][];
2863
+ hostZoneId?: string | undefined;
2864
+ legacyPlateCuts?: Record<string, [number, number][][]> | undefined;
2865
+ legacyCeilingCuts?: Record<string, [number, number][][]> | undefined;
2866
+ source: string;
2867
+ ownerId?: string | undefined;
2868
+ surfaceId?: string | undefined;
2869
+ drawnOn: "ceiling" | "floor";
2870
+ cutsPrimary: boolean;
2871
+ cutsAdjacent: boolean;
2872
+ type: "floor-opening";
2796
2873
  } | {
2797
2874
  object: "node";
2798
2875
  name?: string | undefined;
@@ -2911,42 +2988,18 @@ export declare function floorsOf(nodes: SceneNodes): {
2911
2988
  fromIds: string[];
2912
2989
  } | undefined;
2913
2990
  } | undefined;
2914
- id: `construction-dimension_${string}`;
2915
- anchors: ({
2916
- kind: "feature";
2917
- reference: {
2918
- nodeId: string;
2919
- featureId: string;
2920
- parameters?: Record<string, string | number | boolean> | undefined;
2921
- };
2922
- fallback: [number, number, number];
2923
- } | [number, number, number])[];
2924
- baseline: {
2925
- origin: [number, number];
2926
- direction: [number, number];
2927
- };
2928
- chainMode: "continuous" | "point-to-point";
2929
- mode: "angular" | "arc-length" | "center-mark" | "chord" | "coordinate" | "diameter" | "linear" | "radius";
2930
- featureCount: number;
2931
- showCenterMark: boolean;
2932
- prefix: string;
2933
- suffix: string;
2934
- textOverride: string | null;
2935
- datumPolicy: "centerline" | "finish-face" | "structural-face" | "wall-face";
2936
- terminator: "architectural-tick" | "dot" | "filled-arrow" | "open-arrow";
2937
- textPosition: "above" | "centered";
2938
- imperialPrecision: "1" | "1/16" | "1/2" | "1/4" | "1/8";
2939
- metricNotation: "meters" | "millimeters";
2940
- extensionStartGap: number;
2941
- extensionOvershoot: number;
2942
- drawingType: "floor-plan" | "foundation-plan" | "reflected-ceiling-plan" | "roof-plan" | "site-plan";
2943
- drawingOverrides: {
2944
- drawingType: "floor-plan" | "foundation-plan" | "reflected-ceiling-plan" | "roof-plan" | "site-plan";
2945
- presentation: "controlled" | "omit" | "shown";
2946
- suppressedSegmentIndexes: number[];
2947
- }[];
2948
- controllingDimensionId: `construction-dimension_${string}` | null;
2949
- type: "construction-dimension";
2991
+ id: `beam_${string}`;
2992
+ start: [number, number];
2993
+ end: [number, number];
2994
+ width: number;
2995
+ depth: number;
2996
+ size?: string | undefined;
2997
+ plies: number;
2998
+ material: "glulam" | "lvl" | "pressure-treated" | "sawn" | "steel";
2999
+ placement: "dropped" | "flush";
3000
+ topElevation?: number | undefined;
3001
+ supportSlabId?: string | undefined;
3002
+ type: "beam";
2950
3003
  } | {
2951
3004
  object: "node";
2952
3005
  name?: string | undefined;
@@ -3495,8 +3548,7 @@ export declare function floorsOf(nodes: SceneNodes): {
3495
3548
  fromIds: string[];
3496
3549
  } | undefined;
3497
3550
  } | undefined;
3498
- id: `ceiling_${string}`;
3499
- children: (`item_${string}` | `procedural-item_${string}`)[];
3551
+ id: `sseg_${string}`;
3500
3552
  material?: {
3501
3553
  id?: string | undefined;
3502
3554
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
@@ -3521,48 +3573,34 @@ export declare function floorsOf(nodes: SceneNodes): {
3521
3573
  } | undefined;
3522
3574
  materialPreset?: string | undefined;
3523
3575
  slots?: Record<string, string> | undefined;
3524
- polygon: [number, number][];
3525
- holes: [number, number][][];
3526
- holeMetadata: {
3527
- source: "elevator" | "floor-opening" | "manual" | "room" | "stair";
3528
- openingId?: string | undefined;
3529
- stairId?: string | undefined;
3530
- elevatorId?: string | undefined;
3531
- }[];
3532
- openingIds?: string[] | undefined;
3533
- height?: number | undefined;
3534
- buildUp?: {
3535
- presetId?: string | undefined;
3536
- finish?: {
3537
- kind: "drywall" | "plaster" | "wood-plank";
3538
- thickness: number;
3539
- name?: string | undefined;
3540
- } | undefined;
3541
- framing?: {
3542
- system: "joists" | "truss-chords";
3543
- size: "2x10" | "2x12" | "2x4" | "2x6" | "2x8";
3544
- spacing: number;
3545
- } | undefined;
3546
- decking?: {
3547
- kind: "osb" | "plywood";
3548
- thickness: number;
3549
- name?: string | undefined;
3550
- } | undefined;
3551
- insulation?: {
3552
- kind: "batt" | "blown" | "rigid";
3553
- thickness: number;
3554
- name?: string | undefined;
3555
- } | undefined;
3576
+ position: [number, number, number];
3577
+ rotation: number;
3578
+ segmentType: "landing" | "stair";
3579
+ width: number;
3580
+ length: number;
3581
+ height: number;
3582
+ stepCount: number;
3583
+ attachmentSide: "front" | "left" | "right";
3584
+ fillToFloor: boolean;
3585
+ construction?: {
3586
+ mode: "center-stringer" | "open" | "side-stringers" | "solid" | "waist";
3587
+ waistThickness: number;
3588
+ treadThickness: number;
3589
+ riserThickness: number;
3590
+ nosing: number;
3591
+ finishThickness: number;
3592
+ closedRisers: boolean;
3593
+ stringerWidth: number;
3594
+ stringerDepth: number;
3556
3595
  } | undefined;
3557
- regions?: {
3558
- id: string;
3559
- polygon: [number, number][];
3560
- finish: string | Record<string, unknown>;
3561
- }[] | undefined;
3562
- boundary?: "auto" | undefined;
3563
- zoneId?: string | undefined;
3564
- autoFromWalls: boolean;
3565
- type: "ceiling";
3596
+ winder?: {
3597
+ turn: "left" | "right";
3598
+ innerGap: number;
3599
+ walkingLineOffset: number;
3600
+ division: "equal-angle" | "equal-going";
3601
+ } | undefined;
3602
+ thickness: number;
3603
+ type: "stair-segment";
3566
3604
  } | {
3567
3605
  object: "node";
3568
3606
  name?: string | undefined;
@@ -3860,94 +3898,89 @@ export declare function floorsOf(nodes: SceneNodes): {
3860
3898
  fromIds: string[];
3861
3899
  } | undefined;
3862
3900
  } | undefined;
3863
- id: `shelf_${string}`;
3864
- children: string[];
3865
- position: [number, number, number];
3866
- rotation: [number, number, number];
3867
- supportSlabId?: string | undefined;
3868
- width: number;
3869
- depth: number;
3870
- thickness: number;
3871
- height: number;
3872
- style: "bookshelf" | "cubby" | "open-rack" | "wall-shelf";
3873
- rows: number;
3874
- columns: number;
3875
- withBack: boolean;
3876
- withSides: boolean;
3877
- withBottom: boolean;
3878
- bracketStyle: "hidden" | "industrial" | "minimal";
3879
- material?: {
3880
- id?: string | undefined;
3881
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
3882
- properties?: {
3883
- color: string;
3884
- roughness: number;
3885
- metalness: number;
3886
- opacity: number;
3887
- transparent: boolean;
3888
- side: "back" | "double" | "front";
3889
- } | undefined;
3890
- texture?: {
3891
- url: string;
3892
- repeat?: [number, number] | undefined;
3893
- scale?: number | undefined;
3894
- offset?: [number, number] | undefined;
3895
- normalMap?: string | undefined;
3896
- normalScale?: number | undefined;
3897
- bumpMap?: string | undefined;
3898
- bumpScale?: number | undefined;
3899
- } | undefined;
3900
- } | undefined;
3901
- materialPreset?: string | undefined;
3902
- slots?: Record<string, string> | undefined;
3903
- type: "shelf";
3904
- } | {
3905
- object: "node";
3906
- name?: string | undefined;
3907
- parentId: string | null;
3908
- visible: boolean;
3909
- camera?: {
3910
- position: [number, number, number];
3911
- target: [number, number, number];
3912
- mode: "orthographic" | "perspective";
3913
- fov?: number | undefined;
3914
- zoom?: number | undefined;
3915
- } | undefined;
3916
- metadata: Record<string, unknown>;
3917
- provenance?: {
3918
- refs: {
3919
- ns?: string | undefined;
3920
- id: string;
3921
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
3922
- }[];
3923
- lineage?: {
3924
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
3925
- fromIds: string[];
3926
- } | undefined;
3927
- } | undefined;
3928
- id: `duct-fitting_${string}`;
3929
- position: [number, number, number];
3930
- rotation: [number, number, number];
3931
- fittingType: "access-panel" | "coupling" | "cross" | "damper" | "elbow" | "end-cap" | "reducer" | "tee" | "transition";
3932
- shape: "oval" | "rect" | "round";
3933
- inletShape?: "oval" | "rect" | "round" | undefined;
3934
- outletShape?: "oval" | "rect" | "round" | undefined;
3935
- width: number;
3936
- height: number;
3937
- shape2: "oval" | "rect" | "round";
3938
- width2: number;
3939
- height2: number;
3940
- angle: number;
3941
- branchAngle: number;
3942
- diameter: number;
3943
- diameter2: number;
3944
- ductMaterial: "duct-board" | "flex" | "sheet-metal";
3945
- system: "return" | "supply";
3946
- damperAngle: number;
3947
- panelWidth: number;
3948
- panelHeight: number;
3949
- slots?: Record<string, string> | undefined;
3950
- type: "duct-fitting";
3901
+ id: `measurement_${string}`;
3902
+ measurement: {
3903
+ kind: "distance";
3904
+ points: [{
3905
+ kind: "feature";
3906
+ reference: {
3907
+ nodeId: string;
3908
+ featureId: string;
3909
+ parameters?: Record<string, string | number | boolean> | undefined;
3910
+ };
3911
+ fallback: [number, number, number];
3912
+ } | [number, number, number], {
3913
+ kind: "feature";
3914
+ reference: {
3915
+ nodeId: string;
3916
+ featureId: string;
3917
+ parameters?: Record<string, string | number | boolean> | undefined;
3918
+ };
3919
+ fallback: [number, number, number];
3920
+ } | [number, number, number]];
3921
+ } | {
3922
+ kind: "angle";
3923
+ points: [{
3924
+ kind: "feature";
3925
+ reference: {
3926
+ nodeId: string;
3927
+ featureId: string;
3928
+ parameters?: Record<string, string | number | boolean> | undefined;
3929
+ };
3930
+ fallback: [number, number, number];
3931
+ } | [number, number, number], {
3932
+ kind: "feature";
3933
+ reference: {
3934
+ nodeId: string;
3935
+ featureId: string;
3936
+ parameters?: Record<string, string | number | boolean> | undefined;
3937
+ };
3938
+ fallback: [number, number, number];
3939
+ } | [number, number, number], {
3940
+ kind: "feature";
3941
+ reference: {
3942
+ nodeId: string;
3943
+ featureId: string;
3944
+ parameters?: Record<string, string | number | boolean> | undefined;
3945
+ };
3946
+ fallback: [number, number, number];
3947
+ } | [number, number, number]];
3948
+ } | {
3949
+ kind: "area";
3950
+ base: ({
3951
+ kind: "feature";
3952
+ reference: {
3953
+ nodeId: string;
3954
+ featureId: string;
3955
+ parameters?: Record<string, string | number | boolean> | undefined;
3956
+ };
3957
+ fallback: [number, number, number];
3958
+ } | [number, number, number])[];
3959
+ } | {
3960
+ kind: "perimeter";
3961
+ base: ({
3962
+ kind: "feature";
3963
+ reference: {
3964
+ nodeId: string;
3965
+ featureId: string;
3966
+ parameters?: Record<string, string | number | boolean> | undefined;
3967
+ };
3968
+ fallback: [number, number, number];
3969
+ } | [number, number, number])[];
3970
+ } | {
3971
+ kind: "volume";
3972
+ base: ({
3973
+ kind: "feature";
3974
+ reference: {
3975
+ nodeId: string;
3976
+ featureId: string;
3977
+ parameters?: Record<string, string | number | boolean> | undefined;
3978
+ };
3979
+ fallback: [number, number, number];
3980
+ } | [number, number, number])[];
3981
+ extrusion: [number, number, number];
3982
+ };
3983
+ type: "measurement";
3951
3984
  } | {
3952
3985
  object: "node";
3953
3986
  name?: string | undefined;
@@ -3972,19 +4005,11 @@ export declare function floorsOf(nodes: SceneNodes): {
3972
4005
  fromIds: string[];
3973
4006
  } | undefined;
3974
4007
  } | undefined;
3975
- id: `duct-terminal_${string}`;
4008
+ id: `spawn_${string}`;
3976
4009
  position: [number, number, number];
3977
4010
  rotation: number;
3978
4011
  supportSlabId?: string | undefined;
3979
- terminalType: "diffuser" | "return-grille" | "supply-register";
3980
- mount: "ceiling" | "floor" | "wall";
3981
- width: number;
3982
- depth: number;
3983
- collarShape: "oval" | "rect" | "round";
3984
- collarDiameter: number;
3985
- collarWidth: number;
3986
- collarHeight: number;
3987
- type: "duct-terminal";
4012
+ type: "spawn";
3988
4013
  } | {
3989
4014
  object: "node";
3990
4015
  name?: string | undefined;
@@ -4009,51 +4034,47 @@ export declare function floorsOf(nodes: SceneNodes): {
4009
4034
  fromIds: string[];
4010
4035
  } | undefined;
4011
4036
  } | undefined;
4012
- id: `hvac-equipment_${string}`;
4037
+ id: `shelf_${string}`;
4038
+ children: string[];
4013
4039
  position: [number, number, number];
4014
- rotation: number;
4040
+ rotation: [number, number, number];
4015
4041
  supportSlabId?: string | undefined;
4016
- equipmentType: "air-handler" | "condenser" | "furnace";
4017
4042
  width: number;
4018
4043
  depth: number;
4044
+ thickness: number;
4019
4045
  height: number;
4020
- supplyShape: "oval" | "rect" | "round";
4021
- returnShape: "oval" | "rect" | "round";
4022
- supplyDiameter: number;
4023
- returnDiameter: number;
4024
- supplyWidth: number;
4025
- supplyHeight: number;
4026
- returnWidth: number;
4027
- returnHeight: number;
4028
- type: "hvac-equipment";
4029
- } | {
4030
- object: "node";
4031
- name?: string | undefined;
4032
- parentId: string | null;
4033
- visible: boolean;
4034
- camera?: {
4035
- position: [number, number, number];
4036
- target: [number, number, number];
4037
- mode: "orthographic" | "perspective";
4038
- fov?: number | undefined;
4039
- zoom?: number | undefined;
4040
- } | undefined;
4041
- metadata: Record<string, unknown>;
4042
- provenance?: {
4043
- refs: {
4044
- ns?: string | undefined;
4045
- id: string;
4046
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
4047
- }[];
4048
- lineage?: {
4049
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
4050
- fromIds: string[];
4046
+ style: "bookshelf" | "cubby" | "open-rack" | "wall-shelf";
4047
+ rows: number;
4048
+ columns: number;
4049
+ withBack: boolean;
4050
+ withSides: boolean;
4051
+ withBottom: boolean;
4052
+ bracketStyle: "hidden" | "industrial" | "minimal";
4053
+ material?: {
4054
+ id?: string | undefined;
4055
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
4056
+ properties?: {
4057
+ color: string;
4058
+ roughness: number;
4059
+ metalness: number;
4060
+ opacity: number;
4061
+ transparent: boolean;
4062
+ side: "back" | "double" | "front";
4063
+ } | undefined;
4064
+ texture?: {
4065
+ url: string;
4066
+ repeat?: [number, number] | undefined;
4067
+ scale?: number | undefined;
4068
+ offset?: [number, number] | undefined;
4069
+ normalMap?: string | undefined;
4070
+ normalScale?: number | undefined;
4071
+ bumpMap?: string | undefined;
4072
+ bumpScale?: number | undefined;
4051
4073
  } | undefined;
4052
4074
  } | undefined;
4053
- id: `liquid-line_${string}`;
4054
- path: [number, number, number][];
4055
- diameter: number;
4056
- type: "liquid-line";
4075
+ materialPreset?: string | undefined;
4076
+ slots?: Record<string, string> | undefined;
4077
+ type: "shelf";
4057
4078
  } | {
4058
4079
  object: "node";
4059
4080
  name?: string | undefined;
@@ -4078,7 +4099,7 @@ export declare function floorsOf(nodes: SceneNodes): {
4078
4099
  fromIds: string[];
4079
4100
  } | undefined;
4080
4101
  } | undefined;
4081
- id: `pipe-segment_${string}`;
4102
+ id: `duct-segment_${string}`;
4082
4103
  path: [number, number, number][];
4083
4104
  autoHangers?: boolean | undefined;
4084
4105
  hangerOverrides?: Record<string, {
@@ -4096,10 +4117,18 @@ export declare function floorsOf(nodes: SceneNodes): {
4096
4117
  endUV: [number, number];
4097
4118
  offset: number;
4098
4119
  } | undefined;
4120
+ shape: "oval" | "rect" | "round";
4099
4121
  diameter: number;
4100
- pipeMaterial: "abs" | "cast-iron" | "pvc";
4101
- system: "vent" | "waste";
4102
- type: "pipe-segment";
4122
+ width: number;
4123
+ height: number;
4124
+ roll: number;
4125
+ ductMaterial: "duct-board" | "flex" | "sheet-metal" | "spiral";
4126
+ seamDetail: boolean;
4127
+ insulated: boolean;
4128
+ insulationR: number;
4129
+ system: "return" | "supply";
4130
+ slots?: Record<string, string> | undefined;
4131
+ type: "duct-segment";
4103
4132
  } | {
4104
4133
  object: "node";
4105
4134
  name?: string | undefined;
@@ -4124,17 +4153,29 @@ export declare function floorsOf(nodes: SceneNodes): {
4124
4153
  fromIds: string[];
4125
4154
  } | undefined;
4126
4155
  } | undefined;
4127
- id: `pipe-fitting_${string}`;
4156
+ id: `duct-fitting_${string}`;
4128
4157
  position: [number, number, number];
4129
4158
  rotation: [number, number, number];
4130
- fittingType: "cleanout" | "coupling" | "cross" | "elbow" | "end-cap" | "reducer" | "sanitary-tee" | "wye";
4159
+ fittingType: "access-panel" | "coupling" | "cross" | "damper" | "elbow" | "end-cap" | "reducer" | "tee" | "transition";
4160
+ shape: "oval" | "rect" | "round";
4161
+ inletShape?: "oval" | "rect" | "round" | undefined;
4162
+ outletShape?: "oval" | "rect" | "round" | undefined;
4163
+ width: number;
4164
+ height: number;
4165
+ shape2: "oval" | "rect" | "round";
4166
+ width2: number;
4167
+ height2: number;
4131
4168
  angle: number;
4169
+ branchAngle: number;
4132
4170
  diameter: number;
4133
4171
  diameter2: number;
4134
- cleanoutStyle: "end" | "inline";
4135
- pipeMaterial: "abs" | "cast-iron" | "pvc";
4136
- system: "vent" | "waste";
4137
- type: "pipe-fitting";
4172
+ ductMaterial: "duct-board" | "flex" | "sheet-metal";
4173
+ system: "return" | "supply";
4174
+ damperAngle: number;
4175
+ panelWidth: number;
4176
+ panelHeight: number;
4177
+ slots?: Record<string, string> | undefined;
4178
+ type: "duct-fitting";
4138
4179
  } | {
4139
4180
  object: "node";
4140
4181
  name?: string | undefined;
@@ -4159,12 +4200,19 @@ export declare function floorsOf(nodes: SceneNodes): {
4159
4200
  fromIds: string[];
4160
4201
  } | undefined;
4161
4202
  } | undefined;
4162
- id: `level_${string}`;
4163
- 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}`)[];
4164
- level: number;
4165
- baseElevation: number;
4166
- height?: number | undefined;
4167
- type: "level";
4203
+ id: `duct-terminal_${string}`;
4204
+ position: [number, number, number];
4205
+ rotation: number;
4206
+ supportSlabId?: string | undefined;
4207
+ terminalType: "diffuser" | "return-grille" | "supply-register";
4208
+ mount: "ceiling" | "floor" | "wall";
4209
+ width: number;
4210
+ depth: number;
4211
+ collarShape: "oval" | "rect" | "round";
4212
+ collarDiameter: number;
4213
+ collarWidth: number;
4214
+ collarHeight: number;
4215
+ type: "duct-terminal";
4168
4216
  } | {
4169
4217
  object: "node";
4170
4218
  name?: string | undefined;
@@ -4189,56 +4237,26 @@ export declare function floorsOf(nodes: SceneNodes): {
4189
4237
  fromIds: string[];
4190
4238
  } | undefined;
4191
4239
  } | undefined;
4192
- id: `elevator_${string}`;
4193
- material?: {
4194
- id?: string | undefined;
4195
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
4196
- properties?: {
4197
- color: string;
4198
- roughness: number;
4199
- metalness: number;
4200
- opacity: number;
4201
- transparent: boolean;
4202
- side: "back" | "double" | "front";
4203
- } | undefined;
4204
- texture?: {
4205
- url: string;
4206
- repeat?: [number, number] | undefined;
4207
- scale?: number | undefined;
4208
- offset?: [number, number] | undefined;
4209
- normalMap?: string | undefined;
4210
- normalScale?: number | undefined;
4211
- bumpMap?: string | undefined;
4212
- bumpScale?: number | undefined;
4213
- } | undefined;
4214
- } | undefined;
4215
- materialPreset?: string | undefined;
4216
- slots?: Record<string, string> | undefined;
4240
+ id: `hvac-equipment_${string}`;
4217
4241
  position: [number, number, number];
4218
4242
  rotation: number;
4243
+ supportSlabId?: string | undefined;
4244
+ equipmentType: "air-handler" | "condenser" | "furnace";
4219
4245
  width: number;
4220
4246
  depth: number;
4221
- shaftWidth?: number | undefined;
4222
- shaftDepth?: number | undefined;
4223
- shaftWallThickness: number;
4224
- shaftStyle: "glass" | "solid";
4225
- cabHeight: number;
4226
- doorWidth: number;
4227
- doorHeight: number;
4228
- doorStyle: "center-opening" | "single-left" | "single-right";
4229
- doorPanelStyle: "glass-frame" | "segmented-panel" | "solid-panel";
4230
- fromLevelId: string | null;
4231
- toLevelId: string | null;
4232
- servedLevelIds?: string[] | undefined;
4233
- disabledLevelIds: string[];
4234
- serviceOnlyLevelIds: string[];
4235
- defaultLevelId: string | null;
4236
- speed: number;
4237
- doorDurationMs: number;
4238
- dwellMs: number;
4239
- type: "elevator";
4247
+ height: number;
4248
+ supplyShape: "oval" | "rect" | "round";
4249
+ returnShape: "oval" | "rect" | "round";
4250
+ supplyDiameter: number;
4251
+ returnDiameter: number;
4252
+ supplyWidth: number;
4253
+ supplyHeight: number;
4254
+ returnWidth: number;
4255
+ returnHeight: number;
4256
+ type: "hvac-equipment";
4240
4257
  } | {
4241
4258
  object: "node";
4259
+ name?: string | undefined;
4242
4260
  parentId: string | null;
4243
4261
  visible: boolean;
4244
4262
  camera?: {
@@ -4248,6 +4266,7 @@ export declare function floorsOf(nodes: SceneNodes): {
4248
4266
  fov?: number | undefined;
4249
4267
  zoom?: number | undefined;
4250
4268
  } | undefined;
4269
+ metadata: Record<string, unknown>;
4251
4270
  provenance?: {
4252
4271
  refs: {
4253
4272
  ns?: string | undefined;
@@ -4259,13 +4278,12 @@ export declare function floorsOf(nodes: SceneNodes): {
4259
4278
  fromIds: string[];
4260
4279
  } | undefined;
4261
4280
  } | undefined;
4262
- id: `unit_${string}`;
4263
- name: string;
4264
- kind: "apartment" | "commercial" | "common" | "hotel-room";
4265
- members: `zone_${string}`[];
4266
- color: string;
4267
- metadata: Record<string, unknown>;
4268
- type: "unit";
4281
+ id: `lineset_${string}`;
4282
+ path: [number, number, number][];
4283
+ suctionDiameter: number;
4284
+ liquidDiameter: number;
4285
+ insulated: boolean;
4286
+ type: "lineset";
4269
4287
  } | {
4270
4288
  object: "node";
4271
4289
  name?: string | undefined;
@@ -4290,12 +4308,10 @@ export declare function floorsOf(nodes: SceneNodes): {
4290
4308
  fromIds: string[];
4291
4309
  } | undefined;
4292
4310
  } | undefined;
4293
- id: `building_${string}`;
4294
- children: (`elevator_${string}` | `level_${string}` | `unit_${string}`)[];
4295
- position: [number, number, number];
4296
- rotation: [number, number, number];
4297
- groundLevelId?: `level_${string}` | undefined;
4298
- type: "building";
4311
+ id: `liquid-line_${string}`;
4312
+ path: [number, number, number][];
4313
+ diameter: number;
4314
+ type: "liquid-line";
4299
4315
  } | {
4300
4316
  object: "node";
4301
4317
  name?: string | undefined;
@@ -4320,126 +4336,28 @@ export declare function floorsOf(nodes: SceneNodes): {
4320
4336
  fromIds: string[];
4321
4337
  } | undefined;
4322
4338
  } | undefined;
4323
- id: `dormer_${string}`;
4324
- material?: {
4325
- id?: string | undefined;
4326
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
4327
- properties?: {
4328
- color: string;
4329
- roughness: number;
4330
- metalness: number;
4331
- opacity: number;
4332
- transparent: boolean;
4333
- side: "back" | "double" | "front";
4334
- } | undefined;
4335
- texture?: {
4336
- url: string;
4337
- repeat?: [number, number] | undefined;
4338
- scale?: number | undefined;
4339
- offset?: [number, number] | undefined;
4340
- normalMap?: string | undefined;
4341
- normalScale?: number | undefined;
4342
- bumpMap?: string | undefined;
4343
- bumpScale?: number | undefined;
4344
- } | undefined;
4345
- } | undefined;
4346
- materialPreset?: string | undefined;
4347
- topMaterial?: {
4348
- id?: string | undefined;
4349
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
4350
- properties?: {
4351
- color: string;
4352
- roughness: number;
4353
- metalness: number;
4354
- opacity: number;
4355
- transparent: boolean;
4356
- side: "back" | "double" | "front";
4357
- } | undefined;
4358
- texture?: {
4359
- url: string;
4360
- repeat?: [number, number] | undefined;
4361
- scale?: number | undefined;
4362
- offset?: [number, number] | undefined;
4363
- normalMap?: string | undefined;
4364
- normalScale?: number | undefined;
4365
- bumpMap?: string | undefined;
4366
- bumpScale?: number | undefined;
4367
- } | undefined;
4368
- } | undefined;
4369
- topMaterialPreset?: string | undefined;
4370
- sideMaterial?: {
4371
- id?: string | undefined;
4372
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
4373
- properties?: {
4374
- color: string;
4375
- roughness: number;
4376
- metalness: number;
4377
- opacity: number;
4378
- transparent: boolean;
4379
- side: "back" | "double" | "front";
4380
- } | undefined;
4381
- texture?: {
4382
- url: string;
4383
- repeat?: [number, number] | undefined;
4384
- scale?: number | undefined;
4385
- offset?: [number, number] | undefined;
4386
- normalMap?: string | undefined;
4387
- normalScale?: number | undefined;
4388
- bumpMap?: string | undefined;
4389
- bumpScale?: number | undefined;
4390
- } | undefined;
4391
- } | undefined;
4392
- sideMaterialPreset?: string | undefined;
4393
- wallMaterial?: {
4394
- id?: string | undefined;
4395
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
4396
- properties?: {
4397
- color: string;
4398
- roughness: number;
4399
- metalness: number;
4400
- opacity: number;
4401
- transparent: boolean;
4402
- side: "back" | "double" | "front";
4403
- } | undefined;
4404
- texture?: {
4405
- url: string;
4406
- repeat?: [number, number] | undefined;
4407
- scale?: number | undefined;
4408
- offset?: [number, number] | undefined;
4409
- normalMap?: string | undefined;
4410
- normalScale?: number | undefined;
4411
- bumpMap?: string | undefined;
4412
- bumpScale?: number | undefined;
4413
- } | undefined;
4339
+ id: `pipe-segment_${string}`;
4340
+ path: [number, number, number][];
4341
+ autoHangers?: boolean | undefined;
4342
+ hangerOverrides?: Record<string, {
4343
+ fraction?: number | undefined;
4344
+ skipped?: boolean | undefined;
4345
+ hostId?: string | undefined;
4346
+ }> | undefined;
4347
+ hangerStyle?: "double" | "single" | undefined;
4348
+ hangerSpacing?: number | undefined;
4349
+ hangerMaxReach?: number | undefined;
4350
+ wallAttachment?: {
4351
+ wallId: `wall_${string}`;
4352
+ side: "back" | "front";
4353
+ startUV: [number, number];
4354
+ endUV: [number, number];
4355
+ offset: number;
4414
4356
  } | undefined;
4415
- wallMaterialPreset?: string | undefined;
4416
- roofSegmentId?: string | undefined;
4417
- position: [number, number, number];
4418
- rotation: number;
4419
- width: number;
4420
- depth: number;
4421
- height: number;
4422
- roofType: "barrel" | "conical" | "dutch" | "flat" | "gable" | "gambrel" | "hip" | "mansard" | "shed";
4423
- roofHeight: number;
4424
- shedHighSide: "back" | "front";
4425
- wallSkirtHeight: number;
4426
- windowWidth: number;
4427
- windowHeight: number;
4428
- windowOffsetX: number;
4429
- windowOffsetY: number;
4430
- windowFrameThickness: number;
4431
- windowFrameDepth: number;
4432
- windowColumns: number;
4433
- windowRows: number;
4434
- windowDividerThickness: number;
4435
- windowShape: "arch" | "rectangle" | "rounded";
4436
- windowArchHeight: number;
4437
- windowCornerRadii: [number, number, number, number];
4438
- windowSill: boolean;
4439
- windowSillDepth: number;
4440
- windowSillThickness: number;
4441
- children: `window_${string}`[];
4442
- type: "dormer";
4357
+ diameter: number;
4358
+ pipeMaterial: "abs" | "cast-iron" | "pvc";
4359
+ system: "vent" | "waste";
4360
+ type: "pipe-segment";
4443
4361
  } | {
4444
4362
  object: "node";
4445
4363
  name?: string | undefined;
@@ -4464,77 +4382,48 @@ export declare function floorsOf(nodes: SceneNodes): {
4464
4382
  fromIds: string[];
4465
4383
  } | undefined;
4466
4384
  } | undefined;
4467
- id: `skylight_${string}`;
4468
- material?: {
4469
- id?: string | undefined;
4470
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
4471
- properties?: {
4472
- color: string;
4473
- roughness: number;
4474
- metalness: number;
4475
- opacity: number;
4476
- transparent: boolean;
4477
- side: "back" | "double" | "front";
4478
- } | undefined;
4479
- texture?: {
4480
- url: string;
4481
- repeat?: [number, number] | undefined;
4482
- scale?: number | undefined;
4483
- offset?: [number, number] | undefined;
4484
- normalMap?: string | undefined;
4485
- normalScale?: number | undefined;
4486
- bumpMap?: string | undefined;
4487
- bumpScale?: number | undefined;
4488
- } | undefined;
4489
- } | undefined;
4490
- materialPreset?: string | undefined;
4491
- glassMaterial?: {
4492
- id?: string | undefined;
4493
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
4494
- properties?: {
4495
- color: string;
4496
- roughness: number;
4497
- metalness: number;
4498
- opacity: number;
4499
- transparent: boolean;
4500
- side: "back" | "double" | "front";
4501
- } | undefined;
4502
- texture?: {
4503
- url: string;
4504
- repeat?: [number, number] | undefined;
4505
- scale?: number | undefined;
4506
- offset?: [number, number] | undefined;
4507
- normalMap?: string | undefined;
4508
- normalScale?: number | undefined;
4509
- bumpMap?: string | undefined;
4510
- bumpScale?: number | undefined;
4511
- } | undefined;
4512
- } | undefined;
4513
- glassMaterialPreset?: string | undefined;
4514
- roofSegmentId?: string | undefined;
4385
+ id: `pipe-fitting_${string}`;
4515
4386
  position: [number, number, number];
4516
- rotation: number;
4517
- width: number;
4518
- height: number;
4519
- frameThickness: number;
4520
- frameDepth: number;
4521
- skylightType: "flat" | "lantern" | "opening" | "sliding" | "walk-on";
4522
- glassThickness: number;
4523
- lanternHeight: number;
4524
- lanternTopScale: number;
4525
- openingAngle: number;
4526
- openingSide: "bottom" | "left" | "right" | "top";
4527
- operationState: number;
4528
- motorHousing: boolean;
4529
- slideFraction: number;
4530
- slideDirection: "x" | "z";
4531
- trackWidth: number;
4532
- motorHousingSize: number;
4533
- curb: boolean;
4534
- curbHeight: number;
4535
- cutoutOffset: number;
4536
- surfaceNormal?: [number, number, number] | undefined;
4537
- type: "skylight";
4387
+ rotation: [number, number, number];
4388
+ fittingType: "cleanout" | "coupling" | "cross" | "elbow" | "end-cap" | "reducer" | "sanitary-tee" | "wye";
4389
+ angle: number;
4390
+ diameter: number;
4391
+ diameter2: number;
4392
+ cleanoutStyle: "end" | "inline";
4393
+ pipeMaterial: "abs" | "cast-iron" | "pvc";
4394
+ system: "vent" | "waste";
4395
+ type: "pipe-fitting";
4396
+ } | {
4397
+ object: "node";
4398
+ name?: string | undefined;
4399
+ parentId: string | null;
4400
+ visible: boolean;
4401
+ camera?: {
4402
+ position: [number, number, number];
4403
+ target: [number, number, number];
4404
+ mode: "orthographic" | "perspective";
4405
+ fov?: number | undefined;
4406
+ zoom?: number | undefined;
4407
+ } | undefined;
4408
+ metadata: Record<string, unknown>;
4409
+ provenance?: {
4410
+ refs: {
4411
+ ns?: string | undefined;
4412
+ id: string;
4413
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
4414
+ }[];
4415
+ lineage?: {
4416
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
4417
+ fromIds: string[];
4418
+ } | undefined;
4419
+ } | undefined;
4420
+ id: `pipe-trap_${string}`;
4421
+ position: [number, number, number];
4422
+ rotation: number;
4423
+ diameter: number;
4424
+ pipeMaterial: "abs" | "cast-iron" | "pvc";
4425
+ armLengthM: number;
4426
+ type: "pipe-trap";
4538
4427
  } | {
4539
4428
  object: "node";
4540
4429
  name?: string | undefined;
@@ -4559,198 +4448,71 @@ export declare function floorsOf(nodes: SceneNodes): {
4559
4448
  fromIds: string[];
4560
4449
  } | undefined;
4561
4450
  } | undefined;
4562
- id: `site_${string}`;
4563
- polygon: {
4564
- type: "polygon";
4565
- points: [number, number][];
4566
- };
4567
- terrain?: {
4568
- type: "heightfield";
4569
- origin: [number, number];
4570
- spacing: number;
4571
- cols: number;
4572
- rows: number;
4573
- step: number;
4574
- heights: string;
4575
- } | undefined;
4576
- showGround?: boolean | undefined;
4577
- presentation?: {
4578
- theme?: string | undefined;
4579
- exposure?: number | undefined;
4580
- shading?: "rendered" | "solid" | undefined;
4581
- edges?: "off" | "soft" | "strong" | undefined;
4582
- shadows?: boolean | undefined;
4583
- lighting?: {
4584
- background?: string | undefined;
4585
- backgroundSky?: string | null | undefined;
4586
- ground?: string | undefined;
4587
- ambient?: {
4588
- color: string;
4589
- intensity: number;
4590
- } | undefined;
4591
- hemi?: {
4592
- sky: string;
4593
- ground: string;
4594
- intensity: number;
4595
- } | undefined;
4596
- lights?: {
4597
- color: string;
4598
- intensity: number;
4599
- position: [number, number, number];
4600
- target?: [number, number, number] | undefined;
4601
- castShadow?: boolean | undefined;
4602
- shadow?: {
4603
- intensity?: number | undefined;
4604
- bias?: number | undefined;
4605
- normalBias?: number | undefined;
4606
- radius?: number | undefined;
4607
- mapSize?: 512 | 1024 | 2048 | 4096 | undefined;
4608
- camera?: {
4609
- left: number;
4610
- right: number;
4611
- top: number;
4612
- bottom: number;
4613
- near: number;
4614
- far: number;
4615
- } | undefined;
4616
- } | undefined;
4617
- }[] | undefined;
4618
- environment?: {
4619
- source: "gradient" | "none" | "room";
4620
- intensity: number;
4621
- } | undefined;
4622
- } | undefined;
4623
- postprocessing?: {
4624
- ambientOcclusion?: boolean | undefined;
4625
- colorGrading?: boolean | undefined;
4626
- } | undefined;
4627
- display?: {
4628
- mode?: "construction" | "finished" | "systems" | undefined;
4629
- families?: Partial<Record<"device" | "exposed-structure" | "fill" | "finish" | "foundation" | "framing" | "inspection" | "insulation" | "masonry" | "membrane" | "run" | "service-space" | "sheathing", boolean>> | undefined;
4630
- disciplines?: Partial<Record<"electrical" | "fire" | "low-voltage" | "mechanical" | "plumbing", boolean>> | undefined;
4631
- xray?: boolean | undefined;
4632
- colorBy?: "material" | "service" | undefined;
4633
- } | undefined;
4634
- } | undefined;
4635
- address?: {
4636
- street?: string | undefined;
4637
- city?: string | undefined;
4638
- state?: string | undefined;
4639
- zip?: string | undefined;
4640
- } | undefined;
4641
- parcel?: {
4642
- apn?: string | undefined;
4643
- source?: string | undefined;
4644
- county?: string | undefined;
4645
- state?: string | undefined;
4646
- lotAreaSqFt?: number | undefined;
4647
- originLngLat?: [number, number] | undefined;
4648
- resolvedAt?: string | undefined;
4649
- layer?: string | undefined;
4650
- notes?: string[] | undefined;
4651
- } | undefined;
4652
- setbacks?: {
4653
- front: number;
4654
- side: number;
4655
- rear: number;
4656
- left?: number | undefined;
4657
- right?: number | undefined;
4658
- streetSide?: number | undefined;
4451
+ id: `level_${string}`;
4452
+ 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}`)[];
4453
+ level: number;
4454
+ baseElevation: number;
4455
+ height?: number | undefined;
4456
+ type: "level";
4457
+ } | {
4458
+ object: "node";
4459
+ parentId: string | null;
4460
+ visible: boolean;
4461
+ camera?: {
4462
+ position: [number, number, number];
4463
+ target: [number, number, number];
4464
+ mode: "orthographic" | "perspective";
4465
+ fov?: number | undefined;
4466
+ zoom?: number | undefined;
4659
4467
  } | undefined;
4660
- setbacksSource?: string | undefined;
4661
- zone?: string | undefined;
4662
- frontEdge?: number | undefined;
4663
- streetEdges?: number[] | undefined;
4664
- sightTriangleFt?: number | undefined;
4665
- northRotation?: number | undefined;
4666
- dossier?: {
4667
- [x: string]: unknown;
4668
- provider: string;
4669
- asOf: string;
4670
- point?: {
4671
- lat?: number | undefined;
4672
- lng?: number | undefined;
4673
- source?: string | undefined;
4674
- } | undefined;
4675
- address?: {
4676
- formatted?: string | undefined;
4677
- precision?: string | undefined;
4468
+ provenance?: {
4469
+ refs: {
4470
+ ns?: string | undefined;
4471
+ id: string;
4472
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
4473
+ }[];
4474
+ lineage?: {
4475
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
4476
+ fromIds: string[];
4678
4477
  } | undefined;
4679
- sections: Record<string, {
4680
- [x: string]: unknown;
4681
- status: string;
4682
- summary?: string | undefined;
4683
- reason?: string | undefined;
4684
- source?: {
4685
- name?: string | undefined;
4686
- kind?: string | undefined;
4687
- vintage?: string | undefined;
4688
- attribution?: string | undefined;
4689
- } | undefined;
4690
- }>;
4691
- parcel?: Record<string, unknown> | undefined;
4692
- flood?: Record<string, unknown> | undefined;
4693
- codeBasis?: Record<string, unknown> | undefined;
4694
- zoning?: Record<string, unknown> | undefined;
4695
- utilities?: Record<string, unknown> | undefined;
4696
- soils?: Record<string, unknown> | undefined;
4697
- wetlands?: Record<string, unknown> | undefined;
4698
- structures?: Record<string, unknown> | undefined;
4699
- elevation?: Record<string, unknown> | undefined;
4700
- boundaries?: Record<string, unknown> | undefined;
4701
4478
  } | undefined;
4702
- contourIntervalIn?: number | undefined;
4703
- contours3d?: boolean | undefined;
4704
- terrainContours?: {
4705
- datum: string;
4706
- intervalFt: number;
4707
- source?: string | undefined;
4708
- lines: {
4709
- elevationFt: number;
4710
- points: [number, number][];
4711
- }[];
4479
+ id: `unit_${string}`;
4480
+ name: string;
4481
+ kind: "apartment" | "commercial" | "common" | "hotel-room";
4482
+ members: `zone_${string}`[];
4483
+ color: string;
4484
+ metadata: Record<string, unknown>;
4485
+ type: "unit";
4486
+ } | {
4487
+ object: "node";
4488
+ name?: string | undefined;
4489
+ parentId: string | null;
4490
+ visible: boolean;
4491
+ camera?: {
4492
+ position: [number, number, number];
4493
+ target: [number, number, number];
4494
+ mode: "orthographic" | "perspective";
4495
+ fov?: number | undefined;
4496
+ zoom?: number | undefined;
4712
4497
  } | undefined;
4713
- wallTypes?: {
4714
- id: string;
4715
- label: string;
4716
- assembly: {
4717
- layers: {
4718
- id: string;
4719
- role: "air" | "covering" | "deck" | "fill" | "finish" | "furring" | "glazing" | "insulation" | "lining" | "membrane" | "sheathing" | "shell" | "structure" | "substrate" | "underlay";
4720
- thickness: number;
4721
- core?: true | undefined;
4722
- spacing?: number | undefined;
4723
- material?: string | undefined;
4724
- slot?: string | undefined;
4725
- returns?: boolean | undefined;
4726
- display?: "construction" | "finished" | undefined;
4727
- inset?: number | undefined;
4728
- bottom?: number | undefined;
4729
- lift?: number | undefined;
4730
- src?: string | undefined;
4731
- }[];
4732
- backing?: {
4733
- id: string;
4734
- role: "air" | "covering" | "deck" | "fill" | "finish" | "furring" | "glazing" | "insulation" | "lining" | "membrane" | "sheathing" | "shell" | "structure" | "substrate" | "underlay";
4735
- thickness: number;
4736
- core?: true | undefined;
4737
- spacing?: number | undefined;
4738
- material?: string | undefined;
4739
- slot?: string | undefined;
4740
- returns?: boolean | undefined;
4741
- display?: "construction" | "finished" | undefined;
4742
- inset?: number | undefined;
4743
- bottom?: number | undefined;
4744
- lift?: number | undefined;
4745
- src?: string | undefined;
4746
- }[] | undefined;
4747
- face?: "exterior" | "front" | undefined;
4748
- presetId?: string | undefined;
4749
- cavityInsulation?: string | undefined;
4750
- };
4751
- }[] | undefined;
4752
- children: string[];
4753
- type: "site";
4498
+ metadata: Record<string, unknown>;
4499
+ provenance?: {
4500
+ refs: {
4501
+ ns?: string | undefined;
4502
+ id: string;
4503
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
4504
+ }[];
4505
+ lineage?: {
4506
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
4507
+ fromIds: string[];
4508
+ } | undefined;
4509
+ } | undefined;
4510
+ id: `building_${string}`;
4511
+ children: (`elevator_${string}` | `level_${string}` | `unit_${string}`)[];
4512
+ position: [number, number, number];
4513
+ rotation: [number, number, number];
4514
+ groundLevelId?: `level_${string}` | undefined;
4515
+ type: "building";
4754
4516
  } | {
4755
4517
  object: "node";
4756
4518
  name?: string | undefined;
@@ -5725,6 +5487,245 @@ export declare function floorsOf(nodes: SceneNodes): {
5725
5487
  frameDepth: number;
5726
5488
  surfaceNormal?: [number, number, number] | undefined;
5727
5489
  type: "solar-panel";
5490
+ } | {
5491
+ object: "node";
5492
+ name?: string | undefined;
5493
+ parentId: string | null;
5494
+ visible: boolean;
5495
+ camera?: {
5496
+ position: [number, number, number];
5497
+ target: [number, number, number];
5498
+ mode: "orthographic" | "perspective";
5499
+ fov?: number | undefined;
5500
+ zoom?: number | undefined;
5501
+ } | undefined;
5502
+ metadata: Record<string, unknown>;
5503
+ provenance?: {
5504
+ refs: {
5505
+ ns?: string | undefined;
5506
+ id: string;
5507
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
5508
+ }[];
5509
+ lineage?: {
5510
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
5511
+ fromIds: string[];
5512
+ } | undefined;
5513
+ } | undefined;
5514
+ id: `skylight_${string}`;
5515
+ material?: {
5516
+ id?: string | undefined;
5517
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
5518
+ properties?: {
5519
+ color: string;
5520
+ roughness: number;
5521
+ metalness: number;
5522
+ opacity: number;
5523
+ transparent: boolean;
5524
+ side: "back" | "double" | "front";
5525
+ } | undefined;
5526
+ texture?: {
5527
+ url: string;
5528
+ repeat?: [number, number] | undefined;
5529
+ scale?: number | undefined;
5530
+ offset?: [number, number] | undefined;
5531
+ normalMap?: string | undefined;
5532
+ normalScale?: number | undefined;
5533
+ bumpMap?: string | undefined;
5534
+ bumpScale?: number | undefined;
5535
+ } | undefined;
5536
+ } | undefined;
5537
+ materialPreset?: string | undefined;
5538
+ glassMaterial?: {
5539
+ id?: string | undefined;
5540
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
5541
+ properties?: {
5542
+ color: string;
5543
+ roughness: number;
5544
+ metalness: number;
5545
+ opacity: number;
5546
+ transparent: boolean;
5547
+ side: "back" | "double" | "front";
5548
+ } | undefined;
5549
+ texture?: {
5550
+ url: string;
5551
+ repeat?: [number, number] | undefined;
5552
+ scale?: number | undefined;
5553
+ offset?: [number, number] | undefined;
5554
+ normalMap?: string | undefined;
5555
+ normalScale?: number | undefined;
5556
+ bumpMap?: string | undefined;
5557
+ bumpScale?: number | undefined;
5558
+ } | undefined;
5559
+ } | undefined;
5560
+ glassMaterialPreset?: string | undefined;
5561
+ roofSegmentId?: string | undefined;
5562
+ position: [number, number, number];
5563
+ rotation: number;
5564
+ width: number;
5565
+ height: number;
5566
+ frameThickness: number;
5567
+ frameDepth: number;
5568
+ skylightType: "flat" | "lantern" | "opening" | "sliding" | "walk-on";
5569
+ glassThickness: number;
5570
+ lanternHeight: number;
5571
+ lanternTopScale: number;
5572
+ openingAngle: number;
5573
+ openingSide: "bottom" | "left" | "right" | "top";
5574
+ operationState: number;
5575
+ motorHousing: boolean;
5576
+ slideFraction: number;
5577
+ slideDirection: "x" | "z";
5578
+ trackWidth: number;
5579
+ motorHousingSize: number;
5580
+ curb: boolean;
5581
+ curbHeight: number;
5582
+ cutoutOffset: number;
5583
+ surfaceNormal?: [number, number, number] | undefined;
5584
+ type: "skylight";
5585
+ } | {
5586
+ object: "node";
5587
+ name?: string | undefined;
5588
+ parentId: string | null;
5589
+ visible: boolean;
5590
+ camera?: {
5591
+ position: [number, number, number];
5592
+ target: [number, number, number];
5593
+ mode: "orthographic" | "perspective";
5594
+ fov?: number | undefined;
5595
+ zoom?: number | undefined;
5596
+ } | undefined;
5597
+ metadata: Record<string, unknown>;
5598
+ provenance?: {
5599
+ refs: {
5600
+ ns?: string | undefined;
5601
+ id: string;
5602
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
5603
+ }[];
5604
+ lineage?: {
5605
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
5606
+ fromIds: string[];
5607
+ } | undefined;
5608
+ } | undefined;
5609
+ id: `dormer_${string}`;
5610
+ material?: {
5611
+ id?: string | undefined;
5612
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
5613
+ properties?: {
5614
+ color: string;
5615
+ roughness: number;
5616
+ metalness: number;
5617
+ opacity: number;
5618
+ transparent: boolean;
5619
+ side: "back" | "double" | "front";
5620
+ } | undefined;
5621
+ texture?: {
5622
+ url: string;
5623
+ repeat?: [number, number] | undefined;
5624
+ scale?: number | undefined;
5625
+ offset?: [number, number] | undefined;
5626
+ normalMap?: string | undefined;
5627
+ normalScale?: number | undefined;
5628
+ bumpMap?: string | undefined;
5629
+ bumpScale?: number | undefined;
5630
+ } | undefined;
5631
+ } | undefined;
5632
+ materialPreset?: string | undefined;
5633
+ topMaterial?: {
5634
+ id?: string | undefined;
5635
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
5636
+ properties?: {
5637
+ color: string;
5638
+ roughness: number;
5639
+ metalness: number;
5640
+ opacity: number;
5641
+ transparent: boolean;
5642
+ side: "back" | "double" | "front";
5643
+ } | undefined;
5644
+ texture?: {
5645
+ url: string;
5646
+ repeat?: [number, number] | undefined;
5647
+ scale?: number | undefined;
5648
+ offset?: [number, number] | undefined;
5649
+ normalMap?: string | undefined;
5650
+ normalScale?: number | undefined;
5651
+ bumpMap?: string | undefined;
5652
+ bumpScale?: number | undefined;
5653
+ } | undefined;
5654
+ } | undefined;
5655
+ topMaterialPreset?: string | undefined;
5656
+ sideMaterial?: {
5657
+ id?: string | undefined;
5658
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
5659
+ properties?: {
5660
+ color: string;
5661
+ roughness: number;
5662
+ metalness: number;
5663
+ opacity: number;
5664
+ transparent: boolean;
5665
+ side: "back" | "double" | "front";
5666
+ } | undefined;
5667
+ texture?: {
5668
+ url: string;
5669
+ repeat?: [number, number] | undefined;
5670
+ scale?: number | undefined;
5671
+ offset?: [number, number] | undefined;
5672
+ normalMap?: string | undefined;
5673
+ normalScale?: number | undefined;
5674
+ bumpMap?: string | undefined;
5675
+ bumpScale?: number | undefined;
5676
+ } | undefined;
5677
+ } | undefined;
5678
+ sideMaterialPreset?: string | undefined;
5679
+ wallMaterial?: {
5680
+ id?: string | undefined;
5681
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
5682
+ properties?: {
5683
+ color: string;
5684
+ roughness: number;
5685
+ metalness: number;
5686
+ opacity: number;
5687
+ transparent: boolean;
5688
+ side: "back" | "double" | "front";
5689
+ } | undefined;
5690
+ texture?: {
5691
+ url: string;
5692
+ repeat?: [number, number] | undefined;
5693
+ scale?: number | undefined;
5694
+ offset?: [number, number] | undefined;
5695
+ normalMap?: string | undefined;
5696
+ normalScale?: number | undefined;
5697
+ bumpMap?: string | undefined;
5698
+ bumpScale?: number | undefined;
5699
+ } | undefined;
5700
+ } | undefined;
5701
+ wallMaterialPreset?: string | undefined;
5702
+ roofSegmentId?: string | undefined;
5703
+ position: [number, number, number];
5704
+ rotation: number;
5705
+ width: number;
5706
+ depth: number;
5707
+ height: number;
5708
+ roofType: "barrel" | "conical" | "dutch" | "flat" | "gable" | "gambrel" | "hip" | "mansard" | "shed";
5709
+ roofHeight: number;
5710
+ shedHighSide: "back" | "front";
5711
+ wallSkirtHeight: number;
5712
+ windowWidth: number;
5713
+ windowHeight: number;
5714
+ windowOffsetX: number;
5715
+ windowOffsetY: number;
5716
+ windowFrameThickness: number;
5717
+ windowFrameDepth: number;
5718
+ windowColumns: number;
5719
+ windowRows: number;
5720
+ windowDividerThickness: number;
5721
+ windowShape: "arch" | "rectangle" | "rounded";
5722
+ windowArchHeight: number;
5723
+ windowCornerRadii: [number, number, number, number];
5724
+ windowSill: boolean;
5725
+ windowSillDepth: number;
5726
+ windowSillThickness: number;
5727
+ children: `window_${string}`[];
5728
+ type: "dormer";
5728
5729
  } | {
5729
5730
  object: "node";
5730
5731
  name?: string | undefined;