@pascal-app/core 0.9.1 → 1.0.0-beta.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/README.md +17 -10
- package/dist/events/bus.d.ts +49 -2
- package/dist/events/bus.d.ts.map +1 -1
- package/dist/hooks/scene-registry/item-clip-registry.d.ts +18 -0
- package/dist/hooks/scene-registry/item-clip-registry.d.ts.map +1 -0
- package/dist/hooks/scene-registry/item-clip-registry.js +10 -0
- package/dist/hooks/scene-registry/scene-registry.d.ts +8 -1
- package/dist/hooks/scene-registry/scene-registry.d.ts.map +1 -1
- package/dist/hooks/scene-registry/scene-registry.js +27 -1
- package/dist/hooks/spatial-grid/floor-placed-elevation.d.ts +17 -1
- package/dist/hooks/spatial-grid/floor-placed-elevation.d.ts.map +1 -1
- package/dist/hooks/spatial-grid/floor-placed-elevation.js +61 -8
- package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts +135 -28
- package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts.map +1 -1
- package/dist/hooks/spatial-grid/spatial-grid-manager.js +427 -271
- package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts +46 -1
- package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts.map +1 -1
- package/dist/hooks/spatial-grid/spatial-grid-sync.js +208 -9
- package/dist/hooks/spatial-grid/support-host-id.d.ts +3 -0
- package/dist/hooks/spatial-grid/support-host-id.d.ts.map +1 -0
- package/dist/hooks/spatial-grid/support-host-id.js +2 -0
- package/dist/hooks/spatial-grid/support-host-patch.d.ts +51 -0
- package/dist/hooks/spatial-grid/support-host-patch.d.ts.map +1 -0
- package/dist/hooks/spatial-grid/support-host-patch.js +164 -0
- package/dist/index.d.ts +33 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +32 -10
- package/dist/lib/level-name.d.ts +4 -0
- package/dist/lib/level-name.d.ts.map +1 -0
- package/dist/lib/level-name.js +10 -0
- package/dist/lib/measurement-geometry.d.ts +23 -0
- package/dist/lib/measurement-geometry.d.ts.map +1 -0
- package/dist/lib/measurement-geometry.js +249 -0
- package/dist/lib/polygon-geometry.d.ts +0 -1
- package/dist/lib/polygon-geometry.d.ts.map +1 -1
- package/dist/lib/polygon-geometry.js +0 -18
- package/dist/lib/selection-proxy.d.ts +4 -0
- package/dist/lib/selection-proxy.d.ts.map +1 -0
- package/dist/lib/selection-proxy.js +12 -0
- package/dist/lib/slab-polygon.d.ts +31 -2
- package/dist/lib/slab-polygon.d.ts.map +1 -1
- package/dist/lib/slab-polygon.js +557 -31
- package/dist/lib/slots.d.ts +14 -0
- package/dist/lib/slots.d.ts.map +1 -0
- package/dist/lib/slots.js +26 -0
- package/dist/lib/space-detection.d.ts +40 -6
- package/dist/lib/space-detection.d.ts.map +1 -1
- package/dist/lib/space-detection.js +574 -192
- package/dist/lib/terrain-brush.d.ts +163 -0
- package/dist/lib/terrain-brush.d.ts.map +1 -0
- package/dist/lib/terrain-brush.js +359 -0
- package/dist/lib/terrain-codec.d.ts +51 -0
- package/dist/lib/terrain-codec.d.ts.map +1 -0
- package/dist/lib/terrain-codec.js +167 -0
- package/dist/lib/terrain-field.d.ts +150 -0
- package/dist/lib/terrain-field.d.ts.map +1 -0
- package/dist/lib/terrain-field.js +248 -0
- package/dist/lib/terrain-raycast.d.ts +44 -0
- package/dist/lib/terrain-raycast.d.ts.map +1 -0
- package/dist/lib/terrain-raycast.js +188 -0
- package/dist/lib/terrain-source.d.ts +60 -0
- package/dist/lib/terrain-source.d.ts.map +1 -0
- package/dist/lib/terrain-source.js +90 -0
- package/dist/lib/terrain-support.d.ts +60 -0
- package/dist/lib/terrain-support.d.ts.map +1 -0
- package/dist/lib/terrain-support.js +150 -0
- package/dist/lib/wall-distance.d.ts +60 -0
- package/dist/lib/wall-distance.d.ts.map +1 -0
- package/dist/lib/wall-distance.js +85 -0
- package/dist/lib/zone-quantities.d.ts +21 -0
- package/dist/lib/zone-quantities.d.ts.map +1 -0
- package/dist/lib/zone-quantities.js +428 -0
- package/dist/material-library.d.ts +28 -1
- package/dist/material-library.d.ts.map +1 -1
- package/dist/material-library.js +2233 -441
- package/dist/registry/handles.d.ts +91 -3
- package/dist/registry/handles.d.ts.map +1 -1
- package/dist/registry/index.d.ts +3 -3
- package/dist/registry/index.d.ts.map +1 -1
- package/dist/registry/index.js +1 -1
- package/dist/registry/registry.d.ts +46 -3
- package/dist/registry/registry.d.ts.map +1 -1
- package/dist/registry/registry.js +82 -1
- package/dist/registry/subtree.d.ts.map +1 -1
- package/dist/registry/subtree.js +8 -1
- package/dist/registry/types.d.ts +781 -39
- package/dist/registry/types.d.ts.map +1 -1
- package/dist/schema/index.d.ts +27 -8
- package/dist/schema/index.d.ts.map +1 -1
- package/dist/schema/index.js +23 -6
- package/dist/schema/material.d.ts +3 -2
- package/dist/schema/material.d.ts.map +1 -1
- package/dist/schema/material.js +7 -5
- package/dist/schema/nodes/box-vent.d.ts +2 -2
- package/dist/schema/nodes/cabinet.d.ts +536 -0
- package/dist/schema/nodes/cabinet.d.ts.map +1 -0
- package/dist/schema/nodes/cabinet.js +139 -0
- package/dist/schema/nodes/ceiling.d.ts +4 -3
- package/dist/schema/nodes/ceiling.d.ts.map +1 -1
- package/dist/schema/nodes/ceiling.js +11 -1
- package/dist/schema/nodes/chimney.d.ts +4 -4
- package/dist/schema/nodes/column.d.ts +4 -2
- package/dist/schema/nodes/column.d.ts.map +1 -1
- package/dist/schema/nodes/column.js +5 -0
- package/dist/schema/nodes/construction-dimension.d.ts +195 -0
- package/dist/schema/nodes/construction-dimension.d.ts.map +1 -0
- package/dist/schema/nodes/construction-dimension.js +151 -0
- package/dist/schema/nodes/cupola.d.ts +2 -2
- package/dist/schema/nodes/door.d.ts +42 -5
- package/dist/schema/nodes/door.d.ts.map +1 -1
- package/dist/schema/nodes/door.js +32 -0
- package/dist/schema/nodes/dormer.d.ts +8 -8
- package/dist/schema/nodes/dormer.js +1 -1
- package/dist/schema/nodes/downspout.d.ts +2 -2
- package/dist/schema/nodes/duct-fitting.d.ts +91 -0
- package/dist/schema/nodes/duct-fitting.d.ts.map +1 -0
- package/dist/schema/nodes/duct-fitting.js +92 -0
- package/dist/schema/nodes/duct-segment.d.ts +61 -0
- package/dist/schema/nodes/duct-segment.d.ts.map +1 -0
- package/dist/schema/nodes/duct-segment.js +73 -0
- package/dist/schema/nodes/duct-terminal.d.ts +58 -0
- package/dist/schema/nodes/duct-terminal.d.ts.map +1 -0
- package/dist/schema/nodes/duct-terminal.js +53 -0
- package/dist/schema/nodes/elevator.d.ts +3 -2
- package/dist/schema/nodes/elevator.d.ts.map +1 -1
- package/dist/schema/nodes/elevator.js +3 -0
- package/dist/schema/nodes/eyebrow-vent.d.ts +2 -2
- package/dist/schema/nodes/fence.d.ts +20 -2
- package/dist/schema/nodes/fence.d.ts.map +1 -1
- package/dist/schema/nodes/fence.js +33 -2
- package/dist/schema/nodes/gutter.d.ts +2 -2
- package/dist/schema/nodes/hvac-equipment.d.ts +64 -0
- package/dist/schema/nodes/hvac-equipment.d.ts.map +1 -0
- package/dist/schema/nodes/hvac-equipment.js +57 -0
- package/dist/schema/nodes/item.d.ts +9 -0
- package/dist/schema/nodes/item.d.ts.map +1 -1
- package/dist/schema/nodes/item.js +24 -0
- package/dist/schema/nodes/level.d.ts +2 -1
- package/dist/schema/nodes/level.d.ts.map +1 -1
- package/dist/schema/nodes/level.js +12 -31
- package/dist/schema/nodes/lineset.d.ts +42 -0
- package/dist/schema/nodes/lineset.d.ts.map +1 -0
- package/dist/schema/nodes/lineset.js +38 -0
- package/dist/schema/nodes/liquid-line.d.ts +34 -0
- package/dist/schema/nodes/liquid-line.d.ts.map +1 -0
- package/dist/schema/nodes/liquid-line.js +24 -0
- package/dist/schema/nodes/measurement.d.ts +306 -0
- package/dist/schema/nodes/measurement.d.ts.map +1 -0
- package/dist/schema/nodes/measurement.js +87 -0
- package/dist/schema/nodes/pipe-fitting.d.ts +56 -0
- package/dist/schema/nodes/pipe-fitting.d.ts.map +1 -0
- package/dist/schema/nodes/pipe-fitting.js +45 -0
- package/dist/schema/nodes/pipe-segment.d.ts +48 -0
- package/dist/schema/nodes/pipe-segment.d.ts.map +1 -0
- package/dist/schema/nodes/pipe-segment.js +36 -0
- package/dist/schema/nodes/pipe-trap.d.ts +43 -0
- package/dist/schema/nodes/pipe-trap.d.ts.map +1 -0
- package/dist/schema/nodes/pipe-trap.js +36 -0
- package/dist/schema/nodes/ridge-vent.d.ts +18 -3
- package/dist/schema/nodes/ridge-vent.d.ts.map +1 -1
- package/dist/schema/nodes/ridge-vent.js +221 -3
- package/dist/schema/nodes/roof-segment-shape.d.ts +90 -0
- package/dist/schema/nodes/roof-segment-shape.d.ts.map +1 -0
- package/dist/schema/nodes/roof-segment-shape.js +318 -0
- package/dist/schema/nodes/roof-segment-walls.d.ts +101 -0
- package/dist/schema/nodes/roof-segment-walls.d.ts.map +1 -0
- package/dist/schema/nodes/roof-segment-walls.js +330 -0
- package/dist/schema/nodes/roof-segment.d.ts +84 -8
- package/dist/schema/nodes/roof-segment.d.ts.map +1 -1
- package/dist/schema/nodes/roof-segment.js +290 -5
- package/dist/schema/nodes/roof.d.ts +8 -8
- package/dist/schema/nodes/shelf.d.ts +4 -2
- package/dist/schema/nodes/shelf.d.ts.map +1 -1
- package/dist/schema/nodes/shelf.js +8 -0
- package/dist/schema/nodes/site.d.ts +9 -0
- package/dist/schema/nodes/site.d.ts.map +1 -1
- package/dist/schema/nodes/site.js +8 -6
- package/dist/schema/nodes/skylight.d.ts +10 -10
- package/dist/schema/nodes/slab.d.ts +8 -2
- package/dist/schema/nodes/slab.d.ts.map +1 -1
- package/dist/schema/nodes/slab.js +18 -2
- package/dist/schema/nodes/solar-panel.d.ts +4 -4
- package/dist/schema/nodes/spawn.d.ts +1 -0
- package/dist/schema/nodes/spawn.d.ts.map +1 -1
- package/dist/schema/nodes/spawn.js +2 -0
- package/dist/schema/nodes/stair-segment.d.ts +4 -4
- package/dist/schema/nodes/stair.d.ts +16 -13
- package/dist/schema/nodes/stair.d.ts.map +1 -1
- package/dist/schema/nodes/stair.js +11 -1
- package/dist/schema/nodes/structural-grid.d.ts +27 -0
- package/dist/schema/nodes/structural-grid.d.ts.map +1 -0
- package/dist/schema/nodes/structural-grid.js +17 -0
- package/dist/schema/nodes/turbine-vent.d.ts +2 -2
- package/dist/schema/nodes/wall.d.ts +248 -6
- package/dist/schema/nodes/wall.d.ts.map +1 -1
- package/dist/schema/nodes/wall.js +266 -0
- package/dist/schema/nodes/window.d.ts +40 -3
- package/dist/schema/nodes/window.d.ts.map +1 -1
- package/dist/schema/nodes/window.js +30 -0
- package/dist/schema/nodes/zone.d.ts +22 -0
- package/dist/schema/nodes/zone.d.ts.map +1 -1
- package/dist/schema/nodes/zone.js +21 -0
- package/dist/schema/scene-material.d.ts +41 -0
- package/dist/schema/scene-material.d.ts.map +1 -0
- package/dist/schema/scene-material.js +9 -0
- package/dist/schema/terrain.d.ts +28 -0
- package/dist/schema/terrain.d.ts.map +1 -0
- package/dist/schema/terrain.js +30 -0
- package/dist/schema/types.d.ts +1300 -97
- package/dist/schema/types.d.ts.map +1 -1
- package/dist/schema/types.js +27 -0
- package/dist/services/__fixtures__/wall-plane-top-boundary-repro.d.ts +80 -0
- package/dist/services/__fixtures__/wall-plane-top-boundary-repro.d.ts.map +1 -0
- package/dist/services/__fixtures__/wall-plane-top-boundary-repro.js +89 -0
- package/dist/services/alignment-anchors.d.ts.map +1 -1
- package/dist/services/alignment-anchors.js +30 -1
- package/dist/services/alignment.d.ts +5 -0
- package/dist/services/alignment.d.ts.map +1 -1
- package/dist/services/alignment.js +2 -0
- package/dist/services/hosting.d.ts +8 -0
- package/dist/services/hosting.d.ts.map +1 -1
- package/dist/services/hosting.js +13 -4
- package/dist/services/index.d.ts +9 -2
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +9 -2
- package/dist/services/level-height.d.ts +27 -0
- package/dist/services/level-height.d.ts.map +1 -0
- package/dist/services/level-height.js +94 -0
- package/dist/services/opening-guides.d.ts +141 -0
- package/dist/services/opening-guides.d.ts.map +1 -0
- package/dist/services/opening-guides.js +267 -0
- package/dist/services/port-connectivity.d.ts +115 -0
- package/dist/services/port-connectivity.d.ts.map +1 -0
- package/dist/services/port-connectivity.js +300 -0
- package/dist/services/riser-diagram.d.ts +40 -0
- package/dist/services/riser-diagram.d.ts.map +1 -0
- package/dist/services/riser-diagram.js +110 -0
- package/dist/services/snap.d.ts +9 -1
- package/dist/services/snap.d.ts.map +1 -1
- package/dist/services/snap.js +21 -1
- package/dist/services/storey.d.ts +103 -0
- package/dist/services/storey.d.ts.map +1 -0
- package/dist/services/storey.js +296 -0
- package/dist/services/system-graph.d.ts +30 -0
- package/dist/services/system-graph.d.ts.map +1 -0
- package/dist/services/system-graph.js +164 -0
- package/dist/services/validate-dwv.d.ts +32 -0
- package/dist/services/validate-dwv.d.ts.map +1 -0
- package/dist/services/validate-dwv.js +118 -0
- package/dist/store/actions/node-actions.d.ts.map +1 -1
- package/dist/store/actions/node-actions.js +141 -4
- package/dist/store/history-control.d.ts +31 -0
- package/dist/store/history-control.d.ts.map +1 -1
- package/dist/store/history-control.js +130 -0
- package/dist/store/use-live-terrain.d.ts +65 -0
- package/dist/store/use-live-terrain.d.ts.map +1 -0
- package/dist/store/use-live-terrain.js +31 -0
- package/dist/store/use-live-transforms.d.ts +8 -0
- package/dist/store/use-live-transforms.d.ts.map +1 -1
- package/dist/store/use-scene.d.ts +47 -3
- package/dist/store/use-scene.d.ts.map +1 -1
- package/dist/store/use-scene.js +992 -55
- package/dist/systems/elevator/elevator-opening-system.d.ts +1 -0
- package/dist/systems/elevator/elevator-opening-system.d.ts.map +1 -1
- package/dist/systems/elevator/elevator-opening-system.js +27 -21
- package/dist/systems/elevator/elevator-service.d.ts +0 -2
- package/dist/systems/elevator/elevator-service.d.ts.map +1 -1
- package/dist/systems/elevator/elevator-service.js +2 -24
- package/dist/systems/fence/fence-centerline.d.ts +12 -0
- package/dist/systems/fence/fence-centerline.d.ts.map +1 -0
- package/dist/systems/fence/fence-centerline.js +37 -0
- package/dist/systems/fence/fence-spline.d.ts +39 -0
- package/dist/systems/fence/fence-spline.d.ts.map +1 -0
- package/dist/systems/fence/fence-spline.js +196 -0
- package/dist/systems/slab/slab-placement.d.ts +11 -0
- package/dist/systems/slab/slab-placement.d.ts.map +1 -0
- package/dist/systems/slab/slab-placement.js +14 -0
- package/dist/systems/slab/slab-support.d.ts +137 -0
- package/dist/systems/slab/slab-support.d.ts.map +1 -0
- package/dist/systems/slab/slab-support.js +557 -0
- package/dist/systems/stair/stair-footprint.d.ts.map +1 -1
- package/dist/systems/stair/stair-footprint.js +21 -11
- package/dist/systems/stair/stair-opening-preview.d.ts +1300 -505
- package/dist/systems/stair/stair-opening-preview.d.ts.map +1 -1
- package/dist/systems/stair/stair-opening-sync.d.ts.map +1 -1
- package/dist/systems/stair/stair-opening-sync.js +19 -33
- package/dist/systems/stair/stair-opening-system.d.ts.map +1 -1
- package/dist/systems/stair/stair-opening-system.js +32 -4
- package/dist/systems/stair/stair-rise.d.ts +22 -0
- package/dist/systems/stair/stair-rise.d.ts.map +1 -0
- package/dist/systems/stair/stair-rise.js +79 -0
- 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 +1 -1
- package/dist/systems/wall/wall-mitering.d.ts.map +1 -1
- package/dist/systems/wall/wall-mitering.js +44 -8
- package/dist/systems/wall/wall-top.d.ts +40 -0
- package/dist/systems/wall/wall-top.d.ts.map +1 -0
- package/dist/systems/wall/wall-top.js +46 -0
- package/dist/utils/clone-scene-graph.d.ts +1 -0
- package/dist/utils/clone-scene-graph.d.ts.map +1 -1
- package/dist/utils/clone-scene-graph.js +56 -5
- package/dist/utils/heal-scene-graph.d.ts +18 -0
- package/dist/utils/heal-scene-graph.d.ts.map +1 -0
- package/dist/utils/heal-scene-graph.js +106 -0
- package/dist/validation/validate-build-json.d.ts +3 -0
- package/dist/validation/validate-build-json.d.ts.map +1 -1
- package/dist/validation/validate-build-json.js +90 -5
- package/package.json +4 -4
- package/dist/hooks/spatial-grid/floor-placed-elevation.test.d.ts +0 -2
- package/dist/hooks/spatial-grid/floor-placed-elevation.test.d.ts.map +0 -1
- package/dist/hooks/spatial-grid/floor-placed-elevation.test.js +0 -273
- package/dist/lib/space-detection-pause.test.d.ts +0 -2
- package/dist/lib/space-detection-pause.test.d.ts.map +0 -1
- package/dist/lib/space-detection-pause.test.js +0 -42
- package/dist/lib/space-detection.test.d.ts +0 -2
- package/dist/lib/space-detection.test.d.ts.map +0 -1
- package/dist/lib/space-detection.test.js +0 -77
- package/dist/registry/registry.test.d.ts +0 -2
- package/dist/registry/registry.test.d.ts.map +0 -1
- package/dist/registry/registry.test.js +0 -183
- package/dist/registry/relations-resolver.test.d.ts +0 -2
- package/dist/registry/relations-resolver.test.d.ts.map +0 -1
- package/dist/registry/relations-resolver.test.js +0 -183
- package/dist/registry/scene-api.test.d.ts +0 -2
- package/dist/registry/scene-api.test.d.ts.map +0 -1
- package/dist/registry/scene-api.test.js +0 -183
- package/dist/registry/subtree.test.d.ts +0 -2
- package/dist/registry/subtree.test.d.ts.map +0 -1
- package/dist/registry/subtree.test.js +0 -133
- package/dist/schema/asset-url.test.d.ts +0 -2
- package/dist/schema/asset-url.test.d.ts.map +0 -1
- package/dist/schema/asset-url.test.js +0 -134
- package/dist/services/alignment-anchors.test.d.ts +0 -2
- package/dist/services/alignment-anchors.test.d.ts.map +0 -1
- package/dist/services/alignment-anchors.test.js +0 -383
- package/dist/services/alignment.test.d.ts +0 -2
- package/dist/services/alignment.test.d.ts.map +0 -1
- package/dist/services/alignment.test.js +0 -92
- package/dist/services/drag-session.test.d.ts +0 -2
- package/dist/services/drag-session.test.d.ts.map +0 -1
- package/dist/services/drag-session.test.js +0 -219
- package/dist/services/hosting.test.d.ts +0 -2
- package/dist/services/hosting.test.d.ts.map +0 -1
- package/dist/services/hosting.test.js +0 -199
- package/dist/services/movement.test.d.ts +0 -2
- package/dist/services/movement.test.d.ts.map +0 -1
- package/dist/services/movement.test.js +0 -133
- package/dist/services/single-undo-dance.test.d.ts +0 -2
- package/dist/services/single-undo-dance.test.d.ts.map +0 -1
- package/dist/services/single-undo-dance.test.js +0 -210
- package/dist/services/snap.test.d.ts +0 -2
- package/dist/services/snap.test.d.ts.map +0 -1
- package/dist/services/snap.test.js +0 -95
- package/dist/store/actions/node-mutation-sanitize.test.d.ts +0 -2
- package/dist/store/actions/node-mutation-sanitize.test.d.ts.map +0 -1
- package/dist/store/actions/node-mutation-sanitize.test.js +0 -147
- package/dist/store/actions/reparent.test.d.ts +0 -2
- package/dist/store/actions/reparent.test.d.ts.map +0 -1
- package/dist/store/actions/reparent.test.js +0 -212
- package/dist/store/use-scene-elevator-migration.test.d.ts +0 -2
- package/dist/store/use-scene-elevator-migration.test.d.ts.map +0 -1
- package/dist/store/use-scene-elevator-migration.test.js +0 -109
- package/dist/systems/elevator/elevator-opening-sync.test.d.ts +0 -2
- package/dist/systems/elevator/elevator-opening-sync.test.d.ts.map +0 -1
- package/dist/systems/elevator/elevator-opening-sync.test.js +0 -146
- package/dist/systems/elevator/elevator-runtime.test.d.ts +0 -2
- package/dist/systems/elevator/elevator-runtime.test.d.ts.map +0 -1
- package/dist/systems/elevator/elevator-runtime.test.js +0 -64
- package/dist/systems/stair/stair-opening-preview.test.d.ts +0 -2
- package/dist/systems/stair/stair-opening-preview.test.d.ts.map +0 -1
- package/dist/systems/stair/stair-opening-preview.test.js +0 -80
- package/dist/systems/stair/stair-opening-sync.test.d.ts +0 -2
- package/dist/systems/stair/stair-opening-sync.test.d.ts.map +0 -1
- package/dist/systems/stair/stair-opening-sync.test.js +0 -446
- package/dist/utils/clone-scene-graph.test.d.ts +0 -2
- package/dist/utils/clone-scene-graph.test.d.ts.map +0 -1
- package/dist/utils/clone-scene-graph.test.js +0 -59
|
@@ -12,6 +12,18 @@ export declare const WindowType: z.ZodEnum<{
|
|
|
12
12
|
louvered: "louvered";
|
|
13
13
|
}>;
|
|
14
14
|
export type WindowType = z.infer<typeof WindowType>;
|
|
15
|
+
export declare const WindowConstructionType: z.ZodEnum<{
|
|
16
|
+
framed: "framed";
|
|
17
|
+
masonry: "masonry";
|
|
18
|
+
}>;
|
|
19
|
+
export declare const WindowDimensionReference: z.ZodEnum<{
|
|
20
|
+
nominal: "nominal";
|
|
21
|
+
"rough-opening": "rough-opening";
|
|
22
|
+
"masonry-opening": "masonry-opening";
|
|
23
|
+
"finish-opening": "finish-opening";
|
|
24
|
+
}>;
|
|
25
|
+
export type WindowConstructionType = z.infer<typeof WindowConstructionType>;
|
|
26
|
+
export type WindowDimensionReference = z.infer<typeof WindowDimensionReference>;
|
|
15
27
|
export declare const WindowNode: z.ZodObject<{
|
|
16
28
|
object: z.ZodDefault<z.ZodLiteral<"node">>;
|
|
17
29
|
name: z.ZodOptional<z.ZodString>;
|
|
@@ -32,7 +44,7 @@ export declare const WindowNode: z.ZodObject<{
|
|
|
32
44
|
type: z.ZodDefault<z.ZodLiteral<"window">>;
|
|
33
45
|
material: z.ZodOptional<z.ZodObject<{
|
|
34
46
|
id: z.ZodOptional<z.ZodString>;
|
|
35
|
-
preset: z.ZodOptional<z.ZodEnum<{
|
|
47
|
+
preset: z.ZodOptional<z.ZodCatch<z.ZodEnum<{
|
|
36
48
|
custom: "custom";
|
|
37
49
|
white: "white";
|
|
38
50
|
brick: "brick";
|
|
@@ -43,7 +55,7 @@ export declare const WindowNode: z.ZodObject<{
|
|
|
43
55
|
plaster: "plaster";
|
|
44
56
|
tile: "tile";
|
|
45
57
|
marble: "marble";
|
|
46
|
-
}
|
|
58
|
+
}>>>;
|
|
47
59
|
properties: z.ZodOptional<z.ZodObject<{
|
|
48
60
|
color: z.ZodDefault<z.ZodString>;
|
|
49
61
|
roughness: z.ZodDefault<z.ZodNumber>;
|
|
@@ -62,6 +74,7 @@ export declare const WindowNode: z.ZodObject<{
|
|
|
62
74
|
scale: z.ZodOptional<z.ZodNumber>;
|
|
63
75
|
}, z.core.$strip>>;
|
|
64
76
|
}, z.core.$strip>>;
|
|
77
|
+
slots: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
65
78
|
position: z.ZodDefault<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
|
|
66
79
|
rotation: z.ZodDefault<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
|
|
67
80
|
side: z.ZodOptional<z.ZodEnum<{
|
|
@@ -69,8 +82,32 @@ export declare const WindowNode: z.ZodObject<{
|
|
|
69
82
|
back: "back";
|
|
70
83
|
}>>;
|
|
71
84
|
wallId: z.ZodOptional<z.ZodString>;
|
|
85
|
+
roofSegmentId: z.ZodOptional<z.ZodString>;
|
|
86
|
+
roofFace: z.ZodOptional<z.ZodEnum<{
|
|
87
|
+
front: "front";
|
|
88
|
+
back: "back";
|
|
89
|
+
right: "right";
|
|
90
|
+
left: "left";
|
|
91
|
+
}>>;
|
|
72
92
|
width: z.ZodDefault<z.ZodNumber>;
|
|
73
93
|
height: z.ZodDefault<z.ZodNumber>;
|
|
94
|
+
mark: z.ZodOptional<z.ZodString>;
|
|
95
|
+
constructionType: z.ZodDefault<z.ZodEnum<{
|
|
96
|
+
framed: "framed";
|
|
97
|
+
masonry: "masonry";
|
|
98
|
+
}>>;
|
|
99
|
+
dimensionReference: z.ZodDefault<z.ZodEnum<{
|
|
100
|
+
nominal: "nominal";
|
|
101
|
+
"rough-opening": "rough-opening";
|
|
102
|
+
"masonry-opening": "masonry-opening";
|
|
103
|
+
"finish-opening": "finish-opening";
|
|
104
|
+
}>>;
|
|
105
|
+
roughOpeningWidth: z.ZodOptional<z.ZodNumber>;
|
|
106
|
+
roughOpeningHeight: z.ZodOptional<z.ZodNumber>;
|
|
107
|
+
masonryOpeningWidth: z.ZodOptional<z.ZodNumber>;
|
|
108
|
+
masonryOpeningHeight: z.ZodOptional<z.ZodNumber>;
|
|
109
|
+
finishOpeningWidth: z.ZodOptional<z.ZodNumber>;
|
|
110
|
+
finishOpeningHeight: z.ZodOptional<z.ZodNumber>;
|
|
74
111
|
openingKind: z.ZodDefault<z.ZodEnum<{
|
|
75
112
|
window: "window";
|
|
76
113
|
opening: "opening";
|
|
@@ -97,8 +134,8 @@ export declare const WindowNode: z.ZodObject<{
|
|
|
97
134
|
single: "single";
|
|
98
135
|
}>>;
|
|
99
136
|
hingesSide: z.ZodDefault<z.ZodEnum<{
|
|
100
|
-
left: "left";
|
|
101
137
|
right: "right";
|
|
138
|
+
left: "left";
|
|
102
139
|
}>>;
|
|
103
140
|
openingShape: z.ZodDefault<z.ZodEnum<{
|
|
104
141
|
rectangle: "rectangle";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"window.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/window.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,eAAO,MAAM,UAAU;;;;;;;;;;;EAWrB,CAAA;AACF,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAA;AAEnD,eAAO,MAAM,UAAU
|
|
1
|
+
{"version":3,"file":"window.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/window.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,eAAO,MAAM,UAAU;;;;;;;;;;;EAWrB,CAAA;AACF,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAA;AAEnD,eAAO,MAAM,sBAAsB;;;EAAgC,CAAA;AACnE,eAAO,MAAM,wBAAwB;;;;;EAKnC,CAAA;AACF,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAA;AAC3E,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAA;AAE/E,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAmFrB,CAAA;AAEF,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAA"}
|
|
@@ -14,18 +14,48 @@ export const WindowType = z.enum([
|
|
|
14
14
|
'bow',
|
|
15
15
|
'louvered',
|
|
16
16
|
]);
|
|
17
|
+
export const WindowConstructionType = z.enum(['framed', 'masonry']);
|
|
18
|
+
export const WindowDimensionReference = z.enum([
|
|
19
|
+
'nominal',
|
|
20
|
+
'rough-opening',
|
|
21
|
+
'masonry-opening',
|
|
22
|
+
'finish-opening',
|
|
23
|
+
]);
|
|
17
24
|
export const WindowNode = BaseNode.extend({
|
|
18
25
|
id: objectId('window'),
|
|
19
26
|
type: nodeType('window'),
|
|
20
27
|
material: MaterialSchema.optional(),
|
|
28
|
+
// Per-slot material overrides on the unified slot model. Keys: `frame`,
|
|
29
|
+
// `glass`. Value = a `MaterialRef` (`library:<id>` / `scene:<id>`). Absent =
|
|
30
|
+
// the frame/glass default. Mirrors `ShelfNode.slots`.
|
|
31
|
+
slots: z.record(z.string(), z.string()).optional(),
|
|
21
32
|
position: z.tuple([z.number(), z.number(), z.number()]).default([0, 0, 0]),
|
|
22
33
|
rotation: z.tuple([z.number(), z.number(), z.number()]).default([0, 0, 0]),
|
|
23
34
|
side: z.enum(['front', 'back']).optional(),
|
|
24
35
|
// Wall reference
|
|
25
36
|
wallId: z.string().optional(),
|
|
37
|
+
// Alternative host: a roof-segment's generated wall face (base wall
|
|
38
|
+
// under the roof or a coplanar gable end). When set, `position` is
|
|
39
|
+
// FACE-LOCAL — [u along the face, v height, z from the wall mid-plane]
|
|
40
|
+
// — exactly the wall-child convention; the renderer mounts the node
|
|
41
|
+
// inside the face frame (`getRoofWallFaceFrame`), which is what makes
|
|
42
|
+
// hosted children track segment resizes live.
|
|
43
|
+
roofSegmentId: z.string().optional(),
|
|
44
|
+
roofFace: z.enum(['front', 'back', 'right', 'left']).optional(),
|
|
26
45
|
// Overall dimensions
|
|
27
46
|
width: z.number().default(1.5),
|
|
28
47
|
height: z.number().default(1.5),
|
|
48
|
+
// Construction-document identity and optional manufacturer rough opening.
|
|
49
|
+
// Legacy scenes omit these fields and continue to parse unchanged.
|
|
50
|
+
mark: z.string().trim().max(16).optional(),
|
|
51
|
+
constructionType: WindowConstructionType.default('framed'),
|
|
52
|
+
dimensionReference: WindowDimensionReference.default('nominal'),
|
|
53
|
+
roughOpeningWidth: z.number().positive().optional(),
|
|
54
|
+
roughOpeningHeight: z.number().positive().optional(),
|
|
55
|
+
masonryOpeningWidth: z.number().positive().optional(),
|
|
56
|
+
masonryOpeningHeight: z.number().positive().optional(),
|
|
57
|
+
finishOpeningWidth: z.number().positive().optional(),
|
|
58
|
+
finishOpeningHeight: z.number().positive().optional(),
|
|
29
59
|
// Opening mode - when set to "opening", the window is only a shaped cutout
|
|
30
60
|
openingKind: z.enum(['window', 'opening']).default('window'),
|
|
31
61
|
// Window family
|
|
@@ -17,6 +17,28 @@ export declare const ZoneNode: z.ZodObject<{
|
|
|
17
17
|
type: z.ZodDefault<z.ZodLiteral<"zone">>;
|
|
18
18
|
name: z.ZodString;
|
|
19
19
|
polygon: z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>;
|
|
20
|
+
autoFromWalls: z.ZodDefault<z.ZodBoolean>;
|
|
21
|
+
boundaryWallIds: z.ZodDefault<z.ZodArray<z.ZodDefault<z.ZodTemplateLiteral<`wall_${string}`>>>>;
|
|
22
|
+
spaceRole: z.ZodDefault<z.ZodEnum<{
|
|
23
|
+
generic: "generic";
|
|
24
|
+
room: "room";
|
|
25
|
+
}>>;
|
|
26
|
+
roomNumber: z.ZodDefault<z.ZodString>;
|
|
27
|
+
enclosureStatus: z.ZodDefault<z.ZodEnum<{
|
|
28
|
+
auto: "auto";
|
|
29
|
+
enclosed: "enclosed";
|
|
30
|
+
open: "open";
|
|
31
|
+
}>>;
|
|
32
|
+
floorFinish: z.ZodDefault<z.ZodString>;
|
|
33
|
+
wallFinish: z.ZodDefault<z.ZodString>;
|
|
34
|
+
ceilingFinish: z.ZodDefault<z.ZodString>;
|
|
35
|
+
ceilingHeight: z.ZodDefault<z.ZodNumber>;
|
|
36
|
+
occupancy: z.ZodDefault<z.ZodString>;
|
|
37
|
+
clearDimensionPolicy: z.ZodDefault<z.ZodEnum<{
|
|
38
|
+
none: "none";
|
|
39
|
+
"inside-faces": "inside-faces";
|
|
40
|
+
"finish-faces": "finish-faces";
|
|
41
|
+
}>>;
|
|
20
42
|
color: z.ZodDefault<z.ZodString>;
|
|
21
43
|
metadata: z.ZodDefault<z.ZodOptional<z.ZodJSONSchema>>;
|
|
22
44
|
}, z.core.$strip>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zone.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/zone.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,eAAO,MAAM,QAAQ
|
|
1
|
+
{"version":3,"file":"zone.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/zone.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAyCpB,CAAA;AAED,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,QAAQ,CAAC,CAAA"}
|
|
@@ -7,6 +7,21 @@ export const ZoneNode = BaseNode.extend({
|
|
|
7
7
|
name: z.string(),
|
|
8
8
|
// Polygon boundary - array of [x, z] coordinates defining the zone
|
|
9
9
|
polygon: z.array(z.tuple([z.number(), z.number()])),
|
|
10
|
+
// Procedural room zones retain the walls that prove their enclosure. The
|
|
11
|
+
// stored polygon remains a fallback for missing or temporarily open walls.
|
|
12
|
+
autoFromWalls: z.boolean().default(false),
|
|
13
|
+
boundaryWallIds: z.array(objectId('wall')).default([]),
|
|
14
|
+
// Generic zones remain available for sites and analysis. Architectural
|
|
15
|
+
// room documentation is opt-in so legacy zone behavior is unchanged.
|
|
16
|
+
spaceRole: z.enum(['generic', 'room']).default('generic'),
|
|
17
|
+
roomNumber: z.string().trim().max(32).default(''),
|
|
18
|
+
enclosureStatus: z.enum(['auto', 'enclosed', 'open']).default('auto'),
|
|
19
|
+
floorFinish: z.string().trim().max(120).default(''),
|
|
20
|
+
wallFinish: z.string().trim().max(120).default(''),
|
|
21
|
+
ceilingFinish: z.string().trim().max(120).default(''),
|
|
22
|
+
ceilingHeight: z.number().min(0.1).default(2.7),
|
|
23
|
+
occupancy: z.string().trim().max(80).default(''),
|
|
24
|
+
clearDimensionPolicy: z.enum(['none', 'inside-faces', 'finish-faces']).default('none'),
|
|
10
25
|
// Visual styling
|
|
11
26
|
color: z.string().default('#3b82f6'), // Default blue
|
|
12
27
|
metadata: z.json().optional().default({}),
|
|
@@ -17,6 +32,12 @@ export const ZoneNode = BaseNode.extend({
|
|
|
17
32
|
- levelId: level this zone is attached to
|
|
18
33
|
- name: zone name
|
|
19
34
|
- polygon: array of [x, z] points defining the zone boundary
|
|
35
|
+
- autoFromWalls: whether the boundary follows an enclosed wall loop
|
|
36
|
+
- boundaryWallIds: wall ids that prove the procedural enclosure
|
|
37
|
+
- spaceRole: generic site/analysis zone or architectural room
|
|
38
|
+
- roomNumber/finishes/ceilingHeight/occupancy: construction-document room metadata
|
|
39
|
+
- enclosureStatus: auto-detected, explicitly enclosed, or open
|
|
40
|
+
- clearDimensionPolicy: optional room clear-dimension datum preference
|
|
20
41
|
- color: hex color for visual styling
|
|
21
42
|
- metadata: zone metadata (optional)
|
|
22
43
|
`);
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export type SceneMaterialId = `mat_${string}`;
|
|
3
|
+
export declare const generateSceneMaterialId: () => SceneMaterialId;
|
|
4
|
+
export declare const SceneMaterial: z.ZodObject<{
|
|
5
|
+
id: z.ZodString;
|
|
6
|
+
name: z.ZodString;
|
|
7
|
+
material: z.ZodObject<{
|
|
8
|
+
id: z.ZodOptional<z.ZodString>;
|
|
9
|
+
preset: z.ZodOptional<z.ZodCatch<z.ZodEnum<{
|
|
10
|
+
custom: "custom";
|
|
11
|
+
white: "white";
|
|
12
|
+
brick: "brick";
|
|
13
|
+
concrete: "concrete";
|
|
14
|
+
wood: "wood";
|
|
15
|
+
glass: "glass";
|
|
16
|
+
metal: "metal";
|
|
17
|
+
plaster: "plaster";
|
|
18
|
+
tile: "tile";
|
|
19
|
+
marble: "marble";
|
|
20
|
+
}>>>;
|
|
21
|
+
properties: z.ZodOptional<z.ZodObject<{
|
|
22
|
+
color: z.ZodDefault<z.ZodString>;
|
|
23
|
+
roughness: z.ZodDefault<z.ZodNumber>;
|
|
24
|
+
metalness: z.ZodDefault<z.ZodNumber>;
|
|
25
|
+
opacity: z.ZodDefault<z.ZodNumber>;
|
|
26
|
+
transparent: z.ZodDefault<z.ZodBoolean>;
|
|
27
|
+
side: z.ZodDefault<z.ZodEnum<{
|
|
28
|
+
front: "front";
|
|
29
|
+
back: "back";
|
|
30
|
+
double: "double";
|
|
31
|
+
}>>;
|
|
32
|
+
}, z.core.$strip>>;
|
|
33
|
+
texture: z.ZodOptional<z.ZodObject<{
|
|
34
|
+
url: z.ZodString;
|
|
35
|
+
repeat: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>;
|
|
36
|
+
scale: z.ZodOptional<z.ZodNumber>;
|
|
37
|
+
}, z.core.$strip>>;
|
|
38
|
+
}, z.core.$strip>;
|
|
39
|
+
}, z.core.$strip>;
|
|
40
|
+
export type SceneMaterial = z.infer<typeof SceneMaterial>;
|
|
41
|
+
//# sourceMappingURL=scene-material.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scene-material.d.ts","sourceRoot":"","sources":["../../src/schema/scene-material.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,MAAM,MAAM,eAAe,GAAG,OAAO,MAAM,EAAE,CAAA;AAC7C,eAAO,MAAM,uBAAuB,QAAO,eAAoC,CAAA;AAE/E,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAIxB,CAAA;AACF,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { generateId } from './base';
|
|
3
|
+
import { MaterialSchema } from './material';
|
|
4
|
+
export const generateSceneMaterialId = () => generateId('mat');
|
|
5
|
+
export const SceneMaterial = z.object({
|
|
6
|
+
id: z.string(),
|
|
7
|
+
name: z.string(),
|
|
8
|
+
material: MaterialSchema,
|
|
9
|
+
});
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/** Current authoring and decoding ceiling. */
|
|
3
|
+
export declare const MAX_TERRAIN_SIDE = 257;
|
|
4
|
+
/**
|
|
5
|
+
* The persisted shape of a terrain heightfield.
|
|
6
|
+
*
|
|
7
|
+
* Kept in `schema/` rather than beside the codec because this is the contract
|
|
8
|
+
* the scene graph validates on load, and `lib/terrain-codec.ts` imports the type
|
|
9
|
+
* from here so there is exactly one definition of the wire format.
|
|
10
|
+
*
|
|
11
|
+
* `heights` is base64 of little-endian Int16 — see `lib/terrain-codec.ts` for why
|
|
12
|
+
* that beats a JSON number array, and why it is not compressed. The schema is
|
|
13
|
+
* intentionally loose about the *contents* of that string: validating base64
|
|
14
|
+
* here would duplicate the decoder, and `decodeTerrainField` already returns
|
|
15
|
+
* `null` for anything it cannot read, which is the behaviour a corrupt scene
|
|
16
|
+
* needs (load flat, don't fail the project).
|
|
17
|
+
*/
|
|
18
|
+
export declare const TerrainData: z.ZodObject<{
|
|
19
|
+
type: z.ZodLiteral<"heightfield">;
|
|
20
|
+
origin: z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>;
|
|
21
|
+
spacing: z.ZodNumber;
|
|
22
|
+
cols: z.ZodNumber;
|
|
23
|
+
rows: z.ZodNumber;
|
|
24
|
+
step: z.ZodNumber;
|
|
25
|
+
heights: z.ZodString;
|
|
26
|
+
}, z.core.$strip>;
|
|
27
|
+
export type TerrainData = z.infer<typeof TerrainData>;
|
|
28
|
+
//# sourceMappingURL=terrain.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terrain.d.ts","sourceRoot":"","sources":["../../src/schema/terrain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,8CAA8C;AAC9C,eAAO,MAAM,gBAAgB,MAAM,CAAA;AAEnC;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,WAAW;;;;;;;;iBAYtB,CAAA;AAEF,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAA"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/** Current authoring and decoding ceiling. */
|
|
3
|
+
export const MAX_TERRAIN_SIDE = 257;
|
|
4
|
+
/**
|
|
5
|
+
* The persisted shape of a terrain heightfield.
|
|
6
|
+
*
|
|
7
|
+
* Kept in `schema/` rather than beside the codec because this is the contract
|
|
8
|
+
* the scene graph validates on load, and `lib/terrain-codec.ts` imports the type
|
|
9
|
+
* from here so there is exactly one definition of the wire format.
|
|
10
|
+
*
|
|
11
|
+
* `heights` is base64 of little-endian Int16 — see `lib/terrain-codec.ts` for why
|
|
12
|
+
* that beats a JSON number array, and why it is not compressed. The schema is
|
|
13
|
+
* intentionally loose about the *contents* of that string: validating base64
|
|
14
|
+
* here would duplicate the decoder, and `decodeTerrainField` already returns
|
|
15
|
+
* `null` for anything it cannot read, which is the behaviour a corrupt scene
|
|
16
|
+
* needs (load flat, don't fail the project).
|
|
17
|
+
*/
|
|
18
|
+
export const TerrainData = z.object({
|
|
19
|
+
type: z.literal('heightfield'),
|
|
20
|
+
/** World XZ of sample [0,0]. */
|
|
21
|
+
origin: z.tuple([z.number().finite(), z.number().finite()]),
|
|
22
|
+
/** Metres between adjacent samples. */
|
|
23
|
+
spacing: z.number().finite().positive(),
|
|
24
|
+
cols: z.number().int().positive().max(MAX_TERRAIN_SIDE),
|
|
25
|
+
rows: z.number().int().positive().max(MAX_TERRAIN_SIDE),
|
|
26
|
+
/** Metres per height unit — the quantization ladder. */
|
|
27
|
+
step: z.number().finite().positive(),
|
|
28
|
+
/** Base64 of `cols * rows` little-endian Int16 samples, row-major. */
|
|
29
|
+
heights: z.string(),
|
|
30
|
+
});
|