@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
@@ -24,215 +24,54 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
24
24
  fromIds: string[];
25
25
  } | undefined;
26
26
  } | undefined;
27
- id: `beam_${string}`;
28
- start: [number, number];
29
- end: [number, number];
30
- width: number;
31
- depth: number;
32
- size?: string | undefined;
33
- plies: number;
34
- material: "glulam" | "lvl" | "pressure-treated" | "sawn" | "steel";
35
- placement: "dropped" | "flush";
36
- topElevation?: number | undefined;
37
- supportSlabId?: string | undefined;
38
- type: "beam";
39
- } | {
40
- object: "node";
41
- name?: string | undefined;
42
- parentId: string | null;
43
- visible: boolean;
44
- camera?: {
45
- position: [number, number, number];
46
- target: [number, number, number];
47
- mode: "orthographic" | "perspective";
48
- fov?: number | undefined;
49
- zoom?: number | undefined;
50
- } | undefined;
51
- metadata: Record<string, unknown>;
52
- provenance?: {
53
- refs: {
54
- ns?: string | undefined;
55
- id: string;
56
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
57
- }[];
58
- lineage?: {
59
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
60
- fromIds: string[];
27
+ id: `elevator_${string}`;
28
+ material?: {
29
+ id?: string | undefined;
30
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
31
+ properties?: {
32
+ color: string;
33
+ roughness: number;
34
+ metalness: number;
35
+ opacity: number;
36
+ transparent: boolean;
37
+ side: "back" | "double" | "front";
61
38
  } | undefined;
62
- } | undefined;
63
- id: `measurement_${string}`;
64
- measurement: {
65
- kind: "volume";
66
- base: ({
67
- kind: "feature";
68
- reference: {
69
- nodeId: string;
70
- featureId: string;
71
- parameters?: Record<string, string | number | boolean> | undefined;
72
- };
73
- fallback: [number, number, number];
74
- } | [number, number, number])[];
75
- extrusion: [number, number, number];
76
- } | {
77
- kind: "distance";
78
- points: [{
79
- kind: "feature";
80
- reference: {
81
- nodeId: string;
82
- featureId: string;
83
- parameters?: Record<string, string | number | boolean> | undefined;
84
- };
85
- fallback: [number, number, number];
86
- } | [number, number, number], {
87
- kind: "feature";
88
- reference: {
89
- nodeId: string;
90
- featureId: string;
91
- parameters?: Record<string, string | number | boolean> | undefined;
92
- };
93
- fallback: [number, number, number];
94
- } | [number, number, number]];
95
- } | {
96
- kind: "angle";
97
- points: [{
98
- kind: "feature";
99
- reference: {
100
- nodeId: string;
101
- featureId: string;
102
- parameters?: Record<string, string | number | boolean> | undefined;
103
- };
104
- fallback: [number, number, number];
105
- } | [number, number, number], {
106
- kind: "feature";
107
- reference: {
108
- nodeId: string;
109
- featureId: string;
110
- parameters?: Record<string, string | number | boolean> | undefined;
111
- };
112
- fallback: [number, number, number];
113
- } | [number, number, number], {
114
- kind: "feature";
115
- reference: {
116
- nodeId: string;
117
- featureId: string;
118
- parameters?: Record<string, string | number | boolean> | undefined;
119
- };
120
- fallback: [number, number, number];
121
- } | [number, number, number]];
122
- } | {
123
- kind: "area";
124
- base: ({
125
- kind: "feature";
126
- reference: {
127
- nodeId: string;
128
- featureId: string;
129
- parameters?: Record<string, string | number | boolean> | undefined;
130
- };
131
- fallback: [number, number, number];
132
- } | [number, number, number])[];
133
- } | {
134
- kind: "perimeter";
135
- base: ({
136
- kind: "feature";
137
- reference: {
138
- nodeId: string;
139
- featureId: string;
140
- parameters?: Record<string, string | number | boolean> | undefined;
141
- };
142
- fallback: [number, number, number];
143
- } | [number, number, number])[];
144
- };
145
- type: "measurement";
146
- } | {
147
- object: "node";
148
- name?: string | undefined;
149
- parentId: string | null;
150
- visible: boolean;
151
- camera?: {
152
- position: [number, number, number];
153
- target: [number, number, number];
154
- mode: "orthographic" | "perspective";
155
- fov?: number | undefined;
156
- zoom?: number | undefined;
157
- } | undefined;
158
- metadata: Record<string, unknown>;
159
- provenance?: {
160
- refs: {
161
- ns?: string | undefined;
162
- id: string;
163
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
164
- }[];
165
- lineage?: {
166
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
167
- fromIds: string[];
39
+ texture?: {
40
+ url: string;
41
+ repeat?: [number, number] | undefined;
42
+ scale?: number | undefined;
43
+ offset?: [number, number] | undefined;
44
+ normalMap?: string | undefined;
45
+ normalScale?: number | undefined;
46
+ bumpMap?: string | undefined;
47
+ bumpScale?: number | undefined;
168
48
  } | undefined;
169
49
  } | undefined;
170
- id: `duct-segment_${string}`;
171
- path: [number, number, number][];
172
- autoHangers?: boolean | undefined;
173
- hangerOverrides?: Record<string, {
174
- fraction?: number | undefined;
175
- skipped?: boolean | undefined;
176
- hostId?: string | undefined;
177
- }> | undefined;
178
- hangerStyle?: "double" | "single" | undefined;
179
- hangerSpacing?: number | undefined;
180
- hangerMaxReach?: number | undefined;
181
- wallAttachment?: {
182
- wallId: `wall_${string}`;
183
- side: "back" | "front";
184
- startUV: [number, number];
185
- endUV: [number, number];
186
- offset: number;
187
- } | undefined;
188
- shape: "oval" | "rect" | "round";
189
- diameter: number;
190
- width: number;
191
- height: number;
192
- roll: number;
193
- ductMaterial: "duct-board" | "flex" | "sheet-metal" | "spiral";
194
- seamDetail: boolean;
195
- insulated: boolean;
196
- insulationR: number;
197
- system: "return" | "supply";
50
+ materialPreset?: string | undefined;
198
51
  slots?: Record<string, string> | undefined;
199
- type: "duct-segment";
200
- } | {
201
- object: "node";
202
- name?: string | undefined;
203
- parentId: string | null;
204
- visible: boolean;
205
- camera?: {
206
- position: [number, number, number];
207
- target: [number, number, number];
208
- mode: "orthographic" | "perspective";
209
- fov?: number | undefined;
210
- zoom?: number | undefined;
211
- } | undefined;
212
- metadata: Record<string, unknown>;
213
- provenance?: {
214
- refs: {
215
- ns?: string | undefined;
216
- id: string;
217
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
218
- }[];
219
- lineage?: {
220
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
221
- fromIds: string[];
222
- } | undefined;
223
- } | undefined;
224
- id: `floor-opening_${string}`;
225
- polygon: [number, number][];
226
- hostZoneId?: string | undefined;
227
- legacyPlateCuts?: Record<string, [number, number][][]> | undefined;
228
- legacyCeilingCuts?: Record<string, [number, number][][]> | undefined;
229
- source: string;
230
- ownerId?: string | undefined;
231
- surfaceId?: string | undefined;
232
- drawnOn: "ceiling" | "floor";
233
- cutsPrimary: boolean;
234
- cutsAdjacent: boolean;
235
- type: "floor-opening";
52
+ position: [number, number, number];
53
+ rotation: number;
54
+ width: number;
55
+ depth: number;
56
+ shaftWidth?: number | undefined;
57
+ shaftDepth?: number | undefined;
58
+ shaftWallThickness: number;
59
+ shaftStyle: "glass" | "solid";
60
+ cabHeight: number;
61
+ doorWidth: number;
62
+ doorHeight: number;
63
+ doorStyle: "center-opening" | "single-left" | "single-right";
64
+ doorPanelStyle: "glass-frame" | "segmented-panel" | "solid-panel";
65
+ fromLevelId: string | null;
66
+ toLevelId: string | null;
67
+ servedLevelIds?: string[] | undefined;
68
+ disabledLevelIds: string[];
69
+ serviceOnlyLevelIds: string[];
70
+ defaultLevelId: string | null;
71
+ speed: number;
72
+ doorDurationMs: number;
73
+ dwellMs: number;
74
+ type: "elevator";
236
75
  } | {
237
76
  object: "node";
238
77
  name?: string | undefined;
@@ -257,43 +96,205 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
257
96
  fromIds: string[];
258
97
  } | undefined;
259
98
  } | undefined;
260
- id: `lineset_${string}`;
261
- path: [number, number, number][];
262
- suctionDiameter: number;
263
- liquidDiameter: number;
264
- insulated: boolean;
265
- type: "lineset";
266
- } | {
267
- object: "node";
268
- name?: string | undefined;
269
- parentId: string | null;
270
- visible: boolean;
271
- camera?: {
272
- position: [number, number, number];
273
- target: [number, number, number];
274
- mode: "orthographic" | "perspective";
275
- fov?: number | undefined;
276
- zoom?: number | undefined;
277
- } | undefined;
278
- metadata: Record<string, unknown>;
279
- provenance?: {
280
- refs: {
281
- ns?: string | undefined;
282
- id: string;
283
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
284
- }[];
285
- lineage?: {
286
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
287
- fromIds: string[];
99
+ type: "item";
100
+ id: `item_${string}`;
101
+ position: [number, number, number];
102
+ rotation: [number, number, number];
103
+ scale: [number, number, number];
104
+ side?: "back" | "front" | undefined;
105
+ children: string[];
106
+ wallId?: string | undefined;
107
+ wallT?: number | undefined;
108
+ roofSegmentId?: string | undefined;
109
+ roofFace?: "back" | "front" | "left" | "right" | undefined;
110
+ blockFaceId?: string | undefined;
111
+ supportSlabId?: string | undefined;
112
+ collectionIds?: `collection_${string}`[] | undefined;
113
+ slots?: Record<string, string> | undefined;
114
+ source?: {
115
+ kind: "script";
116
+ meta?: {
117
+ description?: string | undefined;
118
+ category?: string | undefined;
119
+ tags?: string[] | undefined;
120
+ parent?: string | undefined;
121
+ } | undefined;
122
+ language: "bpy" | "three";
123
+ script: string;
124
+ params: Record<string, string | number | boolean>;
125
+ artifact: string;
126
+ manifest: {
127
+ bounds: {
128
+ min: [number, number, number];
129
+ max: [number, number, number];
130
+ };
131
+ params: {
132
+ id: string;
133
+ label?: string | undefined;
134
+ kind: "boolean" | "number" | "string";
135
+ default: string | number | boolean;
136
+ min?: number | undefined;
137
+ max?: number | undefined;
138
+ step?: number | undefined;
139
+ unit?: string | undefined;
140
+ options?: string[] | undefined;
141
+ }[];
142
+ parts: {
143
+ id: string;
144
+ label?: string | undefined;
145
+ type?: string | undefined;
146
+ bounds?: {
147
+ min: [number, number, number];
148
+ max: [number, number, number];
149
+ } | undefined;
150
+ }[];
151
+ surfaces: {
152
+ part?: string | undefined;
153
+ y: number;
154
+ polygon: [number, number][];
155
+ }[];
156
+ slots: {
157
+ id: string;
158
+ label?: string | undefined;
159
+ color?: string | undefined;
160
+ roughness?: number | undefined;
161
+ metalness?: number | undefined;
162
+ transparent?: boolean | undefined;
163
+ emissive?: boolean | undefined;
164
+ }[];
165
+ anchors: {
166
+ id: string;
167
+ position: [number, number, number];
168
+ normal?: [number, number, number] | undefined;
169
+ }[];
170
+ lights: {
171
+ id: string;
172
+ position: [number, number, number];
173
+ color: string;
174
+ intensity: number;
175
+ distance?: number | undefined;
176
+ spot?: {
177
+ direction: [number, number, number];
178
+ angle: number;
179
+ softness: number;
180
+ } | undefined;
181
+ shadows?: boolean | undefined;
182
+ glow?: {
183
+ size: number;
184
+ strength: number;
185
+ } | undefined;
186
+ }[];
187
+ undersides: {
188
+ part?: string | undefined;
189
+ polygon: [number, number][];
190
+ plane: [number, number, number, number];
191
+ }[];
192
+ animations: {
193
+ name: string;
194
+ duration: number;
195
+ }[];
196
+ cutters?: {
197
+ host: "ceiling" | "mounted" | "slab" | "wall";
198
+ polygon: number[][];
199
+ minY: number;
200
+ maxY: number;
201
+ }[] | undefined;
202
+ cutout: boolean;
203
+ collider: boolean;
204
+ shape?: {
205
+ tolerance: number;
206
+ bands: {
207
+ y0: number;
208
+ y1: number;
209
+ polygons: {
210
+ outer: [number, number][];
211
+ holes?: [number, number][][] | undefined;
212
+ }[];
213
+ }[];
214
+ } | undefined;
215
+ triangles: number;
216
+ coverage?: number | undefined;
217
+ uncovered?: {
218
+ min: [number, number];
219
+ max: [number, number];
220
+ }[] | undefined;
221
+ };
222
+ images?: {
223
+ artifact: string;
224
+ thumbnail: string;
225
+ floorPlan: string;
288
226
  } | undefined;
289
227
  } | undefined;
290
- id: `pipe-trap_${string}`;
291
- position: [number, number, number];
292
- rotation: number;
293
- diameter: number;
294
- pipeMaterial: "abs" | "cast-iron" | "pvc";
295
- armLengthM: number;
296
- type: "pipe-trap";
228
+ asset: {
229
+ id: string;
230
+ category: string;
231
+ name: string;
232
+ thumbnail: string;
233
+ floorPlanUrl?: string | undefined;
234
+ source: "community" | "library" | "mine";
235
+ isDraft?: boolean | undefined;
236
+ src: string;
237
+ dimensions: [number, number, number];
238
+ attachTo?: "ceiling" | "wall" | "wall-side" | undefined;
239
+ recessed?: boolean | undefined;
240
+ tags?: string[] | undefined;
241
+ functionTags?: string[] | undefined;
242
+ offset: [number, number, number];
243
+ rotation: [number, number, number];
244
+ scale: [number, number, number];
245
+ surface?: {
246
+ height: number;
247
+ } | undefined;
248
+ interactive?: {
249
+ controls: ({
250
+ kind: "toggle";
251
+ label?: string | undefined;
252
+ default?: boolean | undefined;
253
+ } | {
254
+ kind: "slider";
255
+ label: string;
256
+ min: number;
257
+ max: number;
258
+ step: number;
259
+ unit?: string | undefined;
260
+ displayMode: "dial" | "slider" | "stepper";
261
+ default?: number | undefined;
262
+ } | {
263
+ kind: "temperature";
264
+ label: string;
265
+ min: number;
266
+ max: number;
267
+ unit: "C" | "F";
268
+ default?: number | undefined;
269
+ })[];
270
+ effects: ({
271
+ kind: "animation";
272
+ mode?: "ambient" | "open-close" | undefined;
273
+ control?: number | undefined;
274
+ clips: {
275
+ on?: string | undefined;
276
+ off?: string | undefined;
277
+ loop?: string | undefined;
278
+ };
279
+ } | {
280
+ kind: "light";
281
+ color: string;
282
+ intensityRange: [number, number];
283
+ distance?: number | undefined;
284
+ offset: [number, number, number];
285
+ spot?: {
286
+ direction: [number, number, number];
287
+ angle: number;
288
+ softness: number;
289
+ } | undefined;
290
+ shadows?: boolean | undefined;
291
+ glow?: {
292
+ size: number;
293
+ strength: number;
294
+ } | undefined;
295
+ })[];
296
+ } | undefined;
297
+ };
297
298
  } | {
298
299
  object: "node";
299
300
  name?: string | undefined;
@@ -318,7 +319,8 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
318
319
  fromIds: string[];
319
320
  } | undefined;
320
321
  } | undefined;
321
- id: `rseg_${string}`;
322
+ id: `ceiling_${string}`;
323
+ children: (`item_${string}` | `procedural-item_${string}`)[];
322
324
  material?: {
323
325
  id?: string | undefined;
324
326
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
@@ -342,330 +344,109 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
342
344
  } | undefined;
343
345
  } | undefined;
344
346
  materialPreset?: string | undefined;
345
- topMaterial?: {
346
- id?: string | undefined;
347
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
348
- properties?: {
349
- color: string;
350
- roughness: number;
351
- metalness: number;
352
- opacity: number;
353
- transparent: boolean;
354
- side: "back" | "double" | "front";
347
+ slots?: Record<string, string> | undefined;
348
+ polygon: [number, number][];
349
+ holes: [number, number][][];
350
+ holeMetadata: {
351
+ source: "elevator" | "floor-opening" | "manual" | "room" | "stair";
352
+ openingId?: string | undefined;
353
+ stairId?: string | undefined;
354
+ elevatorId?: string | undefined;
355
+ }[];
356
+ openingIds?: string[] | undefined;
357
+ height?: number | undefined;
358
+ buildUp?: {
359
+ presetId?: string | undefined;
360
+ finish?: {
361
+ kind: "drywall" | "plaster" | "wood-plank";
362
+ thickness: number;
363
+ name?: string | undefined;
355
364
  } | undefined;
356
- texture?: {
357
- url: string;
358
- repeat?: [number, number] | undefined;
359
- scale?: number | undefined;
360
- offset?: [number, number] | undefined;
361
- normalMap?: string | undefined;
362
- normalScale?: number | undefined;
363
- bumpMap?: string | undefined;
364
- bumpScale?: number | undefined;
365
- } | undefined;
366
- } | undefined;
367
- topMaterialPreset?: string | undefined;
368
- edgeMaterial?: {
369
- id?: string | undefined;
370
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
371
- properties?: {
372
- color: string;
373
- roughness: number;
374
- metalness: number;
375
- opacity: number;
376
- transparent: boolean;
377
- side: "back" | "double" | "front";
378
- } | undefined;
379
- texture?: {
380
- url: string;
381
- repeat?: [number, number] | undefined;
382
- scale?: number | undefined;
383
- offset?: [number, number] | undefined;
384
- normalMap?: string | undefined;
385
- normalScale?: number | undefined;
386
- bumpMap?: string | undefined;
387
- bumpScale?: number | undefined;
388
- } | undefined;
389
- } | undefined;
390
- edgeMaterialPreset?: string | undefined;
391
- wallMaterial?: {
392
- id?: string | undefined;
393
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
394
- properties?: {
395
- color: string;
396
- roughness: number;
397
- metalness: number;
398
- opacity: number;
399
- transparent: boolean;
400
- side: "back" | "double" | "front";
401
- } | undefined;
402
- texture?: {
403
- url: string;
404
- repeat?: [number, number] | undefined;
405
- scale?: number | undefined;
406
- offset?: [number, number] | undefined;
407
- normalMap?: string | undefined;
408
- normalScale?: number | undefined;
409
- bumpMap?: string | undefined;
410
- bumpScale?: number | undefined;
411
- } | undefined;
412
- } | undefined;
413
- wallMaterialPreset?: string | undefined;
414
- position: [number, number, number];
415
- rotation: number;
416
- roofType: "barrel" | "conical" | "dutch" | "flat" | "gable" | "gambrel" | "hip" | "mansard" | "shed";
417
- barrelRise?: number | undefined;
418
- barrelSegments?: number | undefined;
419
- roofSystem?: "glazed" | "standard" | undefined;
420
- glazing?: {
421
- across: {
422
- layout: "count" | "fixed-spacing" | "maximum-spacing";
423
- count: number;
424
- spacing: number;
425
- alignment: "center" | "end" | "start";
426
- };
427
- along: {
428
- layout: "count" | "fixed-spacing" | "maximum-spacing";
429
- count: number;
365
+ framing?: {
366
+ system: "joists" | "truss-chords";
367
+ size: "2x10" | "2x12" | "2x4" | "2x6" | "2x8";
430
368
  spacing: number;
431
- alignment: "center" | "end" | "start";
432
- };
433
- frameWidth: number;
434
- frameDepth: number;
435
- glassThickness: number;
436
- frameColor: string;
437
- glassColor: string;
438
- glassOpacity: number;
439
- glassRoughness: number;
440
- glazedEnds: boolean;
441
- panelType: "empty" | "glass" | "solid";
442
- panels: {
443
- face: string;
444
- column: number;
445
- row: number;
446
- type: "empty" | "glass" | "solid";
447
- }[];
448
- } | undefined;
449
- slots?: Record<string, string> | undefined;
450
- width: number;
451
- depth: number;
452
- conicalStartAngle?: number | undefined;
453
- conicalSweepAngle?: number | undefined;
454
- conicalFullCircle?: boolean | undefined;
455
- trim: {
456
- left: number;
457
- right: number;
458
- front: number;
459
- back: number;
460
- frontLeft: number;
461
- frontRight: number;
462
- backLeft: number;
463
- backRight: number;
464
- frontLeftX: number;
465
- frontLeftZ: number;
466
- frontRightX: number;
467
- frontRightZ: number;
468
- backLeftX: number;
469
- backLeftZ: number;
470
- backRightX: number;
471
- backRightZ: number;
472
- };
473
- wallHeight: number;
474
- pitch: number;
475
- wallThickness: number;
476
- deckThickness: number;
477
- overhang: number;
478
- gableOverhang?: number | undefined;
479
- shingleThickness: number;
480
- buildUp?: {
481
- presetId?: string | undefined;
482
- roofing: {
483
- kind: "architectural-shingle" | "asphalt-3-tab" | "clay-tile" | "concrete-tile" | "slate" | "standing-seam-metal" | "wood-shake";
484
- thickness: number;
485
- name?: string | undefined;
486
- };
487
- underlayment?: {
488
- kind: "felt-15" | "felt-30" | "ice-and-water" | "synthetic";
489
- thickness: number;
490
- name?: string | undefined;
491
369
  } | undefined;
492
- sheathing: {
370
+ decking?: {
493
371
  kind: "osb" | "plywood";
494
372
  thickness: number;
495
373
  name?: string | undefined;
496
- };
497
- structure: {
498
- system: "rafters" | "trusses";
499
- size: "2x10" | "2x12" | "2x4" | "2x6" | "2x8";
500
- spacing: number;
501
- };
374
+ } | undefined;
502
375
  insulation?: {
503
376
  kind: "batt" | "blown" | "rigid";
504
377
  thickness: number;
505
378
  name?: string | undefined;
506
379
  } | undefined;
507
- finish?: {
508
- kind: "drywall" | "plaster" | "wood-plank";
509
- thickness: number;
510
- name?: string | undefined;
511
- } | undefined;
512
- } | undefined;
513
- arc?: {
514
- centerX: number;
515
- centerZ: number;
516
- radius: number;
517
380
  } | undefined;
518
- shedSideInfillSpan?: number | undefined;
519
- shedSideInfillMinX?: number | undefined;
520
- shedSideInfillMaxX?: number | undefined;
521
- shedFootprintPieces?: [number, number][][] | undefined;
522
- shedOpenEndSides?: ("left" | "right")[] | undefined;
523
- shedJointFrame?: {
381
+ regions?: {
382
+ id: string;
383
+ polygon: [number, number][];
384
+ finish: string | Record<string, unknown>;
385
+ }[] | undefined;
386
+ boundary?: "auto" | undefined;
387
+ zoneId?: string | undefined;
388
+ autoFromWalls: boolean;
389
+ type: "ceiling";
390
+ } | {
391
+ object: "node";
392
+ name?: string | undefined;
393
+ parentId: string | null;
394
+ visible: boolean;
395
+ camera?: {
524
396
  position: [number, number, number];
525
- rotation: number;
526
- } | undefined;
527
- shedJointOwnerId?: string | undefined;
528
- shedJointNeighborIds?: string[] | undefined;
529
- shedJointScopeId?: string | undefined;
530
- managedByParent: boolean;
531
- wallShell: "auto" | "include" | "omit";
532
- shedInsetEndPanels: boolean;
533
- fascia?: boolean | undefined;
534
- eaveCut?: "plumb" | "plumb-level" | "square" | undefined;
535
- fasciaHighEdge?: boolean | undefined;
536
- fasciaHeight?: number | undefined;
537
- fasciaDepth?: number | undefined;
538
- fasciaMaterial?: {
539
- id?: string | undefined;
540
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
541
- properties?: {
542
- color: string;
543
- roughness: number;
544
- metalness: number;
545
- opacity: number;
546
- transparent: boolean;
547
- side: "back" | "double" | "front";
548
- } | undefined;
549
- texture?: {
550
- url: string;
551
- repeat?: [number, number] | undefined;
552
- scale?: number | undefined;
553
- offset?: [number, number] | undefined;
554
- normalMap?: string | undefined;
555
- normalScale?: number | undefined;
556
- bumpMap?: string | undefined;
557
- bumpScale?: number | undefined;
558
- } | undefined;
397
+ target: [number, number, number];
398
+ mode: "orthographic" | "perspective";
399
+ fov?: number | undefined;
400
+ zoom?: number | undefined;
559
401
  } | undefined;
560
- fasciaMaterialPreset?: string | undefined;
561
- heelMaterial?: {
562
- id?: string | undefined;
563
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
564
- properties?: {
565
- color: string;
566
- roughness: number;
567
- metalness: number;
568
- opacity: number;
569
- transparent: boolean;
570
- side: "back" | "double" | "front";
571
- } | undefined;
572
- texture?: {
573
- url: string;
574
- repeat?: [number, number] | undefined;
575
- scale?: number | undefined;
576
- offset?: [number, number] | undefined;
577
- normalMap?: string | undefined;
578
- normalScale?: number | undefined;
579
- bumpMap?: string | undefined;
580
- bumpScale?: number | undefined;
402
+ metadata: Record<string, unknown>;
403
+ provenance?: {
404
+ refs: {
405
+ ns?: string | undefined;
406
+ id: string;
407
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
408
+ }[];
409
+ lineage?: {
410
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
411
+ fromIds: string[];
581
412
  } | undefined;
582
413
  } | undefined;
583
- heelMaterialPreset?: string | undefined;
584
- gableLeftMaterial?: {
585
- id?: string | undefined;
586
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
587
- properties?: {
588
- color: string;
589
- roughness: number;
590
- metalness: number;
591
- opacity: number;
592
- transparent: boolean;
593
- side: "back" | "double" | "front";
594
- } | undefined;
595
- texture?: {
596
- url: string;
597
- repeat?: [number, number] | undefined;
598
- scale?: number | undefined;
599
- offset?: [number, number] | undefined;
600
- normalMap?: string | undefined;
601
- normalScale?: number | undefined;
602
- bumpMap?: string | undefined;
603
- bumpScale?: number | undefined;
604
- } | undefined;
605
- } | undefined;
606
- gableLeftMaterialPreset?: string | undefined;
607
- gableRightMaterial?: {
608
- id?: string | undefined;
609
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
610
- properties?: {
611
- color: string;
612
- roughness: number;
613
- metalness: number;
614
- opacity: number;
615
- transparent: boolean;
616
- side: "back" | "double" | "front";
617
- } | undefined;
618
- texture?: {
619
- url: string;
620
- repeat?: [number, number] | undefined;
621
- scale?: number | undefined;
622
- offset?: [number, number] | undefined;
623
- normalMap?: string | undefined;
624
- normalScale?: number | undefined;
625
- bumpMap?: string | undefined;
626
- bumpScale?: number | undefined;
627
- } | undefined;
628
- } | undefined;
629
- gableRightMaterialPreset?: string | undefined;
630
- gambrelLowerWidthRatio: number;
631
- gambrelLowerHeightRatio: number;
632
- mansardSteepWidthRatio: number;
633
- mansardSteepHeightRatio: number;
634
- dutchHipWidthRatio: number;
635
- dutchHipHeightRatio: number;
636
- dutchWaistLengthRatio: number;
637
- dutchGabletRake: number;
638
- dutchTopRakeThickness: number;
639
- children: string[];
640
- type: "roof-segment";
641
- } | {
642
- object: "node";
643
- name?: string | undefined;
644
- parentId: string | null;
645
- visible: boolean;
646
- camera?: {
647
- position: [number, number, number];
648
- target: [number, number, number];
649
- mode: "orthographic" | "perspective";
650
- fov?: number | undefined;
651
- zoom?: number | undefined;
652
- } | undefined;
653
- metadata: Record<string, unknown>;
654
- provenance?: {
655
- refs: {
656
- ns?: string | undefined;
657
- id: string;
658
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
659
- }[];
660
- lineage?: {
661
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
662
- fromIds: string[];
663
- } | undefined;
664
- } | undefined;
665
- id: `separator_${string}`;
666
- start: [number, number];
667
- end: [number, number];
668
- type: "separator";
414
+ id: `construction-dimension_${string}`;
415
+ anchors: ({
416
+ kind: "feature";
417
+ reference: {
418
+ nodeId: string;
419
+ featureId: string;
420
+ parameters?: Record<string, string | number | boolean> | undefined;
421
+ };
422
+ fallback: [number, number, number];
423
+ } | [number, number, number])[];
424
+ baseline: {
425
+ origin: [number, number];
426
+ direction: [number, number];
427
+ };
428
+ chainMode: "continuous" | "point-to-point";
429
+ mode: "angular" | "arc-length" | "center-mark" | "chord" | "coordinate" | "diameter" | "linear" | "radius";
430
+ featureCount: number;
431
+ showCenterMark: boolean;
432
+ prefix: string;
433
+ suffix: string;
434
+ textOverride: string | null;
435
+ datumPolicy: "centerline" | "finish-face" | "structural-face" | "wall-face";
436
+ terminator: "architectural-tick" | "dot" | "filled-arrow" | "open-arrow";
437
+ textPosition: "above" | "centered";
438
+ imperialPrecision: "1" | "1/16" | "1/2" | "1/4" | "1/8";
439
+ metricNotation: "meters" | "millimeters";
440
+ extensionStartGap: number;
441
+ extensionOvershoot: number;
442
+ drawingType: "floor-plan" | "foundation-plan" | "reflected-ceiling-plan" | "roof-plan" | "site-plan";
443
+ drawingOverrides: {
444
+ drawingType: "floor-plan" | "foundation-plan" | "reflected-ceiling-plan" | "roof-plan" | "site-plan";
445
+ presentation: "controlled" | "omit" | "shown";
446
+ suppressedSegmentIndexes: number[];
447
+ }[];
448
+ controllingDimensionId: `construction-dimension_${string}` | null;
449
+ type: "construction-dimension";
669
450
  } | {
670
451
  object: "node";
671
452
  name?: string | undefined;
@@ -690,88 +471,198 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
690
471
  fromIds: string[];
691
472
  } | undefined;
692
473
  } | undefined;
693
- id: `spawn_${string}`;
694
- position: [number, number, number];
695
- rotation: number;
696
- supportSlabId?: string | undefined;
697
- type: "spawn";
698
- } | {
699
- object: "node";
700
- name?: string | undefined;
701
- parentId: string | null;
702
- visible: boolean;
703
- camera?: {
704
- position: [number, number, number];
705
- target: [number, number, number];
706
- mode: "orthographic" | "perspective";
707
- fov?: number | undefined;
708
- zoom?: number | undefined;
474
+ id: `site_${string}`;
475
+ polygon: {
476
+ type: "polygon";
477
+ points: [number, number][];
478
+ };
479
+ terrain?: {
480
+ type: "heightfield";
481
+ origin: [number, number];
482
+ spacing: number;
483
+ cols: number;
484
+ rows: number;
485
+ step: number;
486
+ heights: string;
709
487
  } | undefined;
710
- metadata: Record<string, unknown>;
711
- provenance?: {
712
- refs: {
713
- ns?: string | undefined;
714
- id: string;
715
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
716
- }[];
717
- lineage?: {
718
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
719
- fromIds: string[];
488
+ showGround?: boolean | undefined;
489
+ presentation?: {
490
+ theme?: string | undefined;
491
+ exposure?: number | undefined;
492
+ shading?: "rendered" | "solid" | undefined;
493
+ edges?: "off" | "soft" | "strong" | undefined;
494
+ shadows?: boolean | undefined;
495
+ lighting?: {
496
+ background?: string | undefined;
497
+ backgroundSky?: string | null | undefined;
498
+ ground?: string | undefined;
499
+ ambient?: {
500
+ color: string;
501
+ intensity: number;
502
+ } | undefined;
503
+ hemi?: {
504
+ sky: string;
505
+ ground: string;
506
+ intensity: number;
507
+ } | undefined;
508
+ lights?: {
509
+ color: string;
510
+ intensity: number;
511
+ position: [number, number, number];
512
+ target?: [number, number, number] | undefined;
513
+ castShadow?: boolean | undefined;
514
+ shadow?: {
515
+ intensity?: number | undefined;
516
+ bias?: number | undefined;
517
+ normalBias?: number | undefined;
518
+ radius?: number | undefined;
519
+ mapSize?: 512 | 1024 | 2048 | 4096 | undefined;
520
+ camera?: {
521
+ left: number;
522
+ right: number;
523
+ top: number;
524
+ bottom: number;
525
+ near: number;
526
+ far: number;
527
+ } | undefined;
528
+ } | undefined;
529
+ }[] | undefined;
530
+ environment?: {
531
+ source: "gradient" | "none" | "room";
532
+ intensity: number;
533
+ } | undefined;
720
534
  } | undefined;
721
- } | undefined;
722
- id: `sseg_${string}`;
723
- material?: {
724
- id?: string | undefined;
725
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
726
- properties?: {
727
- color: string;
728
- roughness: number;
729
- metalness: number;
730
- opacity: number;
731
- transparent: boolean;
732
- side: "back" | "double" | "front";
535
+ postprocessing?: {
536
+ ambientOcclusion?: boolean | undefined;
537
+ colorGrading?: boolean | undefined;
733
538
  } | undefined;
734
- texture?: {
735
- url: string;
736
- repeat?: [number, number] | undefined;
737
- scale?: number | undefined;
738
- offset?: [number, number] | undefined;
739
- normalMap?: string | undefined;
740
- normalScale?: number | undefined;
741
- bumpMap?: string | undefined;
742
- bumpScale?: number | undefined;
539
+ display?: {
540
+ mode?: "construction" | "finished" | "systems" | undefined;
541
+ families?: Partial<Record<"device" | "exposed-structure" | "fill" | "finish" | "foundation" | "framing" | "inspection" | "insulation" | "masonry" | "membrane" | "run" | "service-space" | "sheathing", boolean>> | undefined;
542
+ disciplines?: Partial<Record<"electrical" | "fire" | "low-voltage" | "mechanical" | "plumbing", boolean>> | undefined;
543
+ xray?: boolean | undefined;
544
+ colorBy?: "material" | "service" | undefined;
743
545
  } | undefined;
744
546
  } | undefined;
745
- materialPreset?: string | undefined;
746
- slots?: Record<string, string> | undefined;
747
- position: [number, number, number];
748
- rotation: number;
749
- segmentType: "landing" | "stair";
750
- width: number;
751
- length: number;
752
- height: number;
753
- stepCount: number;
754
- attachmentSide: "front" | "left" | "right";
755
- fillToFloor: boolean;
756
- construction?: {
757
- mode: "center-stringer" | "open" | "side-stringers" | "solid" | "waist";
758
- waistThickness: number;
759
- treadThickness: number;
760
- riserThickness: number;
761
- nosing: number;
762
- finishThickness: number;
763
- closedRisers: boolean;
764
- stringerWidth: number;
765
- stringerDepth: number;
547
+ address?: {
548
+ street?: string | undefined;
549
+ city?: string | undefined;
550
+ state?: string | undefined;
551
+ zip?: string | undefined;
766
552
  } | undefined;
767
- winder?: {
768
- turn: "left" | "right";
769
- innerGap: number;
770
- walkingLineOffset: number;
771
- division: "equal-angle" | "equal-going";
553
+ parcel?: {
554
+ apn?: string | undefined;
555
+ source?: string | undefined;
556
+ county?: string | undefined;
557
+ state?: string | undefined;
558
+ lotAreaSqFt?: number | undefined;
559
+ originLngLat?: [number, number] | undefined;
560
+ resolvedAt?: string | undefined;
561
+ layer?: string | undefined;
562
+ notes?: string[] | undefined;
772
563
  } | undefined;
773
- thickness: number;
774
- type: "stair-segment";
564
+ setbacks?: {
565
+ front: number;
566
+ side: number;
567
+ rear: number;
568
+ left?: number | undefined;
569
+ right?: number | undefined;
570
+ streetSide?: number | undefined;
571
+ } | undefined;
572
+ setbacksSource?: string | undefined;
573
+ zone?: string | undefined;
574
+ frontEdge?: number | undefined;
575
+ streetEdges?: number[] | undefined;
576
+ sightTriangleFt?: number | undefined;
577
+ northRotation?: number | undefined;
578
+ dossier?: {
579
+ [x: string]: unknown;
580
+ provider: string;
581
+ asOf: string;
582
+ point?: {
583
+ lat?: number | undefined;
584
+ lng?: number | undefined;
585
+ source?: string | undefined;
586
+ } | undefined;
587
+ address?: {
588
+ formatted?: string | undefined;
589
+ precision?: string | undefined;
590
+ } | undefined;
591
+ sections: Record<string, {
592
+ [x: string]: unknown;
593
+ status: string;
594
+ summary?: string | undefined;
595
+ reason?: string | undefined;
596
+ source?: {
597
+ name?: string | undefined;
598
+ kind?: string | undefined;
599
+ vintage?: string | undefined;
600
+ attribution?: string | undefined;
601
+ } | undefined;
602
+ }>;
603
+ parcel?: Record<string, unknown> | undefined;
604
+ flood?: Record<string, unknown> | undefined;
605
+ codeBasis?: Record<string, unknown> | undefined;
606
+ zoning?: Record<string, unknown> | undefined;
607
+ utilities?: Record<string, unknown> | undefined;
608
+ soils?: Record<string, unknown> | undefined;
609
+ wetlands?: Record<string, unknown> | undefined;
610
+ structures?: Record<string, unknown> | undefined;
611
+ elevation?: Record<string, unknown> | undefined;
612
+ boundaries?: Record<string, unknown> | undefined;
613
+ } | undefined;
614
+ contourIntervalIn?: number | undefined;
615
+ contours3d?: boolean | undefined;
616
+ terrainContours?: {
617
+ datum: string;
618
+ intervalFt: number;
619
+ source?: string | undefined;
620
+ lines: {
621
+ elevationFt: number;
622
+ points: [number, number][];
623
+ }[];
624
+ } | undefined;
625
+ wallTypes?: {
626
+ id: string;
627
+ label: string;
628
+ assembly: {
629
+ layers: {
630
+ id: string;
631
+ role: "air" | "covering" | "deck" | "fill" | "finish" | "furring" | "glazing" | "insulation" | "lining" | "membrane" | "sheathing" | "shell" | "structure" | "substrate" | "underlay";
632
+ thickness: number;
633
+ core?: true | undefined;
634
+ spacing?: number | undefined;
635
+ material?: string | undefined;
636
+ slot?: string | undefined;
637
+ returns?: boolean | undefined;
638
+ display?: "construction" | "finished" | undefined;
639
+ inset?: number | undefined;
640
+ bottom?: number | undefined;
641
+ lift?: number | undefined;
642
+ src?: string | undefined;
643
+ }[];
644
+ backing?: {
645
+ id: string;
646
+ role: "air" | "covering" | "deck" | "fill" | "finish" | "furring" | "glazing" | "insulation" | "lining" | "membrane" | "sheathing" | "shell" | "structure" | "substrate" | "underlay";
647
+ thickness: number;
648
+ core?: true | undefined;
649
+ spacing?: number | undefined;
650
+ material?: string | undefined;
651
+ slot?: string | undefined;
652
+ returns?: boolean | undefined;
653
+ display?: "construction" | "finished" | undefined;
654
+ inset?: number | undefined;
655
+ bottom?: number | undefined;
656
+ lift?: number | undefined;
657
+ src?: string | undefined;
658
+ }[] | undefined;
659
+ face?: "exterior" | "front" | undefined;
660
+ presetId?: string | undefined;
661
+ cavityInsulation?: string | undefined;
662
+ };
663
+ }[] | undefined;
664
+ children: string[];
665
+ type: "site";
775
666
  } | {
776
667
  object: "node";
777
668
  name?: string | undefined;
@@ -796,7 +687,7 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
796
687
  fromIds: string[];
797
688
  } | undefined;
798
689
  } | undefined;
799
- id: `window_${string}`;
690
+ id: `door_${string}`;
800
691
  material?: {
801
692
  id?: string | undefined;
802
693
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
@@ -940,12 +831,14 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
940
831
  verticalAnchor?: "floor" | "wall" | undefined;
941
832
  floorThresholdVersion: 0 | 1;
942
833
  wallId?: string | undefined;
943
- dormerId?: string | undefined;
944
- dormerFace?: "back" | "front" | "left" | "right" | undefined;
945
834
  roofSegmentId?: string | undefined;
946
835
  roofFace?: "back" | "front" | "left" | "right" | undefined;
947
836
  width: number;
948
837
  height: number;
838
+ sidelightLeft?: number | undefined;
839
+ sidelightRight?: number | undefined;
840
+ transomHeight?: number | undefined;
841
+ slidingStyle?: "bypass" | "patio" | undefined;
949
842
  mark?: string | undefined;
950
843
  constructionType: "framed" | "masonry";
951
844
  dimensionReference: "finish-opening" | "masonry-opening" | "nominal" | "rough-opening";
@@ -955,52 +848,49 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
955
848
  masonryOpeningHeight?: number | undefined;
956
849
  finishOpeningWidth?: number | undefined;
957
850
  finishOpeningHeight?: number | undefined;
958
- openingKind: "opening" | "window";
959
- windowType: "awning" | "bay" | "bow" | "casement" | "double-hung" | "fixed" | "hopper" | "louvered" | "single-hung" | "sliding" | "tilt-turn";
851
+ doorCategory: "garage" | "interior";
852
+ doorType: "barn" | "double" | "folding" | "french" | "garage-rollup" | "garage-sectional" | "garage-tiltup" | "hinged" | "pocket" | "sliding";
853
+ leafCount: 1 | 2 | 3 | 4 | 6 | 8;
960
854
  operationState: number;
961
- openingDirection?: "inward" | "outward" | undefined;
962
- tiltTurnMode?: "tilt" | "turn" | undefined;
963
- awningDirection: "down" | "up";
964
- casementStyle: "french" | "single";
965
- hingesSide: "left" | "right";
855
+ slideDirection: "left" | "right";
856
+ trackStyle: "none" | "overhead" | "pocket" | "visible";
857
+ garagePanelCount: number;
858
+ openingKind: "door" | "opening";
966
859
  openingShape: "arch" | "rectangle" | "rounded";
967
860
  openingRadiusMode: "all" | "individual";
968
- openingCornerRadii: [number, number, number, number];
861
+ openingTopRadii: [number, number];
969
862
  cornerRadius: number;
970
863
  archHeight: number;
971
864
  openingRevealRadius: number;
972
865
  frameThickness: number;
973
866
  frameDepth?: number | undefined;
974
- windowHandle?: boolean | undefined;
975
- sashGrid?: boolean | undefined;
976
- columnRatios: number[];
977
- rowRatios: number[];
978
- columnDividerThickness: number;
979
- rowDividerThickness: number;
980
- corner?: {
981
- end: "end" | "start";
982
- partnerId: string;
983
- post: "none" | "post";
984
- } | undefined;
985
- sill: boolean;
986
- sillDepth: number;
987
- sillThickness: number;
988
- sillOverhang?: number | undefined;
989
- sillInterior?: boolean | undefined;
990
- sillInteriorDepth?: number | undefined;
991
- sillInteriorThickness?: number | undefined;
992
- sillInteriorOverhang?: number | undefined;
993
- shutters?: "board-batten" | "louvered" | "none" | "panel" | undefined;
994
- shutterWidth?: number | undefined;
995
- shutterOpen?: number | undefined;
996
- shutterSides?: "both" | "left" | "right" | undefined;
997
- rollerShutter?: "box" | "concealed" | "none" | undefined;
998
- rollerShutterBoxHeight?: number | undefined;
999
- rollerShutterOpen?: number | undefined;
867
+ threshold: boolean;
868
+ thresholdHeight: number;
1000
869
  casingFaceA?: boolean | undefined;
1001
870
  casingFaceB?: boolean | undefined;
1002
871
  casingWidth?: number | undefined;
1003
- type: "window";
872
+ hingesSide: "left" | "right";
873
+ swingDirection: "inward" | "outward";
874
+ swingAngle: number;
875
+ segments: {
876
+ type: "empty" | "glass" | "panel";
877
+ heightRatio: number;
878
+ columnRatios: number[];
879
+ dividerThickness: number;
880
+ panelDepth: number;
881
+ panelInset: number;
882
+ }[];
883
+ handle: boolean;
884
+ handleStyle?: "bar" | "knob" | "lever" | "lever-curved" | "plate" | undefined;
885
+ handleHeight: number;
886
+ handleSide: "left" | "right";
887
+ contentPadding: [number, number];
888
+ doorCloser: boolean;
889
+ panicBar: boolean;
890
+ panicBarStyle: "crossbar" | "touchbar";
891
+ panicBarRods: boolean;
892
+ panicBarHeight: number;
893
+ type: "door";
1004
894
  } | {
1005
895
  object: "node";
1006
896
  name?: string | undefined;
@@ -1025,20 +915,29 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
1025
915
  fromIds: string[];
1026
916
  } | undefined;
1027
917
  } | undefined;
1028
- type: "item";
1029
- id: `item_${string}`;
1030
- position: [number, number, number];
1031
- rotation: [number, number, number];
1032
- scale: [number, number, number];
1033
- side?: "back" | "front" | undefined;
1034
- children: string[];
1035
- wallId?: string | undefined;
1036
- wallT?: number | undefined;
1037
- roofSegmentId?: string | undefined;
1038
- roofFace?: "back" | "front" | "left" | "right" | undefined;
1039
- blockFaceId?: string | undefined;
1040
- supportSlabId?: string | undefined;
1041
- collectionIds?: `collection_${string}`[] | undefined;
918
+ id: `window_${string}`;
919
+ material?: {
920
+ id?: string | undefined;
921
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
922
+ properties?: {
923
+ color: string;
924
+ roughness: number;
925
+ metalness: number;
926
+ opacity: number;
927
+ transparent: boolean;
928
+ side: "back" | "double" | "front";
929
+ } | undefined;
930
+ texture?: {
931
+ url: string;
932
+ repeat?: [number, number] | undefined;
933
+ scale?: number | undefined;
934
+ offset?: [number, number] | undefined;
935
+ normalMap?: string | undefined;
936
+ normalScale?: number | undefined;
937
+ bumpMap?: string | undefined;
938
+ bumpScale?: number | undefined;
939
+ } | undefined;
940
+ } | undefined;
1042
941
  slots?: Record<string, string> | undefined;
1043
942
  source?: {
1044
943
  kind: "script";
@@ -1154,76 +1053,73 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
1154
1053
  floorPlan: string;
1155
1054
  } | undefined;
1156
1055
  } | undefined;
1157
- asset: {
1158
- id: string;
1159
- category: string;
1160
- name: string;
1161
- thumbnail: string;
1162
- floorPlanUrl?: string | undefined;
1163
- source: "community" | "library" | "mine";
1164
- isDraft?: boolean | undefined;
1165
- src: string;
1166
- dimensions: [number, number, number];
1167
- attachTo?: "ceiling" | "wall" | "wall-side" | undefined;
1168
- recessed?: boolean | undefined;
1169
- tags?: string[] | undefined;
1170
- functionTags?: string[] | undefined;
1171
- offset: [number, number, number];
1172
- rotation: [number, number, number];
1173
- scale: [number, number, number];
1174
- surface?: {
1175
- height: number;
1176
- } | undefined;
1177
- interactive?: {
1178
- controls: ({
1179
- kind: "toggle";
1180
- label?: string | undefined;
1181
- default?: boolean | undefined;
1182
- } | {
1183
- kind: "slider";
1184
- label: string;
1185
- min: number;
1186
- max: number;
1187
- step: number;
1188
- unit?: string | undefined;
1189
- displayMode: "dial" | "slider" | "stepper";
1190
- default?: number | undefined;
1191
- } | {
1192
- kind: "temperature";
1193
- label: string;
1194
- min: number;
1195
- max: number;
1196
- unit: "C" | "F";
1197
- default?: number | undefined;
1198
- })[];
1199
- effects: ({
1200
- kind: "animation";
1201
- mode?: "ambient" | "open-close" | undefined;
1202
- control?: number | undefined;
1203
- clips: {
1204
- on?: string | undefined;
1205
- off?: string | undefined;
1206
- loop?: string | undefined;
1207
- };
1208
- } | {
1209
- kind: "light";
1210
- color: string;
1211
- intensityRange: [number, number];
1212
- distance?: number | undefined;
1213
- offset: [number, number, number];
1214
- spot?: {
1215
- direction: [number, number, number];
1216
- angle: number;
1217
- softness: number;
1218
- } | undefined;
1219
- shadows?: boolean | undefined;
1220
- glow?: {
1221
- size: number;
1222
- strength: number;
1223
- } | undefined;
1224
- })[];
1225
- } | undefined;
1226
- };
1056
+ position: [number, number, number];
1057
+ rotation: [number, number, number];
1058
+ side?: "back" | "front" | undefined;
1059
+ verticalAnchor?: "floor" | "wall" | undefined;
1060
+ floorThresholdVersion: 0 | 1;
1061
+ wallId?: string | undefined;
1062
+ dormerId?: string | undefined;
1063
+ dormerFace?: "back" | "front" | "left" | "right" | undefined;
1064
+ roofSegmentId?: string | undefined;
1065
+ roofFace?: "back" | "front" | "left" | "right" | undefined;
1066
+ width: number;
1067
+ height: number;
1068
+ mark?: string | undefined;
1069
+ constructionType: "framed" | "masonry";
1070
+ dimensionReference: "finish-opening" | "masonry-opening" | "nominal" | "rough-opening";
1071
+ roughOpeningWidth?: number | undefined;
1072
+ roughOpeningHeight?: number | undefined;
1073
+ masonryOpeningWidth?: number | undefined;
1074
+ masonryOpeningHeight?: number | undefined;
1075
+ finishOpeningWidth?: number | undefined;
1076
+ finishOpeningHeight?: number | undefined;
1077
+ openingKind: "opening" | "window";
1078
+ windowType: "awning" | "bay" | "bow" | "casement" | "double-hung" | "fixed" | "hopper" | "louvered" | "single-hung" | "sliding" | "tilt-turn";
1079
+ operationState: number;
1080
+ openingDirection?: "inward" | "outward" | undefined;
1081
+ tiltTurnMode?: "tilt" | "turn" | undefined;
1082
+ awningDirection: "down" | "up";
1083
+ casementStyle: "french" | "single";
1084
+ hingesSide: "left" | "right";
1085
+ openingShape: "arch" | "rectangle" | "rounded";
1086
+ openingRadiusMode: "all" | "individual";
1087
+ openingCornerRadii: [number, number, number, number];
1088
+ cornerRadius: number;
1089
+ archHeight: number;
1090
+ openingRevealRadius: number;
1091
+ frameThickness: number;
1092
+ frameDepth?: number | undefined;
1093
+ windowHandle?: boolean | undefined;
1094
+ sashGrid?: boolean | undefined;
1095
+ columnRatios: number[];
1096
+ rowRatios: number[];
1097
+ columnDividerThickness: number;
1098
+ rowDividerThickness: number;
1099
+ corner?: {
1100
+ end: "end" | "start";
1101
+ partnerId: string;
1102
+ post: "none" | "post";
1103
+ } | undefined;
1104
+ sill: boolean;
1105
+ sillDepth: number;
1106
+ sillThickness: number;
1107
+ sillOverhang?: number | undefined;
1108
+ sillInterior?: boolean | undefined;
1109
+ sillInteriorDepth?: number | undefined;
1110
+ sillInteriorThickness?: number | undefined;
1111
+ sillInteriorOverhang?: number | undefined;
1112
+ shutters?: "board-batten" | "louvered" | "none" | "panel" | undefined;
1113
+ shutterWidth?: number | undefined;
1114
+ shutterOpen?: number | undefined;
1115
+ shutterSides?: "both" | "left" | "right" | undefined;
1116
+ rollerShutter?: "box" | "concealed" | "none" | undefined;
1117
+ rollerShutterBoxHeight?: number | undefined;
1118
+ rollerShutterOpen?: number | undefined;
1119
+ casingFaceA?: boolean | undefined;
1120
+ casingFaceB?: boolean | undefined;
1121
+ casingWidth?: number | undefined;
1122
+ type: "window";
1227
1123
  } | {
1228
1124
  object: "node";
1229
1125
  name?: string | undefined;
@@ -1248,30 +1144,11 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
1248
1144
  fromIds: string[];
1249
1145
  } | undefined;
1250
1146
  } | undefined;
1251
- id: `door_${string}`;
1252
- material?: {
1253
- id?: string | undefined;
1254
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1255
- properties?: {
1256
- color: string;
1257
- roughness: number;
1258
- metalness: number;
1259
- opacity: number;
1260
- transparent: boolean;
1261
- side: "back" | "double" | "front";
1262
- } | undefined;
1263
- texture?: {
1264
- url: string;
1265
- repeat?: [number, number] | undefined;
1266
- scale?: number | undefined;
1267
- offset?: [number, number] | undefined;
1268
- normalMap?: string | undefined;
1269
- normalScale?: number | undefined;
1270
- bumpMap?: string | undefined;
1271
- bumpScale?: number | undefined;
1272
- } | undefined;
1273
- } | undefined;
1274
- slots?: Record<string, string> | undefined;
1147
+ id: `column_${string}`;
1148
+ children: string[];
1149
+ position: [number, number, number];
1150
+ rotation: number;
1151
+ supportSlabId?: string | undefined;
1275
1152
  source?: {
1276
1153
  kind: "script";
1277
1154
  meta?: {
@@ -1386,289 +1263,346 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
1386
1263
  floorPlan: string;
1387
1264
  } | undefined;
1388
1265
  } | undefined;
1389
- position: [number, number, number];
1390
- rotation: [number, number, number];
1391
- side?: "back" | "front" | undefined;
1392
- verticalAnchor?: "floor" | "wall" | undefined;
1393
- floorThresholdVersion: 0 | 1;
1394
- wallId?: string | undefined;
1395
- roofSegmentId?: string | undefined;
1396
- roofFace?: "back" | "front" | "left" | "right" | undefined;
1397
- width: number;
1266
+ style: "cluster" | "dravidian-carved" | "faceted" | "fluted" | "lathe-turned" | "plain";
1267
+ crossSection: "octagonal" | "rectangular" | "round" | "sixteen-sided" | "square";
1398
1268
  height: number;
1399
- sidelightLeft?: number | undefined;
1400
- sidelightRight?: number | undefined;
1401
- transomHeight?: number | undefined;
1402
- slidingStyle?: "bypass" | "patio" | undefined;
1403
- mark?: string | undefined;
1404
- constructionType: "framed" | "masonry";
1405
- dimensionReference: "finish-opening" | "masonry-opening" | "nominal" | "rough-opening";
1406
- roughOpeningWidth?: number | undefined;
1407
- roughOpeningHeight?: number | undefined;
1408
- masonryOpeningWidth?: number | undefined;
1409
- masonryOpeningHeight?: number | undefined;
1410
- finishOpeningWidth?: number | undefined;
1411
- finishOpeningHeight?: number | undefined;
1412
- doorCategory: "garage" | "interior";
1413
- doorType: "barn" | "double" | "folding" | "french" | "garage-rollup" | "garage-sectional" | "garage-tiltup" | "hinged" | "pocket" | "sliding";
1414
- leafCount: 1 | 2 | 3 | 4 | 6 | 8;
1415
- operationState: number;
1416
- slideDirection: "left" | "right";
1417
- trackStyle: "none" | "overhead" | "pocket" | "visible";
1418
- garagePanelCount: number;
1419
- openingKind: "door" | "opening";
1420
- openingShape: "arch" | "rectangle" | "rounded";
1421
- openingRadiusMode: "all" | "individual";
1422
- openingTopRadii: [number, number];
1423
- cornerRadius: number;
1424
- archHeight: number;
1425
- openingRevealRadius: number;
1426
- frameThickness: number;
1427
- frameDepth?: number | undefined;
1428
- threshold: boolean;
1429
- thresholdHeight: number;
1430
- casingFaceA?: boolean | undefined;
1431
- casingFaceB?: boolean | undefined;
1432
- casingWidth?: number | undefined;
1433
- hingesSide: "left" | "right";
1434
- swingDirection: "inward" | "outward";
1435
- swingAngle: number;
1436
- segments: {
1437
- type: "empty" | "glass" | "panel";
1438
- heightRatio: number;
1439
- columnRatios: number[];
1440
- dividerThickness: number;
1441
- panelDepth: number;
1442
- panelInset: number;
1443
- }[];
1444
- handle: boolean;
1445
- handleStyle?: "bar" | "knob" | "lever" | "lever-curved" | "plate" | undefined;
1446
- handleHeight: number;
1447
- handleSide: "left" | "right";
1448
- contentPadding: [number, number];
1449
- doorCloser: boolean;
1450
- panicBar: boolean;
1451
- panicBarStyle: "crossbar" | "touchbar";
1452
- panicBarRods: boolean;
1453
- panicBarHeight: number;
1454
- type: "door";
1455
- } | {
1456
- object: "node";
1457
- name?: string | undefined;
1458
- parentId: string | null;
1459
- visible: boolean;
1460
- camera?: {
1461
- position: [number, number, number];
1462
- target: [number, number, number];
1463
- mode: "orthographic" | "perspective";
1464
- fov?: number | undefined;
1465
- zoom?: number | undefined;
1466
- } | undefined;
1467
- metadata: Record<string, unknown>;
1468
- provenance?: {
1469
- refs: {
1470
- ns?: string | undefined;
1471
- id: string;
1472
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
1473
- }[];
1474
- lineage?: {
1475
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
1476
- fromIds: string[];
1477
- } | undefined;
1478
- } | undefined;
1479
- id: `column_${string}`;
1480
- children: string[];
1481
- position: [number, number, number];
1482
- rotation: number;
1483
- supportSlabId?: string | undefined;
1484
- source?: {
1485
- kind: "script";
1486
- meta?: {
1487
- description?: string | undefined;
1488
- category?: string | undefined;
1489
- tags?: string[] | undefined;
1490
- parent?: string | undefined;
1491
- } | undefined;
1492
- language: "bpy" | "three";
1493
- script: string;
1494
- params: Record<string, string | number | boolean>;
1495
- artifact: string;
1496
- manifest: {
1497
- bounds: {
1498
- min: [number, number, number];
1499
- max: [number, number, number];
1500
- };
1501
- params: {
1502
- id: string;
1503
- label?: string | undefined;
1504
- kind: "boolean" | "number" | "string";
1505
- default: string | number | boolean;
1506
- min?: number | undefined;
1507
- max?: number | undefined;
1508
- step?: number | undefined;
1509
- unit?: string | undefined;
1510
- options?: string[] | undefined;
1511
- }[];
1512
- parts: {
1513
- id: string;
1514
- label?: string | undefined;
1515
- type?: string | undefined;
1516
- bounds?: {
1517
- min: [number, number, number];
1518
- max: [number, number, number];
1519
- } | undefined;
1520
- }[];
1521
- surfaces: {
1522
- part?: string | undefined;
1523
- y: number;
1524
- polygon: [number, number][];
1525
- }[];
1526
- slots: {
1527
- id: string;
1528
- label?: string | undefined;
1529
- color?: string | undefined;
1530
- roughness?: number | undefined;
1531
- metalness?: number | undefined;
1532
- transparent?: boolean | undefined;
1533
- emissive?: boolean | undefined;
1534
- }[];
1535
- anchors: {
1536
- id: string;
1537
- position: [number, number, number];
1538
- normal?: [number, number, number] | undefined;
1539
- }[];
1540
- lights: {
1541
- id: string;
1542
- position: [number, number, number];
1543
- color: string;
1544
- intensity: number;
1545
- distance?: number | undefined;
1546
- spot?: {
1547
- direction: [number, number, number];
1548
- angle: number;
1549
- softness: number;
1550
- } | undefined;
1551
- shadows?: boolean | undefined;
1552
- glow?: {
1553
- size: number;
1554
- strength: number;
1555
- } | undefined;
1556
- }[];
1557
- undersides: {
1558
- part?: string | undefined;
1559
- polygon: [number, number][];
1560
- plane: [number, number, number, number];
1561
- }[];
1562
- animations: {
1563
- name: string;
1564
- duration: number;
1565
- }[];
1566
- cutters?: {
1567
- host: "ceiling" | "mounted" | "slab" | "wall";
1568
- polygon: number[][];
1569
- minY: number;
1570
- maxY: number;
1571
- }[] | undefined;
1572
- cutout: boolean;
1573
- collider: boolean;
1574
- shape?: {
1575
- tolerance: number;
1576
- bands: {
1577
- y0: number;
1578
- y1: number;
1579
- polygons: {
1580
- outer: [number, number][];
1581
- holes?: [number, number][][] | undefined;
1582
- }[];
1583
- }[];
1584
- } | undefined;
1585
- triangles: number;
1586
- coverage?: number | undefined;
1587
- uncovered?: {
1588
- min: [number, number];
1589
- max: [number, number];
1590
- }[] | undefined;
1269
+ radius: number;
1270
+ width: number;
1271
+ depth: number;
1272
+ edgeSoftness: number;
1273
+ baseHeight: number;
1274
+ capitalHeight: number;
1275
+ shaftProfile: "baluster" | "bulged" | "hourglass" | "straight" | "tapered";
1276
+ shaftTaper: number;
1277
+ shaftBulge: number;
1278
+ shaftStartScale: number;
1279
+ shaftEndScale: number;
1280
+ shaftSegmentCount: number;
1281
+ shaftTwistStep: number;
1282
+ shaftCornerRadius: number;
1283
+ shaftDetail: "fluted" | "lathe-turned" | "none" | "panelled" | "spiral";
1284
+ baseStyle: "lotus" | "none" | "panelled-pedestal" | "ribbed-lotus" | "round-rings" | "simple-square" | "square-plinth" | "stepped-square";
1285
+ baseWidthScale: number;
1286
+ baseDepthScale: number;
1287
+ baseTierCount: number;
1288
+ baseStepSpread: number;
1289
+ basePlinthHeightRatio: number;
1290
+ baseRoundBandScale: number;
1291
+ baseNeckScale: number;
1292
+ baseRoundBandCount: number;
1293
+ baseRibCount: number;
1294
+ baseCarvingLevel: number;
1295
+ basePanelInset: number;
1296
+ capitalStyle: "corinthian-leaf" | "doric" | "ionic-volute" | "leaf-carved" | "none" | "rounded" | "simple" | "simple-slab" | "south-indian-bracket" | "stepped" | "volute" | "wood-bracket";
1297
+ capitalWidthScale: number;
1298
+ capitalDepthScale: number;
1299
+ capitalTierCount: number;
1300
+ capitalStepSpread: number;
1301
+ capitalBandCount: number;
1302
+ voluteSize: number;
1303
+ voluteCount: number;
1304
+ leafCount: number;
1305
+ leafRows: number;
1306
+ bracketDepth: number;
1307
+ bracketTierCount: number;
1308
+ pendantCount: number;
1309
+ capitalCarvingLevel: number;
1310
+ ringCount: number;
1311
+ ringPlacement: "bottom" | "ends" | "even" | "top";
1312
+ ringThickness: number;
1313
+ ringSpread: number;
1314
+ fluteCount: number;
1315
+ fluteDepth: number;
1316
+ fluteWidth: number;
1317
+ spiralTwist: number;
1318
+ spiralRibCount: number;
1319
+ panelCount: number;
1320
+ panelInsetDepth: number;
1321
+ panelShape: "arched" | "diamond" | "rectangle";
1322
+ latheRingCount: number;
1323
+ latheRingSpacing: "bottom" | "ends" | "even" | "top";
1324
+ carvingLevel: number;
1325
+ carvingPlacement: "all" | "base" | "capital" | "shaft";
1326
+ lowerBandEnabled: boolean;
1327
+ lowerBandHeight: number;
1328
+ lowerBandCarvingLevel: number;
1329
+ dentilCount: number;
1330
+ beadCount: number;
1331
+ supportStyle: "a-frame" | "box-frame" | "k-brace" | "portal-frame" | "single-strut" | "trestle" | "tripod" | "v-frame" | "vertical" | "x-brace" | "y-frame";
1332
+ braceWidth: number;
1333
+ braceDepth: number;
1334
+ braceBottomSpread: number;
1335
+ braceTopSpread: number;
1336
+ bracePlateEnabled: boolean;
1337
+ role?: "ornament" | "post" | undefined;
1338
+ postBase?: "none" | "pier" | "post-base" | undefined;
1339
+ material?: {
1340
+ id?: string | undefined;
1341
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1342
+ properties?: {
1343
+ color: string;
1344
+ roughness: number;
1345
+ metalness: number;
1346
+ opacity: number;
1347
+ transparent: boolean;
1348
+ side: "back" | "double" | "front";
1349
+ } | undefined;
1350
+ texture?: {
1351
+ url: string;
1352
+ repeat?: [number, number] | undefined;
1353
+ scale?: number | undefined;
1354
+ offset?: [number, number] | undefined;
1355
+ normalMap?: string | undefined;
1356
+ normalScale?: number | undefined;
1357
+ bumpMap?: string | undefined;
1358
+ bumpScale?: number | undefined;
1359
+ } | undefined;
1360
+ } | undefined;
1361
+ materialPreset?: string | undefined;
1362
+ slots?: Record<string, string> | undefined;
1363
+ type: "column";
1364
+ } | {
1365
+ object: "node";
1366
+ name?: string | undefined;
1367
+ parentId: string | null;
1368
+ visible: boolean;
1369
+ camera?: {
1370
+ position: [number, number, number];
1371
+ target: [number, number, number];
1372
+ mode: "orthographic" | "perspective";
1373
+ fov?: number | undefined;
1374
+ zoom?: number | undefined;
1375
+ } | undefined;
1376
+ metadata: Record<string, unknown>;
1377
+ provenance?: {
1378
+ refs: {
1379
+ ns?: string | undefined;
1380
+ id: string;
1381
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
1382
+ }[];
1383
+ lineage?: {
1384
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
1385
+ fromIds: string[];
1386
+ } | undefined;
1387
+ } | undefined;
1388
+ id: `rseg_${string}`;
1389
+ material?: {
1390
+ id?: string | undefined;
1391
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1392
+ properties?: {
1393
+ color: string;
1394
+ roughness: number;
1395
+ metalness: number;
1396
+ opacity: number;
1397
+ transparent: boolean;
1398
+ side: "back" | "double" | "front";
1399
+ } | undefined;
1400
+ texture?: {
1401
+ url: string;
1402
+ repeat?: [number, number] | undefined;
1403
+ scale?: number | undefined;
1404
+ offset?: [number, number] | undefined;
1405
+ normalMap?: string | undefined;
1406
+ normalScale?: number | undefined;
1407
+ bumpMap?: string | undefined;
1408
+ bumpScale?: number | undefined;
1409
+ } | undefined;
1410
+ } | undefined;
1411
+ materialPreset?: string | undefined;
1412
+ topMaterial?: {
1413
+ id?: string | undefined;
1414
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1415
+ properties?: {
1416
+ color: string;
1417
+ roughness: number;
1418
+ metalness: number;
1419
+ opacity: number;
1420
+ transparent: boolean;
1421
+ side: "back" | "double" | "front";
1422
+ } | undefined;
1423
+ texture?: {
1424
+ url: string;
1425
+ repeat?: [number, number] | undefined;
1426
+ scale?: number | undefined;
1427
+ offset?: [number, number] | undefined;
1428
+ normalMap?: string | undefined;
1429
+ normalScale?: number | undefined;
1430
+ bumpMap?: string | undefined;
1431
+ bumpScale?: number | undefined;
1432
+ } | undefined;
1433
+ } | undefined;
1434
+ topMaterialPreset?: string | undefined;
1435
+ edgeMaterial?: {
1436
+ id?: string | undefined;
1437
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1438
+ properties?: {
1439
+ color: string;
1440
+ roughness: number;
1441
+ metalness: number;
1442
+ opacity: number;
1443
+ transparent: boolean;
1444
+ side: "back" | "double" | "front";
1445
+ } | undefined;
1446
+ texture?: {
1447
+ url: string;
1448
+ repeat?: [number, number] | undefined;
1449
+ scale?: number | undefined;
1450
+ offset?: [number, number] | undefined;
1451
+ normalMap?: string | undefined;
1452
+ normalScale?: number | undefined;
1453
+ bumpMap?: string | undefined;
1454
+ bumpScale?: number | undefined;
1455
+ } | undefined;
1456
+ } | undefined;
1457
+ edgeMaterialPreset?: string | undefined;
1458
+ wallMaterial?: {
1459
+ id?: string | undefined;
1460
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1461
+ properties?: {
1462
+ color: string;
1463
+ roughness: number;
1464
+ metalness: number;
1465
+ opacity: number;
1466
+ transparent: boolean;
1467
+ side: "back" | "double" | "front";
1468
+ } | undefined;
1469
+ texture?: {
1470
+ url: string;
1471
+ repeat?: [number, number] | undefined;
1472
+ scale?: number | undefined;
1473
+ offset?: [number, number] | undefined;
1474
+ normalMap?: string | undefined;
1475
+ normalScale?: number | undefined;
1476
+ bumpMap?: string | undefined;
1477
+ bumpScale?: number | undefined;
1478
+ } | undefined;
1479
+ } | undefined;
1480
+ wallMaterialPreset?: string | undefined;
1481
+ position: [number, number, number];
1482
+ rotation: number;
1483
+ roofType: "barrel" | "conical" | "dutch" | "flat" | "gable" | "gambrel" | "hip" | "mansard" | "shed";
1484
+ barrelRise?: number | undefined;
1485
+ barrelSegments?: number | undefined;
1486
+ roofSystem?: "glazed" | "standard" | undefined;
1487
+ glazing?: {
1488
+ across: {
1489
+ layout: "count" | "fixed-spacing" | "maximum-spacing";
1490
+ count: number;
1491
+ spacing: number;
1492
+ alignment: "center" | "end" | "start";
1493
+ };
1494
+ along: {
1495
+ layout: "count" | "fixed-spacing" | "maximum-spacing";
1496
+ count: number;
1497
+ spacing: number;
1498
+ alignment: "center" | "end" | "start";
1499
+ };
1500
+ frameWidth: number;
1501
+ frameDepth: number;
1502
+ glassThickness: number;
1503
+ frameColor: string;
1504
+ glassColor: string;
1505
+ glassOpacity: number;
1506
+ glassRoughness: number;
1507
+ glazedEnds: boolean;
1508
+ panelType: "empty" | "glass" | "solid";
1509
+ panels: {
1510
+ face: string;
1511
+ column: number;
1512
+ row: number;
1513
+ type: "empty" | "glass" | "solid";
1514
+ }[];
1515
+ } | undefined;
1516
+ slots?: Record<string, string> | undefined;
1517
+ width: number;
1518
+ depth: number;
1519
+ conicalStartAngle?: number | undefined;
1520
+ conicalSweepAngle?: number | undefined;
1521
+ conicalFullCircle?: boolean | undefined;
1522
+ trim: {
1523
+ left: number;
1524
+ right: number;
1525
+ front: number;
1526
+ back: number;
1527
+ frontLeft: number;
1528
+ frontRight: number;
1529
+ backLeft: number;
1530
+ backRight: number;
1531
+ frontLeftX: number;
1532
+ frontLeftZ: number;
1533
+ frontRightX: number;
1534
+ frontRightZ: number;
1535
+ backLeftX: number;
1536
+ backLeftZ: number;
1537
+ backRightX: number;
1538
+ backRightZ: number;
1539
+ };
1540
+ wallHeight: number;
1541
+ pitch: number;
1542
+ wallThickness: number;
1543
+ deckThickness: number;
1544
+ overhang: number;
1545
+ gableOverhang?: number | undefined;
1546
+ shingleThickness: number;
1547
+ buildUp?: {
1548
+ presetId?: string | undefined;
1549
+ roofing: {
1550
+ kind: "architectural-shingle" | "asphalt-3-tab" | "clay-tile" | "concrete-tile" | "slate" | "standing-seam-metal" | "wood-shake";
1551
+ thickness: number;
1552
+ name?: string | undefined;
1553
+ };
1554
+ underlayment?: {
1555
+ kind: "felt-15" | "felt-30" | "ice-and-water" | "synthetic";
1556
+ thickness: number;
1557
+ name?: string | undefined;
1558
+ } | undefined;
1559
+ sheathing: {
1560
+ kind: "osb" | "plywood";
1561
+ thickness: number;
1562
+ name?: string | undefined;
1591
1563
  };
1592
- images?: {
1593
- artifact: string;
1594
- thumbnail: string;
1595
- floorPlan: string;
1564
+ structure: {
1565
+ system: "rafters" | "trusses";
1566
+ size: "2x10" | "2x12" | "2x4" | "2x6" | "2x8";
1567
+ spacing: number;
1568
+ };
1569
+ insulation?: {
1570
+ kind: "batt" | "blown" | "rigid";
1571
+ thickness: number;
1572
+ name?: string | undefined;
1573
+ } | undefined;
1574
+ finish?: {
1575
+ kind: "drywall" | "plaster" | "wood-plank";
1576
+ thickness: number;
1577
+ name?: string | undefined;
1596
1578
  } | undefined;
1597
1579
  } | undefined;
1598
- style: "cluster" | "dravidian-carved" | "faceted" | "fluted" | "lathe-turned" | "plain";
1599
- crossSection: "octagonal" | "rectangular" | "round" | "sixteen-sided" | "square";
1600
- height: number;
1601
- radius: number;
1602
- width: number;
1603
- depth: number;
1604
- edgeSoftness: number;
1605
- baseHeight: number;
1606
- capitalHeight: number;
1607
- shaftProfile: "baluster" | "bulged" | "hourglass" | "straight" | "tapered";
1608
- shaftTaper: number;
1609
- shaftBulge: number;
1610
- shaftStartScale: number;
1611
- shaftEndScale: number;
1612
- shaftSegmentCount: number;
1613
- shaftTwistStep: number;
1614
- shaftCornerRadius: number;
1615
- shaftDetail: "fluted" | "lathe-turned" | "none" | "panelled" | "spiral";
1616
- baseStyle: "lotus" | "none" | "panelled-pedestal" | "ribbed-lotus" | "round-rings" | "simple-square" | "square-plinth" | "stepped-square";
1617
- baseWidthScale: number;
1618
- baseDepthScale: number;
1619
- baseTierCount: number;
1620
- baseStepSpread: number;
1621
- basePlinthHeightRatio: number;
1622
- baseRoundBandScale: number;
1623
- baseNeckScale: number;
1624
- baseRoundBandCount: number;
1625
- baseRibCount: number;
1626
- baseCarvingLevel: number;
1627
- basePanelInset: number;
1628
- capitalStyle: "corinthian-leaf" | "doric" | "ionic-volute" | "leaf-carved" | "none" | "rounded" | "simple" | "simple-slab" | "south-indian-bracket" | "stepped" | "volute" | "wood-bracket";
1629
- capitalWidthScale: number;
1630
- capitalDepthScale: number;
1631
- capitalTierCount: number;
1632
- capitalStepSpread: number;
1633
- capitalBandCount: number;
1634
- voluteSize: number;
1635
- voluteCount: number;
1636
- leafCount: number;
1637
- leafRows: number;
1638
- bracketDepth: number;
1639
- bracketTierCount: number;
1640
- pendantCount: number;
1641
- capitalCarvingLevel: number;
1642
- ringCount: number;
1643
- ringPlacement: "bottom" | "ends" | "even" | "top";
1644
- ringThickness: number;
1645
- ringSpread: number;
1646
- fluteCount: number;
1647
- fluteDepth: number;
1648
- fluteWidth: number;
1649
- spiralTwist: number;
1650
- spiralRibCount: number;
1651
- panelCount: number;
1652
- panelInsetDepth: number;
1653
- panelShape: "arched" | "diamond" | "rectangle";
1654
- latheRingCount: number;
1655
- latheRingSpacing: "bottom" | "ends" | "even" | "top";
1656
- carvingLevel: number;
1657
- carvingPlacement: "all" | "base" | "capital" | "shaft";
1658
- lowerBandEnabled: boolean;
1659
- lowerBandHeight: number;
1660
- lowerBandCarvingLevel: number;
1661
- dentilCount: number;
1662
- beadCount: number;
1663
- supportStyle: "a-frame" | "box-frame" | "k-brace" | "portal-frame" | "single-strut" | "trestle" | "tripod" | "v-frame" | "vertical" | "x-brace" | "y-frame";
1664
- braceWidth: number;
1665
- braceDepth: number;
1666
- braceBottomSpread: number;
1667
- braceTopSpread: number;
1668
- bracePlateEnabled: boolean;
1669
- role?: "ornament" | "post" | undefined;
1670
- postBase?: "none" | "pier" | "post-base" | undefined;
1671
- material?: {
1580
+ arc?: {
1581
+ centerX: number;
1582
+ centerZ: number;
1583
+ radius: number;
1584
+ } | undefined;
1585
+ shedSideInfillSpan?: number | undefined;
1586
+ shedSideInfillMinX?: number | undefined;
1587
+ shedSideInfillMaxX?: number | undefined;
1588
+ shedFootprintPieces?: [number, number][][] | undefined;
1589
+ shedOpenEndSides?: ("left" | "right")[] | undefined;
1590
+ shedJointFrame?: {
1591
+ position: [number, number, number];
1592
+ rotation: number;
1593
+ } | undefined;
1594
+ shedJointOwnerId?: string | undefined;
1595
+ shedJointNeighborIds?: string[] | undefined;
1596
+ shedJointScopeId?: string | undefined;
1597
+ managedByParent: boolean;
1598
+ wallShell: "auto" | "include" | "omit";
1599
+ shedInsetEndPanels: boolean;
1600
+ fascia?: boolean | undefined;
1601
+ eaveCut?: "plumb" | "plumb-level" | "square" | undefined;
1602
+ fasciaHighEdge?: boolean | undefined;
1603
+ fasciaHeight?: number | undefined;
1604
+ fasciaDepth?: number | undefined;
1605
+ fasciaMaterial?: {
1672
1606
  id?: string | undefined;
1673
1607
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1674
1608
  properties?: {
@@ -1690,9 +1624,87 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
1690
1624
  bumpScale?: number | undefined;
1691
1625
  } | undefined;
1692
1626
  } | undefined;
1693
- materialPreset?: string | undefined;
1694
- slots?: Record<string, string> | undefined;
1695
- type: "column";
1627
+ fasciaMaterialPreset?: string | undefined;
1628
+ heelMaterial?: {
1629
+ id?: string | undefined;
1630
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1631
+ properties?: {
1632
+ color: string;
1633
+ roughness: number;
1634
+ metalness: number;
1635
+ opacity: number;
1636
+ transparent: boolean;
1637
+ side: "back" | "double" | "front";
1638
+ } | undefined;
1639
+ texture?: {
1640
+ url: string;
1641
+ repeat?: [number, number] | undefined;
1642
+ scale?: number | undefined;
1643
+ offset?: [number, number] | undefined;
1644
+ normalMap?: string | undefined;
1645
+ normalScale?: number | undefined;
1646
+ bumpMap?: string | undefined;
1647
+ bumpScale?: number | undefined;
1648
+ } | undefined;
1649
+ } | undefined;
1650
+ heelMaterialPreset?: string | undefined;
1651
+ gableLeftMaterial?: {
1652
+ id?: string | undefined;
1653
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1654
+ properties?: {
1655
+ color: string;
1656
+ roughness: number;
1657
+ metalness: number;
1658
+ opacity: number;
1659
+ transparent: boolean;
1660
+ side: "back" | "double" | "front";
1661
+ } | undefined;
1662
+ texture?: {
1663
+ url: string;
1664
+ repeat?: [number, number] | undefined;
1665
+ scale?: number | undefined;
1666
+ offset?: [number, number] | undefined;
1667
+ normalMap?: string | undefined;
1668
+ normalScale?: number | undefined;
1669
+ bumpMap?: string | undefined;
1670
+ bumpScale?: number | undefined;
1671
+ } | undefined;
1672
+ } | undefined;
1673
+ gableLeftMaterialPreset?: string | undefined;
1674
+ gableRightMaterial?: {
1675
+ id?: string | undefined;
1676
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
1677
+ properties?: {
1678
+ color: string;
1679
+ roughness: number;
1680
+ metalness: number;
1681
+ opacity: number;
1682
+ transparent: boolean;
1683
+ side: "back" | "double" | "front";
1684
+ } | undefined;
1685
+ texture?: {
1686
+ url: string;
1687
+ repeat?: [number, number] | undefined;
1688
+ scale?: number | undefined;
1689
+ offset?: [number, number] | undefined;
1690
+ normalMap?: string | undefined;
1691
+ normalScale?: number | undefined;
1692
+ bumpMap?: string | undefined;
1693
+ bumpScale?: number | undefined;
1694
+ } | undefined;
1695
+ } | undefined;
1696
+ gableRightMaterialPreset?: string | undefined;
1697
+ gambrelLowerWidthRatio: number;
1698
+ gambrelLowerHeightRatio: number;
1699
+ mansardSteepWidthRatio: number;
1700
+ mansardSteepHeightRatio: number;
1701
+ dutchHipWidthRatio: number;
1702
+ dutchHipHeightRatio: number;
1703
+ dutchWaistLengthRatio: number;
1704
+ dutchGabletRake: number;
1705
+ dutchTopRakeThickness: number;
1706
+ children: string[];
1707
+ type: "roof-segment";
1696
1708
  } | {
1697
1709
  object: "node";
1698
1710
  name?: string | undefined;
@@ -1881,7 +1893,7 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
1881
1893
  cavityInsulation?: string | undefined;
1882
1894
  } | undefined;
1883
1895
  slots?: Record<string, string> | undefined;
1884
- children: `rseg_${string}`[];
1896
+ children: string[];
1885
1897
  type: "roof";
1886
1898
  } | {
1887
1899
  object: "node";
@@ -2436,6 +2448,7 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
2436
2448
  } | undefined;
2437
2449
  justification?: "a" | "b" | undefined;
2438
2450
  height?: number | undefined;
2451
+ endHeightOffset?: number | undefined;
2439
2452
  curveOffset?: number | undefined;
2440
2453
  supportSlabId?: string | undefined;
2441
2454
  supportOffset?: number | undefined;
@@ -2709,11 +2722,75 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
2709
2722
  toHeight?: number | undefined;
2710
2723
  } | undefined;
2711
2724
  } | undefined;
2712
- start: [number, number];
2713
- end: [number, number];
2714
- frontSide: "exterior" | "interior" | "unknown";
2715
- backSide: "exterior" | "interior" | "unknown";
2716
- type: "wall";
2725
+ start: [number, number];
2726
+ end: [number, number];
2727
+ frontSide: "exterior" | "interior" | "unknown";
2728
+ backSide: "exterior" | "interior" | "unknown";
2729
+ type: "wall";
2730
+ } | {
2731
+ object: "node";
2732
+ name?: string | undefined;
2733
+ parentId: string | null;
2734
+ visible: boolean;
2735
+ camera?: {
2736
+ position: [number, number, number];
2737
+ target: [number, number, number];
2738
+ mode: "orthographic" | "perspective";
2739
+ fov?: number | undefined;
2740
+ zoom?: number | undefined;
2741
+ } | undefined;
2742
+ metadata: Record<string, unknown>;
2743
+ provenance?: {
2744
+ refs: {
2745
+ ns?: string | undefined;
2746
+ id: string;
2747
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
2748
+ }[];
2749
+ lineage?: {
2750
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
2751
+ fromIds: string[];
2752
+ } | undefined;
2753
+ } | undefined;
2754
+ id: `separator_${string}`;
2755
+ start: [number, number];
2756
+ end: [number, number];
2757
+ type: "separator";
2758
+ } | {
2759
+ object: "node";
2760
+ name?: string | undefined;
2761
+ parentId: string | null;
2762
+ visible: boolean;
2763
+ camera?: {
2764
+ position: [number, number, number];
2765
+ target: [number, number, number];
2766
+ mode: "orthographic" | "perspective";
2767
+ fov?: number | undefined;
2768
+ zoom?: number | undefined;
2769
+ } | undefined;
2770
+ metadata: Record<string, unknown>;
2771
+ provenance?: {
2772
+ refs: {
2773
+ ns?: string | undefined;
2774
+ id: string;
2775
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
2776
+ }[];
2777
+ lineage?: {
2778
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
2779
+ fromIds: string[];
2780
+ } | undefined;
2781
+ } | undefined;
2782
+ id: `floor-opening_${string}`;
2783
+ polygon: [number, number][];
2784
+ hostZoneId?: string | undefined;
2785
+ legacyPlateCuts?: Record<string, [number, number][][]> | undefined;
2786
+ legacyCeilingCuts?: Record<string, [number, number][][]> | undefined;
2787
+ source: string;
2788
+ ownerId?: string | undefined;
2789
+ surfaceId?: string | undefined;
2790
+ drawnOn: "ceiling" | "floor";
2791
+ cutsPrimary: boolean;
2792
+ cutsAdjacent: boolean;
2793
+ type: "floor-opening";
2717
2794
  } | {
2718
2795
  object: "node";
2719
2796
  name?: string | undefined;
@@ -2832,42 +2909,18 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
2832
2909
  fromIds: string[];
2833
2910
  } | undefined;
2834
2911
  } | undefined;
2835
- id: `construction-dimension_${string}`;
2836
- anchors: ({
2837
- kind: "feature";
2838
- reference: {
2839
- nodeId: string;
2840
- featureId: string;
2841
- parameters?: Record<string, string | number | boolean> | undefined;
2842
- };
2843
- fallback: [number, number, number];
2844
- } | [number, number, number])[];
2845
- baseline: {
2846
- origin: [number, number];
2847
- direction: [number, number];
2848
- };
2849
- chainMode: "continuous" | "point-to-point";
2850
- mode: "angular" | "arc-length" | "center-mark" | "chord" | "coordinate" | "diameter" | "linear" | "radius";
2851
- featureCount: number;
2852
- showCenterMark: boolean;
2853
- prefix: string;
2854
- suffix: string;
2855
- textOverride: string | null;
2856
- datumPolicy: "centerline" | "finish-face" | "structural-face" | "wall-face";
2857
- terminator: "architectural-tick" | "dot" | "filled-arrow" | "open-arrow";
2858
- textPosition: "above" | "centered";
2859
- imperialPrecision: "1" | "1/16" | "1/2" | "1/4" | "1/8";
2860
- metricNotation: "meters" | "millimeters";
2861
- extensionStartGap: number;
2862
- extensionOvershoot: number;
2863
- drawingType: "floor-plan" | "foundation-plan" | "reflected-ceiling-plan" | "roof-plan" | "site-plan";
2864
- drawingOverrides: {
2865
- drawingType: "floor-plan" | "foundation-plan" | "reflected-ceiling-plan" | "roof-plan" | "site-plan";
2866
- presentation: "controlled" | "omit" | "shown";
2867
- suppressedSegmentIndexes: number[];
2868
- }[];
2869
- controllingDimensionId: `construction-dimension_${string}` | null;
2870
- type: "construction-dimension";
2912
+ id: `beam_${string}`;
2913
+ start: [number, number];
2914
+ end: [number, number];
2915
+ width: number;
2916
+ depth: number;
2917
+ size?: string | undefined;
2918
+ plies: number;
2919
+ material: "glulam" | "lvl" | "pressure-treated" | "sawn" | "steel";
2920
+ placement: "dropped" | "flush";
2921
+ topElevation?: number | undefined;
2922
+ supportSlabId?: string | undefined;
2923
+ type: "beam";
2871
2924
  } | {
2872
2925
  object: "node";
2873
2926
  name?: string | undefined;
@@ -3416,8 +3469,7 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
3416
3469
  fromIds: string[];
3417
3470
  } | undefined;
3418
3471
  } | undefined;
3419
- id: `ceiling_${string}`;
3420
- children: (`item_${string}` | `procedural-item_${string}`)[];
3472
+ id: `sseg_${string}`;
3421
3473
  material?: {
3422
3474
  id?: string | undefined;
3423
3475
  preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
@@ -3442,48 +3494,34 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
3442
3494
  } | undefined;
3443
3495
  materialPreset?: string | undefined;
3444
3496
  slots?: Record<string, string> | undefined;
3445
- polygon: [number, number][];
3446
- holes: [number, number][][];
3447
- holeMetadata: {
3448
- source: "elevator" | "floor-opening" | "manual" | "room" | "stair";
3449
- openingId?: string | undefined;
3450
- stairId?: string | undefined;
3451
- elevatorId?: string | undefined;
3452
- }[];
3453
- openingIds?: string[] | undefined;
3454
- height?: number | undefined;
3455
- buildUp?: {
3456
- presetId?: string | undefined;
3457
- finish?: {
3458
- kind: "drywall" | "plaster" | "wood-plank";
3459
- thickness: number;
3460
- name?: string | undefined;
3461
- } | undefined;
3462
- framing?: {
3463
- system: "joists" | "truss-chords";
3464
- size: "2x10" | "2x12" | "2x4" | "2x6" | "2x8";
3465
- spacing: number;
3466
- } | undefined;
3467
- decking?: {
3468
- kind: "osb" | "plywood";
3469
- thickness: number;
3470
- name?: string | undefined;
3471
- } | undefined;
3472
- insulation?: {
3473
- kind: "batt" | "blown" | "rigid";
3474
- thickness: number;
3475
- name?: string | undefined;
3476
- } | undefined;
3497
+ position: [number, number, number];
3498
+ rotation: number;
3499
+ segmentType: "landing" | "stair";
3500
+ width: number;
3501
+ length: number;
3502
+ height: number;
3503
+ stepCount: number;
3504
+ attachmentSide: "front" | "left" | "right";
3505
+ fillToFloor: boolean;
3506
+ construction?: {
3507
+ mode: "center-stringer" | "open" | "side-stringers" | "solid" | "waist";
3508
+ waistThickness: number;
3509
+ treadThickness: number;
3510
+ riserThickness: number;
3511
+ nosing: number;
3512
+ finishThickness: number;
3513
+ closedRisers: boolean;
3514
+ stringerWidth: number;
3515
+ stringerDepth: number;
3477
3516
  } | undefined;
3478
- regions?: {
3479
- id: string;
3480
- polygon: [number, number][];
3481
- finish: string | Record<string, unknown>;
3482
- }[] | undefined;
3483
- boundary?: "auto" | undefined;
3484
- zoneId?: string | undefined;
3485
- autoFromWalls: boolean;
3486
- type: "ceiling";
3517
+ winder?: {
3518
+ turn: "left" | "right";
3519
+ innerGap: number;
3520
+ walkingLineOffset: number;
3521
+ division: "equal-angle" | "equal-going";
3522
+ } | undefined;
3523
+ thickness: number;
3524
+ type: "stair-segment";
3487
3525
  } | {
3488
3526
  object: "node";
3489
3527
  name?: string | undefined;
@@ -3781,94 +3819,89 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
3781
3819
  fromIds: string[];
3782
3820
  } | undefined;
3783
3821
  } | undefined;
3784
- id: `shelf_${string}`;
3785
- children: string[];
3786
- position: [number, number, number];
3787
- rotation: [number, number, number];
3788
- supportSlabId?: string | undefined;
3789
- width: number;
3790
- depth: number;
3791
- thickness: number;
3792
- height: number;
3793
- style: "bookshelf" | "cubby" | "open-rack" | "wall-shelf";
3794
- rows: number;
3795
- columns: number;
3796
- withBack: boolean;
3797
- withSides: boolean;
3798
- withBottom: boolean;
3799
- bracketStyle: "hidden" | "industrial" | "minimal";
3800
- material?: {
3801
- id?: string | undefined;
3802
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
3803
- properties?: {
3804
- color: string;
3805
- roughness: number;
3806
- metalness: number;
3807
- opacity: number;
3808
- transparent: boolean;
3809
- side: "back" | "double" | "front";
3810
- } | undefined;
3811
- texture?: {
3812
- url: string;
3813
- repeat?: [number, number] | undefined;
3814
- scale?: number | undefined;
3815
- offset?: [number, number] | undefined;
3816
- normalMap?: string | undefined;
3817
- normalScale?: number | undefined;
3818
- bumpMap?: string | undefined;
3819
- bumpScale?: number | undefined;
3820
- } | undefined;
3821
- } | undefined;
3822
- materialPreset?: string | undefined;
3823
- slots?: Record<string, string> | undefined;
3824
- type: "shelf";
3825
- } | {
3826
- object: "node";
3827
- name?: string | undefined;
3828
- parentId: string | null;
3829
- visible: boolean;
3830
- camera?: {
3831
- position: [number, number, number];
3832
- target: [number, number, number];
3833
- mode: "orthographic" | "perspective";
3834
- fov?: number | undefined;
3835
- zoom?: number | undefined;
3836
- } | undefined;
3837
- metadata: Record<string, unknown>;
3838
- provenance?: {
3839
- refs: {
3840
- ns?: string | undefined;
3841
- id: string;
3842
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
3843
- }[];
3844
- lineage?: {
3845
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
3846
- fromIds: string[];
3847
- } | undefined;
3848
- } | undefined;
3849
- id: `duct-fitting_${string}`;
3850
- position: [number, number, number];
3851
- rotation: [number, number, number];
3852
- fittingType: "access-panel" | "coupling" | "cross" | "damper" | "elbow" | "end-cap" | "reducer" | "tee" | "transition";
3853
- shape: "oval" | "rect" | "round";
3854
- inletShape?: "oval" | "rect" | "round" | undefined;
3855
- outletShape?: "oval" | "rect" | "round" | undefined;
3856
- width: number;
3857
- height: number;
3858
- shape2: "oval" | "rect" | "round";
3859
- width2: number;
3860
- height2: number;
3861
- angle: number;
3862
- branchAngle: number;
3863
- diameter: number;
3864
- diameter2: number;
3865
- ductMaterial: "duct-board" | "flex" | "sheet-metal";
3866
- system: "return" | "supply";
3867
- damperAngle: number;
3868
- panelWidth: number;
3869
- panelHeight: number;
3870
- slots?: Record<string, string> | undefined;
3871
- type: "duct-fitting";
3822
+ id: `measurement_${string}`;
3823
+ measurement: {
3824
+ kind: "distance";
3825
+ points: [{
3826
+ kind: "feature";
3827
+ reference: {
3828
+ nodeId: string;
3829
+ featureId: string;
3830
+ parameters?: Record<string, string | number | boolean> | undefined;
3831
+ };
3832
+ fallback: [number, number, number];
3833
+ } | [number, number, number], {
3834
+ kind: "feature";
3835
+ reference: {
3836
+ nodeId: string;
3837
+ featureId: string;
3838
+ parameters?: Record<string, string | number | boolean> | undefined;
3839
+ };
3840
+ fallback: [number, number, number];
3841
+ } | [number, number, number]];
3842
+ } | {
3843
+ kind: "angle";
3844
+ points: [{
3845
+ kind: "feature";
3846
+ reference: {
3847
+ nodeId: string;
3848
+ featureId: string;
3849
+ parameters?: Record<string, string | number | boolean> | undefined;
3850
+ };
3851
+ fallback: [number, number, number];
3852
+ } | [number, number, number], {
3853
+ kind: "feature";
3854
+ reference: {
3855
+ nodeId: string;
3856
+ featureId: string;
3857
+ parameters?: Record<string, string | number | boolean> | undefined;
3858
+ };
3859
+ fallback: [number, number, number];
3860
+ } | [number, number, number], {
3861
+ kind: "feature";
3862
+ reference: {
3863
+ nodeId: string;
3864
+ featureId: string;
3865
+ parameters?: Record<string, string | number | boolean> | undefined;
3866
+ };
3867
+ fallback: [number, number, number];
3868
+ } | [number, number, number]];
3869
+ } | {
3870
+ kind: "area";
3871
+ base: ({
3872
+ kind: "feature";
3873
+ reference: {
3874
+ nodeId: string;
3875
+ featureId: string;
3876
+ parameters?: Record<string, string | number | boolean> | undefined;
3877
+ };
3878
+ fallback: [number, number, number];
3879
+ } | [number, number, number])[];
3880
+ } | {
3881
+ kind: "perimeter";
3882
+ base: ({
3883
+ kind: "feature";
3884
+ reference: {
3885
+ nodeId: string;
3886
+ featureId: string;
3887
+ parameters?: Record<string, string | number | boolean> | undefined;
3888
+ };
3889
+ fallback: [number, number, number];
3890
+ } | [number, number, number])[];
3891
+ } | {
3892
+ kind: "volume";
3893
+ base: ({
3894
+ kind: "feature";
3895
+ reference: {
3896
+ nodeId: string;
3897
+ featureId: string;
3898
+ parameters?: Record<string, string | number | boolean> | undefined;
3899
+ };
3900
+ fallback: [number, number, number];
3901
+ } | [number, number, number])[];
3902
+ extrusion: [number, number, number];
3903
+ };
3904
+ type: "measurement";
3872
3905
  } | {
3873
3906
  object: "node";
3874
3907
  name?: string | undefined;
@@ -3893,19 +3926,11 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
3893
3926
  fromIds: string[];
3894
3927
  } | undefined;
