/**
 * @module viw-webgl-viewer/gizmos/sectionBox
 */
import { Viewer } from '../../viewer';
import * as THREE from 'three';
/**
 * Manages a section box gizmo, serving as a proxy between the renderer and the user.
 *
 * This class:
 *  - Maintains a Three.js `Box3` that defines the clipping region.
 *  - Handles user interaction via {@link BoxInputs}.
 *  - Updates a {@link SectionBoxGizmo} to visualize the clipping box.
 *  - Dispatches signals when the box is resized or interaction state changes.
 */
export declare class SectionBox {
    private _viewer;
    private _gizmos;
    private _inputs;
    private _clip;
    private _visible;
    private _interactive;
    private _onStateChanged;
    private _onBoxConfirm;
    private _onHover;
    /**
     * @internal
     * A convenience getter to the viewer's renderer.
     */
    private get renderer();
    /**
     * @internal
     * A convenience getter to the `Section` module in the renderer.
     */
    private get section();
    /**
     * Dispatches when any of the following properties change:
     * - {@link clip} (clipping planes active)
     * - {@link visible} (gizmo visibility)
     * - {@link interactive} (pointer inputs active)
     */
    get onStateChanged(): import("ste-signals").ISignal;
    /**
     * Dispatches when the user finishes manipulating (dragging) the box.
     * The payload is the final {@link THREE.Box3} used for clipping.
     */
    get onBoxConfirm(): import("ste-simple-events").ISimpleEvent<THREE.Box3>;
    /**
     * Dispatches a boolean indicating pointer hover state on the box handles:
     *  - `true` if the pointer has entered a handle
     *  - `false` if it has left or no handle is hovered
     */
    get onHover(): import("ste-simple-events").ISimpleEvent<boolean>;
    /**
     * Creates a new SectionBox gizmo controller.
     *
     * @param viewer - The parent {@link Viewer} in which the section box is rendered.
     */
    constructor(viewer: Viewer);
    /**
     * The shared bounding box that defines the section region.
     *
     * To programmatically update the box, see {@link fitBox}.
     */
    get box(): THREE.Box3;
    /**
     * Determines whether the section gizmo applies clipping planes to the model.
     *
     * When `true`, `renderer.section.active` is enabled.
     */
    get clip(): boolean;
    set clip(value: boolean);
    /**
     * Determines whether the gizmo is interactive (i.e. responds to pointer events).
     *
     * When `true`, pointer events are registered and box handles can be dragged.
     */
    get interactive(): boolean;
    set interactive(value: boolean);
    /**
     * Determines whether the section box gizmo is visible in the scene.
     */
    get visible(): boolean;
    set visible(value: boolean);
    /**
     * Resizes the section gizmo to match the given box, optionally expanded by a padding.
     * After resizing, this method also updates the renderer's clipping box.
     *
     * @param box - The bounding box to match (required).
     * @param padding - The scalar amount by which to expand the bounding box. Default is `1`.
     */
    fitBox(box: THREE.Box3): void;
    /**
     * Updates the section box to match the current size of `this.section.box`.
     *
     * Call this if the renderer's section box is changed by code outside this class.
     */
    update(): void;
    /**
     * Disposes of the gizmo and input event listeners, cleaning up related resources.
     *
     * After disposal, this `SectionBox` instance should no longer be used.
     */
    dispose(): void;
}
