@pascal-app/core 1.1.1 → 1.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/dist/agent-operations/__fixtures__/roof-bearing-cases.d.ts +13453 -13453
  2. package/dist/agent-operations/batch.d.ts +4 -8
  3. package/dist/agent-operations/batch.d.ts.map +1 -1
  4. package/dist/agent-operations/batch.js +7 -19
  5. package/dist/agent-operations/circulation-spaces.d.ts +3431 -3431
  6. package/dist/agent-operations/index.d.ts +5715 -9
  7. package/dist/agent-operations/index.d.ts.map +1 -1
  8. package/dist/agent-operations/index.js +16 -5
  9. package/dist/agent-operations/scene-queries.d.ts +2610 -2610
  10. package/dist/agent-operations/types.d.ts +7 -0
  11. package/dist/agent-operations/types.d.ts.map +1 -1
  12. package/dist/agent-operations/usage-checks.js +2 -2
  13. package/dist/agent-operations/verify-scene.d.ts +7 -3
  14. package/dist/agent-operations/verify-scene.d.ts.map +1 -1
  15. package/dist/agent-operations/verify-scene.js +15 -7
  16. package/dist/building/__fixtures__/wall-opening-cases.d.ts +238 -238
  17. package/dist/building/level-duplication.d.ts +1274 -1274
  18. package/dist/commands/structure/zone-wall-merge.d.ts +568 -568
  19. package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts +2610 -2610
  20. package/dist/lib/__fixtures__/mezzanine.d.ts +10874 -10874
  21. package/dist/lib/absorb-wall-separators.d.ts +635 -635
  22. package/dist/lib/steps.d.ts +8 -0
  23. package/dist/lib/steps.d.ts.map +1 -0
  24. package/dist/lib/steps.js +7 -0
  25. package/dist/spatial/usage-field/findings.d.ts +3 -0
  26. package/dist/spatial/usage-field/findings.d.ts.map +1 -1
  27. package/dist/spatial/usage-field/findings.js +17 -5
  28. package/dist/spatial/usage-field/measure.d.ts +3 -1
  29. package/dist/spatial/usage-field/measure.d.ts.map +1 -1
  30. package/dist/spatial/usage-field/measure.js +7 -2
  31. package/dist/store/actions/node-actions.d.ts +3431 -3431
  32. package/dist/store/scene-annotations.d.ts +1193 -1193
  33. package/dist/systems/slab/__fixtures__/floor-step.d.ts +3431 -3431
  34. package/dist/systems/slab/__fixtures__/raised-room.d.ts +2610 -2610
  35. package/dist/systems/stair/stair-opening-preview.d.ts +2610 -2610
  36. package/dist/utils/ensure-scene-openings.d.ts +6215 -6215
  37. package/dist/utils/floor-plate-migration.d.ts +635 -635
  38. package/dist/utils/owned-floor-opening-migration.d.ts +635 -635
  39. package/dist/utils/reconcile-structure-on-load.d.ts +3431 -3431
  40. package/package.json +1 -1
@@ -1,5 +1,6 @@
1
1
  import type { ZodType } from 'zod';
2
2
  import type { DesignBrief } from '../agent-tools/design-brief.js';
3
+ import type { Steps } from '../lib/steps.js';
3
4
  import type { AnyNode, Collection, CompiledGeometryScript, SceneMaterial, SceneMaterialId } from '../schema/index.js';
4
5
  import type { AssetSearchResult } from './asset-catalog.js';
5
6
  import type { AssetViewFacts } from './asset-views.js';