3895
3928
  } | undefined;
3896
- id: `duct-terminal_${string}`;
3929
+ id: `spawn_${string}`;
3897
3930
  position: [number, number, number];
3898
3931
  rotation: number;
3899
3932
  supportSlabId?: string | undefined;
3900
- terminalType: "diffuser" | "return-grille" | "supply-register";
3901
- mount: "ceiling" | "floor" | "wall";
3902
- width: number;
3903
- depth: number;
3904
- collarShape: "oval" | "rect" | "round";
3905
- collarDiameter: number;
3906
- collarWidth: number;
3907
- collarHeight: number;
3908
- type: "duct-terminal";
3933
+ type: "spawn";
3909
3934
  } | {
3910
3935
  object: "node";
3911
3936
  name?: string | undefined;
@@ -3930,51 +3955,47 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
3930
3955
  fromIds: string[];
3931
3956
  } | undefined;
3932
3957
  } | undefined;
3933
- id: `hvac-equipment_${string}`;
3958
+ id: `shelf_${string}`;
3959
+ children: string[];
3934
3960
  position: [number, number, number];
3935
- rotation: number;
3961
+ rotation: [number, number, number];
3936
3962
  supportSlabId?: string | undefined;
3937
- equipmentType: "air-handler" | "condenser" | "furnace";
3938
3963
  width: number;
