import { Object3D, Vector3Like } from "three";
import { Context } from "../engine/engine_context.js";
import { Vec3 } from "../engine/engine_types.js";
import { Behaviour } from "./Component.js";
type FitParameters = {
    object?: Object3D | Object3D[];
    positionOffset?: Partial<Vector3Like>;
    scaleFactor?: Partial<Vector3Like>;
};
/**
 * [ContactShadows](https://engine.needle.tools/docs/api/ContactShadows) renders proximity-based soft shadows on flat surfaces.
 * Ideal for products or objects that need visual grounding without real-time shadows.
 * Produces soft, blurred shadows that hug the ground, giving a sense of contact and depth.
 *
 * ![](https://cloud.needle.tools/-/media/87bPTNXHcsbV-An-oSEvHQ.gif)
 *
 * **Setup options:**
 * 1. `ContactShadows.auto(context)` - Auto-create and fit to scene
 * 2. Add component manually to control position and scale
 * 3. HTML attribute: `<needle-engine contactshadows="0.7">`
 *
 * **Properties:**
 * - `opacity` / `darkness` - Shadow intensity
 * - `blur` - Softness of shadow edges
 * - Object scale defines shadow area size
 *
 * **Debug:** Use `?debugcontactshadows` URL parameter.
 *
 *
 * @example Auto-create contact shadows
 * ```ts
 * const shadows = ContactShadows.auto(this.context);
 * shadows.opacity = 0.5;
 * shadows.darkness = 0.8;
 * ```
 *
 * @summary Display contact shadows on the ground
 * @category Rendering
 * @group Components
 * @see {@link ShadowCatcher} for real-time shadows from lights (more accurate, higher performance cost)
 * @see {@link Light} for real-time shadow casting
 * @see {@link Renderer} for material/rendering control
 * @link https://engine.needle.tools/samples/contact-shadows for a demo of contact shadows
 */
export declare class ContactShadows extends Behaviour {
    private static readonly _instances;
    /**
     * Create contact shadows for the scene. Automatically fits the shadows to the scene.
     * The instance of contact shadows will be created only once.
     * @param context The context to create the contact shadows in.
     * @returns The instance of the contact shadows.
     */
    static auto(context?: Context, params?: FitParameters): ContactShadows;
    /**
     * When enabled the contact shadows component will be created to fit the whole scene.
     * @default false
     */
    autoFit: boolean;
    /**
     * Darkness of the shadows.
     * @default 0.5
     */
    darkness: number;
    /**
     * Opacity of the shadows.
     * @default 0.5
     */
    opacity: number;
    /**
     * Blur of the shadows.
     * @default 4.0
     */
    blur: number;
    /**
     * When enabled objects will not be visible below the shadow plane
     * @default false
     */
    occludeBelowGround: boolean;
    /**
     * When enabled the backfaces of objects will cast shadows as well.
     * @default true
     */
    backfaceShadows: boolean;
    /**
     * The minimum size of the shadows box
     * @default undefined
     */
    minSize?: Partial<Vec3>;
    /**
     * When enabled the shadows will not be updated automatically. Use `needsUpdate()` to update the shadows manually.
     * This is useful when you want to update the shadows only when the scene changes.
     * @default false
     */
    manualUpdate: boolean;
    /**
     * Call this method to update the shadows manually. The update will be done in the next frame.
     */
    set needsUpdate(val: boolean);
    get needsUpdate(): boolean;
    private _needsUpdate;
    /** All shadow objects are parented to this object.
     * The gameObject itself should not be transformed because we want the ContactShadows object e.g. also have a GroundProjectedEnv component
     * in which case ContactShadows scale would affect the projection
     **/
    private readonly shadowsRoot;
    private shadowCamera?;
    private readonly shadowGroup;
    private renderTarget?;
    private renderTargetBlur?;
    private plane?;
    private occluderMesh?;
    private blurPlane?;
    private planeMaterial?;
    private depthMaterial?;
    private horizontalBlurMaterial?;
    private verticalBlurMaterial?;
    private textureSize;
    /**
     * Call to fit the shadows to the scene.
     */
    fitShadows(params?: FitParameters): void;
    /** @internal */
    awake(): void;
    /** @internal */
    start(): void;
    onEnable(): void;
    /** @internal */
    onDestroy(): void;
    /** @internal */
    onBeforeRender(_frame: XRFrame | null): void;
    private blurShadow;
    private applyMinSize;
}
export {};
