import { Behaviour } from "../Component.js";
export type ViewBoxMode = "continuous" | "once";
/**
 * This component can be used to automatically fit a certain box area into the camera view - no matter your screen size or aspect ratio.
 * This is useful for example to frame a character or object in the center of the screen and ensure it is always fully visible. You can also animate or scale the viewbox to create zoom or framing effects.
 *
 * - [Example on needle.run](https://viewbox-demo-z23hmxbz2gkayo-z1nyzm6.needle.run/)
 * - [Scrollytelling Demo using animated Viewbox](https://scrollytelling-bike-z23hmxb2gnu5a.needle.run/)
 * - [Example on Stackblitz](https://stackblitz.com/edit/needle-engine-view-box-example)
 *
 * @example Add a Viewbox component to an object in your scene
 * ```ts
  const viewBox = new Object3D();
  viewBox.scale.set(0, 0, 0);
  viewBox.addComponent(ViewBox, { debug: true });
  scene.add(viewBox);
 * ```
  
 * @summary Automatically fits a box area into the camera view
 * @category Camera
 * @group Components
 * @component
 */
export declare class ViewBox extends Behaviour {
    /**
     * All active ViewBox instances. The last one in the array is the currently active one.
     */
    static readonly instances: ViewBox[];
    /**
     * The reference field of view is used to calculate the box size. This should usually be the same as your camera's fov.
     * @default -1 (meaning it will use the camera fov on the first frame)
     */
    referenceFieldOfView: number;
    /**
     * The mode determines if the viewbox should be applied once or continuously while it is the active viewbox.
     * Options:
     * - "once": The viewbox will be applied once when it becomes the active viewbox. This is useful if you want to fit the view once and then allow the user to zoom or pan freely.
     * - "continuous": The viewbox will be applied continuously while it is the active viewbox. This is useful if you animate or scale the viewbox over time.
    */
    get mode(): ViewBoxMode;
    set mode(v: ViewBoxMode);
    private _mode;
    /**
     * Enable debug logs and rendering for this component instance
     */
    debug: boolean;
    /** @internal */
    onEnable(): void;
    /** @internal */
    onDisable(): void;
    private removeUpdateCallback;
    private static readonly _tempProjectionMatrix;
    private static readonly _tempProjectionMatrixInverse;
    private _applyCount;
    private internalUpdate;
    /**
     * Cover fit
     */
    private fit;
    private projectBoxIntoCamera;
    private _projectedBoxElement;
}
