@pascal-app/nodes 1.0.1 → 1.0.4
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/block/definition.d.ts.map +1 -1
- package/dist/block/definition.js +22 -4
- package/dist/block/face-host.d.ts.map +1 -1
- package/dist/block/face-host.js +19 -2
- package/dist/block/floorplan.d.ts +11 -1
- package/dist/block/floorplan.d.ts.map +1 -1
- package/dist/block/floorplan.js +81 -13
- package/dist/block/geometry.d.ts +2 -2
- package/dist/block/geometry.d.ts.map +1 -1
- package/dist/block/geometry.js +39 -24
- package/dist/block/hosted-edit.d.ts +13 -0
- package/dist/block/hosted-edit.d.ts.map +1 -0
- package/dist/block/hosted-edit.js +230 -0
- package/dist/block/last-operation.d.ts +1 -1
- package/dist/block/last-operation.d.ts.map +1 -1
- package/dist/block/last-operation.js +6 -4
- package/dist/block/material-slots.d.ts +1 -3
- package/dist/block/material-slots.d.ts.map +1 -1
- package/dist/block/material-slots.js +1 -11
- package/dist/block/modal-session.d.ts +2 -1
- package/dist/block/modal-session.d.ts.map +1 -1
- package/dist/block/modal-session.js +2 -2
- package/dist/block/paint.d.ts.map +1 -1
- package/dist/block/paint.js +4 -10
- package/dist/block/panel.d.ts.map +1 -1
- package/dist/block/panel.js +8 -3
- package/dist/block/selection.d.ts.map +1 -1
- package/dist/block/selection.js +83 -25
- package/dist/block/surface.d.ts +4 -0
- package/dist/block/surface.d.ts.map +1 -0
- package/dist/block/surface.js +54 -0
- package/dist/block/use-block-face-operation.d.ts +2 -2
- package/dist/block/use-block-face-operation.d.ts.map +1 -1
- package/dist/block/use-block-face-operation.js +25 -11
- package/dist/box-vent/definition.d.ts.map +1 -1
- package/dist/box-vent/definition.js +3 -5
- package/dist/box-vent/panel.d.ts.map +1 -1
- package/dist/box-vent/panel.js +5 -28
- package/dist/building/renderer.d.ts.map +1 -1
- package/dist/building/renderer.js +1 -1
- package/dist/cabinet/countertop-layout.d.ts +13 -2
- package/dist/cabinet/countertop-layout.d.ts.map +1 -1
- package/dist/cabinet/definition.d.ts.map +1 -1
- package/dist/cabinet/definition.js +4 -3
- package/dist/cabinet/floorplan.d.ts.map +1 -1
- package/dist/cabinet/floorplan.js +125 -28
- package/dist/cabinet/geometry/shared.d.ts +1 -2
- package/dist/cabinet/geometry/shared.d.ts.map +1 -1
- package/dist/cabinet/geometry/shared.js +1 -2
- package/dist/cabinet/hosted-resize.d.ts +3 -6
- package/dist/cabinet/hosted-resize.d.ts.map +1 -1
- package/dist/cabinet/hosted-resize.js +9 -153
- package/dist/cabinet/placement-snap.d.ts.map +1 -1
- package/dist/cabinet/placement-snap.js +4 -2
- package/dist/cabinet/run-layout.d.ts.map +1 -1
- package/dist/cabinet/run-layout.js +8 -5
- package/dist/cabinet/run-ops.d.ts +13 -2
- package/dist/cabinet/run-ops.d.ts.map +1 -1
- package/dist/cabinet/surfaces.d.ts +1 -0
- package/dist/cabinet/surfaces.d.ts.map +1 -1
- package/dist/cabinet/surfaces.js +13 -1
- package/dist/cabinet/tool.d.ts.map +1 -1
- package/dist/cabinet/tool.js +30 -28
- package/dist/cabinet/wall-snap.d.ts.map +1 -1
- package/dist/cabinet/wall-snap.js +8 -8
- package/dist/ceiling/boundary-editor.d.ts.map +1 -1
- package/dist/ceiling/boundary-editor.js +5 -3
- package/dist/ceiling/definition.d.ts +4 -4
- package/dist/ceiling/definition.d.ts.map +1 -1
- package/dist/ceiling/definition.js +20 -15
- package/dist/ceiling/floorplan-affordances.d.ts +84 -4
- package/dist/ceiling/floorplan-affordances.d.ts.map +1 -1
- package/dist/ceiling/floorplan-affordances.js +0 -1
- package/dist/ceiling/floorplan-move.d.ts.map +1 -1
- package/dist/ceiling/floorplan-move.js +0 -1
- package/dist/ceiling/floorplan.d.ts +1 -1
- package/dist/ceiling/floorplan.d.ts.map +1 -1
- package/dist/ceiling/floorplan.js +2 -1
- package/dist/ceiling/height-bounds.d.ts +19 -0
- package/dist/ceiling/height-bounds.d.ts.map +1 -0
- package/dist/ceiling/height-bounds.js +24 -0
- package/dist/ceiling/hole-editor.d.ts.map +1 -1
- package/dist/ceiling/hole-editor.js +3 -4
- package/dist/ceiling/materials.d.ts +1 -1
- package/dist/ceiling/materials.d.ts.map +1 -1
- package/dist/ceiling/materials.js +10 -3
- package/dist/ceiling/paint.d.ts +2 -8
- package/dist/ceiling/paint.d.ts.map +1 -1
- package/dist/ceiling/paint.js +121 -24
- package/dist/ceiling/panel.d.ts.map +1 -1
- package/dist/ceiling/panel.js +40 -23
- package/dist/ceiling/renderer.d.ts.map +1 -1
- package/dist/ceiling/renderer.js +43 -6
- package/dist/chimney/definition.d.ts.map +1 -1
- package/dist/chimney/definition.js +1 -0
- package/dist/chimney/move-tool.d.ts.map +1 -1
- package/dist/chimney/move-tool.js +8 -2
- package/dist/chimney/paint.d.ts.map +1 -1
- package/dist/chimney/paint.js +3 -10
- package/dist/column/definition.d.ts.map +1 -1
- package/dist/column/definition.js +34 -5
- package/dist/column/floorplan-affordances.d.ts.map +1 -1
- package/dist/column/floorplan-affordances.js +11 -1
- package/dist/column/floorplan.d.ts +1 -1
- package/dist/column/floorplan.d.ts.map +1 -1
- package/dist/column/floorplan.js +69 -12
- package/dist/column/hosted-resize.d.ts +215 -0
- package/dist/column/hosted-resize.d.ts.map +1 -0
- package/dist/column/hosted-resize.js +9 -0
- package/dist/column/panel.d.ts.map +1 -1
- package/dist/column/panel.js +153 -149
- package/dist/column/renderer.d.ts.map +1 -1
- package/dist/column/renderer.js +29 -105
- package/dist/column/shape.d.ts +22 -0
- package/dist/column/shape.d.ts.map +1 -0
- package/dist/column/shape.js +120 -0
- package/dist/column/surface.d.ts +4 -0
- package/dist/column/surface.d.ts.map +1 -0
- package/dist/column/surface.js +73 -0
- package/dist/construction-dimension/floorplan.js +7 -3
- package/dist/cupola/definition.d.ts.map +1 -1
- package/dist/cupola/definition.js +3 -8
- package/dist/cupola/panel.d.ts.map +1 -1
- package/dist/cupola/panel.js +5 -23
- package/dist/door/definition.d.ts.map +1 -1
- package/dist/door/definition.js +52 -4
- package/dist/door/door-math.d.ts +6 -11
- package/dist/door/door-math.d.ts.map +1 -1
- package/dist/door/door-math.js +13 -17
- package/dist/door/floorplan-affordances.d.ts.map +1 -1
- package/dist/door/floorplan-affordances.js +8 -12
- package/dist/door/floorplan-move.d.ts.map +1 -1
- package/dist/door/floorplan-move.js +3 -1
- package/dist/door/floorplan.d.ts.map +1 -1
- package/dist/door/floorplan.js +55 -21
- package/dist/door/mechanism.d.ts +4 -0
- package/dist/door/mechanism.d.ts.map +1 -0
- package/dist/door/mechanism.js +24 -0
- package/dist/door/move-tool.d.ts.map +1 -1
- package/dist/door/move-tool.js +75 -52
- package/dist/door/paint.d.ts.map +1 -1
- package/dist/door/paint.js +3 -0
- package/dist/door/panel.d.ts.map +1 -1
- package/dist/door/panel.js +54 -308
- package/dist/door/placement.d.ts +45 -0
- package/dist/door/placement.d.ts.map +1 -0
- package/dist/door/placement.js +51 -0
- package/dist/door/preview.d.ts.map +1 -1
- package/dist/door/preview.js +2 -0
- package/dist/door/renderer.d.ts.map +1 -1
- package/dist/door/renderer.js +3 -2
- package/dist/door/tool.d.ts.map +1 -1
- package/dist/door/tool.js +112 -23
- package/dist/dormer/csg-geometry.d.ts.map +1 -1
- package/dist/dormer/csg-geometry.js +2 -0
- package/dist/dormer/definition.d.ts.map +1 -1
- package/dist/dormer/definition.js +1 -0
- package/dist/dormer/paint.d.ts.map +1 -1
- package/dist/dormer/paint.js +2 -5
- package/dist/dormer/panel.d.ts.map +1 -1
- package/dist/dormer/panel.js +4 -14
- package/dist/downspout/definition.d.ts.map +1 -1
- package/dist/downspout/definition.js +3 -2
- package/dist/duct-fitting/definition.d.ts.map +1 -1
- package/dist/duct-fitting/definition.js +2 -1
- package/dist/duct-fitting/geometry.d.ts.map +1 -1
- package/dist/duct-fitting/geometry.js +1 -1
- package/dist/duct-fitting/move-tool.d.ts.map +1 -1
- package/dist/duct-fitting/move-tool.js +8 -2
- package/dist/duct-segment/definition.d.ts.map +1 -1
- package/dist/duct-segment/definition.js +2 -2
- package/dist/duct-segment/geometry.d.ts.map +1 -1
- package/dist/duct-segment/geometry.js +1 -1
- package/dist/duct-segment/move-tool.d.ts.map +1 -1
- package/dist/duct-segment/move-tool.js +8 -2
- package/dist/duct-segment/tool.d.ts.map +1 -1
- package/dist/duct-segment/tool.js +11 -0
- package/dist/duct-terminal/tool.d.ts.map +1 -1
- package/dist/duct-terminal/tool.js +77 -8
- package/dist/elevator/definition.d.ts.map +1 -1
- package/dist/elevator/definition.js +3 -2
- package/dist/elevator/panel.d.ts.map +1 -1
- package/dist/elevator/panel.js +5 -27
- package/dist/elevator/parametrics.d.ts.map +1 -1
- package/dist/elevator/parametrics.js +98 -1
- package/dist/elevator/renderer.d.ts.map +1 -1
- package/dist/elevator/renderer.js +3 -4
- package/dist/eyebrow-vent/definition.d.ts.map +1 -1
- package/dist/eyebrow-vent/definition.js +3 -5
- package/dist/eyebrow-vent/paint.d.ts.map +1 -1
- package/dist/eyebrow-vent/paint.js +3 -6
- package/dist/eyebrow-vent/panel.d.ts.map +1 -1
- package/dist/eyebrow-vent/panel.js +5 -23
- package/dist/fence/actions/move-endpoint.d.ts +1 -1
- package/dist/fence/actions/move-endpoint.d.ts.map +1 -1
- package/dist/fence/actions/move-endpoint.js +2 -1
- package/dist/fence/definition.d.ts +2 -1
- package/dist/fence/definition.d.ts.map +1 -1
- package/dist/fence/definition.js +84 -28
- package/dist/fence/drafting.d.ts +36 -0
- package/dist/fence/drafting.d.ts.map +1 -0
- package/dist/fence/drafting.js +210 -0
- package/dist/fence/feature-tool.d.ts +4 -0
- package/dist/fence/feature-tool.d.ts.map +1 -0
- package/dist/fence/feature-tool.js +140 -0
- package/dist/fence/features.d.ts +2 -0
- package/dist/fence/features.d.ts.map +1 -0
- package/dist/fence/features.js +12 -0
- package/dist/fence/floorplan-affordances.d.ts.map +1 -1
- package/dist/fence/floorplan-affordances.js +2 -1
- package/dist/fence/floorplan.d.ts +2 -3
- package/dist/fence/floorplan.d.ts.map +1 -1
- package/dist/fence/floorplan.js +131 -71
- package/dist/fence/geometry-parts.d.ts +50 -0
- package/dist/fence/geometry-parts.d.ts.map +1 -0
- package/dist/fence/geometry-parts.js +1144 -0
- package/dist/fence/geometry.d.ts +2 -3
- package/dist/fence/geometry.d.ts.map +1 -1
- package/dist/fence/geometry.js +84 -7
- package/dist/fence/index.d.ts +1 -0
- package/dist/fence/index.d.ts.map +1 -1
- package/dist/fence/index.js +1 -0
- package/dist/fence/inspector-editors.d.ts +15 -0
- package/dist/fence/inspector-editors.d.ts.map +1 -1
- package/dist/fence/inspector-editors.js +128 -3
- package/dist/fence/lift.d.ts.map +1 -1
- package/dist/fence/lift.js +5 -2
- package/dist/fence/move-tool.js +2 -1
- package/dist/fence/panel-model.d.ts +4 -0
- package/dist/fence/panel-model.d.ts.map +1 -0
- package/dist/fence/panel-model.js +12 -0
- package/dist/fence/parametrics.d.ts +0 -12
- package/dist/fence/parametrics.d.ts.map +1 -1
- package/dist/fence/parametrics.js +185 -18
- package/dist/fence/system.d.ts.map +1 -1
- package/dist/fence/system.js +141 -31
- package/dist/fence/tool.d.ts.map +1 -1
- package/dist/fence/tool.js +257 -48
- package/dist/fence-feature/actions.d.ts +7 -0
- package/dist/fence-feature/actions.d.ts.map +1 -0
- package/dist/fence-feature/actions.js +26 -0
- package/dist/fence-feature/definition.d.ts +4 -0
- package/dist/fence-feature/definition.d.ts.map +1 -0
- package/dist/fence-feature/definition.js +112 -0
- package/dist/fence-feature/floorplan-affordances.d.ts +3 -0
- package/dist/fence-feature/floorplan-affordances.d.ts.map +1 -0
- package/dist/fence-feature/floorplan-affordances.js +37 -0
- package/dist/fence-feature/floorplan.d.ts +4 -0
- package/dist/fence-feature/floorplan.d.ts.map +1 -0
- package/dist/fence-feature/floorplan.js +120 -0
- package/dist/fence-feature/geometry.d.ts +5 -0
- package/dist/fence-feature/geometry.d.ts.map +1 -0
- package/dist/fence-feature/geometry.js +43 -0
- package/dist/fence-feature/handles.d.ts +5 -0
- package/dist/fence-feature/handles.d.ts.map +1 -0
- package/dist/fence-feature/handles.js +84 -0
- package/dist/fence-feature/inspector.d.ts +6 -0
- package/dist/fence-feature/inspector.d.ts.map +1 -0
- package/dist/fence-feature/inspector.js +214 -0
- package/dist/fence-feature/interaction.d.ts +3 -0
- package/dist/fence-feature/interaction.d.ts.map +1 -0
- package/dist/fence-feature/interaction.js +41 -0
- package/dist/fence-feature/move-session.d.ts +9 -0
- package/dist/fence-feature/move-session.d.ts.map +1 -0
- package/dist/fence-feature/move-session.js +48 -0
- package/dist/fence-feature/move-tool.d.ts +5 -0
- package/dist/fence-feature/move-tool.d.ts.map +1 -0
- package/dist/fence-feature/move-tool.js +58 -0
- package/dist/fence-feature/pick-target.d.ts +7 -0
- package/dist/fence-feature/pick-target.d.ts.map +1 -0
- package/dist/fence-feature/pick-target.js +52 -0
- package/dist/floor-opening/definition.d.ts +3 -0
- package/dist/floor-opening/definition.d.ts.map +1 -0
- package/dist/floor-opening/definition.js +41 -0
- package/dist/floor-opening/floorplan.d.ts +156 -0
- package/dist/floor-opening/floorplan.d.ts.map +1 -0
- package/dist/floor-opening/floorplan.js +63 -0
- package/dist/guide/definition.d.ts.map +1 -1
- package/dist/guide/definition.js +1 -0
- package/dist/gutter/definition.d.ts.map +1 -1
- package/dist/gutter/definition.js +3 -2
- package/dist/hvac-equipment/tool.d.ts.map +1 -1
- package/dist/hvac-equipment/tool.js +8 -2
- package/dist/imported-mesh/definition.d.ts.map +1 -1
- package/dist/imported-mesh/definition.js +2 -0
- package/dist/imported-mesh/geometry.d.ts +1 -1
- package/dist/imported-mesh/geometry.d.ts.map +1 -1
- package/dist/imported-mesh/geometry.js +40 -12
- package/dist/index.d.ts +13 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +20 -2
- package/dist/item/authored-face-host.d.ts +10 -0
- package/dist/item/authored-face-host.d.ts.map +1 -0
- package/dist/item/authored-face-host.js +87 -0
- package/dist/item/authored-params.d.ts +15 -0
- package/dist/item/authored-params.d.ts.map +1 -0
- package/dist/item/authored-params.js +72 -0
- package/dist/item/definition.d.ts +2 -2
- package/dist/item/definition.d.ts.map +1 -1
- package/dist/item/definition.js +35 -4
- package/dist/item/floorplan-move.d.ts.map +1 -1
- package/dist/item/floorplan-move.js +209 -130
- package/dist/item/floorplan.d.ts +22 -0
- package/dist/item/floorplan.d.ts.map +1 -1
- package/dist/item/floorplan.js +95 -6
- package/dist/item/index.d.ts +1 -0
- package/dist/item/index.d.ts.map +1 -1
- package/dist/item/index.js +1 -0
- package/dist/item/model-loader.d.ts +2 -0
- package/dist/item/model-loader.d.ts.map +1 -1
- package/dist/item/model-loader.js +55 -23
- package/dist/item/move-tool.d.ts +1 -1
- package/dist/item/move-tool.d.ts.map +1 -1
- package/dist/item/move-tool.js +19 -11
- package/dist/item/paint.d.ts.map +1 -1
- package/dist/item/paint.js +5 -24
- package/dist/item/panel.d.ts +1 -3
- package/dist/item/panel.d.ts.map +1 -1
- package/dist/item/panel.js +20 -24
- package/dist/item/placement-notice.d.ts +14 -0
- package/dist/item/placement-notice.d.ts.map +1 -0
- package/dist/item/placement-notice.js +38 -0
- package/dist/item/plan-symbols.d.ts +67 -0
- package/dist/item/plan-symbols.d.ts.map +1 -0
- package/dist/item/plan-symbols.js +407 -0
- package/dist/item/renderer.d.ts +10 -0
- package/dist/item/renderer.d.ts.map +1 -1
- package/dist/item/renderer.js +72 -40
- package/dist/item/script-param-defaults.d.ts +12 -0
- package/dist/item/script-param-defaults.d.ts.map +1 -0
- package/dist/item/script-param-defaults.js +34 -0
- package/dist/lean-to-extension/definition.d.ts.map +1 -1
- package/dist/lean-to-extension/definition.js +1 -2
- package/dist/lean-to-extension/geometry.d.ts.map +1 -1
- package/dist/lean-to-extension/geometry.js +1 -1
- package/dist/lean-to-extension/layout.d.ts.map +1 -1
- package/dist/lean-to-extension/layout.js +2 -3
- package/dist/lean-to-extension/placement-validation.d.ts.map +1 -1
- package/dist/lean-to-extension/placement-validation.js +5 -5
- package/dist/lean-to-extension/tool.d.ts.map +1 -1
- package/dist/lean-to-extension/tool.js +5 -5
- package/dist/level/renderer.js +1 -1
- package/dist/lineset/move-tool.d.ts.map +1 -1
- package/dist/lineset/move-tool.js +8 -2
- package/dist/lineset/tool.d.ts.map +1 -1
- package/dist/lineset/tool.js +1 -0
- package/dist/liquid-line/move-tool.d.ts.map +1 -1
- package/dist/liquid-line/move-tool.js +8 -2
- package/dist/liquid-line/tool.d.ts.map +1 -1
- package/dist/liquid-line/tool.js +5 -1
- package/dist/measurement/definition.d.ts.map +1 -1
- package/dist/measurement/definition.js +2 -1
- package/dist/pipe-fitting/move-tool.d.ts.map +1 -1
- package/dist/pipe-fitting/move-tool.js +8 -2
- package/dist/pipe-segment/move-tool.d.ts.map +1 -1
- package/dist/pipe-segment/move-tool.js +8 -2
- package/dist/pipe-segment/tool.d.ts.map +1 -1
- package/dist/pipe-segment/tool.js +14 -3
- package/dist/pipe-trap/tool.d.ts.map +1 -1
- package/dist/pipe-trap/tool.js +7 -8
- package/dist/procedural-item/animation.d.ts +8 -0
- package/dist/procedural-item/animation.d.ts.map +1 -0
- package/dist/procedural-item/animation.js +116 -0
- package/dist/procedural-item/definition.d.ts.map +1 -1
- package/dist/procedural-item/definition.js +77 -8
- package/dist/procedural-item/geometry.d.ts +5 -1
- package/dist/procedural-item/geometry.d.ts.map +1 -1
- package/dist/procedural-item/geometry.js +239 -15
- package/dist/procedural-item/renderer.d.ts.map +1 -1
- package/dist/procedural-item/renderer.js +272 -23
- package/dist/ridge-vent/definition.d.ts.map +1 -1
- package/dist/ridge-vent/definition.js +1 -0
- package/dist/ridge-vent/panel.d.ts.map +1 -1
- package/dist/ridge-vent/panel.js +5 -23
- package/dist/ridge-vent/renderer.d.ts.map +1 -1
- package/dist/ridge-vent/renderer.js +9 -8
- package/dist/roof/definition.d.ts.map +1 -1
- package/dist/roof/definition.js +8 -2
- package/dist/roof/floorplan.d.ts +8 -0
- package/dist/roof/floorplan.d.ts.map +1 -1
- package/dist/roof/floorplan.js +194 -18
- package/dist/roof/panel-model.d.ts +4 -0
- package/dist/roof/panel-model.d.ts.map +1 -0
- package/dist/roof/panel-model.js +155 -0
- package/dist/roof/panel.d.ts.map +1 -1
- package/dist/roof/panel.js +5 -13
- package/dist/roof/parametrics.d.ts.map +1 -1
- package/dist/roof/parametrics.js +16 -1
- package/dist/roof/renderer.d.ts.map +1 -1
- package/dist/roof/renderer.js +5 -2
- package/dist/roof-segment/definition.d.ts.map +1 -1
- package/dist/roof-segment/definition.js +1 -0
- package/dist/roof-segment/panel.d.ts.map +1 -1
- package/dist/roof-segment/panel.js +5 -24
- package/dist/roof-segment/parametrics.d.ts.map +1 -1
- package/dist/roof-segment/parametrics.js +176 -1
- package/dist/roof-segment/renderer.d.ts.map +1 -1
- package/dist/roof-segment/renderer.js +17 -8
- package/dist/scan/definition.d.ts.map +1 -1
- package/dist/scan/definition.js +1 -0
- package/dist/separator/definition.d.ts +3 -0
- package/dist/separator/definition.d.ts.map +1 -0
- package/dist/separator/definition.js +39 -0
- package/dist/separator/renderer.d.ts +5 -0
- package/dist/separator/renderer.d.ts.map +1 -0
- package/dist/separator/renderer.js +36 -0
- package/dist/shared/commit-opening-move.d.ts +4 -0
- package/dist/shared/commit-opening-move.d.ts.map +1 -0
- package/dist/shared/commit-opening-move.js +9 -0
- package/dist/shared/curtain-opening-limits.d.ts +14 -0
- package/dist/shared/curtain-opening-limits.d.ts.map +1 -0
- package/dist/shared/curtain-opening-limits.js +53 -0
- package/dist/shared/draft-axis-guides.d.ts +0 -6
- package/dist/shared/draft-axis-guides.d.ts.map +1 -1
- package/dist/shared/draft-axis-guides.js +1 -8
- package/dist/shared/duct-body-paint.d.ts +0 -4
- package/dist/shared/duct-body-paint.d.ts.map +1 -1
- package/dist/shared/duct-body-paint.js +1 -5
- package/dist/shared/hosted-resize.d.ts +12 -0
- package/dist/shared/hosted-resize.d.ts.map +1 -0
- package/dist/shared/hosted-resize.js +166 -0
- package/dist/shared/item-interaction-actions.d.ts +6 -0
- package/dist/shared/item-interaction-actions.d.ts.map +1 -0
- package/dist/shared/item-interaction-actions.js +27 -0
- package/dist/shared/item-interactions.d.ts +9 -0
- package/dist/shared/item-interactions.d.ts.map +1 -0
- package/dist/shared/item-interactions.js +74 -0
- package/dist/shared/item-light-placement.d.ts +2 -0
- package/dist/shared/item-light-placement.d.ts.map +1 -0
- package/dist/shared/item-light-placement.js +3 -0
- package/dist/shared/move-roof-tool.js +2 -1
- package/dist/shared/node-batch/batchable.d.ts +12 -0
- package/dist/shared/node-batch/batchable.d.ts.map +1 -0
- package/dist/shared/node-batch/batchable.js +41 -0
- package/dist/shared/node-batch/candidates.d.ts +7 -5
- package/dist/shared/node-batch/candidates.d.ts.map +1 -1
- package/dist/shared/node-batch/candidates.js +43 -59
- package/dist/shared/node-batch/release.d.ts +8 -0
- package/dist/shared/node-batch/release.d.ts.map +1 -0
- package/dist/shared/node-batch/release.js +16 -0
- package/dist/shared/node-batch/system.d.ts.map +1 -1
- package/dist/shared/node-batch/system.js +17 -12
- package/dist/shared/node-batch/types.d.ts +4 -1
- package/dist/shared/node-batch/types.d.ts.map +1 -1
- package/dist/shared/opening-documentation.d.ts +13 -1
- package/dist/shared/opening-documentation.d.ts.map +1 -1
- package/dist/shared/opening-documentation.js +245 -59
- package/dist/shared/opening-grid-follow.d.ts +8 -0
- package/dist/shared/opening-grid-follow.d.ts.map +1 -0
- package/dist/shared/opening-grid-follow.js +12 -0
- package/dist/shared/opening-guides-runtime.d.ts.map +1 -1
- package/dist/shared/opening-guides-runtime.js +17 -14
- package/dist/shared/opening-placement-dimensions.d.ts.map +1 -1
- package/dist/shared/opening-placement-dimensions.js +3 -3
- package/dist/shared/opening-plane-offset.d.ts +23 -0
- package/dist/shared/opening-plane-offset.d.ts.map +1 -0
- package/dist/shared/opening-plane-offset.js +24 -0
- package/dist/shared/opening-property-preview-host.d.ts +3 -0
- package/dist/shared/opening-property-preview-host.d.ts.map +1 -0
- package/dist/shared/opening-property-preview-host.js +21 -0
- package/dist/shared/opening-property-preview.d.ts +19 -0
- package/dist/shared/opening-property-preview.d.ts.map +1 -0
- package/dist/shared/opening-property-preview.js +99 -0
- package/dist/shared/polygon-centroid-move.d.ts.map +1 -1
- package/dist/shared/polygon-centroid-move.js +4 -1
- package/dist/shared/polygon-vertex-affordance.d.ts.map +1 -1
- package/dist/shared/polygon-vertex-affordance.js +19 -15
- package/dist/shared/resting-surface-plan.d.ts +2 -1
- package/dist/shared/resting-surface-plan.d.ts.map +1 -1
- package/dist/shared/resting-surface-plan.js +29 -4
- package/dist/shared/run-hangers.d.ts.map +1 -1
- package/dist/shared/run-hangers.js +5 -4
- package/dist/shared/scripted-opening-handles.d.ts +18 -0
- package/dist/shared/scripted-opening-handles.d.ts.map +1 -0
- package/dist/shared/scripted-opening-handles.js +53 -0
- package/dist/shared/scripted-opening.d.ts +25 -0
- package/dist/shared/scripted-opening.d.ts.map +1 -0
- package/dist/shared/scripted-opening.js +72 -0
- package/dist/shared/slot-paint.d.ts +14 -2
- package/dist/shared/slot-paint.d.ts.map +1 -1
- package/dist/shared/slot-paint.js +29 -29
- package/dist/shared/surface-counterparts.d.ts +12 -0
- package/dist/shared/surface-counterparts.d.ts.map +1 -0
- package/dist/shared/surface-counterparts.js +27 -0
- package/dist/shared/surface-paint.d.ts.map +1 -1
- package/dist/shared/surface-paint.js +2 -5
- package/dist/shared/swap-preview-material.d.ts +11 -0
- package/dist/shared/swap-preview-material.d.ts.map +1 -0
- package/dist/shared/swap-preview-material.js +16 -0
- package/dist/shared/system-checks.d.ts.map +1 -1
- package/dist/shared/system-checks.js +5 -3
- package/dist/shared/wall-attach-target.d.ts +4 -10
- package/dist/shared/wall-attach-target.d.ts.map +1 -1
- package/dist/shared/wall-attach-target.js +6 -63
- package/dist/shared/wall-event-from-grid.d.ts +5 -0
- package/dist/shared/wall-event-from-grid.d.ts.map +1 -0
- package/dist/shared/wall-event-from-grid.js +36 -0
- package/dist/shared/wall-opening-ceiling.d.ts +5 -15
- package/dist/shared/wall-opening-ceiling.d.ts.map +1 -1
- package/dist/shared/wall-opening-ceiling.js +10 -18
- package/dist/shelf/definition.d.ts.map +1 -1
- package/dist/shelf/definition.js +4 -2
- package/dist/shelf/floorplan.d.ts.map +1 -1
- package/dist/shelf/floorplan.js +9 -2
- package/dist/shelf/geometry.d.ts.map +1 -1
- package/dist/shelf/geometry.js +1 -2
- package/dist/shelf/paint.d.ts.map +1 -1
- package/dist/shelf/paint.js +4 -10
- package/dist/site/line-ribbon.d.ts +31 -0
- package/dist/site/line-ribbon.d.ts.map +1 -0
- package/dist/site/line-ribbon.js +117 -0
- package/dist/site/lot-mask.d.ts +18 -0
- package/dist/site/lot-mask.d.ts.map +1 -0
- package/dist/site/lot-mask.js +35 -0
- package/dist/site/panel.d.ts +10 -0
- package/dist/site/panel.d.ts.map +1 -0
- package/dist/site/panel.js +155 -0
- package/dist/site/parametrics.d.ts +7 -0
- package/dist/site/parametrics.d.ts.map +1 -1
- package/dist/site/parametrics.js +8 -0
- package/dist/site/recessed-slab-ground-holes.d.ts.map +1 -1
- package/dist/site/recessed-slab-ground-holes.js +5 -2
- package/dist/site/renderer.d.ts.map +1 -1
- package/dist/site/renderer.js +158 -20
- package/dist/site/setbacks.d.ts +33 -0
- package/dist/site/setbacks.d.ts.map +1 -0
- package/dist/site/setbacks.js +204 -0
- package/dist/site/terrain-geometry.d.ts +28 -1
- package/dist/site/terrain-geometry.d.ts.map +1 -1
- package/dist/site/terrain-geometry.js +78 -4
- package/dist/site/terrain-holes.d.ts +15 -0
- package/dist/site/terrain-holes.d.ts.map +1 -0
- package/dist/site/terrain-holes.js +74 -0
- package/dist/site/terrain-mesh.d.ts +9 -2
- package/dist/site/terrain-mesh.d.ts.map +1 -1
- package/dist/site/terrain-mesh.js +36 -9
- package/dist/site/terrain-renderer.d.ts +9 -2
- package/dist/site/terrain-renderer.d.ts.map +1 -1
- package/dist/site/terrain-renderer.js +14 -4
- package/dist/skylight/definition.d.ts.map +1 -1
- package/dist/skylight/definition.js +1 -0
- package/dist/slab/boundary-editor.d.ts +1 -1
- package/dist/slab/boundary-editor.d.ts.map +1 -1
- package/dist/slab/boundary-editor.js +13 -13
- package/dist/slab/definition.d.ts.map +1 -1
- package/dist/slab/definition.js +23 -3
- package/dist/slab/dependency-tracker.d.ts.map +1 -1
- package/dist/slab/dependency-tracker.js +67 -7
- package/dist/slab/elevation-limit.d.ts.map +1 -1
- package/dist/slab/elevation-limit.js +2 -2
- package/dist/slab/floorplan-affordances.d.ts +176 -4
- package/dist/slab/floorplan-affordances.d.ts.map +1 -1
- package/dist/slab/floorplan-affordances.js +0 -1
- package/dist/slab/floorplan-move.d.ts.map +1 -1
- package/dist/slab/floorplan-move.js +3 -4
- package/dist/slab/floorplan.d.ts +7 -0
- package/dist/slab/floorplan.d.ts.map +1 -1
- package/dist/slab/floorplan.js +22 -5
- package/dist/slab/geometry.d.ts.map +1 -1
- package/dist/slab/geometry.js +186 -76
- package/dist/slab/move-tool.js +7 -6
- package/dist/slab/paint.d.ts +18 -5
- package/dist/slab/paint.d.ts.map +1 -1
- package/dist/slab/paint.js +458 -9
- package/dist/slab/panel.d.ts.map +1 -1
- package/dist/slab/panel.js +28 -9
- package/dist/slab/placement-ownership.d.ts +2 -1
- package/dist/slab/placement-ownership.d.ts.map +1 -1
- package/dist/slab/placement-ownership.js +2 -2
- package/dist/slab/surface-split.d.ts +24 -0
- package/dist/slab/surface-split.d.ts.map +1 -0
- package/dist/slab/surface-split.js +389 -0
- package/dist/slab/tool.d.ts.map +1 -1
- package/dist/slab/tool.js +3 -3
- package/dist/solar-panel/definition.d.ts.map +1 -1
- package/dist/solar-panel/definition.js +1 -0
- package/dist/spawn/definition.d.ts.map +1 -1
- package/dist/spawn/definition.js +1 -0
- package/dist/stair/baluster-geometry.d.ts +21 -0
- package/dist/stair/baluster-geometry.d.ts.map +1 -0
- package/dist/stair/baluster-geometry.js +74 -0
- package/dist/stair/baluster-guard.d.ts +50 -0
- package/dist/stair/baluster-guard.d.ts.map +1 -0
- package/dist/stair/baluster-guard.js +71 -0
- package/dist/stair/boards-guard.d.ts +37 -0
- package/dist/stair/boards-guard.d.ts.map +1 -0
- package/dist/stair/boards-guard.js +61 -0
- package/dist/stair/cable-guard.d.ts +39 -0
- package/dist/stair/cable-guard.d.ts.map +1 -0
- package/dist/stair/cable-guard.js +105 -0
- package/dist/stair/construction-controls.d.ts +15 -0
- package/dist/stair/construction-controls.d.ts.map +1 -0
- package/dist/stair/construction-controls.js +29 -0
- package/dist/stair/continuous-railings.d.ts +10 -0
- package/dist/stair/continuous-railings.d.ts.map +1 -0
- package/dist/stair/continuous-railings.js +159 -0
- package/dist/stair/definition.d.ts.map +1 -1
- package/dist/stair/definition.js +18 -37
- package/dist/stair/documentation.d.ts +1 -1
- package/dist/stair/documentation.d.ts.map +1 -1
- package/dist/stair/documentation.js +10 -17
- package/dist/stair/floorplan-affordances.d.ts.map +1 -1
- package/dist/stair/floorplan-affordances.js +9 -25
- package/dist/stair/floorplan.d.ts +1 -23
- package/dist/stair/floorplan.d.ts.map +1 -1
- package/dist/stair/floorplan.js +102 -86
- package/dist/stair/glass-guard.d.ts +72 -0
- package/dist/stair/glass-guard.d.ts.map +1 -0
- package/dist/stair/glass-guard.js +167 -0
- package/dist/stair/guard-path.d.ts +119 -0
- package/dist/stair/guard-path.d.ts.map +1 -0
- package/dist/stair/guard-path.js +208 -0
- package/dist/stair/materials.d.ts +11 -0
- package/dist/stair/materials.d.ts.map +1 -0
- package/dist/stair/materials.js +51 -0
- package/dist/stair/metal-guard.d.ts +38 -0
- package/dist/stair/metal-guard.d.ts.map +1 -0
- package/dist/stair/metal-guard.js +79 -0
- package/dist/stair/paint.d.ts +32 -0
- package/dist/stair/paint.d.ts.map +1 -1
- package/dist/stair/paint.js +75 -36
- package/dist/stair/panel.d.ts.map +1 -1
- package/dist/stair/panel.js +154 -17
- package/dist/stair/parametrics.d.ts +1 -1
- package/dist/stair/parametrics.d.ts.map +1 -1
- package/dist/stair/parametrics.js +181 -1
- package/dist/stair/plan-entry.d.ts +31 -0
- package/dist/stair/plan-entry.d.ts.map +1 -0
- package/dist/stair/plan-entry.js +325 -0
- package/dist/stair/post-and-rail-guard.d.ts +31 -0
- package/dist/stair/post-and-rail-guard.d.ts.map +1 -0
- package/dist/stair/post-and-rail-guard.js +63 -0
- package/dist/stair/railing-controls.d.ts +9 -0
- package/dist/stair/railing-controls.d.ts.map +1 -0
- package/dist/stair/railing-controls.js +49 -0
- package/dist/stair/renderer.d.ts.map +1 -1
- package/dist/stair/renderer.js +259 -259
- package/dist/stair/use-stair-render-data.d.ts +317 -0
- package/dist/stair/use-stair-render-data.d.ts.map +1 -0
- package/dist/stair/use-stair-render-data.js +73 -0
- package/dist/stair-segment/definition.d.ts.map +1 -1
- package/dist/stair-segment/definition.js +52 -10
- package/dist/stair-segment/panel.d.ts.map +1 -1
- package/dist/stair-segment/panel.js +36 -42
- package/dist/stair-segment/parametrics.d.ts +1 -1
- package/dist/stair-segment/parametrics.d.ts.map +1 -1
- package/dist/stair-segment/parametrics.js +94 -1
- package/dist/stair-segment/renderer.d.ts.map +1 -1
- package/dist/stair-segment/renderer.js +16 -28
- package/dist/turbine-vent/definition.d.ts.map +1 -1
- package/dist/turbine-vent/definition.js +3 -5
- package/dist/turbine-vent/paint.d.ts.map +1 -1
- package/dist/turbine-vent/paint.js +2 -5
- package/dist/turbine-vent/panel.d.ts.map +1 -1
- package/dist/turbine-vent/panel.js +5 -23
- package/dist/unit/unit-panel.d.ts.map +1 -1
- package/dist/unit/unit-panel.js +6 -1
- package/dist/wall/actions.d.ts +3 -0
- package/dist/wall/actions.d.ts.map +1 -0
- package/dist/wall/actions.js +61 -0
- package/dist/wall/construction-dimensions.js +8 -5
- package/dist/wall/contextual-dimensions.js +4 -4
- package/dist/wall/curtain-opening-frame.d.ts +14 -0
- package/dist/wall/curtain-opening-frame.d.ts.map +1 -0
- package/dist/wall/curtain-opening-frame.js +111 -0
- package/dist/wall/curtain-panel-highlight.d.ts +3 -0
- package/dist/wall/curtain-panel-highlight.d.ts.map +1 -0
- package/dist/wall/curtain-panel-highlight.js +113 -0
- package/dist/wall/curtain-wall-adapter.d.ts +3 -0
- package/dist/wall/curtain-wall-adapter.d.ts.map +1 -0
- package/dist/wall/curtain-wall-adapter.js +55 -0
- package/dist/wall/curtain-wall-floorplan.d.ts +3 -0
- package/dist/wall/curtain-wall-floorplan.d.ts.map +1 -0
- package/dist/wall/curtain-wall-floorplan.js +91 -0
- package/dist/wall/curtain-wall-geometry.d.ts +4 -0
- package/dist/wall/curtain-wall-geometry.d.ts.map +1 -0
- package/dist/wall/curtain-wall-geometry.js +226 -0
- package/dist/wall/curtain-wall-layout.d.ts +16 -0
- package/dist/wall/curtain-wall-layout.d.ts.map +1 -0
- package/dist/wall/curtain-wall-layout.js +176 -0
- package/dist/wall/curtain-wall-materials.d.ts +5 -0
- package/dist/wall/curtain-wall-materials.d.ts.map +1 -0
- package/dist/wall/curtain-wall-materials.js +55 -0
- package/dist/wall/curtain-wall-panel.d.ts +14 -0
- package/dist/wall/curtain-wall-panel.d.ts.map +1 -0
- package/dist/wall/curtain-wall-panel.js +167 -0
- package/dist/wall/curtain-wall-piece-geometry.d.ts +5 -0
- package/dist/wall/curtain-wall-piece-geometry.d.ts.map +1 -0
- package/dist/wall/curtain-wall-piece-geometry.js +220 -0
- package/dist/wall/curtain-wall-shadow.d.ts +4 -0
- package/dist/wall/curtain-wall-shadow.d.ts.map +1 -0
- package/dist/wall/curtain-wall-shadow.js +15 -0
- package/dist/wall/curve-tool.d.ts.map +1 -1
- package/dist/wall/curve-tool.js +4 -0
- package/dist/wall/definition.d.ts +0 -15
- package/dist/wall/definition.d.ts.map +1 -1
- package/dist/wall/definition.js +92 -7
- package/dist/wall/floorplan-move.d.ts +1 -1
- package/dist/wall/floorplan-move.d.ts.map +1 -1
- package/dist/wall/floorplan-move.js +20 -83
- package/dist/wall/floorplan-tool.d.ts +4 -0
- package/dist/wall/floorplan-tool.d.ts.map +1 -0
- package/dist/wall/floorplan-tool.js +106 -0
- package/dist/wall/floorplan.d.ts +3 -1
- package/dist/wall/floorplan.d.ts.map +1 -1
- package/dist/wall/floorplan.js +189 -22
- package/dist/wall/length-patch.d.ts +3 -0
- package/dist/wall/length-patch.d.ts.map +1 -0
- package/dist/wall/length-patch.js +14 -0
- package/dist/wall/measurement.d.ts.map +1 -1
- package/dist/wall/measurement.js +5 -5
- package/dist/wall/move-endpoint-tool.d.ts.map +1 -1
- package/dist/wall/move-endpoint-tool.js +20 -7
- package/dist/wall/move-shared.d.ts.map +1 -1
- package/dist/wall/move-shared.js +11 -7
- package/dist/wall/move-tool.d.ts.map +1 -1
- package/dist/wall/move-tool.js +140 -148
- package/dist/wall/paint.d.ts +26 -15
- package/dist/wall/paint.d.ts.map +1 -1
- package/dist/wall/paint.js +339 -115
- package/dist/wall/panel-model.d.ts +22 -0
- package/dist/wall/panel-model.d.ts.map +1 -0
- package/dist/wall/panel-model.js +175 -0
- package/dist/wall/panel.d.ts.map +1 -1
- package/dist/wall/panel.js +233 -61
- package/dist/wall/parametrics.d.ts.map +1 -1
- package/dist/wall/parametrics.js +3 -0
- package/dist/wall/property-preview.d.ts +7 -0
- package/dist/wall/property-preview.d.ts.map +1 -0
- package/dist/wall/property-preview.js +31 -0
- package/dist/wall/rectangle-command.d.ts +248 -0
- package/dist/wall/rectangle-command.d.ts.map +1 -0
- package/dist/wall/rectangle-command.js +22 -0
- package/dist/wall/rectangle-tool.d.ts +2 -0
- package/dist/wall/rectangle-tool.d.ts.map +1 -0
- package/dist/wall/rectangle-tool.js +165 -0
- package/dist/wall/renderer.d.ts.map +1 -1
- package/dist/wall/renderer.js +9 -4
- package/dist/wall/split-floorplan-layer.d.ts +4 -0
- package/dist/wall/split-floorplan-layer.d.ts.map +1 -0
- package/dist/wall/split-floorplan-layer.js +71 -0
- package/dist/wall/split-pointer.d.ts +3 -0
- package/dist/wall/split-pointer.d.ts.map +1 -0
- package/dist/wall/split-pointer.js +95 -0
- package/dist/wall/split-preview.d.ts +55 -0
- package/dist/wall/split-preview.d.ts.map +1 -0
- package/dist/wall/split-preview.js +106 -0
- package/dist/wall/split-session.d.ts +16 -0
- package/dist/wall/split-session.d.ts.map +1 -0
- package/dist/wall/split-session.js +144 -0
- package/dist/wall/split-store.d.ts +16 -0
- package/dist/wall/split-store.d.ts.map +1 -0
- package/dist/wall/split-store.js +6 -0
- package/dist/wall/split-tool.d.ts +10 -0
- package/dist/wall/split-tool.d.ts.map +1 -0
- package/dist/wall/split-tool.js +95 -0
- package/dist/wall/system.d.ts.map +1 -1
- package/dist/wall/system.js +39 -5
- package/dist/wall/tool.d.ts.map +1 -1
- package/dist/wall/tool.js +114 -50
- package/dist/wall/treatment-level-data.d.ts +3 -2
- package/dist/wall/treatment-level-data.d.ts.map +1 -1
- package/dist/wall/treatment-level-data.js +17 -13
- package/dist/wall/treatments.d.ts +10 -10
- package/dist/wall/treatments.d.ts.map +1 -1
- package/dist/wall/treatments.js +67 -54
- package/dist/wall/wall-batch-system.d.ts +7 -0
- package/dist/wall/wall-batch-system.d.ts.map +1 -1
- package/dist/wall/wall-batch-system.js +38 -3
- package/dist/wall/wall-batch.d.ts +6 -0
- package/dist/wall/wall-batch.d.ts.map +1 -1
- package/dist/wall/wall-batch.js +7 -1
- package/dist/window/definition.d.ts.map +1 -1
- package/dist/window/definition.js +60 -5
- package/dist/window/floorplan-affordances.d.ts.map +1 -1
- package/dist/window/floorplan-affordances.js +8 -10
- package/dist/window/floorplan-move.d.ts.map +1 -1
- package/dist/window/floorplan-move.js +3 -1
- package/dist/window/floorplan.d.ts.map +1 -1
- package/dist/window/floorplan.js +145 -60
- package/dist/window/mechanism.d.ts +4 -0
- package/dist/window/mechanism.d.ts.map +1 -0
- package/dist/window/mechanism.js +20 -0
- package/dist/window/move-tool.d.ts.map +1 -1
- package/dist/window/move-tool.js +83 -54
- package/dist/window/paint.d.ts.map +1 -1
- package/dist/window/paint.js +3 -0
- package/dist/window/panel.d.ts.map +1 -1
- package/dist/window/panel.js +50 -144
- package/dist/window/placement.d.ts +23 -0
- package/dist/window/placement.d.ts.map +1 -0
- package/dist/window/placement.js +66 -0
- package/dist/window/preview.d.ts.map +1 -1
- package/dist/window/preview.js +2 -0
- package/dist/window/renderer.d.ts.map +1 -1
- package/dist/window/renderer.js +3 -2
- package/dist/window/tool.d.ts.map +1 -1
- package/dist/window/tool.js +130 -26
- package/dist/window/window-math.d.ts +6 -14
- package/dist/window/window-math.d.ts.map +1 -1
- package/dist/window/window-math.js +13 -22
- package/dist/zone/contextual-dimensions.d.ts.map +1 -1
- package/dist/zone/contextual-dimensions.js +6 -28
- package/dist/zone/definition.d.ts.map +1 -1
- package/dist/zone/definition.js +4 -3
- package/dist/zone/floorplan-affordances.d.ts +200 -0
- package/dist/zone/floorplan-affordances.d.ts.map +1 -1
- package/dist/zone/floorplan.d.ts +1 -1
- package/dist/zone/floorplan.d.ts.map +1 -1
- package/dist/zone/floorplan.js +93 -53
- package/dist/zone/quantities-panel.d.ts.map +1 -1
- package/dist/zone/quantities-panel.js +6 -33
- package/dist/zone/quick-measurement.d.ts +2 -2
- package/dist/zone/quick-measurement.d.ts.map +1 -1
- package/dist/zone/quick-measurement.js +6 -5
- package/dist/zone/renderer.d.ts +1 -1
- package/dist/zone/renderer.d.ts.map +1 -1
- package/dist/zone/renderer.js +58 -146
- package/dist/zone/room-clear-dimensions.js +3 -3
- package/dist/zone/room-documentation.d.ts.map +1 -1
- package/dist/zone/room-documentation.js +2 -6
- package/package.json +12 -12
- package/dist/block/slots.d.ts +0 -4
- package/dist/block/slots.d.ts.map +0 -1
- package/dist/block/slots.js +0 -17
- package/dist/cabinet/slots.d.ts +0 -4
- package/dist/cabinet/slots.d.ts.map +0 -1
- package/dist/cabinet/slots.js +0 -24
- package/dist/ceiling/slots.d.ts +0 -6
- package/dist/ceiling/slots.d.ts.map +0 -1
- package/dist/ceiling/slots.js +0 -7
- package/dist/column/slots.d.ts +0 -9
- package/dist/column/slots.d.ts.map +0 -1
- package/dist/column/slots.js +0 -19
- package/dist/door/slots.d.ts +0 -9
- package/dist/door/slots.d.ts.map +0 -1
- package/dist/door/slots.js +0 -20
- package/dist/elevator/slots.d.ts +0 -8
- package/dist/elevator/slots.d.ts.map +0 -1
- package/dist/elevator/slots.js +0 -17
- package/dist/fence/slots.d.ts +0 -10
- package/dist/fence/slots.d.ts.map +0 -1
- package/dist/fence/slots.js +0 -23
- package/dist/lean-to-extension/slots.d.ts +0 -5
- package/dist/lean-to-extension/slots.d.ts.map +0 -1
- package/dist/lean-to-extension/slots.js +0 -15
- package/dist/shared/opening-documentation-fields.d.ts +0 -16
- package/dist/shared/opening-documentation-fields.d.ts.map +0 -1
- package/dist/shared/opening-documentation-fields.js +0 -54
- package/dist/shelf/slots.d.ts +0 -9
- package/dist/shelf/slots.d.ts.map +0 -1
- package/dist/shelf/slots.js +0 -30
- package/dist/slab/slots.d.ts +0 -10
- package/dist/slab/slots.d.ts.map +0 -1
- package/dist/slab/slots.js +0 -20
- package/dist/stair/floor-stack.d.ts +0 -10
- package/dist/stair/floor-stack.d.ts.map +0 -1
- package/dist/stair/floor-stack.js +0 -115
- package/dist/stair/slots.d.ts +0 -7
- package/dist/stair/slots.d.ts.map +0 -1
- package/dist/stair/slots.js +0 -13
- package/dist/wall/slots.d.ts +0 -10
- package/dist/wall/slots.d.ts.map +0 -1
- package/dist/wall/slots.js +0 -84
- package/dist/window/slots.d.ts +0 -5
- package/dist/window/slots.d.ts.map +0 -1
- package/dist/window/slots.js +0 -11
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { generateSceneMaterialId, parseMaterialRef, sceneRegistry, toSceneMaterialRef, useScene, } from '@pascal-app/core';
|
|
1
|
+
import { generateSceneMaterialId, nodeRegistry, parseMaterialRef, sceneRegistry, slotDefaultPaintMaterial, slotPaintMaterial, toSceneMaterialRef, useScene, } from '@pascal-app/core';
|
|
2
2
|
import { createMaterial, createMaterialFromPresetRef, registerMaterialCacheCleanup, setSurfaceRaycastLayers, useViewer, } from '@pascal-app/viewer';
|
|
3
3
|
import { Raycaster } from 'three';
|
|
4
|
+
import { swapPreviewMaterial } from './swap-preview-material';
|
|
4
5
|
/**
|
|
5
6
|
* Shared paint capability for procedural kinds on the unified slot model
|
|
6
7
|
* (`node.slots: Record<slotId, MaterialRef>` + the shared scene-material
|
|
@@ -152,12 +153,12 @@ function commitSlotPaint(node, role, material, materialPreset) {
|
|
|
152
153
|
state.updateNode(nodeId, { slots: nextSlots });
|
|
153
154
|
}
|
|
154
155
|
/** Preview material for a slot paint — mirrors the commit's resolution. */
|
|
155
|
-
export function buildSlotPreviewMaterial(material, materialPreset) {
|
|
156
|
+
export function buildSlotPreviewMaterial(material, materialPreset, materials = useScene.getState().materials) {
|
|
156
157
|
const shading = useViewer.getState().shading;
|
|
157
158
|
if (materialPreset) {
|
|
158
159
|
const parsed = parseMaterialRef(materialPreset);
|
|
159
160
|
if (parsed?.kind === 'scene') {
|
|
160
|
-
const sceneMaterial =
|
|
161
|
+
const sceneMaterial = materials[parsed.id];
|
|
161
162
|
return sceneMaterial ? createMaterial(sceneMaterial.material, shading) : null;
|
|
162
163
|
}
|
|
163
164
|
return createMaterialFromPresetRef(materialPreset, shading);
|
|
@@ -172,8 +173,8 @@ export function buildSlotPreviewMaterial(material, materialPreset) {
|
|
|
172
173
|
* slot matches `role`, leaving hosted-child meshes (which can carry a colliding
|
|
173
174
|
* `userData.slotId` from their own GLB) untouched.
|
|
174
175
|
*/
|
|
175
|
-
export function previewGeometrySlot(args) {
|
|
176
|
-
const {
|
|
176
|
+
export function previewGeometrySlot(args, matches = (meshRole) => meshRole === args.role) {
|
|
177
|
+
const { root, material, materialPreset } = args;
|
|
177
178
|
const preview = buildSlotPreviewMaterial(material, materialPreset);
|
|
178
179
|
if (!preview)
|
|
179
180
|
return () => { };
|
|
@@ -186,13 +187,10 @@ export function previewGeometrySlot(args) {
|
|
|
186
187
|
const userData = mesh.userData;
|
|
187
188
|
if (userData.__fromGeometry !== true)
|
|
188
189
|
return;
|
|
189
|
-
|
|
190
|
+
const meshRole = userData.paintRole ?? userData.slotId;
|
|
191
|
+
if (!(meshRole && matches(meshRole)))
|
|
190
192
|
return;
|
|
191
|
-
|
|
192
|
-
mesh.material = preview;
|
|
193
|
-
restores.push(() => {
|
|
194
|
-
mesh.material = previous;
|
|
195
|
-
});
|
|
193
|
+
restores.push(swapPreviewMaterial(mesh, preview));
|
|
196
194
|
});
|
|
197
195
|
if (restores.length === 0)
|
|
198
196
|
return null;
|
|
@@ -223,11 +221,7 @@ export function previewSlotByUserData(args) {
|
|
|
223
221
|
return;
|
|
224
222
|
if (mesh.userData.slotId !== role)
|
|
225
223
|
return;
|
|
226
|
-
|
|
227
|
-
mesh.material = preview;
|
|
228
|
-
restores.push(() => {
|
|
229
|
-
mesh.material = previous;
|
|
230
|
-
});
|
|
224
|
+
restores.push(swapPreviewMaterial(mesh, preview));
|
|
231
225
|
});
|
|
232
226
|
if (restores.length === 0)
|
|
233
227
|
return null;
|
|
@@ -266,6 +260,14 @@ export function resolveSlotByReRaycast(args) {
|
|
|
266
260
|
}
|
|
267
261
|
return null;
|
|
268
262
|
}
|
|
263
|
+
/** A slot's declared default, as a look: what an unpainted slot draws. */
|
|
264
|
+
export function declaredSlotLook(node, role) {
|
|
265
|
+
const declared = nodeRegistry
|
|
266
|
+
.get(node.type)
|
|
267
|
+
?.capabilities?.slots?.(node)
|
|
268
|
+
.find((slot) => slot.slotId === role);
|
|
269
|
+
return slotDefaultPaintMaterial(declared?.default);
|
|
270
|
+
}
|
|
269
271
|
export function createSlotPaintCapability(config) {
|
|
270
272
|
return {
|
|
271
273
|
materialTarget: config.materialTarget,
|
|
@@ -284,8 +286,15 @@ export function createSlotPaintCapability(config) {
|
|
|
284
286
|
// Release before swapping materials, including each room/all-matching target.
|
|
285
287
|
const end = beginSlotPaintPreview(args.node.id);
|
|
286
288
|
let restore;
|
|
289
|
+
// The eraser previews what the surface looks like once erased.
|
|
290
|
+
const erasing = args.material === undefined && args.materialPreset === undefined;
|
|
291
|
+
const look = erasing
|
|
292
|
+
? config.erasedLook
|
|
293
|
+
? config.erasedLook(args)
|
|
294
|
+
: declaredSlotLook(args.node, args.role)
|
|
295
|
+
: null;
|
|
287
296
|
try {
|
|
288
|
-
restore = config.applyPreview(args);
|
|
297
|
+
restore = config.applyPreview(look ? { ...args, ...look } : args);
|
|
289
298
|
}
|
|
290
299
|
catch (error) {
|
|
291
300
|
end();
|
|
@@ -312,17 +321,8 @@ export function createSlotPaintCapability(config) {
|
|
|
312
321
|
};
|
|
313
322
|
return Object.assign(() => finish(false), { commit: () => finish(true) });
|
|
314
323
|
},
|
|
315
|
-
getEffectiveMaterial: ({ node, role }) =>
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
if (parsed) {
|
|
319
|
-
if (parsed.kind === 'library')
|
|
320
|
-
return { material: undefined, materialPreset: ref };
|
|
321
|
-
const sceneMaterial = useScene.getState().materials[parsed.id];
|
|
322
|
-
if (sceneMaterial)
|
|
323
|
-
return { material: sceneMaterial.material, materialPreset: undefined };
|
|
324
|
-
}
|
|
325
|
-
return config.legacyEffective?.(node, role) ?? null;
|
|
326
|
-
},
|
|
324
|
+
getEffectiveMaterial: ({ node, role, materials = {} }) => slotPaintMaterial(node.slots?.[role], materials) ??
|
|
325
|
+
config.legacyEffective?.(node, role) ??
|
|
326
|
+
null,
|
|
327
327
|
};
|
|
328
328
|
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { AnyNode, AnyNodeId } from '@pascal-app/core';
|
|
2
|
+
/**
|
|
3
|
+
* The other surface of the same room: a slab's ceiling, a ceiling's slab —
|
|
4
|
+
* on the same level with the same outline. The plan draws them on top of each
|
|
5
|
+
* other (only the slab takes a click), so deselecting one deselects both.
|
|
6
|
+
* Both kinds declare it as their plan `selectionCounterparts`.
|
|
7
|
+
*/
|
|
8
|
+
export declare function sameOutlineSurfaceCounterparts({ node, nodes, }: {
|
|
9
|
+
node: AnyNode;
|
|
10
|
+
nodes: Readonly<Record<string, AnyNode | undefined>>;
|
|
11
|
+
}): AnyNodeId[];
|
|
12
|
+
//# sourceMappingURL=surface-counterparts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"surface-counterparts.d.ts","sourceRoot":"","sources":["../../src/shared/surface-counterparts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAwB1D;;;;;GAKG;AACH,wBAAgB,8BAA8B,CAAC,EAC7C,IAAI,EACJ,KAAK,GACN,EAAE;IACD,IAAI,EAAE,OAAO,CAAA;IACb,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,SAAS,CAAC,CAAC,CAAA;CACrD,GAAG,SAAS,EAAE,CAYd"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
const POINT_EPSILON = 1e-6;
|
|
2
|
+
function isSurface(node) {
|
|
3
|
+
return ((node?.type === 'slab' || node?.type === 'ceiling') &&
|
|
4
|
+
Array.isArray(node.polygon));
|
|
5
|
+
}
|
|
6
|
+
function samePolygon(a, b) {
|
|
7
|
+
return (a.length === b.length &&
|
|
8
|
+
a.every((point, index) => Math.abs(point[0] - b[index][0]) <= POINT_EPSILON &&
|
|
9
|
+
Math.abs(point[1] - b[index][1]) <= POINT_EPSILON));
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* The other surface of the same room: a slab's ceiling, a ceiling's slab —
|
|
13
|
+
* on the same level with the same outline. The plan draws them on top of each
|
|
14
|
+
* other (only the slab takes a click), so deselecting one deselects both.
|
|
15
|
+
* Both kinds declare it as their plan `selectionCounterparts`.
|
|
16
|
+
*/
|
|
17
|
+
export function sameOutlineSurfaceCounterparts({ node, nodes, }) {
|
|
18
|
+
if (!isSurface(node))
|
|
19
|
+
return [];
|
|
20
|
+
const other = node.type === 'slab' ? 'ceiling' : 'slab';
|
|
21
|
+
return Object.values(nodes)
|
|
22
|
+
.filter((candidate) => isSurface(candidate) &&
|
|
23
|
+
candidate.type === other &&
|
|
24
|
+
(candidate.parentId ?? null) === (node.parentId ?? null) &&
|
|
25
|
+
samePolygon(candidate.polygon, node.polygon))
|
|
26
|
+
.map((candidate) => candidate.id);
|
|
27
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"surface-paint.d.ts","sourceRoot":"","sources":["../../src/shared/surface-paint.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"surface-paint.d.ts","sourceRoot":"","sources":["../../src/shared/surface-paint.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,sBAAsB,4CAoBjC,CAAA"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { buildSlotPreviewMaterial, createSlotPaintCapability } from './slot-paint';
|
|
2
|
+
import { swapPreviewMaterial } from './swap-preview-material';
|
|
2
3
|
export const surfacePaintCapability = createSlotPaintCapability({
|
|
3
4
|
resolveRole: () => 'surface',
|
|
4
5
|
applyPreview: ({ material, materialPreset, root }) => {
|
|
@@ -10,11 +11,7 @@ export const surfacePaintCapability = createSlotPaintCapability({
|
|
|
10
11
|
const mesh = object;
|
|
11
12
|
if (!mesh.isMesh)
|
|
12
13
|
return;
|
|
13
|
-
|
|
14
|
-
mesh.material = preview;
|
|
15
|
-
restores.push(() => {
|
|
16
|
-
mesh.material = previous;
|
|
17
|
-
});
|
|
14
|
+
restores.push(swapPreviewMaterial(mesh, preview));
|
|
18
15
|
});
|
|
19
16
|
if (restores.length === 0)
|
|
20
17
|
return null;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Material, Mesh } from 'three';
|
|
2
|
+
/**
|
|
3
|
+
* Shows a paint preview by giving `mesh` another material (or material
|
|
4
|
+
* array), and returns the undo. The undo puts the original back only while the
|
|
5
|
+
* mesh still wears the preview: a commit or rebuild that gave it new materials
|
|
6
|
+
* meanwhile (a new finish adds a palette entry and a geometry group) keeps
|
|
7
|
+
* them — restoring the older, shorter array would leave a group with no
|
|
8
|
+
* material, which the next raycast trips over.
|
|
9
|
+
*/
|
|
10
|
+
export declare function swapPreviewMaterial(mesh: Mesh, preview: Material | Material[]): () => void;
|
|
11
|
+
//# sourceMappingURL=swap-preview-material.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swap-preview-material.d.ts","sourceRoot":"","sources":["../../src/shared/swap-preview-material.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,OAAO,CAAA;AAE3C;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,GAAG,QAAQ,EAAE,GAAG,MAAM,IAAI,CAM1F"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shows a paint preview by giving `mesh` another material (or material
|
|
3
|
+
* array), and returns the undo. The undo puts the original back only while the
|
|
4
|
+
* mesh still wears the preview: a commit or rebuild that gave it new materials
|
|
5
|
+
* meanwhile (a new finish adds a palette entry and a geometry group) keeps
|
|
6
|
+
* them — restoring the older, shorter array would leave a group with no
|
|
7
|
+
* material, which the next raycast trips over.
|
|
8
|
+
*/
|
|
9
|
+
export function swapPreviewMaterial(mesh, preview) {
|
|
10
|
+
const previous = mesh.material;
|
|
11
|
+
mesh.material = preview;
|
|
12
|
+
return () => {
|
|
13
|
+
if (mesh.material === preview)
|
|
14
|
+
mesh.material = previous;
|
|
15
|
+
};
|
|
16
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"system-checks.d.ts","sourceRoot":"","sources":["../../src/shared/system-checks.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,SAAS,EAUf,MAAM,kBAAkB,CAAA;AAKzB,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,SAAS,EAAE,CAAA;IACpB,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAA;CAC9B,CAAA;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,GAAG,aAAa,EAAE,
|
|
1
|
+
{"version":3,"file":"system-checks.d.ts","sourceRoot":"","sources":["../../src/shared/system-checks.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,SAAS,EAUf,MAAM,kBAAkB,CAAA;AAKzB,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,SAAS,EAAE,CAAA;IACpB,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAA;CAC9B,CAAA;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,GAAG,aAAa,EAAE,CAqI3F"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { buildPortComponents, collectSystemPorts, distributionPointToWorld, getWallBaseElevationForNodes, getWallCurveFrameAt, getWallEffectiveHeightForNodes,
|
|
1
|
+
import { buildPortComponents, collectSystemPorts, distributionPointToWorld, getWallBaseElevationForNodes, getWallCurveFrameAt, getWallEffectiveHeightForNodes, getWallFaceOffsets, nodeRegistry, validateDwv, } from '@pascal-app/core';
|
|
2
2
|
import { Box3, Ray, Vector3 } from 'three';
|
|
3
3
|
import { connectionCompatibility } from './connection-compatibility';
|
|
4
4
|
import { planRunHangerSlots } from './run-hangers';
|
|
@@ -99,7 +99,9 @@ export function checkDistributionSystems(nodes) {
|
|
|
99
99
|
const frame = getWallCurveFrameAt(wall, i / 16);
|
|
100
100
|
points.push(world(wall, [frame.point.x, base, frame.point.y]), world(wall, [frame.point.x, top, frame.point.y]));
|
|
101
101
|
}
|
|
102
|
-
const box = new Box3()
|
|
102
|
+
const box = new Box3()
|
|
103
|
+
.setFromPoints(points)
|
|
104
|
+
.expandByScalar(Math.max(getWallFaceOffsets(wall).a, -getWallFaceOffsets(wall).b));
|
|
103
105
|
for (const segment of segments) {
|
|
104
106
|
if (segment.run.wallAttachment?.wallId === wall.id)
|
|
105
107
|
continue;
|
|
@@ -108,7 +110,7 @@ export function checkDistributionSystems(nodes) {
|
|
|
108
110
|
}
|
|
109
111
|
}
|
|
110
112
|
for (const run of runs) {
|
|
111
|
-
const missing = planRunHangerSlots(run, nodes).filter((slot) => !slot.skipped
|
|
113
|
+
const missing = planRunHangerSlots(run, nodes).filter((slot) => !(slot.skipped || slot.hanger));
|
|
112
114
|
if (missing.length)
|
|
113
115
|
findings.push({
|
|
114
116
|
code: 'unsupported-hanger',
|
|
@@ -54,6 +54,7 @@ export type WallPlanAttachment = Omit<WallHit, 'wall'> & {
|
|
|
54
54
|
};
|
|
55
55
|
/** Resolve a plan point against one wall, including its curved centerline. */
|
|
56
56
|
export declare function resolveWallAttachmentAtPlanPoint(wall: WallNode, planPoint: readonly [number, number], maxDistance?: number): WallPlanAttachment | null;
|
|
57
|
+
export declare function projectPlanPointToWallLocalX(wall: WallNode, planPoint: readonly [number, number]): number;
|
|
57
58
|
/**
|
|
58
59
|
* Return the closest wall attachment target in plan space, including curved
|
|
59
60
|
* walls. This is deliberately separate from `findClosestWallInPlan`: doors,
|
|
@@ -86,17 +87,10 @@ export declare function snapLocalXToNeighbors(args: {
|
|
|
86
87
|
threshold?: number;
|
|
87
88
|
}): number | null;
|
|
88
89
|
/**
|
|
89
|
-
*
|
|
90
|
-
*
|
|
91
|
-
* wall-mounted item)? AABB test in the wall's local face plane. `ignoreId`
|
|
92
|
-
* excludes the moving node itself. Returns `true` (blocked) if the wall is
|
|
93
|
-
* gone.
|
|
94
|
-
*
|
|
95
|
-
* Single source of truth for door + window placement collision — door-math and
|
|
96
|
-
* window-math had byte-identical copies of this. Y conventions differ per kind
|
|
97
|
-
* (items store bottom Y; doors/windows store centre Y), handled inline.
|
|
90
|
+
* Whether a wall-hosted opening would overlap another child of its wall. The rule lives in
|
|
91
|
+
* core, shared with every agent surface (`planWallOpening`); re-exported for the tools here.
|
|
98
92
|
*/
|
|
99
|
-
export
|
|
93
|
+
export { hasWallChildOverlap } from '@pascal-app/core/building';
|
|
100
94
|
/** Placement state for a wall-hosted opening — the SINGLE decision the preview
|
|
101
95
|
* tint and the commit gate both consume so they can never disagree. */
|
|
102
96
|
export type OpeningPlacement = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wall-attach-target.d.ts","sourceRoot":"","sources":["../../src/shared/wall-attach-target.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,SAAS,EAUd,KAAK,QAAQ,EACd,MAAM,kBAAkB,CAAA;AAEzB;;;;;;;;;;;;;GAaG;AAEH,MAAM,MAAM,OAAO,GAAG;IACpB,IAAI,EAAE,QAAQ,CAAA;IACd,qEAAqE;IACrE,MAAM,EAAE,MAAM,CAAA;IACd,gFAAgF;IAChF,YAAY,EAAE,MAAM,CAAA;IACpB,iDAAiD;IACjD,IAAI,EAAE,OAAO,GAAG,MAAM,CAAA;IACtB,qCAAqC;IACrC,IAAI,EAAE,MAAM,CAAA;IACZ,oDAAoD;IACpD,IAAI,EAAE,MAAM,CAAA;IACZ,6BAA6B;IAC7B,UAAU,EAAE,MAAM,CAAA;IAClB;;;;;;;OAOG;IACH,YAAY,EAAE,MAAM,CAAA;CACrB,CAAA;AAED,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,MAAM,EACd,MAAM,SAAI,GACT,CAAC,MAAM,EAAE,MAAM,CAAC,CAKlB;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,EACpC,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,EACjC,aAAa,EAAE,SAAS,GAAG,IAAI,EAC/B,aAAa,CAAC,EAAE,SAAS,GACxB,OAAO,GAAG,IAAI,CA+BhB;AAWD,MAAM,MAAM,kBAAkB,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG;IACvD,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAyCD,8EAA8E;AAC9E,wBAAgB,gCAAgC,CAC9C,IAAI,EAAE,QAAQ,EACd,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,EACpC,WAAW,SAAuB,GACjC,kBAAkB,GAAG,IAAI,CA0C3B;AAED;;;;;GAKG;AACH,wBAAgB,+BAA+B,CAC7C,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,EACpC,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,EACjC,aAAa,EAAE,SAAS,GAAG,IAAI,EAC/B,aAAa,CAAC,EAAE,SAAS,GACxB,OAAO,GAAG,IAAI,CAehB;AAwBD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE;IAC1C,IAAI,EAAE,QAAQ,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,SAAS,CAAA;IACjB,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;IACjC,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,GAAG,MAAM,GAAG,IAAI,CAiChB;AAED
|
|
1
|
+
{"version":3,"file":"wall-attach-target.d.ts","sourceRoot":"","sources":["../../src/shared/wall-attach-target.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,SAAS,EAUd,KAAK,QAAQ,EACd,MAAM,kBAAkB,CAAA;AAEzB;;;;;;;;;;;;;GAaG;AAEH,MAAM,MAAM,OAAO,GAAG;IACpB,IAAI,EAAE,QAAQ,CAAA;IACd,qEAAqE;IACrE,MAAM,EAAE,MAAM,CAAA;IACd,gFAAgF;IAChF,YAAY,EAAE,MAAM,CAAA;IACpB,iDAAiD;IACjD,IAAI,EAAE,OAAO,GAAG,MAAM,CAAA;IACtB,qCAAqC;IACrC,IAAI,EAAE,MAAM,CAAA;IACZ,oDAAoD;IACpD,IAAI,EAAE,MAAM,CAAA;IACZ,6BAA6B;IAC7B,UAAU,EAAE,MAAM,CAAA;IAClB;;;;;;;OAOG;IACH,YAAY,EAAE,MAAM,CAAA;CACrB,CAAA;AAED,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,MAAM,EACd,MAAM,SAAI,GACT,CAAC,MAAM,EAAE,MAAM,CAAC,CAKlB;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,EACpC,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,EACjC,aAAa,EAAE,SAAS,GAAG,IAAI,EAC/B,aAAa,CAAC,EAAE,SAAS,GACxB,OAAO,GAAG,IAAI,CA+BhB;AAWD,MAAM,MAAM,kBAAkB,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG;IACvD,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAyCD,8EAA8E;AAC9E,wBAAgB,gCAAgC,CAC9C,IAAI,EAAE,QAAQ,EACd,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,EACpC,WAAW,SAAuB,GACjC,kBAAkB,GAAG,IAAI,CA0C3B;AAED,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,QAAQ,EACd,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,GACnC,MAAM,CAER;AAED;;;;;GAKG;AACH,wBAAgB,+BAA+B,CAC7C,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,EACpC,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,EACjC,aAAa,EAAE,SAAS,GAAG,IAAI,EAC/B,aAAa,CAAC,EAAE,SAAS,GACxB,OAAO,GAAG,IAAI,CAehB;AAwBD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE;IAC1C,IAAI,EAAE,QAAQ,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,SAAS,CAAA;IACjB,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;IACjC,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,GAAG,MAAM,GAAG,IAAI,CAiChB;AAED;;;GAGG;AACH,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AAE/D;wEACwE;AACxE,MAAM,MAAM,gBAAgB,GAAG;IAC7B,4EAA4E;IAC5E,QAAQ,EAAE,OAAO,CAAA;IACjB;+BAC2B;IAC3B,SAAS,EAAE,OAAO,CAAA;IAClB,sDAAsD;IACtD,IAAI,EAAE,OAAO,GAAG,SAAS,CAAA;CAC1B,CAAA;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE;IAC5C,QAAQ,EAAE,OAAO,CAAA;IACjB,UAAU,EAAE,OAAO,CAAA;CACpB,GAAG,gBAAgB,CAOnB"}
|
|
@@ -120,6 +120,9 @@ export function resolveWallAttachmentAtPlanPoint(wall, planPoint, maxDistance =
|
|
|
120
120
|
itemRotation: side === 'front' ? 0 : Math.PI,
|
|
121
121
|
};
|
|
122
122
|
}
|
|
123
|
+
export function projectPlanPointToWallLocalX(wall, planPoint) {
|
|
124
|
+
return resolveWallAttachmentAtPlanPoint(wall, planPoint, Number.POSITIVE_INFINITY)?.localX ?? 0;
|
|
125
|
+
}
|
|
123
126
|
/**
|
|
124
127
|
* Return the closest wall attachment target in plan space, including curved
|
|
125
128
|
* walls. This is deliberately separate from `findClosestWallInPlan`: doors,
|
|
@@ -216,70 +219,10 @@ export function snapLocalXToNeighbors(args) {
|
|
|
216
219
|
return bestDelta === null ? null : localX + bestDelta;
|
|
217
220
|
}
|
|
218
221
|
/**
|
|
219
|
-
*
|
|
220
|
-
*
|
|
221
|
-
* wall-mounted item)? AABB test in the wall's local face plane. `ignoreId`
|
|
222
|
-
* excludes the moving node itself. Returns `true` (blocked) if the wall is
|
|
223
|
-
* gone.
|
|
224
|
-
*
|
|
225
|
-
* Single source of truth for door + window placement collision — door-math and
|
|
226
|
-
* window-math had byte-identical copies of this. Y conventions differ per kind
|
|
227
|
-
* (items store bottom Y; doors/windows store centre Y), handled inline.
|
|
222
|
+
* Whether a wall-hosted opening would overlap another child of its wall. The rule lives in
|
|
223
|
+
* core, shared with every agent surface (`planWallOpening`); re-exported for the tools here.
|
|
228
224
|
*/
|
|
229
|
-
export
|
|
230
|
-
const wallNode = nodes[wallId];
|
|
231
|
-
if (!wallNode)
|
|
232
|
-
return true;
|
|
233
|
-
const halfW = width / 2;
|
|
234
|
-
const halfH = height / 2;
|
|
235
|
-
const newBottom = clampedY - halfH;
|
|
236
|
-
const newTop = clampedY + halfH;
|
|
237
|
-
const newLeft = clampedX - halfW;
|
|
238
|
-
const newRight = clampedX + halfW;
|
|
239
|
-
for (const childId of Array.isArray(wallNode.children) ? wallNode.children : []) {
|
|
240
|
-
if (childId === ignoreId)
|
|
241
|
-
continue;
|
|
242
|
-
const child = nodes[childId];
|
|
243
|
-
if (!child)
|
|
244
|
-
continue;
|
|
245
|
-
let childLeft;
|
|
246
|
-
let childRight;
|
|
247
|
-
let childBottom;
|
|
248
|
-
let childTop;
|
|
249
|
-
if (child.type === 'item') {
|
|
250
|
-
const item = child;
|
|
251
|
-
if (item.asset.attachTo !== 'wall' && item.asset.attachTo !== 'wall-side')
|
|
252
|
-
continue;
|
|
253
|
-
const [w, h] = getScaledDimensions(item);
|
|
254
|
-
childLeft = item.position[0] - w / 2;
|
|
255
|
-
childRight = item.position[0] + w / 2;
|
|
256
|
-
childBottom = item.position[1]; // items store bottom Y
|
|
257
|
-
childTop = item.position[1] + h;
|
|
258
|
-
}
|
|
259
|
-
else if (child.type === 'window') {
|
|
260
|
-
const win = child;
|
|
261
|
-
childLeft = win.position[0] - win.width / 2;
|
|
262
|
-
childRight = win.position[0] + win.width / 2;
|
|
263
|
-
childBottom = win.position[1] - win.height / 2; // windows store centre Y
|
|
264
|
-
childTop = win.position[1] + win.height / 2;
|
|
265
|
-
}
|
|
266
|
-
else if (child.type === 'door') {
|
|
267
|
-
const door = child;
|
|
268
|
-
childLeft = door.position[0] - door.width / 2;
|
|
269
|
-
childRight = door.position[0] + door.width / 2;
|
|
270
|
-
childBottom = door.position[1] - door.height / 2; // doors store centre Y
|
|
271
|
-
childTop = door.position[1] + door.height / 2;
|
|
272
|
-
}
|
|
273
|
-
else {
|
|
274
|
-
continue;
|
|
275
|
-
}
|
|
276
|
-
const xOverlap = newLeft < childRight && newRight > childLeft;
|
|
277
|
-
const yOverlap = newBottom < childTop && newTop > childBottom;
|
|
278
|
-
if (xOverlap && yOverlap)
|
|
279
|
-
return true;
|
|
280
|
-
}
|
|
281
|
-
return false;
|
|
282
|
-
}
|
|
225
|
+
export { hasWallChildOverlap } from '@pascal-app/core/building';
|
|
283
226
|
/**
|
|
284
227
|
* Resolve the placement state from the raw collision result and whether the
|
|
285
228
|
* user is force-placing (held Alt). Force-place lifts the collision block, so the
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type AnyNode, type AnyNodeId, type GridEvent, type WallEvent } from '@pascal-app/core';
|
|
2
|
+
import { type Object3D } from 'three';
|
|
3
|
+
/** Canvas surface queries still reach the host when a rendered child consumes mesh events. */
|
|
4
|
+
export declare function wallEventFromGrid(event: GridEvent, activeLevelId: AnyNodeId | null, nodes: Record<AnyNodeId, AnyNode>, objects: ReadonlyMap<string, Object3D>): WallEvent | null;
|
|
5
|
+
//# sourceMappingURL=wall-event-from-grid.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wall-event-from-grid.d.ts","sourceRoot":"","sources":["../../src/shared/wall-event-from-grid.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,SAAS,EACd,KAAK,SAAS,EAEd,KAAK,SAAS,EACf,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAW,KAAK,QAAQ,EAAW,MAAM,OAAO,CAAA;AAEvD,8FAA8F;AAC9F,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,SAAS,EAChB,aAAa,EAAE,SAAS,GAAG,IAAI,EAC/B,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,EACjC,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,GACrC,SAAS,GAAG,IAAI,CA8BlB"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { isCurvedWall, } from '@pascal-app/core';
|
|
2
|
+
import { Matrix3, Vector3 } from 'three';
|
|
3
|
+
/** Canvas surface queries still reach the host when a rendered child consumes mesh events. */
|
|
4
|
+
export function wallEventFromGrid(event, activeLevelId, nodes, objects) {
|
|
5
|
+
if (event.surfaceHit?.kind !== 'wall' || !event.surfaceNormal)
|
|
6
|
+
return null;
|
|
7
|
+
const wall = nodes[event.surfaceHit.hostId];
|
|
8
|
+
if (wall?.type !== 'wall' ||
|
|
9
|
+
wall.visible === false ||
|
|
10
|
+
wall.metadata.isTransient ||
|
|
11
|
+
wall.parentId !== activeLevelId ||
|
|
12
|
+
isCurvedWall(wall))
|
|
13
|
+
return null;
|
|
14
|
+
const object = objects.get(wall.id);
|
|
15
|
+
const frame = event.localFrameId ? objects.get(event.localFrameId) : undefined;
|
|
16
|
+
if (!object || (event.localFrameId && !frame))
|
|
17
|
+
return null;
|
|
18
|
+
object.updateWorldMatrix(true, false);
|
|
19
|
+
frame?.updateWorldMatrix(true, false);
|
|
20
|
+
const normal = new Vector3(...event.surfaceNormal);
|
|
21
|
+
if (frame)
|
|
22
|
+
normal.applyNormalMatrix(new Matrix3().getNormalMatrix(frame.matrixWorld));
|
|
23
|
+
normal.applyNormalMatrix(new Matrix3().getNormalMatrix(object.matrixWorld.clone().invert()));
|
|
24
|
+
if (Math.abs(normal.z) <= 0.7)
|
|
25
|
+
return null;
|
|
26
|
+
const position = object.worldToLocal(new Vector3(...event.position));
|
|
27
|
+
return {
|
|
28
|
+
node: wall,
|
|
29
|
+
object,
|
|
30
|
+
position: event.position,
|
|
31
|
+
localPosition: position.toArray(),
|
|
32
|
+
normal: normal.toArray(),
|
|
33
|
+
nativeEvent: event.nativeEvent,
|
|
34
|
+
stopPropagation: () => { },
|
|
35
|
+
};
|
|
36
|
+
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { type AnyNode, type AnyNodeId, type
|
|
1
|
+
import { type AnyNode, type AnyNodeId, type DoorNode } from '@pascal-app/core';
|
|
2
|
+
import { resolveWallOpeningCeiling } from '@pascal-app/core/building';
|
|
2
3
|
/**
|
|
3
4
|
* Structural subset of `SceneApi` the opening-cap readers need — matches
|
|
4
5
|
* both handle-descriptor callbacks (which receive the full SceneApi) and
|
|
@@ -8,23 +9,12 @@ export type WallCeilingSceneReader = {
|
|
|
8
9
|
get: (id: AnyNodeId) => unknown;
|
|
9
10
|
nodes: () => Readonly<Record<AnyNodeId, AnyNode>>;
|
|
10
11
|
};
|
|
11
|
-
/**
|
|
12
|
-
|
|
13
|
-
* resolved top (storey plane for plane-bound walls, stored height for
|
|
14
|
-
* explicit ones) minus the wall's elected slab base. Wall-local Y = 0 sits
|
|
15
|
-
* at the elected base (where the viewer positions the wall mesh), so this
|
|
16
|
-
* is the ceiling an opening's top edge must stay under.
|
|
17
|
-
*
|
|
18
|
-
* Uses the same slab election as the viewer's WallSystem
|
|
19
|
-
* (`spatialGridManager.getSlabSupportForWall`) so the cap agrees with the
|
|
20
|
-
* rendered wall; headless callers with an empty spatial grid elect base 0
|
|
21
|
-
* and fall back to the full storey height.
|
|
22
|
-
*/
|
|
23
|
-
export declare function resolveWallOpeningCeiling(wall: WallNode, nodes: Readonly<Record<AnyNodeId, AnyNode>>): number;
|
|
12
|
+
/** The ceiling an opening's top edge must stay under: the shared rule in core. */
|
|
13
|
+
export { resolveWallOpeningCeiling };
|
|
24
14
|
/**
|
|
25
15
|
* Height cap for a wall-hosted opening's resize handles. Infinity only when
|
|
26
16
|
* the opening is unhosted (no wallId, or the wall is gone) — roof-hosted
|
|
27
17
|
* openings clamp elsewhere.
|
|
28
18
|
*/
|
|
29
|
-
export declare function readHostWallCeiling(wallId: string | null | undefined, scene: WallCeilingSceneReader): number;
|
|
19
|
+
export declare function readHostWallCeiling(wallId: string | null | undefined, scene: WallCeilingSceneReader, opening?: Pick<DoorNode, 'position' | 'width' | 'height'>): number;
|
|
30
20
|
//# sourceMappingURL=wall-opening-ceiling.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wall-opening-ceiling.d.ts","sourceRoot":"","sources":["../../src/shared/wall-opening-ceiling.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,SAAS,
|
|
1
|
+
{"version":3,"file":"wall-opening-ceiling.d.ts","sourceRoot":"","sources":["../../src/shared/wall-opening-ceiling.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,SAAS,EACd,KAAK,QAAQ,EAId,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAA;AAErE;;;;GAIG;AACH,MAAM,MAAM,sBAAsB,GAAG;IACnC,GAAG,EAAE,CAAC,EAAE,EAAE,SAAS,KAAK,OAAO,CAAA;IAC/B,KAAK,EAAE,MAAM,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAA;CAClD,CAAA;AAED,kFAAkF;AAClF,OAAO,EAAE,yBAAyB,EAAE,CAAA;AAEpC;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACjC,KAAK,EAAE,sBAAsB,EAC7B,OAAO,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAC,GACxD,MAAM,CASR"}
|
|
@@ -1,29 +1,21 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
* explicit ones) minus the wall's elected slab base. Wall-local Y = 0 sits
|
|
6
|
-
* at the elected base (where the viewer positions the wall mesh), so this
|
|
7
|
-
* is the ceiling an opening's top edge must stay under.
|
|
8
|
-
*
|
|
9
|
-
* Uses the same slab election as the viewer's WallSystem
|
|
10
|
-
* (`spatialGridManager.getSlabSupportForWall`) so the cap agrees with the
|
|
11
|
-
* rendered wall; headless callers with an empty spatial grid elect base 0
|
|
12
|
-
* and fall back to the full storey height.
|
|
13
|
-
*/
|
|
14
|
-
export function resolveWallOpeningCeiling(wall, nodes) {
|
|
15
|
-
return getWallEffectiveHeightForNodes(wall, nodes);
|
|
16
|
-
}
|
|
1
|
+
import { getOpeningFloorDatum, wallSupportForNodes, } from '@pascal-app/core';
|
|
2
|
+
import { resolveWallOpeningCeiling } from '@pascal-app/core/building';
|
|
3
|
+
/** The ceiling an opening's top edge must stay under: the shared rule in core. */
|
|
4
|
+
export { resolveWallOpeningCeiling };
|
|
17
5
|
/**
|
|
18
6
|
* Height cap for a wall-hosted opening's resize handles. Infinity only when
|
|
19
7
|
* the opening is unhosted (no wallId, or the wall is gone) — roof-hosted
|
|
20
8
|
* openings clamp elsewhere.
|
|
21
9
|
*/
|
|
22
|
-
export function readHostWallCeiling(wallId, scene) {
|
|
10
|
+
export function readHostWallCeiling(wallId, scene, opening) {
|
|
23
11
|
if (!wallId)
|
|
24
12
|
return Number.POSITIVE_INFINITY;
|
|
25
13
|
const wall = scene.get(wallId);
|
|
26
14
|
if (!wall)
|
|
27
15
|
return Number.POSITIVE_INFINITY;
|
|
28
|
-
|
|
16
|
+
const nodes = scene.nodes();
|
|
17
|
+
const lift = opening
|
|
18
|
+
? getOpeningFloorDatum(wall, opening, nodes) - wallSupportForNodes(wall, nodes).elevation
|
|
19
|
+
: 0;
|
|
20
|
+
return resolveWallOpeningCeiling(wall, nodes) - lift;
|
|
29
21
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/shelf/definition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAoB,cAAc,EAA8B,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/shelf/definition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAoB,cAAc,EAA8B,MAAM,kBAAkB,CAAA;AAUpG,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AA2HpC,eAAO,MAAM,eAAe,EAAE,cAAc,CAAC,OAAO,SAAS,CAyJ5D,CAAA"}
|
package/dist/shelf/definition.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { shelfSlots } from '@pascal-app/core';
|
|
2
|
+
import { restingFloorplanAffectedIds } from '../shared/resting-surface-plan';
|
|
1
3
|
import { sanitizeShelfDimensions } from './dimensions';
|
|
2
4
|
import { buildShelfFloorplan } from './floorplan';
|
|
3
5
|
import { shelfResizeAffordance, shelfRotateAffordance } from './floorplan-affordances';
|
|
@@ -6,7 +8,6 @@ import { buildShelfGeometry, shelfRowSurfaceYs } from './geometry';
|
|
|
6
8
|
import { shelfPaint } from './paint';
|
|
7
9
|
import { shelfParametrics } from './parametrics';
|
|
8
10
|
import { ShelfNode } from './schema';
|
|
9
|
-
import { shelfSlots } from './slots';
|
|
10
11
|
const SIDE_HANDLE_OFFSET = 0.18;
|
|
11
12
|
const HEIGHT_HANDLE_OFFSET = 0.22;
|
|
12
13
|
const ROTATE_CORNER_OFFSET = 0.32;
|
|
@@ -173,7 +174,7 @@ export const shelfDefinition = {
|
|
|
173
174
|
})),
|
|
174
175
|
},
|
|
175
176
|
selectable: { hitVolume: 'bbox' },
|
|
176
|
-
duplicable:
|
|
177
|
+
duplicable: { subtree: 'with-children' },
|
|
177
178
|
deletable: true,
|
|
178
179
|
paint: shelfPaint,
|
|
179
180
|
slots: (n) => shelfSlots(n),
|
|
@@ -230,6 +231,7 @@ export const shelfDefinition = {
|
|
|
230
231
|
]);
|
|
231
232
|
},
|
|
232
233
|
floorplan: buildShelfFloorplan,
|
|
234
|
+
floorplanAffectedIds: restingFloorplanAffectedIds,
|
|
233
235
|
// 2D move handler — Path 1 in `FloorplanRegistryMoveOverlay`. Without
|
|
234
236
|
// this the overlay falls through to Path 2 which stomps the SVG
|
|
235
237
|
// entry's `transform` attribute (set by the floor-plan layer to
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"floorplan.d.ts","sourceRoot":"","sources":["../../src/shelf/floorplan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"floorplan.d.ts","sourceRoot":"","sources":["../../src/shelf/floorplan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAa,iBAAiB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAIrF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAQzC;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,CAAC,EAAE,eAAe,GAAG,iBAAiB,CA0H7F"}
|
package/dist/shelf/floorplan.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { restingNodePlanFrame } from '../shared/resting-surface-plan';
|
|
1
2
|
import { sanitizeShelfDimensions } from './dimensions';
|
|
2
3
|
// Offsets for the floor-plan selection chrome. Resize chevrons sit a
|
|
3
4
|
// hair off the footprint rim; the rotate-arrow corner sits a bit further
|
|
@@ -22,8 +23,14 @@ const ROTATE_ARROW_CORNER_OFFSET = 0.22;
|
|
|
22
23
|
*/
|
|
23
24
|
export function buildShelfFloorplan(node, ctx) {
|
|
24
25
|
const shelf = sanitizeShelfDimensions(node);
|
|
25
|
-
const
|
|
26
|
-
const
|
|
26
|
+
const parent = shelf.parentId ? ctx?.resolve(shelf.parentId) : undefined;
|
|
27
|
+
const hostedFrame = ctx && parent?.type === 'procedural-item' && parent.attachments[shelf.id] !== undefined
|
|
28
|
+
? restingNodePlanFrame(shelf, ctx.resolve)
|
|
29
|
+
: null;
|
|
30
|
+
const [px, , pz] = hostedFrame?.position ?? shelf.position;
|
|
31
|
+
const ry = hostedFrame
|
|
32
|
+
? Math.atan2(hostedFrame.axes[2][0], hostedFrame.axes[2][2])
|
|
33
|
+
: (shelf.rotation[1] ?? 0);
|
|
27
34
|
// Floor-plan plots at `-ry` so SVG's CW-with-y-down `rotate` direction
|
|
28
35
|
// ends up visually matching Three.js Y-rotation (CCW from a top-down
|
|
29
36
|
// view) — same `rotation` value rotates the same way in both views.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"geometry.d.ts","sourceRoot":"","sources":["../../src/shelf/geometry.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,eAAe,
|
|
1
|
+
{"version":3,"file":"geometry.d.ts","sourceRoot":"","sources":["../../src/shelf/geometry.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,eAAe,EAKrB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAIL,KAAK,aAAa,EAEnB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAAe,KAAK,EAAuB,MAAM,OAAO,CAAA;AAE/D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAyEzC,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,SAAS,EAClB,GAAG,CAAC,EAAE,eAAe,EACrB,OAAO,GAAE,aAA0B,GAClC,KAAK,CAkCP;AAySD;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,EAAE,CAM3D"}
|
package/dist/shelf/geometry.js
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import { SHELF_BOARD_INSET as BOARD_INSET, getMaterialPresetByRef, shelfBoardDimensions, } from '@pascal-app/core';
|
|
1
|
+
import { SHELF_BOARD_INSET as BOARD_INSET, getMaterialPresetByRef, SHELF_SLOT_DEFAULT_COLOR, shelfBoardDimensions, } from '@pascal-app/core';
|
|
2
2
|
import { applyMaterialPresetToMaterials, createDefaultMaterial, createMaterial, resolveMaterialRef, } from '@pascal-app/viewer';
|
|
3
3
|
import { BoxGeometry, Group, Mesh } from 'three';
|
|
4
4
|
import { sanitizeShelfDimensions } from './dimensions';
|
|
5
|
-
import { SHELF_SLOT_DEFAULT_COLOR } from './slots';
|
|
6
5
|
function getShelfSlotMaterial(node, slotId, materials, shading) {
|
|
7
6
|
const ref = node.slots?.[slotId];
|
|
8
7
|
if (ref) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paint.d.ts","sourceRoot":"","sources":["../../src/shelf/paint.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,eAAe,EAOrB,MAAM,kBAAkB,CAAA;AAmLzB,eAAO,MAAM,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"paint.d.ts","sourceRoot":"","sources":["../../src/shelf/paint.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,eAAe,EAOrB,MAAM,kBAAkB,CAAA;AAmLzB,eAAO,MAAM,UAAU,EAAE,eAoBxB,CAAA"}
|
package/dist/shelf/paint.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { generateSceneMaterialId,
|
|
1
|
+
import { generateSceneMaterialId, slotPaintMaterial, toSceneMaterialRef, useScene, } from '@pascal-app/core';
|
|
2
2
|
import { createMaterial, createMaterialFromPresetRef, useViewer } from '@pascal-app/viewer';
|
|
3
3
|
function deepEqual(a, b) {
|
|
4
4
|
if (Object.is(a, b))
|
|
@@ -162,15 +162,9 @@ export const shelfPaint = {
|
|
|
162
162
|
applyPreview: ({ role, root, material, materialPreset }) => applyShelfPreview(role, root, material, materialPreset),
|
|
163
163
|
getEffectiveMaterial: ({ node, role }) => {
|
|
164
164
|
const shelf = node;
|
|
165
|
-
const
|
|
166
|
-
if (
|
|
167
|
-
|
|
168
|
-
return { material: undefined, materialPreset: shelf.slots?.[role] };
|
|
169
|
-
}
|
|
170
|
-
const sceneMaterial = useScene.getState().materials[parsed.id];
|
|
171
|
-
if (sceneMaterial)
|
|
172
|
-
return { material: sceneMaterial.material, materialPreset: undefined };
|
|
173
|
-
}
|
|
165
|
+
const painted = slotPaintMaterial(shelf.slots?.[role], useScene.getState().materials);
|
|
166
|
+
if (painted)
|
|
167
|
+
return painted;
|
|
174
168
|
// No (or dangling) slot ref — surface the legacy whole-shelf paint the
|
|
175
169
|
// geometry builder still falls back to, so the picker matches what renders.
|
|
176
170
|
if (shelf.materialPreset || shelf.material) {
|