@pascal-app/core 1.0.7 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent-operations/__fixtures__/native-materials.d.ts +4 -0
- package/dist/agent-operations/__fixtures__/native-materials.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/roof-bearing-cases.d.ts +11283 -11279
- package/dist/agent-operations/__fixtures__/roof-bearing-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/verify-scene-cases.d.ts +77 -77
- package/dist/agent-operations/author-scene.d.ts.map +1 -1
- package/dist/agent-operations/author-scene.js +2 -3
- package/dist/agent-operations/circulation-spaces.d.ts +3181 -3180
- package/dist/agent-operations/circulation-spaces.d.ts.map +1 -1
- package/dist/agent-operations/level-reads.js +1 -1
- package/dist/agent-operations/move-plan.d.ts.map +1 -1
- package/dist/agent-operations/move-plan.js +11 -9
- package/dist/agent-operations/scene-queries.d.ts +2328 -2327
- package/dist/agent-operations/scene-queries.d.ts.map +1 -1
- package/dist/agent-operations/verify-scene.d.ts.map +1 -1
- package/dist/agent-operations/verify-scene.js +4 -2
- package/dist/agent-operations/wall-object-observations.d.ts.map +1 -1
- package/dist/agent-operations/wall-object-observations.js +1 -1
- package/dist/agent-tools/wall-openings.js +2 -2
- package/dist/building/__fixtures__/wall-opening-cases.d.ts +229 -228
- package/dist/building/__fixtures__/wall-opening-cases.d.ts.map +1 -1
- package/dist/building/level-duplication.d.ts +3681 -3679
- package/dist/building/level-duplication.d.ts.map +1 -1
- package/dist/building/merge-windows.d.ts.map +1 -1
- package/dist/building/merge-windows.js +4 -3
- package/dist/building/wall-openings.d.ts +20 -6
- package/dist/building/wall-openings.d.ts.map +1 -1
- package/dist/building/wall-openings.js +74 -25
- package/dist/commands/structure/shared.d.ts +1 -0
- package/dist/commands/structure/shared.d.ts.map +1 -1
- package/dist/commands/structure/zone-wall-merge.d.ts +2351 -2348
- package/dist/commands/structure/zone-wall-merge.d.ts.map +1 -1
- package/dist/contracts/reference-inventory.d.ts.map +1 -1
- package/dist/contracts/reference-inventory.js +0 -1
- package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts +6 -1
- package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts.map +1 -1
- package/dist/hooks/spatial-grid/spatial-grid-manager.js +30 -9
- package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts +3181 -3180
- package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts.map +1 -1
- package/dist/hooks/spatial-grid/spatial-grid-sync.js +8 -4
- package/dist/index.d.ts +11 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -4
- package/dist/lib/__fixtures__/mezzanine.d.ts +8595 -8591
- package/dist/lib/__fixtures__/mezzanine.d.ts.map +1 -1
- package/dist/lib/absorb-wall-separators.d.ts +1664 -1663
- package/dist/lib/absorb-wall-separators.d.ts.map +1 -1
- package/dist/lib/build-mode.d.ts +11 -0
- package/dist/lib/build-mode.d.ts.map +1 -0
- package/dist/lib/build-mode.js +24 -0
- package/dist/lib/corner-pair.d.ts +2 -0
- package/dist/lib/corner-pair.d.ts.map +1 -1
- package/dist/lib/door-interaction.d.ts +14 -0
- package/dist/lib/door-interaction.d.ts.map +1 -0
- package/dist/lib/door-interaction.js +62 -0
- package/dist/lib/elevator-support.d.ts +15 -0
- package/dist/lib/elevator-support.d.ts.map +1 -0
- package/dist/lib/elevator-support.js +40 -0
- package/dist/lib/floor-intent-changes.d.ts.map +1 -1
- package/dist/lib/floor-intent-changes.js +6 -4
- package/dist/lib/hierarchy.d.ts +19 -0
- package/dist/lib/hierarchy.d.ts.map +1 -0
- package/dist/lib/hierarchy.js +53 -0
- package/dist/lib/opening-floor-datum.d.ts +1 -1
- package/dist/lib/opening-floor-datum.d.ts.map +1 -1
- package/dist/lib/opening-floor-datum.js +2 -2
- package/dist/lib/own-floor-intent.d.ts.map +1 -1
- package/dist/lib/own-floor-intent.js +2 -2
- package/dist/lib/polygon-boolean.d.ts.map +1 -1
- package/dist/lib/polygon-boolean.js +2 -1
- package/dist/lib/room-floor-elevation.d.ts +12 -0
- package/dist/lib/room-floor-elevation.d.ts.map +1 -0
- package/dist/lib/room-floor-elevation.js +41 -0
- package/dist/lib/room-floor-feasibility.d.ts.map +1 -1
- package/dist/lib/room-floor-feasibility.js +1 -1
- package/dist/lib/space-detection.d.ts.map +1 -1
- package/dist/lib/space-detection.js +1 -0
- package/dist/lib/wall-face-script.d.ts.map +1 -1
- package/dist/lib/wall-face-script.js +3 -3
- package/dist/lib/window-interaction.d.ts +16 -0
- package/dist/lib/window-interaction.d.ts.map +1 -0
- package/dist/lib/window-interaction.js +82 -0
- package/dist/lib/zone-quantities.js +1 -1
- package/dist/node-slots/column.d.ts +5 -0
- package/dist/node-slots/column.d.ts.map +1 -1
- package/dist/node-slots/column.js +10 -0
- package/dist/registry/index.d.ts +1 -1
- package/dist/registry/index.d.ts.map +1 -1
- package/dist/registry/index.js +1 -1
- package/dist/registry/registry.d.ts +5 -0
- package/dist/registry/registry.d.ts.map +1 -1
- package/dist/registry/registry.js +10 -0
- package/dist/registry/types.d.ts +24 -0
- package/dist/registry/types.d.ts.map +1 -1
- package/dist/schema/index.d.ts +1 -1
- package/dist/schema/index.d.ts.map +1 -1
- package/dist/schema/index.js +1 -1
- package/dist/schema/nodes/roof-segment-resize.d.ts.map +1 -1
- package/dist/schema/nodes/roof-segment-resize.js +2 -2
- package/dist/schema/nodes/roof-segment.d.ts +2 -0
- package/dist/schema/nodes/roof-segment.d.ts.map +1 -1
- package/dist/schema/nodes/roof-segment.js +40 -2
- package/dist/schema/nodes/wall.d.ts +1 -0
- package/dist/schema/nodes/wall.d.ts.map +1 -1
- package/dist/schema/nodes/wall.js +6 -0
- package/dist/schema/types.d.ts +1 -0
- package/dist/schema/types.d.ts.map +1 -1
- package/dist/services/index.d.ts +1 -1
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +1 -1
- package/dist/services/movement.d.ts +7 -0
- package/dist/services/movement.d.ts.map +1 -1
- package/dist/services/movement.js +13 -0
- package/dist/services/port-connectivity.d.ts +15 -6
- package/dist/services/port-connectivity.d.ts.map +1 -1
- package/dist/services/port-connectivity.js +83 -17
- package/dist/services/roof-bearing.js +2 -1
- package/dist/services/storey.d.ts +6 -1
- package/dist/services/storey.d.ts.map +1 -1
- package/dist/services/storey.js +11 -2
- package/dist/spatial/usage-field/swings.d.ts +1 -0
- package/dist/spatial/usage-field/swings.d.ts.map +1 -1
- package/dist/spatial/usage-field/walls.d.ts +2 -0
- package/dist/spatial/usage-field/walls.d.ts.map +1 -1
- package/dist/spatial/usage-field/walls.js +18 -4
- package/dist/store/actions/node-actions.d.ts +1614 -1613
- package/dist/store/actions/node-actions.d.ts.map +1 -1
- package/dist/store/actions/node-actions.js +23 -5
- package/dist/store/derived-node-guard.d.ts.map +1 -1
- package/dist/store/derived-node-guard.js +2 -1
- package/dist/store/scene-annotations.d.ts +5033 -5031
- package/dist/store/scene-annotations.d.ts.map +1 -1
- package/dist/systems/elevator/elevator-geometry.d.ts +25 -0
- package/dist/systems/elevator/elevator-geometry.d.ts.map +1 -1
- package/dist/systems/elevator/elevator-geometry.js +40 -8
- package/dist/systems/elevator/elevator-opening-sync.d.ts.map +1 -1
- package/dist/systems/elevator/elevator-opening-sync.js +4 -35
- package/dist/systems/elevator/elevator-runtime.d.ts.map +1 -1
- package/dist/systems/elevator/elevator-runtime.js +95 -18
- package/dist/systems/elevator/elevator-service.d.ts.map +1 -1
- package/dist/systems/elevator/elevator-service.js +24 -4
- package/dist/systems/roof/roof-elevation.d.ts.map +1 -1
- package/dist/systems/roof/roof-elevation.js +2 -1
- package/dist/systems/slab/__fixtures__/floor-step.d.ts +1614 -1610
- package/dist/systems/slab/__fixtures__/floor-step.d.ts.map +1 -1
- package/dist/systems/slab/__fixtures__/raised-room.d.ts +2924 -2920
- package/dist/systems/slab/__fixtures__/raised-room.d.ts.map +1 -1
- package/dist/systems/stair/stair-opening-preview.d.ts +1147 -1146
- package/dist/systems/stair/stair-opening-preview.d.ts.map +1 -1
- package/dist/systems/wall/wall-curve.d.ts +10 -0
- package/dist/systems/wall/wall-curve.d.ts.map +1 -1
- package/dist/systems/wall/wall-curve.js +38 -0
- package/dist/systems/wall/wall-frame.d.ts.map +1 -1
- package/dist/systems/wall/wall-frame.js +8 -0
- package/dist/systems/wall/wall-merge.d.ts +9 -1
- package/dist/systems/wall/wall-merge.d.ts.map +1 -1
- package/dist/systems/wall/wall-merge.js +38 -6
- package/dist/systems/wall/wall-top.d.ts +10 -3
- package/dist/systems/wall/wall-top.d.ts.map +1 -1
- package/dist/systems/wall/wall-top.js +24 -8
- package/dist/systems/wall/wall-topology.d.ts.map +1 -1
- package/dist/systems/wall/wall-topology.js +19 -1
- package/dist/utils/ensure-scene-openings.d.ts +4354 -4352
- package/dist/utils/ensure-scene-openings.d.ts.map +1 -1
- package/dist/utils/floor-plate-migration.d.ts +1664 -1663
- package/dist/utils/floor-plate-migration.d.ts.map +1 -1
- package/dist/utils/measurement-format.d.ts +27 -0
- package/dist/utils/measurement-format.d.ts.map +1 -0
- package/dist/utils/measurement-format.js +143 -0
- package/dist/utils/owned-floor-opening-migration.d.ts +1147 -1146
- package/dist/utils/owned-floor-opening-migration.d.ts.map +1 -1
- package/dist/utils/reconcile-structure-on-load.d.ts +439 -438
- package/dist/utils/reconcile-structure-on-load.d.ts.map +1 -1
- package/dist/validation/validate-build-json.d.ts.map +1 -1
- package/dist/validation/validate-build-json.js +3 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"absorb-wall-separators.d.ts","sourceRoot":"","sources":["../../src/lib/absorb-wall-separators.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAE/D,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,MAAM
|
|
1
|
+
{"version":3,"file":"absorb-wall-separators.d.ts","sourceRoot":"","sources":["../../src/lib/absorb-wall-separators.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAE/D,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmE5F"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Whether this is a development build. Reads `process.env.NODE_ENV` directly, never
|
|
3
|
+
* behind `typeof process`: bundlers (Vite, Next, esbuild) replace that expression with
|
|
4
|
+
* a constant, while a `typeof process` guard runs in the browser, where `process` is
|
|
5
|
+
* absent, and would send production bundles down the development branch. Without a
|
|
6
|
+
* bundler and without `process`, it is treated as production.
|
|
7
|
+
*/
|
|
8
|
+
export declare function isDevelopmentBuild(): boolean;
|
|
9
|
+
/** Development builds outside the test runner, for warnings tests should not print. */
|
|
10
|
+
export declare function isDevelopmentOutsideTests(): boolean;
|
|
11
|
+
//# sourceMappingURL=build-mode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-mode.d.ts","sourceRoot":"","sources":["../../src/lib/build-mode.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,wBAAgB,kBAAkB,IAAI,OAAO,CAM5C;AAED,uFAAuF;AACvF,wBAAgB,yBAAyB,IAAI,OAAO,CAMnD"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Whether this is a development build. Reads `process.env.NODE_ENV` directly, never
|
|
3
|
+
* behind `typeof process`: bundlers (Vite, Next, esbuild) replace that expression with
|
|
4
|
+
* a constant, while a `typeof process` guard runs in the browser, where `process` is
|
|
5
|
+
* absent, and would send production bundles down the development branch. Without a
|
|
6
|
+
* bundler and without `process`, it is treated as production.
|
|
7
|
+
*/
|
|
8
|
+
export function isDevelopmentBuild() {
|
|
9
|
+
try {
|
|
10
|
+
return process.env.NODE_ENV !== 'production';
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
/** Development builds outside the test runner, for warnings tests should not print. */
|
|
17
|
+
export function isDevelopmentOutsideTests() {
|
|
18
|
+
try {
|
|
19
|
+
return process.env.NODE_ENV !== 'production' && process.env.NODE_ENV !== 'test';
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -262,6 +262,7 @@ export declare function wallsEndingAt(nodes: Nodes, levelId: string | undefined,
|
|
|
262
262
|
} | undefined;
|
|
263
263
|
justification?: "a" | "b" | undefined;
|
|
264
264
|
height?: number | undefined;
|
|
265
|
+
endHeightOffset?: number | undefined;
|
|
265
266
|
curveOffset?: number | undefined;
|
|
266
267
|
supportSlabId?: string | undefined;
|
|
267
268
|
supportOffset?: number | undefined;
|
|
@@ -1035,6 +1036,7 @@ export declare function cornerPair(nodes: Nodes, window: WindowNode): {
|
|
|
1035
1036
|
} | undefined;
|
|
1036
1037
|
justification?: "a" | "b" | undefined;
|
|
1037
1038
|
height?: number | undefined;
|
|
1039
|
+
endHeightOffset?: number | undefined;
|
|
1038
1040
|
curveOffset?: number | undefined;
|
|
1039
1041
|
supportSlabId?: string | undefined;
|
|
1040
1042
|
supportOffset?: number | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"corner-pair.d.ts","sourceRoot":"","sources":["../../src/lib/corner-pair.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAE9D;;;GAGG;AAEH,KAAK,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;AAC9C,MAAM,MAAM,OAAO,GAAG,OAAO,GAAG,KAAK,CAAA;AAMrC;;;GAGG;AACH,eAAO,MAAM,cAAc,MAAM,CAAA;AACjC,gFAAgF;AAChF,eAAO,MAAM,qBAAqB,KAAK,CAAA;AAEvC,sFAAsF;AACtF,eAAO,MAAM,gBAAgB,UAAW,MAAM,YAC0B,CAAA;AAExE;;;GAGG;AACH,eAAO,MAAM,aAAa,WAChB,IAAI,CAAC,UAAU,EAAE,YAAY,GAAG,cAAc,GAAG,aAAa,GAAG,QAAQ,CAAC,YAK9B,CAAA;AAItD,eAAO,MAAM,YAAY,SAAU,QAAQ,WAAmC,CAAA;AAC9E,eAAO,MAAM,YAAY,SAAU,QAAQ,OAAO,OAAO,qBAChB,CAAA;AAEzC,sEAAsE;AACtE,wBAAgB,aAAa,CAC3B,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,aAAa,UAAQ
|
|
1
|
+
{"version":3,"file":"corner-pair.d.ts","sourceRoot":"","sources":["../../src/lib/corner-pair.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { AnyNodeId } from '../schema/types.js';
|
|
2
|
+
import { type DoorInteractiveState } from '../store/use-interactive.js';
|
|
3
|
+
import { isOperationDoorType } from './door-operation.js';
|
|
4
|
+
export declare const DOOR_SWING_OPEN_ANGLE: number;
|
|
5
|
+
export declare const DOOR_TOGGLE_ANIMATION_MS = 520;
|
|
6
|
+
export { isOperationDoorType };
|
|
7
|
+
type DoorOpenAnimationOptions = {
|
|
8
|
+
persist?: boolean;
|
|
9
|
+
};
|
|
10
|
+
export declare function getDisplayedDoorValue(doorId: AnyNodeId, field: keyof DoorInteractiveState, nodeValue: number | undefined): number;
|
|
11
|
+
export declare function toggleDoorOpenState(doorId: AnyNodeId, options?: DoorOpenAnimationOptions): void;
|
|
12
|
+
export declare function closeDoorOpenState(doorId: AnyNodeId, options?: DoorOpenAnimationOptions): void;
|
|
13
|
+
export declare function openDoorOpenState(doorId: AnyNodeId, options?: DoorOpenAnimationOptions): void;
|
|
14
|
+
//# sourceMappingURL=door-interaction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"door-interaction.d.ts","sourceRoot":"","sources":["../../src/lib/door-interaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAChD,OAAO,EAAE,KAAK,oBAAoB,EAAkB,MAAM,0BAA0B,CAAA;AAEpF,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAEtD,eAAO,MAAM,qBAAqB,QAAc,CAAA;AAChD,eAAO,MAAM,wBAAwB,MAAM,CAAA;AAE3C,OAAO,EAAE,mBAAmB,EAAE,CAAA;AAE9B,KAAK,wBAAwB,GAAG;IAC9B,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB,CAAA;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,MAAM,oBAAoB,EACjC,SAAS,EAAE,MAAM,GAAG,SAAS,UAU9B;AAmBD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,wBAAwB,QAwBxF;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,wBAAwB,QAYvF;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,wBAAwB,QAYtF"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { useInteractive } from '../store/use-interactive.js';
|
|
2
|
+
import useScene from '../store/use-scene.js';
|
|
3
|
+
import { isOperationDoorType } from './door-operation.js';
|
|
4
|
+
export const DOOR_SWING_OPEN_ANGLE = Math.PI / 2;
|
|
5
|
+
export const DOOR_TOGGLE_ANIMATION_MS = 520;
|
|
6
|
+
export { isOperationDoorType };
|
|
7
|
+
export function getDisplayedDoorValue(doorId, field, nodeValue) {
|
|
8
|
+
const interactive = useInteractive.getState();
|
|
9
|
+
const runtimeValue = interactive.doors[doorId]?.[field];
|
|
10
|
+
if (runtimeValue !== undefined)
|
|
11
|
+
return runtimeValue;
|
|
12
|
+
const queuedValue = interactive.doorAnimations[doorId]?.from;
|
|
13
|
+
if (queuedValue !== undefined)
|
|
14
|
+
return queuedValue;
|
|
15
|
+
return nodeValue ?? 0;
|
|
16
|
+
}
|
|
17
|
+
function startDoorOpenAnimation(doorId, field, from, to, options) {
|
|
18
|
+
useInteractive.getState().startDoorAnimation(doorId, {
|
|
19
|
+
field,
|
|
20
|
+
from,
|
|
21
|
+
to,
|
|
22
|
+
startedAt: null,
|
|
23
|
+
durationMs: DOOR_TOGGLE_ANIMATION_MS,
|
|
24
|
+
persist: options?.persist ?? true,
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
export function toggleDoorOpenState(doorId, options) {
|
|
28
|
+
const node = useScene.getState().nodes[doorId];
|
|
29
|
+
if (node?.type !== 'door' || node.openingKind === 'opening')
|
|
30
|
+
return;
|
|
31
|
+
if (isOperationDoorType(node.doorType)) {
|
|
32
|
+
const currentOpenAmount = getDisplayedDoorValue(doorId, 'operationState', node.operationState);
|
|
33
|
+
startDoorOpenAnimation(doorId, 'operationState', currentOpenAmount, currentOpenAmount >= 0.5 ? 0 : 1, options);
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
const currentSwingAngle = getDisplayedDoorValue(doorId, 'swingAngle', node.swingAngle);
|
|
37
|
+
startDoorOpenAnimation(doorId, 'swingAngle', currentSwingAngle, currentSwingAngle >= DOOR_SWING_OPEN_ANGLE / 2 ? 0 : DOOR_SWING_OPEN_ANGLE, options);
|
|
38
|
+
}
|
|
39
|
+
export function closeDoorOpenState(doorId, options) {
|
|
40
|
+
const node = useScene.getState().nodes[doorId];
|
|
41
|
+
if (node?.type !== 'door' || node.openingKind === 'opening')
|
|
42
|
+
return;
|
|
43
|
+
if (isOperationDoorType(node.doorType)) {
|
|
44
|
+
const currentOpenAmount = getDisplayedDoorValue(doorId, 'operationState', node.operationState);
|
|
45
|
+
startDoorOpenAnimation(doorId, 'operationState', currentOpenAmount, 0, options);
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
const currentSwingAngle = getDisplayedDoorValue(doorId, 'swingAngle', node.swingAngle);
|
|
49
|
+
startDoorOpenAnimation(doorId, 'swingAngle', currentSwingAngle, 0, options);
|
|
50
|
+
}
|
|
51
|
+
export function openDoorOpenState(doorId, options) {
|
|
52
|
+
const node = useScene.getState().nodes[doorId];
|
|
53
|
+
if (node?.type !== 'door' || node.openingKind === 'opening')
|
|
54
|
+
return;
|
|
55
|
+
if (isOperationDoorType(node.doorType)) {
|
|
56
|
+
const currentOpenAmount = getDisplayedDoorValue(doorId, 'operationState', node.operationState);
|
|
57
|
+
startDoorOpenAnimation(doorId, 'operationState', currentOpenAmount, 1, options);
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
const currentSwingAngle = getDisplayedDoorValue(doorId, 'swingAngle', node.swingAngle);
|
|
61
|
+
startDoorOpenAnimation(doorId, 'swingAngle', currentSwingAngle, DOOR_SWING_OPEN_ANGLE, options);
|
|
62
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { AnyNode, ElevatorNode, LevelNode } from '../schema/index.js';
|
|
2
|
+
export declare function resolveElevatorSupportLevelId({ buildingId, preferredLevelId, nodes, }: {
|
|
3
|
+
buildingId: string | null | undefined;
|
|
4
|
+
preferredLevelId?: string | null;
|
|
5
|
+
nodes?: Readonly<Record<string, AnyNode>>;
|
|
6
|
+
}): LevelNode['id'] | null;
|
|
7
|
+
export declare function resolveElevatorSupportY({ buildingId, preferredLevelId, x, z, nodes, }: {
|
|
8
|
+
buildingId: string | null | undefined;
|
|
9
|
+
preferredLevelId?: string | null;
|
|
10
|
+
x: number;
|
|
11
|
+
z: number;
|
|
12
|
+
nodes?: Readonly<Record<string, AnyNode>>;
|
|
13
|
+
}): number;
|
|
14
|
+
export declare function resolveElevatorNodeSupportY(node: ElevatorNode, position?: [number, number, number], nodes?: Readonly<Record<string, AnyNode>>): number;
|
|
15
|
+
//# sourceMappingURL=elevator-support.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"elevator-support.d.ts","sourceRoot":"","sources":["../../src/lib/elevator-support.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAa,YAAY,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAiB5E,wBAAgB,6BAA6B,CAAC,EAC5C,UAAU,EACV,gBAAgB,EAChB,KAAiC,GAClC,EAAE;IACD,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;IACrC,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAChC,KAAK,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;CAC1C,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,CAWzB;AAED,wBAAgB,uBAAuB,CAAC,EACtC,UAAU,EACV,gBAAgB,EAChB,CAAC,EACD,CAAC,EACD,KAAK,GACN,EAAE;IACD,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;IACrC,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAChC,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,KAAK,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;CAC1C,GAAG,MAAM,CAKT;AAED,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,YAAY,EAClB,QAAQ,GAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAiB,EAClD,KAAK,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACxC,MAAM,CAQR"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { spatialGridManager } from '../hooks/spatial-grid/spatial-grid-manager.js';
|
|
2
|
+
import useScene from '../store/use-scene.js';
|
|
3
|
+
function getBuildingLevels(buildingId, nodes) {
|
|
4
|
+
if (!buildingId)
|
|
5
|
+
return [];
|
|
6
|
+
const building = nodes[buildingId];
|
|
7
|
+
if (building?.type !== 'building')
|
|
8
|
+
return [];
|
|
9
|
+
return building.children
|
|
10
|
+
.map((childId) => nodes[childId])
|
|
11
|
+
.filter((entry) => entry?.type === 'level')
|
|
12
|
+
.sort((left, right) => left.level - right.level);
|
|
13
|
+
}
|
|
14
|
+
export function resolveElevatorSupportLevelId({ buildingId, preferredLevelId, nodes = useScene.getState().nodes, }) {
|
|
15
|
+
const preferred = preferredLevelId ? nodes[preferredLevelId] : undefined;
|
|
16
|
+
const levels = getBuildingLevels(buildingId, nodes);
|
|
17
|
+
const preferredInBuilding = preferredLevelId
|
|
18
|
+
? levels.find((level) => level.id === preferredLevelId)
|
|
19
|
+
: undefined;
|
|
20
|
+
if (preferredInBuilding)
|
|
21
|
+
return preferredInBuilding.id;
|
|
22
|
+
if (levels.length === 0)
|
|
23
|
+
return preferred?.type === 'level' ? preferred.id : null;
|
|
24
|
+
return levels[0]?.id ?? null;
|
|
25
|
+
}
|
|
26
|
+
export function resolveElevatorSupportY({ buildingId, preferredLevelId, x, z, nodes, }) {
|
|
27
|
+
const levelId = resolveElevatorSupportLevelId({ buildingId, preferredLevelId, nodes });
|
|
28
|
+
if (!levelId)
|
|
29
|
+
return 0;
|
|
30
|
+
return Math.max(0, spatialGridManager.getSlabElevationAt(levelId, x, z));
|
|
31
|
+
}
|
|
32
|
+
export function resolveElevatorNodeSupportY(node, position = node.position, nodes) {
|
|
33
|
+
return resolveElevatorSupportY({
|
|
34
|
+
buildingId: node.parentId,
|
|
35
|
+
preferredLevelId: node.fromLevelId ?? node.defaultLevelId,
|
|
36
|
+
x: position[0],
|
|
37
|
+
z: position[2],
|
|
38
|
+
nodes,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"floor-intent-changes.d.ts","sourceRoot":"","sources":["../../src/lib/floor-intent-changes.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,OAAO,EACP,SAAS,EAOV,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"floor-intent-changes.d.ts","sourceRoot":"","sources":["../../src/lib/floor-intent-changes.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,OAAO,EACP,SAAS,EAOV,MAAM,WAAW,CAAA;AAuBlB,OAAO,EAGL,KAAK,iBAAiB,EAEvB,MAAM,0BAA0B,CAAA;AAEjC,KAAK,MAAM,GAAG;IAAE,EAAE,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;CAAE,CAAA;AAkCvD,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,OAAO,EAAE,SAAS,MAAM,EAAE,GACzB,MAAM,EAAE,CA6IV;AAED,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,OAAO,GAAE,SAAS,OAAO,EAAO,EAChC,OAAO,GAAE,SAAS,MAAM,EAAO,uBAwXhC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { boundaries, roomFace } from '../commands/structure/shared.js';
|
|
2
2
|
import { DEFAULT_SLAB_ELEVATION } from '../schema/nodes/slab.js';
|
|
3
|
-
import { findLevelBelowId, getLevelElevations, getWallCoveringSlabUnderside, getWallTop, } from '../services/storey.js';
|
|
3
|
+
import { findLevelBelowId, getLevelElevations, getWallCoveringSlabUnderside, getWallTop, getWallTopOver, } from '../services/storey.js';
|
|
4
4
|
import { automaticFloorHeight, floorPlateAtGroundContact, floorPlateHoldsUnderside, footprintSupportsNode, supportDerivedFloorHeight, } from './floor-foundation-datum.js';
|
|
5
5
|
import { changedLevelConstructionDisplacements, footprintStackChanges, } from './floor-foundation-stack.js';
|
|
6
6
|
import { floorRoomFaces } from './floor-room-faces.js';
|
|
@@ -446,7 +446,7 @@ export function floorIntentConflicts(nodes, updates, created = [], deleted = [])
|
|
|
446
446
|
return (getOpeningFloorTarget(host, opening, graph) +
|
|
447
447
|
opening.position[1] +
|
|
448
448
|
opening.height / 2 -
|
|
449
|
-
|
|
449
|
+
getWallTopOver(host, host.parentId, graph, wallSupportForNodes(host, graph).elevation, opening.position[0] - opening.width / 2, opening.position[0] + opening.width / 2));
|
|
450
450
|
};
|
|
451
451
|
const after = excess(drafted, node);
|
|
452
452
|
const previous = nodes[node.id] ?? copiedOpening(nodes, drafted, node);
|
|
@@ -468,8 +468,10 @@ export function floorIntentConflicts(nodes, updates, created = [], deleted = [])
|
|
|
468
468
|
!levels.has(node.parentId) ||
|
|
469
469
|
!loweringPlates.some(({ plate }) => footprintSupportsNode(plate, node, drafted)))
|
|
470
470
|
continue;
|
|
471
|
-
const excess = (graph, wall) =>
|
|
472
|
-
(
|
|
471
|
+
const excess = (graph, wall) => {
|
|
472
|
+
const base = wallSupportForNodes(wall, graph).elevation;
|
|
473
|
+
return (Math.max(getWallTop(wall, wall.parentId, graph, base, 0), getWallTop(wall, wall.parentId, graph, base, 1)) - (getWallCoveringSlabUnderside(wall, wall.parentId, graph) ?? Infinity));
|
|
474
|
+
};
|
|
473
475
|
const after = excess(drafted, node);
|
|
474
476
|
const previous = nodes[node.id];
|
|
475
477
|
const before = previous?.type === 'wall' ? excess(nodes, previous) : -Infinity;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { AnyNode, AnyNodeId } from '../schema/types.js';
|
|
2
|
+
type NodeMap = Readonly<Record<string, Pick<AnyNode, 'parentId'>>>;
|
|
3
|
+
type NodeLookup = (id: AnyNodeId) => Pick<AnyNode, 'parentId'> | undefined;
|
|
4
|
+
/**
|
|
5
|
+
* Whether assigning `newParentId` to `nodeId` would put `nodeId` on a cycle of
|
|
6
|
+
* parent links. A cycle the chain already holds without `nodeId` is not one it
|
|
7
|
+
* creates: counting it would refuse every edit beneath an old cyclic scene.
|
|
8
|
+
*/
|
|
9
|
+
export declare function wouldCreateHierarchyCycle(nodeId: AnyNodeId, newParentId: AnyNodeId | null, nodes: NodeMap | NodeLookup): boolean;
|
|
10
|
+
/** Return each distinct cycle encoded by `parentId` links. */
|
|
11
|
+
export declare function findHierarchyCycles(nodes: NodeMap): AnyNodeId[][];
|
|
12
|
+
/** The `parentId` error each node on a cycle raises, as every scene check lists it. */
|
|
13
|
+
export declare function hierarchyCycleErrors(nodes: NodeMap): {
|
|
14
|
+
nodeId: AnyNodeId;
|
|
15
|
+
path: 'parentId';
|
|
16
|
+
message: string;
|
|
17
|
+
}[];
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=hierarchy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hierarchy.d.ts","sourceRoot":"","sources":["../../src/lib/hierarchy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAEzD,KAAK,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,CAAA;AAClE,KAAK,UAAU,GAAG,CAAC,EAAE,EAAE,SAAS,KAAK,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,SAAS,CAAA;AAE1E;;;;GAIG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,SAAS,EACjB,WAAW,EAAE,SAAS,GAAG,IAAI,EAC7B,KAAK,EAAE,OAAO,GAAG,UAAU,GAC1B,OAAO,CAaT;AAED,8DAA8D;AAC9D,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,EAAE,EAAE,CAwBjE;AAED,uFAAuF;AACvF,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,OAAO,GACb;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,CAK5D"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Whether assigning `newParentId` to `nodeId` would put `nodeId` on a cycle of
|
|
3
|
+
* parent links. A cycle the chain already holds without `nodeId` is not one it
|
|
4
|
+
* creates: counting it would refuse every edit beneath an old cyclic scene.
|
|
5
|
+
*/
|
|
6
|
+
export function wouldCreateHierarchyCycle(nodeId, newParentId, nodes) {
|
|
7
|
+
if (!newParentId)
|
|
8
|
+
return false;
|
|
9
|
+
const nodeAt = typeof nodes === 'function' ? nodes : (id) => nodes[id];
|
|
10
|
+
const seen = new Set();
|
|
11
|
+
let currentId = newParentId;
|
|
12
|
+
while (currentId) {
|
|
13
|
+
if (currentId === nodeId)
|
|
14
|
+
return true;
|
|
15
|
+
if (seen.has(currentId))
|
|
16
|
+
return false;
|
|
17
|
+
seen.add(currentId);
|
|
18
|
+
currentId = nodeAt(currentId)?.parentId ?? null;
|
|
19
|
+
}
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
/** Return each distinct cycle encoded by `parentId` links. */
|
|
23
|
+
export function findHierarchyCycles(nodes) {
|
|
24
|
+
const visited = new Set();
|
|
25
|
+
const cycles = [];
|
|
26
|
+
for (const startId of Object.keys(nodes)) {
|
|
27
|
+
if (visited.has(startId))
|
|
28
|
+
continue;
|
|
29
|
+
const chain = [];
|
|
30
|
+
const positions = new Map();
|
|
31
|
+
let currentId = startId;
|
|
32
|
+
while (currentId && nodes[currentId] && !visited.has(currentId)) {
|
|
33
|
+
const position = positions.get(currentId);
|
|
34
|
+
if (position !== undefined) {
|
|
35
|
+
cycles.push(chain.slice(position));
|
|
36
|
+
break;
|
|
37
|
+
}
|
|
38
|
+
positions.set(currentId, chain.length);
|
|
39
|
+
chain.push(currentId);
|
|
40
|
+
currentId = nodes[currentId]?.parentId ?? null;
|
|
41
|
+
}
|
|
42
|
+
for (const id of chain)
|
|
43
|
+
visited.add(id);
|
|
44
|
+
}
|
|
45
|
+
return cycles;
|
|
46
|
+
}
|
|
47
|
+
/** The `parentId` error each node on a cycle raises, as every scene check lists it. */
|
|
48
|
+
export function hierarchyCycleErrors(nodes) {
|
|
49
|
+
return findHierarchyCycles(nodes).flatMap((cycle) => {
|
|
50
|
+
const message = `hierarchy cycle detected: ${[...cycle, cycle[0]].join(' -> ')}`;
|
|
51
|
+
return cycle.map((nodeId) => ({ nodeId, path: 'parentId', message }));
|
|
52
|
+
});
|
|
53
|
+
}
|
|
@@ -5,7 +5,7 @@ export declare function supportSegmentAt(segment: WallSlabSupportSegment, t: num
|
|
|
5
5
|
export declare function openingDatumFromSupport(wall: WallNode, opening: Pick<DoorNode | WindowNode, 'position' | 'width' | 'height'> & Partial<Pick<DoorNode, 'rotation' | 'sidelightLeft' | 'sidelightRight' | 'transomHeight' | 'doorType'>>, support: WallSlabSupport): number;
|
|
6
6
|
/** Unclamped floor intent, used by authoring feasibility and legacy migration. */
|
|
7
7
|
export declare function getOpeningFloorTarget(wall: WallNode, opening: Pick<DoorNode | WindowNode, 'position' | 'width' | 'height'> & Partial<Pick<DoorNode, 'rotation' | 'sidelightLeft' | 'sidelightRight' | 'transomHeight' | 'doorType'>>, nodes: Readonly<Record<string, AnyNode>>): number;
|
|
8
|
-
export declare function openingFitsAtDatum(wall: WallNode, opening: Pick<DoorNode | WindowNode, 'position' | 'height'> & Partial<Pick<DoorNode, 'transomHeight' | 'doorType'>>, datum: number, nodes: Readonly<Record<string, AnyNode>>, support?: WallSlabSupport): boolean;
|
|
8
|
+
export declare function openingFitsAtDatum(wall: WallNode, opening: Pick<DoorNode | WindowNode, 'position' | 'width' | 'height'> & Partial<Pick<DoorNode, 'transomHeight' | 'doorType'>>, datum: number, nodes: Readonly<Record<string, AnyNode>>, support?: WallSlabSupport): boolean;
|
|
9
9
|
/**
|
|
10
10
|
* The lowest the wall reaches under the opening's span, level-local, on its centreline or either
|
|
11
11
|
* face: where a face goes down beside a floor sunk under the one the wall stands on (a garage
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opening-floor-datum.d.ts","sourceRoot":"","sources":["../../src/lib/opening-floor-datum.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAY,QAAQ,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAElF,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,sBAAsB,EAC5B,MAAM,8BAA8B,CAAA;AAuBrC,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACvC,eAAe,CAoCjB;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,sBAAsB,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAMnF;AAED,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,IAAI,CAAC,QAAQ,GAAG,UAAU,EAAE,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAC,GACnE,OAAO,CACL,IAAI,CAAC,QAAQ,EAAE,UAAU,GAAG,eAAe,GAAG,gBAAgB,GAAG,eAAe,GAAG,UAAU,CAAC,CAC/F,EACH,OAAO,EAAE,eAAe,GACvB,MAAM,CAaR;AAED,kFAAkF;AAClF,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,IAAI,CAAC,QAAQ,GAAG,UAAU,EAAE,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAC,GACnE,OAAO,CACL,IAAI,CAAC,QAAQ,EAAE,UAAU,GAAG,eAAe,GAAG,gBAAgB,GAAG,eAAe,GAAG,UAAU,CAAC,CAC/F,EACH,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACvC,MAAM,CAER;AAED,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,IAAI,CAAC,QAAQ,GAAG,UAAU,EAAE,UAAU,GAAG,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"opening-floor-datum.d.ts","sourceRoot":"","sources":["../../src/lib/opening-floor-datum.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { getWallTopOver } from '../services/storey.js';
|
|
2
2
|
import { computeWallSlabSupport, } from '../systems/slab/slab-support.js';
|
|
3
3
|
import { getWallCurveFrameAt, getWallCurveLength } from '../systems/wall/wall-curve.js';
|
|
4
4
|
import { calculateLevelMiters, getWallPlanFootprint } from '../systems/wall/wall-footprint.js';
|
|
@@ -64,7 +64,7 @@ export function getOpeningFloorTarget(wall, opening, nodes) {
|
|
|
64
64
|
return openingDatumFromSupport(wall, opening, wallSupportForNodes(wall, nodes));
|
|
65
65
|
}
|
|
66
66
|
export function openingFitsAtDatum(wall, opening, datum, nodes, support = wallSupportForNodes(wall, nodes)) {
|
|
67
|
-
const top =
|
|
67
|
+
const top = getWallTopOver(wall, wall.parentId, nodes, support.elevation, opening.position[0] - opening.width / 2, opening.position[0] + opening.width / 2);
|
|
68
68
|
return (datum +
|
|
69
69
|
opening.position[1] -
|
|
70
70
|
opening.height / 2 +
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"own-floor-intent.d.ts","sourceRoot":"","sources":["../../src/lib/own-floor-intent.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAsB,MAAM,WAAW,CAAA;AAavE,KAAK,MAAM,GAAG;IAAE,EAAE,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;CAAE,CAAA;AAEvD,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,OAAO,EAAE,SAAS,MAAM,EAAE;aAKT,MAAM,EAAE;;;;;;
|
|
1
|
+
{"version":3,"file":"own-floor-intent.d.ts","sourceRoot":"","sources":["../../src/lib/own-floor-intent.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAsB,MAAM,WAAW,CAAA;AAavE,KAAK,MAAM,GAAG;IAAE,EAAE,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;CAAE,CAAA;AAEvD,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,OAAO,EAAE,SAAS,MAAM,EAAE;aAKT,MAAM,EAAE;;;;;;EAqO1B"}
|
|
@@ -110,9 +110,9 @@ export function ownFloorIntentChanges(nodes, updates) {
|
|
|
110
110
|
const current = next[old.id];
|
|
111
111
|
if (old.type !== 'wall' || current?.type !== 'wall' || !old.parentId)
|
|
112
112
|
continue;
|
|
113
|
-
const oldTop = getWallTop(old, old.parentId, nodes, wallSupportForNodes(old, nodes).elevation);
|
|
113
|
+
const oldTop = getWallTop(old, old.parentId, nodes, wallSupportForNodes(old, nodes).elevation, 0);
|
|
114
114
|
const support = wallSupportForNodes(current, next).elevation;
|
|
115
|
-
const newTop = getWallTop(current, current.parentId, next, support);
|
|
115
|
+
const newTop = getWallTop(current, current.parentId, next, support, 0);
|
|
116
116
|
if (Math.abs(oldTop - newTop) <= 1e-6)
|
|
117
117
|
continue;
|
|
118
118
|
if (oldTop - support < MIN_WALL_HEIGHT)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"polygon-boolean.d.ts","sourceRoot":"","sources":["../../src/lib/polygon-boolean.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"polygon-boolean.d.ts","sourceRoot":"","sources":["../../src/lib/polygon-boolean.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAA;AACrC,MAAM,MAAM,OAAO,GAAG;IAAE,KAAK,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,IAAI,EAAE,CAAA;CAAE,CAAA;AACpD,MAAM,MAAM,YAAY,GAAG,OAAO,EAAE,CAAA;AACpC,MAAM,MAAM,YAAY,GAAG,IAAI,GAAG,OAAO,GAAG,YAAY,CAAA;AAoIxD,wBAAgB,KAAK,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,GAAG,YAAY,CAKnE;AAED,wBAAgB,UAAU,CACxB,CAAC,EAAE,YAAY,EACf,CAAC,EAAE,YAAY,EACf,OAAO,GAAE;IAAE,YAAY,CAAC,EAAE,OAAO,CAAA;CAAO,GACvC,YAAY,CAUd;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,GAAG,YAAY,CA2B3E;AAED,wBAAgB,IAAI,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAQhD;AAgCD,sEAAsE;AACtE,wBAAgB,aAAa,CAAC,KAAK,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAW/E;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAMnF"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import clipping from 'polygon-clipping';
|
|
2
|
+
import { isDevelopmentBuild } from './build-mode.js';
|
|
2
3
|
const SCALE = 10_000;
|
|
3
4
|
const MIN_AREA = 1e-6;
|
|
4
5
|
// Relative to the first vertex: absolute products at large coordinates (1e9 m
|
|
@@ -98,7 +99,7 @@ function clip(operation, inputs, run, throwOnError = false) {
|
|
|
98
99
|
catch (error) {
|
|
99
100
|
if (throwOnError)
|
|
100
101
|
throw error;
|
|
101
|
-
if (
|
|
102
|
+
if (isDevelopmentBuild()) {
|
|
102
103
|
const caller = new Error('Polygon clipping caller').stack
|
|
103
104
|
?.split('\n')
|
|
104
105
|
.slice(1)
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { AnyNode, SlabNode } from '../schema/index.js';
|
|
2
|
+
type Nodes = Readonly<Record<string, AnyNode>>;
|
|
3
|
+
/** The level's footprints, largest first (ties by id, so the order is stable). */
|
|
4
|
+
export declare function levelFootprints(nodes: Record<string, AnyNode>, levelId: string): SlabNode[];
|
|
5
|
+
/** A room's separate base plate, only when no other ground room shares it. */
|
|
6
|
+
export declare function roomOwnPlate(nodes: Nodes, zoneId: string): SlabNode | null;
|
|
7
|
+
/** The walking surface of a room: its own elevation, else its plate's. */
|
|
8
|
+
export declare function roomFloorElevation(nodes: Nodes, zoneId: string): number;
|
|
9
|
+
/** The walking surface of a room the separator closes, else zero. */
|
|
10
|
+
export declare function separatorFloorElevation(nodes: Nodes, separatorId: string): number;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=room-floor-elevation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"room-floor-elevation.d.ts","sourceRoot":"","sources":["../../src/lib/room-floor-elevation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAY,MAAM,WAAW,CAAA;AAG5D,KAAK,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;AAK9C,kFAAkF;AAClF,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,QAAQ,EAAE,CAW3F;AAED,8EAA8E;AAC9E,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAW1E;AAED,0EAA0E;AAC1E,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAUvE;AAED,qEAAqE;AACrE,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAKjF"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { area } from './polygon-boolean.js';
|
|
2
|
+
const isRoom = (node) => node?.type === 'zone' && node.spaceRole === 'room';
|
|
3
|
+
const isGroundRoom = (node) => isRoom(node) && node.floor?.support !== 'open';
|
|
4
|
+
/** The level's footprints, largest first (ties by id, so the order is stable). */
|
|
5
|
+
export function levelFootprints(nodes, levelId) {
|
|
6
|
+
return Object.values(nodes)
|
|
7
|
+
.filter((node) => node.type === 'slab' && node.plateRole === 'base' && node.parentId === levelId)
|
|
8
|
+
.sort((a, b) => area([{ outer: b.polygon, holes: b.holes }]) -
|
|
9
|
+
area([{ outer: a.polygon, holes: a.holes }]) || a.id.localeCompare(b.id));
|
|
10
|
+
}
|
|
11
|
+
/** A room's separate base plate, only when no other ground room shares it. */
|
|
12
|
+
export function roomOwnPlate(nodes, zoneId) {
|
|
13
|
+
const zone = nodes[zoneId];
|
|
14
|
+
if (!isRoom(zone) || !zone.floor?.footprint || zone.floor.support === 'open')
|
|
15
|
+
return null;
|
|
16
|
+
const plate = zone.parentId
|
|
17
|
+
? levelFootprints(nodes, zone.parentId).find((plate) => plate.zoneIds?.includes(zoneId))
|
|
18
|
+
: null;
|
|
19
|
+
if (!plate)
|
|
20
|
+
return null;
|
|
21
|
+
const alone = !(plate.zoneIds ?? []).some((id) => id !== zoneId && isGroundRoom(nodes[id]));
|
|
22
|
+
return alone ? plate : null;
|
|
23
|
+
}
|
|
24
|
+
/** The walking surface of a room: its own elevation, else its plate's. */
|
|
25
|
+
export function roomFloorElevation(nodes, zoneId) {
|
|
26
|
+
const zone = nodes[zoneId];
|
|
27
|
+
if (zone?.type !== 'zone')
|
|
28
|
+
return 0;
|
|
29
|
+
const own = roomOwnPlate(nodes, zoneId);
|
|
30
|
+
if (own)
|
|
31
|
+
return own.elevation;
|
|
32
|
+
if (typeof zone.floor?.elevation === 'number')
|
|
33
|
+
return zone.floor.elevation;
|
|
34
|
+
const plate = Object.values(nodes).find((node) => node.type === 'slab' && node.zoneIds?.includes(zoneId));
|
|
35
|
+
return plate?.type === 'slab' ? (plate.elevation ?? 0.05) : 0.05;
|
|
36
|
+
}
|
|
37
|
+
/** The walking surface of a room the separator closes, else zero. */
|
|
38
|
+
export function separatorFloorElevation(nodes, separatorId) {
|
|
39
|
+
const zone = Object.values(nodes).find((node) => node.type === 'zone' && node.boundarySeparatorIds.includes(separatorId));
|
|
40
|
+
return zone ? roomFloorElevation(nodes, zone.id) : 0;
|
|
41
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"room-floor-feasibility.d.ts","sourceRoot":"","sources":["../../src/lib/room-floor-feasibility.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAsB,MAAM,WAAW,CAAA;AAC5D,OAAO,EAEL,0BAA0B,EAC1B,kBAAkB,EACnB,MAAM,sBAAsB,CAAA;AAgB7B,eAAO,MAAM,uBAAuB,QAAQ,CAAA;AAC5C,OAAO,EAAE,0BAA0B,EAAE,kBAAkB,EAAE,CAAA;AAEzD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EACA,wBAAwB,GACxB,gCAAgC,GAChC,uBAAuB,GACvB,gBAAgB,GAChB,gBAAgB,GAChB,mBAAmB,GACnB,mBAAmB,GACnB,oBAAoB,GACpB,oBAAoB,GACpB,iBAAiB,GACjB,kBAAkB,CAAA;IACtB,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAA;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,CAAA;AAID,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,MAAM,EAAE,MAAM,GACb,MAAM,CA8CR;AAID,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,OAAO,EAAE,MAAM,GACd,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAoE7B;AAID,wBAAgB,cAAc,CAC5B,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,MAAM,EAAE,MAAM,EACd,iBAAiB,EAAE,MAAM;;;;;;EAa1B;
|
|
1
|
+
{"version":3,"file":"room-floor-feasibility.d.ts","sourceRoot":"","sources":["../../src/lib/room-floor-feasibility.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAsB,MAAM,WAAW,CAAA;AAC5D,OAAO,EAEL,0BAA0B,EAC1B,kBAAkB,EACnB,MAAM,sBAAsB,CAAA;AAgB7B,eAAO,MAAM,uBAAuB,QAAQ,CAAA;AAC5C,OAAO,EAAE,0BAA0B,EAAE,kBAAkB,EAAE,CAAA;AAEzD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EACA,wBAAwB,GACxB,gCAAgC,GAChC,uBAAuB,GACvB,gBAAgB,GAChB,gBAAgB,GAChB,mBAAmB,GACnB,mBAAmB,GACnB,oBAAoB,GACpB,oBAAoB,GACpB,iBAAiB,GACjB,kBAAkB,CAAA;IACtB,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAA;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,CAAA;AAID,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,MAAM,EAAE,MAAM,GACb,MAAM,CA8CR;AAID,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,OAAO,EAAE,MAAM,GACd,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAoE7B;AAID,wBAAgB,cAAc,CAC5B,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,MAAM,EAAE,MAAM,EACd,iBAAiB,EAAE,MAAM;;;;;;EAa1B;AA2KD,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,MAAM,EAAE,MAAM,GACb,MAAM,CAMR;AAED,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GACb,MAAM,CAER;AAED,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,MAAM,CAWR"}
|
|
@@ -176,7 +176,7 @@ function computeRoomFloor(nodes, zoneId, proposedElevation) {
|
|
|
176
176
|
for (const wall of walls) {
|
|
177
177
|
const hasOpenings = wall.children.some((id) => nodes[id]?.type === 'door' || nodes[id]?.type === 'window');
|
|
178
178
|
const support = hasOpenings || wall.height !== undefined ? wallSupportForNodes(wall, candidate) : undefined;
|
|
179
|
-
const top = getWallTop(wall, level.id, nodes, support?.elevation ?? 0);
|
|
179
|
+
const top = Math.min(getWallTop(wall, level.id, nodes, support?.elevation ?? 0, 0), getWallTop(wall, level.id, nodes, support?.elevation ?? 0, 1));
|
|
180
180
|
const openingSpans = hasOpenings && linked
|
|
181
181
|
? (roomFace(nodes, zone, floorRoomFaces(boundaries(nodes, zone.parentId)))?.spans ?? [])
|
|
182
182
|
: spans;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"space-detection.d.ts","sourceRoot":"","sources":["../../src/lib/space-detection.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,QAAQ,EAGd,MAAM,WAAW,CAAA;AAuBlB,OAAO,EACL,KAAK,aAAa,EAIlB,KAAK,iBAAiB,EAGvB,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,KAAK,YAAY,EAAqB,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AAG/F,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAG/D,wBAAgB,cAAc,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,GAAG,OAAO,CAEzE;AAID,OAAO,EAAE,KAAK,aAAa,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAEvF,MAAM,MAAM,KAAK,GAAG;IAClB,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IAChC,KAAK,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;IACtC,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;IAC9B,aAAa,EAAE,iBAAiB,EAAE,CAAA;IAClC,UAAU,EAAE,OAAO,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,2BAA2B,GAAG;IACxC,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,SAAS,GAAG,UAAU,CAAA;IAChC,eAAe,EAAE,MAAM,EAAE,CAAA;IACzB,uBAAuB,EAAE,MAAM,CAAA;IAC/B,wBAAwB,EAAE,MAAM,CAAA;CACjC,CAAA;AAED,MAAM,MAAM,yBAAyB,GAAG;IACtC,MAAM,CAAC,EAAE,kBAAkB,CAAA;IAC3B,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE,2BAA2B,KAAK,IAAI,CAAA;CACnE,CAAA;AAED,KAAK,cAAc,GAAG;IACpB,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,UAAU,GAAG,UAAU,GAAG,SAAS,CAAA;IAC9C,QAAQ,EAAE,UAAU,GAAG,UAAU,GAAG,SAAS,CAAA;CAC9C,CAAA;
|
|
1
|
+
{"version":3,"file":"space-detection.d.ts","sourceRoot":"","sources":["../../src/lib/space-detection.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,QAAQ,EAGd,MAAM,WAAW,CAAA;AAuBlB,OAAO,EACL,KAAK,aAAa,EAIlB,KAAK,iBAAiB,EAGvB,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,KAAK,YAAY,EAAqB,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AAG/F,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAG/D,wBAAgB,cAAc,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,GAAG,OAAO,CAEzE;AAID,OAAO,EAAE,KAAK,aAAa,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAEvF,MAAM,MAAM,KAAK,GAAG;IAClB,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IAChC,KAAK,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;IACtC,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;IAC9B,aAAa,EAAE,iBAAiB,EAAE,CAAA;IAClC,UAAU,EAAE,OAAO,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,2BAA2B,GAAG;IACxC,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,SAAS,GAAG,UAAU,CAAA;IAChC,eAAe,EAAE,MAAM,EAAE,CAAA;IACzB,uBAAuB,EAAE,MAAM,CAAA;IAC/B,wBAAwB,EAAE,MAAM,CAAA;CACjC,CAAA;AAED,MAAM,MAAM,yBAAyB,GAAG;IACtC,MAAM,CAAC,EAAE,kBAAkB,CAAA;IAC3B,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE,2BAA2B,KAAK,IAAI,CAAA;CACnE,CAAA;AAED,KAAK,cAAc,GAAG;IACpB,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,UAAU,GAAG,UAAU,GAAG,SAAS,CAAA;IAC9C,QAAQ,EAAE,UAAU,GAAG,UAAU,GAAG,SAAS,CAAA;CAC9C,CAAA;AA+PD,KAAK,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;AAkKrC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE;;;;;EAE1E;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,GAAG,MAAM,EAAE,CAMxF;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,GAAG,MAAM,EAAE,CAWxF;AA+CD,qFAAqF;AACrF,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C;AAED,sEAAsE;AACtE,wBAAgB,oBAAoB,IAAI,IAAI,CAK3C;AAED,6DAA6D;AAC7D,wBAAgB,sBAAsB,IAAI,OAAO,CAEhD;AAED,wBAAgB,uBAAuB,qCAMtC;AAED,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,GAAG,EACf,WAAW,EAAE,GAAG,EAChB,OAAO,GAAE,yBAA8B,GACtC,MAAM,IAAI,CAuLZ;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,OAAO,CAiBjF"}
|
|
@@ -41,6 +41,7 @@ function wallGeometrySignature(wall, nodes, levelId) {
|
|
|
41
41
|
: typeof wall.height === 'number'
|
|
42
42
|
? wall.height.toFixed(4)
|
|
43
43
|
: String(wall.height),
|
|
44
|
+
(wall.endHeightOffset ?? 0).toFixed(4),
|
|
44
45
|
wall.supportSlabId ?? 'elected',
|
|
45
46
|
(wall.supportOffset ?? 0).toFixed(4),
|
|
46
47
|
getClampedWallCurveOffset(wall).toFixed(4),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wall-face-script.d.ts","sourceRoot":"","sources":["../../src/lib/wall-face-script.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EACP,sBAAsB,EAEtB,cAAc,EAGf,MAAM,WAAW,CAAA;AAClB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAEpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAenE,KAAK,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;AAEnD,kEAAkE;AAClE,MAAM,MAAM,YAAY,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAAA;AAE7E;;;;;;;GAOG;AACH,MAAM,MAAM,oBAAoB,GAAG;IACjC,OAAO,EAAE,YAAY,CAAA;IACrB,KAAK,EAAE,YAAY,EAAE,CAAA;IACrB,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAA;IACxB,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAKD,iGAAiG;AACjG,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,GAAG,MAAM,CAOnF;
|
|
1
|
+
{"version":3,"file":"wall-face-script.d.ts","sourceRoot":"","sources":["../../src/lib/wall-face-script.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EACP,sBAAsB,EAEtB,cAAc,EAGf,MAAM,WAAW,CAAA;AAClB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAEpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAenE,KAAK,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;AAEnD,kEAAkE;AAClE,MAAM,MAAM,YAAY,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAAA;AAE7E;;;;;;;GAOG;AACH,MAAM,MAAM,oBAAoB,GAAG;IACjC,OAAO,EAAE,YAAY,CAAA;IACrB,KAAK,EAAE,YAAY,EAAE,CAAA;IACrB,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAA;IACxB,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAKD,iGAAiG;AACjG,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,GAAG,MAAM,CAOnF;AA0ID;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,QAAQ,EACd,QAAQ,CAAC,EAAE,MAAM,GAChB,oBAAoB,GAAG,IAAI,CAgC7B;AAED,0FAA0F;AAC1F,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,oBAAoB,GAAG,MAAM,CAI5E;AAED,mGAAmG;AACnG,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,sBAAsB,EAChC,MAAM,EAAE,oBAAoB,EAC5B,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,QAAQ,CAAC,EAAE,cAAc,GACxB,cAAc,CAMhB;AAKD;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,QAAQ,GACb;IAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GAAG,IAAI,CAYhF;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,MAAM,GACd,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAGzB;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,MAAM,EAAE,SAAS,CAAA;IACjB,IAAI,EAAE,2BAA2B,CAAA;IACjC,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,OAAO,GAAG,SAAS,EACzB,IAAI,EAAE,MAAM,GACX,oBAAoB,GAAG,SAAS,CAkBlC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { isCurvedWall } from '../systems/wall/wall-curve.js';
|
|
1
|
+
import { getWallTopOver } from '../services/storey.js';
|
|
2
|
+
import { getWallCurveLength, isCurvedWall } from '../systems/wall/wall-curve.js';
|
|
3
3
|
import { parseWallPaintRole } from '../systems/wall/wall-finish.js';
|
|
4
4
|
import { getWallThickness } from '../systems/wall/wall-footprint.js';
|
|
5
5
|
import { getWallLocalFaceZ } from '../systems/wall/wall-frame.js';
|
|
@@ -56,7 +56,7 @@ function faceFrame(nodes, wallId, face) {
|
|
|
56
56
|
const length = Math.hypot(dx, dz);
|
|
57
57
|
const support = wallSupportForNodes(wall, nodes);
|
|
58
58
|
const offset = wallFaceBaseOffset(support, face);
|
|
59
|
-
const top =
|
|
59
|
+
const top = getWallTopOver(wall, wall.parentId, nodes, support.elevation, 0, getWallCurveLength(wall)) -
|
|
60
60
|
support.elevation -
|
|
61
61
|
offset;
|
|
62
62
|
const station = (point) => ((point.x - wall.start[0]) * dx + (point.y - wall.start[1]) * dz) / length;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { AnyNodeId } from '../schema/types.js';
|
|
2
|
+
import { type InteractiveState, type WindowInteractiveState } from '../store/use-interactive.js';
|
|
3
|
+
export declare const WINDOW_TOGGLE_ANIMATION_MS = 520;
|
|
4
|
+
export type WindowOpenAnimationOptions = {
|
|
5
|
+
persist?: boolean;
|
|
6
|
+
};
|
|
7
|
+
export declare function isOperableWindowType(windowType: string | undefined): windowType is "awning" | "casement" | "double-hung" | "hopper" | "louvered" | "single-hung" | "sliding" | "tilt-turn";
|
|
8
|
+
export declare function getDisplayedWindowValue(windowId: AnyNodeId, nodeValue: number | undefined, field?: keyof WindowInteractiveState, interactive?: InteractiveState): number;
|
|
9
|
+
export declare function toggleWindowOpenState(windowId: AnyNodeId, options?: WindowOpenAnimationOptions): void;
|
|
10
|
+
export declare function closeWindowOpenState(windowId: AnyNodeId, options?: WindowOpenAnimationOptions): void;
|
|
11
|
+
export declare function openWindowOpenState(windowId: AnyNodeId, options?: WindowOpenAnimationOptions): void;
|
|
12
|
+
export type WindowShutterField = 'shutterOpen' | 'rollerShutterOpen';
|
|
13
|
+
export declare function getDisplayedWindowShutterValue(windowId: AnyNodeId, field: WindowShutterField, nodeValue: number | undefined, state?: InteractiveState): number;
|
|
14
|
+
/** Preview both shutter styles together, independently of the sash. */
|
|
15
|
+
export declare function setWindowShuttersOpenState(windowId: AnyNodeId, on: boolean, options?: WindowOpenAnimationOptions): void;
|
|
16
|
+
//# sourceMappingURL=window-interaction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"window-interaction.d.ts","sourceRoot":"","sources":["../../src/lib/window-interaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAChD,OAAO,EACL,KAAK,gBAAgB,EAErB,KAAK,sBAAsB,EAC5B,MAAM,0BAA0B,CAAA;AAGjC,eAAO,MAAM,0BAA0B,MAAM,CAAA;AAE7C,MAAM,MAAM,0BAA0B,GAAG;IACvC,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB,CAAA;AAED,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,yHAWlE;AAED,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,SAAS,EACnB,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,KAAK,GAAE,MAAM,sBAAyC,EACtD,WAAW,GAAE,gBAA4C,UAS1D;AAmBD,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,0BAA0B,QAkB9F;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,0BAA0B,QAY7F;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,0BAA0B,QAY5F;AAED,MAAM,MAAM,kBAAkB,GAAG,aAAa,GAAG,mBAAmB,CAAA;AAEpE,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,SAAS,EACnB,KAAK,EAAE,kBAAkB,EACzB,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,KAAK,GAAE,gBAA4C,GAClD,MAAM,CAER;AAED,uEAAuE;AACvE,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,SAAS,EACnB,EAAE,EAAE,OAAO,EACX,OAAO,CAAC,EAAE,0BAA0B,GACnC,IAAI,CAkBN"}
|