3939
3964
  depth: number;
3965
+ thickness: number;
3940
3966
  height: number;
3941
- supplyShape: "oval" | "rect" | "round";
3942
- returnShape: "oval" | "rect" | "round";
3943
- supplyDiameter: number;
3944
- returnDiameter: number;
3945
- supplyWidth: number;
3946
- supplyHeight: number;
3947
- returnWidth: number;
3948
- returnHeight: number;
3949
- type: "hvac-equipment";
3950
- } | {
3951
- object: "node";
3952
- name?: string | undefined;
3953
- parentId: string | null;
3954
- visible: boolean;
3955
- camera?: {
3956
- position: [number, number, number];
3957
- target: [number, number, number];
3958
- mode: "orthographic" | "perspective";
3959
- fov?: number | undefined;
3960
- zoom?: number | undefined;
3961
- } | undefined;
3962
- metadata: Record<string, unknown>;
3963
- provenance?: {
3964
- refs: {
3965
- ns?: string | undefined;
3966
- id: string;
3967
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
3968
- }[];
3969
- lineage?: {
3970
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
3971
- fromIds: string[];
3967
+ style: "bookshelf" | "cubby" | "open-rack" | "wall-shelf";
3968
+ rows: number;
3969
+ columns: number;
3970
+ withBack: boolean;
3971
+ withSides: boolean;
3972
+ withBottom: boolean;
3973
+ bracketStyle: "hidden" | "industrial" | "minimal";
3974
+ material?: {
3975
+ id?: string | undefined;
3976
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
3977
+ properties?: {
3978
+ color: string;
3979
+ roughness: number;
3980
+ metalness: number;
3981
+ opacity: number;
3982
+ transparent: boolean;
3983
+ side: "back" | "double" | "front";
3984
+ } | undefined;
3985
+ texture?: {
3986
+ url: string;
3987
+ repeat?: [number, number] | undefined;
3988
+ scale?: number | undefined;
3989
+ offset?: [number, number] | undefined;
3990
+ normalMap?: string | undefined;
3991
+ normalScale?: number | undefined;
3992
+ bumpMap?: string | undefined;
3993
+ bumpScale?: number | undefined;
3972
3994
  } | undefined;
3973
3995
  } | undefined;
3974
- id: `liquid-line_${string}`;
3975
- path: [number, number, number][];
3976
- diameter: number;
3977
- type: "liquid-line";
3996
+ materialPreset?: string | undefined;
3997
+ slots?: Record<string, string> | undefined;
3998
+ type: "shelf";
3978
3999
  } | {
3979
4000
  object: "node";
3980
4001
  name?: string | undefined;
@@ -3999,7 +4020,7 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
3999
4020
  fromIds: string[];
4000
4021
  } | undefined;
4001
4022
  } | undefined;
4002
- id: `pipe-segment_${string}`;
4023
+ id: `duct-segment_${string}`;
4003
4024
  path: [number, number, number][];
4004
4025
  autoHangers?: boolean | undefined;
4005
4026
  hangerOverrides?: Record<string, {
@@ -4017,10 +4038,18 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
4017
4038
  endUV: [number, number];
4018
4039
  offset: number;
4019
4040
  } | undefined;
4041
+ shape: "oval" | "rect" | "round";
4020
4042
  diameter: number;
4021
- pipeMaterial: "abs" | "cast-iron" | "pvc";
4022
- system: "vent" | "waste";
4023
- type: "pipe-segment";
4043
+ width: number;
4044
+ height: number;
4045
+ roll: number;
4046
+ ductMaterial: "duct-board" | "flex" | "sheet-metal" | "spiral";
4047
+ seamDetail: boolean;
4048
+ insulated: boolean;
4049
+ insulationR: number;
4050
+ system: "return" | "supply";
4051
+ slots?: Record<string, string> | undefined;
4052
+ type: "duct-segment";
4024
4053
  } | {
4025
4054
  object: "node";
4026
4055
  name?: string | undefined;
@@ -4045,17 +4074,29 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
4045
4074
  fromIds: string[];
4046
4075
  } | undefined;
