@pascal-app/nodes 1.0.3 → 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 +18 -3
- 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.map +1 -1
- package/dist/block/hosted-edit.js +25 -0
- 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/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 +2 -2
- package/dist/box-vent/definition.d.ts.map +1 -1
- package/dist/box-vent/definition.js +2 -5
- package/dist/box-vent/panel.d.ts.map +1 -1
- package/dist/box-vent/panel.js +5 -28
- 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 +1 -2
- 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/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/tool.d.ts.map +1 -1
- package/dist/cabinet/tool.js +22 -24
- 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 +15 -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 +41 -5
- 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 +24 -2
- package/dist/column/floorplan-affordances.d.ts.map +1 -1
- package/dist/column/floorplan-affordances.js +5 -0
- package/dist/column/floorplan.d.ts +1 -1
- package/dist/column/floorplan.d.ts.map +1 -1
- package/dist/column/floorplan.js +47 -2
- package/dist/column/hosted-resize.d.ts +101 -2
- package/dist/column/hosted-resize.d.ts.map +1 -1
- package/dist/column/panel.d.ts.map +1 -1
- package/dist/column/panel.js +147 -146
- package/dist/column/renderer.d.ts.map +1 -1
- package/dist/column/renderer.js +6 -4
- package/dist/column/surface.d.ts.map +1 -1
- package/dist/column/surface.js +7 -0
- package/dist/construction-dimension/floorplan.js +7 -3
- package/dist/cupola/definition.d.ts.map +1 -1
- package/dist/cupola/definition.js +2 -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 +12 -3
- package/dist/door/door-math.d.ts +5 -10
- package/dist/door/door-math.d.ts.map +1 -1
- package/dist/door/door-math.js +14 -15
- 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 +72 -48
- 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 +34 -259
- 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 +92 -21
- package/dist/dormer/csg-geometry.d.ts.map +1 -1
- package/dist/dormer/csg-geometry.js +2 -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 +2 -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/elevator/definition.d.ts.map +1 -1
- package/dist/elevator/definition.js +1 -2
- package/dist/elevator/panel.d.ts.map +1 -1
- package/dist/elevator/panel.js +5 -27
- package/dist/elevator/parametrics.js +1 -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 +2 -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 +83 -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 +256 -47
- 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/gutter/definition.d.ts.map +1 -1
- package/dist/gutter/definition.js +2 -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 +33 -4
- package/dist/item/floorplan.d.ts +1 -1
- package/dist/item/floorplan.d.ts.map +1 -1
- package/dist/item/floorplan.js +35 -5
- 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.js +4 -4
- 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 +64 -38
- 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/lineset/move-tool.d.ts.map +1 -1
- package/dist/lineset/move-tool.js +8 -2
- package/dist/liquid-line/move-tool.d.ts.map +1 -1
- package/dist/liquid-line/move-tool.js +8 -2
- package/dist/measurement/definition.js +1 -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/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 +74 -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/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 +4 -1
- 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.map +1 -1
- package/dist/roof/panel-model.js +10 -6
- package/dist/roof/panel.d.ts.map +1 -1
- package/dist/roof/panel.js +3 -10
- package/dist/roof/renderer.d.ts.map +1 -1
- package/dist/roof/renderer.js +5 -2
- package/dist/roof-segment/panel.d.ts.map +1 -1
- package/dist/roof-segment/panel.js +5 -24
- package/dist/roof-segment/renderer.d.ts.map +1 -1
- package/dist/roof-segment/renderer.js +17 -8
- 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/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/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-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/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/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-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 +3 -10
- package/dist/shared/wall-attach-target.d.ts.map +1 -1
- package/dist/shared/wall-attach-target.js +3 -63
- 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 +1 -1
- 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 +150 -19
- 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/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 +19 -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/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 +16 -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 +32 -15
- 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 +51 -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 +21 -8
- 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 +2 -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.map +1 -1
- package/dist/wall/actions.js +7 -2
- package/dist/wall/construction-dimensions.js +8 -5
- package/dist/wall/contextual-dimensions.js +4 -4
- package/dist/wall/curtain-wall-materials.d.ts +1 -1
- package/dist/wall/curtain-wall-materials.d.ts.map +1 -1
- package/dist/wall/curtain-wall-materials.js +2 -2
- package/dist/wall/curve-tool.d.ts.map +1 -1
- package/dist/wall/curve-tool.js +4 -0
- package/dist/wall/definition.d.ts.map +1 -1
- package/dist/wall/definition.js +41 -17
- 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.map +1 -1
- package/dist/wall/floorplan-tool.js +10 -11
- package/dist/wall/floorplan.d.ts +3 -1
- package/dist/wall/floorplan.d.ts.map +1 -1
- package/dist/wall/floorplan.js +184 -21
- 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 +118 -148
- package/dist/wall/paint.d.ts +26 -15
- package/dist/wall/paint.d.ts.map +1 -1
- package/dist/wall/paint.js +306 -117
- package/dist/wall/panel-model.d.ts +18 -0
- package/dist/wall/panel-model.d.ts.map +1 -1
- package/dist/wall/panel-model.js +77 -19
- package/dist/wall/panel.d.ts.map +1 -1
- package/dist/wall/panel.js +217 -41
- package/dist/wall/parametrics.d.ts.map +1 -1
- package/dist/wall/parametrics.js +3 -0
- package/dist/wall/rectangle-command.d.ts +111 -12
- package/dist/wall/rectangle-command.d.ts.map +1 -1
- package/dist/wall/rectangle-tool.d.ts.map +1 -1
- package/dist/wall/rectangle-tool.js +26 -8
- package/dist/wall/renderer.d.ts.map +1 -1
- package/dist/wall/renderer.js +4 -2
- package/dist/wall/split-floorplan-layer.d.ts.map +1 -1
- package/dist/wall/split-floorplan-layer.js +7 -7
- package/dist/wall/split-session.d.ts.map +1 -1
- package/dist/wall/split-session.js +7 -1
- package/dist/wall/system.d.ts.map +1 -1
- package/dist/wall/system.js +36 -4
- package/dist/wall/tool.d.ts.map +1 -1
- package/dist/wall/tool.js +105 -49
- 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 +35 -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 +12 -4
- 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 +79 -48
- 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 +32 -88
- 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 +96 -24
- 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 +14 -20
- 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 +3 -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 +3 -14
- 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 +11 -11
- 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/item/__fixtures__/main-floorplan.d.ts +0 -26
- package/dist/item/__fixtures__/main-floorplan.d.ts.map +0 -1
- package/dist/item/__fixtures__/main-floorplan.js +0 -297
- 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/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/drawing-mode.d.ts +0 -12
- package/dist/wall/drawing-mode.d.ts.map +0 -1
- package/dist/wall/drawing-mode.js +0 -38
- package/dist/wall/slots.d.ts +0 -10
- package/dist/wall/slots.d.ts.map +0 -1
- package/dist/wall/slots.js +0 -92
- package/dist/window/slots.d.ts +0 -5
- package/dist/window/slots.d.ts.map +0 -1
- package/dist/window/slots.js +0 -11
|
@@ -23,6 +23,20 @@ function buildRingPatch(node, holeIndex, nextRing, boundaryCommitData) {
|
|
|
23
23
|
const nextHoles = (node.holes ?? []).map((hole, i) => i === holeIndex ? nextRing : hole.map(([x, y]) => [x, y]));
|
|
24
24
|
return { holes: nextHoles };
|
|
25
25
|
}
|
|
26
|
+
/**
|
|
27
|
+
* Commit a ring edit. A BOUNDARY reshape is the sanctioned conversion of a
|
|
28
|
+
* reconciler-owned slab or ceiling into an authored surface, so it goes
|
|
29
|
+
* through `detachDerivedNode` (which also carries the kind's own
|
|
30
|
+
* `boundaryCommitData`). A HOLE edit only touches authored cut-outs, so it
|
|
31
|
+
* stays an ordinary update and leaves the derivation in place.
|
|
32
|
+
*/
|
|
33
|
+
function commitRingPatch(id, holeIndex, patch) {
|
|
34
|
+
const scene = useScene.getState();
|
|
35
|
+
if (holeIndex === undefined)
|
|
36
|
+
scene.detachDerivedNode(id, patch);
|
|
37
|
+
else
|
|
38
|
+
scene.updateNodes([{ id, data: patch }]);
|
|
39
|
+
}
|
|
26
40
|
function resolveAffordancePlanPoint(options, context) {
|
|
27
41
|
return options?.resolvePlanPoint?.(context) ?? context.fallbackPoint;
|
|
28
42
|
}
|
|
@@ -60,9 +74,7 @@ export function createPolygonVertexAffordance(kind, options) {
|
|
|
60
74
|
});
|
|
61
75
|
const nextRing = originalRing.map((p, i) => i === vertexIndex ? [snapped[0], snapped[1]] : p);
|
|
62
76
|
const patch = buildRingPatch(node, holeIndex, nextRing, options?.boundaryCommitData);
|
|
63
|
-
|
|
64
|
-
.getState()
|
|
65
|
-
.updateNodes([{ id: node.id, data: patch }]);
|
|
77
|
+
commitRingPatch(node.id, holeIndex, patch);
|
|
66
78
|
},
|
|
67
79
|
canCommit() {
|
|
68
80
|
const final = useScene.getState().nodes[node.id];
|
|
@@ -118,9 +130,7 @@ export function createPolygonAddVertexAffordance(kind, options) {
|
|
|
118
130
|
// Apply the insert immediately so the user sees the new vertex
|
|
119
131
|
// before they even move.
|
|
120
132
|
const initialPatch = buildRingPatch(node, holeIndex, initialRing, options?.boundaryCommitData);
|
|
121
|
-
|
|
122
|
-
.getState()
|
|
123
|
-
.updateNodes([{ id: node.id, data: initialPatch }]);
|
|
133
|
+
commitRingPatch(node.id, holeIndex, initialPatch);
|
|
124
134
|
return {
|
|
125
135
|
affectedIds: [node.id],
|
|
126
136
|
apply({ planPoint, modifiers }) {
|
|
@@ -141,9 +151,7 @@ export function createPolygonAddVertexAffordance(kind, options) {
|
|
|
141
151
|
});
|
|
142
152
|
const nextRing = initialRing.map((p, i) => i === newVertexIndex ? [snapped[0], snapped[1]] : p);
|
|
143
153
|
const patch = buildRingPatch(node, holeIndex, nextRing, options?.boundaryCommitData);
|
|
144
|
-
|
|
145
|
-
.getState()
|
|
146
|
-
.updateNodes([{ id: node.id, data: patch }]);
|
|
154
|
+
commitRingPatch(node.id, holeIndex, patch);
|
|
147
155
|
},
|
|
148
156
|
canCommit() {
|
|
149
157
|
const final = useScene.getState().nodes[node.id];
|
|
@@ -189,9 +197,7 @@ export function createPolygonDeleteVertexAffordance(kind, options) {
|
|
|
189
197
|
}
|
|
190
198
|
const nextRing = ring.filter((_, index) => index !== vertexIndex);
|
|
191
199
|
const patch = buildRingPatch(current, holeIndex, nextRing, options?.boundaryCommitData);
|
|
192
|
-
|
|
193
|
-
.getState()
|
|
194
|
-
.updateNodes([{ id: node.id, data: patch }]);
|
|
200
|
+
commitRingPatch(node.id, holeIndex, patch);
|
|
195
201
|
},
|
|
196
202
|
};
|
|
197
203
|
},
|
|
@@ -308,9 +314,7 @@ export function createPolygonMoveEdgeAffordance(kind, options) {
|
|
|
308
314
|
return [p[0], p[1]];
|
|
309
315
|
});
|
|
310
316
|
const patch = buildRingPatch(node, holeIndex, nextRing, options?.boundaryCommitData);
|
|
311
|
-
|
|
312
|
-
.getState()
|
|
313
|
-
.updateNodes([{ id: node.id, data: patch }]);
|
|
317
|
+
commitRingPatch(node.id, holeIndex, patch);
|
|
314
318
|
},
|
|
315
319
|
canCommit() {
|
|
316
320
|
const final = useScene.getState().nodes[node.id];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-hangers.d.ts","sourceRoot":"","sources":["../../src/shared/run-hangers.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,SAAS,EACd,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,eAAe,
|
|
1
|
+
{"version":3,"file":"run-hangers.d.ts","sourceRoot":"","sources":["../../src/shared/run-hangers.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,SAAS,EACd,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EAMpB,KAAK,eAAe,EAGrB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAGL,eAAe,EACf,KAAK,EAOL,OAAO,EACR,MAAM,OAAO,CAAA;AAId,MAAM,MAAM,YAAY,GAAG,eAAe,GAAG,eAAe,CAAA;AAC5D,MAAM,MAAM,SAAS,GAAG;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,SAAS,CAAA;CAAE,CAAA;AAEnG,wBAAgB,gBAAgB,CAAC,GAAG,CAAC,EAAE,eAAe,GAAG,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAqBlF;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,OAAO,CAAA;IACf,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,SAAS,GAAG,IAAI,CAAA;CACzB,CAAA;AAED,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,YAAY,EACjB,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,GAChC,aAAa,EAAE,CA6EjB;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,GAAG,SAAS,EAAE,CAEhG;AA0CD,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,YAAY,GAAG,eAAe,CAQ1E;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CA+B7F;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,YAAY,EAAE,GAAG,CAAC,EAAE,eAAe,GAAG,KAAK,CAsC/E;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,YAAY,EAAE,GAAG,EAAE,eAAe,GAAG,iBAAiB,EAAE,CAqC/F"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { getWallBaseElevationForNodes, getWallCurveFrameAt, getWallEffectiveHeightForNodes, getWallThickness, pointInPolygon, resolveCeilingHeight, } from '@pascal-app/core';
|
|
1
|
+
import { getWallBaseElevationForNodes, getWallCurveFrameAt, getWallEffectiveHeightForNodes, getWallLocalFaceZ, getWallThickness, pointInPolygon, resolveCeilingHeight, } from '@pascal-app/core';
|
|
2
2
|
import { BoxGeometry, CylinderGeometry, ExtrudeGeometry, Group, Matrix4, Mesh, MeshStandardMaterial, Path, Shape, Vector2, Vector3, } from 'three';
|
|
3
3
|
import { rectSectionAxes } from '../duct-segment/geometry';
|
|
4
4
|
import { hasWallChildOverlap, resolveWallAttachmentAtPlanPoint } from './wall-attach-target';
|
|
@@ -30,7 +30,7 @@ export function hangerSceneNodes(ctx) {
|
|
|
30
30
|
return nodes;
|
|
31
31
|
}
|
|
32
32
|
export function planRunHangerSlots(run, nodes) {
|
|
33
|
-
if (!run.autoHangers
|
|
33
|
+
if (!(run.autoHangers && run.parentId))
|
|
34
34
|
return [];
|
|
35
35
|
const spacing = run.hangerSpacing ?? 1.5;
|
|
36
36
|
const reach = run.hangerMaxReach ?? 2;
|
|
@@ -79,8 +79,9 @@ export function planRunHangerSlots(run, nodes) {
|
|
|
79
79
|
continue;
|
|
80
80
|
const frame = getWallCurveFrameAt(host, hit.localX / hit.wallLength);
|
|
81
81
|
const side = hit.perpDistance >= 0 ? 1 : -1;
|
|
82
|
-
|
|
83
|
-
|
|
82
|
+
const faceOffset = getWallLocalFaceZ(host, side > 0 ? 'a' : 'b');
|
|
83
|
+
anchor = new Vector3(frame.point.x - hit.dirY * faceOffset, center.y, frame.point.y + hit.dirX * faceOffset);
|
|
84
|
+
if (Math.abs(hit.perpDistance) < faceOffset * side - 0.001)
|
|
84
85
|
continue;
|
|
85
86
|
}
|
|
86
87
|
else
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { ColumnNode, DoorNode, HandleDescriptor, WindowNode } from '@pascal-app/core';
|
|
2
|
+
type Opening = WindowNode | DoorNode;
|
|
3
|
+
/**
|
|
4
|
+
* A window or door built from a script resizes only through the params its
|
|
5
|
+
* script declares: a `width` param keeps the side arrows, a `height` param
|
|
6
|
+
* the top arrow (the bottom stays on its sill or threshold), and nothing
|
|
7
|
+
* else shows. The drag previews the box; release rebuilds the script with
|
|
8
|
+
* the param moved by the dragged amount (trim around the opening included).
|
|
9
|
+
*/
|
|
10
|
+
export declare function scriptedOpeningHandles<N extends Opening>(node: N, width: (side: 'left' | 'right') => HandleDescriptor<N>, height: () => HandleDescriptor<N>): HandleDescriptor<N>[];
|
|
11
|
+
/**
|
|
12
|
+
* A scripted window, door or column resized by a handle: each size param its
|
|
13
|
+
* script declares moves by the dragged amount, within the param's range, and
|
|
14
|
+
* the script reruns once.
|
|
15
|
+
*/
|
|
16
|
+
export declare function rebuildScriptedSize<N extends Opening | ColumnNode>(initial: N, patch: Partial<N>, position?: N['position']): void;
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=scripted-opening-handles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scripted-opening-handles.d.ts","sourceRoot":"","sources":["../../src/shared/scripted-opening-handles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,QAAQ,EACR,gBAAgB,EAEhB,UAAU,EACX,MAAM,kBAAkB,CAAA;AAGzB,KAAK,OAAO,GAAG,UAAU,GAAG,QAAQ,CAAA;AAEpC;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,SAAS,OAAO,EACtD,IAAI,EAAE,CAAC,EACP,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,KAAK,gBAAgB,CAAC,CAAC,CAAC,EACtD,MAAM,EAAE,MAAM,gBAAgB,CAAC,CAAC,CAAC,GAChC,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAQvB;AAiBD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,OAAO,GAAG,UAAU,EAChE,OAAO,EAAE,CAAC,EACV,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,EACjB,QAAQ,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,GACvB,IAAI,CAiBN"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { rebuildAuthoredObject } from '@pascal-app/editor';
|
|
2
|
+
/**
|
|
3
|
+
* A window or door built from a script resizes only through the params its
|
|
4
|
+
* script declares: a `width` param keeps the side arrows, a `height` param
|
|
5
|
+
* the top arrow (the bottom stays on its sill or threshold), and nothing
|
|
6
|
+
* else shows. The drag previews the box; release rebuilds the script with
|
|
7
|
+
* the param moved by the dragged amount (trim around the opening included).
|
|
8
|
+
*/
|
|
9
|
+
export function scriptedOpeningHandles(node, width, height) {
|
|
10
|
+
const declared = new Set(node.source?.manifest.params.map((spec) => spec.id));
|
|
11
|
+
const handles = [];
|
|
12
|
+
if (declared.has('width')) {
|
|
13
|
+
handles.push(byParam(width('left'), 'width'), byParam(width('right'), 'width'));
|
|
14
|
+
}
|
|
15
|
+
if (declared.has('height'))
|
|
16
|
+
handles.push(byParam(height(), 'height'));
|
|
17
|
+
return handles;
|
|
18
|
+
}
|
|
19
|
+
function byParam(handle, param) {
|
|
20
|
+
const linear = handle;
|
|
21
|
+
return {
|
|
22
|
+
...linear,
|
|
23
|
+
commit: (initial, patch) =>
|
|
24
|
+
// A side arrow keeps the opposite edge: the rebuild takes the moved centre.
|
|
25
|
+
rebuildScriptedSize(initial, patch, param === 'width' ? patch.position : undefined),
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
const SIZE_PARAMS = new Set(['width', 'height', 'depth']);
|
|
29
|
+
/**
|
|
30
|
+
* A scripted window, door or column resized by a handle: each size param its
|
|
31
|
+
* script declares moves by the dragged amount, within the param's range, and
|
|
32
|
+
* the script reruns once.
|
|
33
|
+
*/
|
|
34
|
+
export function rebuildScriptedSize(initial, patch, position) {
|
|
35
|
+
const source = initial.source;
|
|
36
|
+
if (!source)
|
|
37
|
+
return;
|
|
38
|
+
const params = { ...source.params };
|
|
39
|
+
let moved = false;
|
|
40
|
+
for (const spec of source.manifest.params) {
|
|
41
|
+
const next = patch[spec.id];
|
|
42
|
+
if (!SIZE_PARAMS.has(spec.id) || typeof next !== 'number')
|
|
43
|
+
continue;
|
|
44
|
+
const before = initial[spec.id];
|
|
45
|
+
const current = Number(source.params[spec.id] ?? spec.default ?? before);
|
|
46
|
+
params[spec.id] = clamp(current + (next - before), spec.min, spec.max);
|
|
47
|
+
moved = true;
|
|
48
|
+
}
|
|
49
|
+
if (!moved)
|
|
50
|
+
return;
|
|
51
|
+
rebuildAuthoredObject(initial.id, params, position).catch((reason) => console.error('[scripted] resize failed', reason));
|
|
52
|
+
}
|
|
53
|
+
const clamp = (value, min, max) => Math.min(max ?? Number.POSITIVE_INFINITY, Math.max(min ?? Number.NEGATIVE_INFINITY, value));
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { type ColumnNode, type DoorNode, type WindowNode } from '@pascal-app/core';
|
|
2
|
+
/**
|
|
3
|
+
* A window, door or column built from a script, rendered exactly as an authored
|
|
4
|
+
* item: the same artifact, paint slots, clips and lights. The artifact's origin
|
|
5
|
+
* is its bottom centre: an opening's mesh is centred on the opening, a column's
|
|
6
|
+
* sits on its support point.
|
|
7
|
+
*/
|
|
8
|
+
export declare function ScriptedOpeningModel({ node }: {
|
|
9
|
+
node: WindowNode | DoorNode | ColumnNode;
|
|
10
|
+
}): import("react").JSX.Element;
|
|
11
|
+
/** Open and Close for a window or door built from a script: its `open` clip, through the item toggles. */
|
|
12
|
+
export declare const scriptedOpening: {
|
|
13
|
+
has: (node: {
|
|
14
|
+
source?: WindowNode["source"];
|
|
15
|
+
}) => boolean;
|
|
16
|
+
isOn: (node: {
|
|
17
|
+
id: string;
|
|
18
|
+
source?: WindowNode["source"];
|
|
19
|
+
}) => boolean;
|
|
20
|
+
set: (node: {
|
|
21
|
+
id: string;
|
|
22
|
+
source?: WindowNode["source"];
|
|
23
|
+
}, on: boolean) => void;
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=scripted-opening.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scripted-opening.d.ts","sourceRoot":"","sources":["../../src/shared/scripted-opening.tsx"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,UAAU,EACf,KAAK,QAAQ,EAQb,KAAK,UAAU,EAChB,MAAM,kBAAkB,CAAA;AAMzB;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,UAAU,GAAG,QAAQ,GAAG,UAAU,CAAA;CAAE,+BA8C1F;AAWD,0GAA0G;AAC1G,eAAO,MAAM,eAAe;gBACd;QAAE,MAAM,CAAC,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAA;KAAE;iBAChC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAA;KAAE;gBAK9C;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAA;KAAE,MAAM,OAAO;CAKvE,CAAA"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { artifactUrl, scriptedOrigin, scriptedSize, scriptInteractive, useInteractive, useScene, } from '@pascal-app/core';
|
|
4
|
+
import { SCRIPTED_MODEL_FLAG } from '@pascal-app/viewer';
|
|
5
|
+
import { useCallback, useMemo, useRef } from 'react';
|
|
6
|
+
import { ScriptedModel } from '../item/renderer';
|
|
7
|
+
/**
|
|
8
|
+
* A window, door or column built from a script, rendered exactly as an authored
|
|
9
|
+
* item: the same artifact, paint slots, clips and lights. The artifact's origin
|
|
10
|
+
* is its bottom centre: an opening's mesh is centred on the opening, a column's
|
|
11
|
+
* sits on its support point.
|
|
12
|
+
*/
|
|
13
|
+
export function ScriptedOpeningModel({ node }) {
|
|
14
|
+
const source = node.source;
|
|
15
|
+
const ref = useRef(null);
|
|
16
|
+
const modelData = useMemo(() => ({ [SCRIPTED_MODEL_FLAG]: true }), []);
|
|
17
|
+
const view = useMemo(() => {
|
|
18
|
+
const [width, height, depth] = scriptedSize(source.manifest);
|
|
19
|
+
return {
|
|
20
|
+
id: node.id,
|
|
21
|
+
type: 'item',
|
|
22
|
+
parentId: node.parentId,
|
|
23
|
+
metadata: node.metadata,
|
|
24
|
+
slots: node.slots,
|
|
25
|
+
source,
|
|
26
|
+
scale: [1, 1, 1],
|
|
27
|
+
asset: {
|
|
28
|
+
src: artifactUrl(source.artifact),
|
|
29
|
+
dimensions: [width, height, depth],
|
|
30
|
+
offset: [0, 0, 0],
|
|
31
|
+
rotation: [0, 0, 0],
|
|
32
|
+
scale: [1, 1, 1],
|
|
33
|
+
interactive: scriptInteractive(source.manifest, scriptedOrigin({ type: node.type, source })),
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
}, [node.id, node.type, node.parentId, node.metadata, node.slots, source]);
|
|
37
|
+
const setSettled = useCallback((settled) => {
|
|
38
|
+
if (ref.current) {
|
|
39
|
+
ref.current.userData.itemModelSettled = settled;
|
|
40
|
+
// A column has no system of its own: its renderer and batch read the flag on the node's group.
|
|
41
|
+
if (node.type === 'column' && ref.current.parent)
|
|
42
|
+
ref.current.parent.userData.itemModelSettled = settled;
|
|
43
|
+
}
|
|
44
|
+
// The opening's system holds its dirty mark until the artifact has loaded.
|
|
45
|
+
if (settled)
|
|
46
|
+
useScene.getState().markDirty(node.id);
|
|
47
|
+
}, [node.id, node.type]);
|
|
48
|
+
const [, height] = scriptedSize(source.manifest);
|
|
49
|
+
return (_jsx("group", { "position-y": node.type === 'column' ? 0 : -height / 2, ref: ref, userData: modelData, children: _jsx(ScriptedModel, { setSettled: setSettled, view: view }) }));
|
|
50
|
+
}
|
|
51
|
+
/** The toggle that plays a scripted opening's `open` clip, as the item's Open control. */
|
|
52
|
+
function openControl(node) {
|
|
53
|
+
if (!node.source)
|
|
54
|
+
return undefined;
|
|
55
|
+
const effect = scriptInteractive(node.source.manifest)?.effects.find((candidate) => candidate.kind === 'animation' && candidate.mode === 'open-close');
|
|
56
|
+
return effect?.kind === 'animation' ? effect.control : undefined;
|
|
57
|
+
}
|
|
58
|
+
/** Open and Close for a window or door built from a script: its `open` clip, through the item toggles. */
|
|
59
|
+
export const scriptedOpening = {
|
|
60
|
+
has: (node) => openControl(node) !== undefined,
|
|
61
|
+
isOn: (node) => {
|
|
62
|
+
const control = openControl(node);
|
|
63
|
+
if (control === undefined)
|
|
64
|
+
return false;
|
|
65
|
+
return Boolean(useInteractive.getState().items[node.id]?.controlValues[control]);
|
|
66
|
+
},
|
|
67
|
+
set: (node, on) => {
|
|
68
|
+
const control = openControl(node);
|
|
69
|
+
if (control !== undefined)
|
|
70
|
+
useInteractive.getState().setControlValue(node.id, control, on);
|
|
71
|
+
},
|
|
72
|
+
};
|
|
@@ -8,14 +8,14 @@ export type SlotPaintMaterialResolution = {
|
|
|
8
8
|
};
|
|
9
9
|
export declare function resolveSlotPaintMaterialRef(materials: Record<SceneMaterialId, SceneMaterial>, material: MaterialSchema | undefined, materialPreset: string | undefined): SlotPaintMaterialResolution | null;
|
|
10
10
|
/** Preview material for a slot paint — mirrors the commit's resolution. */
|
|
11
|
-
export declare function buildSlotPreviewMaterial(material: MaterialSchema | undefined, materialPreset: string | undefined): Material | null;
|
|
11
|
+
export declare function buildSlotPreviewMaterial(material: MaterialSchema | undefined, materialPreset: string | undefined, materials?: Record<SceneMaterialId, SceneMaterial>): Material | null;
|
|
12
12
|
/**
|
|
13
13
|
* Preview for kinds whose meshes are produced by `def.geometry` and tagged
|
|
14
14
|
* with `userData.slotId` (+ `__fromGeometry`). Swaps every builder mesh whose
|
|
15
15
|
* slot matches `role`, leaving hosted-child meshes (which can carry a colliding
|
|
16
16
|
* `userData.slotId` from their own GLB) untouched.
|
|
17
17
|
*/
|
|
18
|
-
export declare function previewGeometrySlot(args: PaintPreviewArgs): (() => void) | null;
|
|
18
|
+
export declare function previewGeometrySlot(args: PaintPreviewArgs, matches?: (meshRole: string) => boolean): (() => void) | null;
|
|
19
19
|
/**
|
|
20
20
|
* Preview for kinds whose meshes are built by a viewer system (window, door)
|
|
21
21
|
* and tagged with `userData.slotId` — no `__fromGeometry` marker and no hosted
|
|
@@ -48,6 +48,18 @@ export type SlotPaintConfig = {
|
|
|
48
48
|
} | null;
|
|
49
49
|
/** Opt into the painter's `room` application scope (walls, slabs). */
|
|
50
50
|
roomScope?: boolean;
|
|
51
|
+
/**
|
|
52
|
+
* What `role` shows once erased, for the eraser's hover preview (the eraser
|
|
53
|
+
* itself writes no finish). Defaults to the slot's declared `default`; null
|
|
54
|
+
* leaves the preview to `applyPreview`.
|
|
55
|
+
*/
|
|
56
|
+
erasedLook?: (args: PaintPreviewArgs) => PaintLook | null;
|
|
57
|
+
};
|
|
58
|
+
export type PaintLook = {
|
|
59
|
+
material?: MaterialSchema;
|
|
60
|
+
materialPreset?: string;
|
|
51
61
|
};
|
|
62
|
+
/** A slot's declared default, as a look: what an unpainted slot draws. */
|
|
63
|
+
export declare function declaredSlotLook(node: AnyNode, role: string): PaintLook | null;
|
|
52
64
|
export declare function createSlotPaintCapability(config: SlotPaintConfig): PaintCapability;
|
|
53
65
|
//# sourceMappingURL=slot-paint.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slot-paint.d.ts","sourceRoot":"","sources":["../../src/shared/slot-paint.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EAGZ,KAAK,cAAc,EACnB,KAAK,cAAc,
|
|
1
|
+
{"version":3,"file":"slot-paint.d.ts","sourceRoot":"","sources":["../../src/shared/slot-paint.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EAGZ,KAAK,cAAc,EACnB,KAAK,cAAc,EAEnB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EAErB,KAAK,aAAa,EAClB,KAAK,eAAe,EAMrB,MAAM,kBAAkB,CAAA;AAQzB,OAAO,EAAE,KAAK,QAAQ,EAAuC,MAAM,OAAO,CAAA;AAuB1E,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEhE;AAED,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,MAAM,IAAI,CAKzF;AA4DD,MAAM,MAAM,2BAA2B,GAAG;IACxC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;IACvB,gBAAgB,EAAE,aAAa,GAAG,IAAI,CAAA;CACvC,CAAA;AAED,wBAAgB,2BAA2B,CACzC,SAAS,EAAE,MAAM,CAAC,eAAe,EAAE,aAAa,CAAC,EACjD,QAAQ,EAAE,cAAc,GAAG,SAAS,EACpC,cAAc,EAAE,MAAM,GAAG,SAAS,GACjC,2BAA2B,GAAG,IAAI,CAmBpC;AA2CD,2EAA2E;AAC3E,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,cAAc,GAAG,SAAS,EACpC,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,SAAS,GAAE,MAAM,CAAC,eAAe,EAAE,aAAa,CAAiC,GAChF,QAAQ,GAAG,IAAI,CAYjB;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,gBAAgB,EACtB,OAAO,GAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAA8C,GAC5E,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CA6BrB;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,gBAAgB,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAsBjF;AAMD;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,gBAAgB,GAAG,MAAM,GAAG,IAAI,CAW5E;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,cAAc,CAAC,EAAE,cAAc,CAAA;IAC/B,2EAA2E;IAC3E,WAAW,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,MAAM,GAAG,IAAI,CAAA;IACtD,iEAAiE;IACjE,YAAY,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAAA;IAC7D;;;;OAIG;IACH,eAAe,CAAC,EAAE,CAChB,IAAI,EAAE,OAAO,EACb,IAAI,EAAE,MAAM,KACT;QAAE,QAAQ,EAAE,cAAc,GAAG,SAAS,CAAC;QAAC,cAAc,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,GAAG,IAAI,CAAA;IACxF,sEAAsE;IACtE,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB;;;;OAIG;IACH,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,SAAS,GAAG,IAAI,CAAA;CAC1D,CAAA;AAED,MAAM,MAAM,SAAS,GAAG;IAAE,QAAQ,CAAC,EAAE,cAAc,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAE9E,0EAA0E;AAC1E,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAM9E;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,eAAe,GAAG,eAAe,CAoDlF"}
|
|
@@ -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
|
}
|
|
@@ -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',
|
|
@@ -87,17 +87,10 @@ export declare function snapLocalXToNeighbors(args: {
|
|
|
87
87
|
threshold?: number;
|
|
88
88
|
}): number | null;
|
|
89
89
|
/**
|
|
90
|
-
*
|
|
91
|
-
*
|
|
92
|
-
* wall-mounted item)? AABB test in the wall's local face plane. `ignoreId`
|
|
93
|
-
* excludes the moving node itself. Returns `true` (blocked) if the wall is
|
|
94
|
-
* gone.
|
|
95
|
-
*
|
|
96
|
-
* Single source of truth for door + window placement collision — door-math and
|
|
97
|
-
* window-math had byte-identical copies of this. Y conventions differ per kind
|
|
98
|
-
* (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.
|
|
99
92
|
*/
|
|
100
|
-
export
|
|
93
|
+
export { hasWallChildOverlap } from '@pascal-app/core/building';
|
|
101
94
|
/** Placement state for a wall-hosted opening — the SINGLE decision the preview
|
|
102
95
|
* tint and the commit gate both consume so they can never disagree. */
|
|
103
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,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
|
|
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"}
|