@pascal-app/nodes 1.0.5 → 1.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/dist/beam/actions/move-endpoint.d.ts +24 -0
- package/dist/beam/actions/move-endpoint.d.ts.map +1 -0
- package/dist/beam/actions/move-endpoint.js +54 -0
- package/dist/beam/definition.d.ts +14 -0
- package/dist/beam/definition.d.ts.map +1 -0
- package/dist/beam/definition.js +173 -0
- package/dist/beam/draft-settings.d.ts +17 -0
- package/dist/beam/draft-settings.d.ts.map +1 -0
- package/dist/beam/draft-settings.js +81 -0
- package/dist/beam/drafting.d.ts +35 -0
- package/dist/beam/drafting.d.ts.map +1 -0
- package/dist/beam/drafting.js +103 -0
- package/dist/beam/floorplan-affordances.d.ts +8 -0
- package/dist/beam/floorplan-affordances.d.ts.map +1 -0
- package/dist/beam/floorplan-affordances.js +40 -0
- package/dist/beam/floorplan-move.d.ts +11 -0
- package/dist/beam/floorplan-move.d.ts.map +1 -0
- package/dist/beam/floorplan-move.js +54 -0
- package/dist/beam/floorplan.d.ts +11 -0
- package/dist/beam/floorplan.d.ts.map +1 -0
- package/dist/beam/floorplan.js +91 -0
- package/dist/beam/geometry.d.ts +19 -0
- package/dist/beam/geometry.d.ts.map +1 -0
- package/dist/beam/geometry.js +63 -0
- package/dist/beam/index.d.ts +3 -0
- package/dist/beam/index.d.ts.map +1 -0
- package/dist/beam/index.js +2 -0
- package/dist/beam/move-endpoint-tool.d.ts +21 -0
- package/dist/beam/move-endpoint-tool.d.ts.map +1 -0
- package/dist/beam/move-endpoint-tool.js +49 -0
- package/dist/beam/move-tool.d.ts +12 -0
- package/dist/beam/move-tool.d.ts.map +1 -0
- package/dist/beam/move-tool.js +114 -0
- package/dist/beam/panel-model.d.ts +28 -0
- package/dist/beam/panel-model.d.ts.map +1 -0
- package/dist/beam/panel-model.js +123 -0
- package/dist/beam/panel.d.ts +13 -0
- package/dist/beam/panel.d.ts.map +1 -0
- package/dist/beam/panel.js +107 -0
- package/dist/beam/parametrics.d.ts +3 -0
- package/dist/beam/parametrics.d.ts.map +1 -0
- package/dist/beam/parametrics.js +4 -0
- package/dist/beam/renderer.d.ts +13 -0
- package/dist/beam/renderer.d.ts.map +1 -0
- package/dist/beam/renderer.js +36 -0
- package/dist/beam/schema.d.ts +2 -0
- package/dist/beam/schema.d.ts.map +1 -0
- package/dist/beam/schema.js +1 -0
- package/dist/beam/tool.d.ts +13 -0
- package/dist/beam/tool.d.ts.map +1 -0
- package/dist/beam/tool.js +152 -0
- package/dist/box-vent/panel.d.ts.map +1 -1
- package/dist/box-vent/panel.js +8 -7
- package/dist/cabinet/batchable.d.ts +10 -0
- package/dist/cabinet/batchable.d.ts.map +1 -0
- package/dist/cabinet/batchable.js +12 -0
- package/dist/cabinet/compartment-card.d.ts.map +1 -1
- package/dist/cabinet/compartment-card.js +142 -46
- package/dist/cabinet/countertop-layout.d.ts +5 -0
- package/dist/cabinet/countertop-layout.d.ts.map +1 -1
- package/dist/cabinet/definition.d.ts.map +1 -1
- package/dist/cabinet/definition.js +3 -0
- package/dist/cabinet/dimension-input.d.ts +6 -0
- package/dist/cabinet/dimension-input.d.ts.map +1 -0
- package/dist/cabinet/dimension-input.js +8 -0
- package/dist/cabinet/essential-controls.d.ts.map +1 -1
- package/dist/cabinet/essential-controls.js +82 -17
- package/dist/cabinet/index.d.ts +1 -1
- package/dist/cabinet/index.d.ts.map +1 -1
- package/dist/cabinet/index.js +1 -1
- package/dist/cabinet/kitchen-catalog.d.ts +17 -4
- package/dist/cabinet/kitchen-catalog.d.ts.map +1 -1
- package/dist/cabinet/kitchen-catalog.js +45 -7
- package/dist/cabinet/kitchen-collection.d.ts.map +1 -1
- package/dist/cabinet/kitchen-collection.js +21 -5
- package/dist/cabinet/kitchen-module-actions.d.ts.map +1 -1
- package/dist/cabinet/kitchen-module-actions.js +107 -14
- package/dist/cabinet/neighbor-placement.d.ts +10 -0
- package/dist/cabinet/neighbor-placement.d.ts.map +1 -1
- package/dist/cabinet/panel.d.ts.map +1 -1
- package/dist/cabinet/panel.js +127 -50
- package/dist/cabinet/run-finishing.d.ts +5 -0
- package/dist/cabinet/run-finishing.d.ts.map +1 -1
- package/dist/cabinet/run-ops.d.ts +5 -0
- package/dist/cabinet/run-ops.d.ts.map +1 -1
- package/dist/cabinet/run-panel.d.ts.map +1 -1
- package/dist/cabinet/run-panel.js +203 -52
- package/dist/cabinet/tool.d.ts.map +1 -1
- package/dist/cabinet/tool.js +8 -5
- package/dist/ceiling/build-up-section.d.ts +7 -0
- package/dist/ceiling/build-up-section.d.ts.map +1 -0
- package/dist/ceiling/build-up-section.js +57 -0
- package/dist/ceiling/definition.d.ts.map +1 -1
- package/dist/ceiling/definition.js +3 -1
- package/dist/ceiling/floorplan-affordances.d.ts +112 -0
- package/dist/ceiling/floorplan-affordances.d.ts.map +1 -1
- package/dist/ceiling/materials.d.ts +5 -0
- package/dist/ceiling/materials.d.ts.map +1 -1
- package/dist/ceiling/materials.js +17 -0
- package/dist/ceiling/panel-model.d.ts +13 -0
- package/dist/ceiling/panel-model.d.ts.map +1 -0
- package/dist/ceiling/panel-model.js +49 -0
- package/dist/ceiling/panel.d.ts.map +1 -1
- package/dist/ceiling/panel.js +82 -18
- package/dist/ceiling/renderer.d.ts.map +1 -1
- package/dist/ceiling/renderer.js +10 -4
- package/dist/ceiling/tool.d.ts.map +1 -1
- package/dist/ceiling/tool.js +24 -4
- package/dist/chimney/panel.d.ts.map +1 -1
- package/dist/chimney/panel.js +113 -41
- package/dist/column/definition.d.ts.map +1 -1
- package/dist/column/definition.js +3 -0
- package/dist/column/floorplan.d.ts.map +1 -1
- package/dist/column/floorplan.js +17 -0
- package/dist/column/hosted-resize.d.ts +28 -1
- package/dist/column/hosted-resize.d.ts.map +1 -1
- package/dist/column/panel.d.ts.map +1 -1
- package/dist/column/panel.js +125 -37
- package/dist/column/post-options.d.ts +10 -0
- package/dist/column/post-options.d.ts.map +1 -0
- package/dist/column/post-options.js +71 -0
- package/dist/column/post-placement.d.ts +78 -0
- package/dist/column/post-placement.d.ts.map +1 -0
- package/dist/column/post-placement.js +157 -0
- package/dist/column/post-section.d.ts +17 -0
- package/dist/column/post-section.d.ts.map +1 -0
- package/dist/column/post-section.js +95 -0
- package/dist/column/post-tool.d.ts +11 -0
- package/dist/column/post-tool.d.ts.map +1 -0
- package/dist/column/post-tool.js +94 -0
- package/dist/column/tool.d.ts +3 -10
- package/dist/column/tool.d.ts.map +1 -1
- package/dist/column/tool.js +13 -1
- package/dist/cupola/panel.d.ts.map +1 -1
- package/dist/cupola/panel.js +14 -7
- package/dist/door/actions.d.ts +7 -0
- package/dist/door/actions.d.ts.map +1 -0
- package/dist/door/actions.js +32 -0
- package/dist/door/contextual-dimensions.d.ts.map +1 -1
- package/dist/door/contextual-dimensions.js +11 -1
- package/dist/door/definition.d.ts.map +1 -1
- package/dist/door/definition.js +34 -7
- package/dist/door/floorplan-affordances.d.ts.map +1 -1
- package/dist/door/floorplan-affordances.js +5 -2
- package/dist/door/floorplan-move.d.ts.map +1 -1
- package/dist/door/floorplan-move.js +28 -6
- package/dist/door/floorplan.d.ts +2 -0
- package/dist/door/floorplan.d.ts.map +1 -1
- package/dist/door/floorplan.js +89 -16
- package/dist/door/move-tool.d.ts.map +1 -1
- package/dist/door/move-tool.js +60 -16
- package/dist/door/paint.d.ts +2 -7
- package/dist/door/paint.d.ts.map +1 -1
- package/dist/door/paint.js +26 -2
- package/dist/door/panel.d.ts.map +1 -1
- package/dist/door/panel.js +242 -90
- package/dist/door/parametrics.js +1 -1
- package/dist/door/placement.d.ts.map +1 -1
- package/dist/door/placement.js +9 -2
- package/dist/door/swing.d.ts +22 -0
- package/dist/door/swing.d.ts.map +1 -0
- package/dist/door/swing.js +36 -0
- package/dist/door/tool.d.ts.map +1 -1
- package/dist/door/tool.js +76 -29
- package/dist/dormer/panel-actions-section.d.ts.map +1 -1
- package/dist/dormer/panel-actions-section.js +3 -1
- package/dist/dormer/panel-position-section.d.ts.map +1 -1
- package/dist/dormer/panel-position-section.js +4 -3
- package/dist/dormer/panel-windows-section.d.ts.map +1 -1
- package/dist/dormer/panel-windows-section.js +38 -1
- package/dist/dormer/panel.d.ts.map +1 -1
- package/dist/dormer/panel.js +24 -18
- package/dist/downspout/inspector-editors.d.ts.map +1 -1
- package/dist/downspout/inspector-editors.js +3 -2
- package/dist/duct-fitting/inspector-editors.d.ts.map +1 -1
- package/dist/duct-fitting/inspector-editors.js +6 -1
- package/dist/duct-fitting/tool.d.ts.map +1 -1
- package/dist/duct-fitting/tool.js +11 -2
- package/dist/duct-terminal/tool.d.ts.map +1 -1
- package/dist/duct-terminal/tool.js +11 -2
- package/dist/elevator/panel.d.ts.map +1 -1
- package/dist/elevator/panel.js +41 -18
- package/dist/eyebrow-vent/panel.d.ts.map +1 -1
- package/dist/eyebrow-vent/panel.js +16 -6
- package/dist/fence/drafting.d.ts +2 -3
- package/dist/fence/drafting.d.ts.map +1 -1
- package/dist/fence/drafting.js +2 -3
- package/dist/fence/inspector-editors.d.ts.map +1 -1
- package/dist/fence/inspector-editors.js +64 -21
- package/dist/fence/move-endpoint-tool.d.ts.map +1 -1
- package/dist/fence/move-endpoint-tool.js +11 -2
- package/dist/fence/system.d.ts.map +1 -1
- package/dist/fence/system.js +13 -0
- package/dist/fence-feature/actions.d.ts.map +1 -1
- package/dist/fence-feature/actions.js +5 -2
- package/dist/fence-feature/inspector.d.ts.map +1 -1
- package/dist/fence-feature/inspector.js +150 -34
- package/dist/fence-feature/move-session.d.ts +1 -1
- package/dist/floor-opening/floorplan.d.ts +29 -6
- package/dist/floor-opening/floorplan.d.ts.map +1 -1
- package/dist/floor-opening/floorplan.js +172 -14
- package/dist/gutter/downspouts-panel.d.ts.map +1 -1
- package/dist/gutter/downspouts-panel.js +14 -2
- package/dist/hvac-equipment/tool.d.ts.map +1 -1
- package/dist/hvac-equipment/tool.js +3 -2
- package/dist/i18n/definition-messages.d.ts +5 -0
- package/dist/i18n/definition-messages.d.ts.map +1 -0
- package/dist/i18n/definition-messages.js +771 -0
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -1
- package/dist/item/authored-params.d.ts.map +1 -1
- package/dist/item/authored-params.js +19 -4
- package/dist/item/floorplan.d.ts +1 -1
- package/dist/item/floorplan.d.ts.map +1 -1
- package/dist/item/panel.d.ts.map +1 -1
- package/dist/item/panel.js +9 -7
- package/dist/liquid-line/tool.d.ts.map +1 -1
- package/dist/liquid-line/tool.js +10 -3
- package/dist/measurement/tool.d.ts +1 -1
- package/dist/measurement/tool.d.ts.map +1 -1
- package/dist/measurement/tool.js +8 -8
- package/dist/pipe-fitting/tool.d.ts.map +1 -1
- package/dist/pipe-fitting/tool.js +3 -2
- package/dist/pipe-trap/tool.d.ts.map +1 -1
- package/dist/pipe-trap/tool.js +7 -2
- package/dist/procedural-item/renderer.d.ts.map +1 -1
- package/dist/procedural-item/renderer.js +8 -1
- package/dist/ridge-vent/panel.d.ts.map +1 -1
- package/dist/ridge-vent/panel.js +22 -9
- package/dist/roof/barrel-panel.d.ts.map +1 -1
- package/dist/roof/barrel-panel.js +7 -3
- package/dist/roof/definition.d.ts.map +1 -1
- package/dist/roof/definition.js +33 -3
- package/dist/roof/floorplan-overrides.d.ts +22 -0
- package/dist/roof/floorplan-overrides.d.ts.map +1 -0
- package/dist/roof/floorplan-overrides.js +46 -0
- package/dist/roof/floorplan-tool.d.ts +9 -0
- package/dist/roof/floorplan-tool.d.ts.map +1 -0
- package/dist/roof/floorplan-tool.js +168 -0
- package/dist/roof/floorplan.d.ts.map +1 -1
- package/dist/roof/floorplan.js +131 -41
- package/dist/roof/glazing-controls.d.ts +2 -1
- package/dist/roof/glazing-controls.d.ts.map +1 -1
- package/dist/roof/glazing-controls.js +51 -13
- package/dist/roof/glazing-panel-editor.d.ts.map +1 -1
- package/dist/roof/glazing-panel-editor.js +40 -13
- package/dist/roof/glazing-panel.d.ts.map +1 -1
- package/dist/roof/glazing-panel.js +73 -9
- package/dist/roof/paint.d.ts +19 -0
- package/dist/roof/paint.d.ts.map +1 -0
- package/dist/roof/paint.js +158 -0
- package/dist/roof/panel.d.ts.map +1 -1
- package/dist/roof/panel.js +90 -22
- package/dist/roof/renderer.d.ts.map +1 -1
- package/dist/roof/renderer.js +13 -2
- package/dist/roof/roof-footprint-source.d.ts +17 -0
- package/dist/roof/roof-footprint-source.d.ts.map +1 -1
- package/dist/roof/roof-footprint-source.js +14 -0
- package/dist/roof/roof-footprint.d.ts +36 -2
- package/dist/roof/roof-footprint.d.ts.map +1 -1
- package/dist/roof/roof-footprint.js +124 -2
- package/dist/roof/roof-materials.d.ts.map +1 -1
- package/dist/roof/roof-materials.js +10 -1
- package/dist/roof/roof-placement-mode.d.ts +0 -2
- package/dist/roof/roof-placement-mode.d.ts.map +1 -1
- package/dist/roof/roof-placement-mode.js +8 -6
- package/dist/roof/roof-plan-creases.d.ts +50 -0
- package/dist/roof/roof-plan-creases.d.ts.map +1 -0
- package/dist/roof/roof-plan-creases.js +194 -0
- package/dist/roof/roof-ridge-mode.d.ts +20 -0
- package/dist/roof/roof-ridge-mode.d.ts.map +1 -0
- package/dist/roof/roof-ridge-mode.js +16 -0
- package/dist/roof/tool.d.ts +17 -4
- package/dist/roof/tool.d.ts.map +1 -1
- package/dist/roof/tool.js +211 -113
- package/dist/roof/wall-catch.d.ts +106 -0
- package/dist/roof/wall-catch.d.ts.map +1 -0
- package/dist/roof/wall-catch.js +267 -0
- package/dist/roof-segment/build-up-section.d.ts +9 -0
- package/dist/roof-segment/build-up-section.d.ts.map +1 -0
- package/dist/roof-segment/build-up-section.js +191 -0
- package/dist/roof-segment/definition.d.ts.map +1 -1
- package/dist/roof-segment/definition.js +50 -5
- package/dist/roof-segment/floorplan-affordances.d.ts.map +1 -1
- package/dist/roof-segment/floorplan-affordances.js +68 -19
- package/dist/roof-segment/floorplan.d.ts.map +1 -1
- package/dist/roof-segment/floorplan.js +16 -12
- package/dist/roof-segment/paint.d.ts +3 -1
- package/dist/roof-segment/paint.d.ts.map +1 -1
- package/dist/roof-segment/paint.js +43 -2
- package/dist/roof-segment/panel-model.d.ts +23 -0
- package/dist/roof-segment/panel-model.d.ts.map +1 -0
- package/dist/roof-segment/panel-model.js +64 -0
- package/dist/roof-segment/panel.d.ts.map +1 -1
- package/dist/roof-segment/panel.js +96 -14
- package/dist/roof-segment/parametrics.d.ts.map +1 -1
- package/dist/roof-segment/parametrics.js +4 -0
- package/dist/roof-segment/renderer.d.ts.map +1 -1
- package/dist/roof-segment/renderer.js +26 -5
- package/dist/separator/definition.d.ts.map +1 -1
- package/dist/separator/definition.js +10 -12
- package/dist/separator/floorplan-affordances.d.ts +9 -0
- package/dist/separator/floorplan-affordances.d.ts.map +1 -0
- package/dist/separator/floorplan-affordances.js +23 -0
- package/dist/separator/floorplan.d.ts +9 -0
- package/dist/separator/floorplan.d.ts.map +1 -0
- package/dist/separator/floorplan.js +54 -0
- package/dist/separator/renderer.d.ts +4 -0
- package/dist/separator/renderer.d.ts.map +1 -1
- package/dist/separator/renderer.js +21 -6
- package/dist/separator/selection.d.ts +10 -0
- package/dist/separator/selection.d.ts.map +1 -0
- package/dist/separator/selection.js +35 -0
- package/dist/shared/build-up-controls.d.ts +88 -0
- package/dist/shared/build-up-controls.d.ts.map +1 -0
- package/dist/shared/build-up-controls.js +139 -0
- package/dist/shared/curtain-opening-limits.d.ts.map +1 -1
- package/dist/shared/curtain-opening-limits.js +44 -14
- package/dist/shared/item-interaction-actions.d.ts.map +1 -1
- package/dist/shared/item-interaction-actions.js +11 -2
- package/dist/shared/layer-thickness.d.ts +2 -0
- package/dist/shared/layer-thickness.d.ts.map +1 -0
- package/dist/shared/layer-thickness.js +3 -0
- package/dist/shared/move-roof-tool.d.ts.map +1 -1
- package/dist/shared/move-roof-tool.js +100 -5
- package/dist/shared/node-batch/batchable.d.ts +2 -0
- package/dist/shared/node-batch/batchable.d.ts.map +1 -1
- package/dist/shared/node-batch/batchable.js +4 -0
- package/dist/shared/node-batch/candidates.d.ts +21 -5
- package/dist/shared/node-batch/candidates.d.ts.map +1 -1
- package/dist/shared/node-batch/candidates.js +85 -50
- package/dist/shared/node-batch/system.d.ts.map +1 -1
- package/dist/shared/node-batch/system.js +24 -15
- package/dist/shared/opening-casing-move.d.ts +16 -0
- package/dist/shared/opening-casing-move.d.ts.map +1 -0
- package/dist/shared/opening-casing-move.js +33 -0
- package/dist/shared/opening-casing-section.d.ts +15 -0
- package/dist/shared/opening-casing-section.d.ts.map +1 -0
- package/dist/shared/opening-casing-section.js +38 -0
- package/dist/shared/opening-casing.d.ts +26 -0
- package/dist/shared/opening-casing.d.ts.map +1 -0
- package/dist/shared/opening-casing.js +80 -0
- package/dist/shared/opening-depth-position.d.ts +13 -0
- package/dist/shared/opening-depth-position.d.ts.map +1 -0
- package/dist/shared/opening-depth-position.js +34 -0
- package/dist/shared/opening-documentation.d.ts.map +1 -1
- package/dist/shared/opening-documentation.js +17 -8
- package/dist/shared/opening-guides-runtime.d.ts +2 -1
- package/dist/shared/opening-guides-runtime.d.ts.map +1 -1
- package/dist/shared/opening-guides-runtime.js +11 -7
- package/dist/shared/opening-labels.d.ts +11 -0
- package/dist/shared/opening-labels.d.ts.map +1 -0
- package/dist/shared/opening-labels.js +46 -0
- package/dist/shared/opening-placement-dimensions.d.ts.map +1 -1
- package/dist/shared/opening-placement-dimensions.js +11 -9
- package/dist/shared/opening-plane-offset.d.ts +4 -3
- package/dist/shared/opening-plane-offset.d.ts.map +1 -1
- package/dist/shared/opening-plane-offset.js +7 -4
- package/dist/shared/opening-swap.d.ts +8 -0
- package/dist/shared/opening-swap.d.ts.map +1 -0
- package/dist/shared/opening-swap.js +18 -0
- package/dist/shared/polygon-vertex-affordance.d.ts +19 -0
- package/dist/shared/polygon-vertex-affordance.d.ts.map +1 -1
- package/dist/shared/polygon-vertex-affordance.js +65 -6
- package/dist/shared/roof-opening-host.d.ts +2 -1
- package/dist/shared/roof-opening-host.d.ts.map +1 -1
- package/dist/shared/roof-opening-host.js +14 -5
- package/dist/shared/roof-wall-opening-cut.d.ts.map +1 -1
- package/dist/shared/roof-wall-opening-cut.js +14 -6
- package/dist/shared/roof-wall-opening-placement.d.ts +2 -1
- package/dist/shared/roof-wall-opening-placement.d.ts.map +1 -1
- package/dist/shared/roof-wall-opening-placement.js +6 -4
- package/dist/shared/run-hanger-inspector.d.ts.map +1 -1
- package/dist/shared/run-hanger-inspector.js +39 -5
- package/dist/shared/system-check-panel.d.ts.map +1 -1
- package/dist/shared/system-check-panel.js +94 -15
- package/dist/shared/wall-attach-target.d.ts.map +1 -1
- package/dist/shared/wall-attach-target.js +6 -3
- package/dist/shelf/definition.d.ts.map +1 -1
- package/dist/shelf/definition.js +2 -0
- package/dist/site/ground-hole.d.ts +3 -3
- package/dist/site/ground-hole.js +3 -3
- package/dist/site/ground-veil.d.ts +5 -12
- package/dist/site/ground-veil.d.ts.map +1 -1
- package/dist/site/ground-veil.js +9 -33
- package/dist/site/panel.d.ts.map +1 -1
- package/dist/site/panel.js +52 -12
- package/dist/site/renderer.d.ts.map +1 -1
- package/dist/site/renderer.js +52 -23
- package/dist/skylight/panel.d.ts.map +1 -1
- package/dist/skylight/panel.js +49 -19
- package/dist/slab/deck-geometry.d.ts +28 -0
- package/dist/slab/deck-geometry.d.ts.map +1 -0
- package/dist/slab/deck-geometry.js +320 -0
- package/dist/slab/definition.d.ts +2 -1
- package/dist/slab/definition.d.ts.map +1 -1
- package/dist/slab/definition.js +6 -1
- package/dist/slab/dependency-tracker.d.ts.map +1 -1
- package/dist/slab/dependency-tracker.js +3 -0
- package/dist/slab/floorplan-affordances.d.ts +500 -0
- package/dist/slab/floorplan-affordances.d.ts.map +1 -1
- package/dist/slab/geometry.d.ts.map +1 -1
- package/dist/slab/geometry.js +46 -9
- package/dist/slab/panel.d.ts.map +1 -1
- package/dist/slab/panel.js +97 -21
- package/dist/slab/renderer.d.ts +11 -0
- package/dist/slab/renderer.d.ts.map +1 -0
- package/dist/slab/renderer.js +19 -0
- package/dist/slab/system.d.ts.map +1 -1
- package/dist/slab/system.js +12 -1
- package/dist/solar-panel/panel.d.ts.map +1 -1
- package/dist/solar-panel/panel.js +49 -14
- package/dist/stair/construction-controls.d.ts +3 -1
- package/dist/stair/construction-controls.d.ts.map +1 -1
- package/dist/stair/construction-controls.js +75 -12
- package/dist/stair/paint.d.ts +6 -0
- package/dist/stair/paint.d.ts.map +1 -1
- package/dist/stair/panel.d.ts.map +1 -1
- package/dist/stair/panel.js +243 -51
- package/dist/stair/parametrics.d.ts.map +1 -1
- package/dist/stair/parametrics.js +7 -0
- package/dist/stair/placement-defaults.d.ts +18 -0
- package/dist/stair/placement-defaults.d.ts.map +1 -0
- package/dist/stair/placement-defaults.js +27 -0
- package/dist/stair/railing-controls.d.ts.map +1 -1
- package/dist/stair/railing-controls.js +78 -18
- package/dist/stair/renderer.d.ts.map +1 -1
- package/dist/stair/renderer.js +16 -10
- package/dist/stair/structure-controls.d.ts +18 -0
- package/dist/stair/structure-controls.d.ts.map +1 -0
- package/dist/stair/structure-controls.js +275 -0
- package/dist/stair/tool.d.ts.map +1 -1
- package/dist/stair/tool.js +13 -9
- package/dist/stair/use-stair-render-data.d.ts +41 -0
- package/dist/stair/use-stair-render-data.d.ts.map +1 -1
- package/dist/stair-segment/panel.d.ts.map +1 -1
- package/dist/stair-segment/panel.js +65 -18
- package/dist/turbine-vent/panel.d.ts.map +1 -1
- package/dist/turbine-vent/panel.js +14 -5
- package/dist/unit/unit-panel.d.ts.map +1 -1
- package/dist/unit/unit-panel.js +28 -12
- package/dist/wall/actions.d.ts +1 -1
- package/dist/wall/actions.d.ts.map +1 -1
- package/dist/wall/actions.js +17 -13
- package/dist/wall/construction-dimensions.d.ts +6 -0
- package/dist/wall/construction-dimensions.d.ts.map +1 -1
- package/dist/wall/construction-dimensions.js +8 -0
- package/dist/wall/contextual-dimensions.d.ts +6 -0
- package/dist/wall/contextual-dimensions.d.ts.map +1 -1
- package/dist/wall/contextual-dimensions.js +104 -17
- package/dist/wall/curtain-opening-frame.d.ts.map +1 -1
- package/dist/wall/curtain-opening-frame.js +6 -4
- package/dist/wall/curtain-wall-layout.d.ts +1 -1
- package/dist/wall/curtain-wall-layout.d.ts.map +1 -1
- package/dist/wall/curtain-wall-layout.js +6 -4
- package/dist/wall/curtain-wall-materials.d.ts.map +1 -1
- package/dist/wall/curtain-wall-materials.js +8 -3
- package/dist/wall/curtain-wall-panel.d.ts.map +1 -1
- package/dist/wall/curtain-wall-panel.js +241 -37
- package/dist/wall/curve-tool.d.ts.map +1 -1
- package/dist/wall/curve-tool.js +2 -3
- package/dist/wall/definition.d.ts.map +1 -1
- package/dist/wall/definition.js +20 -5
- package/dist/wall/floorplan-affordances.d.ts.map +1 -1
- package/dist/wall/floorplan-affordances.js +9 -6
- package/dist/wall/floorplan-move.d.ts.map +1 -1
- package/dist/wall/floorplan-move.js +66 -16
- package/dist/wall/floorplan.d.ts +4 -5
- package/dist/wall/floorplan.d.ts.map +1 -1
- package/dist/wall/floorplan.js +62 -46
- package/dist/wall/move-endpoint-tool.d.ts.map +1 -1
- package/dist/wall/move-endpoint-tool.js +1 -0
- package/dist/wall/move-tool.d.ts.map +1 -1
- package/dist/wall/move-tool.js +77 -12
- package/dist/wall/paint.d.ts +2 -2
- package/dist/wall/paint.d.ts.map +1 -1
- package/dist/wall/paint.js +11 -4
- package/dist/wall/panel-model.d.ts +17 -2
- package/dist/wall/panel-model.d.ts.map +1 -1
- package/dist/wall/panel-model.js +158 -18
- package/dist/wall/panel.d.ts +8 -0
- package/dist/wall/panel.d.ts.map +1 -1
- package/dist/wall/panel.js +228 -156
- package/dist/wall/parametrics.d.ts +1 -1
- package/dist/wall/parametrics.d.ts.map +1 -1
- package/dist/wall/parametrics.js +14 -1
- package/dist/wall/railing-wall-adapter.d.ts +7 -0
- package/dist/wall/railing-wall-adapter.d.ts.map +1 -0
- package/dist/wall/railing-wall-adapter.js +38 -0
- package/dist/wall/railing-wall-floorplan.d.ts +8 -0
- package/dist/wall/railing-wall-floorplan.d.ts.map +1 -0
- package/dist/wall/railing-wall-floorplan.js +27 -0
- package/dist/wall/railing-wall-geometry.d.ts +12 -0
- package/dist/wall/railing-wall-geometry.d.ts.map +1 -0
- package/dist/wall/railing-wall-geometry.js +51 -0
- package/dist/wall/railing-wall-guard.d.ts +81 -0
- package/dist/wall/railing-wall-guard.d.ts.map +1 -0
- package/dist/wall/railing-wall-guard.js +435 -0
- package/dist/wall/railing-wall-materials.d.ts +11 -0
- package/dist/wall/railing-wall-materials.d.ts.map +1 -0
- package/dist/wall/railing-wall-materials.js +31 -0
- package/dist/wall/railing-wall-panel-model.d.ts +30 -0
- package/dist/wall/railing-wall-panel-model.d.ts.map +1 -0
- package/dist/wall/railing-wall-panel-model.js +117 -0
- package/dist/wall/railing-wall-panel.d.ts +17 -0
- package/dist/wall/railing-wall-panel.d.ts.map +1 -0
- package/dist/wall/railing-wall-panel.js +42 -0
- package/dist/wall/rectangle-command.d.ts +79 -1
- 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 +2 -0
- package/dist/wall/renderer.d.ts.map +1 -1
- package/dist/wall/renderer.js +3 -1
- package/dist/wall/skirting-floor-gaps.d.ts +8 -0
- package/dist/wall/skirting-floor-gaps.d.ts.map +1 -0
- package/dist/wall/skirting-floor-gaps.js +36 -0
- package/dist/wall/system.d.ts +0 -14
- package/dist/wall/system.d.ts.map +1 -1
- package/dist/wall/system.js +6 -1
- package/dist/wall/tool.d.ts +16 -0
- package/dist/wall/tool.d.ts.map +1 -1
- package/dist/wall/tool.js +160 -47
- package/dist/wall/treatments.d.ts +3 -0
- package/dist/wall/treatments.d.ts.map +1 -1
- package/dist/wall/treatments.js +30 -7
- package/dist/window/actions.d.ts +7 -0
- package/dist/window/actions.d.ts.map +1 -0
- package/dist/window/actions.js +29 -0
- package/dist/window/definition.d.ts.map +1 -1
- package/dist/window/definition.js +11 -2
- package/dist/window/floorplan-move.d.ts.map +1 -1
- package/dist/window/floorplan-move.js +5 -0
- package/dist/window/floorplan.d.ts +2 -0
- package/dist/window/floorplan.d.ts.map +1 -1
- package/dist/window/floorplan.js +58 -1
- package/dist/window/mechanism.d.ts.map +1 -1
- package/dist/window/mechanism.js +21 -1
- package/dist/window/move-tool.d.ts.map +1 -1
- package/dist/window/move-tool.js +10 -3
- package/dist/window/paint.d.ts +2 -7
- package/dist/window/paint.d.ts.map +1 -1
- package/dist/window/paint.js +31 -3
- package/dist/window/panel.d.ts.map +1 -1
- package/dist/window/panel.js +311 -69
- package/dist/window/placement.d.ts.map +1 -1
- package/dist/window/placement.js +5 -1
- package/dist/window/swing.d.ts +13 -0
- package/dist/window/swing.d.ts.map +1 -0
- package/dist/window/swing.js +16 -0
- package/dist/window/tool.d.ts.map +1 -1
- package/dist/window/tool.js +19 -14
- package/dist/zone/floorplan-affordances.d.ts +136 -0
- package/dist/zone/floorplan-affordances.d.ts.map +1 -1
- package/dist/zone/quantities-panel.d.ts.map +1 -1
- package/dist/zone/quantities-panel.js +34 -9
- package/dist/zone/renderer.d.ts.map +1 -1
- package/dist/zone/renderer.js +9 -5
- package/package.json +14 -14
- package/dist/site/generic-foundation-geometry.d.ts +0 -16
- package/dist/site/generic-foundation-geometry.d.ts.map +0 -1
- package/dist/site/generic-foundation-geometry.js +0 -75
- package/dist/site/generic-foundation.d.ts +0 -4
- package/dist/site/generic-foundation.d.ts.map +0 -1
- package/dist/site/generic-foundation.js +0 -91
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { beamCeilingPlane, beamPlan, beamSizeLabel, beamSizePresetPatch, beamTopElevation, beamTopReferencePatch, DEFAULT_FRAMING_POST_SIZE, usePascalI18n, useScene, } from '@pascal-app/core';
|
|
4
|
+
import { ActionButton, ActionGroup, formatLinearMeasurement, MetricControl, PanelSection, PanelWrapper, SegmentedControl, SelectControl, triggerSFX, useEditor, } from '@pascal-app/editor';
|
|
5
|
+
import { useViewer } from '@pascal-app/viewer';
|
|
6
|
+
import { Columns2, Move, Trash2 } from 'lucide-react';
|
|
7
|
+
import { useState } from 'react';
|
|
8
|
+
import { electedPostFoot, framingPostsUnderBeam } from '../column/post-placement.js';
|
|
9
|
+
import { BEAM_MATERIAL_OPTIONS, beamSizeOptions, beamSizeValue, beamTopOptions, beamTopValue, } from './panel-model.js';
|
|
10
|
+
const IN = 0.0254;
|
|
11
|
+
const CUSTOM = 'custom';
|
|
12
|
+
/** A section size in metres, shown in inches on an imperial plan (feet would show 7-1/2 in as 0.63). */
|
|
13
|
+
function InchField({ label, value, onCommit, }) {
|
|
14
|
+
const [draft, setDraft] = useState(null);
|
|
15
|
+
const imperial = useViewer((state) => state.unit) === 'imperial';
|
|
16
|
+
const toShown = (meters) => (imperial ? meters / IN : meters);
|
|
17
|
+
return (_jsx(MetricControl, { className: "h-9 text-xs", label: label, min: toShown(0.01), onChange: (next) => setDraft(next), onCommit: (next) => {
|
|
18
|
+
setDraft(null);
|
|
19
|
+
onCommit(imperial ? next * IN : next);
|
|
20
|
+
}, precision: imperial ? 3 : 4, restoreOnCommit: false, step: imperial ? 0.25 : 0.005, unit: imperial ? 'in' : 'm', value: draft ?? toShown(value) }));
|
|
21
|
+
}
|
|
22
|
+
/** The fields a ply count writes: as many plies of the same board, the width growing with them. */
|
|
23
|
+
export function beamPliesPatch(beam, plies) {
|
|
24
|
+
return { plies, width: (beam.width / beam.plies) * plies };
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* A beam's panel: its size (a stock size, or a width, depth and plies of its own), what it is made
|
|
28
|
+
* of, how the joists meet it and where its top is, with its length and underside; Move, Delete,
|
|
29
|
+
* and posts under it at each end and every 8 ft.
|
|
30
|
+
*/
|
|
31
|
+
export default function BeamPanel() {
|
|
32
|
+
const i18n = usePascalI18n();
|
|
33
|
+
const selectedId = useViewer((state) => state.selection.selectedIds[0]);
|
|
34
|
+
const setSelection = useViewer((state) => state.setSelection);
|
|
35
|
+
const unit = useViewer((state) => state.unit);
|
|
36
|
+
const metricNotation = useViewer((state) => state.metricNotation);
|
|
37
|
+
const nodes = useScene((state) => state.nodes);
|
|
38
|
+
const beam = selectedId ? nodes[selectedId] : undefined;
|
|
39
|
+
if (beam?.type !== 'beam')
|
|
40
|
+
return null;
|
|
41
|
+
const update = (patch) => useScene.getState().updateNode(beam.id, patch);
|
|
42
|
+
const length = (meters) => formatLinearMeasurement(meters, unit, metricNotation);
|
|
43
|
+
const size = beamSizeValue(beam);
|
|
44
|
+
const top = beamTopValue(nodes, beam);
|
|
45
|
+
const topY = beamTopElevation(nodes, beam);
|
|
46
|
+
const plane = beamCeilingPlane(nodes, beam);
|
|
47
|
+
return (_jsxs(PanelWrapper, { icon: "/icons/beam.svg", onClose: () => setSelection({ selectedIds: [] }), title: beam.name ?? i18n._({ id: 'node.beam.panel.beam', message: 'Beam' }), width: 300, children: [_jsxs(PanelSection, { title: i18n._({
|
|
48
|
+
id: 'node.beam.panel.beamSize',
|
|
49
|
+
message: 'Beam {size}',
|
|
50
|
+
values: { size: beamSizeLabel(beam) },
|
|
51
|
+
}), children: [_jsx(SelectControl, { label: i18n._({ id: 'node.beam.panel.size', message: 'Size' }), onChange: (id) => {
|
|
52
|
+
if (id !== CUSTOM)
|
|
53
|
+
update(beamSizePresetPatch(beam, id));
|
|
54
|
+
}, options: beamSizeOptions(size), value: size }), _jsx(SelectControl, { label: i18n._({ id: 'node.beam.panel.material', message: 'Material' }), onChange: (material) => update({ material: material }), options: BEAM_MATERIAL_OPTIONS, value: beam.material }), _jsx(InchField, { label: i18n._({ id: 'node.beam.panel.width', message: 'Width' }), onCommit: (width) => update({ width, size: undefined }), value: beam.width }), _jsx(InchField, { label: i18n._({ id: 'node.beam.panel.depth', message: 'Depth' }), onCommit: (depth) => update({ depth, size: undefined }), value: beam.depth }), _jsx(SegmentedControl, { onChange: (plies) => update(beamPliesPatch(beam, Number(plies))), options: ['1', '2', '3', '4'].map((plies) => ({
|
|
55
|
+
label: plies === '1'
|
|
56
|
+
? i18n._({ id: 'node.beam.panel.n1Ply', message: '1 ply' })
|
|
57
|
+
: i18n._({
|
|
58
|
+
id: 'node.beam.panel.pliesPlies',
|
|
59
|
+
message: '{plies} plies',
|
|
60
|
+
values: { plies },
|
|
61
|
+
}),
|
|
62
|
+
value: plies,
|
|
63
|
+
})), value: String(beam.plies) })] }), _jsxs(PanelSection, { title: i18n._({ id: 'node.beam.panel.placement', message: 'Placement' }), children: [_jsx(SegmentedControl, { onChange: (placement) => update({ placement }), options: [
|
|
64
|
+
{
|
|
65
|
+
label: i18n._({ id: 'node.beam.panel.dropped', message: 'Dropped' }),
|
|
66
|
+
value: 'dropped',
|
|
67
|
+
},
|
|
68
|
+
{ label: i18n._({ id: 'node.beam.panel.flush', message: 'Flush' }), value: 'flush' },
|
|
69
|
+
], value: beam.placement }), _jsx(SelectControl, { label: i18n._({ id: 'node.beam.panel.top', message: 'Top' }), onChange: (reference) => {
|
|
70
|
+
if (reference !== CUSTOM)
|
|
71
|
+
update(beamTopReferencePatch(nodes, beam, reference));
|
|
72
|
+
}, options: beamTopOptions(top), value: top }), _jsx(MetricControl, { label: i18n._({ id: 'node.beam.panel.topElevation', message: 'Top elevation' }), onChange: (value) => update({ topElevation: value }), precision: 3, step: 0.01, unit: "m", value: topY }), _jsx("p", { className: "px-0.5 text-muted-foreground text-xs", "data-beam-readout": true, children: i18n._({
|
|
73
|
+
id: 'node.beam.panel.lengthLongItsUnderside',
|
|
74
|
+
message: '{length} long; its underside {underside} over the floor, the ceiling plane {plane}.',
|
|
75
|
+
values: {
|
|
76
|
+
length: length(beamPlan(beam).length),
|
|
77
|
+
underside: length(topY - beam.depth),
|
|
78
|
+
plane: length(plane),
|
|
79
|
+
},
|
|
80
|
+
}) }), beam.topElevation !== undefined && (_jsx("button", { className: "self-start rounded-full border border-border/50 px-3 py-1 text-muted-foreground text-xs hover:text-foreground", onClick: () => update({ topElevation: undefined }), type: "button", children: i18n._({
|
|
81
|
+
id: 'node.beam.panel.followTheCeilingPlane',
|
|
82
|
+
message: 'Follow the ceiling plane',
|
|
83
|
+
}) }))] }), _jsx(PanelSection, { title: i18n._({ id: 'node.beam.panel.actions', message: 'Actions' }), children: _jsxs(ActionGroup, { children: [_jsx(ActionButton, { icon: _jsx(Columns2, { className: "h-3.5 w-3.5" }), label: i18n._({ id: 'node.beam.panel.addPosts', message: 'Add posts' }), onClick: () => {
|
|
84
|
+
const posts = beam.parentId
|
|
85
|
+
? framingPostsUnderBeam({
|
|
86
|
+
nodes,
|
|
87
|
+
beam,
|
|
88
|
+
choices: { size: DEFAULT_FRAMING_POST_SIZE, base: 'none' },
|
|
89
|
+
foot: electedPostFoot(nodes, beam.parentId),
|
|
90
|
+
})
|
|
91
|
+
: [];
|
|
92
|
+
if (posts.length === 0)
|
|
93
|
+
return;
|
|
94
|
+
const standing = Object.values(nodes).filter((node) => node.type === 'column' && node.role === 'post').length;
|
|
95
|
+
useScene.getState().createNodes(posts.map((post, index) => ({
|
|
96
|
+
node: { ...post, name: `Post ${standing + index + 1}` },
|
|
97
|
+
parentId: beam.parentId,
|
|
98
|
+
})));
|
|
99
|
+
triggerSFX('sfx:structure-build');
|
|
100
|
+
} }), _jsx(ActionButton, { icon: _jsx(Move, { className: "h-3.5 w-3.5" }), label: i18n._({ id: 'node.beam.panel.move', message: 'Move' }), onClick: () => {
|
|
101
|
+
triggerSFX('sfx:item-pick');
|
|
102
|
+
useEditor.getState().setMovingNode(beam);
|
|
103
|
+
} }), _jsx(ActionButton, { icon: _jsx(Trash2, { className: "h-3.5 w-3.5" }), label: i18n._({ id: 'node.beam.panel.delete', message: 'Delete' }), onClick: () => {
|
|
104
|
+
useScene.getState().deleteNode(beam.id);
|
|
105
|
+
setSelection({ selectedIds: [] });
|
|
106
|
+
} })] }) })] }));
|
|
107
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parametrics.d.ts","sourceRoot":"","sources":["../../src/beam/parametrics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AAEtE,eAAO,MAAM,eAAe,EAAE,oBAAoB,CAAC,QAAQ,CAG1D,CAAA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type BeamNode } from '@pascal-app/core';
|
|
2
|
+
import type { Material } from 'three';
|
|
3
|
+
/** How a beam of `material` looks: its library material, or the plain surface colour when textures are off. */
|
|
4
|
+
export declare function useBeamMaterial(material: BeamNode['material']): Material;
|
|
5
|
+
/**
|
|
6
|
+
* A beam: its solid laid along the centreline in its level, the top where the beam's top resolves
|
|
7
|
+
* (`beamTopElevation`: its own, else the ceiling plane over it). Reads live overrides, so a drag
|
|
8
|
+
* in either view moves it at once.
|
|
9
|
+
*/
|
|
10
|
+
export default function BeamRenderer({ node: stored }: {
|
|
11
|
+
node: BeamNode;
|
|
12
|
+
}): import("react").JSX.Element;
|
|
13
|
+
//# sourceMappingURL=renderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../src/beam/renderer.tsx"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,QAAQ,EAKd,MAAM,kBAAkB,CAAA;AAQzB,OAAO,KAAK,EAAS,QAAQ,EAAE,MAAM,OAAO,CAAA;AAG5C,+GAA+G;AAC/G,wBAAgB,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,QAAQ,CAWxE;AAED;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,+BAqCxE"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { BEAM_MATERIAL_LIBRARY_REFS, beamTopElevation, useLiveNodeOverrides, useRegistry, useScene, } from '@pascal-app/core';
|
|
4
|
+
import { createSurfaceRoleMaterial, resolveSlotDefaultMaterial, useNodeEvents, useViewer, } from '@pascal-app/viewer';
|
|
5
|
+
import { useEffect, useMemo, useRef } from 'react';
|
|
6
|
+
import { beamBox, buildBeamGeometry } from './geometry.js';
|
|
7
|
+
/** How a beam of `material` looks: its library material, or the plain surface colour when textures are off. */
|
|
8
|
+
export function useBeamMaterial(material) {
|
|
9
|
+
const shading = useViewer((state) => state.shading);
|
|
10
|
+
const textures = useViewer((state) => state.textures);
|
|
11
|
+
const colorPreset = useViewer((state) => state.colorPreset);
|
|
12
|
+
return useMemo(() => textures
|
|
13
|
+
? resolveSlotDefaultMaterial(BEAM_MATERIAL_LIBRARY_REFS[material], shading)
|
|
14
|
+
: createSurfaceRoleMaterial('wall', colorPreset), [material, shading, textures, colorPreset]);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* A beam: its solid laid along the centreline in its level, the top where the beam's top resolves
|
|
18
|
+
* (`beamTopElevation`: its own, else the ceiling plane over it). Reads live overrides, so a drag
|
|
19
|
+
* in either view moves it at once.
|
|
20
|
+
*/
|
|
21
|
+
export default function BeamRenderer({ node: stored }) {
|
|
22
|
+
const ref = useRef(null);
|
|
23
|
+
useRegistry(stored.id, 'beam', ref);
|
|
24
|
+
const live = useLiveNodeOverrides((state) => state.overrides.get(stored.id));
|
|
25
|
+
const node = useMemo(() => (live ? { ...stored, ...live } : stored), [stored, live]);
|
|
26
|
+
const handlers = useNodeEvents(node, 'beam');
|
|
27
|
+
const top = useScene((state) => beamTopElevation(state.nodes, node));
|
|
28
|
+
const material = useBeamMaterial(node.material);
|
|
29
|
+
const placed = beamBox(node, top);
|
|
30
|
+
const length = placed?.size[0] ?? 0;
|
|
31
|
+
const geometry = useMemo(() => length > 0
|
|
32
|
+
? buildBeamGeometry({ width: node.width, depth: node.depth, plies: node.plies, material: node.material }, length)
|
|
33
|
+
: null, [length, node.width, node.depth, node.plies, node.material]);
|
|
34
|
+
useEffect(() => () => geometry?.dispose(), [geometry]);
|
|
35
|
+
return (_jsx("group", { ref: ref, children: placed && geometry && (_jsx("mesh", { castShadow: true, geometry: geometry, material: material, position: placed.position, receiveShadow: true, "rotation-y": placed.rotationY, ...handlers })) }));
|
|
36
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/beam/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { BeamNode } from '@pascal-app/core';
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type BeamNode } from '@pascal-app/core';
|
|
2
|
+
import { type PlacementPreviewDimension } from '@pascal-app/editor';
|
|
3
|
+
/** The draft's length, as a dimension along it in the plan (the 3D view prints its own label). */
|
|
4
|
+
export declare function beamDraftDimensions(beam: BeamNode): PlacementPreviewDimension[];
|
|
5
|
+
/**
|
|
6
|
+
* The beam tool in 2D-only view: the 3D tool lives in the canvas, which never renders while its
|
|
7
|
+
* pane is hidden. The plan draws the draft from the placement preview. Split and 3D views keep the
|
|
8
|
+
* 3D tool as the one owner.
|
|
9
|
+
*/
|
|
10
|
+
export declare function BeamFloorplanTool(): null;
|
|
11
|
+
declare const BeamTool: () => import("react").JSX.Element | null;
|
|
12
|
+
export default BeamTool;
|
|
13
|
+
//# sourceMappingURL=tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../src/beam/tool.tsx"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,QAAQ,EAOd,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAOL,KAAK,yBAAyB,EAO/B,MAAM,oBAAoB,CAAA;AAsB3B,kGAAkG;AAClG,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,QAAQ,GAAG,yBAAyB,EAAE,CAc/E;AAmGD;;;;GAIG;AACH,wBAAgB,iBAAiB,SAGhC;AAED,QAAA,MAAM,QAAQ,0CA6Cb,CAAA;eAEc,QAAQ"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { beamPlan, beamTopElevation, emitter, sceneRegistry, useScene, } from '@pascal-app/core';
|
|
4
|
+
import { CursorSphere, DRAFT_LABEL_Y_OFFSET, DraftMeasurementLabel, formatLinearMeasurement, isSegmentLongEnough, markToolCancelConsumed, triggerSFX, useEditor, usePlacementPreview, useWallSnapIndicator, visibleScene, } from '@pascal-app/editor';
|
|
5
|
+
import { getSceneTheme, useViewer } from '@pascal-app/viewer';
|
|
6
|
+
import { createPortal } from '@react-three/fiber';
|
|
7
|
+
import { useEffect, useMemo, useState } from 'react';
|
|
8
|
+
import { DoubleSide } from 'three';
|
|
9
|
+
import { MeshBasicNodeMaterial } from 'three/webgpu';
|
|
10
|
+
import { stopPlacementCommitPropagation, subscribeFloorPlacementClicks, } from '../shared/floor-placement.js';
|
|
11
|
+
import { draftBeam, snapBeamPoint } from './drafting.js';
|
|
12
|
+
import { beamBox, buildBeamGeometry } from './geometry.js';
|
|
13
|
+
const ghostMaterial = new MeshBasicNodeMaterial({
|
|
14
|
+
color: '#f59e0b',
|
|
15
|
+
depthWrite: false,
|
|
16
|
+
opacity: 0.5,
|
|
17
|
+
side: DoubleSide,
|
|
18
|
+
transparent: true,
|
|
19
|
+
});
|
|
20
|
+
/** The draft's length, as a dimension along it in the plan (the 3D view prints its own label). */
|
|
21
|
+
export function beamDraftDimensions(beam) {
|
|
22
|
+
const plan = beamPlan(beam);
|
|
23
|
+
if (plan.length < 0.05)
|
|
24
|
+
return [];
|
|
25
|
+
return [
|
|
26
|
+
{
|
|
27
|
+
id: 'beam-length',
|
|
28
|
+
start: [plan.start[0], 0, plan.start[1]],
|
|
29
|
+
end: [plan.end[0], 0, plan.end[1]],
|
|
30
|
+
offsetNormal: plan.normal,
|
|
31
|
+
offsetDistance: plan.width / 2 + 0.25,
|
|
32
|
+
value: plan.length,
|
|
33
|
+
renderIn3d: false,
|
|
34
|
+
},
|
|
35
|
+
];
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Drafting beams from the grid events both views send: a click sets the start, the next ends the
|
|
39
|
+
* beam and starts the next one there, so a porch's run is drawn corner to corner; Esc ends the run.
|
|
40
|
+
* Points snap as walls do (wall ends, faces and crossings, other beams' ends and runs, post
|
|
41
|
+
* centres, the grid, the angle steps off the start); Alt places freely. The beam takes the Build
|
|
42
|
+
* panel's size, material and top (`useBeamDraft`), or the preset a host armed the tool with.
|
|
43
|
+
* `enabled` off, it stands aside.
|
|
44
|
+
*/
|
|
45
|
+
function useBeamDrafting(enabled) {
|
|
46
|
+
const levelId = useViewer((state) => state.selection.levelId);
|
|
47
|
+
const [draft, setDraft] = useState(null);
|
|
48
|
+
const [cursor, setCursor] = useState(null);
|
|
49
|
+
useEffect(() => {
|
|
50
|
+
if (!(enabled && levelId))
|
|
51
|
+
return;
|
|
52
|
+
let start = null;
|
|
53
|
+
let last = null;
|
|
54
|
+
setDraft(null);
|
|
55
|
+
const snap = (event) => {
|
|
56
|
+
const { point, snap: caught } = snapBeamPoint({
|
|
57
|
+
point: [event.localPosition[0], event.localPosition[2]],
|
|
58
|
+
nodes: useScene.getState().nodes,
|
|
59
|
+
levelId,
|
|
60
|
+
start,
|
|
61
|
+
free: event.nativeEvent?.altKey === true,
|
|
62
|
+
});
|
|
63
|
+
if (caught)
|
|
64
|
+
useWallSnapIndicator.getState().set({ x: point[0], z: point[1], kind: caught });
|
|
65
|
+
else
|
|
66
|
+
useWallSnapIndicator.getState().clear();
|
|
67
|
+
return point;
|
|
68
|
+
};
|
|
69
|
+
const make = (from, to, fields) => draftBeam(from, to, levelId, useScene.getState().nodes, undefined, useEditor.getState().toolDefaults.beam, fields);
|
|
70
|
+
const show = (next) => {
|
|
71
|
+
setDraft(next);
|
|
72
|
+
if (next)
|
|
73
|
+
usePlacementPreview.getState().set(next, null, beamDraftDimensions(next));
|
|
74
|
+
else
|
|
75
|
+
usePlacementPreview.getState().clear();
|
|
76
|
+
};
|
|
77
|
+
const onMove = (event) => {
|
|
78
|
+
const point = snap(event);
|
|
79
|
+
if (last && point[0] === last[0] && point[1] === last[1])
|
|
80
|
+
return;
|
|
81
|
+
last = point;
|
|
82
|
+
setCursor([point[0], event.localPosition[1], point[1]]);
|
|
83
|
+
show(start && isSegmentLongEnough(start, point) ? make(start, point) : null);
|
|
84
|
+
};
|
|
85
|
+
const onClick = (event) => {
|
|
86
|
+
const point = last ?? snap(event);
|
|
87
|
+
stopPlacementCommitPropagation(event);
|
|
88
|
+
if (!start) {
|
|
89
|
+
start = point;
|
|
90
|
+
triggerSFX('sfx:grid-snap');
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
if (!isSegmentLongEnough(start, point))
|
|
94
|
+
return;
|
|
95
|
+
const count = Object.values(useScene.getState().nodes).filter((node) => node.type === 'beam').length;
|
|
96
|
+
const beam = make(start, point, { name: `Beam ${count + 1}` });
|
|
97
|
+
useScene.getState().createNode(beam, levelId);
|
|
98
|
+
triggerSFX('sfx:structure-build');
|
|
99
|
+
// The run goes on from the end just placed.
|
|
100
|
+
start = point;
|
|
101
|
+
show(null);
|
|
102
|
+
};
|
|
103
|
+
const onCancel = () => {
|
|
104
|
+
if (!start)
|
|
105
|
+
return;
|
|
106
|
+
markToolCancelConsumed();
|
|
107
|
+
start = null;
|
|
108
|
+
show(null);
|
|
109
|
+
};
|
|
110
|
+
emitter.on('grid:move', onMove);
|
|
111
|
+
emitter.on('tool:cancel', onCancel);
|
|
112
|
+
const unsubscribeClicks = subscribeFloorPlacementClicks(onClick);
|
|
113
|
+
return () => {
|
|
114
|
+
emitter.off('grid:move', onMove);
|
|
115
|
+
emitter.off('tool:cancel', onCancel);
|
|
116
|
+
unsubscribeClicks();
|
|
117
|
+
usePlacementPreview.getState().clear();
|
|
118
|
+
useWallSnapIndicator.getState().clear();
|
|
119
|
+
setDraft(null);
|
|
120
|
+
setCursor(null);
|
|
121
|
+
};
|
|
122
|
+
}, [enabled, levelId]);
|
|
123
|
+
return { levelId, draft, cursor };
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* The beam tool in 2D-only view: the 3D tool lives in the canvas, which never renders while its
|
|
127
|
+
* pane is hidden. The plan draws the draft from the placement preview. Split and 3D views keep the
|
|
128
|
+
* 3D tool as the one owner.
|
|
129
|
+
*/
|
|
130
|
+
export function BeamFloorplanTool() {
|
|
131
|
+
useBeamDrafting(useEditor((state) => visibleScene(state) === '2d'));
|
|
132
|
+
return null;
|
|
133
|
+
}
|
|
134
|
+
const BeamTool = () => {
|
|
135
|
+
const { levelId, draft, cursor } = useBeamDrafting(useEditor((state) => visibleScene(state) !== '2d'));
|
|
136
|
+
const top = useScene((state) => (draft ? beamTopElevation(state.nodes, draft) : 0));
|
|
137
|
+
const unit = useViewer((state) => state.unit);
|
|
138
|
+
const metricNotation = useViewer((state) => state.metricNotation);
|
|
139
|
+
const dark = useViewer((state) => getSceneTheme(state.sceneTheme).appearance === 'dark');
|
|
140
|
+
const placed = draft ? beamBox(draft, top) : null;
|
|
141
|
+
const length = placed?.size[0] ?? 0;
|
|
142
|
+
const geometry = useMemo(() => (draft && length > 0 ? buildBeamGeometry(draft, length) : null), [draft, length]);
|
|
143
|
+
useEffect(() => () => geometry?.dispose(), [geometry]);
|
|
144
|
+
const level = levelId ? sceneRegistry.nodes.get(levelId) : undefined;
|
|
145
|
+
if (!levelId)
|
|
146
|
+
return null;
|
|
147
|
+
return (_jsxs(_Fragment, { children: [cursor && _jsx(CursorSphere, { position: cursor }), placed &&
|
|
148
|
+
geometry &&
|
|
149
|
+
level &&
|
|
150
|
+
createPortal(_jsxs("group", { children: [_jsx("mesh", { geometry: geometry, material: ghostMaterial, position: placed.position, raycast: () => { }, renderOrder: 2, "rotation-y": placed.rotationY }), _jsx(DraftMeasurementLabel, { color: dark ? '#ffffff' : '#111111', label: formatLinearMeasurement(length, unit, metricNotation), position: [placed.position[0], top + DRAFT_LABEL_Y_OFFSET, placed.position[2]], shadowColor: dark ? '#111111' : '#ffffff' })] }), level)] }));
|
|
151
|
+
};
|
|
152
|
+
export default BeamTool;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"panel.d.ts","sourceRoot":"","sources":["../../src/box-vent/panel.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"panel.d.ts","sourceRoot":"","sources":["../../src/box-vent/panel.tsx"],"names":[],"mappings":"AA2BA;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,OAAO,UAAU,YAAY,uCAsYnC"}
|
package/dist/box-vent/panel.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { getActiveRoofHeight, useLiveNodeOverrides, useScene, } from '@pascal-app/core';
|
|
3
|
+
import { getActiveRoofHeight, useLiveNodeOverrides, usePascalI18n, useScene, } from '@pascal-app/core';
|
|
4
4
|
import { ActionButton, ActionGroup, duplicateNodeAndPickUp, PanelSection, PanelWrapper, SegmentedControl, SliderControl, triggerSFX, useEditor, } from '@pascal-app/editor';
|
|
5
5
|
import { useViewer } from '@pascal-app/viewer';
|
|
6
6
|
import { Copy, Move, Trash2 } from 'lucide-react';
|
|
@@ -18,6 +18,7 @@ import { useCallback } from 'react';
|
|
|
18
18
|
* ghost commits; on Esc it cancels and the original mesh is restored.
|
|
19
19
|
*/
|
|
20
20
|
export default function BoxVentPanel() {
|
|
21
|
+
const i18n = usePascalI18n();
|
|
21
22
|
const selectedId = useViewer((s) => s.selection.selectedIds[0]);
|
|
22
23
|
const setSelection = useViewer((s) => s.setSelection);
|
|
23
24
|
const updateNode = useScene((s) => s.updateNode);
|
|
@@ -100,11 +101,11 @@ export default function BoxVentPanel() {
|
|
|
100
101
|
}, [selectedId, node, deleteNode, setSelection]);
|
|
101
102
|
if (!(node && node.type === 'box-vent' && selectedId))
|
|
102
103
|
return null;
|
|
103
|
-
return (_jsxs(PanelWrapper, { icon: "/icons/roof.webp", onBack: node.roofSegmentId ? handleBack : undefined, onClose: handleClose, title: node.name || 'Box Vent', width: 300, children: [_jsx(PanelSection, { title:
|
|
104
|
-
{ label: 'Box', value: 'box' },
|
|
105
|
-
{ label: 'Cap', value: 'cap' },
|
|
106
|
-
{ label: 'Dome', value: 'dome' },
|
|
107
|
-
], value: node.style ?? 'cap' }) }), _jsxs(PanelSection, { title:
|
|
104
|
+
return (_jsxs(PanelWrapper, { icon: "/icons/roof.webp", onBack: node.roofSegmentId ? handleBack : undefined, onClose: handleClose, title: node.name || i18n._({ id: 'node.boxVent.panel.boxVent', message: 'Box Vent' }), width: 300, children: [_jsx(PanelSection, { title: i18n._({ id: 'node.boxVent.panel.style', message: 'Style' }), children: _jsx(SegmentedControl, { onChange: (v) => handleUpdate({ style: v }), options: [
|
|
105
|
+
{ label: i18n._({ id: 'node.boxVent.panel.box', message: 'Box' }), value: 'box' },
|
|
106
|
+
{ label: i18n._({ id: 'node.boxVent.panel.cap', message: 'Cap' }), value: 'cap' },
|
|
107
|
+
{ label: i18n._({ id: 'node.boxVent.panel.dome', message: 'Dome' }), value: 'dome' },
|
|
108
|
+
], value: node.style ?? 'cap' }) }), _jsxs(PanelSection, { title: i18n._({ id: 'node.boxVent.panel.dimensions', message: 'Dimensions' }), children: [_jsx(SliderControl, { label: i18n._({ id: 'node.boxVent.panel.width', message: 'Width' }), max: 1000, min: 0.15, onChange: (v) => previewProp({ width: v }), onCommit: (v) => handleUpdate({ width: v }), precision: 2, restoreOnCommit: false, step: 0.01, unit: "m", value: node.width }), _jsx(SliderControl, { label: i18n._({ id: 'node.boxVent.panel.depth', message: 'Depth' }), max: 1000, min: 0.15, onChange: (v) => previewProp({ depth: v }), onCommit: (v) => handleUpdate({ depth: v }), precision: 2, restoreOnCommit: false, step: 0.01, unit: "m", value: node.depth }), _jsx(SliderControl, { label: i18n._({ id: 'node.boxVent.panel.height', message: 'Height' }), max: 1000, min: 0.05, onChange: (v) => previewProp({ height: v }), onCommit: (v) => handleUpdate({ height: v }), precision: 2, restoreOnCommit: false, step: 0.01, unit: "m", value: node.height }), node.style === 'cap' && (_jsx(SliderControl, { label: i18n._({ id: 'node.boxVent.panel.hoodOverhang', message: 'Hood Overhang' }), max: Math.max(0.02, node.width), min: 0, onChange: (v) => previewProp({ hoodOverhang: v }), onCommit: (v) => handleUpdate({ hoodOverhang: v }), precision: 3, restoreOnCommit: false, step: 0.005, unit: "m", value: node.hoodOverhang ?? 0 })), node.style === 'box' && (_jsxs(_Fragment, { children: [_jsx(SliderControl, { label: i18n._({ id: 'node.boxVent.panel.baseInset', message: 'Base Inset' }), max: Math.max(0.005, Math.min(node.width, node.depth) / 2 - 0.005), min: 0, onChange: (v) => previewProp({ baseInset: v }), onCommit: (v) => handleUpdate({ baseInset: v }), precision: 3, restoreOnCommit: false, step: 0.005, unit: "m", value: node.baseInset ?? 0.06 }), _jsx(SliderControl, { label: i18n._({ id: 'node.boxVent.panel.baseHeight', message: 'Base Height' }), max: Math.max(0.01, node.height - 0.005), min: 0.005, onChange: (v) => previewProp({ baseHeight: v }), onCommit: (v) => handleUpdate({ baseHeight: v }), precision: 3, restoreOnCommit: false, step: 0.005, unit: "m", value: node.baseHeight ?? 0.04 }), _jsx(SliderControl, { label: i18n._({ id: 'node.boxVent.panel.cornerBevel', message: 'Corner Bevel' }), max: Math.max(0, Math.min(node.width, node.depth) / 2 - (node.baseInset ?? 0.06) - 0.001), min: 0, onChange: (v) => previewProp({ cornerBevel: v }), onCommit: (v) => handleUpdate({ cornerBevel: v }), precision: 3, restoreOnCommit: false, step: 0.002, unit: "m", value: node.cornerBevel ?? 0.012 })] })), node.style === 'cap' && (_jsxs(_Fragment, { children: [_jsx(SliderControl, { label: i18n._({ id: 'node.boxVent.panel.capHeight', message: 'Cap Height' }), max: Math.max(0.02, node.height - 0.01), min: 0.01, onChange: (v) => previewProp({ capHeight: v }), onCommit: (v) => handleUpdate({ capHeight: v }), precision: 3, restoreOnCommit: false, step: 0.005, unit: "m", value: node.capHeight ?? 0.07 }), _jsx(SliderControl, { label: i18n._({ id: 'node.boxVent.panel.gapHeight', message: 'Gap Height' }), max: Math.max(0, node.height - Math.max(0.01, node.capHeight ?? 0.07) - 0.005), min: 0, onChange: (v) => previewProp({ capGap: v }), onCommit: (v) => handleUpdate({ capGap: v }), precision: 3, restoreOnCommit: false, step: 0.005, unit: "m", value: node.capGap ?? 0 }), _jsx(SliderControl, { label: i18n._({ id: 'node.boxVent.panel.topTaper', message: 'Top Taper' }), max: 1, min: 0, onChange: (v) => previewProp({ topTaper: v }), onCommit: (v) => handleUpdate({ topTaper: v }), precision: 2, restoreOnCommit: false, step: 0.05, unit: "", value: Math.round((node.topTaper ?? 0.4) * 100) / 100 })] })), node.style === 'dome' && (_jsxs(_Fragment, { children: [_jsx(SliderControl, { label: i18n._({ id: 'node.boxVent.panel.domeCurvature', message: 'Dome Curvature' }), max: 1.5, min: 0.3, onChange: (v) => previewProp({ domeCurvature: v }), onCommit: (v) => handleUpdate({ domeCurvature: v }), precision: 2, restoreOnCommit: false, step: 0.05, unit: "", value: Math.round((node.domeCurvature ?? 1.0) * 100) / 100 }), _jsx(SliderControl, { label: i18n._({ id: 'node.boxVent.panel.baseFlange', message: 'Base Flange' }), max: 0.2, min: 0, onChange: (v) => previewProp({ hoodOverhang: v }), onCommit: (v) => handleUpdate({ hoodOverhang: v }), precision: 3, restoreOnCommit: false, step: 0.005, unit: "m", value: node.hoodOverhang ?? 0.04 })] }))] }), _jsxs(PanelSection, { title: i18n._({ id: 'node.boxVent.panel.position', message: 'Position' }), children: [_jsx(SliderControl, { label: "X", max: Math.round(((segment?.width ?? 10) / 2) * 100) / 100, min: -Math.round(((segment?.width ?? 10) / 2) * 100) / 100, onChange: (v) => previewProp({
|
|
108
109
|
position: [v, node.position[1] ?? 0, node.position[2] ?? 0],
|
|
109
110
|
}), onCommit: (v) => handleUpdate({
|
|
110
111
|
position: [v, node.position[1] ?? 0, node.position[2] ?? 0],
|
|
@@ -116,5 +117,5 @@ export default function BoxVentPanel() {
|
|
|
116
117
|
position: [node.position[0] ?? 0, node.position[1] ?? 0, v],
|
|
117
118
|
}), onCommit: (v) => handleUpdate({
|
|
118
119
|
position: [node.position[0] ?? 0, node.position[1] ?? 0, v],
|
|
119
|
-
}), precision: 2, restoreOnCommit: false, step: 0.05, unit: "m", value: node.position[2] ?? 0 }), _jsx(SliderControl, { label:
|
|
120
|
+
}), precision: 2, restoreOnCommit: false, step: 0.05, unit: "m", value: node.position[2] ?? 0 }), _jsx(SliderControl, { label: i18n._({ id: 'node.boxVent.panel.rotation', message: 'Rotation' }), max: 180, min: -180, onChange: (deg) => previewProp({ rotation: (deg * Math.PI) / 180 }), onCommit: (deg) => handleUpdate({ rotation: (deg * Math.PI) / 180 }), precision: 0, restoreOnCommit: false, step: 1, unit: "\u00B0", value: Math.round(((node.rotation ?? 0) * 180) / Math.PI) })] }), _jsx(PanelSection, { title: i18n._({ id: 'node.boxVent.panel.actions', message: 'Actions' }), children: _jsxs(ActionGroup, { children: [_jsx(ActionButton, { icon: _jsx(Move, { className: "h-3.5 w-3.5" }), label: i18n._({ id: 'node.boxVent.panel.move', message: 'Move' }), onClick: handleMove }), _jsx(ActionButton, { icon: _jsx(Copy, { className: "h-3.5 w-3.5" }), label: i18n._({ id: 'node.boxVent.panel.duplicate', message: 'Duplicate' }), onClick: handleDuplicate }), _jsx(ActionButton, { className: "hover:bg-red-500/20", icon: _jsx(Trash2, { className: "h-3.5 w-3.5 text-red-600 dark:text-red-400" }), label: i18n._({ id: 'node.boxVent.panel.delete', message: 'Delete' }), onClick: handleDelete })] }) })] }));
|
|
120
121
|
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { BatchableConfig } from '@pascal-app/core';
|
|
2
|
+
/**
|
|
3
|
+
* Cabinet runs and modules batch wherever they sit under a level: a run's
|
|
4
|
+
* modules (and the wall units stacked on them) are released by the run's
|
|
5
|
+
* edits, tint and gestures. Opening a door or drawer is a live override or a
|
|
6
|
+
* dirty mark, both of which release. A cooktop with lit burners animates its
|
|
7
|
+
* flames every frame and draws itself.
|
|
8
|
+
*/
|
|
9
|
+
export declare const cabinetBatchable: BatchableConfig;
|
|
10
|
+
//# sourceMappingURL=batchable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"batchable.d.ts","sourceRoot":"","sources":["../../src/cabinet/batchable.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAW,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAIhE;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,EAAE,eAI9B,CAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { compartmentCooktopBurnersOn, stackForCabinet } from './stack.js';
|
|
2
|
+
/**
|
|
3
|
+
* Cabinet runs and modules batch wherever they sit under a level: a run's
|
|
4
|
+
* modules (and the wall units stacked on them) are released by the run's
|
|
5
|
+
* edits, tint and gestures. Opening a door or drawer is a live override or a
|
|
6
|
+
* dirty mark, both of which release. A cooktop with lit burners animates its
|
|
7
|
+
* flames every frame and draws itself.
|
|
8
|
+
*/
|
|
9
|
+
export const cabinetBatchable = {
|
|
10
|
+
scope: 'level',
|
|
11
|
+
excluded: (node) => stackForCabinet(node).some(compartmentCooktopBurnersOn),
|
|
12
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compartment-card.d.ts","sourceRoot":"","sources":["../../src/cabinet/compartment-card.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"compartment-card.d.ts","sourceRoot":"","sources":["../../src/cabinet/compartment-card.tsx"],"names":[],"mappings":"AAKA,OAAO,EACL,KAAK,kBAAkB,EAwBxB,MAAM,SAAS,CAAA;AA+OhB,wBAAgB,eAAe,CAAC,EAC9B,WAAW,EACX,KAAK,EACL,YAAY,EACZ,KAAK,EACL,aAAa,EACb,cAAc,EACd,KAAK,EACL,SAAS,EACT,cAAc,EACd,QAAQ,EACR,MAAM,EACN,SAAiB,EACjB,WAAmB,GACpB,EAAE;IACD,WAAW,EAAE,kBAAkB,CAAA;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,YAAY,EAAE,MAAM,CAAA;IACpB,KAAK,EAAE,MAAM,CAAA;IACb,aAAa,EAAE,MAAM,CAAA;IACrB,cAAc,EAAE,MAAM,CAAA;IACtB,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,CAAC,IAAI,EAAE,kBAAkB,KAAK,IAAI,CAAA;IAC7C,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IACxC,QAAQ,EAAE,MAAM,IAAI,CAAA;IACpB,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,CAAA;IAC/B,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB,+BA0TA"}
|