4047
4076
  } | undefined;
4048
- id: `pipe-fitting_${string}`;
4077
+ id: `duct-fitting_${string}`;
4049
4078
  position: [number, number, number];
4050
4079
  rotation: [number, number, number];
4051
- fittingType: "cleanout" | "coupling" | "cross" | "elbow" | "end-cap" | "reducer" | "sanitary-tee" | "wye";
4080
+ fittingType: "access-panel" | "coupling" | "cross" | "damper" | "elbow" | "end-cap" | "reducer" | "tee" | "transition";
4081
+ shape: "oval" | "rect" | "round";
4082
+ inletShape?: "oval" | "rect" | "round" | undefined;
4083
+ outletShape?: "oval" | "rect" | "round" | undefined;
4084
+ width: number;
4085
+ height: number;
4086
+ shape2: "oval" | "rect" | "round";
4087
+ width2: number;
4088
+ height2: number;
4052
4089
  angle: number;
4090
+ branchAngle: number;
4053
4091
  diameter: number;
4054
4092
  diameter2: number;
4055
- cleanoutStyle: "end" | "inline";
4056
- pipeMaterial: "abs" | "cast-iron" | "pvc";
4057
- system: "vent" | "waste";
4058
- type: "pipe-fitting";
4093
+ ductMaterial: "duct-board" | "flex" | "sheet-metal";
4094
+ system: "return" | "supply";
4095
+ damperAngle: number;
4096
+ panelWidth: number;
4097
+ panelHeight: number;
4098
+ slots?: Record<string, string> | undefined;
4099
+ type: "duct-fitting";
4059
4100
  } | {
4060
4101
  object: "node";
4061
4102
  name?: string | undefined;
@@ -4080,12 +4121,19 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
4080
4121
  fromIds: string[];
4081
4122
  } | undefined;
