@pascal-app/nodes 1.0.6 → 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
|
@@ -1,20 +1,27 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { clampFencePicketRailProjection, findLevelAncestorId, getClampedWallCurveOffset, getFenceCenterlineLength, getFenceControlHandle, getFenceSpanMode, getMaxWallCurveOffset, getTwoPointFenceCurveTangents, getWallArcData, getWallCurveFrameAt, getWallCurveLength, maxFencePicketRailProjection, nodeRegistry, normalizeWallCurveOffset, sampleFenceSpline, useScene, } from '@pascal-app/core';
|
|
3
|
+
import { clampFencePicketRailProjection, findLevelAncestorId, formatFixed, getClampedWallCurveOffset, getFenceCenterlineLength, getFenceControlHandle, getFenceSpanMode, getMaxWallCurveOffset, getTwoPointFenceCurveTangents, getWallArcData, getWallCurveFrameAt, getWallCurveLength, maxFencePicketRailProjection, nodeRegistry, normalizeWallCurveOffset, sampleFenceSpline, usePascalI18n, useScene, } from '@pascal-app/core';
|
|
4
4
|
import { SliderControl } from '@pascal-app/editor';
|
|
5
5
|
export function FencePatternInfo({ node }) {
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
:
|
|
11
|
-
|
|
6
|
+
const i18n = usePascalI18n();
|
|
7
|
+
return (_jsx("p", { className: "text-xs text-muted-foreground", children: i18n._({
|
|
8
|
+
id: 'node.fence.inspectorEditors.distributionInfo',
|
|
9
|
+
message: '{style, select, picket {Distribution controls pickets in each bay between posts.} horizontal {Distribution controls posts along the full fence.} other {Distribution controls infill pieces between the two end posts.}} Spacing is measured between centers. The available width limits the count so pieces do not overlap.',
|
|
10
|
+
values: {
|
|
11
|
+
style: node.style === 'picket' || node.style === 'horizontal' ? node.style : 'other',
|
|
12
|
+
},
|
|
13
|
+
}) }));
|
|
12
14
|
}
|
|
13
15
|
export function FencePicketRailProjectionEditor({ node, onUpdate, }) {
|
|
16
|
+
const i18n = usePascalI18n();
|
|
14
17
|
const max = maxFencePicketRailProjection(node.postSize);
|
|
15
|
-
return (_jsx(SliderControl, { label:
|
|
18
|
+
return (_jsx(SliderControl, { label: i18n._({
|
|
19
|
+
id: 'node.fence.inspectorEditors.picketRailProjection',
|
|
20
|
+
message: 'Picket rail projection',
|
|
21
|
+
}), max: max, min: 0.001, onChange: (value) => onUpdate({ picketRailProjection: clampFencePicketRailProjection(value, node.postSize) }), precision: 3, step: 0.002, unit: "m", value: clampFencePicketRailProjection(node.picketRailProjection, node.postSize) }));
|
|
16
22
|
}
|
|
17
23
|
export function FenceSurfaceEditor({ node, onUpdate, }) {
|
|
24
|
+
const i18n = usePascalI18n();
|
|
18
25
|
const nodes = useScene((state) => state.nodes);
|
|
19
26
|
const levelId = findLevelAncestorId(node.id, nodes);
|
|
20
27
|
const hosts = Object.values(nodes).filter((candidate) => candidate.id !== node.id &&
|
|
@@ -23,7 +30,7 @@ export function FenceSurfaceEditor({ node, onUpdate, }) {
|
|
|
23
30
|
!!nodeRegistry.get(candidate.type)?.capabilities.surfaces?.top) &&
|
|
24
31
|
findLevelAncestorId(candidate.id, nodes) === levelId);
|
|
25
32
|
const selectedId = node.supportSurfaceNodeId ?? node.supportSlabId ?? '';
|
|
26
|
-
return (_jsxs("div", { className: "space-y-2 text-xs", children: [_jsxs("label", { className: "flex items-center justify-between gap-2", children: [
|
|
33
|
+
return (_jsxs("div", { className: "space-y-2 text-xs", children: [_jsxs("label", { className: "flex items-center justify-between gap-2", children: [i18n._({ id: 'node.fence.inspectorEditors.surfaceBehavior', message: 'Surface behavior' }), _jsxs("select", { className: "rounded border bg-background p-1", value: node.surfaceMode, onChange: (event) => {
|
|
27
34
|
const mode = event.target.value;
|
|
28
35
|
if (mode === 'selected' && !selectedId && hosts[0]) {
|
|
29
36
|
const host = hosts[0];
|
|
@@ -36,13 +43,28 @@ export function FenceSurfaceEditor({ node, onUpdate, }) {
|
|
|
36
43
|
else {
|
|
37
44
|
onUpdate({ surfaceMode: mode });
|
|
38
45
|
}
|
|
39
|
-
}, children: [_jsx("option", { value: "auto", children:
|
|
46
|
+
}, children: [_jsx("option", { value: "auto", children: i18n._({
|
|
47
|
+
id: 'node.fence.inspectorEditors.followHighestSurface',
|
|
48
|
+
message: 'Follow highest surface',
|
|
49
|
+
}) }), _jsx("option", { disabled: hosts.length === 0, value: "selected", children: i18n._({
|
|
50
|
+
id: 'node.fence.inspectorEditors.followSelectedSurface',
|
|
51
|
+
message: 'Follow selected surface',
|
|
52
|
+
}) }), _jsx("option", { value: "level", children: i18n._({
|
|
53
|
+
id: 'node.fence.inspectorEditors.holdStartingHeight',
|
|
54
|
+
message: 'Hold starting height',
|
|
55
|
+
}) })] })] }), node.surfaceMode === 'selected' && (_jsxs("label", { className: "flex items-center justify-between gap-2", children: [i18n._({ id: 'node.fence.inspectorEditors.surface', message: 'Surface' }), _jsxs("select", { className: "min-w-0 max-w-40 rounded border bg-background p-1", value: selectedId, onChange: (event) => {
|
|
40
56
|
const host = nodes[event.target.value];
|
|
41
57
|
onUpdate({
|
|
42
58
|
supportSlabId: host?.type === 'slab' ? host.id : undefined,
|
|
43
59
|
supportSurfaceNodeId: host && host.type !== 'slab' ? host.id : undefined,
|
|
44
60
|
});
|
|
45
|
-
}, children: [_jsx("option", { value: "", children:
|
|
61
|
+
}, children: [_jsx("option", { value: "", children: i18n._({
|
|
62
|
+
id: 'node.fence.inspectorEditors.chooseASurface',
|
|
63
|
+
message: 'Choose a surface',
|
|
64
|
+
}) }), hosts.map((host) => (_jsxs("option", { value: host.id, children: [host.name || host.type, " (", host.type, ")"] }, host.id)))] })] })), node.surfaceMode === 'selected' && !selectedId && (_jsx("p", { className: "text-muted-foreground", children: i18n._({
|
|
65
|
+
id: 'node.fence.inspectorEditors.chooseASlabOrShapedSurface',
|
|
66
|
+
message: 'Choose a slab or shaped surface on this level.',
|
|
67
|
+
}) }))] }));
|
|
46
68
|
}
|
|
47
69
|
/**
|
|
48
70
|
* Custom inspector editors for fence fields that don't map to a single
|
|
@@ -59,6 +81,7 @@ export function FenceSurfaceEditor({ node, onUpdate, }) {
|
|
|
59
81
|
* Both are wired through `parametrics.fields[].kind: 'custom'`.
|
|
60
82
|
*/
|
|
61
83
|
export function FenceLengthEditor({ node, onUpdate, }) {
|
|
84
|
+
const i18n = usePascalI18n();
|
|
62
85
|
const length = getWallCurveLength(node);
|
|
63
86
|
const handleChange = (newLength) => {
|
|
64
87
|
if (newLength <= 0)
|
|
@@ -76,12 +99,13 @@ export function FenceLengthEditor({ node, onUpdate, }) {
|
|
|
76
99
|
];
|
|
77
100
|
onUpdate({ end: newEnd });
|
|
78
101
|
};
|
|
79
|
-
return (_jsx(SliderControl, { label:
|
|
102
|
+
return (_jsx(SliderControl, { label: i18n._({ id: 'node.fence.inspectorEditors.length', message: 'Length' }), max: 50, min: 0.1, onChange: handleChange, precision: 2, step: 0.01, unit: "m", value: length }));
|
|
80
103
|
}
|
|
81
104
|
export function FenceCurveEditor({ node, onUpdate, }) {
|
|
105
|
+
const i18n = usePascalI18n();
|
|
82
106
|
const curveOffset = getClampedWallCurveOffset(node);
|
|
83
107
|
const maxCurveOffset = getMaxWallCurveOffset(node);
|
|
84
|
-
return (_jsxs("div", { className: "space-y-2", children: [_jsx(SliderControl, { label:
|
|
108
|
+
return (_jsxs("div", { className: "space-y-2", children: [_jsx(SliderControl, { label: i18n._({ id: 'node.fence.inspectorEditors.curve', message: 'Curve' }), max: Math.max(0.01, maxCurveOffset), min: -Math.max(0.01, maxCurveOffset), onChange: (value) => onUpdate({ curveOffset: normalizeWallCurveOffset(node, value) }), precision: 2, step: 0.1, unit: "m", value: curveOffset }), _jsx("button", { type: "button", className: "rounded border px-2 py-1 text-xs", onClick: () => {
|
|
85
109
|
const arc = getWallArcData(node);
|
|
86
110
|
const spans = arc ? 4 : 1;
|
|
87
111
|
const handleLength = arc
|
|
@@ -97,9 +121,10 @@ export function FenceCurveEditor({ node, onUpdate, }) {
|
|
|
97
121
|
]),
|
|
98
122
|
curveOffset: undefined,
|
|
99
123
|
});
|
|
100
|
-
}, children:
|
|
124
|
+
}, children: i18n._({ id: 'node.fence.inspectorEditors.editPath', message: 'Edit path' }) })] }));
|
|
101
125
|
}
|
|
102
126
|
export function FencePathEditor({ node, onUpdate, }) {
|
|
127
|
+
const i18n = usePascalI18n();
|
|
103
128
|
const path = node.path ?? [];
|
|
104
129
|
const tangents = path.map((_, i) => node.tangents?.[i] ?? null);
|
|
105
130
|
const spanModes = path
|
|
@@ -116,23 +141,38 @@ export function FencePathEditor({ node, onUpdate, }) {
|
|
|
116
141
|
end: points.at(-1),
|
|
117
142
|
});
|
|
118
143
|
};
|
|
119
|
-
return (_jsxs("div", { className: "space-y-2 text-xs", children: [
|
|
144
|
+
return (_jsxs("div", { className: "space-y-2 text-xs", children: [_jsx("p", { children: i18n._({
|
|
145
|
+
id: 'node.fence.inspectorEditors.pathSummary',
|
|
146
|
+
message: '{count, plural, one {{number} point} other {{number} points}} · {length} m',
|
|
147
|
+
values: {
|
|
148
|
+
count: path.length,
|
|
149
|
+
number: String(path.length),
|
|
150
|
+
length: formatFixed(getFenceCenterlineLength(node), 2, i18n.getLocale()),
|
|
151
|
+
},
|
|
152
|
+
}) }), _jsx("p", { className: "text-muted-foreground", children: i18n._({
|
|
153
|
+
id: 'node.fence.inspectorEditors.setEachSpanToStraightOr',
|
|
154
|
+
message: 'Set each span to straight or curved, then drag its points and curve handles in either view.',
|
|
155
|
+
}) }), path.map((point, index) => (_jsxs("details", { className: "rounded border p-2", children: [_jsxs("summary", { className: "cursor-pointer", children: [i18n._({ id: 'node.fence.inspectorEditors.point', message: 'Point' }), " ", index + 1] }), _jsx("div", { className: "mt-2 flex gap-2", children: ['X', 'Z'].map((axis, coordinate) => (_jsxs("label", { className: "min-w-0 flex-1", children: [axis, " (m)", _jsx("input", { type: "number", step: "0.05", className: "w-full rounded border bg-transparent p-1", defaultValue: point[coordinate], onBlur: (event) => {
|
|
120
156
|
const value = event.currentTarget.valueAsNumber;
|
|
121
157
|
if (!Number.isFinite(value) || value === point[coordinate])
|
|
122
158
|
return;
|
|
123
159
|
update(path.map((p, i) => i === index ? (coordinate === 0 ? [value, p[1]] : [p[0], value]) : p));
|
|
124
|
-
} }, `${index}-${axis}-${point[coordinate]}`)] }, axis))) }), index < path.length - 1 && (_jsxs("label", { className: "mt-2 flex items-center justify-between", children: [
|
|
160
|
+
} }, `${index}-${axis}-${point[coordinate]}`)] }, axis))) }), index < path.length - 1 && (_jsxs("label", { className: "mt-2 flex items-center justify-between", children: [i18n._({
|
|
161
|
+
id: 'node.fence.inspectorEditors.spanToPointNumber',
|
|
162
|
+
message: 'Span to point {number}',
|
|
163
|
+
values: { number: index + 2 },
|
|
164
|
+
}), _jsxs("select", { className: "rounded border bg-background p-1", value: spanModes[index], onChange: (event) => {
|
|
125
165
|
const modes = [...spanModes];
|
|
126
166
|
modes[index] = event.target.value;
|
|
127
167
|
const handles = path.length === 2 && modes[index] === 'curve' && spanModes[index] === 'straight'
|
|
128
168
|
? (getTwoPointFenceCurveTangents(path) ?? tangents)
|
|
129
169
|
: tangents;
|
|
130
170
|
update(path, handles, modes);
|
|
131
|
-
}, children: [_jsx("option", { value: "straight", children:
|
|
171
|
+
}, children: [_jsx("option", { value: "straight", children: i18n._({ id: 'node.fence.inspectorEditors.straight', message: 'Straight' }) }), _jsx("option", { value: "curve", children: i18n._({ id: 'node.fence.inspectorEditors.curved', message: 'Curved' }) })] })] })), (spanModes[index - 1] === 'curve' || spanModes[index] === 'curve') && (_jsxs("label", { className: "mt-2 flex items-center justify-between", children: [i18n._({ id: 'node.fence.inspectorEditors.join', message: 'Join' }), _jsxs("select", { className: "rounded border bg-background p-1", value: tangents[index]?.[0] === 0 && tangents[index]?.[1] === 0 ? 'corner' : 'smooth', onChange: (event) => {
|
|
132
172
|
const handles = [...tangents];
|
|
133
173
|
handles[index] = event.target.value === 'corner' ? [0, 0] : null;
|
|
134
174
|
update(path, handles);
|
|
135
|
-
}, children: [_jsx("option", { value: "smooth", children:
|
|
175
|
+
}, children: [_jsx("option", { value: "smooth", children: i18n._({ id: 'node.fence.inspectorEditors.smooth', message: 'Smooth' }) }), _jsx("option", { value: "corner", children: i18n._({ id: 'node.fence.inspectorEditors.corner', message: 'Corner' }) })] })] })), _jsxs("div", { className: "mt-2 flex gap-2", children: [index < path.length - 1 && (_jsx("button", { type: "button", className: "rounded border px-2 py-1", onClick: () => {
|
|
136
176
|
const a = getFenceControlHandle(path, node.tangents, index);
|
|
137
177
|
const b = getFenceControlHandle(path, node.tangents, index + 1);
|
|
138
178
|
const samples = sampleFenceSpline([point, path[index + 1]], [
|
|
@@ -147,13 +187,16 @@ export function FencePathEditor({ node, onUpdate, }) {
|
|
|
147
187
|
const modes = [...spanModes];
|
|
148
188
|
modes.splice(index, 1, spanModes[index], spanModes[index]);
|
|
149
189
|
update(points, handles, modes);
|
|
150
|
-
}, children:
|
|
190
|
+
}, children: i18n._({
|
|
191
|
+
id: 'node.fence.inspectorEditors.addPointAfter',
|
|
192
|
+
message: 'Add point after',
|
|
193
|
+
}) })), index === path.length - 1 && (_jsx("button", { type: "button", className: "rounded border px-2 py-1", onClick: () => {
|
|
151
194
|
const previous = path[index - 1];
|
|
152
195
|
update([
|
|
153
196
|
...path,
|
|
154
197
|
[point[0] + point[0] - previous[0], point[1] + point[1] - previous[1]],
|
|
155
198
|
], [...tangents, null], [...spanModes, 'straight']);
|
|
156
|
-
}, children:
|
|
199
|
+
}, children: i18n._({ id: 'node.fence.inspectorEditors.extendPath', message: 'Extend path' }) })), _jsx("button", { type: "button", className: "rounded border px-2 py-1 disabled:opacity-40", disabled: path.length <= 2, onClick: () => {
|
|
157
200
|
const modes = [...spanModes];
|
|
158
201
|
if (index === 0)
|
|
159
202
|
modes.shift();
|
|
@@ -164,5 +207,5 @@ export function FencePathEditor({ node, onUpdate, }) {
|
|
|
164
207
|
? 'straight'
|
|
165
208
|
: 'curve');
|
|
166
209
|
update(path.filter((_, i) => i !== index), tangents.filter((_, i) => i !== index), modes);
|
|
167
|
-
}, children:
|
|
210
|
+
}, children: i18n._({ id: 'node.fence.inspectorEditors.removePoint', message: 'Remove point' }) })] })] }, `curve-editor-${index}`)))] }));
|
|
168
211
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"move-endpoint-tool.d.ts","sourceRoot":"","sources":["../../src/fence/move-endpoint-tool.tsx"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,SAAS,
|
|
1
|
+
{"version":3,"file":"move-endpoint-tool.d.ts","sourceRoot":"","sources":["../../src/fence/move-endpoint-tool.tsx"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,SAAS,EAMf,MAAM,kBAAkB,CAAA;AAmBzB;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,KAAK,EAAE,SAAS,CAAA;IAChB,QAAQ,EAAE,OAAO,GAAG,KAAK,CAAA;CAC1B,CAAA;AAgDD,eAAO,MAAM,qBAAqB,EAAE,KAAK,CAAC,EAAE,CAAC;IAAE,MAAM,EAAE,mBAAmB,CAAA;CAAE,CAmN3E,CAAA;eAEc,qBAAqB"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { emitter, getWallCurveLength, useScene, } from '@pascal-app/core';
|
|
3
|
+
import { emitter, getWallCurveLength, usePascalI18n, useScene, } from '@pascal-app/core';
|
|
4
4
|
import { CursorSphere, formatAngleRadians, getAngleToSegmentReference, getSegmentAngleReferenceAtPoint, isTypingTarget, MeasurementPill, triggerSFX, useAlignmentGuides, useDragAction, useInteractionScope, } from '@pascal-app/editor';
|
|
5
5
|
import { useViewer } from '@pascal-app/viewer';
|
|
6
6
|
import { Html } from '@react-three/drei';
|
|
@@ -40,6 +40,7 @@ function pickAngleLabel(args) {
|
|
|
40
40
|
return null;
|
|
41
41
|
}
|
|
42
42
|
export const MoveFenceEndpointTool = ({ target }) => {
|
|
43
|
+
const i18n = usePascalI18n();
|
|
43
44
|
const fenceId = target.fence.id;
|
|
44
45
|
const endpoint = target.endpoint;
|
|
45
46
|
const initialPoint = endpoint === 'start'
|
|
@@ -185,6 +186,14 @@ export const MoveFenceEndpointTool = ({ target }) => {
|
|
|
185
186
|
const dimMidZ = (liveStart[1] + liveEnd[1]) / 2;
|
|
186
187
|
return (_jsxs("group", { children: [_jsx(CursorSphere, { position: cursorPos, showTooltip: false }), _jsx(Html, { center: true, position: [dimMidX, fenceHeight + 0.3, dimMidZ], style: { pointerEvents: 'none', touchAction: 'none' }, zIndexRange: [100, 0], children: _jsx(MeasurementPill, { height: fenceHeight, length: liveLength, primary: "length", thickness: target.fence.thickness ?? 0.08, unit: unit }) }), _jsx(Html, { position: cursorPos, style: { pointerEvents: 'none', touchAction: 'none' }, zIndexRange: [100, 0], children: _jsx("div", { className: "translate-y-10", children: _jsx("div", { className: `whitespace-nowrap rounded-full border px-2 py-1 font-medium text-[11px] shadow-lg backdrop-blur-md transition-colors ${altPressed
|
|
187
188
|
? 'border-amber-500/70 bg-amber-50/95 text-amber-800 dark:bg-amber-500/15 dark:text-amber-100'
|
|
188
|
-
: 'border-border/70 bg-background/90 text-foreground/80'}`, children: altPressed
|
|
189
|
+
: 'border-border/70 bg-background/90 text-foreground/80'}`, children: altPressed
|
|
190
|
+
? i18n._({
|
|
191
|
+
id: 'node.fence.moveEndpointTool.detachEndpoint',
|
|
192
|
+
message: 'Detach endpoint',
|
|
193
|
+
})
|
|
194
|
+
: i18n._({
|
|
195
|
+
id: 'node.fence.moveEndpointTool.dragEndpoint',
|
|
196
|
+
message: 'Drag endpoint',
|
|
197
|
+
}) }) }) }), angleLabel && (_jsx(Html, { center: true, position: angleLabel.position, style: { pointerEvents: 'none' }, zIndexRange: [100, 0], children: _jsx("div", { className: "whitespace-nowrap rounded-full border border-border bg-background/95 px-2 py-1 font-mono font-semibold text-[11px] text-foreground shadow-lg backdrop-blur-md", children: angleLabel.label }) }))] }));
|
|
189
198
|
};
|
|
190
199
|
export default MoveFenceEndpointTool;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"system.d.ts","sourceRoot":"","sources":["../../src/fence/system.tsx"],"names":[],"mappings":"AA+CA,QAAA,MAAM,YAAY,
|
|
1
|
+
{"version":3,"file":"system.d.ts","sourceRoot":"","sources":["../../src/fence/system.tsx"],"names":[],"mappings":"AA+CA,QAAA,MAAM,YAAY,YAwIjB,CAAA;eAEc,YAAY"}
|
package/dist/fence/system.js
CHANGED
|
@@ -126,8 +126,21 @@ const FenceSystems = () => {
|
|
|
126
126
|
outputs.current.clear();
|
|
127
127
|
};
|
|
128
128
|
}, []);
|
|
129
|
+
const followers = useRef({ nodes: null, any: false });
|
|
129
130
|
useFrame(() => {
|
|
130
131
|
const nodes = useScene.getState().nodes;
|
|
132
|
+
// Only a fence that follows surfaces cares when their geometry swaps. Without one there is
|
|
133
|
+
// nothing to watch; a follower added later is marked on creation and builds on what is there.
|
|
134
|
+
if (followers.current.nodes !== nodes) {
|
|
135
|
+
followers.current = {
|
|
136
|
+
nodes,
|
|
137
|
+
any: Object.values(nodes).some((node) => node.type === 'fence' && followsSurfaces(node)),
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
if (!followers.current.any) {
|
|
141
|
+
outputs.current.clear();
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
131
144
|
const changedLevels = new Set();
|
|
132
145
|
for (const [id, level] of levels.current) {
|
|
133
146
|
const root = sceneRegistry.nodes.get(id);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../../src/fence-feature/actions.tsx"],"names":[],"mappings":"AAOA;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,gBAAgB,
|
|
1
|
+
{"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../../src/fence-feature/actions.tsx"],"names":[],"mappings":"AAOA;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,gBAAgB,uCA0BvC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
-
import { useScene } from '@pascal-app/core';
|
|
3
|
+
import { usePascalI18n, useScene } from '@pascal-app/core';
|
|
4
4
|
import { ActionMenuButton } from '@pascal-app/editor';
|
|
5
5
|
import { useViewer } from '@pascal-app/viewer';
|
|
6
6
|
import { DoorClosed, DoorOpen } from 'lucide-react';
|
|
@@ -11,6 +11,7 @@ import { toggleFenceGate } from './interaction.js';
|
|
|
11
11
|
* never write the node.
|
|
12
12
|
*/
|
|
13
13
|
export default function FenceGateActions() {
|
|
14
|
+
const i18n = usePascalI18n();
|
|
14
15
|
const selected = useViewer((s) => s.selection.selectedIds);
|
|
15
16
|
const gate = useScene((s) => {
|
|
16
17
|
const node = selected.length === 1 ? s.nodes[selected[0]] : undefined;
|
|
@@ -19,7 +20,9 @@ export default function FenceGateActions() {
|
|
|
19
20
|
if (!gate)
|
|
20
21
|
return null;
|
|
21
22
|
const open = (gate.openAngle ?? 0) > 0.01;
|
|
22
|
-
return (_jsx(ActionMenuButton, { keys: ['E'], label: open
|
|
23
|
+
return (_jsx(ActionMenuButton, { keys: ['E'], label: open
|
|
24
|
+
? i18n._({ id: 'node.fenceFeature.actions.close', message: 'Close' })
|
|
25
|
+
: i18n._({ id: 'node.fenceFeature.actions.open', message: 'Open' }), onClick: (event) => {
|
|
23
26
|
event.stopPropagation();
|
|
24
27
|
toggleFenceGate(gate.id);
|
|
25
28
|
}, pressed: open, children: open ? _jsx(DoorClosed, { className: "h-4 w-4" }) : _jsx(DoorOpen, { className: "h-4 w-4" }) }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inspector.d.ts","sourceRoot":"","sources":["../../src/fence-feature/inspector.tsx"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,gBAAgB,
|
|
1
|
+
{"version":3,"file":"inspector.d.ts","sourceRoot":"","sources":["../../src/fence-feature/inspector.tsx"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,gBAAgB,EAOtB,MAAM,kBAAkB,CAAA;AAMzB,wBAAgB,kBAAkB,CAAC,EACjC,IAAI,EAAE,KAAK,EACX,QAAQ,GACT,EAAE;IACD,IAAI,EAAE,gBAAgB,CAAA;IACtB,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAA;CACrD,+BAubA"}
|