@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.
- package/dist/agent-operations/__fixtures__/cases.d.ts +3 -2
- package/dist/agent-operations/__fixtures__/cases.d.ts.map +1 -1
- 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__/place-items-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/place-items-cases.js +28 -0
- package/dist/agent-operations/__fixtures__/roof-bearing-cases.d.ts +9567 -9563
- 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/asset-catalog.d.ts +21 -11
- package/dist/agent-operations/asset-catalog.d.ts.map +1 -1
- package/dist/agent-operations/asset-catalog.js +28 -10
- package/dist/agent-operations/asset-views.d.ts +8 -3
- package/dist/agent-operations/asset-views.d.ts.map +1 -1
- package/dist/agent-operations/asset-views.js +19 -3
- package/dist/agent-operations/author-scene.d.ts.map +1 -1
- package/dist/agent-operations/author-scene.js +2 -3
- package/dist/agent-operations/batch.d.ts +7 -1
- package/dist/agent-operations/batch.d.ts.map +1 -1
- package/dist/agent-operations/batch.js +17 -2
- package/dist/agent-operations/catalog-asset.d.ts +15 -0
- package/dist/agent-operations/catalog-asset.d.ts.map +1 -0
- package/dist/agent-operations/catalog-asset.js +4 -0
- package/dist/agent-operations/circulation-spaces.d.ts +1724 -1723
- package/dist/agent-operations/circulation-spaces.d.ts.map +1 -1
- package/dist/agent-operations/design-brief.d.ts.map +1 -1
- package/dist/agent-operations/design-brief.js +2 -0
- package/dist/agent-operations/furnish-room.d.ts.map +1 -1
- package/dist/agent-operations/furnish-room.js +2 -1
- package/dist/agent-operations/index.d.ts +3 -0
- package/dist/agent-operations/index.d.ts.map +1 -1
- package/dist/agent-operations/index.js +4 -1
- package/dist/agent-operations/level-reads.d.ts.map +1 -1
- package/dist/agent-operations/level-reads.js +5 -2
- package/dist/agent-operations/move-plan.d.ts.map +1 -1
- package/dist/agent-operations/move-plan.js +11 -9
- package/dist/agent-operations/place-in-room.d.ts.map +1 -1
- package/dist/agent-operations/place-in-room.js +2 -1
- package/dist/agent-operations/place-items.d.ts.map +1 -1
- package/dist/agent-operations/place-items.js +2 -1
- package/dist/agent-operations/scene-queries.d.ts +2944 -2943
- package/dist/agent-operations/scene-queries.d.ts.map +1 -1
- package/dist/agent-operations/scene-view.d.ts.map +1 -1
- package/dist/agent-operations/scene-view.js +38 -13
- package/dist/agent-operations/search-assets.d.ts.map +1 -1
- package/dist/agent-operations/search-assets.js +6 -0
- package/dist/agent-operations/types.d.ts +3 -2
- package/dist/agent-operations/types.d.ts.map +1 -1
- package/dist/agent-operations/usage-checks.js +18 -3
- 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/assets.js +1 -1
- package/dist/agent-tools/wall-openings.js +2 -2
- package/dist/building/__fixtures__/wall-opening-cases.d.ts +13 -12
- package/dist/building/__fixtures__/wall-opening-cases.d.ts.map +1 -1
- package/dist/building/level-duplication.d.ts +1281 -1279
- package/dist/building/level-duplication.d.ts.map +1 -1
- package/dist/building/level-duplication.js +3 -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 +95 -81
- 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 +3203 -3202
- package/dist/commands/structure/shared.d.ts.map +1 -1
- package/dist/commands/structure/zone-wall-merge.d.ts +2028 -2025
- 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 +2101 -2100
- 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 +13 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -4
- package/dist/lib/__fixtures__/mezzanine.d.ts +6428 -6424
- package/dist/lib/__fixtures__/mezzanine.d.ts.map +1 -1
- package/dist/lib/absorb-wall-separators.d.ts +2267 -2266
- package/dist/lib/absorb-wall-separators.d.ts.map +1 -1
- package/dist/lib/asset-storage.d.ts.map +1 -1
- package/dist/lib/asset-storage.js +3 -0
- 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-foundation-datum.d.ts.map +1 -1
- package/dist/lib/floor-foundation-datum.js +5 -1
- package/dist/lib/floor-intent-changes.d.ts.map +1 -1
- package/dist/lib/floor-intent-changes.js +6 -4
- package/dist/lib/floorplan/context.d.ts +95 -0
- package/dist/lib/floorplan/context.d.ts.map +1 -0
- package/dist/lib/floorplan/context.js +155 -0
- package/dist/lib/floorplan/index.d.ts +6 -0
- package/dist/lib/floorplan/index.d.ts.map +1 -0
- package/dist/lib/floorplan/index.js +5 -0
- package/dist/lib/floorplan/marks.d.ts +71 -0
- package/dist/lib/floorplan/marks.d.ts.map +1 -0
- package/dist/lib/floorplan/marks.js +157 -0
- package/dist/lib/floorplan/plan-math.d.ts +18 -0
- package/dist/lib/floorplan/plan-math.d.ts.map +1 -0
- package/dist/lib/floorplan/plan-math.js +82 -0
- package/dist/lib/floorplan/svg-paths.d.ts +17 -0
- package/dist/lib/floorplan/svg-paths.d.ts.map +1 -0
- package/dist/lib/floorplan/svg-paths.js +92 -0
- package/dist/lib/floorplan/wall-affordances.d.ts +31 -0
- package/dist/lib/floorplan/wall-affordances.d.ts.map +1 -0
- package/dist/lib/floorplan/wall-affordances.js +24 -0
- 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/__fixtures__/roof-planes.d.ts +69 -0
- package/dist/registry/__fixtures__/roof-planes.d.ts.map +1 -0
- package/dist/registry/__fixtures__/roof-planes.js +59 -0
- package/dist/registry/index.d.ts +3 -2
- package/dist/registry/index.d.ts.map +1 -1
- package/dist/registry/index.js +2 -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/roofs.d.ts +34 -0
- package/dist/registry/roofs.d.ts.map +1 -0
- package/dist/registry/roofs.js +61 -0
- package/dist/registry/types.d.ts +54 -0
- package/dist/registry/types.d.ts.map +1 -1
- package/dist/registry/validate-relations.d.ts +5 -1
- package/dist/registry/validate-relations.d.ts.map +1 -1
- package/dist/registry/validate-relations.js +6 -2
- package/dist/schema/asset-url.d.ts +8 -0
- package/dist/schema/asset-url.d.ts.map +1 -1
- package/dist/schema/asset-url.js +17 -0
- 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/roof.d.ts +1 -1
- package/dist/schema/nodes/roof.d.ts.map +1 -1
- package/dist/schema/nodes/roof.js +13 -8
- 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 +2 -1
- 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/roof-level.d.ts.map +1 -1
- package/dist/services/roof-level.js +12 -2
- package/dist/services/roof-move.d.ts +4 -2
- package/dist/services/roof-move.d.ts.map +1 -1
- package/dist/services/roof-move.js +21 -9
- 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/findings.d.ts +7 -1
- package/dist/spatial/usage-field/findings.d.ts.map +1 -1
- package/dist/spatial/usage-field/findings.js +42 -10
- package/dist/spatial/usage-field/path.d.ts.map +1 -1
- package/dist/spatial/usage-field/path.js +28 -18
- 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 +2 -1
- 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 +4634 -4632
- package/dist/store/scene-annotations.d.ts.map +1 -1
- package/dist/systems/document-reconcile.d.ts.map +1 -1
- package/dist/systems/document-reconcile.js +1 -2
- 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 +11 -6
- package/dist/systems/roof/roof-elevation.d.ts.map +1 -1
- package/dist/systems/roof/roof-elevation.js +26 -12
- package/dist/systems/slab/__fixtures__/floor-step.d.ts +5 -1
- package/dist/systems/slab/__fixtures__/floor-step.d.ts.map +1 -1
- package/dist/systems/slab/__fixtures__/raised-room.d.ts +2218 -2214
- package/dist/systems/slab/__fixtures__/raised-room.d.ts.map +1 -1
- package/dist/systems/stair/stair-opening-preview.d.ts +3203 -3202
- 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 +5595 -5593
- package/dist/utils/ensure-scene-openings.d.ts.map +1 -1
- package/dist/utils/floor-plate-migration.d.ts +2267 -2266
- 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 +653 -652
- package/dist/utils/owned-floor-opening-migration.d.ts.map +1 -1
- package/dist/utils/reconcile-structure-on-load.d.ts +1724 -1723
- package/dist/utils/reconcile-structure-on-load.d.ts.map +1 -1
- package/dist/utils/scene-bounds.d.ts +32 -0
- package/dist/utils/scene-bounds.d.ts.map +1 -0
- package/dist/utils/scene-bounds.js +201 -0
- 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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"asset-storage.d.ts","sourceRoot":"","sources":["../../src/lib/asset-storage.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"asset-storage.d.ts","sourceRoot":"","sources":["../../src/lib/asset-storage.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,YAAY,gBAAgB,CAAA;AAQzC;;GAEG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAI3D;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAqCtE"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { get, set } from 'idb-keyval';
|
|
2
2
|
import { customAlphabet } from 'nanoid';
|
|
3
|
+
import { isSchemeRelativeUrl } from '../schema/asset-url.js';
|
|
3
4
|
import { ARTIFACT_URL_PREFIX, resolveArtifactUrl } from './artifact-store.js';
|
|
4
5
|
export const ASSET_PREFIX = 'asset_data:';
|
|
5
6
|
// Cache for active object URLs to prevent leaks and flickering
|
|
@@ -21,6 +22,8 @@ export async function saveAsset(file) {
|
|
|
21
22
|
export async function loadAssetUrl(url) {
|
|
22
23
|
if (!url)
|
|
23
24
|
return null;
|
|
25
|
+
if (isSchemeRelativeUrl(url))
|
|
26
|
+
return null;
|
|
24
27
|
// If it's already a blob or http URL, return as is
|
|
25
28
|
if (url.startsWith('blob:') || url.startsWith('http')) {
|
|
26
29
|
return url;
|
|
@@ -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-foundation-datum.d.ts","sourceRoot":"","sources":["../../src/lib/floor-foundation-datum.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"floor-foundation-datum.d.ts","sourceRoot":"","sources":["../../src/lib/floor-foundation-datum.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAclD,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,KAAK,EAAE,QAAQ,GACd,MAAM,CAER;AAED,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,KAAK,EAAE,QAAQ,GACd,MAAM,CA+BR;AAED,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,KAAK,EAAE,QAAQ,GACd,WAAW,GAAG,gBAAgB,CA+BhC;AAED,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,KAAK,EAAE,QAAQ,GACd,OAAO,CAMT;AAED,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,KAAK,EAAE,QAAQ,GACd,OAAO,CAET;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,KAAK,EAAE,QAAQ,GACd;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAA;CAAE,CAK7E;AAED,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,KAAK,EAAE,QAAQ,GACd,MAAM,CAER;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,GAAG,MAAM,CAM/F;AAED,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,KAAK,EAAE,QAAQ,EACf,SAAS,GAAE,MAA6C,GACvD;IACD,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAA;IAC5B,MAAM,CAAC,EAAE,aAAa,CAAA;CACvB,GAAG,IAAI,CAYP;AAED,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,IAAI,EAAE,OAAO,EACb,YAAY,EAAE,MAAM,GACnB,MAAM,CAUR;AAID,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,QAAQ,EACd,IAAI,EAAE,OAAO,EACb,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACvC,OAAO,CAgBT"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { roofFaceShapes } from '../registry/roofs.js';
|
|
1
2
|
import { DEFAULT_SLAB_ELEVATION, MIN_SLAB_THICKNESS } from '../schema/nodes/slab.js';
|
|
2
3
|
import { wallOverlapsSlabFootprint } from '../systems/slab/slab-support.js';
|
|
3
4
|
import { getWallArcData } from '../systems/wall/wall-curve.js';
|
|
@@ -199,8 +200,11 @@ function computeFootprintSupport(base, node, nodes) {
|
|
|
199
200
|
const segments = node.children
|
|
200
201
|
.map((id) => nodes[id])
|
|
201
202
|
.filter((segment) => segment?.type === 'roof-segment');
|
|
202
|
-
|
|
203
|
+
const faces = roofFaceShapes(node, nodes);
|
|
204
|
+
if (!segments.length && !faces.length)
|
|
203
205
|
return containsPoint([{ outer: base.polygon, holes: base.holes ?? [] }], [node.position[0], node.position[2]]);
|
|
206
|
+
if (faces.some((face) => polygonsOverlap(base, face.outline)))
|
|
207
|
+
return true;
|
|
204
208
|
return segments.some((segment) => {
|
|
205
209
|
if (segment.type !== 'roof-segment')
|
|
206
210
|
return false;
|
|
@@ -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,95 @@
|
|
|
1
|
+
import type { FloorplanGeometry, FloorplanPalette, GeometryContext } from '../../registry/types.js';
|
|
2
|
+
import type { AnyNode } from '../../schema/index.js';
|
|
3
|
+
/** The `def.floorplan` contract every plan host shares: context extensions and geometry metadata. */
|
|
4
|
+
export declare const FLOORPLAN_GEOMETRY_METADATA_KEY = "pascal:editor/floorplan";
|
|
5
|
+
export declare const FLOORPLAN_CONTEXT_EXTENSION_KEY = "pascal:editor/floorplan";
|
|
6
|
+
export type FloorplanRenderPurpose = 'edit' | 'document';
|
|
7
|
+
export type FloorplanMetricNotation = 'meters' | 'millimeters';
|
|
8
|
+
/**
|
|
9
|
+
* Display → Measure walls: which finished faces wall dimensions measure to —
|
|
10
|
+
* the interior faces (ID, the room sizes), the exterior faces (OD, the
|
|
11
|
+
* outside size) or both. Read by a selected wall's temporary dimensions in 2D
|
|
12
|
+
* and 3D and by the Expert plan's automatic dimension strings.
|
|
13
|
+
*/
|
|
14
|
+
export type FloorplanWallDimensionFaces = 'interior' | 'exterior' | 'both';
|
|
15
|
+
export declare const DEFAULT_FLOORPLAN_WALL_DIMENSION_FACES: FloorplanWallDimensionFaces;
|
|
16
|
+
export declare function normalizeFloorplanWallDimensionFaces(value: unknown): FloorplanWallDimensionFaces;
|
|
17
|
+
export type FloorplanAnnotationRole = 'automatic-dimension' | 'contextual-dimension' | 'manual-dimension' | 'measurement' | 'opening-mark' | 'structural-grid' | 'column-center' | 'room-label'
|
|
18
|
+
/** A room's finish / ceiling-height lines — detail under the name, off in the clean plan. */
|
|
19
|
+
| 'room-detail'
|
|
20
|
+
/** The roof plan proper: outline, ridges, hips, slope arrows. Off over a floor plan unless asked. */
|
|
21
|
+
| 'roof-plan' | 'roof-pitch' | 'stair-annotation';
|
|
22
|
+
export type FloorplanSchedule = {
|
|
23
|
+
id: string;
|
|
24
|
+
title: string;
|
|
25
|
+
columns: ReadonlyArray<{
|
|
26
|
+
key: string;
|
|
27
|
+
label: string;
|
|
28
|
+
weight?: number;
|
|
29
|
+
}>;
|
|
30
|
+
rows: ReadonlyArray<{
|
|
31
|
+
id: string;
|
|
32
|
+
cells: Readonly<Record<string, string>>;
|
|
33
|
+
}>;
|
|
34
|
+
issues?: readonly string[];
|
|
35
|
+
};
|
|
36
|
+
type FloorplanGeometryMetadata = {
|
|
37
|
+
annotationRole?: FloorplanAnnotationRole;
|
|
38
|
+
annotationObstacle?: 'bounds' | 'outline';
|
|
39
|
+
renderPass?: 'overlay';
|
|
40
|
+
/**
|
|
41
|
+
* Annotation text only: the size to print at, in paper points, instead of
|
|
42
|
+
* the size its role implies. Lets a sheet set a room tag's name larger than
|
|
43
|
+
* its number without inventing a role per size.
|
|
44
|
+
*/
|
|
45
|
+
textSizePt?: number;
|
|
46
|
+
};
|
|
47
|
+
type FloorplanContextExtension = {
|
|
48
|
+
automaticDimensions: boolean;
|
|
49
|
+
purpose: FloorplanRenderPurpose;
|
|
50
|
+
/**
|
|
51
|
+
* Sheet drafting (the Sheets plan viewports): kinds draw the permit-set
|
|
52
|
+
* convention — fixtures as labelled linework, furniture as light outlines,
|
|
53
|
+
* no raster sprites. Only `collectSheetGeometry` sets it; the editor and the
|
|
54
|
+
* read-only viewer never do, so their plans keep today's look.
|
|
55
|
+
*/
|
|
56
|
+
drafting: boolean;
|
|
57
|
+
/**
|
|
58
|
+
* The editor canvas draws room labels as screen pills over the plan
|
|
59
|
+
* (`RoomLabels2D`), so zones skip their drawn tags and wash there. Exports,
|
|
60
|
+
* sheets and the read-only viewer keep the drawn tags.
|
|
61
|
+
*/
|
|
62
|
+
roomLabelOverlay: boolean;
|
|
63
|
+
metricNotation: FloorplanMetricNotation;
|
|
64
|
+
wallDimensionFaces: FloorplanWallDimensionFaces;
|
|
65
|
+
};
|
|
66
|
+
export declare function floorplanGeometryMetadata(values: FloorplanGeometryMetadata): Readonly<Record<string, unknown>>;
|
|
67
|
+
export declare function withFloorplanGeometryMetadata<T extends FloorplanGeometry | null>(geometry: T, values: FloorplanGeometryMetadata): T;
|
|
68
|
+
export declare function readFloorplanGeometryMetadata(geometry: unknown): FloorplanGeometryMetadata;
|
|
69
|
+
export declare function isFloorplanAnnotationObstacleGeometry(geometry: FloorplanGeometry): boolean;
|
|
70
|
+
export declare function floorplanAnnotationObstacleMode(geometry: FloorplanGeometry): 'bounds' | 'outline' | '' | undefined;
|
|
71
|
+
export declare function createFloorplanContextExtensions(values: Partial<FloorplanContextExtension>): Readonly<Record<string, unknown>>;
|
|
72
|
+
export declare function readFloorplanContext(ctx: GeometryContext): FloorplanContextExtension;
|
|
73
|
+
export declare function readFloorplanMetricNotationOverride(ctx: GeometryContext): FloorplanMetricNotation | undefined;
|
|
74
|
+
export type FloorplanViewState = {
|
|
75
|
+
automaticDimensions?: boolean;
|
|
76
|
+
selected: boolean;
|
|
77
|
+
unit: 'metric' | 'imperial';
|
|
78
|
+
metricNotation?: 'meters' | 'millimeters';
|
|
79
|
+
purpose?: 'edit' | 'document';
|
|
80
|
+
/** Sheet drafting conventions (see `FloorplanContextExtension.drafting`). */
|
|
81
|
+
drafting?: boolean;
|
|
82
|
+
/** Room labels drawn as screen pills (see `FloorplanContextExtension.roomLabelOverlay`). */
|
|
83
|
+
roomLabelOverlay?: boolean;
|
|
84
|
+
wallDimensionFaces?: FloorplanWallDimensionFaces;
|
|
85
|
+
highlighted: boolean;
|
|
86
|
+
hovered: boolean;
|
|
87
|
+
moving: boolean;
|
|
88
|
+
focusedUnitId?: string;
|
|
89
|
+
focusedUnitMemberIds?: readonly string[];
|
|
90
|
+
palette: FloorplanPalette | undefined;
|
|
91
|
+
};
|
|
92
|
+
export declare function buildFloorplanContext(node: AnyNode, nodes: Record<string, AnyNode>, viewState: FloorplanViewState, levelData?: unknown): GeometryContext;
|
|
93
|
+
export declare function floorplanLayerRank(type: string): number;
|
|
94
|
+
export {};
|
|
95
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/lib/floorplan/context.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/** The `def.floorplan` contract every plan host shares: context extensions and geometry metadata. */
|
|
2
|
+
export const FLOORPLAN_GEOMETRY_METADATA_KEY = 'pascal:editor/floorplan';
|
|
3
|
+
export const FLOORPLAN_CONTEXT_EXTENSION_KEY = 'pascal:editor/floorplan';
|
|
4
|
+
export const DEFAULT_FLOORPLAN_WALL_DIMENSION_FACES = 'both';
|
|
5
|
+
export function normalizeFloorplanWallDimensionFaces(value) {
|
|
6
|
+
return value === 'interior' || value === 'exterior'
|
|
7
|
+
? value
|
|
8
|
+
: DEFAULT_FLOORPLAN_WALL_DIMENSION_FACES;
|
|
9
|
+
}
|
|
10
|
+
export function floorplanGeometryMetadata(values) {
|
|
11
|
+
return { [FLOORPLAN_GEOMETRY_METADATA_KEY]: values };
|
|
12
|
+
}
|
|
13
|
+
export function withFloorplanGeometryMetadata(geometry, values) {
|
|
14
|
+
if (!geometry)
|
|
15
|
+
return geometry;
|
|
16
|
+
const existing = readFloorplanGeometryMetadata(geometry);
|
|
17
|
+
return {
|
|
18
|
+
...geometry,
|
|
19
|
+
metadata: floorplanGeometryMetadata({ ...existing, ...values }),
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
export function readFloorplanGeometryMetadata(geometry) {
|
|
23
|
+
const metadata = geometry?.metadata;
|
|
24
|
+
const value = metadata?.[FLOORPLAN_GEOMETRY_METADATA_KEY];
|
|
25
|
+
return value && typeof value === 'object' && !Array.isArray(value)
|
|
26
|
+
? value
|
|
27
|
+
: {};
|
|
28
|
+
}
|
|
29
|
+
export function isFloorplanAnnotationObstacleGeometry(geometry) {
|
|
30
|
+
if (floorplanAnnotationObstacleMode(geometry))
|
|
31
|
+
return true;
|
|
32
|
+
if (geometry.kind !== 'group')
|
|
33
|
+
return false;
|
|
34
|
+
const hasPlate = geometry.children.some((child) => child.kind === 'rect' || child.kind === 'circle');
|
|
35
|
+
const hasUprightText = geometry.children.some((child) => child.kind === 'text' && child.upright);
|
|
36
|
+
return hasPlate && hasUprightText;
|
|
37
|
+
}
|
|
38
|
+
export function floorplanAnnotationObstacleMode(geometry) {
|
|
39
|
+
const metadata = readFloorplanGeometryMetadata(geometry);
|
|
40
|
+
if (metadata.annotationObstacle)
|
|
41
|
+
return metadata.annotationObstacle;
|
|
42
|
+
switch (metadata.annotationRole) {
|
|
43
|
+
case 'room-label':
|
|
44
|
+
return geometry.kind === 'text' ? 'bounds' : undefined;
|
|
45
|
+
case 'column-center':
|
|
46
|
+
return geometry.kind === 'line' || geometry.kind === 'text' ? 'bounds' : undefined;
|
|
47
|
+
case 'stair-annotation':
|
|
48
|
+
return geometry.kind === 'polyline' || geometry.kind === 'line' ? 'outline' : 'bounds';
|
|
49
|
+
default:
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
export function createFloorplanContextExtensions(values) {
|
|
54
|
+
return {
|
|
55
|
+
[FLOORPLAN_CONTEXT_EXTENSION_KEY]: {
|
|
56
|
+
automaticDimensions: values.automaticDimensions !== false,
|
|
57
|
+
purpose: values.purpose === 'document' ? 'document' : 'edit',
|
|
58
|
+
drafting: values.drafting === true,
|
|
59
|
+
roomLabelOverlay: values.roomLabelOverlay === true,
|
|
60
|
+
metricNotation: values.metricNotation === 'millimeters' ? 'millimeters' : 'meters',
|
|
61
|
+
wallDimensionFaces: normalizeFloorplanWallDimensionFaces(values.wallDimensionFaces),
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
export function readFloorplanContext(ctx) {
|
|
66
|
+
const value = ctx.extensions?.[FLOORPLAN_CONTEXT_EXTENSION_KEY];
|
|
67
|
+
if (value && typeof value === 'object' && !Array.isArray(value)) {
|
|
68
|
+
const extension = value;
|
|
69
|
+
return {
|
|
70
|
+
automaticDimensions: extension.automaticDimensions !== false,
|
|
71
|
+
purpose: extension.purpose === 'document' ? 'document' : 'edit',
|
|
72
|
+
drafting: extension.drafting === true,
|
|
73
|
+
roomLabelOverlay: extension.roomLabelOverlay === true,
|
|
74
|
+
metricNotation: extension.metricNotation === 'millimeters' ? 'millimeters' : 'meters',
|
|
75
|
+
wallDimensionFaces: normalizeFloorplanWallDimensionFaces(extension.wallDimensionFaces),
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
return {
|
|
79
|
+
automaticDimensions: true,
|
|
80
|
+
purpose: 'edit',
|
|
81
|
+
drafting: false,
|
|
82
|
+
roomLabelOverlay: false,
|
|
83
|
+
metricNotation: 'meters',
|
|
84
|
+
wallDimensionFaces: DEFAULT_FLOORPLAN_WALL_DIMENSION_FACES,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
export function readFloorplanMetricNotationOverride(ctx) {
|
|
88
|
+
const value = ctx.extensions?.[FLOORPLAN_CONTEXT_EXTENSION_KEY];
|
|
89
|
+
if (!value || typeof value !== 'object' || Array.isArray(value))
|
|
90
|
+
return undefined;
|
|
91
|
+
const metricNotation = value.metricNotation;
|
|
92
|
+
return metricNotation === 'meters' || metricNotation === 'millimeters'
|
|
93
|
+
? metricNotation
|
|
94
|
+
: undefined;
|
|
95
|
+
}
|
|
96
|
+
export function buildFloorplanContext(node, nodes, viewState, levelData) {
|
|
97
|
+
const resolve = (id) => nodes[id];
|
|
98
|
+
const childIds = node.children;
|
|
99
|
+
const children = Array.isArray(childIds)
|
|
100
|
+
? childIds.map((id) => nodes[id]).filter((child) => child !== undefined)
|
|
101
|
+
: [];
|
|
102
|
+
const parentId = node.parentId;
|
|
103
|
+
const parent = parentId ? (nodes[parentId] ?? null) : null;
|
|
104
|
+
let siblings = [];
|
|
105
|
+
if (parent) {
|
|
106
|
+
const parentChildIds = parent.children;
|
|
107
|
+
siblings = Array.isArray(parentChildIds)
|
|
108
|
+
? parentChildIds
|
|
109
|
+
.filter((id) => id !== node.id)
|
|
110
|
+
.map((id) => nodes[id])
|
|
111
|
+
.filter((sibling) => sibling?.type === node.type)
|
|
112
|
+
: Object.values(nodes).filter((candidate) => candidate.id !== node.id &&
|
|
113
|
+
candidate.type === node.type &&
|
|
114
|
+
candidate.parentId === node.parentId);
|
|
115
|
+
}
|
|
116
|
+
return {
|
|
117
|
+
resolve,
|
|
118
|
+
children,
|
|
119
|
+
siblings,
|
|
120
|
+
parent,
|
|
121
|
+
levelData,
|
|
122
|
+
sceneNodes: nodes,
|
|
123
|
+
extensions: createFloorplanContextExtensions({
|
|
124
|
+
automaticDimensions: viewState.automaticDimensions,
|
|
125
|
+
metricNotation: viewState.metricNotation ?? 'meters',
|
|
126
|
+
purpose: viewState.purpose ?? 'edit',
|
|
127
|
+
drafting: viewState.drafting === true,
|
|
128
|
+
roomLabelOverlay: viewState.roomLabelOverlay === true,
|
|
129
|
+
wallDimensionFaces: viewState.wallDimensionFaces,
|
|
130
|
+
}),
|
|
131
|
+
viewState: viewState.palette
|
|
132
|
+
? {
|
|
133
|
+
selected: viewState.selected,
|
|
134
|
+
unit: viewState.unit,
|
|
135
|
+
highlighted: viewState.highlighted,
|
|
136
|
+
hovered: viewState.hovered,
|
|
137
|
+
moving: viewState.moving,
|
|
138
|
+
focusedUnitId: viewState.focusedUnitId,
|
|
139
|
+
focusedUnitMemberIds: viewState.focusedUnitMemberIds,
|
|
140
|
+
palette: viewState.palette,
|
|
141
|
+
}
|
|
142
|
+
: undefined,
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
export function floorplanLayerRank(type) {
|
|
146
|
+
switch (type) {
|
|
147
|
+
case 'zone':
|
|
148
|
+
return 0;
|
|
149
|
+
case 'slab':
|
|
150
|
+
case 'ceiling':
|
|
151
|
+
return 1;
|
|
152
|
+
default:
|
|
153
|
+
return 2;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/floorplan/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA;AACzB,cAAc,SAAS,CAAA;AACvB,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,oBAAoB,CAAA"}
|