@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,147 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Should a wall's pointer handlers swallow (early-return) this event?
|
|
3
|
+
*
|
|
4
|
+
* Hidden walls ('down' wall mode, cutaway-hidden faces, auto-mode interior
|
|
5
|
+
* partitions) keep invisible full-height collision meshes that raycast for
|
|
6
|
+
* every pointer event. #683 made them blanket pointer-TRANSPARENT so clicks
|
|
7
|
+
* reached the visible objects behind them (wall-mounted plugin device /
|
|
8
|
+
* service boxes, items). That over-corrected hover + selection: with the
|
|
9
|
+
* Bones X-ray on (walls hidden, framing rendering where the walls are),
|
|
10
|
+
* mousing over a wall highlighted and selected the furniture BEHIND it,
|
|
11
|
+
* because nothing at the wall's depth was allowed to win.
|
|
12
|
+
*
|
|
13
|
+
* The rule is NEAREST-FIRST over hits that OWN SELECTION SEMANTICS. The
|
|
14
|
+
* live event raycast recurses through the level/building wrapper groups
|
|
15
|
+
* (they carry pointer handlers), so `event.intersections` also contains
|
|
16
|
+
* passive geometry — Bones framing InstancedMeshes sit exactly at the
|
|
17
|
+
* wall's own depth (QA f2 probe6/probe7), and the wall's own render mesh
|
|
18
|
+
* rides the same list. Rank by distance alone and the hidden wall yields
|
|
19
|
+
* everywhere its overlay (or its own body) renders — i.e. always. So every
|
|
20
|
+
* hit is first classified by its nearest REGISTERED node ancestor
|
|
21
|
+
* (`selection-hit-owner.ts`):
|
|
22
|
+
*
|
|
23
|
+
* - 'self-wall' hits (own render/collision/treatment meshes) are neutral;
|
|
24
|
+
* - 'other-wall' hits never compete directly (two hidden walls must not
|
|
25
|
+
* both yield and drop the event into the room behind — delivery order
|
|
26
|
+
* gives the nearest one the event) but ANCHOR the wall-mounted test;
|
|
27
|
+
* - 'passive' hits (framing members, gizmos, the grid — no selectable-node
|
|
28
|
+
* ancestry, or a level/building wrapper as their nearest handler owner)
|
|
29
|
+
* never outrank the wall;
|
|
30
|
+
* - 'selectable' hits (furniture, devices, openings, slabs …) outrank the
|
|
31
|
+
* hidden wall when any of these hold:
|
|
32
|
+
* 1. HOSTED by this wall (its own doors / windows / wall-mounted
|
|
33
|
+
* children — subtree membership, so grazing angles can't inflate
|
|
34
|
+
* the depth gap past any epsilon);
|
|
35
|
+
* 2. at ~equal-or-nearer depth (`HIDDEN_WALL_SELECTION_EPSILON`
|
|
36
|
+
* tie-break: device boxes flush with / proud of / recessed into the
|
|
37
|
+
* face, items standing in front of the wall);
|
|
38
|
+
* 3. WALL-MOUNTED further down the ray — within epsilon of some other
|
|
39
|
+
* wall's hit (the #683 / night-5 D4 class: a visible receptacle on
|
|
40
|
+
* a wall two meters BEHIND an interposed hidden wall still wins —
|
|
41
|
+
* the interposed wall falls through, like the #694 MOVE gate).
|
|
42
|
+
*
|
|
43
|
+
* Free-standing selectables clearly behind the wall (a sofa mid-room) no
|
|
44
|
+
* longer outrank it: the wall in front highlights, which is what the ray
|
|
45
|
+
* visually strikes when the Bones framing renders there. Trade-off
|
|
46
|
+
* (deliberate, host-side only — no plugin presence flag): in a plain manual
|
|
47
|
+
* 'down' mode with NO overlay rendering at the wall, that wall strip is
|
|
48
|
+
* hover/selectable even though it draws nothing.
|
|
49
|
+
*
|
|
50
|
+
* Two pre-existing exceptions keep ALL events flowing unconditionally:
|
|
51
|
+
*
|
|
52
|
+
* - DELETE hover mode: hidden walls must stay hover-targetable for the
|
|
53
|
+
* deleteInvisible highlight flow.
|
|
54
|
+
* - A live hidden-wall pointer HOLD (`holdHiddenWallPointerEvents`, core):
|
|
55
|
+
* the door / window move + place tools drive their cursor entirely from
|
|
56
|
+
* `wall:enter` / `wall:move` / `wall:click`, so while one is active the
|
|
57
|
+
* hidden wall must keep raycasting or the opening detaches into the floor
|
|
58
|
+
* free-follow (red world-axis ghost) instead of sliding along its wall.
|
|
59
|
+
* (#694's own-wall MOVE gate then filters those events downstream —
|
|
60
|
+
* this predicate never runs for held events, so the two compose.)
|
|
61
|
+
*
|
|
62
|
+
* Visible walls never suppress. Pure so the truth table is testable without
|
|
63
|
+
* an R3F rig; the renderer supplies live values per event.
|
|
64
|
+
*/
|
|
65
|
+
/**
|
|
66
|
+
* Depth tie-break for "at the wall face": in-wall boxes sit flush-to-
|
|
67
|
+
* recessed within a wall thickness (0.09–0.3 m); openings sit inside the
|
|
68
|
+
* slab. Along-ray gaps inflate by 1/cos(incidence), so this carries typical
|
|
69
|
+
* face-mounted gear through moderate grazing angles without letting a sofa
|
|
70
|
+
* a metre behind the wall win.
|
|
71
|
+
*/
|
|
72
|
+
export const HIDDEN_WALL_SELECTION_EPSILON = 0.35;
|
|
73
|
+
/** The wall renderer names its invisible pick mesh this (see renderer.tsx). */
|
|
74
|
+
export const WALL_COLLISION_MESH_NAME = 'collision-mesh';
|
|
75
|
+
/**
|
|
76
|
+
* Does any other hit on the ray outrank this hidden wall for hover /
|
|
77
|
+
* selection? True → the wall yields the event (pointer-transparent).
|
|
78
|
+
*/
|
|
79
|
+
export const hiddenWallOutrankedOnRay = (ray, epsilon = HIDDEN_WALL_SELECTION_EPSILON) => {
|
|
80
|
+
const wallAnchors = [];
|
|
81
|
+
for (const hit of ray.otherHits) {
|
|
82
|
+
if (hit.ownership === 'other-wall')
|
|
83
|
+
wallAnchors.push(hit.distance);
|
|
84
|
+
}
|
|
85
|
+
return ray.otherHits.some((hit) => {
|
|
86
|
+
if (hit.ownership !== 'selectable')
|
|
87
|
+
return false;
|
|
88
|
+
if (hit.hostedByThisWall)
|
|
89
|
+
return true;
|
|
90
|
+
if (hit.distance <= ray.wallHitDistance + epsilon)
|
|
91
|
+
return true;
|
|
92
|
+
return wallAnchors.some((anchor) => Math.abs(hit.distance - anchor) <= epsilon);
|
|
93
|
+
});
|
|
94
|
+
};
|
|
95
|
+
const isInSubtree = (object, root) => {
|
|
96
|
+
if (!root)
|
|
97
|
+
return false;
|
|
98
|
+
let current = object;
|
|
99
|
+
while (current) {
|
|
100
|
+
if (current === root)
|
|
101
|
+
return true;
|
|
102
|
+
current = current.parent;
|
|
103
|
+
}
|
|
104
|
+
return false;
|
|
105
|
+
};
|
|
106
|
+
/**
|
|
107
|
+
* Reduce a live R3F pointer event (Intersection & { intersections }) to the
|
|
108
|
+
* `WallSelectionRay` the yield rule consumes. `wallRoot` is the wall's
|
|
109
|
+
* registered outer mesh — its subtree hosts the collision mesh, treatments,
|
|
110
|
+
* and the hosted door / window / item renderers. `classify` resolves each
|
|
111
|
+
* hit's owner (`createWallRayHitClassifier(node.id)` in the renderer).
|
|
112
|
+
* Returns undefined when the event carries no usable ray data (synthetic
|
|
113
|
+
* replays); the caller then falls back to full transparency, #683's
|
|
114
|
+
* original behavior.
|
|
115
|
+
*/
|
|
116
|
+
export const extractWallSelectionRay = (event, wallRoot, classify) => {
|
|
117
|
+
const e = event;
|
|
118
|
+
if (typeof e?.distance !== 'number' || !e.object || !Array.isArray(e.intersections)) {
|
|
119
|
+
return undefined;
|
|
120
|
+
}
|
|
121
|
+
const self = e.object;
|
|
122
|
+
const otherHits = [];
|
|
123
|
+
for (const hit of e.intersections) {
|
|
124
|
+
if (!hit || typeof hit.distance !== 'number' || !hit.object)
|
|
125
|
+
continue;
|
|
126
|
+
if (hit.object === self)
|
|
127
|
+
continue;
|
|
128
|
+
const ownership = classify(hit.object);
|
|
129
|
+
otherHits.push({
|
|
130
|
+
distance: hit.distance,
|
|
131
|
+
ownership,
|
|
132
|
+
hostedByThisWall: ownership === 'selectable' && isInSubtree(hit.object, wallRoot),
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
return { wallHitDistance: e.distance, otherHits };
|
|
136
|
+
};
|
|
137
|
+
export const wallPointerEventsSuppressed = ({ wallHidden, hoverHighlightMode, hiddenWallHoldActive, selectionRay, }) => {
|
|
138
|
+
if (!wallHidden)
|
|
139
|
+
return false;
|
|
140
|
+
if (hoverHighlightMode === 'delete')
|
|
141
|
+
return false;
|
|
142
|
+
if (hiddenWallHoldActive)
|
|
143
|
+
return false;
|
|
144
|
+
if (!selectionRay)
|
|
145
|
+
return true;
|
|
146
|
+
return hiddenWallOutrankedOnRay(selectionRay);
|
|
147
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../src/wall/renderer.tsx"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../src/wall/renderer.tsx"],"names":[],"mappings":"AAEA,OAAO,EAOL,KAAK,QAAQ,EACd,MAAM,kBAAkB,CAAA;AAsCzB;;;;;;;;;;;;;;;;;;GAkBG;AACH,QAAA,MAAM,YAAY,GAAI,UAAU;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,gCA4IjD,CAAA;AAED,eAAe,YAAY,CAAA"}
|
package/dist/wall/renderer.js
CHANGED
|
@@ -1,12 +1,20 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { useRegistry, useScene, } from '@pascal-app/core';
|
|
4
|
-
import { getVisibleWallMaterials, NodeRenderer, useNodeEvents, useViewer } from '@pascal-app/viewer';
|
|
3
|
+
import { hiddenWallPointerEventsHeld, useLiveNodeOverrides, useRegistry, useScene, } from '@pascal-app/core';
|
|
4
|
+
import { getVisibleWallMaterials, NodeRenderer, useLibraryMaterialsVersion, useNodeEvents, useViewer, } from '@pascal-app/viewer';
|
|
5
5
|
import { useEffect, useLayoutEffect, useMemo, useRef } from 'react';
|
|
6
6
|
import { useShallow } from 'zustand/react/shallow';
|
|
7
7
|
import { createPlaceholderGeometry } from '../shared/placeholder-geometry';
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
8
|
+
import { extractWallSelectionRay, WALL_COLLISION_MESH_NAME, wallPointerEventsSuppressed, } from './pointer-transparency';
|
|
9
|
+
import { createWallRayHitClassifier } from './selection-hit-owner';
|
|
10
|
+
import { createWallTreatmentSelector, useWallTreatmentLevelData } from './treatment-level-data';
|
|
11
|
+
import { createWallExtraSlotMaterials, hasWallTreatments, WallTreatments, wallTreatmentProudOffsets, } from './treatments';
|
|
12
|
+
function WallTreatmentSubscription(props) {
|
|
13
|
+
const { node } = props;
|
|
14
|
+
const selector = useMemo(() => createWallTreatmentSelector(node, wallTreatmentProudOffsets(node)), [node]);
|
|
15
|
+
const levelData = useWallTreatmentLevelData(selector);
|
|
16
|
+
return levelData ? _jsx(WallTreatments, { ...props, levelData: levelData }) : null;
|
|
17
|
+
}
|
|
10
18
|
/**
|
|
11
19
|
* Thin wall renderer.
|
|
12
20
|
*
|
|
@@ -40,7 +48,50 @@ const WallRenderer = ({ node }) => {
|
|
|
40
48
|
collisionPlaceholderGeometry.dispose();
|
|
41
49
|
};
|
|
42
50
|
}, [collisionPlaceholderGeometry, placeholderGeometry]);
|
|
43
|
-
const
|
|
51
|
+
const rawHandlers = useNodeEvents(node, 'wall');
|
|
52
|
+
// Hidden walls participate in hover/selection NEAREST-FIRST: when the
|
|
53
|
+
// wall-mode pass hides this wall (`WallCutout` stamps `userData.wallHidden`
|
|
54
|
+
// — X-ray 'down' mode, cutaway-hidden faces, auto-mode interior
|
|
55
|
+
// partitions), its invisible full-height collision mesh handles the event
|
|
56
|
+
// only when no hit that OWNS selection semantics outranks it — its own
|
|
57
|
+
// hosted doors / windows / wall-mounted children, any selectable at
|
|
58
|
+
// ~equal-or-nearer depth (device boxes at the face), or wall-mounted gear
|
|
59
|
+
// on a wall behind it (the #683 D4 receptacle class) all win instead.
|
|
60
|
+
// Passive geometry (Bones framing members, the wall's own render mesh,
|
|
61
|
+
// gizmos — see `selection-hit-owner.ts`) never outranks it. Returning
|
|
62
|
+
// early without stopPropagation lets R3F continue to that next
|
|
63
|
+
// intersection. Free-standing objects clearly BEHIND the wall no longer
|
|
64
|
+
// steal the hover: the wall in front highlights (the Bones framing
|
|
65
|
+
// renders exactly there).
|
|
66
|
+
// Two exceptions keep ALL events (see `wallPointerEventsSuppressed`):
|
|
67
|
+
// delete mode (hidden walls stay hover-targetable for the deleteInvisible
|
|
68
|
+
// highlight flow) and a live hidden-wall pointer hold (a door / window
|
|
69
|
+
// move / place tool is tracking the cursor via wall events — without the
|
|
70
|
+
// wall the opening detaches into the floor free-follow).
|
|
71
|
+
const classifyRayHit = useMemo(() => createWallRayHitClassifier(node.id), [node.id]);
|
|
72
|
+
const handlers = useMemo(() => {
|
|
73
|
+
const gated = {};
|
|
74
|
+
for (const key of Object.keys(rawHandlers)) {
|
|
75
|
+
const fn = rawHandlers[key];
|
|
76
|
+
gated[key] = (e) => {
|
|
77
|
+
const wallHidden = ref.current?.userData?.wallHidden === true;
|
|
78
|
+
if (wallPointerEventsSuppressed({
|
|
79
|
+
wallHidden,
|
|
80
|
+
hoverHighlightMode: useViewer.getState().hoverHighlightMode,
|
|
81
|
+
hiddenWallHoldActive: hiddenWallPointerEventsHeld(),
|
|
82
|
+
// Reduced lazily: visible walls never suppress, so don't walk
|
|
83
|
+
// the intersection list for every hover move over them.
|
|
84
|
+
selectionRay: wallHidden
|
|
85
|
+
? extractWallSelectionRay(e, ref.current, classifyRayHit)
|
|
86
|
+
: undefined,
|
|
87
|
+
})) {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
fn(e);
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
return gated;
|
|
94
|
+
}, [classifyRayHit, rawHandlers]);
|
|
44
95
|
const shading = useViewer((s) => s.shading);
|
|
45
96
|
const textures = useViewer((s) => s.textures);
|
|
46
97
|
const colorPreset = useViewer((s) => s.colorPreset);
|
|
@@ -48,20 +99,26 @@ const WallRenderer = ({ node }) => {
|
|
|
48
99
|
const childNodes = useScene(useShallow((state) => (node.children ?? [])
|
|
49
100
|
.map((childId) => state.nodes[childId])
|
|
50
101
|
.filter((child) => child !== undefined)));
|
|
51
|
-
const
|
|
102
|
+
const treatmentOverride = useLiveNodeOverrides((state) => state.overrides.get(node.id));
|
|
103
|
+
const treatmentNode = useMemo(() => (treatmentOverride ? { ...node, ...treatmentOverride } : node), [node, treatmentOverride]);
|
|
52
104
|
// Subscribe to the scene-material palette so editing a `scene:` material a
|
|
53
105
|
// wall slot references re-renders the wall live (the wall-system geometry
|
|
54
106
|
// dirty loop never fires for a material-only edit). `getMaterialsForWall`'s
|
|
55
107
|
// content hash keeps unaffected walls on their cached materials.
|
|
56
108
|
const sceneMaterials = useScene((s) => s.materials);
|
|
109
|
+
// Same for the dynamic library: AI-generated `library:mtl_*` presets
|
|
110
|
+
// register after mount, and a dangling ref cached as the slot default must
|
|
111
|
+
// re-resolve when they land.
|
|
112
|
+
const libraryMaterialsVersion = useLibraryMaterialsVersion();
|
|
57
113
|
const baseMaterials = getVisibleWallMaterials(node, shading, textures, colorPreset, sceneTheme, sceneMaterials);
|
|
58
|
-
|
|
114
|
+
// biome-ignore lint/correctness/useExhaustiveDependencies: libraryMaterialsVersion invalidates the ref resolution inside createWallExtraSlotMaterials
|
|
115
|
+
const extraMaterials = useMemo(() => createWallExtraSlotMaterials(node, shading, sceneMaterials), [node, sceneMaterials, shading, libraryMaterialsVersion]);
|
|
59
116
|
useEffect(() => () => {
|
|
60
117
|
const baseSet = new Set(baseMaterials);
|
|
61
118
|
const owned = new Set(Object.values(extraMaterials).filter((entry) => !baseSet.has(entry)));
|
|
62
119
|
for (const entry of owned)
|
|
63
120
|
entry.dispose();
|
|
64
121
|
}, [baseMaterials, extraMaterials]);
|
|
65
|
-
return (_jsxs("mesh", { castShadow: true, geometry: placeholderGeometry, material: baseMaterials, receiveShadow: true, ref: ref, visible: node.visible, children: [_jsx("mesh", { geometry: collisionPlaceholderGeometry, name:
|
|
122
|
+
return (_jsxs("mesh", { castShadow: true, geometry: placeholderGeometry, material: baseMaterials, receiveShadow: true, ref: ref, visible: node.visible, children: [_jsx("mesh", { geometry: collisionPlaceholderGeometry, name: WALL_COLLISION_MESH_NAME, visible: false, ...handlers }), hasWallTreatments(treatmentNode) && (_jsx(WallTreatmentSubscription, { childrenNodes: childNodes, materials: extraMaterials, node: treatmentNode })), (node.children ?? []).map((childId) => (_jsx(NodeRenderer, { nodeId: childId }, `${node.id}:${childId}`)))] }));
|
|
66
123
|
};
|
|
67
124
|
export default WallRenderer;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Who "owns" a raycast hit, for the hidden-wall nearest-first selection rule
|
|
3
|
+
* (`pointer-transparency.ts`)?
|
|
4
|
+
*
|
|
5
|
+
* The live R3F event raycast recurses through the level/building wrapper
|
|
6
|
+
* groups (they carry pointer handlers), so `event.intersections` contains
|
|
7
|
+
* every mesh under them — including PASSIVE geometry that owns no selection
|
|
8
|
+
* semantics: plugin overlay members (the Bones framing InstancedMeshes sit
|
|
9
|
+
* exactly at the wall's depth), helper meshes, the grid. Distance alone
|
|
10
|
+
* cannot rank those against a hidden wall; ownership can:
|
|
11
|
+
*
|
|
12
|
+
* - 'self-wall' — the hit resolves to THIS wall (its own collision mesh,
|
|
13
|
+
* render mesh, treatments). Neutral: a wall cannot outrank
|
|
14
|
+
* itself, and must not yield to itself either.
|
|
15
|
+
* - 'other-wall' — the hit resolves to a different wall. Never a direct
|
|
16
|
+
* competitor (two hidden walls must not both yield and
|
|
17
|
+
* drop the event into the room behind — delivery order
|
|
18
|
+
* already gives the nearest one the event), but an ANCHOR
|
|
19
|
+
* for the wall-mounted test.
|
|
20
|
+
* - 'selectable' — the hit resolves to a node the editor can select
|
|
21
|
+
* (furniture, devices, openings, slabs …). These are the
|
|
22
|
+
* real competitors.
|
|
23
|
+
* - 'passive' — no selectable-node ancestry (framing members, gizmos,
|
|
24
|
+
* the grid, unregistered helpers). Never outranks a wall.
|
|
25
|
+
*
|
|
26
|
+
* Ownership = the hit object's NEAREST ancestor registered in
|
|
27
|
+
* `sceneRegistry` (every node's renderer registers its root). A hosted
|
|
28
|
+
* door's meshes resolve to the door (registered deeper than its host wall),
|
|
29
|
+
* a wall's own trim resolves to the wall, a framing member resolves to the
|
|
30
|
+
* plugin's overlay node (registered, but not selectable → passive).
|
|
31
|
+
*/
|
|
32
|
+
export type WallRayHitOwnership = 'self-wall' | 'other-wall' | 'selectable' | 'passive';
|
|
33
|
+
/** Injectable seams so the classifier is testable without the live editor. */
|
|
34
|
+
export type HitOwnerDeps = {
|
|
35
|
+
/** Bumped whenever a node (un)registers — invalidates the reverse map. */
|
|
36
|
+
registryRevision: () => number;
|
|
37
|
+
/** All registered (nodeId, root Object3D) pairs. */
|
|
38
|
+
registeredEntries: () => Iterable<[string, object]>;
|
|
39
|
+
/** The node kind for a registered id (undefined once the node is gone). */
|
|
40
|
+
kindOf: (id: string) => string | undefined;
|
|
41
|
+
/** Plugin kinds that declare `capabilities.selectable`. */
|
|
42
|
+
isRegistrySelectableKind: (kind: string) => boolean;
|
|
43
|
+
};
|
|
44
|
+
type ObjectLike = {
|
|
45
|
+
parent?: ObjectLike | null;
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* Build a classifier for one wall's pointer gate. `selfWallId` is that
|
|
49
|
+
* wall's node id; hits resolving to it are 'self-wall'.
|
|
50
|
+
*/
|
|
51
|
+
export declare const createWallRayHitClassifier: (selfWallId: string, deps?: HitOwnerDeps) => ((object: ObjectLike) => WallRayHitOwnership);
|
|
52
|
+
export {};
|
|
53
|
+
//# sourceMappingURL=selection-hit-owner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selection-hit-owner.d.ts","sourceRoot":"","sources":["../../src/wall/selection-hit-owner.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,MAAM,mBAAmB,GAAG,WAAW,GAAG,YAAY,GAAG,YAAY,GAAG,SAAS,CAAA;AA2BvF,8EAA8E;AAC9E,MAAM,MAAM,YAAY,GAAG;IACzB,0EAA0E;IAC1E,gBAAgB,EAAE,MAAM,MAAM,CAAA;IAC9B,oDAAoD;IACpD,iBAAiB,EAAE,MAAM,QAAQ,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IACnD,2EAA2E;IAC3E,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAA;IAC1C,2DAA2D;IAC3D,wBAAwB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAA;CACpD,CAAA;AAWD,KAAK,UAAU,GAAG;IAAE,MAAM,CAAC,EAAE,UAAU,GAAG,IAAI,CAAA;CAAE,CAAA;AA8BhD;;;GAGG;AACH,eAAO,MAAM,0BAA0B,GACrC,YAAY,MAAM,EAClB,OAAM,YAAuB,KAC5B,CAAC,CAAC,MAAM,EAAE,UAAU,KAAK,mBAAmB,CAW9C,CAAA"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { isRegistrySelectable, sceneRegistry, useScene } from '@pascal-app/core';
|
|
2
|
+
/**
|
|
3
|
+
* Built-in kinds with selection semantics in the editor (mirrors
|
|
4
|
+
* SelectionManager's structure/furnish lists until Phase 4 makes
|
|
5
|
+
* `capabilities.selectable` the single source of truth). Wrapper kinds
|
|
6
|
+
* (level/building/site) and the zone volume are deliberately absent: a hit
|
|
7
|
+
* whose nearest owner is a wrapper is passive scenery, and zone volumes
|
|
8
|
+
* share the wall's own planes.
|
|
9
|
+
*/
|
|
10
|
+
const BUILTIN_SELECTABLE_COMPETITOR_KINDS = new Set([
|
|
11
|
+
'fence',
|
|
12
|
+
'item',
|
|
13
|
+
'column',
|
|
14
|
+
'elevator',
|
|
15
|
+
'slab',
|
|
16
|
+
'ceiling',
|
|
17
|
+
'roof',
|
|
18
|
+
'roof-segment',
|
|
19
|
+
'stair',
|
|
20
|
+
'stair-segment',
|
|
21
|
+
'spawn',
|
|
22
|
+
'window',
|
|
23
|
+
'door',
|
|
24
|
+
'shelf',
|
|
25
|
+
]);
|
|
26
|
+
const liveDeps = {
|
|
27
|
+
registryRevision: () => sceneRegistry.revision,
|
|
28
|
+
registeredEntries: () => sceneRegistry.nodes.entries(),
|
|
29
|
+
// The store index is keyed by AnyNodeId; keep the loose read in one place.
|
|
30
|
+
kindOf: (id) => useScene.getState().nodes[id]?.type,
|
|
31
|
+
isRegistrySelectableKind: isRegistrySelectable,
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Reverse lookup (Object3D → registered node id), rebuilt lazily when the
|
|
35
|
+
* scene registry's revision moves. One map per classifier factory; the
|
|
36
|
+
* default factory below shares a single module-level instance.
|
|
37
|
+
*/
|
|
38
|
+
const createRegisteredObjectLookup = (deps) => {
|
|
39
|
+
let revision = -1;
|
|
40
|
+
let reverse = new Map();
|
|
41
|
+
return (object) => {
|
|
42
|
+
const currentRevision = deps.registryRevision();
|
|
43
|
+
if (currentRevision !== revision) {
|
|
44
|
+
revision = currentRevision;
|
|
45
|
+
reverse = new Map();
|
|
46
|
+
for (const [id, root] of deps.registeredEntries())
|
|
47
|
+
reverse.set(root, id);
|
|
48
|
+
}
|
|
49
|
+
let current = object;
|
|
50
|
+
while (current) {
|
|
51
|
+
const id = reverse.get(current);
|
|
52
|
+
if (id !== undefined)
|
|
53
|
+
return id;
|
|
54
|
+
current = current.parent;
|
|
55
|
+
}
|
|
56
|
+
return null;
|
|
57
|
+
};
|
|
58
|
+
};
|
|
59
|
+
const isSelectableCompetitorKind = (kind, deps) => BUILTIN_SELECTABLE_COMPETITOR_KINDS.has(kind) || deps.isRegistrySelectableKind(kind);
|
|
60
|
+
/**
|
|
61
|
+
* Build a classifier for one wall's pointer gate. `selfWallId` is that
|
|
62
|
+
* wall's node id; hits resolving to it are 'self-wall'.
|
|
63
|
+
*/
|
|
64
|
+
export const createWallRayHitClassifier = (selfWallId, deps = liveDeps) => {
|
|
65
|
+
const nearestRegisteredId = createRegisteredObjectLookup(deps);
|
|
66
|
+
return (object) => {
|
|
67
|
+
const ownerId = nearestRegisteredId(object);
|
|
68
|
+
if (ownerId === null)
|
|
69
|
+
return 'passive';
|
|
70
|
+
if (ownerId === selfWallId)
|
|
71
|
+
return 'self-wall';
|
|
72
|
+
const kind = deps.kindOf(ownerId);
|
|
73
|
+
if (kind === undefined)
|
|
74
|
+
return 'passive';
|
|
75
|
+
if (kind === 'wall')
|
|
76
|
+
return 'other-wall';
|
|
77
|
+
return isSelectableCompetitorKind(kind, deps) ? 'selectable' : 'passive';
|
|
78
|
+
};
|
|
79
|
+
};
|
package/dist/wall/system.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"system.d.ts","sourceRoot":"","sources":["../../src/wall/system.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"system.d.ts","sourceRoot":"","sources":["../../src/wall/system.tsx"],"names":[],"mappings":"AAkCA,wBAAgB,wBAAwB,IAAI,IAAI,CAO/C;AAED,wBAAgB,yBAAyB,IAAI,IAAI,CAyChD;AASD;;;;;;;;;;;;;GAaG;AACH,QAAA,MAAM,WAAW,mCAShB,CAAA;AAED,eAAe,WAAW,CAAA"}
|
package/dist/wall/system.js
CHANGED
|
@@ -1,40 +1,81 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { useLiveNodeOverrides, useScene } from '@pascal-app/core';
|
|
4
|
-
import { WallCutout, WallSystem } from '@pascal-app/viewer';
|
|
4
|
+
import { timeSpan, WallCutout, WallSystem } from '@pascal-app/viewer';
|
|
5
5
|
import { useFrame } from '@react-three/fiber';
|
|
6
|
-
import {
|
|
6
|
+
import { useEffect } from 'react';
|
|
7
|
+
import { buildWallTreatmentLevelData, clearWallTreatmentMiterCache, sameTreatmentWalls, treatmentProudKeys, useWallTreatmentLevelData, } from './treatment-level-data';
|
|
7
8
|
import { wallTreatmentProudOffsets } from './treatments';
|
|
8
9
|
import { WallBatchSystem } from './wall-batch-system';
|
|
10
|
+
const levelInputs = new Map();
|
|
11
|
+
let effectiveWalls = new WeakMap();
|
|
12
|
+
let previousNodes;
|
|
13
|
+
let previousOverrides;
|
|
9
14
|
function effectiveWall(wall) {
|
|
10
15
|
const override = useLiveNodeOverrides.getState().get(wall.id);
|
|
11
|
-
|
|
16
|
+
if (!override)
|
|
17
|
+
return wall;
|
|
18
|
+
const cached = effectiveWalls.get(wall);
|
|
19
|
+
if (cached?.override === override)
|
|
20
|
+
return cached.wall;
|
|
21
|
+
const effective = { ...wall, ...override };
|
|
22
|
+
effectiveWalls.set(wall, { override, wall: effective });
|
|
23
|
+
return effective;
|
|
12
24
|
}
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
25
|
+
export function resetWallTreatmentLevels() {
|
|
26
|
+
levelInputs.clear();
|
|
27
|
+
effectiveWalls = new WeakMap();
|
|
28
|
+
previousNodes = undefined;
|
|
29
|
+
previousOverrides = undefined;
|
|
30
|
+
clearWallTreatmentMiterCache();
|
|
31
|
+
useWallTreatmentLevelData.setState({ byLevelId: new Map() });
|
|
32
|
+
}
|
|
33
|
+
export function updateWallTreatmentLevels() {
|
|
34
|
+
const { dirtyNodes, nodes } = useScene.getState();
|
|
35
|
+
const { overrides } = useLiveNodeOverrides.getState();
|
|
36
|
+
const dirtyLevelIds = new Set();
|
|
37
|
+
for (const id of dirtyNodes) {
|
|
38
|
+
const node = nodes[id];
|
|
39
|
+
if (node?.type === 'wall' && node.parentId)
|
|
40
|
+
dirtyLevelIds.add(node.parentId);
|
|
41
|
+
else if (node?.type === 'level')
|
|
42
|
+
dirtyLevelIds.add(node.id);
|
|
43
|
+
}
|
|
44
|
+
// Removed walls and cleared overrides can leave no dirty wall to identify their old level.
|
|
45
|
+
if (nodes !== previousNodes || overrides !== previousOverrides) {
|
|
46
|
+
for (const levelId of levelInputs.keys())
|
|
47
|
+
dirtyLevelIds.add(levelId);
|
|
48
|
+
previousNodes = nodes;
|
|
49
|
+
previousOverrides = overrides;
|
|
50
|
+
}
|
|
51
|
+
for (const levelId of dirtyLevelIds) {
|
|
52
|
+
const level = nodes[levelId];
|
|
53
|
+
if (level?.type !== 'level') {
|
|
54
|
+
levelInputs.delete(levelId);
|
|
55
|
+
clearWallTreatmentMiterCache(levelId);
|
|
56
|
+
useWallTreatmentLevelData.getState().removeLevelData(levelId);
|
|
57
|
+
continue;
|
|
23
58
|
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
59
|
+
const walls = level.children
|
|
60
|
+
.map((id) => nodes[id])
|
|
61
|
+
.filter((node) => node?.type === 'wall')
|
|
62
|
+
.map(effectiveWall);
|
|
63
|
+
const proudOffsets = walls.flatMap(wallTreatmentProudOffsets);
|
|
64
|
+
const proudKey = treatmentProudKeys(proudOffsets).join(',');
|
|
65
|
+
const previous = levelInputs.get(levelId);
|
|
66
|
+
if (previous?.proudKey === proudKey && sameTreatmentWalls(previous.walls, walls))
|
|
67
|
+
continue;
|
|
68
|
+
timeSpan('wall-treatment-level', () => {
|
|
33
69
|
useWallTreatmentLevelData
|
|
34
70
|
.getState()
|
|
35
|
-
.setLevelData(levelId, buildWallTreatmentLevelData(walls, proudOffsets));
|
|
36
|
-
|
|
37
|
-
|
|
71
|
+
.setLevelData(levelId, buildWallTreatmentLevelData(levelId, walls, proudOffsets));
|
|
72
|
+
levelInputs.set(levelId, { walls, proudKey });
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
const WallTreatmentMiterSystem = () => {
|
|
77
|
+
useEffect(() => resetWallTreatmentLevels, []);
|
|
78
|
+
useFrame(updateWallTreatmentLevels, -1);
|
|
38
79
|
return null;
|
|
39
80
|
};
|
|
40
81
|
/**
|
package/dist/wall/tool.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../src/wall/tool.tsx"],"names":[],"mappings":"AA6bA,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../src/wall/tool.tsx"],"names":[],"mappings":"AA6bA,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAuf5B,CAAA;AAED,eAAe,QAAQ,CAAA"}
|
package/dist/wall/tool.js
CHANGED
|
@@ -325,6 +325,7 @@ export const WallTool = () => {
|
|
|
325
325
|
// snapping onto the chain's own segments never reads as a join.
|
|
326
326
|
const chainWallIds = useRef([]);
|
|
327
327
|
const constructionPlane = useRef(null);
|
|
328
|
+
const flatConstructionBase = useRef(false);
|
|
328
329
|
const buildingState = useRef(0);
|
|
329
330
|
const [draftMeasurement, setDraftMeasurement] = useState(null);
|
|
330
331
|
const [axisGuide, setAxisGuide] = useState(null);
|
|
@@ -432,6 +433,7 @@ export const WallTool = () => {
|
|
|
432
433
|
const stopDrafting = () => {
|
|
433
434
|
buildingState.current = 0;
|
|
434
435
|
constructionPlane.current = null;
|
|
436
|
+
flatConstructionBase.current = false;
|
|
435
437
|
chainFirstVertex.current = null;
|
|
436
438
|
chainWallIds.current = [];
|
|
437
439
|
const draftPreview = useFloorplanDraftPreview.getState();
|
|
@@ -545,6 +547,7 @@ export const WallTool = () => {
|
|
|
545
547
|
: null) ?? resolveEventConstructionPlane(event, pointed);
|
|
546
548
|
const plane = resampleTerrainConstructionPlane(resolvedPlane, snappedStart);
|
|
547
549
|
constructionPlane.current = plane;
|
|
550
|
+
flatConstructionBase.current = pointed?.sourceNodeId != null;
|
|
548
551
|
publishHorizontalConstructionPlane(event, plane);
|
|
549
552
|
gridPosition = snappedStart;
|
|
550
553
|
startingPoint.current.set(snappedStart[0], plane.localY, snappedStart[1]);
|
|
@@ -591,6 +594,8 @@ export const WallTool = () => {
|
|
|
591
594
|
preferredSupportSlabId: draftPlane?.supportSlabId ?? null,
|
|
592
595
|
constructionElevation: draftPlane?.elevation ?? null,
|
|
593
596
|
constructionHeight: previewHeightRef.current,
|
|
597
|
+
constructionSourceNodeId: constructionPlane.current?.sourceNodeId ?? null,
|
|
598
|
+
flatConstructionBase: flatConstructionBase.current,
|
|
594
599
|
});
|
|
595
600
|
if (!createdWall)
|
|
596
601
|
return;
|
|
@@ -1,14 +1,19 @@
|
|
|
1
1
|
import { type WallMiterData, type WallNode } from '@pascal-app/core';
|
|
2
|
+
export declare function treatmentProudKeys(proudOffsets: readonly number[]): number[];
|
|
3
|
+
export declare function sameTreatmentWalls(a: readonly WallNode[], b: readonly WallNode[]): boolean;
|
|
2
4
|
export type WallTreatmentLevelData = {
|
|
3
5
|
walls: readonly WallNode[];
|
|
4
6
|
miterDataByProud: ReadonlyMap<number, WallMiterData>;
|
|
5
7
|
};
|
|
6
|
-
export declare function
|
|
8
|
+
export declare function clearWallTreatmentMiterCache(levelId?: string): void;
|
|
9
|
+
export declare function buildWallTreatmentLevelData(levelId: string, walls: readonly WallNode[], proudOffsets: readonly number[]): WallTreatmentLevelData;
|
|
7
10
|
export declare function treatmentMiterDataForProud(levelData: WallTreatmentLevelData, proud: number): WallMiterData | undefined;
|
|
8
11
|
type WallTreatmentLevelDataState = {
|
|
9
12
|
byLevelId: ReadonlyMap<string, WallTreatmentLevelData>;
|
|
10
13
|
setLevelData: (levelId: string, data: WallTreatmentLevelData) => void;
|
|
14
|
+
removeLevelData: (levelId: string) => void;
|
|
11
15
|
};
|
|
16
|
+
export declare function createWallTreatmentSelector(node: WallNode, proudOffsets: readonly number[]): (state: WallTreatmentLevelDataState) => WallTreatmentLevelData | undefined;
|
|
12
17
|
export declare const useWallTreatmentLevelData: import("zustand").UseBoundStore<import("zustand").StoreApi<WallTreatmentLevelDataState>>;
|
|
13
18
|
export {};
|
|
14
19
|
//# sourceMappingURL=treatment-level-data.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"treatment-level-data.d.ts","sourceRoot":"","sources":["../../src/wall/treatment-level-data.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"treatment-level-data.d.ts","sourceRoot":"","sources":["../../src/wall/treatment-level-data.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,aAAa,EAClB,KAAK,QAAQ,EACd,MAAM,kBAAkB,CAAA;AAUzB,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAE5E;AAED,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,SAAS,QAAQ,EAAE,EAAE,CAAC,EAAE,SAAS,QAAQ,EAAE,GAAG,OAAO,CAE1F;AAED,MAAM,MAAM,sBAAsB,GAAG;IACnC,KAAK,EAAE,SAAS,QAAQ,EAAE,CAAA;IAC1B,gBAAgB,EAAE,WAAW,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;CACrD,CAAA;AAID,wBAAgB,4BAA4B,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAGnE;AAED,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,SAAS,QAAQ,EAAE,EAC1B,YAAY,EAAE,SAAS,MAAM,EAAE,GAC9B,sBAAsB,CAwBxB;AAED,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,sBAAsB,EACjC,KAAK,EAAE,MAAM,GACZ,aAAa,GAAG,SAAS,CAE3B;AAED,KAAK,2BAA2B,GAAG;IACjC,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAA;IACtD,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,sBAAsB,KAAK,IAAI,CAAA;IACrE,eAAe,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;CAC3C,CAAA;AAED,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,MAAM,EAAE,IASjF,OAAO,2BAA2B,KAAG,sBAAsB,GAAG,SAAS,CAqChF;AAED,eAAO,MAAM,yBAAyB,0FAenC,CAAA"}
|