@pascal-app/nodes 1.0.0-beta.5 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/dist/block/commands.d.ts +68 -0
- package/dist/block/commands.d.ts.map +1 -0
- package/dist/block/commands.js +1144 -0
- package/dist/block/contextual-help.d.ts +3 -0
- package/dist/block/contextual-help.d.ts.map +1 -0
- package/dist/block/contextual-help.js +38 -0
- package/dist/block/definition.d.ts +8 -0
- package/dist/block/definition.d.ts.map +1 -0
- package/dist/block/definition.js +126 -0
- package/dist/block/edit-session.d.ts +16 -0
- package/dist/block/edit-session.d.ts.map +1 -0
- package/dist/block/edit-session.js +32 -0
- package/dist/block/face-host.d.ts +3 -0
- package/dist/block/face-host.d.ts.map +1 -0
- package/dist/block/face-host.js +178 -0
- package/dist/block/floorplan.d.ts +3 -0
- package/dist/block/floorplan.d.ts.map +1 -0
- package/dist/block/floorplan.js +43 -0
- package/dist/block/geometry-snap.d.ts +18 -0
- package/dist/block/geometry-snap.d.ts.map +1 -0
- package/dist/block/geometry-snap.js +137 -0
- package/dist/block/geometry.d.ts +11 -0
- package/dist/block/geometry.d.ts.map +1 -0
- package/dist/block/geometry.js +146 -0
- package/dist/block/gesture-wheel.d.ts +8 -0
- package/dist/block/gesture-wheel.d.ts.map +1 -0
- package/dist/block/gesture-wheel.js +7 -0
- package/dist/block/interaction-sfx.d.ts +3 -0
- package/dist/block/interaction-sfx.d.ts.map +1 -0
- package/dist/block/interaction-sfx.js +16 -0
- package/dist/block/last-operation.d.ts +48 -0
- package/dist/block/last-operation.d.ts.map +1 -0
- package/dist/block/last-operation.js +120 -0
- package/dist/block/loop-cut-interaction.d.ts +5 -0
- package/dist/block/loop-cut-interaction.d.ts.map +1 -0
- package/dist/block/loop-cut-interaction.js +13 -0
- package/dist/block/material-slots.d.ts +61 -0
- package/dist/block/material-slots.d.ts.map +1 -0
- package/dist/block/material-slots.js +131 -0
- package/dist/block/modal-face-operation.d.ts +13 -0
- package/dist/block/modal-face-operation.d.ts.map +1 -0
- package/dist/block/modal-face-operation.js +40 -0
- package/dist/block/modal-session.d.ts +15 -0
- package/dist/block/modal-session.d.ts.map +1 -0
- package/dist/block/modal-session.js +40 -0
- package/dist/block/modal-transform.d.ts +30 -0
- package/dist/block/modal-transform.d.ts.map +1 -0
- package/dist/block/modal-transform.js +144 -0
- package/dist/block/paint.d.ts +3 -0
- package/dist/block/paint.d.ts.map +1 -0
- package/dist/block/paint.js +136 -0
- package/dist/block/panel.d.ts +2 -0
- package/dist/block/panel.d.ts.map +1 -0
- package/dist/block/panel.js +234 -0
- package/dist/block/parametrics.d.ts +4 -0
- package/dist/block/parametrics.d.ts.map +1 -0
- package/dist/block/parametrics.js +9 -0
- package/dist/block/preview.d.ts +6 -0
- package/dist/block/preview.d.ts.map +1 -0
- package/dist/block/preview.js +46 -0
- package/dist/block/rotation-drag.d.ts +5 -0
- package/dist/block/rotation-drag.d.ts.map +1 -0
- package/dist/block/rotation-drag.js +18 -0
- package/dist/block/schema.d.ts +2 -0
- package/dist/block/schema.d.ts.map +1 -0
- package/dist/block/schema.js +1 -0
- package/dist/block/selection-geometry.d.ts +9 -0
- package/dist/block/selection-geometry.d.ts.map +1 -0
- package/dist/block/selection-geometry.js +31 -0
- package/dist/block/selection-model.d.ts +17 -0
- package/dist/block/selection-model.d.ts.map +1 -0
- package/dist/block/selection-model.js +84 -0
- package/dist/block/selection.d.ts +4 -0
- package/dist/block/selection.d.ts.map +1 -0
- package/dist/block/selection.js +2570 -0
- package/dist/block/slots.d.ts +4 -0
- package/dist/block/slots.d.ts.map +1 -0
- package/dist/block/slots.js +17 -0
- package/dist/block/tool.d.ts +3 -0
- package/dist/block/tool.d.ts.map +1 -0
- package/dist/block/tool.js +174 -0
- package/dist/block/toolbar-state.d.ts +46 -0
- package/dist/block/toolbar-state.d.ts.map +1 -0
- package/dist/block/toolbar-state.js +67 -0
- package/dist/block/use-block-face-operation.d.ts +39 -0
- package/dist/block/use-block-face-operation.d.ts.map +1 -0
- package/dist/block/use-block-face-operation.js +218 -0
- package/dist/box-vent/definition.d.ts.map +1 -1
- package/dist/box-vent/definition.js +8 -5
- package/dist/box-vent/geometry.d.ts +4 -0
- package/dist/box-vent/geometry.d.ts.map +1 -1
- package/dist/box-vent/geometry.js +76 -44
- package/dist/box-vent/paint.d.ts +4 -0
- package/dist/box-vent/paint.d.ts.map +1 -0
- package/dist/box-vent/paint.js +40 -0
- package/dist/box-vent/panel.js +1 -1
- package/dist/box-vent/parametrics.js +3 -3
- package/dist/box-vent/renderer.d.ts.map +1 -1
- package/dist/box-vent/renderer.js +29 -10
- package/dist/cabinet/compartment-card.d.ts.map +1 -1
- package/dist/cabinet/compartment-card.js +11 -3
- package/dist/cabinet/continuous-placement.d.ts +3 -0
- package/dist/cabinet/continuous-placement.d.ts.map +1 -1
- package/dist/cabinet/continuous-placement.js +6 -0
- package/dist/cabinet/definition.d.ts.map +1 -1
- package/dist/cabinet/definition.js +400 -54
- package/dist/cabinet/floorplan-move.d.ts.map +1 -1
- package/dist/cabinet/floorplan-move.js +91 -22
- package/dist/cabinet/geometry/fridge.d.ts.map +1 -1
- package/dist/cabinet/geometry/fridge.js +25 -1
- package/dist/cabinet/geometry/fronts.d.ts +4 -0
- package/dist/cabinet/geometry/fronts.d.ts.map +1 -1
- package/dist/cabinet/geometry/fronts.js +1 -1
- package/dist/cabinet/geometry/run.d.ts.map +1 -1
- package/dist/cabinet/geometry/run.js +19 -1
- package/dist/cabinet/geometry.d.ts.map +1 -1
- package/dist/cabinet/geometry.js +63 -1
- package/dist/cabinet/index.d.ts +1 -0
- package/dist/cabinet/index.d.ts.map +1 -1
- package/dist/cabinet/index.js +1 -0
- package/dist/cabinet/insertion.d.ts +19 -0
- package/dist/cabinet/insertion.d.ts.map +1 -0
- package/dist/cabinet/insertion.js +49 -0
- package/dist/cabinet/move-frame.d.ts.map +1 -1
- package/dist/cabinet/move-frame.js +68 -2
- package/dist/cabinet/panel-context.d.ts +7 -0
- package/dist/cabinet/panel-context.d.ts.map +1 -0
- package/dist/cabinet/panel-context.js +16 -0
- package/dist/cabinet/panel-visibility.d.ts +9 -0
- package/dist/cabinet/panel-visibility.d.ts.map +1 -0
- package/dist/cabinet/panel-visibility.js +26 -0
- package/dist/cabinet/panel.d.ts.map +1 -1
- package/dist/cabinet/panel.js +221 -37
- package/dist/cabinet/placement-dimensions.d.ts +42 -0
- package/dist/cabinet/placement-dimensions.d.ts.map +1 -0
- package/dist/cabinet/placement-dimensions.js +227 -0
- package/dist/cabinet/placement-snap.d.ts +21 -1
- package/dist/cabinet/placement-snap.d.ts.map +1 -1
- package/dist/cabinet/placement-snap.js +48 -6
- package/dist/cabinet/preset-width-debt.d.ts +7 -0
- package/dist/cabinet/preset-width-debt.d.ts.map +1 -0
- package/dist/cabinet/preset-width-debt.js +45 -0
- package/dist/cabinet/presets.d.ts.map +1 -1
- package/dist/cabinet/presets.js +14 -13
- package/dist/cabinet/profiles.d.ts +14 -0
- package/dist/cabinet/profiles.d.ts.map +1 -0
- package/dist/cabinet/profiles.js +30 -0
- package/dist/cabinet/quick-actions.d.ts.map +1 -1
- package/dist/cabinet/quick-actions.js +8 -24
- package/dist/cabinet/reveals.d.ts +37 -0
- package/dist/cabinet/reveals.d.ts.map +1 -0
- package/dist/cabinet/reveals.js +13 -0
- package/dist/cabinet/run-layout.d.ts +90 -4
- package/dist/cabinet/run-layout.d.ts.map +1 -1
- package/dist/cabinet/run-layout.js +408 -23
- package/dist/cabinet/run-ops.d.ts +202 -10
- package/dist/cabinet/run-ops.d.ts.map +1 -1
- package/dist/cabinet/run-ops.js +520 -33
- package/dist/cabinet/run-panel.d.ts +6 -2
- package/dist/cabinet/run-panel.d.ts.map +1 -1
- package/dist/cabinet/run-panel.js +285 -108
- package/dist/cabinet/stack-transitions.d.ts.map +1 -1
- package/dist/cabinet/stack-transitions.js +35 -24
- package/dist/cabinet/stack.d.ts +169 -1
- package/dist/cabinet/stack.d.ts.map +1 -1
- package/dist/cabinet/stack.js +57 -18
- package/dist/cabinet/tool.d.ts.map +1 -1
- package/dist/cabinet/tool.js +615 -91
- package/dist/cabinet/validation.d.ts +27 -0
- package/dist/cabinet/validation.d.ts.map +1 -0
- package/dist/cabinet/validation.js +56 -0
- package/dist/cabinet/wall-height-presets.d.ts +12 -0
- package/dist/cabinet/wall-height-presets.d.ts.map +1 -0
- package/dist/cabinet/wall-height-presets.js +15 -0
- package/dist/cabinet/wall-snap.d.ts +27 -3
- package/dist/cabinet/wall-snap.d.ts.map +1 -1
- package/dist/cabinet/wall-snap.js +278 -62
- package/dist/cabinet/widths.d.ts +10 -0
- package/dist/cabinet/widths.d.ts.map +1 -0
- package/dist/cabinet/widths.js +13 -0
- package/dist/ceiling/definition.d.ts.map +1 -1
- package/dist/ceiling/definition.js +7 -1
- package/dist/ceiling/floorplan-affordances.d.ts +8 -8
- package/dist/ceiling/materials.d.ts.map +1 -1
- package/dist/ceiling/materials.js +0 -1
- package/dist/ceiling/panel.js +1 -1
- package/dist/ceiling/parametrics.js +1 -1
- package/dist/chimney/definition.js +1 -1
- package/dist/chimney/panel.js +1 -1
- package/dist/chimney/parametrics.js +3 -3
- package/dist/column/definition.d.ts.map +1 -1
- package/dist/column/definition.js +22 -4
- package/dist/column/panel.d.ts.map +1 -1
- package/dist/column/panel.js +37 -7
- package/dist/column/parametrics.d.ts.map +1 -1
- package/dist/column/parametrics.js +5 -3
- package/dist/column/tool.d.ts.map +1 -1
- package/dist/column/tool.js +50 -14
- package/dist/cupola/definition.d.ts.map +1 -1
- package/dist/cupola/definition.js +15 -6
- package/dist/cupola/geometry.d.ts +6 -0
- package/dist/cupola/geometry.d.ts.map +1 -1
- package/dist/cupola/geometry.js +60 -13
- package/dist/cupola/paint.d.ts +4 -0
- package/dist/cupola/paint.d.ts.map +1 -0
- package/dist/cupola/paint.js +39 -0
- package/dist/cupola/panel.js +1 -1
- package/dist/cupola/parametrics.js +3 -3
- package/dist/cupola/renderer.d.ts.map +1 -1
- package/dist/cupola/renderer.js +27 -8
- package/dist/door/floorplan-move.d.ts.map +1 -1
- package/dist/door/floorplan-move.js +1 -1
- package/dist/door/move-tool.d.ts.map +1 -1
- package/dist/door/move-tool.js +86 -32
- package/dist/door/panel.d.ts.map +1 -1
- package/dist/door/panel.js +1 -1
- package/dist/door/parametrics.js +2 -2
- package/dist/door/tool.d.ts.map +1 -1
- package/dist/door/tool.js +16 -4
- package/dist/dormer/csg-geometry.d.ts +6 -42
- package/dist/dormer/csg-geometry.d.ts.map +1 -1
- package/dist/dormer/csg-geometry.js +38 -209
- package/dist/dormer/definition.d.ts +4 -12
- package/dist/dormer/definition.d.ts.map +1 -1
- package/dist/dormer/definition.js +18 -193
- package/dist/dormer/floorplan.d.ts +3 -3
- package/dist/dormer/floorplan.d.ts.map +1 -1
- package/dist/dormer/floorplan.js +6 -17
- package/dist/dormer/geometry.d.ts +5 -24
- package/dist/dormer/geometry.d.ts.map +1 -1
- package/dist/dormer/geometry.js +64 -41
- package/dist/dormer/index.d.ts +1 -1
- package/dist/dormer/index.d.ts.map +1 -1
- package/dist/dormer/index.js +1 -1
- package/dist/dormer/move-tool.d.ts.map +1 -1
- package/dist/dormer/move-tool.js +31 -3
- package/dist/dormer/panel-windows-section.d.ts +9 -0
- package/dist/dormer/panel-windows-section.d.ts.map +1 -0
- package/dist/dormer/panel-windows-section.js +7 -0
- package/dist/dormer/panel.d.ts.map +1 -1
- package/dist/dormer/panel.js +100 -18
- package/dist/dormer/parametrics.d.ts.map +1 -1
- package/dist/dormer/parametrics.js +8 -77
- package/dist/dormer/preview.d.ts.map +1 -1
- package/dist/dormer/preview.js +9 -1
- package/dist/dormer/renderer.d.ts.map +1 -1
- package/dist/dormer/renderer.js +24 -26
- package/dist/dormer/tool.d.ts.map +1 -1
- package/dist/dormer/tool.js +3 -1
- package/dist/dormer/window-layout.d.ts +15 -0
- package/dist/dormer/window-layout.d.ts.map +1 -0
- package/dist/dormer/window-layout.js +59 -0
- package/dist/downspout/definition.d.ts.map +1 -1
- package/dist/downspout/definition.js +17 -4
- package/dist/downspout/geometry.d.ts.map +1 -1
- package/dist/downspout/geometry.js +10 -0
- package/dist/downspout/inspector-editors.d.ts.map +1 -1
- package/dist/downspout/inspector-editors.js +9 -1
- package/dist/downspout/parametrics.d.ts.map +1 -1
- package/dist/downspout/parametrics.js +2 -1
- package/dist/downspout/renderer.d.ts.map +1 -1
- package/dist/downspout/renderer.js +19 -3
- package/dist/downspout/system.d.ts +7 -0
- package/dist/downspout/system.d.ts.map +1 -0
- package/dist/downspout/system.js +114 -0
- package/dist/duct-fitting/accessory-geometry.d.ts +4 -0
- package/dist/duct-fitting/accessory-geometry.d.ts.map +1 -0
- package/dist/duct-fitting/accessory-geometry.js +47 -0
- package/dist/duct-fitting/definition.d.ts.map +1 -1
- package/dist/duct-fitting/definition.js +11 -1
- package/dist/duct-fitting/floorplan.d.ts.map +1 -1
- package/dist/duct-fitting/floorplan.js +8 -0
- package/dist/duct-fitting/geometry.d.ts.map +1 -1
- package/dist/duct-fitting/geometry.js +52 -38
- package/dist/duct-fitting/parametrics.d.ts.map +1 -1
- package/dist/duct-fitting/parametrics.js +78 -15
- package/dist/duct-fitting/ports.d.ts +1 -0
- package/dist/duct-fitting/ports.d.ts.map +1 -1
- package/dist/duct-fitting/ports.js +46 -0
- package/dist/duct-fitting/tool.d.ts +19 -0
- package/dist/duct-fitting/tool.d.ts.map +1 -1
- package/dist/duct-fitting/tool.js +126 -34
- package/dist/duct-segment/continuation.d.ts +21 -0
- package/dist/duct-segment/continuation.d.ts.map +1 -0
- package/dist/duct-segment/continuation.js +167 -0
- package/dist/duct-segment/definition.d.ts.map +1 -1
- package/dist/duct-segment/definition.js +19 -18
- package/dist/duct-segment/floorplan.d.ts.map +1 -1
- package/dist/duct-segment/floorplan.js +43 -0
- package/dist/duct-segment/geometry.d.ts.map +1 -1
- package/dist/duct-segment/geometry.js +3 -0
- package/dist/duct-segment/move-tool.d.ts.map +1 -1
- package/dist/duct-segment/move-tool.js +33 -6
- package/dist/duct-segment/parametrics.d.ts.map +1 -1
- package/dist/duct-segment/parametrics.js +45 -1
- package/dist/duct-segment/selection.d.ts +3 -4
- package/dist/duct-segment/selection.d.ts.map +1 -1
- package/dist/duct-segment/selection.js +186 -158
- package/dist/duct-segment/tool.d.ts +37 -0
- package/dist/duct-segment/tool.d.ts.map +1 -1
- package/dist/duct-segment/tool.js +305 -678
- package/dist/duct-terminal/parametrics.js +2 -2
- package/dist/duct-terminal/tool.d.ts.map +1 -1
- package/dist/duct-terminal/tool.js +37 -7
- package/dist/elevator/panel.d.ts.map +1 -1
- package/dist/elevator/panel.js +7 -7
- package/dist/elevator/system.d.ts.map +1 -1
- package/dist/elevator/system.js +10 -1
- package/dist/eyebrow-vent/definition.d.ts.map +1 -1
- package/dist/eyebrow-vent/definition.js +8 -5
- package/dist/eyebrow-vent/geometry.d.ts +4 -0
- package/dist/eyebrow-vent/geometry.d.ts.map +1 -1
- package/dist/eyebrow-vent/geometry.js +60 -15
- package/dist/eyebrow-vent/paint.d.ts +4 -0
- package/dist/eyebrow-vent/paint.d.ts.map +1 -0
- package/dist/eyebrow-vent/paint.js +33 -0
- package/dist/eyebrow-vent/panel.js +1 -1
- package/dist/eyebrow-vent/parametrics.js +3 -3
- package/dist/eyebrow-vent/renderer.d.ts.map +1 -1
- package/dist/eyebrow-vent/renderer.js +27 -8
- package/dist/fence/definition.d.ts.map +1 -1
- package/dist/fence/definition.js +2 -1
- package/dist/fence/floorplan-affordances.d.ts +1 -0
- package/dist/fence/floorplan-affordances.d.ts.map +1 -1
- package/dist/fence/floorplan-affordances.js +30 -1
- package/dist/fence/floorplan.d.ts.map +1 -1
- package/dist/fence/floorplan.js +14 -0
- package/dist/fence/parametrics.js +3 -3
- package/dist/fence/tool.d.ts.map +1 -1
- package/dist/fence/tool.js +47 -20
- package/dist/gutter/corner-mitre.d.ts.map +1 -1
- package/dist/gutter/corner-mitre.js +47 -7
- package/dist/gutter/definition.d.ts.map +1 -1
- package/dist/gutter/definition.js +23 -13
- package/dist/gutter/eave-align.d.ts.map +1 -1
- package/dist/gutter/eave-align.js +10 -0
- package/dist/gutter/eave-snap.d.ts +1 -1
- package/dist/gutter/eave-snap.d.ts.map +1 -1
- package/dist/gutter/eave-snap.js +10 -23
- package/dist/gutter/geometry.d.ts.map +1 -1
- package/dist/gutter/geometry.js +126 -8
- package/dist/gutter/outlet-lookup.d.ts.map +1 -1
- package/dist/gutter/outlet-lookup.js +22 -1
- package/dist/gutter/paint.d.ts +3 -0
- package/dist/gutter/paint.d.ts.map +1 -0
- package/dist/gutter/paint.js +6 -0
- package/dist/gutter/parametrics.d.ts.map +1 -1
- package/dist/gutter/parametrics.js +4 -1
- package/dist/gutter/renderer.d.ts.map +1 -1
- package/dist/gutter/renderer.js +63 -7
- package/dist/gutter/trim-clip.d.ts +3 -0
- package/dist/gutter/trim-clip.d.ts.map +1 -0
- package/dist/gutter/trim-clip.js +5 -0
- package/dist/hvac-equipment/parametrics.js +3 -3
- package/dist/hvac-equipment/tool.d.ts.map +1 -1
- package/dist/hvac-equipment/tool.js +12 -2
- package/dist/index.d.ts +5 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -2
- package/dist/item/definition.d.ts.map +1 -1
- package/dist/item/definition.js +10 -2
- package/dist/item/floorplan-move.d.ts.map +1 -1
- package/dist/item/floorplan-move.js +20 -1
- package/dist/item/floorplan.d.ts.map +1 -1
- package/dist/item/floorplan.js +22 -1
- package/dist/item/move-tool.d.ts +28 -1
- package/dist/item/move-tool.d.ts.map +1 -1
- package/dist/item/move-tool.js +14 -2
- package/dist/item/renderer.d.ts.map +1 -1
- package/dist/item/renderer.js +16 -6
- package/dist/item/system.d.ts +5 -0
- package/dist/item/system.d.ts.map +1 -1
- package/dist/item/system.js +7 -1
- package/dist/lean-to-extension/arc.d.ts +14 -0
- package/dist/lean-to-extension/arc.d.ts.map +1 -0
- package/dist/lean-to-extension/arc.js +56 -0
- package/dist/lean-to-extension/assembly.d.ts +61 -0
- package/dist/lean-to-extension/assembly.d.ts.map +1 -0
- package/dist/lean-to-extension/assembly.js +761 -0
- package/dist/lean-to-extension/canopy-joint.d.ts +35 -0
- package/dist/lean-to-extension/canopy-joint.d.ts.map +1 -0
- package/dist/lean-to-extension/canopy-joint.js +234 -0
- package/dist/lean-to-extension/conical-host.d.ts +15 -0
- package/dist/lean-to-extension/conical-host.d.ts.map +1 -0
- package/dist/lean-to-extension/conical-host.js +113 -0
- package/dist/lean-to-extension/corner-joint.d.ts +29 -0
- package/dist/lean-to-extension/corner-joint.d.ts.map +1 -0
- package/dist/lean-to-extension/corner-joint.js +1202 -0
- package/dist/lean-to-extension/definition.d.ts +4 -0
- package/dist/lean-to-extension/definition.d.ts.map +1 -0
- package/dist/lean-to-extension/definition.js +433 -0
- package/dist/lean-to-extension/floorplan-affordances.d.ts +4 -0
- package/dist/lean-to-extension/floorplan-affordances.d.ts.map +1 -0
- package/dist/lean-to-extension/floorplan-affordances.js +144 -0
- package/dist/lean-to-extension/floorplan-move.d.ts +3 -0
- package/dist/lean-to-extension/floorplan-move.d.ts.map +1 -0
- package/dist/lean-to-extension/floorplan-move.js +157 -0
- package/dist/lean-to-extension/floorplan-tool.d.ts +4 -0
- package/dist/lean-to-extension/floorplan-tool.d.ts.map +1 -0
- package/dist/lean-to-extension/floorplan-tool.js +385 -0
- package/dist/lean-to-extension/floorplan.d.ts +3 -0
- package/dist/lean-to-extension/floorplan.d.ts.map +1 -0
- package/dist/lean-to-extension/floorplan.js +373 -0
- package/dist/lean-to-extension/geometry.d.ts +7 -0
- package/dist/lean-to-extension/geometry.d.ts.map +1 -0
- package/dist/lean-to-extension/geometry.js +662 -0
- package/dist/lean-to-extension/index.d.ts +8 -0
- package/dist/lean-to-extension/index.d.ts.map +1 -0
- package/dist/lean-to-extension/index.js +7 -0
- package/dist/lean-to-extension/layout.d.ts +108 -0
- package/dist/lean-to-extension/layout.d.ts.map +1 -0
- package/dist/lean-to-extension/layout.js +477 -0
- package/dist/lean-to-extension/managed-preview.d.ts +3 -0
- package/dist/lean-to-extension/managed-preview.d.ts.map +1 -0
- package/dist/lean-to-extension/managed-preview.js +93 -0
- package/dist/lean-to-extension/move-tool.d.ts +8 -0
- package/dist/lean-to-extension/move-tool.d.ts.map +1 -0
- package/dist/lean-to-extension/move-tool.js +202 -0
- package/dist/lean-to-extension/paint.d.ts +2 -0
- package/dist/lean-to-extension/paint.d.ts.map +1 -0
- package/dist/lean-to-extension/paint.js +16 -0
- package/dist/lean-to-extension/parametrics.d.ts +4 -0
- package/dist/lean-to-extension/parametrics.d.ts.map +1 -0
- package/dist/lean-to-extension/parametrics.js +570 -0
- package/dist/lean-to-extension/placement-scope.d.ts +3 -0
- package/dist/lean-to-extension/placement-scope.d.ts.map +1 -0
- package/dist/lean-to-extension/placement-scope.js +4 -0
- package/dist/lean-to-extension/placement-validation.d.ts +4 -0
- package/dist/lean-to-extension/placement-validation.d.ts.map +1 -0
- package/dist/lean-to-extension/placement-validation.js +324 -0
- package/dist/lean-to-extension/placement.d.ts +59 -0
- package/dist/lean-to-extension/placement.d.ts.map +1 -0
- package/dist/lean-to-extension/placement.js +331 -0
- package/dist/lean-to-extension/plan-footprint.d.ts +10 -0
- package/dist/lean-to-extension/plan-footprint.d.ts.map +1 -0
- package/dist/lean-to-extension/plan-footprint.js +27 -0
- package/dist/lean-to-extension/preview-geometry.d.ts +7 -0
- package/dist/lean-to-extension/preview-geometry.d.ts.map +1 -0
- package/dist/lean-to-extension/preview-geometry.js +40 -0
- package/dist/lean-to-extension/preview.d.ts +7 -0
- package/dist/lean-to-extension/preview.d.ts.map +1 -0
- package/dist/lean-to-extension/preview.js +20 -0
- package/dist/lean-to-extension/renderer.d.ts +6 -0
- package/dist/lean-to-extension/renderer.d.ts.map +1 -0
- package/dist/lean-to-extension/renderer.js +34 -0
- package/dist/lean-to-extension/roof-attachment.d.ts +28 -0
- package/dist/lean-to-extension/roof-attachment.d.ts.map +1 -0
- package/dist/lean-to-extension/roof-attachment.js +376 -0
- package/dist/lean-to-extension/schema.d.ts +2 -0
- package/dist/lean-to-extension/schema.d.ts.map +1 -0
- package/dist/lean-to-extension/schema.js +1 -0
- package/dist/lean-to-extension/slots.d.ts +5 -0
- package/dist/lean-to-extension/slots.d.ts.map +1 -0
- package/dist/lean-to-extension/slots.js +15 -0
- package/dist/lean-to-extension/system.d.ts +7 -0
- package/dist/lean-to-extension/system.d.ts.map +1 -0
- package/dist/lean-to-extension/system.js +726 -0
- package/dist/lean-to-extension/tool.d.ts +3 -0
- package/dist/lean-to-extension/tool.d.ts.map +1 -0
- package/dist/lean-to-extension/tool.js +580 -0
- package/dist/lean-to-extension/wall-target.d.ts +10 -0
- package/dist/lean-to-extension/wall-target.d.ts.map +1 -0
- package/dist/lean-to-extension/wall-target.js +29 -0
- package/dist/lineset/definition.d.ts.map +1 -1
- package/dist/lineset/definition.js +1 -0
- package/dist/liquid-line/definition.d.ts.map +1 -1
- package/dist/liquid-line/definition.js +1 -0
- package/dist/pipe-fitting/definition.d.ts.map +1 -1
- package/dist/pipe-fitting/definition.js +16 -2
- package/dist/pipe-fitting/floorplan.d.ts.map +1 -1
- package/dist/pipe-fitting/floorplan.js +4 -0
- package/dist/pipe-fitting/geometry.d.ts +3 -5
- package/dist/pipe-fitting/geometry.d.ts.map +1 -1
- package/dist/pipe-fitting/geometry.js +154 -21
- package/dist/pipe-fitting/inline-insertion.d.ts +13 -0
- package/dist/pipe-fitting/inline-insertion.d.ts.map +1 -0
- package/dist/pipe-fitting/inline-insertion.js +96 -0
- package/dist/pipe-fitting/parametrics.d.ts.map +1 -1
- package/dist/pipe-fitting/parametrics.js +17 -3
- package/dist/pipe-fitting/ports.d.ts.map +1 -1
- package/dist/pipe-fitting/ports.js +8 -1
- package/dist/pipe-fitting/tool.d.ts +26 -0
- package/dist/pipe-fitting/tool.d.ts.map +1 -1
- package/dist/pipe-fitting/tool.js +182 -37
- package/dist/pipe-segment/continuation.d.ts +22 -0
- package/dist/pipe-segment/continuation.d.ts.map +1 -0
- package/dist/pipe-segment/continuation.js +146 -0
- package/dist/pipe-segment/definition.d.ts.map +1 -1
- package/dist/pipe-segment/definition.js +23 -7
- package/dist/pipe-segment/floorplan.d.ts.map +1 -1
- package/dist/pipe-segment/floorplan.js +42 -0
- package/dist/pipe-segment/geometry.d.ts +2 -1
- package/dist/pipe-segment/geometry.d.ts.map +1 -1
- package/dist/pipe-segment/geometry.js +4 -1
- package/dist/pipe-segment/move-tool.d.ts.map +1 -1
- package/dist/pipe-segment/move-tool.js +25 -5
- package/dist/pipe-segment/parametrics.d.ts.map +1 -1
- package/dist/pipe-segment/parametrics.js +45 -0
- package/dist/pipe-segment/selection.d.ts +3 -4
- package/dist/pipe-segment/selection.d.ts.map +1 -1
- package/dist/pipe-segment/selection.js +169 -105
- package/dist/pipe-segment/slope.d.ts +5 -0
- package/dist/pipe-segment/slope.d.ts.map +1 -0
- package/dist/pipe-segment/slope.js +10 -0
- package/dist/pipe-segment/tool.d.ts.map +1 -1
- package/dist/pipe-segment/tool.js +325 -545
- package/dist/pipe-trap/tool.d.ts.map +1 -1
- package/dist/pipe-trap/tool.js +15 -2
- package/dist/ridge-vent/definition.js +1 -1
- package/dist/ridge-vent/panel.d.ts.map +1 -1
- package/dist/ridge-vent/panel.js +2 -2
- package/dist/ridge-vent/parametrics.js +1 -1
- package/dist/roof/conical-roof-placement.d.ts +36 -0
- package/dist/roof/conical-roof-placement.d.ts.map +1 -0
- package/dist/roof/conical-roof-placement.js +134 -0
- package/dist/roof/conical-roof.d.ts +3 -0
- package/dist/roof/conical-roof.d.ts.map +1 -0
- package/dist/roof/conical-roof.js +53 -0
- package/dist/roof/definition.d.ts +3 -10
- package/dist/roof/definition.d.ts.map +1 -1
- package/dist/roof/definition.js +83 -13
- package/dist/roof/floorplan.d.ts +3 -10
- package/dist/roof/floorplan.d.ts.map +1 -1
- package/dist/roof/floorplan.js +139 -165
- package/dist/roof/index.d.ts +1 -0
- package/dist/roof/index.d.ts.map +1 -1
- package/dist/roof/index.js +1 -0
- package/dist/roof/panel.d.ts.map +1 -1
- package/dist/roof/panel.js +22 -23
- package/dist/roof/renderer.d.ts.map +1 -1
- package/dist/roof/roof-footprint-source.d.ts +16 -0
- package/dist/roof/roof-footprint-source.d.ts.map +1 -0
- package/dist/roof/roof-footprint-source.js +14 -0
- package/dist/roof/roof-footprint.d.ts +25 -0
- package/dist/roof/roof-footprint.d.ts.map +1 -0
- package/dist/roof/roof-footprint.js +94 -0
- package/dist/roof/roof-placement-mode.d.ts +18 -0
- package/dist/roof/roof-placement-mode.d.ts.map +1 -0
- package/dist/roof/roof-placement-mode.js +24 -0
- package/dist/roof/tool.d.ts +10 -0
- package/dist/roof/tool.d.ts.map +1 -0
- package/dist/roof/tool.js +922 -0
- package/dist/roof-segment/definition.d.ts.map +1 -1
- package/dist/roof-segment/definition.js +52 -8
- package/dist/roof-segment/floorplan-affordances.d.ts +5 -6
- package/dist/roof-segment/floorplan-affordances.d.ts.map +1 -1
- package/dist/roof-segment/floorplan-affordances.js +64 -18
- package/dist/roof-segment/floorplan.d.ts +3 -2
- package/dist/roof-segment/floorplan.d.ts.map +1 -1
- package/dist/roof-segment/floorplan.js +95 -46
- package/dist/roof-segment/panel.d.ts.map +1 -1
- package/dist/roof-segment/panel.js +122 -27
- package/dist/scan/definition.d.ts +2 -3
- package/dist/scan/definition.d.ts.map +1 -1
- package/dist/scan/definition.js +9 -7
- package/dist/scan/parametrics.d.ts.map +1 -1
- package/dist/scan/parametrics.js +13 -1
- package/dist/scan/renderer.d.ts.map +1 -1
- package/dist/scan/renderer.js +8 -2
- package/dist/shared/accessory-cursor.d.ts +7 -0
- package/dist/shared/accessory-cursor.d.ts.map +1 -0
- package/dist/shared/accessory-cursor.js +83 -0
- package/dist/shared/accessory-floorplan.d.ts +4 -0
- package/dist/shared/accessory-floorplan.d.ts.map +1 -0
- package/dist/shared/accessory-floorplan.js +51 -0
- package/dist/shared/accessory-geometry.d.ts +7 -0
- package/dist/shared/accessory-geometry.d.ts.map +1 -0
- package/dist/shared/accessory-geometry.js +79 -0
- package/dist/shared/accessory-placement.d.ts +10 -0
- package/dist/shared/accessory-placement.d.ts.map +1 -0
- package/dist/shared/accessory-placement.js +126 -0
- package/dist/shared/accessory-snapping.d.ts +5 -0
- package/dist/shared/accessory-snapping.d.ts.map +1 -0
- package/dist/shared/accessory-snapping.js +40 -0
- package/dist/shared/automatic-run-end-cap.d.ts +11 -0
- package/dist/shared/automatic-run-end-cap.d.ts.map +1 -0
- package/dist/shared/automatic-run-end-cap.js +159 -0
- package/dist/shared/block-face-host.d.ts +15 -0
- package/dist/shared/block-face-host.d.ts.map +1 -0
- package/dist/shared/block-face-host.js +36 -0
- package/dist/shared/connection-compatibility.d.ts +8 -0
- package/dist/shared/connection-compatibility.d.ts.map +1 -0
- package/dist/shared/connection-compatibility.js +28 -0
- package/dist/shared/connection-feedback.d.ts +10 -0
- package/dist/shared/connection-feedback.d.ts.map +1 -0
- package/dist/shared/connection-feedback.js +17 -0
- package/dist/shared/distribution-run-contract.d.ts +49 -0
- package/dist/shared/distribution-run-contract.d.ts.map +1 -0
- package/dist/shared/distribution-run-contract.js +30 -0
- package/dist/shared/distribution-run-tool.d.ts +107 -0
- package/dist/shared/distribution-run-tool.d.ts.map +1 -0
- package/dist/shared/distribution-run-tool.js +941 -0
- package/dist/shared/dormer-wall-opening-placement.d.ts +21 -0
- package/dist/shared/dormer-wall-opening-placement.d.ts.map +1 -0
- package/dist/shared/dormer-wall-opening-placement.js +101 -0
- package/dist/shared/duct-adapter.d.ts +10 -0
- package/dist/shared/duct-adapter.d.ts.map +1 -0
- package/dist/shared/duct-adapter.js +43 -0
- package/dist/shared/elbow-branch-continuation.d.ts +20 -0
- package/dist/shared/elbow-branch-continuation.d.ts.map +1 -0
- package/dist/shared/elbow-branch-continuation.js +200 -0
- package/dist/shared/fitting-clearance.d.ts +5 -0
- package/dist/shared/fitting-clearance.d.ts.map +1 -0
- package/dist/shared/fitting-clearance.js +11 -0
- package/dist/shared/fitting-deletion-cleanup.d.ts +14 -0
- package/dist/shared/fitting-deletion-cleanup.d.ts.map +1 -0
- package/dist/shared/fitting-deletion-cleanup.js +297 -0
- package/dist/shared/fitting-surface-support.d.ts +5 -0
- package/dist/shared/fitting-surface-support.d.ts.map +1 -0
- package/dist/shared/fitting-surface-support.js +42 -0
- package/dist/shared/fitting-tool-options.d.ts +4 -0
- package/dist/shared/fitting-tool-options.d.ts.map +1 -0
- package/dist/shared/fitting-tool-options.js +175 -0
- package/dist/shared/floor-placement.d.ts +1 -1
- package/dist/shared/floor-placement.d.ts.map +1 -1
- package/dist/shared/floor-placement.js +13 -33
- package/dist/shared/ghost-materials.d.ts.map +1 -1
- package/dist/shared/ghost-materials.js +2 -1
- package/dist/shared/lean-to-post-omissions.d.ts +8 -0
- package/dist/shared/lean-to-post-omissions.d.ts.map +1 -0
- package/dist/shared/lean-to-post-omissions.js +51 -0
- package/dist/shared/mep-fitting-actions.d.ts +5 -0
- package/dist/shared/mep-fitting-actions.d.ts.map +1 -0
- package/dist/shared/mep-fitting-actions.js +16 -0
- package/dist/shared/mep-presets.d.ts +11 -0
- package/dist/shared/mep-presets.d.ts.map +1 -0
- package/dist/shared/mep-presets.js +34 -0
- package/dist/shared/node-batch/candidates.d.ts +29 -0
- package/dist/shared/node-batch/candidates.d.ts.map +1 -0
- package/dist/shared/node-batch/candidates.js +260 -0
- package/dist/shared/node-batch/store.d.ts +26 -0
- package/dist/shared/node-batch/store.d.ts.map +1 -0
- package/dist/shared/node-batch/store.js +319 -0
- package/dist/shared/node-batch/system.d.ts +8 -0
- package/dist/shared/node-batch/system.d.ts.map +1 -0
- package/dist/shared/node-batch/system.js +569 -0
- package/dist/shared/node-batch/types.d.ts +99 -0
- package/dist/shared/node-batch/types.d.ts.map +1 -0
- package/dist/shared/node-batch/types.js +4 -0
- package/dist/shared/opening-move-history.d.ts +47 -0
- package/dist/shared/opening-move-history.d.ts.map +1 -0
- package/dist/shared/opening-move-history.js +18 -0
- package/dist/shared/opening-move-wall-gate.d.ts +55 -0
- package/dist/shared/opening-move-wall-gate.d.ts.map +1 -0
- package/dist/shared/opening-move-wall-gate.js +44 -0
- package/dist/shared/path-point-affordance.d.ts +2 -2
- package/dist/shared/path-point-affordance.d.ts.map +1 -1
- package/dist/shared/path-point-affordance.js +30 -6
- package/dist/shared/placeholder-geometry.d.ts.map +1 -1
- package/dist/shared/placeholder-geometry.js +4 -0
- package/dist/shared/ports.d.ts +20 -3
- package/dist/shared/ports.d.ts.map +1 -1
- package/dist/shared/ports.js +148 -7
- package/dist/shared/primitive-uv.d.ts +17 -0
- package/dist/shared/primitive-uv.d.ts.map +1 -0
- package/dist/shared/primitive-uv.js +107 -0
- package/dist/shared/reducer-size.d.ts +2 -0
- package/dist/shared/reducer-size.d.ts.map +1 -0
- package/dist/shared/reducer-size.js +12 -0
- package/dist/shared/ridge-snap.js +1 -1
- package/dist/shared/roof-surface.d.ts.map +1 -1
- package/dist/shared/roof-surface.js +17 -2
- package/dist/shared/run-cursor.d.ts +22 -0
- package/dist/shared/run-cursor.d.ts.map +1 -0
- package/dist/shared/run-cursor.js +19 -0
- package/dist/shared/run-direction-feedback.d.ts +20 -0
- package/dist/shared/run-direction-feedback.d.ts.map +1 -0
- package/dist/shared/run-direction-feedback.js +139 -0
- package/dist/shared/run-hanger-controls.d.ts +7 -0
- package/dist/shared/run-hanger-controls.d.ts.map +1 -0
- package/dist/shared/run-hanger-controls.js +44 -0
- package/dist/shared/run-hanger-inspector.d.ts +5 -0
- package/dist/shared/run-hanger-inspector.d.ts.map +1 -0
- package/dist/shared/run-hanger-inspector.js +43 -0
- package/dist/shared/run-hanger-mode.d.ts +11 -0
- package/dist/shared/run-hanger-mode.d.ts.map +1 -0
- package/dist/shared/run-hanger-mode.js +32 -0
- package/dist/shared/run-hanger-system.d.ts +3 -0
- package/dist/shared/run-hanger-system.d.ts.map +1 -0
- package/dist/shared/run-hanger-system.js +39 -0
- package/dist/shared/run-hangers.d.ts +25 -0
- package/dist/shared/run-hangers.d.ts.map +1 -0
- package/dist/shared/run-hangers.js +261 -0
- package/dist/shared/run-port-snap.d.ts +11 -0
- package/dist/shared/run-port-snap.d.ts.map +1 -0
- package/dist/shared/run-port-snap.js +19 -0
- package/dist/shared/run-screen-direction.d.ts +5 -0
- package/dist/shared/run-screen-direction.d.ts.map +1 -0
- package/dist/shared/run-screen-direction.js +24 -0
- package/dist/shared/selection-handles.d.ts +4 -0
- package/dist/shared/selection-handles.d.ts.map +1 -1
- package/dist/shared/selection-handles.js +10 -0
- package/dist/shared/slot-paint.d.ts +8 -1
- package/dist/shared/slot-paint.d.ts.map +1 -1
- package/dist/shared/slot-paint.js +120 -27
- package/dist/shared/surface-paint.d.ts +1 -2
- package/dist/shared/surface-paint.d.ts.map +1 -1
- package/dist/shared/surface-paint.js +9 -20
- package/dist/shared/system-check-panel.d.ts +6 -0
- package/dist/shared/system-check-panel.d.ts.map +1 -0
- package/dist/shared/system-check-panel.js +62 -0
- package/dist/shared/system-checks.d.ts +9 -0
- package/dist/shared/system-checks.d.ts.map +1 -0
- package/dist/shared/system-checks.js +131 -0
- package/dist/shared/wall-attach-target.d.ts +14 -2
- package/dist/shared/wall-attach-target.d.ts.map +1 -1
- package/dist/shared/wall-attach-target.js +108 -4
- package/dist/shared/wall-opening-clearance.d.ts +19 -0
- package/dist/shared/wall-opening-clearance.d.ts.map +1 -0
- package/dist/shared/wall-opening-clearance.js +28 -0
- package/dist/shared/wall-run-move.d.ts +17 -0
- package/dist/shared/wall-run-move.d.ts.map +1 -0
- package/dist/shared/wall-run-move.js +56 -0
- package/dist/shelf/parametrics.js +4 -4
- package/dist/site/renderer.d.ts.map +1 -1
- package/dist/site/renderer.js +40 -28
- package/dist/site/terrain-geometry.d.ts +1 -1
- package/dist/site/terrain-geometry.d.ts.map +1 -1
- package/dist/site/terrain-geometry.js +35 -9
- package/dist/site/terrain-mesh.d.ts +5 -0
- package/dist/site/terrain-mesh.d.ts.map +1 -1
- package/dist/site/terrain-mesh.js +63 -34
- package/dist/skylight/definition.js +1 -1
- package/dist/skylight/panel.js +1 -1
- package/dist/skylight/parametrics.js +2 -2
- package/dist/slab/definition.d.ts.map +1 -1
- package/dist/slab/definition.js +6 -1
- package/dist/slab/dependency-tracker.d.ts +3 -0
- package/dist/slab/dependency-tracker.d.ts.map +1 -0
- package/dist/slab/dependency-tracker.js +104 -0
- package/dist/slab/floorplan-affordances.d.ts +8 -8
- package/dist/slab/geometry.d.ts.map +1 -1
- package/dist/slab/geometry.js +16 -2
- package/dist/slab/panel.js +1 -1
- package/dist/slab/parametrics.js +1 -1
- package/dist/slab/system.d.ts.map +1 -1
- package/dist/slab/system.js +8 -64
- package/dist/solar-panel/definition.js +1 -1
- package/dist/solar-panel/panel.js +1 -1
- package/dist/solar-panel/parametrics.js +2 -2
- package/dist/stair/panel.d.ts.map +1 -1
- package/dist/stair/panel.js +18 -13
- package/dist/stair/stair-type.d.ts +18 -0
- package/dist/stair/stair-type.d.ts.map +1 -0
- package/dist/stair/stair-type.js +25 -0
- package/dist/stair-segment/panel.d.ts.map +1 -1
- package/dist/stair-segment/panel.js +44 -5
- package/dist/turbine-vent/definition.d.ts.map +1 -1
- package/dist/turbine-vent/definition.js +8 -5
- package/dist/turbine-vent/geometry.d.ts.map +1 -1
- package/dist/turbine-vent/geometry.js +48 -18
- package/dist/turbine-vent/paint.d.ts +4 -0
- package/dist/turbine-vent/paint.d.ts.map +1 -0
- package/dist/turbine-vent/paint.js +35 -0
- package/dist/turbine-vent/panel.js +1 -1
- package/dist/turbine-vent/parametrics.js +2 -2
- package/dist/turbine-vent/renderer.d.ts.map +1 -1
- package/dist/turbine-vent/renderer.js +31 -9
- package/dist/wall/curve-eligibility.d.ts +3 -0
- package/dist/wall/curve-eligibility.d.ts.map +1 -0
- package/dist/wall/curve-eligibility.js +10 -0
- package/dist/wall/curve-tool.d.ts.map +1 -1
- package/dist/wall/curve-tool.js +8 -11
- package/dist/wall/definition.d.ts +1 -1
- package/dist/wall/definition.d.ts.map +1 -1
- package/dist/wall/definition.js +36 -13
- package/dist/wall/floorplan-affordances.d.ts +1 -0
- package/dist/wall/floorplan-affordances.d.ts.map +1 -1
- package/dist/wall/floorplan-affordances.js +46 -7
- package/dist/wall/floorplan-move.d.ts +3 -4
- package/dist/wall/floorplan-move.d.ts.map +1 -1
- package/dist/wall/floorplan-move.js +122 -9
- package/dist/wall/floorplan.d.ts.map +1 -1
- package/dist/wall/floorplan.js +19 -23
- package/dist/wall/move-shared.d.ts.map +1 -1
- package/dist/wall/move-shared.js +10 -7
- package/dist/wall/paint.d.ts.map +1 -1
- package/dist/wall/paint.js +2 -0
- package/dist/wall/panel.d.ts.map +1 -1
- package/dist/wall/panel.js +10 -17
- package/dist/wall/parametrics.js +2 -2
- package/dist/wall/pointer-transparency.d.ts +128 -0
- package/dist/wall/pointer-transparency.d.ts.map +1 -0
- package/dist/wall/pointer-transparency.js +147 -0
- package/dist/wall/renderer.d.ts.map +1 -1
- package/dist/wall/renderer.js +65 -8
- package/dist/wall/selection-hit-owner.d.ts +53 -0
- package/dist/wall/selection-hit-owner.d.ts.map +1 -0
- package/dist/wall/selection-hit-owner.js +79 -0
- package/dist/wall/system.d.ts +2 -0
- package/dist/wall/system.d.ts.map +1 -1
- package/dist/wall/system.js +66 -25
- package/dist/wall/tool.d.ts.map +1 -1
- package/dist/wall/tool.js +5 -0
- package/dist/wall/treatment-level-data.d.ts +6 -1
- package/dist/wall/treatment-level-data.d.ts.map +1 -1
- package/dist/wall/treatment-level-data.js +82 -5
- package/dist/wall/treatments.d.ts +1 -0
- package/dist/wall/treatments.d.ts.map +1 -1
- package/dist/wall/treatments.js +5 -0
- package/dist/wall/wall-batch-system.d.ts +38 -6
- package/dist/wall/wall-batch-system.d.ts.map +1 -1
- package/dist/wall/wall-batch-system.js +122 -25
- package/dist/wall/wall-batch.js +2 -2
- package/dist/window/definition.d.ts +2 -1
- package/dist/window/definition.d.ts.map +1 -1
- package/dist/window/definition.js +51 -24
- package/dist/window/floorplan-move.d.ts.map +1 -1
- package/dist/window/floorplan-move.js +1 -1
- package/dist/window/move-tool.d.ts +7 -5
- package/dist/window/move-tool.d.ts.map +1 -1
- package/dist/window/move-tool.js +344 -58
- package/dist/window/panel.d.ts.map +1 -1
- package/dist/window/panel.js +2 -0
- package/dist/window/parametrics.js +2 -2
- package/dist/window/renderer.d.ts.map +1 -1
- package/dist/window/renderer.js +5 -7
- package/dist/window/tool.d.ts.map +1 -1
- package/dist/window/tool.js +227 -13
- package/dist/zone/floorplan-affordances.d.ts +12 -12
- package/package.json +11 -9
- package/dist/dormer/panel-window-section.d.ts +0 -14
- package/dist/dormer/panel-window-section.d.ts.map +0 -1
- package/dist/dormer/panel-window-section.js +0 -59
- package/dist/dormer/window-assembly.d.ts +0 -22
- package/dist/dormer/window-assembly.d.ts.map +0 -1
- package/dist/dormer/window-assembly.js +0 -111
- package/dist/dormer/window-frame.d.ts +0 -24
- package/dist/dormer/window-frame.d.ts.map +0 -1
- package/dist/dormer/window-frame.js +0 -100
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export const CABINET_STANDARD_WIDTHS = [
|
|
2
|
+
{ id: '300', label: '300 mm', value: 0.3 },
|
|
3
|
+
{ id: '400', label: '400 mm', value: 0.4 },
|
|
4
|
+
{ id: '600', label: '600 mm', value: 0.6 },
|
|
5
|
+
{ id: '800', label: '800 mm', value: 0.8 },
|
|
6
|
+
];
|
|
7
|
+
const WIDTH_MATCH_TOLERANCE = 1e-4;
|
|
8
|
+
export function cabinetStandardWidthId(width) {
|
|
9
|
+
return (CABINET_STANDARD_WIDTHS.find((candidate) => Math.abs(candidate.value - width) <= WIDTH_MATCH_TOLERANCE)?.id ?? 'custom');
|
|
10
|
+
}
|
|
11
|
+
export function cabinetStandardWidthById(id) {
|
|
12
|
+
return CABINET_STANDARD_WIDTHS.find((candidate) => candidate.id === id);
|
|
13
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/ceiling/definition.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,cAAc,EAIpB,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/ceiling/definition.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,cAAc,EAIpB,MAAM,kBAAkB,CAAA;AAmBzB,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAmFtC;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,iBAAiB,EAAE,cAAc,CAAC,OAAO,WAAW,CAiHhE,CAAA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { getCeilingClampBound, resolveCeilingHeight, useScene, } from '@pascal-app/core';
|
|
2
|
-
import { clearStructuralElevationGuide, publishStructuralElevationGuide, resolveStructuralElevationSnap, } from '@pascal-app/editor';
|
|
2
|
+
import { clearStructuralElevationGuide, DRAFTING_SURFACE_EXTENSION_KEY, publishStructuralElevationGuide, resolveStructuralElevationSnap, } from '@pascal-app/editor';
|
|
3
3
|
import { polygonMeasurementFeatures } from '../shared/polygon-measurement';
|
|
4
4
|
import { buildCeilingFloorplan } from './floorplan';
|
|
5
5
|
import { ceilingAddVertexAffordance, ceilingDeleteVertexAffordance, ceilingMoveEdgeAffordance, ceilingMoveVertexAffordance, } from './floorplan-affordances';
|
|
@@ -100,6 +100,12 @@ export const ceilingDefinition = {
|
|
|
100
100
|
schema: CeilingNode,
|
|
101
101
|
category: 'structure',
|
|
102
102
|
surfaceRole: 'ceiling',
|
|
103
|
+
extensions: {
|
|
104
|
+
[DRAFTING_SURFACE_EXTENSION_KEY]: {
|
|
105
|
+
kind: 'ceiling',
|
|
106
|
+
raycast: 'underside',
|
|
107
|
+
},
|
|
108
|
+
},
|
|
103
109
|
// Height-less on purpose: a new ceiling follows the level top until the
|
|
104
110
|
// user gives it an explicit custom height.
|
|
105
111
|
defaults: () => ({
|
|
@@ -2,14 +2,14 @@ export declare const ceilingMoveVertexAffordance: import("@pascal-app/core").Flo
|
|
|
2
2
|
object: "node";
|
|
3
3
|
parentId: string | null;
|
|
4
4
|
visible: boolean;
|
|
5
|
-
metadata:
|
|
5
|
+
metadata: Record<string, unknown>;
|
|
6
6
|
id: `ceiling_${string}`;
|
|
7
7
|
type: "ceiling";
|
|
8
8
|
children: `item_${string}`[];
|
|
9
9
|
polygon: [number, number][];
|
|
10
10
|
holes: [number, number][][];
|
|
11
11
|
holeMetadata: {
|
|
12
|
-
source: "
|
|
12
|
+
source: "stair" | "elevator" | "manual";
|
|
13
13
|
stairId?: string | undefined;
|
|
14
14
|
elevatorId?: string | undefined;
|
|
15
15
|
}[];
|
|
@@ -47,14 +47,14 @@ export declare const ceilingAddVertexAffordance: import("@pascal-app/core").Floo
|
|
|
47
47
|
object: "node";
|
|
48
48
|
parentId: string | null;
|
|
49
49
|
visible: boolean;
|
|
50
|
-
metadata:
|
|
50
|
+
metadata: Record<string, unknown>;
|
|
51
51
|
id: `ceiling_${string}`;
|
|
52
52
|
type: "ceiling";
|
|
53
53
|
children: `item_${string}`[];
|
|
54
54
|
polygon: [number, number][];
|
|
55
55
|
holes: [number, number][][];
|
|
56
56
|
holeMetadata: {
|
|
57
|
-
source: "
|
|
57
|
+
source: "stair" | "elevator" | "manual";
|
|
58
58
|
stairId?: string | undefined;
|
|
59
59
|
elevatorId?: string | undefined;
|
|
60
60
|
}[];
|
|
@@ -92,14 +92,14 @@ export declare const ceilingMoveEdgeAffordance: import("@pascal-app/core").Floor
|
|
|
92
92
|
object: "node";
|
|
93
93
|
parentId: string | null;
|
|
94
94
|
visible: boolean;
|
|
95
|
-
metadata:
|
|
95
|
+
metadata: Record<string, unknown>;
|
|
96
96
|
id: `ceiling_${string}`;
|
|
97
97
|
type: "ceiling";
|
|
98
98
|
children: `item_${string}`[];
|
|
99
99
|
polygon: [number, number][];
|
|
100
100
|
holes: [number, number][][];
|
|
101
101
|
holeMetadata: {
|
|
102
|
-
source: "
|
|
102
|
+
source: "stair" | "elevator" | "manual";
|
|
103
103
|
stairId?: string | undefined;
|
|
104
104
|
elevatorId?: string | undefined;
|
|
105
105
|
}[];
|
|
@@ -137,14 +137,14 @@ export declare const ceilingDeleteVertexAffordance: import("@pascal-app/core").F
|
|
|
137
137
|
object: "node";
|
|
138
138
|
parentId: string | null;
|
|
139
139
|
visible: boolean;
|
|
140
|
-
metadata:
|
|
140
|
+
metadata: Record<string, unknown>;
|
|
141
141
|
id: `ceiling_${string}`;
|
|
142
142
|
type: "ceiling";
|
|
143
143
|
children: `item_${string}`[];
|
|
144
144
|
polygon: [number, number][];
|
|
145
145
|
holes: [number, number][][];
|
|
146
146
|
holeMetadata: {
|
|
147
|
-
source: "
|
|
147
|
+
source: "stair" | "elevator" | "manual";
|
|
148
148
|
stairId?: string | undefined;
|
|
149
149
|
elevatorId?: string | undefined;
|
|
150
150
|
}[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"materials.d.ts","sourceRoot":"","sources":["../../src/ceiling/materials.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,aAAa,EAClB,KAAK,eAAe,EACrB,MAAM,kBAAkB,CAAA;AAEzB,OAAO,EAAuB,qBAAqB,EAAE,MAAM,cAAc,CAAA;AAoBzE,MAAM,MAAM,gBAAgB,GAAG;IAC7B,WAAW,EAAE,qBAAqB,CAAA;IAClC,cAAc,EAAE,qBAAqB,CAAA;CACtC,CAAA;
|
|
1
|
+
{"version":3,"file":"materials.d.ts","sourceRoot":"","sources":["../../src/ceiling/materials.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,aAAa,EAClB,KAAK,eAAe,EACrB,MAAM,kBAAkB,CAAA;AAEzB,OAAO,EAAuB,qBAAqB,EAAE,MAAM,cAAc,CAAA;AAoBzE,MAAM,MAAM,gBAAgB,GAAG;IAC7B,WAAW,EAAE,qBAAqB,CAAA;IAClC,cAAc,EAAE,qBAAqB,CAAA;CACtC,CAAA;AAqBD,wBAAgB,mBAAmB,CAAC,KAAK,SAAY,GAAG,gBAAgB,CAMvE;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,cAAc,EAAE,MAAM,CAAC,eAAe,EAAE,aAAa,CAAC,GAAG,SAAS,GACjE,MAAM,GAAG,IAAI,CASf"}
|
package/dist/ceiling/panel.js
CHANGED
|
@@ -185,7 +185,7 @@ export function CeilingPanel() {
|
|
|
185
185
|
return (_jsxs(PanelWrapper, { icon: "/icons/ceiling.webp", onClose: handleClose, title: node.name || 'Ceiling', width: 320, children: [_jsxs(PanelSection, { title: "Height", children: [_jsx(SegmentedControl, { onChange: handleTopModeChange, options: [
|
|
186
186
|
{ label: 'Follows level', value: 'storey' },
|
|
187
187
|
{ label: 'Custom height', value: 'custom' },
|
|
188
|
-
], value: isFollows ? 'storey' : 'custom' }), isFollows ? (_jsxs("div", { className: "px-1 text-[11px] text-muted-foreground", children: ["Currently ", formatLinearMeasurement(resolvedHeight, unit, metricNotation)] })) : (_jsx(SliderControl, { label: "Height", max: Math.min(
|
|
188
|
+
], value: isFollows ? 'storey' : 'custom' }), isFollows ? (_jsxs("div", { className: "px-1 text-[11px] text-muted-foreground", children: ["Currently ", formatLinearMeasurement(resolvedHeight, unit, metricNotation)] })) : (_jsx(SliderControl, { label: "Height", max: Math.min(1000, maxHeight), min: 0, onChange: handleHeightChange, precision: 3, step: 0.01, unit: "m", value: Math.round((node.height ?? resolvedHeight) * 1000) / 1000 })), _jsx("div", { className: "mt-2 grid grid-cols-3 gap-1.5 px-1 pb-1", children: heightPresets.map((preset) => {
|
|
189
189
|
const fits = preset.height <= maxHeight;
|
|
190
190
|
return (_jsx(ActionButton, { className: fits ? undefined : 'cursor-not-allowed opacity-40', disabled: !fits, label: preset.label, onClick: () => handleHeightChange(preset.height), title: fits
|
|
191
191
|
? undefined
|
|
@@ -9,7 +9,7 @@ export const ceilingParametrics = {
|
|
|
9
9
|
groups: [
|
|
10
10
|
{
|
|
11
11
|
label: 'Dimensions',
|
|
12
|
-
fields: [{ key: 'height', kind: 'number', unit: 'm', min: 1
|
|
12
|
+
fields: [{ key: 'height', kind: 'number', unit: 'm', min: 0.1, max: 1000, step: 0.05 }],
|
|
13
13
|
},
|
|
14
14
|
],
|
|
15
15
|
customPanel: () => import('./panel'),
|
|
@@ -378,7 +378,7 @@ export const chimneyDefinition = {
|
|
|
378
378
|
presentation: {
|
|
379
379
|
label: 'Chimney',
|
|
380
380
|
description: 'Vertical masonry stack on a roof segment.',
|
|
381
|
-
icon: { kind: 'url', src: '/icons/
|
|
381
|
+
icon: { kind: 'url', src: '/icons/chimney.webp' },
|
|
382
382
|
paletteSection: 'structure',
|
|
383
383
|
paletteOrder: 122,
|
|
384
384
|
},
|
package/dist/chimney/panel.js
CHANGED
|
@@ -283,7 +283,7 @@ export default function ChimneyPanel() {
|
|
|
283
283
|
value: activePreset ?? '' }) }), _jsxs(PanelSection, { title: "Footprint", children: [_jsx(SegmentedControl, { onChange: (v) => handleUpdate({ bodyShape: v }), options: [
|
|
284
284
|
{ label: 'Square', value: 'square' },
|
|
285
285
|
{ label: 'Round', value: 'round' },
|
|
286
|
-
], value: node.bodyShape ?? 'square' }), _jsx(SliderControl, { label: (node.bodyShape ?? 'square') === 'round' ? 'Diameter' : 'Width', max:
|
|
286
|
+
], value: node.bodyShape ?? 'square' }), _jsx(SliderControl, { label: (node.bodyShape ?? 'square') === 'round' ? 'Diameter' : 'Width', max: 1000, min: 0.2, onChange: (v) => previewProp({ width: v }), onCommit: (v) => commitProp({ width: v }), precision: 2, restoreOnCommit: false, step: 0.05, unit: "m", value: Math.round(node.width * 100) / 100 }), (node.bodyShape ?? 'square') !== 'round' && (_jsx(SliderControl, { label: "Depth", max: 1000, min: 0.2, onChange: (v) => previewProp({ depth: v }), onCommit: (v) => commitProp({ depth: v }), precision: 2, restoreOnCommit: false, step: 0.05, unit: "m", value: Math.round(node.depth * 100) / 100 })), _jsx(SliderControl, { label: "Hollow Depth", max: 3, min: 0, onChange: (v) => previewProp({ bodyHollowDepth: v }), onCommit: (v) => commitProp({ bodyHollowDepth: v }), precision: 2, restoreOnCommit: false, step: 0.05, unit: "m", value: Math.round((node.bodyHollowDepth ?? 0.6) * 100) / 100 }), _jsx(SliderControl, { label: "Wall Thickness", max: 0.3, min: 0, onChange: (v) => previewProp({ bodyHollowMargin: v }), onCommit: (v) => commitProp({ bodyHollowMargin: v }), precision: 3, restoreOnCommit: false, step: 0.005, unit: "m", value: Math.round((node.bodyHollowMargin ?? 0.08) * 1000) / 1000 }), (node.bodyShape ?? 'square') !== 'round' && (_jsx(SliderControl, { label: "Corner Bevel", max: Math.max(0, Math.min(node.width, node.depth) / 2 - 0.005), min: 0, onChange: (v) => previewProp({ cornerBevel: v }), onCommit: (v) => commitProp({ cornerBevel: v }), precision: 3, restoreOnCommit: false, step: 0.005, unit: "m", value: Math.round((node.cornerBevel ?? 0) * 1000) / 1000 }))] }), _jsxs(PanelSection, { title: "Height", children: [_jsx(SliderControl, { label: "Above Ridge", max: 1000, min: 0.1, onChange: (v) => previewProp({ heightAboveRidge: v }), onCommit: (v) => commitProp({ heightAboveRidge: v }), precision: 2, restoreOnCommit: false, step: 0.1, unit: "m", value: Math.round(node.heightAboveRidge * 100) / 100 }), _jsx(SliderControl, { label: "Cutout Offset", max: 0.5, min: 0, onChange: (v) => previewProp({ cutoutOffset: v }), onCommit: (v) => commitProp({ cutoutOffset: v }), precision: 3, restoreOnCommit: false, step: 0.005, unit: "m", value: Math.round((node.cutoutOffset ?? 0) * 1000) / 1000 })] }), _jsxs(PanelSection, { title: "Position", children: [_jsx(SliderControl, { label: "X", max: Math.round(worldMaxX * 10) / 10, min: Math.round(worldMinX * 10) / 10, onChange: (newWorldX) => {
|
|
287
287
|
// Live preview: keep the chimney parented to its current segment
|
|
288
288
|
// and update its segment-local position so the visual matches the
|
|
289
289
|
// dragged world X. Reparenting (if any) happens on commit.
|
|
@@ -15,17 +15,17 @@ export const chimneyParametrics = {
|
|
|
15
15
|
options: ['square', 'round'],
|
|
16
16
|
display: 'segmented',
|
|
17
17
|
},
|
|
18
|
-
{ key: 'width', kind: 'number', unit: 'm', min: 0.2, max:
|
|
18
|
+
{ key: 'width', kind: 'number', unit: 'm', min: 0.2, max: 1000, step: 0.05 },
|
|
19
19
|
{
|
|
20
20
|
key: 'depth',
|
|
21
21
|
kind: 'number',
|
|
22
22
|
unit: 'm',
|
|
23
23
|
min: 0.2,
|
|
24
|
-
max:
|
|
24
|
+
max: 1000,
|
|
25
25
|
step: 0.05,
|
|
26
26
|
visibleIf: (n) => n.bodyShape === 'square',
|
|
27
27
|
},
|
|
28
|
-
{ key: 'heightAboveRidge', kind: 'number', unit: 'm', min: 0.2, max:
|
|
28
|
+
{ key: 'heightAboveRidge', kind: 'number', unit: 'm', min: 0.2, max: 1000, step: 0.05 },
|
|
29
29
|
{
|
|
30
30
|
key: 'cornerBevel',
|
|
31
31
|
kind: 'number',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/column/definition.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/column/definition.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,cAAc,EACpB,MAAM,kBAAkB,CAAA;AAUzB,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AA2TrC;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,gBAAgB,EAAE,cAAc,CAAC,OAAO,UAAU,CAiG9D,CAAA"}
|
|
@@ -166,6 +166,14 @@ const STYLES_WITH_TOP_SPREAD = new Set([
|
|
|
166
166
|
'y-frame',
|
|
167
167
|
'v-frame',
|
|
168
168
|
]);
|
|
169
|
+
function isLeanToManagedColumn(node) {
|
|
170
|
+
const metadata = node.metadata;
|
|
171
|
+
return (metadata !== null &&
|
|
172
|
+
typeof metadata === 'object' &&
|
|
173
|
+
!Array.isArray(metadata) &&
|
|
174
|
+
metadata.managedByLeanTo !== undefined &&
|
|
175
|
+
metadata.leanToRole === 'post');
|
|
176
|
+
}
|
|
169
177
|
// Resolve the column's visible XZ footprint half-extents per supportStyle
|
|
170
178
|
// + crossSection. Vertical supports use the shaft geometry (radius for
|
|
171
179
|
// round / octagonal / sixteen-sided, width/depth for square / rectangular);
|
|
@@ -251,7 +259,10 @@ function columnHandles(node) {
|
|
|
251
259
|
// - round / octagonal / sixteen-sided → single radius arrow
|
|
252
260
|
// - square → uniform width+depth
|
|
253
261
|
// - rectangular → width + depth (independent)
|
|
254
|
-
const handles = [
|
|
262
|
+
const handles = [];
|
|
263
|
+
const managedByLeanTo = isLeanToManagedColumn(node);
|
|
264
|
+
if (!managedByLeanTo)
|
|
265
|
+
handles.push(columnHeightHandle());
|
|
255
266
|
if (node.supportStyle !== 'vertical') {
|
|
256
267
|
handles.push(columnBraceHandle('x'), columnBraceHandle('z'));
|
|
257
268
|
if (STYLES_WITH_BOTTOM_SPREAD.has(node.supportStyle)) {
|
|
@@ -261,6 +272,10 @@ function columnHandles(node) {
|
|
|
261
272
|
handles.push(columnBraceTopSpreadHandle());
|
|
262
273
|
}
|
|
263
274
|
}
|
|
275
|
+
else if (managedByLeanTo) {
|
|
276
|
+
// Lean-to sync owns the post's structural height and footprint. Keep
|
|
277
|
+
// rotation user-owned so asymmetric styles such as K-braces can be flipped.
|
|
278
|
+
}
|
|
264
279
|
else if (ROUND_CROSS_SECTIONS.has(node.crossSection)) {
|
|
265
280
|
handles.push(columnRadiusHandle());
|
|
266
281
|
}
|
|
@@ -270,12 +285,14 @@ function columnHandles(node) {
|
|
|
270
285
|
else {
|
|
271
286
|
handles.push(columnAxisHandle('x'), columnAxisHandle('z'));
|
|
272
287
|
}
|
|
273
|
-
handles.push(columnRotateHandle()
|
|
288
|
+
handles.push(columnRotateHandle());
|
|
289
|
+
if (!managedByLeanTo)
|
|
290
|
+
handles.push(columnMoveHandle());
|
|
274
291
|
return handles;
|
|
275
292
|
}
|
|
276
293
|
function resolveColumnStructuralGridMoveSnap({ candidatePosition, nodes, levelId, }) {
|
|
277
294
|
const snap = resolveStructuralGridSnap([candidatePosition[0], candidatePosition[2]], collectStructuralGridAxes(nodes, levelId));
|
|
278
|
-
return snap ? [snap.point[0], candidatePosition[1], snap.point[1]] : null;
|
|
295
|
+
return snap ? { position: [snap.point[0], candidatePosition[1], snap.point[1]] } : null;
|
|
279
296
|
}
|
|
280
297
|
/**
|
|
281
298
|
* Column — Stage A registration. Wrap-export of the legacy
|
|
@@ -309,6 +326,7 @@ export const columnDefinition = {
|
|
|
309
326
|
},
|
|
310
327
|
capabilities: {
|
|
311
328
|
selectable: { hitVolume: 'bbox' },
|
|
329
|
+
surfaces: { top: { height: (node) => node.height } },
|
|
312
330
|
duplicable: true,
|
|
313
331
|
deletable: true,
|
|
314
332
|
// Generic 3D translate-on-XZ via `MoveRegistryNodeTool` (grid snap + the
|
|
@@ -317,7 +335,7 @@ export const columnDefinition = {
|
|
|
317
335
|
movable: {
|
|
318
336
|
axes: ['x', 'z'],
|
|
319
337
|
gridSnap: true,
|
|
320
|
-
|
|
338
|
+
groupMoveSnapPose: resolveColumnStructuralGridMoveSnap,
|
|
321
339
|
},
|
|
322
340
|
slots: (node) => columnSlots(node),
|
|
323
341
|
paint: columnPaint,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"panel.d.ts","sourceRoot":"","sources":["../../src/column/panel.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"panel.d.ts","sourceRoot":"","sources":["../../src/column/panel.tsx"],"names":[],"mappings":"AAgSA,MAAM,CAAC,OAAO,UAAU,WAAW,uCAo1BlC"}
|
package/dist/column/panel.js
CHANGED
|
@@ -6,6 +6,18 @@ import { useViewer } from '@pascal-app/viewer';
|
|
|
6
6
|
import { Move, Trash2 } from 'lucide-react';
|
|
7
7
|
import { useCallback } from 'react';
|
|
8
8
|
const SELECT_CLASS = 'h-10 w-full rounded-lg border border-border/50 bg-[#2C2C2E] px-3 text-sm text-foreground outline-none transition-colors hover:bg-[#3e3e3e] focus:ring-1 focus:ring-border';
|
|
9
|
+
const MANAGED_LEAN_TO_LAYOUT_FIELDS = new Set([
|
|
10
|
+
'position',
|
|
11
|
+
'height',
|
|
12
|
+
'width',
|
|
13
|
+
'depth',
|
|
14
|
+
'crossSection',
|
|
15
|
+
'baseStyle',
|
|
16
|
+
'baseHeight',
|
|
17
|
+
'baseWidthScale',
|
|
18
|
+
'baseDepthScale',
|
|
19
|
+
'slots',
|
|
20
|
+
]);
|
|
9
21
|
const COLUMN_PRESET_OPTIONS = Object.entries(COLUMN_PRESETS).map(([value, preset]) => ({
|
|
10
22
|
value: value,
|
|
11
23
|
label: preset.label,
|
|
@@ -146,6 +158,20 @@ const SUPPORT_STYLE_DEFAULTS = {
|
|
|
146
158
|
function clamp(value, min, max) {
|
|
147
159
|
return Math.min(max, Math.max(min, value));
|
|
148
160
|
}
|
|
161
|
+
function isManagedLeanToPost(node) {
|
|
162
|
+
const metadata = node.metadata;
|
|
163
|
+
if (!metadata || typeof metadata !== 'object' || Array.isArray(metadata))
|
|
164
|
+
return false;
|
|
165
|
+
const record = metadata;
|
|
166
|
+
return record.managedByLeanTo !== undefined && record.leanToRole === 'post';
|
|
167
|
+
}
|
|
168
|
+
function filterManagedLeanToLayoutUpdates(updates) {
|
|
169
|
+
const filtered = { ...updates };
|
|
170
|
+
for (const key of MANAGED_LEAN_TO_LAYOUT_FIELDS) {
|
|
171
|
+
delete filtered[key];
|
|
172
|
+
}
|
|
173
|
+
return filtered;
|
|
174
|
+
}
|
|
149
175
|
function presetUpdates(presetId) {
|
|
150
176
|
const { label, ...preset } = COLUMN_PRESETS[presetId];
|
|
151
177
|
return {
|
|
@@ -227,8 +253,11 @@ export default function ColumnPanel() {
|
|
|
227
253
|
const handleUpdate = useCallback((updates) => {
|
|
228
254
|
if (!selectedId)
|
|
229
255
|
return;
|
|
230
|
-
|
|
231
|
-
|
|
256
|
+
const nextUpdates = node && isManagedLeanToPost(node) ? filterManagedLeanToLayoutUpdates(updates) : updates;
|
|
257
|
+
if (Object.keys(nextUpdates).length === 0)
|
|
258
|
+
return;
|
|
259
|
+
updateNode(selectedId, nextUpdates);
|
|
260
|
+
}, [node, selectedId, updateNode]);
|
|
232
261
|
const handleClose = useCallback(() => {
|
|
233
262
|
setSelection({ selectedIds: [] });
|
|
234
263
|
}, [setSelection]);
|
|
@@ -250,6 +279,7 @@ export default function ColumnPanel() {
|
|
|
250
279
|
return null;
|
|
251
280
|
const shaftProfile = node.shaftProfile ?? 'straight';
|
|
252
281
|
const supportStyle = node.supportStyle ?? 'vertical';
|
|
282
|
+
const managedByLeanTo = isManagedLeanToPost(node);
|
|
253
283
|
const isBraceSupport = supportStyle === 'a-frame' ||
|
|
254
284
|
supportStyle === 'y-frame' ||
|
|
255
285
|
supportStyle === 'v-frame' ||
|
|
@@ -309,18 +339,18 @@ export default function ColumnPanel() {
|
|
|
309
339
|
return (_jsxs("button", { className: cn('group flex flex-col items-center justify-center gap-1.5 rounded-lg border py-2.5 transition-all', isSelected
|
|
310
340
|
? 'border-orange-400/60 bg-orange-400/10 text-foreground shadow-[0_0_0_1px_rgba(251,146,60,0.25)_inset]'
|
|
311
341
|
: 'border-border/50 bg-[#2C2C2E] text-muted-foreground hover:border-border hover:bg-[#3e3e3e] hover:text-foreground'), onClick: () => handleUpdate({ crossSection: option.value }), type: "button", children: [_jsx("span", { className: cn('flex h-7 w-7 items-center justify-center', isSelected ? 'text-orange-300' : 'text-muted-foreground/80'), children: option.icon }), _jsx("span", { className: "font-medium text-[11px] leading-none tracking-wide", children: option.label })] }, option.value));
|
|
312
|
-
}) }), _jsx(SliderControl, { label: "Edge Softness", max: 0.12, min: 0, onChange: (value) => handleUpdate({ edgeSoftness: value }), precision: 3, step: 0.005, unit: "m", value: node.edgeSoftness ?? 0.025 }), (node.crossSection === 'square' || node.crossSection === 'rectangular') && (_jsx(SliderControl, { label: "Shaft Corner Radius", max: 0.3, min: 0, onChange: (value) => handleUpdate({ shaftCornerRadius: value }), precision: 3, step: 0.005, unit: "m", value: node.shaftCornerRadius ?? 0.035 }))] }))] }), _jsxs(PanelSection, { title: "Dimensions", children: [!isBraceSupport && (_jsxs("select", { className: SELECT_CLASS, onChange: (event) => {
|
|
342
|
+
}) }), _jsx(SliderControl, { label: "Edge Softness", max: 0.12, min: 0, onChange: (value) => handleUpdate({ edgeSoftness: value }), precision: 3, step: 0.005, unit: "m", value: node.edgeSoftness ?? 0.025 }), (node.crossSection === 'square' || node.crossSection === 'rectangular') && (_jsx(SliderControl, { label: "Shaft Corner Radius", max: 0.3, min: 0, onChange: (value) => handleUpdate({ shaftCornerRadius: value }), precision: 3, step: 0.005, unit: "m", value: node.shaftCornerRadius ?? 0.035 }))] }))] }), _jsxs(PanelSection, { title: "Dimensions", children: [managedByLeanTo && (_jsx("p", { className: "px-1 pt-1 text-muted-foreground text-xs leading-relaxed", children: "Height and footprint are controlled by the lean-to extension. Rotate or change the support style here; resize from the parent lean-to." })), !isBraceSupport && !managedByLeanTo && (_jsxs("select", { className: SELECT_CLASS, onChange: (event) => {
|
|
313
343
|
if (!event.target.value)
|
|
314
344
|
return;
|
|
315
345
|
handleUpdate(proportionUpdates(node, event.target.value));
|
|
316
|
-
}, value: "", children: [_jsx("option", { value: "", children: "Apply proportion..." }), COLUMN_PROPORTION_OPTIONS.map((option) => (_jsx("option", { value: option.value, children: option.label }, option.value)))] })), _jsx(SliderControl, { label: "Height", max:
|
|
346
|
+
}, value: "", children: [_jsx("option", { value: "", children: "Apply proportion..." }), COLUMN_PROPORTION_OPTIONS.map((option) => (_jsx("option", { value: option.value, children: option.label }, option.value)))] })), !managedByLeanTo && (_jsx(SliderControl, { label: "Height", max: 1000, min: 0.8, onChange: (value) => handleUpdate({ height: value }), precision: 2, step: 0.05, unit: "m", value: node.height })), isBraceSupport ? (_jsxs(_Fragment, { children: [(supportStyle === 'a-frame' ||
|
|
317
347
|
supportStyle === 'x-brace' ||
|
|
318
348
|
supportStyle === 'k-brace' ||
|
|
319
349
|
supportStyle === 'single-strut' ||
|
|
320
350
|
supportStyle === 'tripod' ||
|
|
321
351
|
supportStyle === 'trestle' ||
|
|
322
352
|
supportStyle === 'portal-frame' ||
|
|
323
|
-
supportStyle === 'box-frame') && (_jsx(SliderControl, { label: "Bottom Spread", max:
|
|
353
|
+
supportStyle === 'box-frame') && (_jsx(SliderControl, { label: "Bottom Spread", max: 1000, min: 0.2, onChange: (value) => handleUpdate({
|
|
324
354
|
braceBottomSpread: value,
|
|
325
355
|
braceTopSpread: supportStyle === 'a-frame'
|
|
326
356
|
? Math.min(node.braceTopSpread ?? 0.12, value)
|
|
@@ -345,11 +375,11 @@ export default function ColumnPanel() {
|
|
|
345
375
|
supportStyle === 'portal-frame' ||
|
|
346
376
|
supportStyle === 'box-frame'
|
|
347
377
|
? 1
|
|
348
|
-
: 0.12) }), _jsx(ToggleControl, { checked: node.bracePlateEnabled ?? true, label: "Connector Plates", onChange: (checked) => handleUpdate({ bracePlateEnabled: checked }) })] })) : (_jsxs(_Fragment, { children: [_jsx(SliderControl, { label: "Width", max:
|
|
378
|
+
: 0.12) }), _jsx(ToggleControl, { checked: node.bracePlateEnabled ?? true, label: "Connector Plates", onChange: (checked) => handleUpdate({ bracePlateEnabled: checked }) })] })) : !managedByLeanTo ? (_jsxs(_Fragment, { children: [_jsx(SliderControl, { label: "Width", max: 1000, min: 0.12, onChange: (value) => handleUpdate({
|
|
349
379
|
width: value,
|
|
350
380
|
radius: value / 2,
|
|
351
381
|
...(node.crossSection === 'rectangular' ? {} : { depth: value }),
|
|
352
|
-
}), precision: 2, step: 0.02, unit: "m", value: node.width }), node.crossSection === 'rectangular' && (_jsx(SliderControl, { label: "Depth", max:
|
|
382
|
+
}), precision: 2, step: 0.02, unit: "m", value: node.width }), node.crossSection === 'rectangular' && (_jsx(SliderControl, { label: "Depth", max: 1000, min: 0.12, onChange: (value) => handleUpdate({ depth: value }), precision: 2, step: 0.02, unit: "m", value: node.depth }))] })) : null] }), !isBraceSupport && (_jsxs(PanelSection, { title: "Shaft", children: [_jsxs("select", { className: SELECT_CLASS, onChange: (event) => handleUpdate(shaftProfileUpdates(event.target.value)), value: shaftProfile, children: [_jsx("option", { value: "straight", children: "Straight" }), _jsx("option", { value: "tapered", children: "Tapered" }), _jsx("option", { value: "bulged", children: "Bulged" }), _jsx("option", { value: "hourglass", children: "Hourglass" })] }), shaftProfile === 'straight' && (_jsx(SliderControl, { label: "Shaft Width", max: 1.2, min: 0.3, onChange: (value) => handleUpdate({ shaftStartScale: value, shaftEndScale: value }), precision: 2, step: 0.02, value: node.shaftStartScale ?? 0.72 })), shaftProfile === 'tapered' && (_jsxs(_Fragment, { children: [_jsx(SliderControl, { label: "Bottom Width", max: 1.2, min: 0.3, onChange: (value) => handleUpdate({ shaftStartScale: value }), precision: 2, step: 0.02, value: node.shaftStartScale ?? 0.82 }), _jsx(SliderControl, { label: "Top Width", max: 1.2, min: 0.3, onChange: (value) => handleUpdate({ shaftEndScale: value }), precision: 2, step: 0.02, value: node.shaftEndScale ?? 0.72 }), _jsx(SliderControl, { label: "Taper", max: 0.45, min: 0, onChange: (value) => handleUpdate({ shaftTaper: value }), precision: 2, step: 0.01, value: node.shaftTaper ?? 0.14 })] })), shaftProfile === 'bulged' && (_jsxs(_Fragment, { children: [_jsx(SliderControl, { label: "End Width", max: 1.2, min: 0.3, onChange: (value) => handleUpdate({ shaftStartScale: value, shaftEndScale: value }), precision: 2, step: 0.02, value: node.shaftStartScale ?? 0.68 }), _jsx(SliderControl, { label: "Bulge", max: 0.35, min: 0, onChange: (value) => handleUpdate({ shaftBulge: value }), precision: 2, step: 0.01, value: node.shaftBulge ?? 0.12 })] })), shaftProfile === 'hourglass' && (_jsxs(_Fragment, { children: [_jsx(SliderControl, { label: "End Width", max: 1.2, min: 0.3, onChange: (value) => handleUpdate({ shaftStartScale: value, shaftEndScale: value }), precision: 2, step: 0.02, value: node.shaftStartScale ?? 0.84 }), _jsx(SliderControl, { label: "Waist", max: 0.35, min: 0, onChange: (value) => handleUpdate({ shaftBulge: value }), precision: 2, step: 0.01, value: node.shaftBulge ?? 0.12 })] })), _jsx(SliderControl, { label: "Segment Twist", max: 90, min: -90, onChange: (value) => handleUpdate({
|
|
353
383
|
shaftTwistStep: value,
|
|
354
384
|
...(Math.abs(value) > 0.001 && (node.shaftSegmentCount ?? 1) < 8
|
|
355
385
|
? { shaftSegmentCount: 12 }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parametrics.d.ts","sourceRoot":"","sources":["../../src/column/parametrics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"parametrics.d.ts","sourceRoot":"","sources":["../../src/column/parametrics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AAE5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAE1C;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB,EAAE,oBAAoB,CAAC,UAAU,CAa9D,CAAA"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { leanToPostOmissionPatchesOnDelete } from '../shared/lean-to-post-omissions';
|
|
1
2
|
/**
|
|
2
3
|
* Stage A inspector — minimal. Column has 60+ schema fields (cross-
|
|
3
4
|
* section, shaft profile, capital style, base style, carvings, ring
|
|
@@ -7,13 +8,14 @@
|
|
|
7
8
|
* full legacy panel — Stage E will replace it via `customPanel`.
|
|
8
9
|
*/
|
|
9
10
|
export const columnParametrics = {
|
|
11
|
+
onDelete: leanToPostOmissionPatchesOnDelete,
|
|
10
12
|
groups: [
|
|
11
13
|
{
|
|
12
14
|
label: 'Dimensions',
|
|
13
15
|
fields: [
|
|
14
|
-
{ key: 'height', kind: 'number', unit: 'm', min: 0.5, max:
|
|
15
|
-
{ key: 'width', kind: 'number', unit: 'm', min: 0.1, max:
|
|
16
|
-
{ key: 'depth', kind: 'number', unit: 'm', min: 0.1, max:
|
|
16
|
+
{ key: 'height', kind: 'number', unit: 'm', min: 0.5, max: 1000, step: 0.05 },
|
|
17
|
+
{ key: 'width', kind: 'number', unit: 'm', min: 0.1, max: 1000, step: 0.01 },
|
|
18
|
+
{ key: 'depth', kind: 'number', unit: 'm', min: 0.1, max: 1000, step: 0.01 },
|
|
17
19
|
],
|
|
18
20
|
},
|
|
19
21
|
],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../src/column/tool.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../src/column/tool.tsx"],"names":[],"mappings":"AAwDA;;;;;;;;;;GAUG;AACH,QAAA,MAAM,UAAU,0CAkMf,CAAA;AAED,eAAe,UAAU,CAAA"}
|
package/dist/column/tool.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
-
import { COLUMN_PRESETS, ColumnNode, collectAlignmentAnchors, emitter, resolveSupportSlabPatch, useScene, } from '@pascal-app/core';
|
|
4
|
-
import { getFloorStackPreviewPosition, isAlignmentGuideActive, isGridSnapActive, isMagneticSnapActive, movementSfxStepKey, triggerSFX, useAlignmentGuides, useEditor, useFacingPose, usePlacementPreview, } from '@pascal-app/editor';
|
|
3
|
+
import { COLUMN_PRESETS, ColumnNode, collectAlignmentAnchors, emitter, resolveFrozenFloorPlacementPatch, resolveSupportSlabPatch, useScene, } from '@pascal-app/core';
|
|
4
|
+
import { getFloorStackPreviewPosition, isAlignmentGuideActive, isGridSnapActive, isMagneticSnapActive, movementSfxStepKey, resolvePointerSupportSurface, triggerSFX, useAlignmentGuides, useEditor, useFacingPose, usePlacementPreview, } from '@pascal-app/editor';
|
|
5
5
|
import { useViewer } from '@pascal-app/viewer';
|
|
6
|
+
import { useThree } from '@react-three/fiber';
|
|
6
7
|
import { useEffect, useMemo, useRef, useState } from 'react';
|
|
7
8
|
import { getLevelLocalSnappedPosition, resolveAlignedFloorPlacement, stopPlacementCommitPropagation, subscribeFloorPlacementClicks, } from '../shared/floor-placement';
|
|
8
9
|
import { collectStructuralGridAxes, resolveStructuralGridSnap, } from '../structural-grid/coordination';
|
|
@@ -30,7 +31,11 @@ function createColumnFromPreset(presetId, position) {
|
|
|
30
31
|
*/
|
|
31
32
|
const ColumnTool = () => {
|
|
32
33
|
const activeLevelId = useViewer((state) => state.selection.levelId);
|
|
34
|
+
const camera = useThree((state) => state.camera);
|
|
35
|
+
const cameraRef = useRef(camera);
|
|
36
|
+
cameraRef.current = camera;
|
|
33
37
|
const cursorRef = useRef(null);
|
|
38
|
+
const supportSurfaceRef = useRef(null);
|
|
34
39
|
const previousSnapRef = useRef(null);
|
|
35
40
|
const cursorVisibleRef = useRef(false);
|
|
36
41
|
const [cursorVisible, setCursorVisible] = useState(false);
|
|
@@ -49,15 +54,44 @@ const ColumnTool = () => {
|
|
|
49
54
|
// target for the next one. `previewNode.id` never collides with a scene
|
|
50
55
|
// node, so nothing real is excluded.
|
|
51
56
|
let alignmentCandidates = collectAlignmentAnchors(useScene.getState().nodes, previewNode.id);
|
|
57
|
+
const pointedSurfaceFor = (event) => typeof HTMLCanvasElement !== 'undefined' &&
|
|
58
|
+
event.nativeEvent?.target instanceof HTMLCanvasElement
|
|
59
|
+
? resolvePointerSupportSurface(cameraRef.current, event.position, {
|
|
60
|
+
includeNodeTopSurfaces: true,
|
|
61
|
+
})
|
|
62
|
+
: null;
|
|
63
|
+
const resolveColumnPlacement = (position, surface) => {
|
|
64
|
+
const column = ColumnNode.parse({
|
|
65
|
+
...createColumnFromPreset(DEFAULT_COLUMN_PRESET_ID, position),
|
|
66
|
+
parentId: activeLevelId,
|
|
67
|
+
});
|
|
68
|
+
const nodes = { ...useScene.getState().nodes, [column.id]: column };
|
|
69
|
+
const patch = surface?.sourceNodeId
|
|
70
|
+
? resolveFrozenFloorPlacementPatch(column, nodes, {
|
|
71
|
+
position,
|
|
72
|
+
rotation: column.rotation,
|
|
73
|
+
elevation: surface.elevation,
|
|
74
|
+
preferredSlabId: surface.supportSlabId,
|
|
75
|
+
})
|
|
76
|
+
: {
|
|
77
|
+
position,
|
|
78
|
+
...resolveSupportSlabPatch(column, nodes, {
|
|
79
|
+
maxElevation: surface?.elevation,
|
|
80
|
+
}),
|
|
81
|
+
};
|
|
82
|
+
return { column, patch };
|
|
83
|
+
};
|
|
52
84
|
const onGridMove = (event) => {
|
|
53
85
|
if (!cursorVisibleRef.current) {
|
|
54
86
|
cursorVisibleRef.current = true;
|
|
55
87
|
setCursorVisible(true);
|
|
56
88
|
}
|
|
89
|
+
const pointed = pointedSurfaceFor(event);
|
|
90
|
+
supportSurfaceRef.current = pointed;
|
|
57
91
|
const { position: alignedPosition, guides } = resolveAlignedFloorPlacement({
|
|
58
92
|
node: previewNode,
|
|
59
|
-
rawX: event.localPosition[0],
|
|
60
|
-
rawZ: event.localPosition[2],
|
|
93
|
+
rawX: pointed?.localPoint?.[0] ?? event.localPosition[0],
|
|
94
|
+
rawZ: pointed?.localPoint?.[2] ?? event.localPosition[2],
|
|
61
95
|
gridStep: useEditor.getState().gridSnapStep,
|
|
62
96
|
candidates: alignmentCandidates,
|
|
63
97
|
showAlignment: isAlignmentGuideActive(),
|
|
@@ -67,18 +101,21 @@ const ColumnTool = () => {
|
|
|
67
101
|
const structuralSnap = isGridSnapActive() || isMagneticSnapActive()
|
|
68
102
|
? resolveStructuralGridSnap([alignedPosition[0], alignedPosition[2]], collectStructuralGridAxes(useScene.getState().nodes, activeLevelId))
|
|
69
103
|
: null;
|
|
70
|
-
const
|
|
104
|
+
const planPosition = structuralSnap
|
|
71
105
|
? [structuralSnap.point[0], alignedPosition[1], structuralSnap.point[1]]
|
|
72
106
|
: alignedPosition;
|
|
107
|
+
const { patch } = resolveColumnPlacement(planPosition, pointed);
|
|
108
|
+
const position = patch.position;
|
|
73
109
|
if (structuralSnap)
|
|
74
110
|
useAlignmentGuides.getState().clear();
|
|
75
111
|
else
|
|
76
112
|
useAlignmentGuides.getState().set(guides);
|
|
77
113
|
const visualPosition = getFloorStackPreviewPosition({
|
|
78
|
-
node: previewNode,
|
|
114
|
+
node: { ...previewNode, ...patch },
|
|
79
115
|
position,
|
|
80
116
|
rotation: previewNode.rotation,
|
|
81
117
|
levelId: activeLevelId,
|
|
118
|
+
maxElevation: pointed?.sourceNodeId ? null : pointed?.elevation,
|
|
82
119
|
});
|
|
83
120
|
cursorRef.current?.position.set(...visualPosition);
|
|
84
121
|
// Forward-facing floor triangle, drawn by the editor-side overlay. Columns
|
|
@@ -106,21 +143,20 @@ const ColumnTool = () => {
|
|
|
106
143
|
}
|
|
107
144
|
};
|
|
108
145
|
const commitAtCursor = (event) => {
|
|
146
|
+
const pointed = pointedSurfaceFor(event) ?? supportSurfaceRef.current;
|
|
147
|
+
supportSurfaceRef.current = pointed;
|
|
109
148
|
const fallbackPosition = lastCursorRef.current ??
|
|
110
149
|
getLevelLocalSnappedPosition(activeLevelId, event, useEditor.getState().gridSnapStep, !isGridSnapActive());
|
|
111
150
|
const structuralSnap = isGridSnapActive() || isMagneticSnapActive()
|
|
112
151
|
? resolveStructuralGridSnap([fallbackPosition[0], fallbackPosition[2]], collectStructuralGridAxes(useScene.getState().nodes, activeLevelId))
|
|
113
152
|
: null;
|
|
114
|
-
const
|
|
115
|
-
? [structuralSnap.point[0],
|
|
116
|
-
: fallbackPosition;
|
|
117
|
-
const column =
|
|
118
|
-
...createColumnFromPreset(DEFAULT_COLUMN_PRESET_ID, position),
|
|
119
|
-
parentId: activeLevelId,
|
|
120
|
-
});
|
|
153
|
+
const planPosition = structuralSnap
|
|
154
|
+
? [structuralSnap.point[0], 0, structuralSnap.point[1]]
|
|
155
|
+
: [fallbackPosition[0], 0, fallbackPosition[2]];
|
|
156
|
+
const { column, patch } = resolveColumnPlacement(planPosition, pointed);
|
|
121
157
|
const committedColumn = ColumnNode.parse({
|
|
122
158
|
...column,
|
|
123
|
-
...
|
|
159
|
+
...patch,
|
|
124
160
|
});
|
|
125
161
|
useScene.getState().createNode(committedColumn, activeLevelId);
|
|
126
162
|
useViewer.getState().setSelection({ selectedIds: [committedColumn.id] });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/cupola/definition.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,cAAc,EACpB,MAAM,kBAAkB,CAAA;AAIzB,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/cupola/definition.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,cAAc,EACpB,MAAM,kBAAkB,CAAA;AAIzB,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AA6FrC;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,EAAE,cAAc,CAAC,OAAO,UAAU,CAgE9D,CAAA"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { CupolaNode as CupolaNodeSchema, } from '@pascal-app/core';
|
|
2
|
-
import { surfacePaintCapability } from '../shared/surface-paint';
|
|
3
2
|
import { buildCupolaFloorplan } from './floorplan';
|
|
3
|
+
import { cupolaPaint } from './paint';
|
|
4
4
|
import { cupolaParametrics } from './parametrics';
|
|
5
5
|
import { CupolaNode } from './schema';
|
|
6
6
|
const SIDE_HANDLE_OFFSET = 0.3;
|
|
@@ -9,6 +9,7 @@ const HEIGHT_HANDLE_OFFSET = 0.25;
|
|
|
9
9
|
const ROTATE_CORNER_OFFSET = 0.12;
|
|
10
10
|
const MIN_DIM = 0.3;
|
|
11
11
|
const MIN_HEIGHT = 0.4;
|
|
12
|
+
const CUPOLA_LOUVERS_DEFAULT = 'library:preset-metal';
|
|
12
13
|
function getBodyMidY(n) {
|
|
13
14
|
return Math.max(0.001, n.height) / 2;
|
|
14
15
|
}
|
|
@@ -94,21 +95,29 @@ const cupolaHandles = [
|
|
|
94
95
|
*/
|
|
95
96
|
export const cupolaDefinition = {
|
|
96
97
|
kind: 'cupola',
|
|
97
|
-
schemaVersion:
|
|
98
|
+
schemaVersion: 4,
|
|
98
99
|
schema: CupolaNode,
|
|
99
100
|
category: 'structure',
|
|
100
101
|
surfaceRole: 'roof',
|
|
101
102
|
defaults: () => {
|
|
102
103
|
const stub = CupolaNodeSchema.parse({ id: 'cupola_default', type: 'cupola' });
|
|
103
104
|
const { id: _id, type: _type, ...rest } = stub;
|
|
104
|
-
return
|
|
105
|
+
return {
|
|
106
|
+
...rest,
|
|
107
|
+
slots: { ...(rest.slots ?? {}), louvers: CUPOLA_LOUVERS_DEFAULT },
|
|
108
|
+
};
|
|
105
109
|
},
|
|
106
110
|
capabilities: {
|
|
111
|
+
slots: () => [
|
|
112
|
+
{ slotId: 'base', label: 'Base', default: 'library:preset-softwhite' },
|
|
113
|
+
{ slotId: 'body', label: 'Body', default: 'library:preset-softwhite' },
|
|
114
|
+
{ slotId: 'roof', label: 'Roof', default: 'library:preset-softwhite' },
|
|
115
|
+
{ slotId: 'louvers', label: 'Louvers', default: CUPOLA_LOUVERS_DEFAULT },
|
|
116
|
+
],
|
|
107
117
|
selectable: { hitVolume: 'bbox' },
|
|
108
118
|
duplicable: true,
|
|
109
119
|
deletable: true,
|
|
110
|
-
|
|
111
|
-
paint: surfacePaintCapability,
|
|
120
|
+
paint: cupolaPaint,
|
|
112
121
|
// Mounts on a roof segment via `roofSegmentId`. Sits ON TOP of the
|
|
113
122
|
// slope — no `buildCut`, just the dirty cascade so the parent roof's
|
|
114
123
|
// merged shell rebuilds when the cupola moves / resizes.
|
|
@@ -133,7 +142,7 @@ export const cupolaDefinition = {
|
|
|
133
142
|
presentation: {
|
|
134
143
|
label: 'Cupola',
|
|
135
144
|
description: 'Louvered roof lantern with a dome or pyramid cap and optional finial.',
|
|
136
|
-
icon: { kind: 'url', src: '/icons/
|
|
145
|
+
icon: { kind: 'url', src: '/icons/cupola.webp' },
|
|
137
146
|
paletteSection: 'structure',
|
|
138
147
|
paletteOrder: 122,
|
|
139
148
|
},
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
import type { CupolaNode } from '@pascal-app/core';
|
|
2
2
|
import * as THREE from 'three';
|
|
3
|
+
export declare const CUPOLA_MATERIAL_INDEX: {
|
|
4
|
+
readonly base: 0;
|
|
5
|
+
readonly body: 1;
|
|
6
|
+
readonly roof: 2;
|
|
7
|
+
readonly louvers: 3;
|
|
8
|
+
};
|
|
3
9
|
/**
|
|
4
10
|
* Pure builder for the cupola mesh — a small louvered roof lantern:
|
|
5
11
|
*
|