@@ -119,6 +120,12 @@ export type AgentOperationOutcome = {
119
120
  * what the tool's contract parses; `never` by default so any operation fits a registry.
120
121
  */
121
122
  export type AgentOperation<Input = never> = (nodes: SceneNodes, input: Input, context: AgentContext) => AgentOperationOutcome;
123
+ /**
124
+ * An operation that takes seconds on a large building, in steps: a batch's calls, verify_scene's
125
+ * checks. A host that can let other work run between them resumes it one step at a time; the
126
+ * operation of the same name runs it through (`inOneGo`), with the same outcome.
127
+ */
128
+ export type AgentOperationSteps<Input = never> = (...args: Parameters<AgentOperation<Input>>) => Steps<AgentOperationOutcome>;
122
129
  /** Operations by tool name: core's `AGENT_OPERATIONS`, or a plugin's `./agent-operations` export. */
123
130
  export type AgentOperations = Readonly<Record<string, AgentOperation>>;
124
131
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/agent-operations/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/agent-operations/types.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { isUsageType, ROOM_ENTRY_TYPE, ROOM_FOLDED_TYPES } from '../agent-tools/verify-scene-usage.js';
2
- import { USAGE_TYPES, usageIssues } from '../spatial/usage-field/findings.js';
2
+ import { USAGE_TYPES, usageIssueSteps } from '../spatial/usage-field/findings.js';
3
3
  import { sdfChecksOn } from '../spatial/usage-field/flag.js';
4
4
  import { registerSceneCheck } from './verify-scene.js';
5
5
  /**
@@ -23,5 +23,5 @@ function askedTypes(type) {
23
23
  registerSceneCheck({
24
24
  name: 'usage',
25
25
  order: 60,
26
- run: (nodes, input) => sdfChecksOn() ? usageIssues(nodes, { types: askedTypes(input.type) }) : [],
26
+ run: (nodes, input) => sdfChecksOn() ? usageIssueSteps(nodes, { types: askedTypes(input.type) }) : [],
27
27
  });
@@ -1,9 +1,10 @@
1
1
  import { type OpenWallEnd } from '../lib/room-graph.js';
2
+ import { type Steps } from '../lib/steps.js';
2
3
  import type { UsageIssue } from '../spatial/usage-field/findings.js';
3
4
  import { type CeilingObjectObservation } from './ceiling-object-observations.js';
4
5
  import type { RoomCheckIssue } from './room-checks.js';
5
6
  import { type RoomFinding } from './room-findings.js';
6
- import type { AgentContext, AgentOperation, SceneNodes } from './types.js';
7
+ import type { AgentContext, AgentOperation, AgentOperationSteps, SceneNodes } from './types.js';
7
8
  import type { RoomUnreachableIssue } from './unreachable-rooms-check.js';
8
9
  import { type WallEndShortIssue, type WallNearlyAlignedIssue } from './wall-joins.js';
9
10
  import { type WallObjectObservation } from './wall-object-observations.js';
@@ -57,12 +58,13 @@ export type VerifySceneInput = Readonly<Record<string, unknown>>;
57
58
  /**
58
59
  * A check verify_scene runs beyond its own, registered by the module that knows it (the facade
59
60
  * checks, the photo's), so verify_scene imports none of them. Checks before CHECKPOINT_ORDER run
60
- * ahead of the checkpoint's comparison, the rest after it.
61
+ * ahead of the checkpoint's comparison, the rest after it. A check that takes seconds on a large
62
+ * building answers in steps, and verify_scene stops where it does.
61
63
  */
62
64
  export type SceneCheck = {
63
65
  name: string;
64
66
  order: number;
65
- run: (nodes: SceneNodes, input: VerifySceneInput, context: AgentContext) => SceneIssue[];
67
+ run: (nodes: SceneNodes, input: VerifySceneInput, context: AgentContext) => SceneIssue[] | Steps<SceneIssue[]>;
66
68
  };
67
69
  export declare const CHECKPOINT_ORDER = 100;
68
70
  /**
@@ -78,4 +80,6 @@ export declare function registerSceneReport(report: SceneReport): void;
78
80
  /** Runs a check in every verify_scene from now on; registering a check again replaces it. */
79
81
  export declare function registerSceneCheck(check: SceneCheck): void;
80
82
  export declare const verifyScene: AgentOperation<VerifySceneInput | undefined>;
83
+ /** `verify_scene`, a step for each registered check and for each step of one that has them. */
84
+ export declare const verifySceneSteps: AgentOperationSteps<VerifySceneInput | undefined>;
81
85
  //# sourceMappingURL=verify-scene.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"verify-scene.d.ts","sourceRoot":"","sources":["../../src/agent-operations/verify-scene.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"verify-scene.d.ts","sourceRoot":"","sources":["../../src/agent-operations/verify-scene.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,7 @@ import { HIDDEN_SITE_NOTE } from '../lib/node-visibility.js';
7
7
  import { wallSupportForNodes } from '../lib/opening-floor-datum.js';
8
8
  import { detectOpenWallEnds } from '../lib/room-graph.js';
9
9
  import { siteBrief } from '../lib/site-placement.js';
10
+ import { inOneGo } from '../lib/steps.js';
10
11
  import { nodeRegistry } from '../registry/index.js';
11
12
  import { AnyNode as AnyNodeSchema, } from '../schema/index.js';
12
13
  import { nodeSchemaForKind } from '../schema/compiled-node-parsers.js';
@@ -206,7 +207,9 @@ function checkSchemas(scene, hostSchema) {
206
207
  */
207
208
  /** A flight of this many risers or fewer is a step up to a door, not a staircase: no going or comfort target applies. */
208
209
  const SHORT_FLIGHT_STEPS = 3;
209
- export const verifyScene = (scene, input, context) => {
210
+ export const verifyScene = (scene, input, context) => inOneGo(verifySceneSteps(scene, input, context));
211
+ /** `verify_scene`, a step for each registered check and for each step of one that has them. */
212
+ export const verifySceneSteps = function* (scene, input, context) {
210
213
  const { errors, unknownKinds, unread, measured: nodes } = checkSchemas(scene, context.nodeSchema);
211
214
  const onLevel = (levelId) => nodesOnLevel(nodes, levelId);
212
215
  const ofType = (content, type) => content.filter((node) => node.type === type);
@@ -526,9 +529,16 @@ export const verifyScene = (scene, input, context) => {
526
529
  issues.push(...layoutIssuesFromScene(Object.values(settled)));
527
530
  issues.push(...ceilingObjectObservations(settled));
528
531
  issues.push(...wallObjectObservations(settled));
529
- for (const check of checks)
530
- if (check.order < CHECKPOINT_ORDER)
531
- issues.push(...check.run(settled, input ?? {}, context));
532
+ const registered = function* (beforeCheckpoint) {
533
+ for (const check of checks) {
534
+ if (check.order < CHECKPOINT_ORDER !== beforeCheckpoint)
535
+ continue;
536
+ const found = check.run(settled, input ?? {}, context);
537
+ issues.push(...(Array.isArray(found) ? found : yield* found));
538
+ yield;
539
+ }
540
+ };
541
+ yield* registered(true);
532
542
  // What the edits since the host's checkpoint lost, by place.
533
543
  const hosted = context.checkpoint
534
544
  ? changesSince(context.checkpoint, scene)
@@ -541,9 +551,7 @@ export const verifyScene = (scene, input, context) => {
541
551
  const since = typeof input?.since === 'string' ? reviewSince(session, input.since, scene) : null;
542
552
  if (since?.places)
543
553
  issues.push(...since.places.issues);
544
- for (const check of checks)
545
- if (check.order >= CHECKPOINT_ORDER)
546
- issues.push(...check.run(settled, input ?? {}, context));
554
+ yield* registered(false);
547
555
  const occupiedStoryCount = levels.filter((level) => level.isOccupiedStory).length;
548
556
  issues.splice(0, issues.length, ...withoutDuplicatePockets(issues));
549
557
  const issueGroups = sceneIssueGroups(issues, nodes);
@@ -33,234 +33,6 @@ export declare const OPENING_SCENE: {
33
33
  export declare function openingScene(): {
34
34
  nodes: {
35
35
  [k: string]: {
36
- object: "node";
37
- name?: string | undefined;
38
- parentId: string | null;
39
- visible: boolean;
40
- camera?: {
41
- position: [number, number, number];
42
- target: [number, number, number];
43
- mode: "orthographic" | "perspective";
44
- fov?: number | undefined;
45
- zoom?: number | undefined;
46
- } | undefined;
47
- metadata: Record<string, unknown>;
48
- provenance?: {
49
- refs: {
50
- ns?: string | undefined;
51
- id: string;
52
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
53
- }[];
54
- lineage?: {
55
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
56
- fromIds: string[];
57
- } | undefined;
58
- } | undefined;
59
- id: `door_${string}`;
60
- type: "door";
61
- material?: {
62
- id?: string | undefined;
63
- preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
64
- properties?: {
65
- color: string;
66
- roughness: number;
67
- metalness: number;
68
- opacity: number;
69
- transparent: boolean;
70
- side: "back" | "double" | "front";
71
- } | undefined;
72
- texture?: {
73
- url: string;
74
- repeat?: [number, number] | undefined;
75
- scale?: number | undefined;
76
- offset?: [number, number] | undefined;
77
- normalMap?: string | undefined;
78
- normalScale?: number | undefined;
79
- bumpMap?: string | undefined;
80
- bumpScale?: number | undefined;
81
- } | undefined;
82
- } | undefined;
83
- slots?: Record<string, string> | undefined;
84
- source?: {
85
- kind: "script";
86
- meta?: {
87
- description?: string | undefined;
88
- category?: string | undefined;
89
- tags?: string[] | undefined;
90
- parent?: string | undefined;
91
- } | undefined;
92
- language: "bpy" | "three";
93
- script: string;
94
- params: Record<string, string | number | boolean>;
95
- artifact: string;
96
- manifest: {
97
- bounds: {
98
- min: [number, number, number];
99
- max: [number, number, number];
100
- };
101
- params: {
102
- id: string;
103
- label?: string | undefined;
104
- kind: "boolean" | "number" | "string";
105
- default: string | number | boolean;
106
- min?: number | undefined;
107
- max?: number | undefined;
108
- step?: number | undefined;
109
- unit?: string | undefined;
110
- options?: string[] | undefined;
111
- }[];
112
- parts: {
113
- id: string;
114
- label?: string | undefined;
115
- type?: string | undefined;
116
- bounds?: {
117
- min: [number, number, number];
118
- max: [number, number, number];
119
- } | undefined;
120
- }[];
121
- surfaces: {
122
- part?: string | undefined;
123
- y: number;
124
- polygon: [number, number][];
125
- }[];
126
- slots: {
127
- id: string;
128
- label?: string | undefined;
129
- color?: string | undefined;
130
- roughness?: number | undefined;
131
- metalness?: number | undefined;
132
- transparent?: boolean | undefined;
133
- emissive?: boolean | undefined;
134
- }[];
135
- anchors: {
136
- id: string;
137
- position: [number, number, number];
138
- normal?: [number, number, number] | undefined;
139
- }[];
140
- lights: {
141
- id: string;
142
- position: [number, number, number];
143
- color: string;
144
- intensity: number;
145
- distance?: number | undefined;
146
- spot?: {
147
- direction: [number, number, number];
148
- angle: number;
149
- softness: number;
150
- } | undefined;
151
- shadows?: boolean | undefined;
152
- glow?: {
153
- size: number;
154
- strength: number;
155
- } | undefined;
156
- }[];
157
- undersides: {
158
- part?: string | undefined;
159
- polygon: [number, number][];
160
- plane: [number, number, number, number];
161
- }[];
162
- animations: {
163
- name: string;
164
- duration: number;
165
- }[];
166
- cutters?: {
167
- host: "ceiling" | "mounted" | "slab" | "wall";
168
- polygon: number[][];
169
- minY: number;
170
- maxY: number;
171
- }[] | undefined;
172
- cutout: boolean;
173
- collider: boolean;
174
- shape?: {
175
- tolerance: number;
176
- bands: {
177
- y0: number;
178
- y1: number;
179
- polygons: {
180
- outer: [number, number][];
181
- holes?: [number, number][][] | undefined;
182
- }[];
183
- }[];
184
- } | undefined;
185
- triangles: number;
186
- coverage?: number | undefined;
187
- uncovered?: {
188
- min: [number, number];
189
- max: [number, number];
190
- }[] | undefined;
191
- };
192
- images?: {
193
- artifact: string;
194
- thumbnail: string;
195
- floorPlan: string;
196
- } | undefined;
197
- } | undefined;
198
- position: [number, number, number];
199
- rotation: [number, number, number];
200
- side?: "back" | "front" | undefined;
201
- verticalAnchor?: "floor" | "wall" | undefined;
202
- floorThresholdVersion: 0 | 1;
203
- wallId?: string | undefined;
204
- roofSegmentId?: string | undefined;
205
- roofFace?: "back" | "front" | "left" | "right" | undefined;
206
- width: number;
207
- height: number;
208
- sidelightLeft?: number | undefined;
209
- sidelightRight?: number | undefined;
210
- transomHeight?: number | undefined;
211
- slidingStyle?: "bypass" | "patio" | undefined;
212
- mark?: string | undefined;
213
- constructionType: "framed" | "masonry";
214
- dimensionReference: "finish-opening" | "masonry-opening" | "nominal" | "rough-opening";
215
- roughOpeningWidth?: number | undefined;
216
- roughOpeningHeight?: number | undefined;
217
- masonryOpeningWidth?: number | undefined;
218
- masonryOpeningHeight?: number | undefined;
219
- finishOpeningWidth?: number | undefined;
220
- finishOpeningHeight?: number | undefined;
221
- doorCategory: "garage" | "interior";
222
- doorType: "barn" | "double" | "folding" | "french" | "garage-rollup" | "garage-sectional" | "garage-tiltup" | "hinged" | "pocket" | "sliding";
223
- leafCount: 1 | 2 | 3 | 4 | 6 | 8;
224
- operationState: number;
225
- slideDirection: "left" | "right";
226
- trackStyle: "none" | "overhead" | "pocket" | "visible";
227
- garagePanelCount: number;
228
- openingKind: "door" | "opening";
229
- openingShape: "arch" | "rectangle" | "rounded";
230
- openingRadiusMode: "all" | "individual";
231
- openingTopRadii: [number, number];
232
- cornerRadius: number;
233
- archHeight: number;
234
- openingRevealRadius: number;
235
- frameThickness: number;
236
- frameDepth?: number | undefined;
237
- threshold: boolean;
238
- thresholdHeight: number;
239
- casingFaceA?: boolean | undefined;
240
- casingFaceB?: boolean | undefined;
241
- casingWidth?: number | undefined;
242
- hingesSide: "left" | "right";
243
- swingDirection: "inward" | "outward";
244
- swingAngle: number;
245
- segments: {
246
- type: "empty" | "glass" | "panel";
247
- heightRatio: number;
248
- columnRatios: number[];
249
- dividerThickness: number;
250
- panelDepth: number;
251
- panelInset: number;
252
- }[];
253
- handle: boolean;
254
- handleStyle?: "bar" | "knob" | "lever" | "lever-curved" | "plate" | undefined;
255
- handleHeight: number;
256
- handleSide: "left" | "right";
257
- contentPadding: [number, number];
258
- doorCloser: boolean;
259
- panicBar: boolean;
260
- panicBarStyle: "crossbar" | "touchbar";
261
- panicBarRods: boolean;
262
- panicBarHeight: number;
263
- } | {
264
36
  object: "node";
265
37
  name?: string | undefined;
266
38
  parentId: string | null;
@@ -1024,12 +796,240 @@ export declare function openingScene(): {
1024
796
  fromIds: string[];
1025
797
  } | undefined;
1026
798
  } | undefined;
1027
- id: `building_${string}`;
1028
- type: "building";
1029
- children: (`elevator_${string}` | `level_${string}` | `unit_${string}`)[];
799
+ id: `level_${string}`;
800
+ type: "level";
801
+ 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}`)[];
802
+ level: number;
803
+ baseElevation: number;
804
+ height?: number | undefined;
805
+ } | {
806
+ object: "node";
807
+ name?: string | undefined;
808
+ parentId: string | null;
809
+ visible: boolean;
810
+ camera?: {
811
+ position: [number, number, number];
812
+ target: [number, number, number];
813
+ mode: "orthographic" | "perspective";
814
+ fov?: number | undefined;
815
+ zoom?: number | undefined;
816
+ } | undefined;
817
+ metadata: Record<string, unknown>;
818
+ provenance?: {
819
+ refs: {
820
+ ns?: string | undefined;
821
+ id: string;
822
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
823
+ }[];
824
+ lineage?: {
825
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
826
+ fromIds: string[];
827
+ } | undefined;
828
+ } | undefined;
829
+ id: `door_${string}`;
830
+ type: "door";
831
+ material?: {
832
+ id?: string | undefined;
833
+ preset?: "brick" | "concrete" | "custom" | "glass" | "marble" | "metal" | "plaster" | "tile" | "white" | "wood" | undefined;
834
+ properties?: {
835
+ color: string;
836
+ roughness: number;
837
+ metalness: number;
838
+ opacity: number;
839
+ transparent: boolean;
840
+ side: "back" | "double" | "front";
841
+ } | undefined;
842
+ texture?: {
843
+ url: string;
844
+ repeat?: [number, number] | undefined;
845
+ scale?: number | undefined;
846
+ offset?: [number, number] | undefined;
847
+ normalMap?: string | undefined;
848
+ normalScale?: number | undefined;
849
+ bumpMap?: string | undefined;
850
+ bumpScale?: number | undefined;
851
+ } | undefined;
852
+ } | undefined;
853
+ slots?: Record<string, string> | undefined;
854
+ source?: {
855
+ kind: "script";
856
+ meta?: {
857
+ description?: string | undefined;
858
+ category?: string | undefined;
859
+ tags?: string[] | undefined;
860
+ parent?: string | undefined;
861
+ } | undefined;
862
+ language: "bpy" | "three";
863
+ script: string;
864
+ params: Record<string, string | number | boolean>;
865
+ artifact: string;
866
+ manifest: {
867
+ bounds: {
868
+ min: [number, number, number];
869
+ max: [number, number, number];
870
+ };
871
+ params: {
872
+ id: string;
873
+ label?: string | undefined;
874
+ kind: "boolean" | "number" | "string";
875
+ default: string | number | boolean;
876
+ min?: number | undefined;
877
+ max?: number | undefined;
878
+ step?: number | undefined;
879
+ unit?: string | undefined;
880
+ options?: string[] | undefined;
881
+ }[];
882
+ parts: {
883
+ id: string;
884
+ label?: string | undefined;
885
+ type?: string | undefined;
886
+ bounds?: {
887
+ min: [number, number, number];
888
+ max: [number, number, number];
889
+ } | undefined;
890
+ }[];
891
+ surfaces: {
892
+ part?: string | undefined;
893
+ y: number;
894
+ polygon: [number, number][];
895
+ }[];
896
+ slots: {
897
+ id: string;
898
+ label?: string | undefined;
899
+ color?: string | undefined;
900
+ roughness?: number | undefined;
901
+ metalness?: number | undefined;
902
+ transparent?: boolean | undefined;
903
+ emissive?: boolean | undefined;
904
+ }[];
905
+ anchors: {
906
+ id: string;
907
+ position: [number, number, number];
908
+ normal?: [number, number, number] | undefined;
909
+ }[];
910
+ lights: {
911
+ id: string;
912
+ position: [number, number, number];
913
+ color: string;
914
+ intensity: number;
915
+ distance?: number | undefined;
916
+ spot?: {
917
+ direction: [number, number, number];
918
+ angle: number;
919
+ softness: number;
920
+ } | undefined;
921
+ shadows?: boolean | undefined;
922
+ glow?: {
923
+ size: number;
924
+ strength: number;
925
+ } | undefined;
926
+ }[];
927
+ undersides: {
928
+ part?: string | undefined;
929
+ polygon: [number, number][];
930
+ plane: [number, number, number, number];
931
+ }[];
932
+ animations: {
933
+ name: string;
934
+ duration: number;
935
+ }[];
936
+ cutters?: {
937
+ host: "ceiling" | "mounted" | "slab" | "wall";
938
+ polygon: number[][];
939
+ minY: number;
940
+ maxY: number;
941
+ }[] | undefined;
942
+ cutout: boolean;
943
+ collider: boolean;
944
+ shape?: {
945
+ tolerance: number;
946
+ bands: {
947
+ y0: number;
948
+ y1: number;
949
+ polygons: {
950
+ outer: [number, number][];
951
+ holes?: [number, number][][] | undefined;
952
+ }[];
953
+ }[];
954
+ } | undefined;
955
+ triangles: number;
956
+ coverage?: number | undefined;
957
+ uncovered?: {
958
+ min: [number, number];
959
+ max: [number, number];
960
+ }[] | undefined;
961
+ };
962
+ images?: {
963
+ artifact: string;
964
+ thumbnail: string;
965
+ floorPlan: string;
966
+ } | undefined;
967
+ } | undefined;
1030
968
  position: [number, number, number];
1031
969
  rotation: [number, number, number];
1032
- groundLevelId?: `level_${string}` | undefined;
970
+ side?: "back" | "front" | undefined;
971
+ verticalAnchor?: "floor" | "wall" | undefined;
972
+ floorThresholdVersion: 0 | 1;
973
+ wallId?: string | undefined;
974
+ roofSegmentId?: string | undefined;
975
+ roofFace?: "back" | "front" | "left" | "right" | undefined;
976
+ width: number;
977
+ height: number;
978
+ sidelightLeft?: number | undefined;
979
+ sidelightRight?: number | undefined;
980
+ transomHeight?: number | undefined;
981
+ slidingStyle?: "bypass" | "patio" | undefined;
982
+ mark?: string | undefined;
983
+ constructionType: "framed" | "masonry";
984
+ dimensionReference: "finish-opening" | "masonry-opening" | "nominal" | "rough-opening";
985
+ roughOpeningWidth?: number | undefined;
986
+ roughOpeningHeight?: number | undefined;
987
+ masonryOpeningWidth?: number | undefined;
988
+ masonryOpeningHeight?: number | undefined;
989
+ finishOpeningWidth?: number | undefined;
990
+ finishOpeningHeight?: number | undefined;
991
+ doorCategory: "garage" | "interior";
992
+ doorType: "barn" | "double" | "folding" | "french" | "garage-rollup" | "garage-sectional" | "garage-tiltup" | "hinged" | "pocket" | "sliding";
993
+ leafCount: 1 | 2 | 3 | 4 | 6 | 8;
994
+ operationState: number;
995
+ slideDirection: "left" | "right";
996
+ trackStyle: "none" | "overhead" | "pocket" | "visible";
997
+ garagePanelCount: number;
998
+ openingKind: "door" | "opening";
999
+ openingShape: "arch" | "rectangle" | "rounded";
1000
+ openingRadiusMode: "all" | "individual";
1001
+ openingTopRadii: [number, number];
1002
+ cornerRadius: number;
1003
+ archHeight: number;
1004
+ openingRevealRadius: number;
1005
+ frameThickness: number;
1006
+ frameDepth?: number | undefined;
1007
+ threshold: boolean;
1008
+ thresholdHeight: number;
1009
+ casingFaceA?: boolean | undefined;
1010
+ casingFaceB?: boolean | undefined;
1011
+ casingWidth?: number | undefined;
1012
+ hingesSide: "left" | "right";
1013
+ swingDirection: "inward" | "outward";
1014
+ swingAngle: number;
1015
+ segments: {
1016
+ type: "empty" | "glass" | "panel";
1017
+ heightRatio: number;
1018
+ columnRatios: number[];
1019
+ dividerThickness: number;
1020
+ panelDepth: number;
1021
+ panelInset: number;
1022
+ }[];
1023
+ handle: boolean;
1024
+ handleStyle?: "bar" | "knob" | "lever" | "lever-curved" | "plate" | undefined;
1025
+ handleHeight: number;
1026
+ handleSide: "left" | "right";
1027
+ contentPadding: [number, number];
1028
+ doorCloser: boolean;
1029
+ panicBar: boolean;
1030
+ panicBarStyle: "crossbar" | "touchbar";
1031
+ panicBarRods: boolean;
1032
+ panicBarHeight: number;
1033
1033
  } | {
1034
1034
  object: "node";
1035
1035
  name?: string | undefined;
@@ -1054,12 +1054,12 @@ export declare function openingScene(): {
1054
1054
  fromIds: string[];
1055
1055
  } | undefined;
1056
1056
  } | undefined;
1057
- id: `level_${string}`;
1058
- type: "level";
1059
- 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}`)[];
1060
- level: number;
1061
- baseElevation: number;
1062
- height?: number | undefined;
1057
+ id: `building_${string}`;
1058
+ type: "building";
1059
+ children: (`elevator_${string}` | `level_${string}` | `unit_${string}`)[];
1060
+ position: [number, number, number];
1061
+ rotation: [number, number, number];
1062
+ groundLevelId?: `level_${string}` | undefined;
1063
1063
  };
1064
1064
  };
1065
1065
  rootNodeIds: `building_${string}`[];