@pascal-app/core 1.0.6 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent-operations/__fixtures__/add-object-cases.d.ts +31 -0
- package/dist/agent-operations/__fixtures__/add-object-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/build-room-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/build-room-cases.js +27 -0
- package/dist/agent-operations/__fixtures__/cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/cases.js +19 -11
- package/dist/agent-operations/__fixtures__/design-brief-cases.d.ts +25 -2
- package/dist/agent-operations/__fixtures__/design-brief-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/design-brief-cases.js +509 -66
- package/dist/agent-operations/__fixtures__/dressing-scenes.d.ts +30 -0
- package/dist/agent-operations/__fixtures__/dressing-scenes.d.ts.map +1 -0
- package/dist/agent-operations/__fixtures__/dressing-scenes.js +82 -0
- package/dist/agent-operations/__fixtures__/native-materials.d.ts +411 -9
- package/dist/agent-operations/__fixtures__/native-materials.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/notation-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/notation-cases.js +14 -0
- package/dist/agent-operations/__fixtures__/roof-bearing-cases.d.ts +13804 -10600
- package/dist/agent-operations/__fixtures__/roof-bearing-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/room-cases.d.ts +1 -0
- package/dist/agent-operations/__fixtures__/room-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/room-cases.js +57 -1
- package/dist/agent-operations/__fixtures__/room-check-scenes.d.ts +51 -0
- package/dist/agent-operations/__fixtures__/room-check-scenes.d.ts.map +1 -0
- package/dist/agent-operations/__fixtures__/room-check-scenes.js +121 -0
- package/dist/agent-operations/__fixtures__/scene-check-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/scene-check-cases.js +152 -18
- package/dist/agent-operations/__fixtures__/search-assets-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/search-assets-cases.js +91 -0
- package/dist/agent-operations/__fixtures__/site-cases.d.ts +40 -1
- package/dist/agent-operations/__fixtures__/site-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/structure-cases.d.ts +3 -0
- package/dist/agent-operations/__fixtures__/structure-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/structure-cases.js +199 -18
- package/dist/agent-operations/__fixtures__/unit-cases.d.ts +6 -0
- package/dist/agent-operations/__fixtures__/unit-cases.d.ts.map +1 -0
- package/dist/agent-operations/__fixtures__/unit-cases.js +266 -0
- package/dist/agent-operations/__fixtures__/verify-scene-cases.d.ts +37 -1
- package/dist/agent-operations/__fixtures__/verify-scene-cases.d.ts.map +1 -1
- package/dist/agent-operations/add-column.d.ts.map +1 -1
- package/dist/agent-operations/add-column.js +32 -3
- package/dist/agent-operations/add-fence.d.ts.map +1 -1
- package/dist/agent-operations/add-fence.js +2 -1
- package/dist/agent-operations/add-level.d.ts.map +1 -1
- package/dist/agent-operations/add-level.js +4 -4
- package/dist/agent-operations/add-object.d.ts +32 -6
- package/dist/agent-operations/add-object.d.ts.map +1 -1
- package/dist/agent-operations/add-object.js +59 -12
- package/dist/agent-operations/add-wall.d.ts +3 -8
- package/dist/agent-operations/add-wall.d.ts.map +1 -1
- package/dist/agent-operations/add-wall.js +31 -8
- package/dist/agent-operations/apply-changes.d.ts.map +1 -1
- package/dist/agent-operations/apply-changes.js +2 -1
- package/dist/agent-operations/asset-catalog.d.ts +63 -0
- package/dist/agent-operations/asset-catalog.d.ts.map +1 -0
- package/dist/agent-operations/asset-catalog.js +182 -0
- package/dist/agent-operations/asset-views.d.ts +4 -2
- package/dist/agent-operations/asset-views.d.ts.map +1 -1
- package/dist/agent-operations/asset-views.js +1 -3
- package/dist/agent-operations/author-scene-checks.d.ts +38 -0
- package/dist/agent-operations/author-scene-checks.d.ts.map +1 -0
- package/dist/agent-operations/author-scene-checks.js +266 -0
- package/dist/agent-operations/author-scene.d.ts +54 -20
- package/dist/agent-operations/author-scene.d.ts.map +1 -1
- package/dist/agent-operations/author-scene.js +1163 -196
- package/dist/agent-operations/authored-scene-merge.d.ts.map +1 -1
- package/dist/agent-operations/authored-scene-merge.js +61 -3
- package/dist/agent-operations/batch.d.ts +1 -1
- package/dist/agent-operations/batch.d.ts.map +1 -1
- package/dist/agent-operations/batch.js +38 -39
- package/dist/agent-operations/ceiling-object-observations.d.ts.map +1 -1
- package/dist/agent-operations/ceiling-object-observations.js +5 -4
- package/dist/agent-operations/circulation-geometry.d.ts +14 -0
- package/dist/agent-operations/circulation-geometry.d.ts.map +1 -0
- package/dist/agent-operations/circulation-geometry.js +151 -0
- package/dist/agent-operations/circulation-graph.d.ts +72 -0
- package/dist/agent-operations/circulation-graph.d.ts.map +1 -0
- package/dist/agent-operations/circulation-graph.js +713 -0
- package/dist/agent-operations/circulation-non-spaces.d.ts +10 -0
- package/dist/agent-operations/circulation-non-spaces.d.ts.map +1 -0
- package/dist/agent-operations/circulation-non-spaces.js +88 -0
- package/dist/agent-operations/circulation-spaces.d.ts +5881 -0
- package/dist/agent-operations/circulation-spaces.d.ts.map +1 -0
- package/dist/agent-operations/circulation-spaces.js +368 -0
- package/dist/agent-operations/collections.d.ts.map +1 -1
- package/dist/agent-operations/collections.js +9 -7
- package/dist/agent-operations/corner-window.d.ts.map +1 -1
- package/dist/agent-operations/corner-window.js +2 -4
- package/dist/agent-operations/create-roof.d.ts.map +1 -1
- package/dist/agent-operations/create-roof.js +5 -7
- package/dist/agent-operations/create-room.d.ts +4 -1
- package/dist/agent-operations/create-room.d.ts.map +1 -1
- package/dist/agent-operations/create-room.js +7 -4
- package/dist/agent-operations/create-stair.js +2 -2
- package/dist/agent-operations/design-brief.d.ts +13 -7
- package/dist/agent-operations/design-brief.d.ts.map +1 -1
- package/dist/agent-operations/design-brief.js +172 -92
- package/dist/agent-operations/door-clearance.d.ts +68 -8
- package/dist/agent-operations/door-clearance.d.ts.map +1 -1
- package/dist/agent-operations/door-clearance.js +127 -20
- package/dist/agent-operations/dress-targets.d.ts +23 -0
- package/dist/agent-operations/dress-targets.d.ts.map +1 -0
- package/dist/agent-operations/dress-targets.js +34 -0
- package/dist/agent-operations/duplicate-node.d.ts +14 -0
- package/dist/agent-operations/duplicate-node.d.ts.map +1 -0
- package/dist/agent-operations/duplicate-node.js +173 -0
- package/dist/agent-operations/find-by-type.d.ts.map +1 -1
- package/dist/agent-operations/find-by-type.js +3 -0
- package/dist/agent-operations/furnish-room.d.ts +2 -0
- package/dist/agent-operations/furnish-room.d.ts.map +1 -1
- package/dist/agent-operations/furnish-room.js +15 -4
- package/dist/agent-operations/furniture-kind.d.ts +28 -1
- package/dist/agent-operations/furniture-kind.d.ts.map +1 -1
- package/dist/agent-operations/furniture-kind.js +105 -6
- package/dist/agent-operations/ground-reader.d.ts +10 -0
- package/dist/agent-operations/ground-reader.d.ts.map +1 -0
- package/dist/agent-operations/ground-reader.js +25 -0
- package/dist/agent-operations/index.d.ts +118 -12
- package/dist/agent-operations/index.d.ts.map +1 -1
- package/dist/agent-operations/index.js +26 -1
- package/dist/agent-operations/item-solids.d.ts +39 -0
- package/dist/agent-operations/item-solids.d.ts.map +1 -0
- package/dist/agent-operations/item-solids.js +128 -0
- package/dist/agent-operations/layout-clearance.d.ts +91 -11
- package/dist/agent-operations/layout-clearance.d.ts.map +1 -1
- package/dist/agent-operations/layout-clearance.js +280 -73
- package/dist/agent-operations/level-height-fill.d.ts.map +1 -1
- package/dist/agent-operations/level-height-fill.js +7 -1
- package/dist/agent-operations/level-reads.d.ts +5 -0
- package/dist/agent-operations/level-reads.d.ts.map +1 -1
- package/dist/agent-operations/level-reads.js +39 -3
- package/dist/agent-operations/list-levels.d.ts.map +1 -1
- package/dist/agent-operations/list-levels.js +2 -4
- package/dist/agent-operations/move-node.d.ts +12 -0
- package/dist/agent-operations/move-node.d.ts.map +1 -0
- package/dist/agent-operations/move-node.js +28 -0
- package/dist/agent-operations/move-plan.d.ts +28 -0
- package/dist/agent-operations/move-plan.d.ts.map +1 -0
- package/dist/agent-operations/move-plan.js +259 -0
- package/dist/agent-operations/node-patch.d.ts.map +1 -1
- package/dist/agent-operations/node-patch.js +15 -0
- package/dist/agent-operations/paint.d.ts +3 -1
- package/dist/agent-operations/paint.d.ts.map +1 -1
- package/dist/agent-operations/paint.js +14 -1
- package/dist/agent-operations/photo-elevation.d.ts.map +1 -1
- package/dist/agent-operations/photo-elevation.js +2 -1
- package/dist/agent-operations/place-in-room.d.ts.map +1 -1
- package/dist/agent-operations/place-in-room.js +1 -0
- package/dist/agent-operations/place-items.d.ts.map +1 -1
- package/dist/agent-operations/place-items.js +3 -4
- package/dist/agent-operations/plan-clearance.d.ts +28 -0
- package/dist/agent-operations/plan-clearance.d.ts.map +1 -0
- package/dist/agent-operations/plan-clearance.js +47 -0
- package/dist/agent-operations/plan-geometry.d.ts +2 -0
- package/dist/agent-operations/plan-geometry.d.ts.map +1 -1
- package/dist/agent-operations/plan-geometry.js +10 -0
- package/dist/agent-operations/project-files.d.ts +10 -0
- package/dist/agent-operations/project-files.d.ts.map +1 -1
- package/dist/agent-operations/reachability.d.ts +41 -0
- package/dist/agent-operations/reachability.d.ts.map +1 -0
- package/dist/agent-operations/reachability.js +199 -0
- package/dist/agent-operations/room-checks.d.ts +60 -0
- package/dist/agent-operations/room-checks.d.ts.map +1 -0
- package/dist/agent-operations/room-checks.js +226 -0
- package/dist/agent-operations/room-faces.d.ts +30 -0
- package/dist/agent-operations/room-faces.d.ts.map +1 -0
- package/dist/agent-operations/room-faces.js +31 -0
- package/dist/agent-operations/room-findings.d.ts +5 -2
- package/dist/agent-operations/room-findings.d.ts.map +1 -1
- package/dist/agent-operations/room-findings.js +30 -0
- package/dist/agent-operations/room-finishes.d.ts +87 -0
- package/dist/agent-operations/room-finishes.d.ts.map +1 -0
- package/dist/agent-operations/room-finishes.js +193 -0
- package/dist/agent-operations/room-floor-script.d.ts +3 -3
- package/dist/agent-operations/room-floor-script.js +3 -3
- package/dist/agent-operations/room-readings.d.ts +90 -0
- package/dist/agent-operations/room-readings.d.ts.map +1 -0
- package/dist/agent-operations/room-readings.js +369 -0
- package/dist/agent-operations/room-tile.d.ts +15 -0
- package/dist/agent-operations/room-tile.d.ts.map +1 -0
- package/dist/agent-operations/room-tile.js +30 -0
- package/dist/agent-operations/room-wet.d.ts +55 -0
- package/dist/agent-operations/room-wet.d.ts.map +1 -0
- package/dist/agent-operations/room-wet.js +203 -0
- package/dist/agent-operations/scene-check-policy.d.ts +5 -0
- package/dist/agent-operations/scene-check-policy.d.ts.map +1 -0
- package/dist/agent-operations/scene-check-policy.js +24 -0
- package/dist/agent-operations/scene-checkpoint.d.ts +10 -0
- package/dist/agent-operations/scene-checkpoint.d.ts.map +1 -1
- package/dist/agent-operations/scene-checkpoint.js +31 -0
- package/dist/agent-operations/scene-issue-groups.d.ts +17 -0
- package/dist/agent-operations/scene-issue-groups.d.ts.map +1 -0
- package/dist/agent-operations/scene-issue-groups.js +71 -0
- package/dist/agent-operations/scene-materials.d.ts +23 -0
- package/dist/agent-operations/scene-materials.d.ts.map +1 -1
- package/dist/agent-operations/scene-materials.js +41 -0
- package/dist/agent-operations/scene-queries.d.ts +2525 -1723
- package/dist/agent-operations/scene-queries.d.ts.map +1 -1
- package/dist/agent-operations/scene-queries.js +3 -3
- package/dist/agent-operations/scene-review.d.ts.map +1 -1
- package/dist/agent-operations/scene-review.js +3 -2
- package/dist/agent-operations/scene-view.d.ts.map +1 -1
- package/dist/agent-operations/scene-view.js +91 -21
- package/dist/agent-operations/search-assets.d.ts +10 -6
- package/dist/agent-operations/search-assets.d.ts.map +1 -1
- package/dist/agent-operations/search-assets.js +37 -22
- package/dist/agent-operations/set-checkpoint.d.ts.map +1 -1
- package/dist/agent-operations/set-checkpoint.js +1 -0
- package/dist/agent-operations/set-ground-level.d.ts +1 -1
- package/dist/agent-operations/set-ground-level.d.ts.map +1 -1
- package/dist/agent-operations/set-ground-level.js +3 -14
- package/dist/agent-operations/site.js +3 -2
- package/dist/agent-operations/slab-surface-script.d.ts +25 -0
- package/dist/agent-operations/slab-surface-script.d.ts.map +1 -0
- package/dist/agent-operations/slab-surface-script.js +60 -0
- package/dist/agent-operations/stair-plan-footprint.d.ts +9 -0
- package/dist/agent-operations/stair-plan-footprint.d.ts.map +1 -0
- package/dist/agent-operations/stair-plan-footprint.js +50 -0
- package/dist/agent-operations/types.d.ts +10 -5
- package/dist/agent-operations/types.d.ts.map +1 -1
- package/dist/agent-operations/units.d.ts +26 -0
- package/dist/agent-operations/units.d.ts.map +1 -0
- package/dist/agent-operations/units.js +110 -0
- package/dist/agent-operations/unreachable-rooms-check.d.ts +17 -0
- package/dist/agent-operations/unreachable-rooms-check.d.ts.map +1 -0
- package/dist/agent-operations/unreachable-rooms-check.js +35 -0
- package/dist/agent-operations/usage-checks.d.ts +2 -0
- package/dist/agent-operations/usage-checks.d.ts.map +1 -0
- package/dist/agent-operations/usage-checks.js +12 -0
- package/dist/agent-operations/verify-scene.d.ts +8 -11
- package/dist/agent-operations/verify-scene.d.ts.map +1 -1
- package/dist/agent-operations/verify-scene.js +59 -13
- package/dist/agent-operations/wall-face-defaults.d.ts +44 -0
- package/dist/agent-operations/wall-face-defaults.d.ts.map +1 -0
- package/dist/agent-operations/wall-face-defaults.js +229 -0
- package/dist/agent-operations/wall-joins.d.ts +119 -0
- package/dist/agent-operations/wall-joins.d.ts.map +1 -0
- package/dist/agent-operations/wall-joins.js +308 -0
- package/dist/agent-operations/wall-object-observations.d.ts.map +1 -1
- package/dist/agent-operations/wall-object-observations.js +5 -7
- package/dist/agent-operations/wall-skirting.d.ts.map +1 -1
- package/dist/agent-operations/wall-skirting.js +2 -0
- package/dist/agent-operations/wall-type.d.ts +49 -0
- package/dist/agent-operations/wall-type.d.ts.map +1 -0
- package/dist/agent-operations/wall-type.js +31 -0
- package/dist/agent-operations/zone-coverage.d.ts +85 -0
- package/dist/agent-operations/zone-coverage.d.ts.map +1 -0
- package/dist/agent-operations/zone-coverage.js +208 -0
- package/dist/agent-tools/add-object.d.ts +31 -0
- package/dist/agent-tools/add-object.d.ts.map +1 -1
- package/dist/agent-tools/add-object.js +44 -7
- package/dist/agent-tools/assets.d.ts +4 -0
- package/dist/agent-tools/assets.d.ts.map +1 -1
- package/dist/agent-tools/assets.js +11 -1
- package/dist/agent-tools/author-scene.d.ts +810 -15
- package/dist/agent-tools/author-scene.d.ts.map +1 -1
- package/dist/agent-tools/author-scene.js +275 -34
- package/dist/agent-tools/batch.d.ts +1 -1
- package/dist/agent-tools/batch.d.ts.map +1 -1
- package/dist/agent-tools/batch.js +5 -1
- package/dist/agent-tools/checkpoints.js +1 -1
- package/dist/agent-tools/columns.d.ts +14 -0
- package/dist/agent-tools/columns.d.ts.map +1 -1
- package/dist/agent-tools/columns.js +14 -2
- package/dist/agent-tools/contract.d.ts +10 -0
- package/dist/agent-tools/contract.d.ts.map +1 -1
- package/dist/agent-tools/contract.js +5 -1
- package/dist/agent-tools/corner-window.d.ts +1 -0
- package/dist/agent-tools/corner-window.d.ts.map +1 -1
- package/dist/agent-tools/corner-window.js +1 -1
- package/dist/agent-tools/create-room.d.ts +85 -0
- package/dist/agent-tools/create-room.d.ts.map +1 -1
- package/dist/agent-tools/create-room.js +8 -1
- package/dist/agent-tools/design-brief.d.ts +513 -7
- package/dist/agent-tools/design-brief.d.ts.map +1 -1
- package/dist/agent-tools/design-brief.js +192 -14
- package/dist/agent-tools/designs.js +1 -1
- package/dist/agent-tools/find-by-type.js +1 -1
- package/dist/agent-tools/index.d.ts +658 -10
- package/dist/agent-tools/index.d.ts.map +1 -1
- package/dist/agent-tools/index.js +9 -1
- package/dist/agent-tools/levels.js +4 -4
- package/dist/agent-tools/move-duplicate.d.ts +65 -0
- package/dist/agent-tools/move-duplicate.d.ts.map +1 -0
- package/dist/agent-tools/move-duplicate.js +68 -0
- package/dist/agent-tools/paint.d.ts +6 -0
- package/dist/agent-tools/paint.d.ts.map +1 -1
- package/dist/agent-tools/paint.js +7 -3
- package/dist/agent-tools/photo-elevation.js +1 -1
- package/dist/agent-tools/project-files.d.ts +2 -2
- package/dist/agent-tools/project-files.d.ts.map +1 -1
- package/dist/agent-tools/project-files.js +1 -1
- package/dist/agent-tools/refusal.d.ts +9 -1
- package/dist/agent-tools/refusal.d.ts.map +1 -1
- package/dist/agent-tools/refusal.js +5 -1
- package/dist/agent-tools/roofs.js +1 -1
- package/dist/agent-tools/room-structure.d.ts +60 -0
- package/dist/agent-tools/room-structure.d.ts.map +1 -1
- package/dist/agent-tools/room-structure.js +20 -1
- package/dist/agent-tools/search-materials.d.ts +1 -0
- package/dist/agent-tools/search-materials.d.ts.map +1 -1
- package/dist/agent-tools/site.js +1 -1
- package/dist/agent-tools/stairs.js +1 -1
- package/dist/agent-tools/units.d.ts +84 -0
- package/dist/agent-tools/units.d.ts.map +1 -0
- package/dist/agent-tools/units.js +54 -0
- package/dist/agent-tools/verify-scene-usage.d.ts +44 -0
- package/dist/agent-tools/verify-scene-usage.d.ts.map +1 -0
- package/dist/agent-tools/verify-scene-usage.js +146 -0
- package/dist/agent-tools/verify-scene.d.ts +12 -1
- package/dist/agent-tools/verify-scene.d.ts.map +1 -1
- package/dist/agent-tools/verify-scene.js +183 -3
- package/dist/agent-tools/view-scene.d.ts +3 -0
- package/dist/agent-tools/view-scene.d.ts.map +1 -1
- package/dist/agent-tools/view-scene.js +4 -1
- package/dist/agent-tools/wall-openings.d.ts +121 -2
- package/dist/agent-tools/wall-openings.d.ts.map +1 -1
- package/dist/agent-tools/wall-openings.js +123 -18
- package/dist/agent-tools/walls.d.ts +30 -0
- package/dist/agent-tools/walls.d.ts.map +1 -1
- package/dist/agent-tools/walls.js +54 -2
- package/dist/building/__fixtures__/wall-opening-cases.d.ts +181 -35
- package/dist/building/__fixtures__/wall-opening-cases.d.ts.map +1 -1
- package/dist/building/__fixtures__/wall-opening-cases.js +13 -0
- package/dist/building/code-profile.d.ts +231 -0
- package/dist/building/code-profile.d.ts.map +1 -0
- package/dist/building/code-profile.js +208 -0
- package/dist/building/corner-window.d.ts +2 -2
- package/dist/building/corner-window.d.ts.map +1 -1
- package/dist/building/corner-window.js +11 -2
- package/dist/building/door-types.d.ts +1 -0
- package/dist/building/door-types.d.ts.map +1 -1
- package/dist/building/door-types.js +2 -0
- package/dist/building/floor-item-fit.d.ts.map +1 -1
- package/dist/building/floor-item-fit.js +2 -4
- package/dist/building/ground-level.d.ts +1 -3
- package/dist/building/ground-level.d.ts.map +1 -1
- package/dist/building/ground-level.js +3 -5
- package/dist/building/index.d.ts +2 -0
- package/dist/building/index.d.ts.map +1 -1
- package/dist/building/index.js +2 -0
- package/dist/building/level-duplication.d.ts +4667 -3065
- package/dist/building/level-duplication.d.ts.map +1 -1
- package/dist/building/level-insertion.d.ts +1 -1
- package/dist/building/level-wall-copy.d.ts +24 -0
- package/dist/building/level-wall-copy.d.ts.map +1 -0
- package/dist/building/level-wall-copy.js +53 -0
- package/dist/building/merge-windows.d.ts.map +1 -1
- package/dist/building/merge-windows.js +5 -3
- package/dist/building/opening-style-presets.d.ts +2 -0
- package/dist/building/opening-style-presets.d.ts.map +1 -1
- package/dist/building/opening-style-presets.js +26 -5
- package/dist/building/room-use.d.ts +26 -0
- package/dist/building/room-use.d.ts.map +1 -0
- package/dist/building/room-use.js +102 -0
- package/dist/building/wall-openings.d.ts +134 -12
- package/dist/building/wall-openings.d.ts.map +1 -1
- package/dist/building/wall-openings.js +182 -41
- package/dist/building/window-types.d.ts +1 -0
- package/dist/building/window-types.d.ts.map +1 -1
- package/dist/building/window-types.js +3 -0
- package/dist/coherence/__fixtures__/enclosure-scenes.d.ts +84 -0
- package/dist/coherence/__fixtures__/enclosure-scenes.d.ts.map +1 -0
- package/dist/coherence/__fixtures__/enclosure-scenes.js +44 -0
- package/dist/commands/structure/attached-walls.d.ts +16 -0
- package/dist/commands/structure/attached-walls.d.ts.map +1 -0
- package/dist/commands/structure/attached-walls.js +53 -0
- package/dist/commands/structure/index.d.ts +3 -0
- package/dist/commands/structure/index.d.ts.map +1 -1
- package/dist/commands/structure/index.js +3 -0
- package/dist/commands/structure/move-separators.d.ts +62 -0
- package/dist/commands/structure/move-separators.d.ts.map +1 -0
- package/dist/commands/structure/move-separators.js +346 -0
- package/dist/commands/structure/set-floor-foundation.d.ts +5 -0
- package/dist/commands/structure/set-floor-foundation.d.ts.map +1 -1
- package/dist/commands/structure/set-wall-geometry.d.ts.map +1 -1
- package/dist/commands/structure/set-wall-geometry.js +44 -11
- package/dist/commands/structure/set-zone-intent.d.ts +26 -0
- package/dist/commands/structure/set-zone-intent.d.ts.map +1 -1
- package/dist/commands/structure/set-zone-intent.js +107 -2
- package/dist/commands/structure/shared.d.ts +889 -88
- package/dist/commands/structure/shared.d.ts.map +1 -1
- package/dist/commands/structure/wall-overlap.d.ts +45 -0
- package/dist/commands/structure/wall-overlap.d.ts.map +1 -0
- package/dist/commands/structure/wall-overlap.js +289 -0
- package/dist/commands/structure/zone-wall-merge.d.ts +2897 -1938
- package/dist/commands/structure/zone-wall-merge.d.ts.map +1 -1
- package/dist/contracts/reference-discovery.d.ts +2 -2
- package/dist/contracts/reference-discovery.d.ts.map +1 -1
- package/dist/contracts/reference-discovery.js +5 -3
- package/dist/contracts/reference-inventory.d.ts.map +1 -1
- package/dist/contracts/reference-inventory.js +75 -25
- package/dist/events/bus.d.ts +15 -2
- package/dist/events/bus.d.ts.map +1 -1
- package/dist/hooks/spatial-grid/built-in-floor-placed.d.ts +40 -0
- package/dist/hooks/spatial-grid/built-in-floor-placed.d.ts.map +1 -0
- package/dist/hooks/spatial-grid/built-in-floor-placed.js +220 -0
- package/dist/hooks/spatial-grid/floor-placed-elevation.d.ts.map +1 -1
- package/dist/hooks/spatial-grid/floor-placed-elevation.js +13 -7
- package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts +62 -2
- package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts.map +1 -1
- package/dist/hooks/spatial-grid/spatial-grid-manager.js +207 -36
- package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts +2915 -2114
- package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts.map +1 -1
- package/dist/hooks/spatial-grid/spatial-grid-sync.js +32 -5
- package/dist/hooks/spatial-grid/support-host-patch.js +10 -10
- package/dist/i18n/format.d.ts +41 -0
- package/dist/i18n/format.d.ts.map +1 -0
- package/dist/i18n/format.js +124 -0
- package/dist/i18n/index.d.ts +5 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.js +3 -0
- package/dist/i18n/registry.d.ts +78 -0
- package/dist/i18n/registry.d.ts.map +1 -0
- package/dist/i18n/registry.js +252 -0
- package/dist/i18n/use-translate.d.ts +16 -0
- package/dist/i18n/use-translate.d.ts.map +1 -0
- package/dist/i18n/use-translate.js +23 -0
- package/dist/index.d.ts +43 -20
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +42 -19
- package/dist/lib/__fixtures__/mezzanine.d.ts +10900 -8225
- package/dist/lib/__fixtures__/mezzanine.d.ts.map +1 -1
- package/dist/lib/absorb-wall-separators.d.ts +1629 -828
- package/dist/lib/absorb-wall-separators.d.ts.map +1 -1
- package/dist/lib/beam.d.ts +137 -0
- package/dist/lib/beam.d.ts.map +1 -0
- package/dist/lib/beam.js +297 -0
- package/dist/lib/below-grade-footprints.d.ts +13 -5
- package/dist/lib/below-grade-footprints.d.ts.map +1 -1
- package/dist/lib/below-grade-footprints.js +53 -10
- 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/build-up.d.ts +89 -0
- package/dist/lib/build-up.d.ts.map +1 -0
- package/dist/lib/build-up.js +216 -0
- package/dist/lib/corner-pair.d.ts +207 -4
- package/dist/lib/corner-pair.d.ts.map +1 -1
- package/dist/lib/deck-boards.d.ts +80 -0
- package/dist/lib/deck-boards.d.ts.map +1 -0
- package/dist/lib/deck-boards.js +184 -0
- package/dist/lib/deck-framing.d.ts +150 -0
- package/dist/lib/deck-framing.d.ts.map +1 -0
- package/dist/lib/deck-framing.js +515 -0
- package/dist/lib/deepest-drawn.d.ts +3 -6
- package/dist/lib/deepest-drawn.d.ts.map +1 -1
- package/dist/lib/deepest-drawn.js +4 -8
- 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/door-opening.d.ts +19 -0
- package/dist/lib/door-opening.d.ts.map +1 -0
- package/dist/lib/door-opening.js +27 -0
- package/dist/lib/door-operation.d.ts +2 -0
- package/dist/lib/door-operation.d.ts.map +1 -1
- package/dist/lib/door-operation.js +4 -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/exterior-wall-loops.d.ts.map +1 -1
- package/dist/lib/exterior-wall-loops.js +2 -1
- package/dist/lib/finish-script.d.ts +5 -5
- package/dist/lib/finish-script.d.ts.map +1 -1
- package/dist/lib/finish-script.js +12 -5
- package/dist/lib/floor-footprint-name.d.ts +17 -0
- package/dist/lib/floor-footprint-name.d.ts.map +1 -1
- package/dist/lib/floor-footprint-name.js +17 -4
- package/dist/lib/floor-intent-changes.d.ts.map +1 -1
- package/dist/lib/floor-intent-changes.js +66 -39
- package/dist/lib/floor-opening-footprints.d.ts +1 -1
- package/dist/lib/floor-opening-footprints.d.ts.map +1 -1
- package/dist/lib/floor-opening-footprints.js +10 -4
- package/dist/lib/floor-plate-paint.d.ts +2 -0
- package/dist/lib/floor-plate-paint.d.ts.map +1 -1
- package/dist/lib/floor-plate-paint.js +12 -0
- package/dist/lib/floor-plates.d.ts +250 -0
- package/dist/lib/floor-plates.d.ts.map +1 -1
- package/dist/lib/floor-plates.js +43 -4
- package/dist/lib/floor-script.d.ts +35 -6
- package/dist/lib/floor-script.d.ts.map +1 -1
- package/dist/lib/floor-script.js +96 -16
- package/dist/lib/foundation-construction.d.ts +4 -13
- package/dist/lib/foundation-construction.d.ts.map +1 -1
- package/dist/lib/foundation-construction.js +4 -14
- package/dist/lib/foundation-standard.d.ts +2 -3
- package/dist/lib/foundation-standard.d.ts.map +1 -1
- package/dist/lib/foundation-standard.js +2 -3
- package/dist/lib/foundation-wall.d.ts +1 -2
- package/dist/lib/foundation-wall.d.ts.map +1 -1
- package/dist/lib/foundation-wall.js +1 -2
- package/dist/lib/framing-post.d.ts +91 -0
- package/dist/lib/framing-post.d.ts.map +1 -0
- package/dist/lib/framing-post.js +174 -0
- package/dist/lib/geometry-script-node.d.ts +11 -0
- package/dist/lib/geometry-script-node.d.ts.map +1 -1
- package/dist/lib/geometry-script-node.js +35 -0
- package/dist/lib/grade-standing.d.ts +16 -2
- package/dist/lib/grade-standing.d.ts.map +1 -1
- package/dist/lib/grade-standing.js +129 -9
- package/dist/lib/ground-seat.d.ts +2 -22
- package/dist/lib/ground-seat.d.ts.map +1 -1
- package/dist/lib/ground-seat.js +2 -17
- package/dist/lib/ground-window.d.ts +2 -1
- package/dist/lib/ground-window.d.ts.map +1 -1
- package/dist/lib/ground-window.js +5 -2
- 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/level-footprints.d.ts +2 -0
- package/dist/lib/level-footprints.d.ts.map +1 -1
- package/dist/lib/level-footprints.js +7 -0
- package/dist/lib/opening-casing.d.ts +67 -0
- package/dist/lib/opening-casing.d.ts.map +1 -0
- package/dist/lib/opening-casing.js +131 -0
- package/dist/lib/opening-exterior-face.d.ts +6 -0
- package/dist/lib/opening-exterior-face.d.ts.map +1 -0
- package/dist/lib/opening-exterior-face.js +15 -0
- package/dist/lib/opening-floor-datum.d.ts +11 -5
- package/dist/lib/opening-floor-datum.d.ts.map +1 -1
- package/dist/lib/opening-floor-datum.js +40 -8
- package/dist/lib/opening-frame-depth.d.ts +18 -0
- package/dist/lib/opening-frame-depth.d.ts.map +1 -0
- package/dist/lib/opening-frame-depth.js +22 -0
- package/dist/lib/outdoor-room.d.ts +32 -0
- package/dist/lib/outdoor-room.d.ts.map +1 -0
- package/dist/lib/outdoor-room.js +66 -0
- package/dist/lib/own-floor-intent.d.ts.map +1 -1
- package/dist/lib/own-floor-intent.js +2 -2
- package/dist/lib/plate-surface.d.ts +8 -0
- package/dist/lib/plate-surface.d.ts.map +1 -1
- package/dist/lib/plate-surface.js +53 -3
- package/dist/lib/polygon-boolean.d.ts.map +1 -1
- package/dist/lib/polygon-boolean.js +2 -1
- package/dist/lib/porch-framing-sync.d.ts +46 -0
- package/dist/lib/porch-framing-sync.d.ts.map +1 -0
- package/dist/lib/porch-framing-sync.js +206 -0
- package/dist/lib/porch-framing.d.ts +44 -0
- package/dist/lib/porch-framing.d.ts.map +1 -0
- package/dist/lib/porch-framing.js +159 -0
- package/dist/lib/railing-rooms.d.ts +13 -0
- package/dist/lib/railing-rooms.d.ts.map +1 -0
- package/dist/lib/railing-rooms.js +37 -0
- package/dist/lib/roof-eave.d.ts +135 -0
- package/dist/lib/roof-eave.d.ts.map +1 -0
- package/dist/lib/roof-eave.js +186 -0
- 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/room-floor-plate.d.ts +3 -1
- package/dist/lib/room-floor-plate.d.ts.map +1 -1
- package/dist/lib/room-floor-plate.js +7 -0
- package/dist/lib/space-detection.d.ts +13 -0
- package/dist/lib/space-detection.d.ts.map +1 -1
- package/dist/lib/space-detection.js +113 -24
- package/dist/lib/structure-kernel.d.ts +22 -9
- package/dist/lib/structure-kernel.d.ts.map +1 -1
- package/dist/lib/structure-kernel.js +146 -28
- package/dist/lib/structure-reconcile.d.ts +1 -1
- package/dist/lib/structure-reconcile.d.ts.map +1 -1
- package/dist/lib/structure-reconcile.js +7 -4
- package/dist/lib/surface-intent.d.ts +10 -0
- package/dist/lib/surface-intent.d.ts.map +1 -0
- package/dist/lib/surface-intent.js +18 -0
- package/dist/lib/terrain-source.d.ts.map +1 -1
- package/dist/lib/terrain-source.js +2 -1
- package/dist/lib/wall-face-script.d.ts.map +1 -1
- package/dist/lib/wall-face-script.js +8 -5
- 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/material-kinds.d.ts +1 -1
- package/dist/material-kinds.d.ts.map +1 -1
- package/dist/material-kinds.js +1 -0
- package/dist/material-library.d.ts +15 -0
- package/dist/material-library.d.ts.map +1 -1
- package/dist/material-library.js +458 -59
- 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/node-slots/door.d.ts +3 -4
- package/dist/node-slots/door.d.ts.map +1 -1
- package/dist/node-slots/door.js +4 -3
- package/dist/node-slots/wall.d.ts.map +1 -1
- package/dist/node-slots/wall.js +21 -3
- package/dist/node-slots/window.d.ts +2 -2
- package/dist/node-slots/window.d.ts.map +1 -1
- package/dist/node-slots/window.js +6 -1
- package/dist/procedural-items/design.d.ts +8 -0
- package/dist/procedural-items/design.d.ts.map +1 -1
- package/dist/procedural-items/design.js +169 -21
- package/dist/procedural-items/motion-controller.d.ts +2 -0
- package/dist/procedural-items/motion-controller.d.ts.map +1 -1
- package/dist/procedural-items/motion-controller.js +2 -1
- package/dist/registry/index.d.ts +3 -3
- package/dist/registry/index.d.ts.map +1 -1
- package/dist/registry/index.js +2 -2
- package/dist/registry/mechanism.d.ts +4 -1
- package/dist/registry/mechanism.d.ts.map +1 -1
- package/dist/registry/mechanism.js +10 -0
- package/dist/registry/registry.d.ts +5 -0
- package/dist/registry/registry.d.ts.map +1 -1
- package/dist/registry/registry.js +10 -0
- package/dist/registry/types.d.ts +89 -23
- package/dist/registry/types.d.ts.map +1 -1
- package/dist/runtime/__fixtures__/live-scene.d.ts +14 -0
- package/dist/runtime/__fixtures__/live-scene.d.ts.map +1 -0
- package/dist/runtime/__fixtures__/live-scene.js +64 -0
- package/dist/runtime/apply.d.ts +42 -0
- package/dist/runtime/apply.d.ts.map +1 -0
- package/dist/runtime/apply.js +274 -0
- package/dist/runtime/dependencies.d.ts +97 -0
- package/dist/runtime/dependencies.d.ts.map +1 -0
- package/dist/runtime/dependencies.js +42 -0
- package/dist/runtime/ids.d.ts +11 -0
- package/dist/runtime/ids.d.ts.map +1 -0
- package/dist/runtime/ids.js +80 -0
- package/dist/runtime/index.d.ts +14 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +11 -0
- package/dist/runtime/node-queries.d.ts +16 -0
- package/dist/runtime/node-queries.d.ts.map +1 -0
- package/dist/runtime/node-queries.js +30 -0
- package/dist/runtime/patch.d.ts +26 -0
- package/dist/runtime/patch.d.ts.map +1 -0
- package/dist/runtime/patch.js +165 -0
- package/dist/runtime/reader.d.ts +104 -0
- package/dist/runtime/reader.d.ts.map +1 -0
- package/dist/runtime/reader.js +455 -0
- package/dist/runtime/scene-runtime.d.ts +112 -0
- package/dist/runtime/scene-runtime.d.ts.map +1 -0
- package/dist/runtime/scene-runtime.js +302 -0
- package/dist/schema/__fixtures__/node-fixtures.d.ts.map +1 -1
- package/dist/schema/__fixtures__/node-fixtures.js +1 -0
- package/dist/schema/assembly.d.ts +3 -0
- package/dist/schema/assembly.d.ts.map +1 -1
- package/dist/schema/assembly.js +13 -0
- package/dist/schema/asset-url.d.ts +37 -2
- package/dist/schema/asset-url.d.ts.map +1 -1
- package/dist/schema/asset-url.js +80 -11
- package/dist/schema/base.d.ts +8 -0
- package/dist/schema/base.d.ts.map +1 -1
- package/dist/schema/base.js +19 -1
- package/dist/schema/build-up.d.ts +247 -0
- package/dist/schema/build-up.d.ts.map +1 -0
- package/dist/schema/build-up.js +83 -0
- package/dist/schema/geometry-source.d.ts +80 -0
- package/dist/schema/geometry-source.d.ts.map +1 -1
- package/dist/schema/geometry-source.js +38 -0
- package/dist/schema/index.d.ts +12 -7
- package/dist/schema/index.d.ts.map +1 -1
- package/dist/schema/index.js +12 -6
- package/dist/schema/material.d.ts +5 -0
- package/dist/schema/material.d.ts.map +1 -1
- package/dist/schema/material.js +6 -0
- package/dist/schema/nodes/beam.d.ts +264 -0
- package/dist/schema/nodes/beam.d.ts.map +1 -0
- package/dist/schema/nodes/beam.js +139 -0
- package/dist/schema/nodes/box-vent.d.ts +5 -0
- package/dist/schema/nodes/box-vent.d.ts.map +1 -1
- package/dist/schema/nodes/cabinet.d.ts +10 -0
- package/dist/schema/nodes/cabinet.d.ts.map +1 -1
- package/dist/schema/nodes/ceiling.d.ts +48 -0
- package/dist/schema/nodes/ceiling.d.ts.map +1 -1
- package/dist/schema/nodes/ceiling.js +5 -0
- package/dist/schema/nodes/chimney.d.ts +10 -0
- package/dist/schema/nodes/chimney.d.ts.map +1 -1
- package/dist/schema/nodes/column.d.ts +42 -0
- package/dist/schema/nodes/column.d.ts.map +1 -1
- package/dist/schema/nodes/column.js +11 -1
- package/dist/schema/nodes/cupola.d.ts +5 -0
- package/dist/schema/nodes/cupola.d.ts.map +1 -1
- package/dist/schema/nodes/door.d.ts +54 -3
- package/dist/schema/nodes/door.d.ts.map +1 -1
- package/dist/schema/nodes/door.js +41 -7
- package/dist/schema/nodes/dormer.d.ts +20 -0
- package/dist/schema/nodes/dormer.d.ts.map +1 -1
- package/dist/schema/nodes/downspout.d.ts +5 -0
- package/dist/schema/nodes/downspout.d.ts.map +1 -1
- package/dist/schema/nodes/elevator.d.ts +5 -0
- package/dist/schema/nodes/elevator.d.ts.map +1 -1
- package/dist/schema/nodes/eyebrow-vent.d.ts +5 -0
- package/dist/schema/nodes/eyebrow-vent.d.ts.map +1 -1
- package/dist/schema/nodes/fence.d.ts +5 -0
- package/dist/schema/nodes/fence.d.ts.map +1 -1
- package/dist/schema/nodes/guide.d.ts +14 -0
- package/dist/schema/nodes/guide.d.ts.map +1 -1
- package/dist/schema/nodes/guide.js +2 -0
- package/dist/schema/nodes/gutter.d.ts +5 -0
- package/dist/schema/nodes/gutter.d.ts.map +1 -1
- package/dist/schema/nodes/item.d.ts +71 -0
- package/dist/schema/nodes/item.d.ts.map +1 -1
- package/dist/schema/nodes/item.js +5 -1
- package/dist/schema/nodes/level.d.ts +1 -1
- package/dist/schema/nodes/level.d.ts.map +1 -1
- package/dist/schema/nodes/opening-types.d.ts +13 -0
- package/dist/schema/nodes/opening-types.d.ts.map +1 -1
- package/dist/schema/nodes/opening-types.js +8 -1
- package/dist/schema/nodes/railing-wall.d.ts +112 -0
- package/dist/schema/nodes/railing-wall.d.ts.map +1 -0
- package/dist/schema/nodes/railing-wall.js +160 -0
- package/dist/schema/nodes/ridge-vent.d.ts +5 -0
- package/dist/schema/nodes/ridge-vent.d.ts.map +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 +226 -1
- package/dist/schema/nodes/roof-segment.d.ts.map +1 -1
- package/dist/schema/nodes/roof-segment.js +97 -12
- package/dist/schema/nodes/roof-types.d.ts +11 -0
- package/dist/schema/nodes/roof-types.d.ts.map +1 -1
- package/dist/schema/nodes/roof-types.js +6 -0
- package/dist/schema/nodes/roof.d.ts +60 -0
- package/dist/schema/nodes/roof.d.ts.map +1 -1
- package/dist/schema/nodes/roof.js +4 -0
- package/dist/schema/nodes/shelf.d.ts +5 -0
- package/dist/schema/nodes/shelf.d.ts.map +1 -1
- package/dist/schema/nodes/site.d.ts +80 -0
- package/dist/schema/nodes/site.d.ts.map +1 -1
- package/dist/schema/nodes/site.js +7 -0
- package/dist/schema/nodes/skylight.d.ts +10 -0
- package/dist/schema/nodes/skylight.d.ts.map +1 -1
- package/dist/schema/nodes/slab.d.ts +137 -0
- package/dist/schema/nodes/slab.d.ts.map +1 -1
- package/dist/schema/nodes/slab.js +3 -0
- package/dist/schema/nodes/solar-panel.d.ts +10 -0
- package/dist/schema/nodes/solar-panel.d.ts.map +1 -1
- package/dist/schema/nodes/stair-segment.d.ts +5 -0
- package/dist/schema/nodes/stair-segment.d.ts.map +1 -1
- package/dist/schema/nodes/stair-structure.d.ts +69 -0
- package/dist/schema/nodes/stair-structure.d.ts.map +1 -0
- package/dist/schema/nodes/stair-structure.js +39 -0
- package/dist/schema/nodes/stair.d.ts +46 -0
- package/dist/schema/nodes/stair.d.ts.map +1 -1
- package/dist/schema/nodes/stair.js +3 -0
- package/dist/schema/nodes/turbine-vent.d.ts +5 -0
- package/dist/schema/nodes/turbine-vent.d.ts.map +1 -1
- package/dist/schema/nodes/wall.d.ts +136 -2
- package/dist/schema/nodes/wall.d.ts.map +1 -1
- package/dist/schema/nodes/wall.js +48 -6
- package/dist/schema/nodes/window.d.ts +66 -1
- package/dist/schema/nodes/window.d.ts.map +1 -1
- package/dist/schema/nodes/window.js +50 -5
- package/dist/schema/nodes/zone.d.ts +68 -0
- package/dist/schema/nodes/zone.d.ts.map +1 -1
- package/dist/schema/nodes/zone.js +32 -0
- package/dist/schema/scene-material.d.ts +5 -0
- package/dist/schema/scene-material.d.ts.map +1 -1
- package/dist/schema/types.d.ts +1080 -4
- package/dist/schema/types.d.ts.map +1 -1
- package/dist/schema/types.js +2 -0
- package/dist/schema/wall-type.d.ts +95 -0
- package/dist/schema/wall-type.d.ts.map +1 -0
- package/dist/schema/wall-type.js +32 -0
- 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.d.ts.map +1 -1
- package/dist/services/roof-bearing.js +8 -4
- package/dist/services/roof-level.d.ts.map +1 -1
- package/dist/services/roof-level.js +4 -3
- package/dist/services/roof-move.d.ts.map +1 -1
- package/dist/services/roof-move.js +13 -7
- package/dist/services/storey.d.ts +6 -1
- package/dist/services/storey.d.ts.map +1 -1
- package/dist/services/storey.js +24 -10
- package/dist/spatial/usage-field/beds.d.ts +51 -0
- package/dist/spatial/usage-field/beds.d.ts.map +1 -0
- package/dist/spatial/usage-field/beds.js +346 -0
- package/dist/spatial/usage-field/blocked.d.ts +28 -0
- package/dist/spatial/usage-field/blocked.d.ts.map +1 -0
- package/dist/spatial/usage-field/blocked.js +185 -0
- package/dist/spatial/usage-field/boxes.d.ts +17 -0
- package/dist/spatial/usage-field/boxes.d.ts.map +1 -0
- package/dist/spatial/usage-field/boxes.js +82 -0
- package/dist/spatial/usage-field/catalogue-shapes.d.ts +3 -0
- package/dist/spatial/usage-field/catalogue-shapes.d.ts.map +1 -0
- package/dist/spatial/usage-field/catalogue-shapes.js +257 -0
- package/dist/spatial/usage-field/catalogue.d.ts +6 -0
- package/dist/spatial/usage-field/catalogue.d.ts.map +1 -0
- package/dist/spatial/usage-field/catalogue.js +11 -0
- package/dist/spatial/usage-field/clash.d.ts +40 -0
- package/dist/spatial/usage-field/clash.d.ts.map +1 -0
- package/dist/spatial/usage-field/clash.js +187 -0
- package/dist/spatial/usage-field/door-stairs.d.ts +18 -0
- package/dist/spatial/usage-field/door-stairs.d.ts.map +1 -0
- package/dist/spatial/usage-field/door-stairs.js +129 -0
- package/dist/spatial/usage-field/entry-way.d.ts +14 -0
- package/dist/spatial/usage-field/entry-way.d.ts.map +1 -0
- package/dist/spatial/usage-field/entry-way.js +219 -0
- package/dist/spatial/usage-field/fences.d.ts +18 -0
- package/dist/spatial/usage-field/fences.d.ts.map +1 -0
- package/dist/spatial/usage-field/fences.js +253 -0
- package/dist/spatial/usage-field/field.d.ts +44 -0
- package/dist/spatial/usage-field/field.d.ts.map +1 -0
- package/dist/spatial/usage-field/field.js +145 -0
- package/dist/spatial/usage-field/findings.d.ts +76 -0
- package/dist/spatial/usage-field/findings.d.ts.map +1 -0
- package/dist/spatial/usage-field/findings.js +252 -0
- package/dist/spatial/usage-field/fixtures.d.ts +18 -0
- package/dist/spatial/usage-field/fixtures.d.ts.map +1 -0
- package/dist/spatial/usage-field/fixtures.js +160 -0
- package/dist/spatial/usage-field/flag.d.ts +10 -0
- package/dist/spatial/usage-field/flag.d.ts.map +1 -0
- package/dist/spatial/usage-field/flag.js +12 -0
- package/dist/spatial/usage-field/floors.d.ts +13 -0
- package/dist/spatial/usage-field/floors.d.ts.map +1 -0
- package/dist/spatial/usage-field/floors.js +36 -0
- package/dist/spatial/usage-field/index.d.ts +7 -0
- package/dist/spatial/usage-field/index.d.ts.map +1 -0
- package/dist/spatial/usage-field/index.js +5 -0
- package/dist/spatial/usage-field/items.d.ts +38 -0
- package/dist/spatial/usage-field/items.d.ts.map +1 -0
- package/dist/spatial/usage-field/items.js +261 -0
- package/dist/spatial/usage-field/labels.d.ts +8 -0
- package/dist/spatial/usage-field/labels.d.ts.map +1 -0
- package/dist/spatial/usage-field/labels.js +14 -0
- package/dist/spatial/usage-field/level-field.d.ts +47 -0
- package/dist/spatial/usage-field/level-field.d.ts.map +1 -0
- package/dist/spatial/usage-field/level-field.js +96 -0
- package/dist/spatial/usage-field/measure.d.ts +324 -0
- package/dist/spatial/usage-field/measure.d.ts.map +1 -0
- package/dist/spatial/usage-field/measure.js +458 -0
- package/dist/spatial/usage-field/obstacles.d.ts +63 -0
- package/dist/spatial/usage-field/obstacles.d.ts.map +1 -0
- package/dist/spatial/usage-field/obstacles.js +215 -0
- package/dist/spatial/usage-field/openings.d.ts +12 -0
- package/dist/spatial/usage-field/openings.d.ts.map +1 -0
- package/dist/spatial/usage-field/openings.js +162 -0
- package/dist/spatial/usage-field/path.d.ts +48 -0
- package/dist/spatial/usage-field/path.d.ts.map +1 -0
- package/dist/spatial/usage-field/path.js +354 -0
- package/dist/spatial/usage-field/pieces.d.ts +27 -0
- package/dist/spatial/usage-field/pieces.d.ts.map +1 -0
- package/dist/spatial/usage-field/pieces.js +89 -0
- package/dist/spatial/usage-field/shapes.d.ts +18 -0
- package/dist/spatial/usage-field/shapes.d.ts.map +1 -0
- package/dist/spatial/usage-field/shapes.js +92 -0
- package/dist/spatial/usage-field/stairs.d.ts +23 -0
- package/dist/spatial/usage-field/stairs.d.ts.map +1 -0
- package/dist/spatial/usage-field/stairs.js +163 -0
- package/dist/spatial/usage-field/support.d.ts +24 -0
- package/dist/spatial/usage-field/support.d.ts.map +1 -0
- package/dist/spatial/usage-field/support.js +46 -0
- package/dist/spatial/usage-field/swings.d.ts +847 -0
- package/dist/spatial/usage-field/swings.d.ts.map +1 -0
- package/dist/spatial/usage-field/swings.js +427 -0
- package/dist/spatial/usage-field/types.d.ts +65 -0
- package/dist/spatial/usage-field/types.d.ts.map +1 -0
- package/dist/spatial/usage-field/types.js +1 -0
- package/dist/spatial/usage-field/walls.d.ts +1059 -0
- package/dist/spatial/usage-field/walls.d.ts.map +1 -0
- package/dist/spatial/usage-field/walls.js +180 -0
- package/dist/spatial/usage-field/way-in.d.ts +26 -0
- package/dist/spatial/usage-field/way-in.d.ts.map +1 -0
- package/dist/spatial/usage-field/way-in.js +113 -0
- package/dist/store/actions/node-actions.d.ts +1467 -664
- package/dist/store/actions/node-actions.d.ts.map +1 -1
- package/dist/store/actions/node-actions.js +65 -21
- package/dist/store/derived-node-guard.d.ts +10 -2
- package/dist/store/derived-node-guard.d.ts.map +1 -1
- package/dist/store/derived-node-guard.js +33 -12
- package/dist/store/document-settling.d.ts +9 -0
- package/dist/store/document-settling.d.ts.map +1 -0
- package/dist/store/document-settling.js +22 -0
- package/dist/store/history-control.d.ts +19 -10
- package/dist/store/history-control.d.ts.map +1 -1
- package/dist/store/history-control.js +176 -127
- package/dist/store/history-drafts.d.ts.map +1 -1
- package/dist/store/history-drafts.js +21 -17
- package/dist/store/live-previews.d.ts +9 -0
- package/dist/store/live-previews.d.ts.map +1 -0
- package/dist/store/live-previews.js +19 -0
- package/dist/store/scene-annotations.d.ts +5409 -3807
- package/dist/store/scene-annotations.d.ts.map +1 -1
- package/dist/store/scene-environment.d.ts +33 -0
- package/dist/store/scene-environment.d.ts.map +1 -0
- package/dist/store/scene-environment.js +54 -0
- package/dist/store/scene-hydration.d.ts.map +1 -1
- package/dist/store/scene-hydration.js +41 -30
- package/dist/store/use-interactive.d.ts +9 -3
- package/dist/store/use-interactive.d.ts.map +1 -1
- package/dist/store/use-interactive.js +43 -11
- package/dist/store/use-live-node-overrides.d.ts.map +1 -1
- package/dist/store/use-live-node-overrides.js +3 -0
- package/dist/store/use-scene.d.ts +25 -0
- package/dist/store/use-scene.d.ts.map +1 -1
- package/dist/store/use-scene.js +408 -336
- package/dist/systems/document-reconcile.d.ts +40 -0
- package/dist/systems/document-reconcile.d.ts.map +1 -0
- package/dist/systems/document-reconcile.js +159 -0
- 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-opening-system.d.ts.map +1 -1
- package/dist/systems/elevator/elevator-opening-system.js +9 -24
- 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/fence/guard-layout.d.ts +69 -0
- package/dist/systems/fence/guard-layout.d.ts.map +1 -0
- package/dist/systems/fence/guard-layout.js +194 -0
- package/dist/systems/owned-floor-openings.d.ts +13 -1
- package/dist/systems/owned-floor-openings.d.ts.map +1 -1
- package/dist/systems/owned-floor-openings.js +58 -2
- package/dist/systems/reconcile-owned-floor-openings.d.ts +3 -1
- package/dist/systems/reconcile-owned-floor-openings.d.ts.map +1 -1
- package/dist/systems/reconcile-owned-floor-openings.js +4 -4
- package/dist/systems/roof/roof-elevation-system.d.ts.map +1 -1
- package/dist/systems/roof/roof-elevation-system.js +8 -26
- package/dist/systems/roof/roof-elevation.d.ts +16 -1
- package/dist/systems/roof/roof-elevation.d.ts.map +1 -1
- package/dist/systems/roof/roof-elevation.js +87 -5
- package/dist/systems/roof/roof-footprint.d.ts +42 -1
- package/dist/systems/roof/roof-footprint.d.ts.map +1 -1
- package/dist/systems/roof/roof-footprint.js +160 -4
- package/dist/systems/slab/__fixtures__/floor-step.d.ts +2714 -1481
- package/dist/systems/slab/__fixtures__/floor-step.d.ts.map +1 -1
- package/dist/systems/slab/__fixtures__/raised-room.d.ts +3815 -2565
- package/dist/systems/slab/__fixtures__/raised-room.d.ts.map +1 -1
- package/dist/systems/stair/stair-clearance.d.ts +7 -0
- package/dist/systems/stair/stair-clearance.d.ts.map +1 -1
- package/dist/systems/stair/stair-clearance.js +31 -11
- package/dist/systems/stair/stair-construction.d.ts +8 -3
- package/dist/systems/stair/stair-construction.d.ts.map +1 -1
- package/dist/systems/stair/stair-construction.js +55 -4
- package/dist/systems/stair/stair-opening-preview.d.ts +1630 -829
- package/dist/systems/stair/stair-opening-preview.d.ts.map +1 -1
- package/dist/systems/stair/stair-opening-system.d.ts.map +1 -1
- package/dist/systems/stair/stair-opening-system.js +18 -34
- package/dist/systems/stair/stair-presets.d.ts +36 -0
- package/dist/systems/stair/stair-presets.d.ts.map +1 -1
- package/dist/systems/stair/stair-rise-query.d.ts.map +1 -1
- package/dist/systems/stair/stair-rise-query.js +3 -2
- package/dist/systems/stair/stair-rise.d.ts.map +1 -1
- package/dist/systems/stair/stair-rise.js +6 -0
- package/dist/systems/stair/stair-sizing.d.ts +42 -11
- package/dist/systems/stair/stair-sizing.d.ts.map +1 -1
- package/dist/systems/stair/stair-sizing.js +10 -1
- package/dist/systems/stair/stair-structure.d.ts +277 -0
- package/dist/systems/stair/stair-structure.d.ts.map +1 -0
- package/dist/systems/stair/stair-structure.js +496 -0
- package/dist/systems/wall/wall-assembly.d.ts +84 -6
- package/dist/systems/wall/wall-assembly.d.ts.map +1 -1
- package/dist/systems/wall/wall-assembly.js +204 -5
- 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-finish.d.ts +38 -2
- package/dist/systems/wall/wall-finish.d.ts.map +1 -1
- package/dist/systems/wall/wall-finish.js +70 -2
- package/dist/systems/wall/wall-footprint.js +2 -2
- 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 +66 -13
- package/dist/systems/wall/wall-mitering.d.ts +1 -0
- package/dist/systems/wall/wall-mitering.d.ts.map +1 -1
- package/dist/systems/wall/wall-mitering.js +152 -52
- package/dist/systems/wall/wall-move.d.ts +23 -6
- package/dist/systems/wall/wall-move.d.ts.map +1 -1
- package/dist/systems/wall/wall-move.js +65 -0
- package/dist/systems/wall/wall-top.d.ts +11 -4
- package/dist/systems/wall/wall-top.d.ts.map +1 -1
- package/dist/systems/wall/wall-top.js +28 -7
- package/dist/systems/wall/wall-topology.d.ts +32 -1
- package/dist/systems/wall/wall-topology.d.ts.map +1 -1
- package/dist/systems/wall/wall-topology.js +137 -11
- package/dist/systems/wall/wall-trim-profiles.d.ts +12 -0
- package/dist/systems/wall/wall-trim-profiles.d.ts.map +1 -0
- package/dist/systems/wall/wall-trim-profiles.js +191 -0
- package/dist/utils/ensure-scene-openings.d.ts +4663 -3061
- package/dist/utils/ensure-scene-openings.d.ts.map +1 -1
- package/dist/utils/floor-piece-adoption.d.ts +5 -0
- package/dist/utils/floor-piece-adoption.d.ts.map +1 -1
- package/dist/utils/floor-plate-migration.d.ts +3372 -2571
- 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 +1629 -828
- package/dist/utils/owned-floor-opening-migration.d.ts.map +1 -1
- package/dist/utils/reconcile-structure-on-load.d.ts +2308 -1507
- package/dist/utils/reconcile-structure-on-load.d.ts.map +1 -1
- package/dist/utils/structure-id.d.ts.map +1 -1
- package/dist/utils/structure-id.js +4 -0
- package/dist/validation/validate-build-json.d.ts.map +1 -1
- package/dist/validation/validate-build-json.js +3 -1
- package/package.json +22 -5
- package/dist/lib/generic-foundation.d.ts +0 -40
- package/dist/lib/generic-foundation.d.ts.map +0 -1
- package/dist/lib/generic-foundation.js +0 -200
|
@@ -0,0 +1,496 @@
|
|
|
1
|
+
import { StairConstruction } from '../../schema/nodes/stair-construction.js';
|
|
2
|
+
import { StairStructure, } from '../../schema/nodes/stair-structure.js';
|
|
3
|
+
/**
|
|
4
|
+
* A stair's structure — how it is really built, apart from the body it is drawn with — resolved
|
|
5
|
+
* to numbers: the stringer layout across each flight, the cut profile of every stringer, the
|
|
6
|
+
* treads and risers they carry, the construction the viewer draws for it, and the code checks the
|
|
7
|
+
* panel reports. Shared by the viewer (the body), the panel (the counts) and Bones (the members),
|
|
8
|
+
* so all three put a stringer in the same place.
|
|
9
|
+
*/
|
|
10
|
+
const IN = 0.0254;
|
|
11
|
+
const EPS = 1e-9;
|
|
12
|
+
/**
|
|
13
|
+
* The stair numbers of the IRC (R311.7 stairways, R312 guards) and AWC DCA 6 (deck stairs) the
|
|
14
|
+
* structure is checked against, in metres.
|
|
15
|
+
*/
|
|
16
|
+
export const STAIR_CODE = {
|
|
17
|
+
/** R311.7.5.1: risers 7-3/4 in at most. */
|
|
18
|
+
maxRiser: 7.75 * IN,
|
|
19
|
+
/** R311.7.5.2: treads 10 in at least. */
|
|
20
|
+
minTread: 10 * IN,
|
|
21
|
+
/** R311.7.5.3: a 3/4 in to 1-1/4 in nosing, required where the tread is under 11 in. */
|
|
22
|
+
minNosing: 0.75 * IN,
|
|
23
|
+
maxNosing: 1.25 * IN,
|
|
24
|
+
nosingWaivedTread: 11 * IN,
|
|
25
|
+
/** R311.7.1: 36 in wide. */
|
|
26
|
+
minWidth: 36 * IN,
|
|
27
|
+
/** R311.7.2: 6 ft 8 in of headroom. */
|
|
28
|
+
minHeadroom: 80 * IN,
|
|
29
|
+
/** R311.7.3: a flight rises 151 in at most between floors or landings. */
|
|
30
|
+
maxFlightRise: 151 * IN,
|
|
31
|
+
/** R311.7.6: landings at least 36 in in the direction of travel. */
|
|
32
|
+
minLandingDepth: 36 * IN,
|
|
33
|
+
/** R311.7.8: a flight of four or more risers carries a handrail, 34–38 in over the nosings. */
|
|
34
|
+
handrailRisers: 4,
|
|
35
|
+
minHandrailHeight: 34 * IN,
|
|
36
|
+
maxHandrailHeight: 38 * IN,
|
|
37
|
+
/** R312.1.1: a guard where the open side drops more than 30 in. */
|
|
38
|
+
guardDrop: 30 * IN,
|
|
39
|
+
/** R311.7.5.1: open risers must stop a 4 in sphere once the stair rises more than 30 in. */
|
|
40
|
+
openRiserSphere: 4 * IN,
|
|
41
|
+
openRiserFreeRise: 30 * IN,
|
|
42
|
+
/** DCA 6: cut stringers at most 18 in o.c. and 6 ft between supports, with a 5 in throat. */
|
|
43
|
+
cutStringerMaxSpacing: 18 * IN,
|
|
44
|
+
cutStringerMaxSpan: 72 * IN,
|
|
45
|
+
minThroat: 5 * IN,
|
|
46
|
+
};
|
|
47
|
+
/** Wood stringer stock, dressed (m). */
|
|
48
|
+
export const STAIR_STRINGER_STOCK = {
|
|
49
|
+
'2x12': { thickness: 1.5 * IN, depth: 11.25 * IN },
|
|
50
|
+
'2x10': { thickness: 1.5 * IN, depth: 9.25 * IN },
|
|
51
|
+
};
|
|
52
|
+
/** The steel stringer: an MC12x10.6 channel, 12 in deep with a 1-1/2 in flange. */
|
|
53
|
+
export const STAIR_STEEL_STRINGER = { name: 'MC12x10.6', thickness: 1.5 * IN, depth: 12 * IN };
|
|
54
|
+
/** Steel channels stand at the sides; a third goes down the middle past this width. */
|
|
55
|
+
const STEEL_STRINGER_MAX_SPACING = 48 * IN;
|
|
56
|
+
/**
|
|
57
|
+
* Tread stock: the boards laid front to back across one tread (`boards` of `boardWidth`, `gap`
|
|
58
|
+
* apart; a sheet fills the tread), their thickness, and the finish laid over them.
|
|
59
|
+
*/
|
|
60
|
+
export const STAIR_TREAD_STOCK = {
|
|
61
|
+
'2x6-pair': { boards: 2, boardWidth: 5.5 * IN, thickness: 1.5 * IN, gap: 0.25 * IN, finish: 0 },
|
|
62
|
+
'5/4x6-pair': { boards: 2, boardWidth: 5.5 * IN, thickness: 1 * IN, gap: 0.25 * IN, finish: 0 },
|
|
63
|
+
'2x12': { boards: 1, boardWidth: 11.25 * IN, thickness: 1.5 * IN, gap: 0, finish: 0 },
|
|
64
|
+
'plywood-finish': {
|
|
65
|
+
boards: 1,
|
|
66
|
+
boardWidth: Number.POSITIVE_INFINITY,
|
|
67
|
+
thickness: 0.75 * IN,
|
|
68
|
+
gap: 0,
|
|
69
|
+
finish: 0.75 * IN,
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
/** Riser boards are 1x stock, 3/4 in. */
|
|
73
|
+
export const STAIR_RISER_THICKNESS = 0.75 * IN;
|
|
74
|
+
/** A wood or steel tread's nosing when none is set: 1 in, inside R311.7.5.3's 3/4–1-1/4 in. */
|
|
75
|
+
export const DEFAULT_STAIR_NOSING = 1 * IN;
|
|
76
|
+
/** A housed stringer's top edge stands this far over the nosing line, square to it. */
|
|
77
|
+
export const HOUSED_STRINGER_REVEAL = 2 * IN;
|
|
78
|
+
/** A housed stringer runs this far ahead of the bottom nosing before its plumb cut. */
|
|
79
|
+
const HOUSED_STRINGER_LEAD = 1 * IN;
|
|
80
|
+
/** The housing (dado) a housed tread or riser sits in. */
|
|
81
|
+
export const STAIR_HOUSING_DEPTH = 0.5 * IN;
|
|
82
|
+
/** A concrete flight's nosing lip, when it has one. */
|
|
83
|
+
const CONCRETE_NOSING_LIP = 1.5 * IN;
|
|
84
|
+
/** An exterior stair: one fitted to a deck, porch or patio edge. */
|
|
85
|
+
export function stairIsExterior(stair) {
|
|
86
|
+
return Boolean(stair.deckSlabId || stair.destinationSurfaceId);
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* The stair's structure with every automatic choice made: two 2x6 treads and treated stock on an
|
|
90
|
+
* exterior stair, a 2x12 tread inside; risers closed once the stair rises more than 30 in; a 1 in
|
|
91
|
+
* nosing on wood and steel treads. `context` overrides what the stair alone cannot tell (Bones
|
|
92
|
+
* knows a stair that lands on grade is exterior). Null without a structure.
|
|
93
|
+
*/
|
|
94
|
+
export function resolveStairStructure(stair, context = {}) {
|
|
95
|
+
if (!stair.structure)
|
|
96
|
+
return null;
|
|
97
|
+
const parsed = StairStructure.safeParse(stair.structure);
|
|
98
|
+
if (!parsed.success)
|
|
99
|
+
return null;
|
|
100
|
+
const structure = parsed.data;
|
|
101
|
+
const exterior = context.exterior ?? stairIsExterior(stair);
|
|
102
|
+
// a stair that follows its level climbs a whole storey
|
|
103
|
+
const rise = context.totalRise ?? stair.totalRise ?? Number.POSITIVE_INFINITY;
|
|
104
|
+
return {
|
|
105
|
+
type: structure.type,
|
|
106
|
+
stringerStock: structure.stringerStock,
|
|
107
|
+
stringerType: structure.stringerType,
|
|
108
|
+
stringerSpacing: structure.stringerSpacing,
|
|
109
|
+
stringerCount: structure.stringerCount,
|
|
110
|
+
treadStock: structure.treadStock ?? (exterior ? '2x6-pair' : '2x12'),
|
|
111
|
+
closedRisers: structure.closedRisers ?? rise > STAIR_CODE.openRiserFreeRise + EPS,
|
|
112
|
+
treated: structure.treated ?? exterior,
|
|
113
|
+
nosing: structure.nosing ?? (structure.type === 'concrete' ? 0 : DEFAULT_STAIR_NOSING),
|
|
114
|
+
exterior,
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* The structure a stair is framed with: its own, or for a stair drawn before structures existed
|
|
119
|
+
* the one its body reads as — a concrete flight when it is painted concrete, wood stringers
|
|
120
|
+
* otherwise.
|
|
121
|
+
*/
|
|
122
|
+
export function inferStairStructure(stair) {
|
|
123
|
+
if (stair.structure) {
|
|
124
|
+
const parsed = StairStructure.safeParse(stair.structure);
|
|
125
|
+
if (parsed.success)
|
|
126
|
+
return parsed.data;
|
|
127
|
+
}
|
|
128
|
+
const refs = [stair.materialPreset, stair.material?.preset, ...Object.values(stair.slots ?? {})];
|
|
129
|
+
const concrete = refs.some((ref) => typeof ref === 'string' && /concrete/i.test(ref));
|
|
130
|
+
return StairStructure.parse({ type: concrete ? 'concrete' : 'wood-stringers' });
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* The automatic stringer count: enough that no bay between neighbours exceeds `maxSpacing` —
|
|
134
|
+
* ceil(width / spacing) + 1 — and never fewer than two, or three on a stair 36 in wide or more.
|
|
135
|
+
*/
|
|
136
|
+
export function autoStairStringerCount(width, maxSpacing) {
|
|
137
|
+
const floor = width >= STAIR_CODE.minWidth - EPS ? 3 : 2;
|
|
138
|
+
if (!(width > 0 && maxSpacing > 0))
|
|
139
|
+
return floor;
|
|
140
|
+
return Math.max(Math.ceil(width / maxSpacing - EPS) + 1, floor);
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* The stringers across a flight of `width`: the outer two flush with its sides and the rest evenly
|
|
144
|
+
* between them, as many as the structure asks (or as its spacing needs). Housed wood stringers
|
|
145
|
+
* and steel channels are the outer two; any between them are cut carriages.
|
|
146
|
+
*/
|
|
147
|
+
export function resolveStairStringerLayout(width, structure) {
|
|
148
|
+
const steel = structure.type === 'steel-stringers';
|
|
149
|
+
const stock = steel ? STAIR_STEEL_STRINGER : STAIR_STRINGER_STOCK[structure.stringerStock];
|
|
150
|
+
const auto = structure.stringerCount === undefined;
|
|
151
|
+
const wanted = structure.stringerCount ??
|
|
152
|
+
(steel
|
|
153
|
+
? Math.max(2, Math.ceil(width / STEEL_STRINGER_MAX_SPACING - EPS) + 1)
|
|
154
|
+
: autoStairStringerCount(width, structure.stringerSpacing));
|
|
155
|
+
const count = Math.max(0, Math.min(wanted, Math.floor((width + EPS) / stock.thickness)));
|
|
156
|
+
const spacing = count > 1 ? (width - stock.thickness) / (count - 1) : 0;
|
|
157
|
+
const housedSides = steel || structure.stringerType === 'housed';
|
|
158
|
+
const bands = [];
|
|
159
|
+
for (let index = 0; index < count; index++) {
|
|
160
|
+
const x = count > 1 ? -width / 2 + stock.thickness / 2 + index * spacing : 0;
|
|
161
|
+
bands.push({
|
|
162
|
+
index,
|
|
163
|
+
x,
|
|
164
|
+
x0: x - stock.thickness / 2,
|
|
165
|
+
x1: x + stock.thickness / 2,
|
|
166
|
+
thickness: stock.thickness,
|
|
167
|
+
depth: stock.depth,
|
|
168
|
+
kind: housedSides && (index === 0 || index === count - 1) ? 'housed' : 'cut',
|
|
169
|
+
steel,
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
return {
|
|
173
|
+
count,
|
|
174
|
+
auto,
|
|
175
|
+
spacing,
|
|
176
|
+
thickness: stock.thickness,
|
|
177
|
+
depth: stock.depth,
|
|
178
|
+
steel,
|
|
179
|
+
bands,
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* The body a structure draws: a solid mass for concrete (its nosing a lip over each riser); open
|
|
184
|
+
* treads of the tread stock — closed risers when it has them — over the stringers otherwise.
|
|
185
|
+
*/
|
|
186
|
+
export function stairStructureConstruction(structure) {
|
|
187
|
+
if (structure.type === 'concrete')
|
|
188
|
+
return {
|
|
189
|
+
...StairConstruction.parse({
|
|
190
|
+
mode: 'solid',
|
|
191
|
+
nosing: structure.nosing,
|
|
192
|
+
treadThickness: CONCRETE_NOSING_LIP,
|
|
193
|
+
finishThickness: 0,
|
|
194
|
+
}),
|
|
195
|
+
structure,
|
|
196
|
+
};
|
|
197
|
+
const tread = STAIR_TREAD_STOCK[structure.treadStock];
|
|
198
|
+
const stringer = structure.type === 'steel-stringers'
|
|
199
|
+
? STAIR_STEEL_STRINGER
|
|
200
|
+
: STAIR_STRINGER_STOCK[structure.stringerStock];
|
|
201
|
+
return {
|
|
202
|
+
...StairConstruction.parse({
|
|
203
|
+
mode: 'open',
|
|
204
|
+
treadThickness: tread.thickness,
|
|
205
|
+
finishThickness: tread.finish,
|
|
206
|
+
nosing: structure.nosing,
|
|
207
|
+
riserThickness: STAIR_RISER_THICKNESS,
|
|
208
|
+
closedRisers: structure.closedRisers,
|
|
209
|
+
stringerWidth: stringer.thickness,
|
|
210
|
+
stringerDepth: stringer.depth,
|
|
211
|
+
}),
|
|
212
|
+
structure,
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
const constructionMemo = new WeakMap();
|
|
216
|
+
/**
|
|
217
|
+
* The construction a straight stair's structure draws, or null (no structure, or a curved or
|
|
218
|
+
* spiral stair, which keeps its own body). Memoised on the structure object.
|
|
219
|
+
*/
|
|
220
|
+
export function stairStructureConstructionOf(stair) {
|
|
221
|
+
if (!stair.structure || (stair.stairType ?? 'straight') !== 'straight')
|
|
222
|
+
return null;
|
|
223
|
+
const key = `${stair.totalRise ?? ''}|${stairIsExterior(stair)}`;
|
|
224
|
+
const cached = constructionMemo.get(stair.structure);
|
|
225
|
+
if (cached?.key === key)
|
|
226
|
+
return cached.value;
|
|
227
|
+
const structure = resolveStairStructure(stair);
|
|
228
|
+
if (!structure)
|
|
229
|
+
return null;
|
|
230
|
+
const value = stairStructureConstruction(structure);
|
|
231
|
+
constructionMemo.set(stair.structure, { key, value });
|
|
232
|
+
return value;
|
|
233
|
+
}
|
|
234
|
+
/** A landing's joists and rims: 2x8, 16 in o.c. — a stair landing spans a few feet at most. */
|
|
235
|
+
export const STAIR_LANDING_JOIST = { size: '2x8', thickness: 1.5 * IN, depth: 7.25 * IN };
|
|
236
|
+
export const STAIR_LANDING_JOIST_SPACING = 16 * IN;
|
|
237
|
+
/** A landing's corner posts: 4x4. */
|
|
238
|
+
export const STAIR_LANDING_POST = 3.5 * IN;
|
|
239
|
+
/** A landing closer to the base than this over its frame sits on blocking, not posts. */
|
|
240
|
+
const STAIR_LANDING_MIN_POST = 6 * IN;
|
|
241
|
+
/**
|
|
242
|
+
* A wood landing's frame, in the landing's frame (its top at 0): rims all round under the decking
|
|
243
|
+
* (`drop` thick), joists between them along the run at 16 in o.c., and a 4x4 post under each
|
|
244
|
+
* corner down to the stair's base `baseDepth` below — none when the frame sits within 6 in of it.
|
|
245
|
+
*/
|
|
246
|
+
export function stairLandingFrame(landing, drop, baseDepth) {
|
|
247
|
+
const { width, length } = landing;
|
|
248
|
+
const t = STAIR_LANDING_JOIST.thickness;
|
|
249
|
+
const top = -drop;
|
|
250
|
+
const bottom = top - STAIR_LANDING_JOIST.depth;
|
|
251
|
+
const x0 = -width / 2;
|
|
252
|
+
const x1 = width / 2;
|
|
253
|
+
const rims = [];
|
|
254
|
+
const joists = [];
|
|
255
|
+
const posts = [];
|
|
256
|
+
if (!(width > 2 * t && length > 2 * t))
|
|
257
|
+
return { rims, joists, posts };
|
|
258
|
+
rims.push({ x0, x1, z0: 0, z1: t, bottom, top }, { x0, x1, z0: length - t, z1: length, bottom, top }, { x0, x1: x0 + t, z0: t, z1: length - t, bottom, top }, { x0: x1 - t, x1, z0: t, z1: length - t, bottom, top });
|
|
259
|
+
const bays = Math.max(1, Math.ceil((width - t) / STAIR_LANDING_JOIST_SPACING - EPS));
|
|
260
|
+
for (let i = 1; i < bays; i++) {
|
|
261
|
+
const x = x0 + t / 2 + (i * (width - t)) / bays;
|
|
262
|
+
joists.push({ x0: x - t / 2, x1: x + t / 2, z0: t, z1: length - t, bottom, top });
|
|
263
|
+
}
|
|
264
|
+
if (baseDepth + bottom >= STAIR_LANDING_MIN_POST - EPS) {
|
|
265
|
+
const p = STAIR_LANDING_POST;
|
|
266
|
+
for (const [px, pz] of [
|
|
267
|
+
[x0, 0],
|
|
268
|
+
[x1 - p, 0],
|
|
269
|
+
[x0, length - p],
|
|
270
|
+
[x1 - p, length - p],
|
|
271
|
+
])
|
|
272
|
+
posts.push({ x0: px, x1: px + p, z0: pz, z1: pz + p, bottom: -baseDepth, top: bottom });
|
|
273
|
+
}
|
|
274
|
+
return { rims, joists, posts };
|
|
275
|
+
}
|
|
276
|
+
/** The flight a segment and its construction make for the stringers. */
|
|
277
|
+
export function stairStringerFlight(segment, construction) {
|
|
278
|
+
return {
|
|
279
|
+
stepCount: Math.max(1, Math.round(segment.stepCount)),
|
|
280
|
+
height: segment.height,
|
|
281
|
+
length: segment.length,
|
|
282
|
+
treadDrop: construction.treadThickness + construction.finishThickness,
|
|
283
|
+
riserSetback: construction.closedRisers ? construction.riserThickness : 0,
|
|
284
|
+
nosing: construction.nosing,
|
|
285
|
+
};
|
|
286
|
+
}
|
|
287
|
+
/** Keeps the part of a convex polygon on one side of a level line (Sutherland–Hodgman). */
|
|
288
|
+
function clipLevel(polygon, level, keepAbove) {
|
|
289
|
+
const inside = (p) => (keepAbove ? p[1] >= level - EPS : p[1] <= level + EPS);
|
|
290
|
+
const out = [];
|
|
291
|
+
for (let i = 0; i < polygon.length; i++) {
|
|
292
|
+
const a = polygon[i];
|
|
293
|
+
const b = polygon[(i + 1) % polygon.length];
|
|
294
|
+
const aIn = inside(a);
|
|
295
|
+
const bIn = inside(b);
|
|
296
|
+
if (aIn)
|
|
297
|
+
out.push(a);
|
|
298
|
+
if (aIn !== bIn) {
|
|
299
|
+
const t = (level - a[1]) / (b[1] - a[1]);
|
|
300
|
+
out.push([a[0] + (b[0] - a[0]) * t, level]);
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
const same = (a, b) => Math.hypot(a[0] - b[0], a[1] - b[1]) <= EPS;
|
|
304
|
+
const kept = out.filter((p, i) => i === 0 || !same(p, out[i - 1]));
|
|
305
|
+
if (kept.length > 1 && same(kept[0], kept.at(-1)))
|
|
306
|
+
kept.pop();
|
|
307
|
+
return kept;
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* The uncut board's edges, as heights over the run (height = slope · run + intercept): a cut
|
|
311
|
+
* stringer's top edge runs through the outer corners of its notches, a housed one stands
|
|
312
|
+
* `HOUSED_STRINGER_REVEAL` over the nosing line; the bottom edge is the board's depth under it.
|
|
313
|
+
*/
|
|
314
|
+
export function stairStringerEdges(band, flight) {
|
|
315
|
+
const count = Math.max(1, Math.round(flight.stepCount));
|
|
316
|
+
const riser = flight.height / count;
|
|
317
|
+
const slope = flight.length > 0 ? flight.height / flight.length : 0;
|
|
318
|
+
const vertical = band.depth * Math.hypot(1, slope);
|
|
319
|
+
const top = band.kind === 'cut'
|
|
320
|
+
? riser - flight.treadDrop - slope * flight.riserSetback
|
|
321
|
+
: slope * flight.nosing + riser + HOUSED_STRINGER_REVEAL * Math.hypot(1, slope);
|
|
322
|
+
return { slope, top, bottom: top - vertical };
|
|
323
|
+
}
|
|
324
|
+
/**
|
|
325
|
+
* One stringer down a flight, sliced per step (each slice convex, so the viewer extrudes it and
|
|
326
|
+
* Bones boxes it). A cut stringer is notched for every tread and riser: each slice tops out flat
|
|
327
|
+
* at its tread seat — the walking top less the tread — its riser cut set back behind the riser
|
|
328
|
+
* board, its underside the board's bottom edge. A housed stringer is the solid board standing
|
|
329
|
+
* `HOUSED_STRINGER_REVEAL` over the nosing line. Both are cut level where they bear on the base,
|
|
330
|
+
* plumb at the top of the run, and a housed one level at the floor it reaches.
|
|
331
|
+
*/
|
|
332
|
+
export function stairStringerSlices(band, flight) {
|
|
333
|
+
const count = Math.max(1, Math.round(flight.stepCount));
|
|
334
|
+
const { height, length } = flight;
|
|
335
|
+
if (!(height > 0 && length > 0 && band.depth > 0))
|
|
336
|
+
return [];
|
|
337
|
+
const going = length / count;
|
|
338
|
+
const riser = height / count;
|
|
339
|
+
const { slope, top, bottom } = stairStringerEdges(band, flight);
|
|
340
|
+
const slices = [];
|
|
341
|
+
const finish = (index, polygon, underside) => {
|
|
342
|
+
let profile = polygon;
|
|
343
|
+
if (flight.bearsOnBase !== false)
|
|
344
|
+
profile = clipLevel(profile, 0, true);
|
|
345
|
+
if (band.kind === 'housed')
|
|
346
|
+
profile = clipLevel(profile, height, false);
|
|
347
|
+
if (profile.length < 3)
|
|
348
|
+
return;
|
|
349
|
+
slices.push({
|
|
350
|
+
index,
|
|
351
|
+
profile,
|
|
352
|
+
underside,
|
|
353
|
+
top: Math.max(...profile.map((point) => point[1])),
|
|
354
|
+
});
|
|
355
|
+
};
|
|
356
|
+
if (band.kind === 'cut') {
|
|
357
|
+
const setback = flight.riserSetback;
|
|
358
|
+
for (let index = 0; index < count; index++) {
|
|
359
|
+
const z0 = setback + index * going;
|
|
360
|
+
const z1 = Math.min(length, setback + (index + 1) * going);
|
|
361
|
+
const seat = (index + 1) * riser - flight.treadDrop;
|
|
362
|
+
if (!(z1 - z0 > EPS && seat > EPS))
|
|
363
|
+
continue;
|
|
364
|
+
finish(index, [
|
|
365
|
+
[z0, seat],
|
|
366
|
+
[z1, seat],
|
|
367
|
+
[z1, slope * z1 + bottom],
|
|
368
|
+
[z0, slope * z0 + bottom],
|
|
369
|
+
], [slope, bottom]);
|
|
370
|
+
}
|
|
371
|
+
return slices;
|
|
372
|
+
}
|
|
373
|
+
for (let index = 0; index < count; index++) {
|
|
374
|
+
const z0 = index === 0 ? -(flight.nosing + HOUSED_STRINGER_LEAD) : index * going;
|
|
375
|
+
const z1 = index === count - 1 ? length : (index + 1) * going;
|
|
376
|
+
finish(index, [
|
|
377
|
+
[z0, slope * z0 + top],
|
|
378
|
+
[z1, slope * z1 + top],
|
|
379
|
+
[z1, slope * z1 + bottom],
|
|
380
|
+
[z0, slope * z0 + bottom],
|
|
381
|
+
], [slope, bottom]);
|
|
382
|
+
}
|
|
383
|
+
return slices;
|
|
384
|
+
}
|
|
385
|
+
/** A stringer's cut: its slices and the numbers the takeoff and the code checks read off them. */
|
|
386
|
+
export function stairStringerCut(band, flight) {
|
|
387
|
+
const slices = stairStringerSlices(band, flight);
|
|
388
|
+
const { slope, top, bottom } = stairStringerEdges(band, flight);
|
|
389
|
+
const norm = Math.hypot(1, slope);
|
|
390
|
+
const along = (point) => (point[0] + point[1] * slope) / norm;
|
|
391
|
+
const points = slices.flatMap((slice) => slice.profile);
|
|
392
|
+
const extents = points.map(along);
|
|
393
|
+
const riser = flight.height / Math.max(1, Math.round(flight.stepCount));
|
|
394
|
+
const onBase = points.filter((point) => Math.abs(point[1]) < 1e-7).map((point) => point[0]);
|
|
395
|
+
const atTop = points
|
|
396
|
+
.filter((point) => Math.abs(point[0] - flight.length) < 1e-7)
|
|
397
|
+
.map((point) => point[1]);
|
|
398
|
+
return {
|
|
399
|
+
slices,
|
|
400
|
+
slope,
|
|
401
|
+
length: extents.length ? Math.max(...extents) - Math.min(...extents) : 0,
|
|
402
|
+
throat: band.kind === 'cut' ? band.depth - riser / norm : band.depth,
|
|
403
|
+
seat: onBase.length > 1 ? [Math.min(...onBase), Math.max(...onBase)] : null,
|
|
404
|
+
plumb: {
|
|
405
|
+
z: flight.length,
|
|
406
|
+
top: atTop.length ? Math.max(...atTop) : 0,
|
|
407
|
+
bottom: atTop.length ? Math.min(...atTop) : 0,
|
|
408
|
+
},
|
|
409
|
+
edge: { top, bottom },
|
|
410
|
+
};
|
|
411
|
+
}
|
|
412
|
+
/** Inches as a builder reads them, to the nearest eighth: 7.75 in → `7-3/4 in`. */
|
|
413
|
+
export function formatStairInches(metres) {
|
|
414
|
+
const eighths = Math.round(metres / IN / 0.125);
|
|
415
|
+
const whole = Math.floor(eighths / 8);
|
|
416
|
+
let numerator = eighths - whole * 8;
|
|
417
|
+
let denominator = 8;
|
|
418
|
+
while (numerator > 0 && numerator % 2 === 0) {
|
|
419
|
+
numerator /= 2;
|
|
420
|
+
denominator /= 2;
|
|
421
|
+
}
|
|
422
|
+
if (numerator === 0)
|
|
423
|
+
return `${whole} in`;
|
|
424
|
+
return whole > 0 ? `${whole}-${numerator}/${denominator} in` : `${numerator}/${denominator} in`;
|
|
425
|
+
}
|
|
426
|
+
/**
|
|
427
|
+
* The IRC R311.7 / R312 and DCA 6 checks a stair with a structure owes: risers, treads, nosings,
|
|
428
|
+
* width, flight rise, headroom, the handrail on four or more risers, the guard past a 30 in drop,
|
|
429
|
+
* open risers on a tall stair, and for cut wood stringers their spacing, throat and span. Stairs
|
|
430
|
+
* without a structure keep the design-target checks alone.
|
|
431
|
+
*/
|
|
432
|
+
export function stairStructureDiagnostics(stair, flights, options) {
|
|
433
|
+
if ((stair.stairType ?? 'straight') !== 'straight')
|
|
434
|
+
return [];
|
|
435
|
+
const structure = resolveStairStructure(stair);
|
|
436
|
+
if (!structure)
|
|
437
|
+
return [];
|
|
438
|
+
const issues = [];
|
|
439
|
+
const warn = (code, nodeId, message) => issues.push({ code, severity: 'warning', nodeId, message });
|
|
440
|
+
const construction = stairStructureConstruction(structure);
|
|
441
|
+
const railings = (stair.railingMode ?? 'none') !== 'none';
|
|
442
|
+
const handrail = stair.handrail && stair.handrail.mode !== 'none';
|
|
443
|
+
for (const flight of flights) {
|
|
444
|
+
const { riserHeight: riser, going } = flight;
|
|
445
|
+
if (riser === null || going === null)
|
|
446
|
+
continue;
|
|
447
|
+
if (riser > STAIR_CODE.maxRiser + EPS)
|
|
448
|
+
warn('code-riser', flight.nodeId, `Risers of ${formatStairInches(riser)} exceed the 7-3/4 in maximum (IRC R311.7.5.1).`);
|
|
449
|
+
if (going < STAIR_CODE.minTread - EPS)
|
|
450
|
+
warn('code-tread', flight.nodeId, `Treads of ${formatStairInches(going)} fall short of the 10 in minimum (IRC R311.7.5.2).`);
|
|
451
|
+
if (structure.type !== 'concrete' || structure.nosing > 0) {
|
|
452
|
+
if (going < STAIR_CODE.nosingWaivedTread - EPS &&
|
|
453
|
+
structure.nosing < STAIR_CODE.minNosing - EPS)
|
|
454
|
+
warn('code-nosing', flight.nodeId, 'Treads under 11 in need a 3/4 in to 1-1/4 in nosing (IRC R311.7.5.3).');
|
|
455
|
+
else if (structure.nosing > STAIR_CODE.maxNosing + EPS)
|
|
456
|
+
warn('code-nosing', flight.nodeId, `A ${formatStairInches(structure.nosing)} nosing projects past the 1-1/4 in IRC R311.7.5.3 allows.`);
|
|
457
|
+
}
|
|
458
|
+
if (flight.width < STAIR_CODE.minWidth - EPS)
|
|
459
|
+
warn('code-width', flight.nodeId, `The flight is ${formatStairInches(flight.width)} wide; IRC R311.7.1 asks 36 in.`);
|
|
460
|
+
if (flight.rise > STAIR_CODE.maxFlightRise + EPS)
|
|
461
|
+
warn('code-flight-rise', flight.nodeId, `A flight rises ${formatStairInches(flight.rise)}; IRC R311.7.3 allows 151 in between floors or landings. Add a landing.`);
|
|
462
|
+
if (flight.count >= STAIR_CODE.handrailRisers && !railings && !handrail)
|
|
463
|
+
warn('code-handrail', flight.nodeId, `A flight of ${flight.count} risers needs a handrail 34 in to 38 in over the nosings (IRC R311.7.8).`);
|
|
464
|
+
if (structure.type !== 'concrete') {
|
|
465
|
+
const layout = resolveStairStringerLayout(flight.width, structure);
|
|
466
|
+
const carriages = layout.bands.some((band) => band.kind === 'cut');
|
|
467
|
+
if (!layout.steel && carriages) {
|
|
468
|
+
if (layout.spacing > STAIR_CODE.cutStringerMaxSpacing + EPS)
|
|
469
|
+
warn('stringer-spacing', flight.nodeId, `Stringers stand ${formatStairInches(layout.spacing)} on centre; DCA 6 allows cut stringers 18 in at most. Add a stringer.`);
|
|
470
|
+
const cut = stairStringerCut({ kind: 'cut', depth: layout.depth }, stairStringerFlight({ stepCount: flight.count, height: flight.rise, length: flight.length }, construction));
|
|
471
|
+
if (cut.throat < STAIR_CODE.minThroat - EPS)
|
|
472
|
+
warn('stringer-throat', flight.nodeId, `The cut stringers keep ${formatStairInches(cut.throat)} of wood under the notches; DCA 6 asks 5 in. Use 2x12 stock or a shallower riser.`);
|
|
473
|
+
// DCA 6's span limit is the deck stair's, open below; inside, the walls alongside carry them
|
|
474
|
+
if (structure.exterior && flight.length > STAIR_CODE.cutStringerMaxSpan + EPS)
|
|
475
|
+
warn('stringer-span', flight.nodeId, `The cut stringers span ${formatStairInches(flight.length)} level; DCA 6 limits them to 6 ft between supports. Support them at mid-span on a beam and posts.`);
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
if (railings && !handrail && Number.isFinite(stair.railingHeight)) {
|
|
480
|
+
const height = stair.railingHeight;
|
|
481
|
+
if (height < STAIR_CODE.minHandrailHeight - EPS || height > STAIR_CODE.maxHandrailHeight + EPS)
|
|
482
|
+
warn('code-handrail-height', stair.id, `The railing stands ${formatStairInches(height)} over the nosings; a handrail belongs 34 in to 38 in (IRC R311.7.8.1).`);
|
|
483
|
+
}
|
|
484
|
+
if (options.totalRise > STAIR_CODE.guardDrop + EPS && !railings)
|
|
485
|
+
warn('code-guard', stair.id, `The stair rises ${formatStairInches(options.totalRise)}; an open side more than 30 in above the floor needs a guard (IRC R312.1.1) unless a wall encloses it.`);
|
|
486
|
+
if (structure.type !== 'concrete' &&
|
|
487
|
+
!structure.closedRisers &&
|
|
488
|
+
options.totalRise > STAIR_CODE.openRiserFreeRise + EPS) {
|
|
489
|
+
const opening = Math.max(0, ...flights.map((flight) => (flight.riserHeight ?? 0) - construction.treadThickness - construction.finishThickness));
|
|
490
|
+
if (opening >= STAIR_CODE.openRiserSphere - EPS)
|
|
491
|
+
warn('code-open-risers', stair.id, `Open risers leave ${formatStairInches(opening)} between treads; past a 30 in rise they must stop a 4 in sphere (IRC R311.7.5.1). Close them with riser boards.`);
|
|
492
|
+
}
|
|
493
|
+
if (options.headroom !== null && options.headroom < STAIR_CODE.minHeadroom - EPS)
|
|
494
|
+
warn('code-headroom', stair.id, `Headroom of ${formatStairInches(options.headroom)} is under the 6 ft 8 in minimum (IRC R311.7.2).`);
|
|
495
|
+
return issues;
|
|
496
|
+
}
|
|
@@ -43,9 +43,11 @@
|
|
|
43
43
|
* `exterior` nor `sheathing`, whose interior finish is then applied to BOTH
|
|
44
44
|
* faces and no cladding or sheathing is drawn (see `resolveWallAssembly`).
|
|
45
45
|
*/
|
|
46
|
-
import type
|
|
47
|
-
import type {
|
|
48
|
-
import {
|
|
46
|
+
import { type MaterialCatalogItem } from '../../material-library.js';
|
|
47
|
+
import type { AnyNode, WallNode } from '../../schema/index.js';
|
|
48
|
+
import type { Assembly, AssemblyLayer } from '../../schema/assembly.js';
|
|
49
|
+
import { WallAssembly, type WallFace } from '../../schema/nodes/wall.js';
|
|
50
|
+
import { WallTypeDefinition } from '../../schema/wall-type.js';
|
|
49
51
|
import { type Point2D, type WallMiterData } from './wall-mitering.js';
|
|
50
52
|
/** 1/2 in gypsum board. 2021 IRC R702.3.5 + Table R702.3.5. */
|
|
51
53
|
export declare const GYPSUM_HALF: number;
|
|
@@ -59,6 +61,19 @@ export declare const GYPSUM_SHEATHING: number;
|
|
|
59
61
|
export declare const STUD_2X4: number;
|
|
60
62
|
/** 2x6 stud, actual 5-1/2 in. Same source as STUD_2X4. */
|
|
61
63
|
export declare const STUD_2X6: number;
|
|
64
|
+
/** 2x8 stud, actual 7-1/4 in: the PS 20 dressed size the IRC lumber tables assume. */
|
|
65
|
+
export declare const STUD_2X8: number;
|
|
66
|
+
/**
|
|
67
|
+
* Steel stud webs, 3-1/2, 5-1/2 and 8 in: members 350S162, 550S162 and 800S162, whose designation
|
|
68
|
+
* leads with the web depth in hundredths of an inch (AISI S201, the designations 2021 IRC R603
|
|
69
|
+
* uses).
|
|
70
|
+
*/
|
|
71
|
+
export declare const LGS_STUD_350: number;
|
|
72
|
+
export declare const LGS_STUD_550: number;
|
|
73
|
+
export declare const LGS_STUD_800: number;
|
|
74
|
+
/** Stud spacings the 2021 IRC stud tables are written for, 16 and 24 in on centre (Table R602.3(5)). */
|
|
75
|
+
export declare const STUD_SPACING_16: number;
|
|
76
|
+
export declare const STUD_SPACING_24: number;
|
|
62
77
|
/** Vinyl / wood lap siding bounding depth, 3/4 in. 2021 IRC R703.11 / R703.5 + Table R703.3(1). */
|
|
63
78
|
export declare const SIDING_LAP: number;
|
|
64
79
|
/** Fiber cement lap board, 5/16 in board. 2021 IRC R703.10.2 + Table R703.3(1). */
|
|
@@ -184,8 +199,71 @@ export declare function wallAssemblyFraming(wall: Pick<WallNode, 'assembly'>): {
|
|
|
184
199
|
depth: number;
|
|
185
200
|
kind?: string;
|
|
186
201
|
} | undefined;
|
|
187
|
-
/**
|
|
188
|
-
|
|
202
|
+
/**
|
|
203
|
+
* `library:` ref for the wall's assembly cladding, or null when it has none: the product picked
|
|
204
|
+
* for its cladding layer while drafting (`wallAssemblyFinishSlots`), else the kind's own
|
|
205
|
+
* (`WALL_FINISH_LIBRARY_REF`). A picked product that no longer dresses the cladding (the layer
|
|
206
|
+
* changed from siding to stucco since) gives way to the kind's own.
|
|
207
|
+
*/
|
|
208
|
+
export declare function wallAssemblyFinishRef(wall: Pick<WallNode, 'assembly' | 'frontSide' | 'backSide' | 'slots'>): string | null;
|
|
209
|
+
/**
|
|
210
|
+
* The finish the wall's assembly gives one geometric face (`a` is the +normal face) where the
|
|
211
|
+
* face has no paint of its own: on the exterior face its cladding (`wallAssemblyFinishRef`), on a
|
|
212
|
+
* lined face the paint picked for that lining while drafting. Null where the assembly says
|
|
213
|
+
* nothing, and the face shows the wall's slot default.
|
|
214
|
+
*/
|
|
215
|
+
export declare function wallAssemblyFaceFinish(wall: Pick<WallNode, 'assembly' | 'frontSide' | 'backSide' | 'slots'>, face: WallFace): string | null;
|
|
216
|
+
/** The `slots` key a layer's look is kept under: its own `slot`, else `layer:<id>` (`AssemblyLayer.slot`). */
|
|
217
|
+
export declare function assemblyLayerSlotKey(layer: Pick<AssemblyLayer, 'id' | 'slot'>): string;
|
|
218
|
+
/**
|
|
219
|
+
* The catalog products a cladding kind (`siding`, `stucco`, `brick`, …) can be finished with,
|
|
220
|
+
* the kind's own (`WALL_FINISH_LIBRARY_REF`) among them: what the drafting finish picker offers
|
|
221
|
+
* for a wall type with that cladding. Empty for a kind with none (`none`, an unknown kind).
|
|
222
|
+
*/
|
|
223
|
+
export declare function wallCladdingProducts(kind: string | undefined): MaterialCatalogItem[];
|
|
224
|
+
/** Whether `ref` is a `library:` product `wallCladdingProducts(kind)` lists. */
|
|
225
|
+
export declare function isWallCladdingProduct(kind: string | undefined, ref: string | undefined): boolean;
|
|
226
|
+
/**
|
|
227
|
+
* Whether a stack builds an exterior wall, read from its own layers: it has a cladding side — a
|
|
228
|
+
* finish or sheathing layer, or a lining on one face only (block or framing left bare outside).
|
|
229
|
+
* A stack lined on both faces, or bare on both, is a partition.
|
|
230
|
+
*/
|
|
231
|
+
export declare function isExteriorWallAssembly(assembly: Assembly): boolean;
|
|
232
|
+
export type WallTypeCore = {
|
|
233
|
+
id: string;
|
|
234
|
+
label: string;
|
|
235
|
+
/** The core layer's construction kind, as the framers read it (`wallAssemblyFraming`). */
|
|
236
|
+
material: 'wood' | 'lgs' | 'cmu';
|
|
237
|
+
thickness: number;
|
|
238
|
+
/** Studs on centre, metres; absent for block. */
|
|
239
|
+
spacing?: number;
|
|
240
|
+
};
|
|
241
|
+
/**
|
|
242
|
+
* The framing cores a project wall type is built around: wood studs (2x4, 2x6, 2x8) and steel
|
|
243
|
+
* studs (the 3-1/2, 5-1/2 and 8 in webs the framers size steel walls by) at 16 or 24 in on
|
|
244
|
+
* centre, or an 8 in block. The core's depth and spacing are what a framer studs the wall at.
|
|
245
|
+
*/
|
|
246
|
+
export declare const WALL_TYPE_CORES: readonly WallTypeCore[];
|
|
247
|
+
/**
|
|
248
|
+
* The listed core a stack is built around, or undefined for one off the list. A core with no
|
|
249
|
+
* spacing of its own (every preset's: the framer's default) reads as the 16 in one.
|
|
250
|
+
*/
|
|
251
|
+
export declare function wallTypeCoreOf(assembly: Assembly): WallTypeCore | undefined;
|
|
252
|
+
/**
|
|
253
|
+
* A project wall type's stack from its layers listed outside-in, with ids as the presets give
|
|
254
|
+
* them (`exterior`, `sheathing`, `framing`, `interior`, a lining outside the core
|
|
255
|
+
* `interior-back`, a repeat numbered `-2`, `-3`…), so a stack the inspector's cladding /
|
|
256
|
+
* sheathing / framing / interior rows can express stays editable there.
|
|
257
|
+
*/
|
|
258
|
+
export declare function wallTypeAssembly(id: string, layers: readonly Omit<AssemblyLayer, 'id'>[]): Assembly;
|
|
259
|
+
/**
|
|
260
|
+
* The project's own wall types: those saved on its site (`SiteNode.wallTypes`), in their saved
|
|
261
|
+
* order. A scene is loaded without parsing, so an entry that does not parse, or repeats an id, is
|
|
262
|
+
* skipped rather than trusted.
|
|
263
|
+
*/
|
|
264
|
+
export declare function projectWallTypes(nodes: Readonly<Record<string, AnyNode | undefined>>, rootNodeIds: readonly string[]): WallTypeDefinition[];
|
|
265
|
+
/** A saved `SiteNode.wallTypes` list as `projectWallTypes` reads it: parsed, first id wins. */
|
|
266
|
+
export declare function parseWallTypes(saved: unknown): WallTypeDefinition[];
|
|
189
267
|
/** The structural cores that are left bare where nothing covers them: block and cast concrete. */
|
|
190
268
|
export type ExposedStructure = 'cmu' | 'concrete';
|
|
191
269
|
/**
|
|
@@ -194,7 +272,7 @@ export type ExposedStructure = 'cmu' | 'concrete';
|
|
|
194
272
|
* block or cast concrete above grade, and from under the ground, is what it is. `null` for a wall
|
|
195
273
|
* with a cladding (`wallAssemblyFinishRef` speaks for it), a lining outside the core (a
|
|
196
274
|
* partition), a framed or foam core (`wood`, `lgs`, `icf`), and a wall whose exterior side is not
|
|
197
|
-
* yet resolved.
|
|
275
|
+
* yet resolved.
|
|
198
276
|
*/
|
|
199
277
|
export declare function wallAssemblyExposedStructure(wall: Pick<WallNode, 'assembly' | 'frontSide' | 'backSide'>): ExposedStructure | null;
|
|
200
278
|
export declare function getWallAssemblyPreset(id: string | undefined): WallAssemblyPreset | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wall-assembly.d.ts","sourceRoot":"","sources":["../../../src/systems/wall/wall-assembly.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"wall-assembly.d.ts","sourceRoot":"","sources":["../../../src/systems/wall/wall-assembly.ts"],"names":[],"mappings":"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"}
|