4082
4123
  } | undefined;
4083
- id: `level_${string}`;
4084
- 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}`)[];
4085
- level: number;
4086
- baseElevation: number;
4087
- height?: number | undefined;
4088
- type: "level";
4124
+ id: `duct-terminal_${string}`;
4125
+ position: [number, number, number];
4126
+ rotation: number;
4127
+ supportSlabId?: string | undefined;
4128
+ terminalType: "diffuser" | "return-grille" | "supply-register";
4129
+ mount: "ceiling" | "floor" | "wall";
4130
+ width: number;
4131
+ depth: number;
4132
+ collarShape: "oval" | "rect" | "round";
4133
+ collarDiameter: number;
4134
+ collarWidth: number;
4135
+ collarHeight: number;
4136
+ type: "duct-terminal";
4089
4137
  } | {
4090
4138
  object: "node";
4091
4139
  name?: string | undefined;
@@ -4110,56 +4158,26 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
4110
4158
  fromIds: string[];
4111
4159
  } | undefined;
4112
4160
  } | undefined;
4113
- id: `elevator_${string}`;
4114
- material?: {
4115
- id?: string | undefined;
4116
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
4117
- properties?: {
4118
- color: string;
4119
- roughness: number;
4120
- metalness: number;
4121
- opacity: number;
4122
- transparent: boolean;
4123
- side: "back" | "double" | "front";
4124
- } | undefined;
4125
- texture?: {
4126
- url: string;
4127
- repeat?: [number, number] | undefined;
4128
- scale?: number | undefined;
4129
- offset?: [number, number] | undefined;
4130
- normalMap?: string | undefined;
4131
- normalScale?: number | undefined;
4132
- bumpMap?: string | undefined;
4133
- bumpScale?: number | undefined;
4134
- } | undefined;
4135
- } | undefined;
4136
- materialPreset?: string | undefined;
4137
- slots?: Record<string, string> | undefined;
4161
+ id: `hvac-equipment_${string}`;
4138
4162
  position: [number, number, number];
4139
4163
  rotation: number;
4164
+ supportSlabId?: string | undefined;
4165
+ equipmentType: "air-handler" | "condenser" | "furnace";
4140
4166
  width: number;
4141
4167
  depth: number;
4142
- shaftWidth?: number | undefined;
4143
- shaftDepth?: number | undefined;
4144
- shaftWallThickness: number;
4145
- shaftStyle: "glass" | "solid";
4146
- cabHeight: number;
4147
- doorWidth: number;
4148
- doorHeight: number;
4149
- doorStyle: "center-opening" | "single-left" | "single-right";
4150
- doorPanelStyle: "glass-frame" | "segmented-panel" | "solid-panel";
4151
- fromLevelId: string | null;
4152
- toLevelId: string | null;
4153
- servedLevelIds?: string[] | undefined;
4154
- disabledLevelIds: string[];
4155
- serviceOnlyLevelIds: string[];
4156
- defaultLevelId: string | null;
4157
- speed: number;
4158
- doorDurationMs: number;
4159
- dwellMs: number;
4160
- type: "elevator";
4168
+ height: number;
4169
+ supplyShape: "oval" | "rect" | "round";
4170
+ returnShape: "oval" | "rect" | "round";
4171
+ supplyDiameter: number;
4172
+ returnDiameter: number;
4173
+ supplyWidth: number;
4174
+ supplyHeight: number;
4175
+ returnWidth: number;
4176
+ returnHeight: number;
4177
+ type: "hvac-equipment";
4161
4178
  } | {
4162
4179
  object: "node";
4180
+ name?: string | undefined;
4163
4181
  parentId: string | null;
4164
4182
  visible: boolean;
4165
4183
  camera?: {
@@ -4169,6 +4187,7 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
4169
4187
  fov?: number | undefined;
4170
4188
  zoom?: number | undefined;
4171
4189
  } | undefined;
4190
+ metadata: Record<string, unknown>;
4172
4191
  provenance?: {
4173
4192
  refs: {
4174
4193
  ns?: string | undefined;
@@ -4180,13 +4199,12 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
4180
4199
  fromIds: string[];
4181
4200
  } | undefined;
4182
4201
  } | undefined;
4183
- id: `unit_${string}`;
4184
- name: string;
4185
- kind: "apartment" | "commercial" | "common" | "hotel-room";
4186
- members: `zone_${string}`[];
4187
- color: string;
4188
- metadata: Record<string, unknown>;
4189
- type: "unit";
4202
+ id: `lineset_${string}`;
4203
+ path: [number, number, number][];
4204
+ suctionDiameter: number;
4205
+ liquidDiameter: number;
4206
+ insulated: boolean;
4207
+ type: "lineset";
4190
4208
  } | {
4191
4209
  object: "node";
4192
4210
  name?: string | undefined;
@@ -4211,12 +4229,10 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
4211
4229
  fromIds: string[];
4212
4230
  } | undefined;
4213
4231
  } | undefined;
4214
- id: `building_${string}`;
4215
- children: (`elevator_${string}` | `level_${string}` | `unit_${string}`)[];
4216
- position: [number, number, number];
4217
- rotation: [number, number, number];
4218
- groundLevelId?: `level_${string}` | undefined;
4219
- type: "building";
4232
+ id: `liquid-line_${string}`;
4233
+ path: [number, number, number][];
4234
+ diameter: number;
4235
+ type: "liquid-line";
4220
4236
  } | {
4221
4237
  object: "node";
4222
4238
  name?: string | undefined;
@@ -4241,126 +4257,28 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
4241
4257
  fromIds: string[];
4242
4258
  } | undefined;
4243
4259
  } | undefined;
4244
- id: `dormer_${string}`;
4245
- material?: {
4246
- id?: string | undefined;
4247
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
4248
- properties?: {
4249
- color: string;
4250
- roughness: number;
4251
- metalness: number;
4252
- opacity: number;
4253
- transparent: boolean;
4254
- side: "back" | "double" | "front";
4255
- } | undefined;
4256
- texture?: {
4257
- url: string;
4258
- repeat?: [number, number] | undefined;
4259
- scale?: number | undefined;
4260
- offset?: [number, number] | undefined;
4261
- normalMap?: string | undefined;
4262
- normalScale?: number | undefined;
4263
- bumpMap?: string | undefined;
4264
- bumpScale?: number | undefined;
4265
- } | undefined;
4266
- } | undefined;
4267
- materialPreset?: string | undefined;
4268
- topMaterial?: {
4269
- id?: string | undefined;
4270
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
4271
- properties?: {
4272
- color: string;
4273
- roughness: number;
4274
- metalness: number;
4275
- opacity: number;
4276
- transparent: boolean;
4277
- side: "back" | "double" | "front";
4278
- } | undefined;
4279
- texture?: {
4280
- url: string;
4281
- repeat?: [number, number] | undefined;
4282
- scale?: number | undefined;
4283
- offset?: [number, number] | undefined;
4284
- normalMap?: string | undefined;
4285
- normalScale?: number | undefined;
4286
- bumpMap?: string | undefined;
4287
- bumpScale?: number | undefined;
4288
- } | undefined;
4289
- } | undefined;
4290
- topMaterialPreset?: string | undefined;
4291
- sideMaterial?: {
4292
- id?: string | undefined;
4293
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
4294
- properties?: {
4295
- color: string;
4296
- roughness: number;
4297
- metalness: number;
4298
- opacity: number;
4299
- transparent: boolean;
4300
- side: "back" | "double" | "front";
4301
- } | undefined;
4302
- texture?: {
4303
- url: string;
4304
- repeat?: [number, number] | undefined;
4305
- scale?: number | undefined;
4306
- offset?: [number, number] | undefined;
4307
- normalMap?: string | undefined;
4308
- normalScale?: number | undefined;
4309
- bumpMap?: string | undefined;
4310
- bumpScale?: number | undefined;
4311
- } | undefined;
4312
- } | undefined;
4313
- sideMaterialPreset?: string | undefined;
4314
- wallMaterial?: {
4315
- id?: string | undefined;
4316
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
4317
- properties?: {
4318
- color: string;
4319
- roughness: number;
4320
- metalness: number;
4321
- opacity: number;
4322
- transparent: boolean;
4323
- side: "back" | "double" | "front";
4324
- } | undefined;
4325
- texture?: {
4326
- url: string;
4327
- repeat?: [number, number] | undefined;
4328
- scale?: number | undefined;
4329
- offset?: [number, number] | undefined;
4330
- normalMap?: string | undefined;
4331
- normalScale?: number | undefined;
4332
- bumpMap?: string | undefined;
4333
- bumpScale?: number | undefined;
4334
- } | undefined;
4260
+ id: `pipe-segment_${string}`;
4261
+ path: [number, number, number][];
4262
+ autoHangers?: boolean | undefined;
4263
+ hangerOverrides?: Record<string, {
4264
+ fraction?: number | undefined;
4265
+ skipped?: boolean | undefined;
4266
+ hostId?: string | undefined;
4267
+ }> | undefined;
4268
+ hangerStyle?: "double" | "single" | undefined;
4269
+ hangerSpacing?: number | undefined;
4270
+ hangerMaxReach?: number | undefined;
4271
+ wallAttachment?: {
4272
+ wallId: `wall_${string}`;
4273
+ side: "back" | "front";
4274
+ startUV: [number, number];
4275
+ endUV: [number, number];
4276
+ offset: number;
4335
4277
  } | undefined;
4336
- wallMaterialPreset?: string | undefined;
4337
- roofSegmentId?: string | undefined;
4338
- position: [number, number, number];
4339
- rotation: number;
4340
- width: number;
4341
- depth: number;
4342
- height: number;
4343
- roofType: "barrel" | "conical" | "dutch" | "flat" | "gable" | "gambrel" | "hip" | "mansard" | "shed";
4344
- roofHeight: number;
4345
- shedHighSide: "back" | "front";
4346
- wallSkirtHeight: number;
4347
- windowWidth: number;
4348
- windowHeight: number;
4349
- windowOffsetX: number;
4350
- windowOffsetY: number;
4351
- windowFrameThickness: number;
4352
- windowFrameDepth: number;
4353
- windowColumns: number;
4354
- windowRows: number;
4355
- windowDividerThickness: number;
4356
- windowShape: "arch" | "rectangle" | "rounded";
4357
- windowArchHeight: number;
4358
- windowCornerRadii: [number, number, number, number];
4359
- windowSill: boolean;
4360
- windowSillDepth: number;
4361
- windowSillThickness: number;
4362
- children: `window_${string}`[];
4363
- type: "dormer";
4278
+ diameter: number;
4279
+ pipeMaterial: "abs" | "cast-iron" | "pvc";
4280
+ system: "vent" | "waste";
4281
+ type: "pipe-segment";
4364
4282
  } | {
4365
4283
  object: "node";
4366
4284
  name?: string | undefined;
@@ -4385,77 +4303,48 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
4385
4303
  fromIds: string[];
4386
4304
  } | undefined;
4387
4305
  } | undefined;
4388
- id: `skylight_${string}`;
4389
- material?: {
4390
- id?: string | undefined;
4391
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
4392
- properties?: {
4393
- color: string;
4394
- roughness: number;
4395
- metalness: number;
4396
- opacity: number;
4397
- transparent: boolean;
4398
- side: "back" | "double" | "front";
4399
- } | undefined;
4400
- texture?: {
4401
- url: string;
4402
- repeat?: [number, number] | undefined;
4403
- scale?: number | undefined;
4404
- offset?: [number, number] | undefined;
4405
- normalMap?: string | undefined;
4406
- normalScale?: number | undefined;
4407
- bumpMap?: string | undefined;
4408
- bumpScale?: number | undefined;
4409
- } | undefined;
4410
- } | undefined;
4411
- materialPreset?: string | undefined;
4412
- glassMaterial?: {
4413
- id?: string | undefined;
4414
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
4415
- properties?: {
4416
- color: string;
4417
- roughness: number;
4418
- metalness: number;
4419
- opacity: number;
4420
- transparent: boolean;
4421
- side: "back" | "double" | "front";
4422
- } | undefined;
4423
- texture?: {
4424
- url: string;
4425
- repeat?: [number, number] | undefined;
4426
- scale?: number | undefined;
4427
- offset?: [number, number] | undefined;
4428
- normalMap?: string | undefined;
4429
- normalScale?: number | undefined;
4430
- bumpMap?: string | undefined;
4431
- bumpScale?: number | undefined;
4432
- } | undefined;
4433
- } | undefined;
4434
- glassMaterialPreset?: string | undefined;
4435
- roofSegmentId?: string | undefined;
4306
+ id: `pipe-fitting_${string}`;
4436
4307
  position: [number, number, number];
4437
- rotation: number;
4438
- width: number;
4439
- height: number;
4440
- frameThickness: number;
4441
- frameDepth: number;
4442
- skylightType: "flat" | "lantern" | "opening" | "sliding" | "walk-on";
4443
- glassThickness: number;
4444
- lanternHeight: number;
4445
- lanternTopScale: number;
4446
- openingAngle: number;
4447
- openingSide: "bottom" | "left" | "right" | "top";
4448
- operationState: number;
4449
- motorHousing: boolean;
4450
- slideFraction: number;
4451
- slideDirection: "x" | "z";
4452
- trackWidth: number;
4453
- motorHousingSize: number;
4454
- curb: boolean;
4455
- curbHeight: number;
4456
- cutoutOffset: number;
4457
- surfaceNormal?: [number, number, number] | undefined;
4458
- type: "skylight";
4308
+ rotation: [number, number, number];
4309
+ fittingType: "cleanout" | "coupling" | "cross" | "elbow" | "end-cap" | "reducer" | "sanitary-tee" | "wye";
4310
+ angle: number;
4311
+ diameter: number;
4312
+ diameter2: number;
4313
+ cleanoutStyle: "end" | "inline";
4314
+ pipeMaterial: "abs" | "cast-iron" | "pvc";
4315
+ system: "vent" | "waste";
4316
+ type: "pipe-fitting";
4317
+ } | {
4318
+ object: "node";
4319
+ name?: string | undefined;
4320
+ parentId: string | null;
4321
+ visible: boolean;
4322
+ camera?: {
4323
+ position: [number, number, number];
4324
+ target: [number, number, number];
4325
+ mode: "orthographic" | "perspective";
4326
+ fov?: number | undefined;
4327
+ zoom?: number | undefined;
4328
+ } | undefined;
4329
+ metadata: Record<string, unknown>;
4330
+ provenance?: {
4331
+ refs: {
4332
+ ns?: string | undefined;
4333
+ id: string;
4334
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
4335
+ }[];
4336
+ lineage?: {
4337
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
4338
+ fromIds: string[];
4339
+ } | undefined;
4340
+ } | undefined;
4341
+ id: `pipe-trap_${string}`;
4342
+ position: [number, number, number];
4343
+ rotation: number;
4344
+ diameter: number;
4345
+ pipeMaterial: "abs" | "cast-iron" | "pvc";
4346
+ armLengthM: number;
4347
+ type: "pipe-trap";
4459
4348
  } | {
4460
4349
  object: "node";
4461
4350
  name?: string | undefined;
@@ -4480,198 +4369,71 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
4480
4369
  fromIds: string[];
4481
4370
  } | undefined;
4482
4371
  } | undefined;
4483
- id: `site_${string}`;
4484
- polygon: {
4485
- type: "polygon";
4486
- points: [number, number][];
4487
- };
4488
- terrain?: {
4489
- type: "heightfield";
4490
- origin: [number, number];
4491
- spacing: number;
4492
- cols: number;
4493
- rows: number;
4494
- step: number;
4495
- heights: string;
4496
- } | undefined;
4497
- showGround?: boolean | undefined;
4498
- presentation?: {
4499
- theme?: string | undefined;
4500
- exposure?: number | undefined;
4501
- shading?: "rendered" | "solid" | undefined;
4502
- edges?: "off" | "soft" | "strong" | undefined;
4503
- shadows?: boolean | undefined;
4504
- lighting?: {
4505
- background?: string | undefined;
4506
- backgroundSky?: string | null | undefined;
4507
- ground?: string | undefined;
4508
- ambient?: {
4509
- color: string;
4510
- intensity: number;
4511
- } | undefined;
4512
- hemi?: {
4513
- sky: string;
4514
- ground: string;
4515
- intensity: number;
4516
- } | undefined;
4517
- lights?: {
4518
- color: string;
4519
- intensity: number;
4520
- position: [number, number, number];
4521
- target?: [number, number, number] | undefined;
4522
- castShadow?: boolean | undefined;
4523
- shadow?: {
4524
- intensity?: number | undefined;
4525
- bias?: number | undefined;
4526
- normalBias?: number | undefined;
4527
- radius?: number | undefined;
4528
- mapSize?: 512 | 1024 | 2048 | 4096 | undefined;
4529
- camera?: {
4530
- left: number;
4531
- right: number;
4532
- top: number;
4533
- bottom: number;
4534
- near: number;
4535
- far: number;
4536
- } | undefined;
4537
- } | undefined;
4538
- }[] | undefined;
4539
- environment?: {
4540
- source: "gradient" | "none" | "room";
4541
- intensity: number;
4542
- } | undefined;
4543
- } | undefined;
4544
- postprocessing?: {
4545
- ambientOcclusion?: boolean | undefined;
4546
- colorGrading?: boolean | undefined;
4547
- } | undefined;
4548
- display?: {
4549
- mode?: "construction" | "finished" | "systems" | undefined;
4550
- families?: Partial<Record<"device" | "exposed-structure" | "fill" | "finish" | "foundation" | "framing" | "inspection" | "insulation" | "masonry" | "membrane" | "run" | "service-space" | "sheathing", boolean>> | undefined;
4551
- disciplines?: Partial<Record<"electrical" | "fire" | "low-voltage" | "mechanical" | "plumbing", boolean>> | undefined;
4552
- xray?: boolean | undefined;
4553
- colorBy?: "material" | "service" | undefined;
4554
- } | undefined;
4555
- } | undefined;
4556
- address?: {
4557
- street?: string | undefined;
4558
- city?: string | undefined;
4559
- state?: string | undefined;
4560
- zip?: string | undefined;
4561
- } | undefined;
4562
- parcel?: {
4563
- apn?: string | undefined;
4564
- source?: string | undefined;
4565
- county?: string | undefined;
4566
- state?: string | undefined;
4567
- lotAreaSqFt?: number | undefined;
4568
- originLngLat?: [number, number] | undefined;
4569
- resolvedAt?: string | undefined;
4570
- layer?: string | undefined;
4571
- notes?: string[] | undefined;
4572
- } | undefined;
4573
- setbacks?: {
4574
- front: number;
4575
- side: number;
4576
- rear: number;
4577
- left?: number | undefined;
4578
- right?: number | undefined;
4579
- streetSide?: number | undefined;
4372
+ id: `level_${string}`;
4373
+ 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}`)[];
4374
+ level: number;
4375
+ baseElevation: number;
4376
+ height?: number | undefined;
4377
+ type: "level";
4378
+ } | {
4379
+ object: "node";
4380
+ parentId: string | null;
4381
+ visible: boolean;
4382
+ camera?: {
4383
+ position: [number, number, number];
4384
+ target: [number, number, number];
4385
+ mode: "orthographic" | "perspective";
4386
+ fov?: number | undefined;
4387
+ zoom?: number | undefined;
4580
4388
  } | undefined;
4581
- setbacksSource?: string | undefined;
4582
- zone?: string | undefined;
4583
- frontEdge?: number | undefined;
4584
- streetEdges?: number[] | undefined;
4585
- sightTriangleFt?: number | undefined;
4586
- northRotation?: number | undefined;
4587
- dossier?: {
4588
- [x: string]: unknown;
4589
- provider: string;
4590
- asOf: string;
4591
- point?: {
4592
- lat?: number | undefined;
4593
- lng?: number | undefined;
4594
- source?: string | undefined;
4595
- } | undefined;
4596
- address?: {
4597
- formatted?: string | undefined;
4598
- precision?: string | undefined;
4389
+ provenance?: {
4390
+ refs: {
4391
+ ns?: string | undefined;
4392
+ id: string;
4393
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
4394
+ }[];
4395
+ lineage?: {
4396
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
4397
+ fromIds: string[];
4599
4398
  } | undefined;
4600
- sections: Record<string, {
4601
- [x: string]: unknown;
4602
- status: string;
4603
- summary?: string | undefined;
4604
- reason?: string | undefined;
4605
- source?: {
4606
- name?: string | undefined;
4607
- kind?: string | undefined;
4608
- vintage?: string | undefined;
4609
- attribution?: string | undefined;
4610
- } | undefined;
4611
- }>;
4612
- parcel?: Record<string, unknown> | undefined;
4613
- flood?: Record<string, unknown> | undefined;
4614
- codeBasis?: Record<string, unknown> | undefined;
4615
- zoning?: Record<string, unknown> | undefined;
4616
- utilities?: Record<string, unknown> | undefined;
4617
- soils?: Record<string, unknown> | undefined;
4618
- wetlands?: Record<string, unknown> | undefined;
4619
- structures?: Record<string, unknown> | undefined;
4620
- elevation?: Record<string, unknown> | undefined;
4621
- boundaries?: Record<string, unknown> | undefined;
4622
4399
  } | undefined;
4623
- contourIntervalIn?: number | undefined;
4624
- contours3d?: boolean | undefined;
4625
- terrainContours?: {
4626
- datum: string;
4627
- intervalFt: number;
4628
- source?: string | undefined;
4629
- lines: {
4630
- elevationFt: number;
4631
- points: [number, number][];
4632
- }[];
4400
+ id: `unit_${string}`;
4401
+ name: string;
4402
+ kind: "apartment" | "commercial" | "common" | "hotel-room";
4403
+ members: `zone_${string}`[];
4404
+ color: string;
4405
+ metadata: Record<string, unknown>;
4406
+ type: "unit";
4407
+ } | {
4408
+ object: "node";
4409
+ name?: string | undefined;
4410
+ parentId: string | null;
4411
+ visible: boolean;
4412
+ camera?: {
4413
+ position: [number, number, number];
4414
+ target: [number, number, number];
4415
+ mode: "orthographic" | "perspective";
4416
+ fov?: number | undefined;
4417
+ zoom?: number | undefined;
4633
4418
  } | undefined;
4634
- wallTypes?: {
4635
- id: string;
4636
- label: string;
4637
- assembly: {
4638
- layers: {
4639
- id: string;
4640
- role: "air" | "covering" | "deck" | "fill" | "finish" | "furring" | "glazing" | "insulation" | "lining" | "membrane" | "sheathing" | "shell" | "structure" | "substrate" | "underlay";
4641
- thickness: number;
4642
- core?: true | undefined;
4643
- spacing?: number | undefined;
4644
- material?: string | undefined;
4645
- slot?: string | undefined;
4646
- returns?: boolean | undefined;
4647
- display?: "construction" | "finished" | undefined;
4648
- inset?: number | undefined;
4649
- bottom?: number | undefined;
4650
- lift?: number | undefined;
4651
- src?: string | undefined;
4652
- }[];
4653
- backing?: {
4654
- id: string;
4655
- role: "air" | "covering" | "deck" | "fill" | "finish" | "furring" | "glazing" | "insulation" | "lining" | "membrane" | "sheathing" | "shell" | "structure" | "substrate" | "underlay";
4656
- thickness: number;
4657
- core?: true | undefined;
4658
- spacing?: number | undefined;
4659
- material?: string | undefined;
4660
- slot?: string | undefined;
4661
- returns?: boolean | undefined;
4662
- display?: "construction" | "finished" | undefined;
4663
- inset?: number | undefined;
4664
- bottom?: number | undefined;
4665
- lift?: number | undefined;
4666
- src?: string | undefined;
4667
- }[] | undefined;
4668
- face?: "exterior" | "front" | undefined;
4669
- presetId?: string | undefined;
4670
- cavityInsulation?: string | undefined;
4671
- };
4672
- }[] | undefined;
4673
- children: string[];
4674
- type: "site";
4419
+ metadata: Record<string, unknown>;
4420
+ provenance?: {
4421
+ refs: {
4422
+ ns?: string | undefined;
4423
+ id: string;
4424
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
4425
+ }[];
4426
+ lineage?: {
4427
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
4428
+ fromIds: string[];
4429
+ } | undefined;
4430
+ } | undefined;
4431
+ id: `building_${string}`;
4432
+ children: (`elevator_${string}` | `level_${string}` | `unit_${string}`)[];
4433
+ position: [number, number, number];
4434
+ rotation: [number, number, number];
4435
+ groundLevelId?: `level_${string}` | undefined;
4436
+ type: "building";
4675
4437
  } | {
4676
4438
  object: "node";
4677
4439
  name?: string | undefined;
@@ -5646,6 +5408,245 @@ export declare function alignLegacyStairCuts(source: Record<string, AnyNode>): R
5646
5408
  frameDepth: number;
5647
5409
  surfaceNormal?: [number, number, number] | undefined;
5648
5410
  type: "solar-panel";
5411
+ } | {
5412
+ object: "node";
5413
+ name?: string | undefined;
5414
+ parentId: string | null;
5415
+ visible: boolean;
5416
+ camera?: {
5417
+ position: [number, number, number];
5418
+ target: [number, number, number];
5419
+ mode: "orthographic" | "perspective";
5420
+ fov?: number | undefined;
5421
+ zoom?: number | undefined;
5422
+ } | undefined;
5423
+ metadata: Record<string, unknown>;
5424
+ provenance?: {
5425
+ refs: {
5426
+ ns?: string | undefined;
5427
+ id: string;
5428
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
5429
+ }[];
5430
+ lineage?: {
5431
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
5432
+ fromIds: string[];
5433
+ } | undefined;
5434
+ } | undefined;
5435
+ id: `skylight_${string}`;
5436
+ material?: {
5437
+ id?: string | undefined;
5438
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
5439
+ properties?: {
5440
+ color: string;
5441
+ roughness: number;
5442
+ metalness: number;
5443
+ opacity: number;
5444
+ transparent: boolean;
5445
+ side: "back" | "double" | "front";
5446
+ } | undefined;
5447
+ texture?: {
5448
+ url: string;
5449
+ repeat?: [number, number] | undefined;
5450
+ scale?: number | undefined;
5451
+ offset?: [number, number] | undefined;
5452
+ normalMap?: string | undefined;
5453
+ normalScale?: number | undefined;
5454
+ bumpMap?: string | undefined;
5455
+ bumpScale?: number | undefined;
5456
+ } | undefined;
5457
+ } | undefined;
5458
+ materialPreset?: string | undefined;
5459
+ glassMaterial?: {
5460
+ id?: string | undefined;
5461
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
5462
+ properties?: {
5463
+ color: string;
5464
+ roughness: number;
5465
+ metalness: number;
5466
+ opacity: number;
5467
+ transparent: boolean;
5468
+ side: "back" | "double" | "front";
5469
+ } | undefined;
5470
+ texture?: {
5471
+ url: string;
5472
+ repeat?: [number, number] | undefined;
5473
+ scale?: number | undefined;
5474
+ offset?: [number, number] | undefined;
5475
+ normalMap?: string | undefined;
5476
+ normalScale?: number | undefined;
5477
+ bumpMap?: string | undefined;
5478
+ bumpScale?: number | undefined;
5479
+ } | undefined;
5480
+ } | undefined;
5481
+ glassMaterialPreset?: string | undefined;
5482
+ roofSegmentId?: string | undefined;
5483
+ position: [number, number, number];
5484
+ rotation: number;
5485
+ width: number;
5486
+ height: number;
5487
+ frameThickness: number;
5488
+ frameDepth: number;
5489
+ skylightType: "flat" | "lantern" | "opening" | "sliding" | "walk-on";
5490
+ glassThickness: number;
5491
+ lanternHeight: number;
5492
+ lanternTopScale: number;
5493
+ openingAngle: number;
5494
+ openingSide: "bottom" | "left" | "right" | "top";
5495
+ operationState: number;
5496
+ motorHousing: boolean;
5497
+ slideFraction: number;
5498
+ slideDirection: "x" | "z";
5499
+ trackWidth: number;
5500
+ motorHousingSize: number;
5501
+ curb: boolean;
5502
+ curbHeight: number;
5503
+ cutoutOffset: number;
5504
+ surfaceNormal?: [number, number, number] | undefined;
5505
+ type: "skylight";
5506
+ } | {
5507
+ object: "node";
5508
+ name?: string | undefined;
5509
+ parentId: string | null;
5510
+ visible: boolean;
5511
+ camera?: {
5512
+ position: [number, number, number];
5513
+ target: [number, number, number];
5514
+ mode: "orthographic" | "perspective";
5515
+ fov?: number | undefined;
5516
+ zoom?: number | undefined;
5517
+ } | undefined;
5518
+ metadata: Record<string, unknown>;
5519
+ provenance?: {
5520
+ refs: {
5521
+ ns?: string | undefined;
5522
+ id: string;
5523
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
5524
+ }[];
5525
+ lineage?: {
5526
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
5527
+ fromIds: string[];
5528
+ } | undefined;
5529
+ } | undefined;
5530
+ id: `dormer_${string}`;
5531
+ material?: {
5532
+ id?: string | undefined;
5533
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
5534
+ properties?: {
5535
+ color: string;
5536
+ roughness: number;
5537
+ metalness: number;
5538
+ opacity: number;
5539
+ transparent: boolean;
5540
+ side: "back" | "double" | "front";
5541
+ } | undefined;
5542
+ texture?: {
5543
+ url: string;
5544
+ repeat?: [number, number] | undefined;
5545
+ scale?: number | undefined;
5546
+ offset?: [number, number] | undefined;
5547
+ normalMap?: string | undefined;
5548
+ normalScale?: number | undefined;
5549
+ bumpMap?: string | undefined;
5550
+ bumpScale?: number | undefined;
5551
+ } | undefined;
5552
+ } | undefined;
5553
+ materialPreset?: string | undefined;
5554
+ topMaterial?: {
5555
+ id?: string | undefined;
5556
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
5557
+ properties?: {
5558
+ color: string;
5559
+ roughness: number;
5560
+ metalness: number;
5561
+ opacity: number;
5562
+ transparent: boolean;
5563
+ side: "back" | "double" | "front";
5564
+ } | undefined;
5565
+ texture?: {
5566
+ url: string;
5567
+ repeat?: [number, number] | undefined;
5568
+ scale?: number | undefined;
5569
+ offset?: [number, number] | undefined;
5570
+ normalMap?: string | undefined;
5571
+ normalScale?: number | undefined;
5572
+ bumpMap?: string | undefined;
5573
+ bumpScale?: number | undefined;
5574
+ } | undefined;
5575
+ } | undefined;
5576
+ topMaterialPreset?: string | undefined;
5577
+ sideMaterial?: {
5578
+ id?: string | undefined;
5579
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
5580
+ properties?: {
5581
+ color: string;
5582
+ roughness: number;
5583
+ metalness: number;
5584
+ opacity: number;
5585
+ transparent: boolean;
5586
+ side: "back" | "double" | "front";
5587
+ } | undefined;
5588
+ texture?: {
5589
+ url: string;
5590
+ repeat?: [number, number] | undefined;
5591
+ scale?: number | undefined;
5592
+ offset?: [number, number] | undefined;
5593
+ normalMap?: string | undefined;
5594
+ normalScale?: number | undefined;
5595
+ bumpMap?: string | undefined;
5596
+ bumpScale?: number | undefined;
5597
+ } | undefined;
5598
+ } | undefined;
5599
+ sideMaterialPreset?: string | undefined;
5600
+ wallMaterial?: {
5601
+ id?: string | undefined;
5602
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
5603
+ properties?: {
5604
+ color: string;
5605
+ roughness: number;
5606
+ metalness: number;
5607
+ opacity: number;
5608
+ transparent: boolean;
5609
+ side: "back" | "double" | "front";
5610
+ } | undefined;
5611
+ texture?: {
5612
+ url: string;
5613
+ repeat?: [number, number] | undefined;
5614
+ scale?: number | undefined;
5615
+ offset?: [number, number] | undefined;
5616
+ normalMap?: string | undefined;
5617
+ normalScale?: number | undefined;
5618
+ bumpMap?: string | undefined;
5619
+ bumpScale?: number | undefined;
5620
+ } | undefined;
5621
+ } | undefined;
5622
+ wallMaterialPreset?: string | undefined;
5623
+ roofSegmentId?: string | undefined;
5624
+ position: [number, number, number];
5625
+ rotation: number;
5626
+ width: number;
5627
+ depth: number;
5628
+ height: number;
5629
+ roofType: "barrel" | "conical" | "dutch" | "flat" | "gable" | "gambrel" | "hip" | "mansard" | "shed";
5630
+ roofHeight: number;
5631
+ shedHighSide: "back" | "front";
5632
+ wallSkirtHeight: number;
5633
+ windowWidth: number;
5634
+ windowHeight: number;
5635
+ windowOffsetX: number;
5636
+ windowOffsetY: number;
5637
+ windowFrameThickness: number;
5638
+ windowFrameDepth: number;
5639
+ windowColumns: number;
5640
+ windowRows: number;
5641
+ windowDividerThickness: number;
5642
+ windowShape: "arch" | "rectangle" | "rounded";
5643
+ windowArchHeight: number;
5644
+ windowCornerRadii: [number, number, number, number];
5645
+ windowSill: boolean;
5646
+ windowSillDepth: number;
5647
+ windowSillThickness: number;
5648
+ children: `window_${string}`[];
5649
+ type: "dormer";
5649
5650
  } | {
5650
5651
  object: "node";
5651
5652
  name?: string | undefined;